refactor: move to tslog
This commit is contained in:
@@ -24,7 +24,7 @@ async function main() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const swcClient = SwClientFactory.memCacheClient(arweave);
|
const swcClient = SwClientFactory.memCacheClient(arweave);
|
||||||
LoggerFactory.INST.logLevel('debug');
|
LoggerFactory.INST.logLevel('trace');
|
||||||
|
|
||||||
const contractTxId = 'W_njBtwDRyltjVU1RizJtZfF0S_4X3aSrrrA0HUEhUs';
|
const contractTxId = 'W_njBtwDRyltjVU1RizJtZfF0S_4X3aSrrrA0HUEhUs';
|
||||||
const contractTxId2 = 'TMkCZKYO3GwcTLEKGgWSJegIlYCHi_UArtG0unCi2xA';
|
const contractTxId2 = 'TMkCZKYO3GwcTLEKGgWSJegIlYCHi_UArtG0unCi2xA';
|
||||||
|
|||||||
@@ -215,7 +215,7 @@ async function main() {
|
|||||||
logger.info('skipping ', contractTxId);
|
logger.info('skipping ', contractTxId);
|
||||||
errorContractTxIds.push(contractTxId);
|
errorContractTxIds.push(contractTxId);
|
||||||
} finally {
|
} finally {
|
||||||
logger.debug('Contracts with different states: %o', differentStatesContractTxIds);
|
logger.debug('Contracts with different states:', differentStatesContractTxIds);
|
||||||
logger.info('\n\n ==== END');
|
logger.info('\n\n ==== END');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -268,7 +268,7 @@ async function getNextPage(arweave, variables) {
|
|||||||
variables
|
variables
|
||||||
});
|
});
|
||||||
|
|
||||||
logger.verbose('Status:', response.status);
|
logger.debug('Status:', response.status);
|
||||||
if (response.status !== 200) {
|
if (response.status !== 200) {
|
||||||
throw new Error('Wrong response from Ar GQL');
|
throw new Error('Wrong response from Ar GQL');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -113,7 +113,7 @@ async function main() {
|
|||||||
const sortedContracts = {};
|
const sortedContracts = {};
|
||||||
sortable.forEach((item) => (sortedContracts[item[0]] = item[1]));
|
sortable.forEach((item) => (sortedContracts[item[0]] = item[1]));
|
||||||
|
|
||||||
logger.debug('%o', sortedContracts);
|
logger.debug(sortedContracts);
|
||||||
|
|
||||||
fs.writeFileSync(path.join(__dirname, `swc-sorted-stats.json`), JSON.stringify(sortedContracts));
|
fs.writeFileSync(path.join(__dirname, `swc-sorted-stats.json`), JSON.stringify(sortedContracts));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,6 +49,7 @@
|
|||||||
"bignumber.js": "^9.0.1",
|
"bignumber.js": "^9.0.1",
|
||||||
"bson": "^4.5.0",
|
"bson": "^4.5.0",
|
||||||
"json-beautify": "^1.1.1",
|
"json-beautify": "^1.1.1",
|
||||||
|
"tslog": "^3.2.1",
|
||||||
"winston": "^3.3.3"
|
"winston": "^3.3.3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|||||||
2
src/cache/impl/BsonFileBlockHeightCache.ts
vendored
2
src/cache/impl/BsonFileBlockHeightCache.ts
vendored
@@ -91,7 +91,7 @@ export class BsonFileBlockHeightSwCache<V = any> implements BlockHeightSwCache<V
|
|||||||
|
|
||||||
// TODO: switch to async, as currently writing cache files may slow down contract execution.
|
// TODO: switch to async, as currently writing cache files may slow down contract execution.
|
||||||
try {
|
try {
|
||||||
logger.verbose(`==== Storing cache update [${Object.keys(this.updatedStorage).length}] ====`);
|
logger.debug(`==== Storing cache update [${Object.keys(this.updatedStorage).length}] ====`);
|
||||||
const directoryPath = this.basePath;
|
const directoryPath = this.basePath;
|
||||||
Object.keys(this.updatedStorage).forEach((key) => {
|
Object.keys(this.updatedStorage).forEach((key) => {
|
||||||
const directory = key;
|
const directory = key;
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ export class HandlerBasedSwcClient implements SwcClient {
|
|||||||
currentTx?: { interactionTxId: string; contractTxId: string }[],
|
currentTx?: { interactionTxId: string; contractTxId: string }[],
|
||||||
evaluationOptions?: EvaluationOptions
|
evaluationOptions?: EvaluationOptions
|
||||||
): Promise<EvalStateResult<State>> {
|
): Promise<EvalStateResult<State>> {
|
||||||
logger.info('Read state for %s', contractTxId);
|
logger.info(`Read state for ${contractTxId}`);
|
||||||
logger.profile('Creating execution context');
|
logger.profile('Creating execution context');
|
||||||
const executionContext = await this.createExecutionContext(contractTxId, blockHeight, evaluationOptions);
|
const executionContext = await this.createExecutionContext(contractTxId, blockHeight, evaluationOptions);
|
||||||
logger.profile('Creating execution context');
|
logger.profile('Creating execution context');
|
||||||
@@ -62,7 +62,7 @@ export class HandlerBasedSwcClient implements SwcClient {
|
|||||||
blockHeight?: number,
|
blockHeight?: number,
|
||||||
evaluationOptions?: EvaluationOptions
|
evaluationOptions?: EvaluationOptions
|
||||||
): Promise<InteractionResult<any, View>> {
|
): Promise<InteractionResult<any, View>> {
|
||||||
logger.info('View state for %s', contractTxId);
|
logger.info(`View state for ${contractTxId}`);
|
||||||
logger.profile('Creating execution context');
|
logger.profile('Creating execution context');
|
||||||
let executionContext = await this.createExecutionContext(contractTxId, blockHeight, evaluationOptions);
|
let executionContext = await this.createExecutionContext(contractTxId, blockHeight, evaluationOptions);
|
||||||
logger.profile('Creating execution context');
|
logger.profile('Creating execution context');
|
||||||
@@ -121,7 +121,7 @@ export class HandlerBasedSwcClient implements SwcClient {
|
|||||||
transaction: InteractionTx,
|
transaction: InteractionTx,
|
||||||
evaluationOptions?: EvaluationOptions
|
evaluationOptions?: EvaluationOptions
|
||||||
): Promise<InteractionResult<any, View>> {
|
): Promise<InteractionResult<any, View>> {
|
||||||
logger.info('Vies state for %s %o', contractTxId, transaction);
|
logger.info(`Vies state for ${contractTxId}`, transaction);
|
||||||
logger.profile('Creating execution context');
|
logger.profile('Creating execution context');
|
||||||
const executionContext = await this.createExecutionContextFromTx(contractTxId, transaction);
|
const executionContext = await this.createExecutionContextFromTx(contractTxId, transaction);
|
||||||
logger.profile('Creating execution context');
|
logger.profile('Creating execution context');
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ export class ContractDefinitionLoader<State = any> implements DefinitionLoader<S
|
|||||||
|
|
||||||
async load(contractTxId: string, forcedSrcTxId?: string): Promise<ContractDefinition<State>> {
|
async load(contractTxId: string, forcedSrcTxId?: string): Promise<ContractDefinition<State>> {
|
||||||
if (!forcedSrcTxId && this.cache?.contains(contractTxId)) {
|
if (!forcedSrcTxId && this.cache?.contains(contractTxId)) {
|
||||||
logger.verbose('ContractDefinitionLoader: Hit from cache!');
|
logger.debug('ContractDefinitionLoader: Hit from cache!');
|
||||||
return Promise.resolve(this.cache?.get(contractTxId));
|
return Promise.resolve(this.cache?.get(contractTxId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -94,7 +94,7 @@ export class ContractInteractionsLoader implements InteractionsLoader {
|
|||||||
txInfos.push(...transactions.edges.filter((tx) => !tx.node.parent || !tx.node.parent.id));
|
txInfos.push(...transactions.edges.filter((tx) => !tx.node.parent || !tx.node.parent.id));
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.verbose('All interactions: %s', txInfos.length);
|
logger.debug('All interactions:', txInfos.length);
|
||||||
|
|
||||||
return txInfos;
|
return txInfos;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,14 +47,11 @@ export class DefaultStateEvaluator<State = unknown> implements StateEvaluator<St
|
|||||||
const validity = JSON.parse(JSON.stringify(baseState.validity));
|
const validity = JSON.parse(JSON.stringify(baseState.validity));
|
||||||
|
|
||||||
logger.info(
|
logger.info(
|
||||||
'Evaluating state for %s [%s non-cached of %s all]',
|
`Evaluating state for ${executionContext.contractDefinition.txId} [${missingInteractions.length} non-cached of ${executionContext.sortedInteractions.length} all]`
|
||||||
executionContext.contractDefinition.txId,
|
|
||||||
missingInteractions.length,
|
|
||||||
executionContext.sortedInteractions.length
|
|
||||||
);
|
);
|
||||||
|
|
||||||
for (const missingInteraction of missingInteractions) {
|
for (const missingInteraction of missingInteractions) {
|
||||||
logger.verbose(
|
logger.debug(
|
||||||
`${missingInteraction.node.id}: ${missingInteractions.indexOf(missingInteraction) + 1}/${
|
`${missingInteraction.node.id}: ${missingInteractions.indexOf(missingInteraction) + 1}/${
|
||||||
missingInteractions.length
|
missingInteractions.length
|
||||||
} [of all:${executionContext.sortedInteractions.length}]`
|
} [of all:${executionContext.sortedInteractions.length}]`
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ export class HandlerExecutorFactory<State = any> implements ExecutorFactory<Stat
|
|||||||
try {
|
try {
|
||||||
const stateCopy = JSON.parse(JSON.stringify(state));
|
const stateCopy = JSON.parse(JSON.stringify(state));
|
||||||
swGlobal._activeTx = interactionTx;
|
swGlobal._activeTx = interactionTx;
|
||||||
logger.debug('SmartWeave.contract.id: %s', swGlobal.contract.id);
|
logger.debug(`SmartWeave.contract.id: ${swGlobal.contract.id}`, swGlobal.contract.id);
|
||||||
|
|
||||||
self.assignReadContractState(swGlobal, contractDefinition, interaction, executionContext, currentTx);
|
self.assignReadContractState(swGlobal, contractDefinition, interaction, executionContext, currentTx);
|
||||||
self.assignViewContractState(swGlobal, contractDefinition, executionContext);
|
self.assignViewContractState(swGlobal, contractDefinition, executionContext);
|
||||||
@@ -99,7 +99,7 @@ export class HandlerExecutorFactory<State = any> implements ExecutorFactory<Stat
|
|||||||
executionContext: ExecutionContext<State, HandlerApi<State>>
|
executionContext: ExecutionContext<State, HandlerApi<State>>
|
||||||
) {
|
) {
|
||||||
swGlobal.contracts.viewContractState = async <View>(contractTxId: string, input: any) => {
|
swGlobal.contracts.viewContractState = async <View>(contractTxId: string, input: any) => {
|
||||||
logger.verbose('swGlobal.viewContractState call: %o', {
|
logger.debug('swGlobal.viewContractState call:', {
|
||||||
from: contractDefinition.txId,
|
from: contractDefinition.txId,
|
||||||
to: contractTxId,
|
to: contractTxId,
|
||||||
input
|
input
|
||||||
@@ -116,7 +116,7 @@ export class HandlerExecutorFactory<State = any> implements ExecutorFactory<Stat
|
|||||||
currentTx: { interactionTxId: string; contractTxId: string }[]
|
currentTx: { interactionTxId: string; contractTxId: string }[]
|
||||||
) {
|
) {
|
||||||
swGlobal.contracts.readContractState = async (contractTxId: string, height?: number, returnValidity?: boolean) => {
|
swGlobal.contracts.readContractState = async (contractTxId: string, height?: number, returnValidity?: boolean) => {
|
||||||
logger.verbose('swGlobal.readContractState call: ', {
|
logger.debug('swGlobal.readContractState call: ', {
|
||||||
from: contractDefinition.txId,
|
from: contractDefinition.txId,
|
||||||
to: contractTxId,
|
to: contractTxId,
|
||||||
interaction
|
interaction
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ export class CacheableContractInteractionsLoader implements InteractionsLoader {
|
|||||||
) {}
|
) {}
|
||||||
|
|
||||||
async load(contractId: string, blockHeight: number): Promise<GQLEdgeInterface[]> {
|
async load(contractId: string, blockHeight: number): Promise<GQLEdgeInterface[]> {
|
||||||
logger.debug('Loading interactions %o', {
|
logger.debug('Loading interactions', {
|
||||||
contractId,
|
contractId,
|
||||||
blockHeight
|
blockHeight
|
||||||
});
|
});
|
||||||
@@ -24,7 +24,7 @@ export class CacheableContractInteractionsLoader implements InteractionsLoader {
|
|||||||
const cached = this.cache.get(contractId, blockHeight);
|
const cached = this.cache.get(contractId, blockHeight);
|
||||||
|
|
||||||
if (cached !== null) {
|
if (cached !== null) {
|
||||||
logger.verbose('InteractionsLoader - hit from cache!');
|
logger.debug('InteractionsLoader - hit from cache!');
|
||||||
return cached.cachedValue;
|
return cached.cachedValue;
|
||||||
} else {
|
} else {
|
||||||
const result = await this.baseImplementation.load(contractId, blockHeight);
|
const result = await this.baseImplementation.load(contractId, blockHeight);
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ export class CacheableExecutorFactory<State, Api> implements ExecutorFactory<Sta
|
|||||||
// with the same source).
|
// with the same source).
|
||||||
const cacheKey = contractDefinition.txId;
|
const cacheKey = contractDefinition.txId;
|
||||||
if (!this.cache.contains(cacheKey)) {
|
if (!this.cache.contains(cacheKey)) {
|
||||||
logger.verbose('Updating executor factory cache');
|
logger.debug('Updating executor factory cache');
|
||||||
const handler = await this.baseImplementation.create(contractDefinition);
|
const handler = await this.baseImplementation.create(contractDefinition);
|
||||||
this.cache.put(cacheKey, handler);
|
this.cache.put(cacheKey, handler);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ export class CacheableStateEvaluator<State> extends DefaultStateEvaluator<State>
|
|||||||
currentTx: { interactionTxId: string; contractTxId: string }[]
|
currentTx: { interactionTxId: string; contractTxId: string }[]
|
||||||
): Promise<EvalStateResult<State>> {
|
): Promise<EvalStateResult<State>> {
|
||||||
const requestedBlockHeight = executionContext.blockHeight;
|
const requestedBlockHeight = executionContext.blockHeight;
|
||||||
logger.verbose(`Requested state block height: ${requestedBlockHeight}`);
|
logger.debug(`Requested state block height: ${requestedBlockHeight}`);
|
||||||
|
|
||||||
let cachedState: BlockHeightCacheResult<EvalStateResult<State>> | null = null;
|
let cachedState: BlockHeightCacheResult<EvalStateResult<State>> | null = null;
|
||||||
|
|
||||||
@@ -45,7 +45,7 @@ export class CacheableStateEvaluator<State> extends DefaultStateEvaluator<State>
|
|||||||
cachedState = this.cache.getLessOrEqual(executionContext.contractDefinition.txId, requestedBlockHeight);
|
cachedState = this.cache.getLessOrEqual(executionContext.contractDefinition.txId, requestedBlockHeight);
|
||||||
|
|
||||||
if (cachedState != null) {
|
if (cachedState != null) {
|
||||||
logger.verbose(`Cached state for ${executionContext.contractDefinition.txId} %o`, {
|
logger.debug(`Cached state for ${executionContext.contractDefinition.txId}`, {
|
||||||
block: cachedState.cachedHeight,
|
block: cachedState.cachedHeight,
|
||||||
requestedBlockHeight
|
requestedBlockHeight
|
||||||
});
|
});
|
||||||
@@ -57,7 +57,7 @@ export class CacheableStateEvaluator<State> extends DefaultStateEvaluator<State>
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.verbose(`Interactions until [${requestedBlockHeight}] %o`, {
|
logger.debug(`Interactions until [${requestedBlockHeight}]`, {
|
||||||
total: sortedInteractionsUpToBlock.length,
|
total: sortedInteractionsUpToBlock.length,
|
||||||
cached: sortedInteractionsUpToBlock.length - missingInteractions.length
|
cached: sortedInteractionsUpToBlock.length - missingInteractions.length
|
||||||
});
|
});
|
||||||
@@ -72,7 +72,7 @@ export class CacheableStateEvaluator<State> extends DefaultStateEvaluator<State>
|
|||||||
if (entry.contractTxId === executionContext.contractDefinition.txId) {
|
if (entry.contractTxId === executionContext.contractDefinition.txId) {
|
||||||
const index = missingInteractions.findIndex((tx) => tx.node.id === entry.interactionTxId);
|
const index = missingInteractions.findIndex((tx) => tx.node.id === entry.interactionTxId);
|
||||||
if (index !== -1) {
|
if (index !== -1) {
|
||||||
logger.verbose('Inf. Loop fix - removing interaction %o', {
|
logger.debug('Inf. Loop fix - removing interaction', {
|
||||||
contractTxId: entry.contractTxId,
|
contractTxId: entry.contractTxId,
|
||||||
interactionTxId: entry.interactionTxId
|
interactionTxId: entry.interactionTxId
|
||||||
});
|
});
|
||||||
@@ -83,7 +83,7 @@ export class CacheableStateEvaluator<State> extends DefaultStateEvaluator<State>
|
|||||||
|
|
||||||
// if cache is up-to date - return immediately to speed-up the whole process
|
// if cache is up-to date - return immediately to speed-up the whole process
|
||||||
if (missingInteractions.length === 0 && cachedState) {
|
if (missingInteractions.length === 0 && cachedState) {
|
||||||
logger.verbose(`State up to requested height [${requestedBlockHeight}] fully cached!`);
|
logger.debug(`State up to requested height [${requestedBlockHeight}] fully cached!`);
|
||||||
return cachedState.cachedValue;
|
return cachedState.cachedValue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ export class Evolve<State extends EvolveCompatibleState, Api> implements Executi
|
|||||||
|
|
||||||
async modify(state: State, executionContext: ExecutionContext<State, Api>): Promise<ExecutionContext<State, Api>> {
|
async modify(state: State, executionContext: ExecutionContext<State, Api>): Promise<ExecutionContext<State, Api>> {
|
||||||
const contractTxId = executionContext.contractDefinition.txId;
|
const contractTxId = executionContext.contractDefinition.txId;
|
||||||
logger.verbose(`trying to evolve for: ${contractTxId}`);
|
logger.debug(`trying to evolve for: ${contractTxId}`);
|
||||||
const currentSrcTxId = executionContext.contractDefinition.srcTxId;
|
const currentSrcTxId = executionContext.contractDefinition.srcTxId;
|
||||||
|
|
||||||
const settings =
|
const settings =
|
||||||
@@ -60,7 +60,7 @@ export class Evolve<State extends EvolveCompatibleState, Api> implements Executi
|
|||||||
canEvolve = true;
|
canEvolve = true;
|
||||||
}
|
}
|
||||||
if (evolve && /[a-z0-9_-]{43}/i.test(evolve) && canEvolve) {
|
if (evolve && /[a-z0-9_-]{43}/i.test(evolve) && canEvolve) {
|
||||||
logger.debug('Checking evolve: %o', {
|
logger.debug('Checking evolve:', {
|
||||||
current: currentSrcTxId,
|
current: currentSrcTxId,
|
||||||
evolve
|
evolve
|
||||||
});
|
});
|
||||||
@@ -68,7 +68,7 @@ export class Evolve<State extends EvolveCompatibleState, Api> implements Executi
|
|||||||
if (currentSrcTxId !== evolve) {
|
if (currentSrcTxId !== evolve) {
|
||||||
try {
|
try {
|
||||||
// note: that's really nasty IMO - loading original contract definition, but forcing different sourceTxId...
|
// note: that's really nasty IMO - loading original contract definition, but forcing different sourceTxId...
|
||||||
logger.info('Evolving to: %s', evolve);
|
logger.info(`Evolving to: ${evolve}`);
|
||||||
const newContractDefinition = await this.definitionLoader.load(contractTxId, evolve);
|
const newContractDefinition = await this.definitionLoader.load(contractTxId, evolve);
|
||||||
const newHandler = await this.executorFactory.create(newContractDefinition);
|
const newHandler = await this.executorFactory.create(newContractDefinition);
|
||||||
|
|
||||||
@@ -77,7 +77,7 @@ export class Evolve<State extends EvolveCompatibleState, Api> implements Executi
|
|||||||
contractDefinition: newContractDefinition,
|
contractDefinition: newContractDefinition,
|
||||||
handler: newHandler
|
handler: newHandler
|
||||||
};
|
};
|
||||||
logger.verbose('evolved to: %o', {
|
logger.debug('evolved to:', {
|
||||||
txId: modifiedContext.contractDefinition.txId,
|
txId: modifiedContext.contractDefinition.txId,
|
||||||
srcTxId: modifiedContext.contractDefinition.srcTxId
|
srcTxId: modifiedContext.contractDefinition.srcTxId
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -5252,7 +5252,7 @@ smartweave@^0.4.41:
|
|||||||
sentencer "^0.2.1"
|
sentencer "^0.2.1"
|
||||||
yargs "^16.2.0"
|
yargs "^16.2.0"
|
||||||
|
|
||||||
source-map-support@^0.5.6:
|
source-map-support@^0.5.19, source-map-support@^0.5.6:
|
||||||
version "0.5.19"
|
version "0.5.19"
|
||||||
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"
|
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"
|
||||||
integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==
|
integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==
|
||||||
@@ -5748,6 +5748,13 @@ tslib@^2.1.0:
|
|||||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01"
|
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01"
|
||||||
integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==
|
integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==
|
||||||
|
|
||||||
|
tslog@^3.2.1:
|
||||||
|
version "3.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/tslog/-/tslog-3.2.1.tgz#37df1301211901eb65fd61b9ad7c8554264a7699"
|
||||||
|
integrity sha512-m8wAtox9wt+h6UDcN1WAQnYwRDOGhMIOp+GAuuufo8T8qKuu726i2W3r47BrA69goVOwgUkp5YwDTvAxTktvPg==
|
||||||
|
dependencies:
|
||||||
|
source-map-support "^0.5.19"
|
||||||
|
|
||||||
tsscmp@1.0.6:
|
tsscmp@1.0.6:
|
||||||
version "1.0.6"
|
version "1.0.6"
|
||||||
resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb"
|
resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb"
|
||||||
|
|||||||
Reference in New Issue
Block a user