@distrohelena/canton-typescript-sdk 0.1.5 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +333 -1
- package/dist/client/canton-client-options.d.ts +3 -0
- package/dist/client/canton-client-options.js +2 -0
- package/dist/client/service-registry.js +3 -2
- package/dist/core/errors/grpc-transport-error.d.ts +14 -0
- package/dist/core/errors/grpc-transport-error.js +76 -0
- package/dist/core/signing/command-signer.interface.d.ts +2 -0
- package/dist/core/transports/transport.interface.d.ts +2 -2
- package/dist/core/types/canton-hash-purpose.d.ts +2 -1
- package/dist/core/types/canton-hash-purpose.js +1 -0
- package/dist/core/types/daml-numeric.d.ts +6 -0
- package/dist/core/types/daml-numeric.js +14 -0
- package/dist/core/types/daml-party.d.ts +6 -0
- package/dist/core/types/daml-party.js +14 -0
- package/dist/core/types/disclosed-contract.d.ts +13 -0
- package/dist/core/types/disclosed-contract.js +15 -0
- package/dist/core/types/requests/create-decentralized-party-request.d.ts +41 -0
- package/dist/core/types/requests/create-decentralized-party-request.js +82 -0
- package/dist/core/types/requests/create-external-party-request.d.ts +42 -0
- package/dist/core/types/requests/create-external-party-request.js +47 -0
- package/dist/core/types/requests/finalize-decentralized-party-request.d.ts +39 -0
- package/dist/core/types/requests/finalize-decentralized-party-request.js +42 -0
- package/dist/core/types/requests/get-active-contracts-page-request.d.ts +15 -2
- package/dist/core/types/requests/get-active-contracts-page-request.js +4 -0
- package/dist/core/types/requests/submit-command-request.d.ts +5 -0
- package/dist/core/types/requests/submit-command-request.js +4 -0
- package/dist/core/types/topology/topology-signature-format.d.ts +2 -1
- package/dist/core/types/topology/topology-signature-format.js +1 -0
- package/dist/daml-lf/container/dar-archive-entry.d.ts +8 -0
- package/dist/daml-lf/container/dar-archive-entry.js +8 -0
- package/dist/daml-lf/container/dar-archive-loader.js +14 -0
- package/dist/daml-lf/container/dar-archive.d.ts +6 -0
- package/dist/daml-lf/container/dar-archive.js +4 -0
- package/dist/daml-lf/container/dar-source-bundle-loader.d.ts +5 -0
- package/dist/daml-lf/container/dar-source-bundle-loader.js +33 -0
- package/dist/daml-lf/container/dar-source-bundle.d.ts +45 -0
- package/dist/daml-lf/container/dar-source-bundle.js +11 -0
- package/dist/daml-lf/container/dar-source-file-entry.d.ts +8 -0
- package/dist/daml-lf/container/dar-source-file-entry.js +8 -0
- package/dist/daml-lf/daml-lf-compilation.d.ts +12 -0
- package/dist/daml-lf/daml-lf-compilation.js +35 -0
- package/dist/daml-lf/index.d.ts +11 -0
- package/dist/daml-lf/index.js +10 -0
- package/dist/daml-lf/interpreter/daml-lf-builtin-dispatch.d.ts +43 -0
- package/dist/daml-lf/interpreter/daml-lf-builtin-dispatch.js +933 -0
- package/dist/daml-lf/interpreter/daml-lf-evaluator.d.ts +95 -0
- package/dist/daml-lf/interpreter/daml-lf-evaluator.js +1131 -0
- package/dist/daml-lf/interpreter/daml-lf-interpreter-scaffold.d.ts +3 -0
- package/dist/daml-lf/interpreter/daml-lf-interpreter-scaffold.js +6 -1
- package/dist/daml-lf/interpreter/daml-lf-lexical-scope.d.ts +13 -0
- package/dist/daml-lf/interpreter/daml-lf-lexical-scope.js +46 -0
- package/dist/daml-lf/interpreter/daml-lf-runtime-frame.d.ts +16 -0
- package/dist/daml-lf/interpreter/daml-lf-runtime-frame.js +15 -0
- package/dist/daml-lf/interpreter/daml-lf-runtime-value.d.ts +21 -0
- package/dist/daml-lf/interpreter/daml-lf-runtime-value.js +4 -1
- package/dist/daml-lf/interpreter/daml-lf-step-kind.d.ts +7 -0
- package/dist/daml-lf/interpreter/daml-lf-step-kind.js +8 -0
- package/dist/daml-lf/interpreter/daml-lf-trace-sink.interface.d.ts +30 -0
- package/dist/daml-lf/interpreter/daml-lf-trace-sink.interface.js +1 -0
- package/dist/daml-lf/model/daml-lf-builtin-type.d.ts +3 -0
- package/dist/daml-lf/model/daml-lf-builtin-type.js +3 -0
- package/dist/daml-lf/model/daml-lf-choice.d.ts +5 -0
- package/dist/daml-lf/model/daml-lf-choice.js +4 -0
- package/dist/daml-lf/model/daml-lf-expression-path.d.ts +2 -0
- package/dist/daml-lf/model/daml-lf-expression-path.js +81 -0
- package/dist/daml-lf/model/daml-lf-expression.d.ts +146 -0
- package/dist/daml-lf/model/daml-lf-expression.js +71 -0
- package/dist/daml-lf/model/daml-lf-template.d.ts +2 -0
- package/dist/daml-lf/model/daml-lf-template.js +2 -0
- package/dist/daml-lf/model/daml-lf-type.d.ts +2 -0
- package/dist/daml-lf/model/daml-lf-type.js +4 -0
- package/dist/daml-lf/model/lf-2-model-mapper.d.ts +5 -0
- package/dist/daml-lf/model/lf-2-model-mapper.js +445 -12
- package/dist/debugger/errors/replay-determinism.exception.d.ts +3 -0
- package/dist/debugger/errors/replay-determinism.exception.js +3 -0
- package/dist/debugger/errors/replay-missing-package.exception.d.ts +3 -0
- package/dist/debugger/errors/replay-missing-package.exception.js +3 -0
- package/dist/debugger/errors/replay-missing-source.exception.d.ts +3 -0
- package/dist/debugger/errors/replay-missing-source.exception.js +3 -0
- package/dist/debugger/errors/replay-source-map.exception.d.ts +3 -0
- package/dist/debugger/errors/replay-source-map.exception.js +3 -0
- package/dist/debugger/errors/replay-state-hydration.exception.d.ts +3 -0
- package/dist/debugger/errors/replay-state-hydration.exception.js +3 -0
- package/dist/debugger/errors/replay-unsupported-lf-construct.exception.d.ts +3 -0
- package/dist/debugger/errors/replay-unsupported-lf-construct.exception.js +3 -0
- package/dist/debugger/errors/replay-unsupported-update.exception.d.ts +3 -0
- package/dist/debugger/errors/replay-unsupported-update.exception.js +3 -0
- package/dist/debugger/index.d.ts +31 -0
- package/dist/debugger/index.js +31 -0
- package/dist/debugger/ledger-replay-debugger-client.d.ts +31 -0
- package/dist/debugger/ledger-replay-debugger-client.js +53 -0
- package/dist/debugger/replay/ledger-replay-environment-builder.d.ts +95 -0
- package/dist/debugger/replay/ledger-replay-environment-builder.js +249 -0
- package/dist/debugger/replay/ledger-replay-session-loader.d.ts +78 -0
- package/dist/debugger/replay/ledger-replay-session-loader.js +565 -0
- package/dist/debugger/replay/replay-artifact-resolver.d.ts +30 -0
- package/dist/debugger/replay/replay-artifact-resolver.js +210 -0
- package/dist/debugger/replay/replay-determinism-validator.d.ts +12 -0
- package/dist/debugger/replay/replay-determinism-validator.js +161 -0
- package/dist/debugger/replay/replay-entrypoint-definition-resolver.d.ts +40 -0
- package/dist/debugger/replay/replay-entrypoint-definition-resolver.js +337 -0
- package/dist/debugger/replay/replay-entrypoint.d.ts +22 -0
- package/dist/debugger/replay/replay-entrypoint.js +14 -0
- package/dist/debugger/replay/replay-ledger-value-normalizer.d.ts +7 -0
- package/dist/debugger/replay/replay-ledger-value-normalizer.js +194 -0
- package/dist/debugger/replay/replay-update-loader.d.ts +24 -0
- package/dist/debugger/replay/replay-update-loader.js +94 -0
- package/dist/debugger/replay/replay-update-visibility-validator.d.ts +19 -0
- package/dist/debugger/replay/replay-update-visibility-validator.js +19 -0
- package/dist/debugger/session/in-memory-replay-session-store.d.ts +27 -0
- package/dist/debugger/session/in-memory-replay-session-store.js +109 -0
- package/dist/debugger/session/replay-phase.d.ts +7 -0
- package/dist/debugger/session/replay-phase.js +8 -0
- package/dist/debugger/session/replay-scope.d.ts +10 -0
- package/dist/debugger/session/replay-scope.js +10 -0
- package/dist/debugger/session/replay-session-metadata.d.ts +10 -0
- package/dist/debugger/session/replay-session-metadata.js +10 -0
- package/dist/debugger/session/replay-session-request.d.ts +6 -0
- package/dist/debugger/session/replay-session-request.js +10 -0
- package/dist/debugger/session/replay-session.d.ts +12 -0
- package/dist/debugger/session/replay-session.js +10 -0
- package/dist/debugger/session/replay-source-location.d.ts +17 -0
- package/dist/debugger/session/replay-source-location.js +16 -0
- package/dist/debugger/session/replay-stack-frame.d.ts +8 -0
- package/dist/debugger/session/replay-stack-frame.js +8 -0
- package/dist/debugger/session/replay-state-delta.d.ts +29 -0
- package/dist/debugger/session/replay-state-delta.js +24 -0
- package/dist/debugger/session/replay-step-advance-result.d.ts +24 -0
- package/dist/debugger/session/replay-step-advance-result.js +16 -0
- package/dist/debugger/session/replay-step.d.ts +30 -0
- package/dist/debugger/session/replay-step.js +24 -0
- package/dist/debugger/session/replay-value-preview.d.ts +8 -0
- package/dist/debugger/session/replay-value-preview.js +15 -0
- package/dist/debugger/source/daml-source-mapper.d.ts +12 -0
- package/dist/debugger/source/daml-source-mapper.js +21 -0
- package/dist/debugger/source/dar-source-map-metadata.d.ts +26 -0
- package/dist/debugger/source/dar-source-map-metadata.js +10 -0
- package/dist/debugger/source/source-coverage-validator.d.ts +8 -0
- package/dist/debugger/source/source-coverage-validator.js +16 -0
- package/dist/debugger/source/source-indexed-compilation.d.ts +45 -0
- package/dist/debugger/source/source-indexed-compilation.js +110 -0
- package/dist/debugger/source/source-mapping-precision.d.ts +5 -0
- package/dist/debugger/source/source-mapping-precision.js +4 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.js +13 -0
- package/dist/query/cache/memory-query-cache.d.ts +9 -0
- package/dist/query/cache/memory-query-cache.js +24 -0
- package/dist/query/cache/query-cache-store.d.ts +5 -0
- package/dist/query/cache/query-cache-store.js +1 -0
- package/dist/query/canton-manager-options.d.ts +17 -0
- package/dist/query/canton-manager-options.js +1 -0
- package/dist/query/canton-manager.d.ts +11 -0
- package/dist/query/canton-manager.js +42 -0
- package/dist/query/errors/pqs-query-error.d.ts +10 -0
- package/dist/query/errors/pqs-query-error.js +11 -0
- package/dist/query/errors/pqs-schema-profile-error.d.ts +3 -0
- package/dist/query/errors/pqs-schema-profile-error.js +3 -0
- package/dist/query/errors/query-capability-error.d.ts +7 -0
- package/dist/query/errors/query-capability-error.js +10 -0
- package/dist/query/grpc/grpc-contract-query-client.d.ts +32 -0
- package/dist/query/grpc/grpc-contract-query-client.js +126 -0
- package/dist/query/model-types.d.ts +258 -0
- package/dist/query/model-types.js +14 -0
- package/dist/query/pqs/pqs-pool.d.ts +13 -0
- package/dist/query/pqs/pqs-pool.js +18 -0
- package/dist/query/pqs/pqs-query-client.d.ts +49 -0
- package/dist/query/pqs/pqs-query-client.js +324 -0
- package/dist/query/pqs/pqs-schema-profile.d.ts +25 -0
- package/dist/query/pqs/pqs-schema-profile.js +120 -0
- package/dist/query/pqs/pqs-sql-compiler.d.ts +7 -0
- package/dist/query/pqs/pqs-sql-compiler.js +132 -0
- package/dist/query/pqs/read-only-sql.d.ts +1 -0
- package/dist/query/pqs/read-only-sql.js +35 -0
- package/dist/query/query-client.d.ts +61 -0
- package/dist/query/query-client.js +1 -0
- package/dist/query/query-source.d.ts +4 -0
- package/dist/query/query-source.js +5 -0
- package/dist/services/command/command-service-client.d.ts +2 -2
- package/dist/services/commands/command-submission-pipeline.d.ts +2 -2
- package/dist/services/party-management/decentralized-party-lifecycle.d.ts +6 -0
- package/dist/services/party-management/decentralized-party-lifecycle.js +82 -0
- package/dist/services/party-management/party-management-service-client.d.ts +16 -1
- package/dist/services/party-management/party-management-service-client.js +142 -1
- package/dist/services/topology-manager-write/topology-signed-transaction-assembler.js +4 -0
- package/dist/testing/campaign/campaign-artifact.d.ts +20 -0
- package/dist/testing/campaign/campaign-artifact.js +147 -0
- package/dist/testing/campaign/campaign-definition.d.ts +9 -0
- package/dist/testing/campaign/campaign-definition.js +78 -0
- package/dist/testing/campaign/campaign-metrics.d.ts +32 -0
- package/dist/testing/campaign/campaign-metrics.js +26 -0
- package/dist/testing/campaign/campaign-model.d.ts +11 -0
- package/dist/testing/campaign/campaign-model.js +21 -0
- package/dist/testing/campaign/campaign-runner.d.ts +99 -0
- package/dist/testing/campaign/campaign-runner.js +194 -0
- package/dist/testing/campaign/campaign-scheduler.d.ts +40 -0
- package/dist/testing/campaign/campaign-scheduler.js +75 -0
- package/dist/testing/campaign/campaign-types.d.ts +52 -0
- package/dist/testing/campaign/campaign-types.js +11 -0
- package/dist/testing/daml/daml-action-arbitrary.d.ts +13 -0
- package/dist/testing/daml/daml-action-arbitrary.js +24 -0
- package/dist/testing/daml/daml-choice-action-arbitrary.d.ts +18 -0
- package/dist/testing/daml/daml-choice-action-arbitrary.js +27 -0
- package/dist/testing/daml/daml-create-action-arbitrary.d.ts +19 -0
- package/dist/testing/daml/daml-create-action-arbitrary.js +34 -0
- package/dist/testing/daml/daml-testing-catalog.d.ts +38 -0
- package/dist/testing/daml/daml-testing-catalog.js +40 -0
- package/dist/testing/daml/daml-value-arbitrary.d.ts +8 -0
- package/dist/testing/daml/daml-value-arbitrary.js +43 -0
- package/dist/testing/daml/declarative-campaign-arbitrary.d.ts +15 -0
- package/dist/testing/daml/declarative-campaign-arbitrary.js +30 -0
- package/dist/testing/errors/invariant-campaign-failure.d.ts +24 -0
- package/dist/testing/errors/invariant-campaign-failure.js +37 -0
- package/dist/testing/errors/testing-configuration-error.d.ts +3 -0
- package/dist/testing/errors/testing-configuration-error.js +6 -0
- package/dist/testing/handlers/handler.d.ts +19 -0
- package/dist/testing/handlers/handler.js +31 -0
- package/dist/testing/index.d.ts +22 -0
- package/dist/testing/index.js +22 -0
- package/dist/testing/runtime/campaign-isolation.d.ts +14 -0
- package/dist/testing/runtime/campaign-isolation.js +23 -0
- package/dist/testing/runtime/canton-test-runtime.d.ts +58 -0
- package/dist/testing/runtime/canton-test-runtime.js +138 -0
- package/dist/testing/runtime/declarative-action-executor.d.ts +16 -0
- package/dist/testing/runtime/declarative-action-executor.js +41 -0
- package/dist/testing/targets/target.d.ts +49 -0
- package/dist/testing/targets/target.js +121 -0
- package/dist/transports/grpc/grpc-channel-factory.js +31 -1
- package/dist/transports/grpc/grpc-transport.d.ts +2 -2
- package/dist/transports/grpc/grpc-transport.js +11 -8
- package/dist/transports/grpc/mappers/commands-mapper.js +23 -2
- package/dist/transports/grpc/mappers/contracts-mapper.d.ts +3 -1
- package/dist/transports/grpc/mappers/contracts-mapper.js +16 -3
- package/dist/transports/grpc/mappers/interactive-command-mapper.d.ts +4 -1
- package/dist/transports/grpc/mappers/interactive-command-mapper.js +3 -8
- package/dist/transports/grpc/mappers/topology-manager-write-mapper.js +59 -1
- package/dist/transports/json/mappers/commands-mapper.js +20 -6
- package/node/.generated/start-local/additional-config.extra-participants.conf +37 -0
- package/node/.generated/start-local/additional-config.extra-validators.conf +35 -0
- package/node/.generated/start-local/compose-extra-participants.yaml +147 -0
- package/node/.generated/start-local/extra-participants.env +30 -0
- package/node/es256-jwt.mjs +177 -0
- package/node/start-local.sh +886 -0
- package/node/stop-local.sh +200 -0
- package/node/test-start-local.sh +354 -0
- package/node/test-stop-local.sh +112 -0
- package/package.json +21 -2
|
@@ -0,0 +1,565 @@
|
|
|
1
|
+
import { ReplayPhase } from "../session/replay-phase.js";
|
|
2
|
+
import { ReplayScope } from "../session/replay-scope.js";
|
|
3
|
+
import { ReplaySourceLocation } from "../session/replay-source-location.js";
|
|
4
|
+
import { ReplaySessionMetadata } from "../session/replay-session-metadata.js";
|
|
5
|
+
import { ReplayStackFrame } from "../session/replay-stack-frame.js";
|
|
6
|
+
import { ReplayStateDelta } from "../session/replay-state-delta.js";
|
|
7
|
+
import { ReplayStep } from "../session/replay-step.js";
|
|
8
|
+
import { ReplayValuePreview } from "../session/replay-value-preview.js";
|
|
9
|
+
import { SourceMappingPrecision, } from "../source/source-mapping-precision.js";
|
|
10
|
+
import { attachReplayRecordId } from "./replay-ledger-value-normalizer.js";
|
|
11
|
+
export class LedgerReplaySessionLoader {
|
|
12
|
+
dependencies;
|
|
13
|
+
constructor(dependencies) {
|
|
14
|
+
this.dependencies = dependencies;
|
|
15
|
+
}
|
|
16
|
+
async loadOrThrowAsync(request) {
|
|
17
|
+
const snapshot = await this.dependencies.updateLoader.loadOrThrowAsync(request.offset);
|
|
18
|
+
const environment = await this.dependencies.environmentBuilder.buildOrThrowAsync(snapshot);
|
|
19
|
+
const definition = this.dependencies.definitionResolver.resolveEntrypointDefinitionOrThrow(snapshot.entrypoint);
|
|
20
|
+
const traceSteps = [];
|
|
21
|
+
const evaluation = this.dependencies.evaluator.evaluateReplayEntrypointOrThrow(definition.definition, {
|
|
22
|
+
...environment,
|
|
23
|
+
observedCreateContractIds: snapshot.events.flatMap((event) => event.event?.oneofKind === "created"
|
|
24
|
+
&& event.event.created?.contractId !== undefined
|
|
25
|
+
? [event.event.created.contractId]
|
|
26
|
+
: []),
|
|
27
|
+
entrypoint: {
|
|
28
|
+
...environment.entrypoint,
|
|
29
|
+
argument: definition.entrypointArgumentRecordId === undefined
|
|
30
|
+
? environment.entrypoint.argument
|
|
31
|
+
: attachReplayRecordId(environment.entrypoint.argument, definition.entrypointArgumentRecordId),
|
|
32
|
+
},
|
|
33
|
+
definitionResolver: this.dependencies.definitionResolver,
|
|
34
|
+
entrypointExpression: definition.replayExpression,
|
|
35
|
+
entrypointBindingMode: definition.replayBindingMode,
|
|
36
|
+
}, {
|
|
37
|
+
onStep: (step) => {
|
|
38
|
+
traceSteps.push(step);
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
this.dependencies.determinismValidator.validateOrThrow(snapshot, evaluation.effects);
|
|
42
|
+
const sessionId = this.dependencies.sessionIdFactory?.() ?? crypto.randomUUID();
|
|
43
|
+
const projectedSteps = this.projectReplaySteps(traceSteps, environment);
|
|
44
|
+
const steps = projectedSteps.map((item) => item.step);
|
|
45
|
+
return {
|
|
46
|
+
sessionId,
|
|
47
|
+
metadata: new ReplaySessionMetadata({
|
|
48
|
+
sessionId,
|
|
49
|
+
offset: snapshot.offset,
|
|
50
|
+
stepCount: steps.length,
|
|
51
|
+
}),
|
|
52
|
+
steps,
|
|
53
|
+
scopesByStep: projectedSteps.map((item) => item.scopes),
|
|
54
|
+
currentStepIndex: 0,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
projectReplaySteps(traceSteps, environment) {
|
|
58
|
+
const rawSteps = this.projectRawReplaySteps(traceSteps, environment);
|
|
59
|
+
if (this.dependencies.sourceMapper === undefined) {
|
|
60
|
+
return rawSteps;
|
|
61
|
+
}
|
|
62
|
+
return this.projectNavigableReplaySteps(rawSteps);
|
|
63
|
+
}
|
|
64
|
+
projectRawReplaySteps(traceSteps, environment) {
|
|
65
|
+
const activeFrames = [];
|
|
66
|
+
const frameScopes = new Map();
|
|
67
|
+
const frameExpressionDepth = new Map();
|
|
68
|
+
const frameCallDepth = new Map();
|
|
69
|
+
const contractTypeById = this.createContractTypeIndex(environment.contracts);
|
|
70
|
+
let eventOrdinal = 0;
|
|
71
|
+
return traceSteps.map((traceStep, stepIndex) => {
|
|
72
|
+
this.rememberFrameScope(frameScopes, traceStep, contractTypeById);
|
|
73
|
+
this.prepareStackForStep(traceStep, activeFrames, frameExpressionDepth, frameCallDepth);
|
|
74
|
+
const stackFrames = activeFrames.map((frame) => new ReplayStackFrame({
|
|
75
|
+
frameId: frame.frameId,
|
|
76
|
+
name: frame.name,
|
|
77
|
+
}));
|
|
78
|
+
const scopes = stackFrames.map((frame) => this.cloneScope(frameScopes.get(frame.frameId ?? "") ?? new ReplayScope({
|
|
79
|
+
frameId: frame.frameId,
|
|
80
|
+
name: frame.name,
|
|
81
|
+
variables: [],
|
|
82
|
+
})));
|
|
83
|
+
const currentScope = scopes.find((scope) => scope.frameId === traceStep.frame.frameId);
|
|
84
|
+
const projectedStep = new ReplayStep({
|
|
85
|
+
stepId: `step-${stepIndex}`,
|
|
86
|
+
stepIndex,
|
|
87
|
+
phase: this.toReplayPhase(traceStep),
|
|
88
|
+
stackFrames,
|
|
89
|
+
scopes,
|
|
90
|
+
locals: currentScope?.variables ?? [],
|
|
91
|
+
arguments: traceStep.stateEffect?.argument === undefined
|
|
92
|
+
? []
|
|
93
|
+
: [traceStep.stateEffect.argument],
|
|
94
|
+
valuePreview: this.createValuePreview(traceStep),
|
|
95
|
+
stateDelta: traceStep.stateEffect === undefined
|
|
96
|
+
? undefined
|
|
97
|
+
: this.createStateDelta(traceStep.stateEffect, eventOrdinal),
|
|
98
|
+
sourceLocation: this.createSourceLocation(traceStep),
|
|
99
|
+
});
|
|
100
|
+
if (traceStep.stateEffect !== undefined) {
|
|
101
|
+
this.rememberStateEffectContractType(traceStep.stateEffect, contractTypeById);
|
|
102
|
+
eventOrdinal += 1;
|
|
103
|
+
}
|
|
104
|
+
this.finalizeStackForStep(traceStep, activeFrames, frameExpressionDepth, frameCallDepth);
|
|
105
|
+
return {
|
|
106
|
+
step: projectedStep,
|
|
107
|
+
scopes,
|
|
108
|
+
traceStep,
|
|
109
|
+
};
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
projectNavigableReplaySteps(rawSteps) {
|
|
113
|
+
const navigableSteps = [];
|
|
114
|
+
let previousVisibleExpressionKey;
|
|
115
|
+
for (const rawStep of rawSteps) {
|
|
116
|
+
const { step, traceStep } = rawStep;
|
|
117
|
+
if (step.phase === ReplayPhase.stateEffect) {
|
|
118
|
+
previousVisibleExpressionKey = undefined;
|
|
119
|
+
navigableSteps.push(rawStep);
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
if (step.sourceLocation?.precision
|
|
123
|
+
!== SourceMappingPrecision.exact) {
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
if (step.phase === ReplayPhase.call
|
|
127
|
+
|| step.phase === ReplayPhase.return) {
|
|
128
|
+
if (!this.shouldRetainDefinitionTransition(step, traceStep)) {
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
previousVisibleExpressionKey = undefined;
|
|
132
|
+
navigableSteps.push(rawStep);
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
if (traceStep.kind !== "enterExpression"
|
|
136
|
+
&& traceStep.kind !== "exitExpression") {
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
const previousStep = navigableSteps.at(-1)?.step;
|
|
140
|
+
if (!this.shouldRetainExpressionStep(step, traceStep, previousStep)) {
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
const visibleExpressionKey = this.createVisibleExpressionKey(step);
|
|
144
|
+
if (visibleExpressionKey === previousVisibleExpressionKey) {
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
previousVisibleExpressionKey = visibleExpressionKey;
|
|
148
|
+
navigableSteps.push(rawStep);
|
|
149
|
+
}
|
|
150
|
+
return navigableSteps.map((item, stepIndex) => ({
|
|
151
|
+
...item,
|
|
152
|
+
step: new ReplayStep({
|
|
153
|
+
stepId: item.step.stepId,
|
|
154
|
+
stepIndex,
|
|
155
|
+
phase: item.step.phase,
|
|
156
|
+
stackFrames: item.step.stackFrames,
|
|
157
|
+
scopes: item.step.scopes,
|
|
158
|
+
locals: item.step.locals,
|
|
159
|
+
arguments: item.step.arguments,
|
|
160
|
+
sourceLocation: item.step.sourceLocation,
|
|
161
|
+
valuePreview: item.step.valuePreview,
|
|
162
|
+
stateDelta: item.step.stateDelta,
|
|
163
|
+
}),
|
|
164
|
+
}));
|
|
165
|
+
}
|
|
166
|
+
createSourceLocationKey(source) {
|
|
167
|
+
return [
|
|
168
|
+
source.path,
|
|
169
|
+
source.startLine,
|
|
170
|
+
source.startColumn,
|
|
171
|
+
source.endLine,
|
|
172
|
+
source.endColumn,
|
|
173
|
+
].join(":");
|
|
174
|
+
}
|
|
175
|
+
createVisibleExpressionKey(step) {
|
|
176
|
+
const source = step.sourceLocation;
|
|
177
|
+
return [
|
|
178
|
+
source === undefined
|
|
179
|
+
? "no-source"
|
|
180
|
+
: [
|
|
181
|
+
source.path,
|
|
182
|
+
source.startLine,
|
|
183
|
+
source.endLine,
|
|
184
|
+
].join(":"),
|
|
185
|
+
step.stackFrames.map((frame) => frame.frameId ?? frame.name ?? "?").join(">"),
|
|
186
|
+
JSON.stringify(step.locals),
|
|
187
|
+
].join("|");
|
|
188
|
+
}
|
|
189
|
+
shouldRetainDefinitionTransition(step, traceStep) {
|
|
190
|
+
return this.isMeaningfulDefinitionExpression(traceStep.frame.definition.expression)
|
|
191
|
+
|| this.hasVisibleLocalsChange(undefined, step);
|
|
192
|
+
}
|
|
193
|
+
shouldRetainExpressionStep(step, traceStep, previousStep) {
|
|
194
|
+
if (this.hasVisibleLocalsChange(previousStep, step)) {
|
|
195
|
+
return true;
|
|
196
|
+
}
|
|
197
|
+
return this.isMeaningfulDebuggerExpression(traceStep.expression);
|
|
198
|
+
}
|
|
199
|
+
hasVisibleLocalsChange(previousStep, currentStep) {
|
|
200
|
+
return JSON.stringify(previousStep?.locals ?? [])
|
|
201
|
+
!== JSON.stringify(currentStep.locals);
|
|
202
|
+
}
|
|
203
|
+
isMeaningfulDebuggerExpression(expression) {
|
|
204
|
+
if (expression.application !== undefined
|
|
205
|
+
|| expression.letExpression !== undefined
|
|
206
|
+
|| expression.caseExpression !== undefined
|
|
207
|
+
|| expression.updateExpression !== undefined
|
|
208
|
+
|| expression.lambda !== undefined) {
|
|
209
|
+
return true;
|
|
210
|
+
}
|
|
211
|
+
if (expression.valueReference !== undefined
|
|
212
|
+
&& this.dependencies.sourceMapper !== undefined) {
|
|
213
|
+
try {
|
|
214
|
+
const referencedDefinition = this.dependencies.sourceMapper.getValueDefinitionOrThrow(expression.valueReference.packageId, expression.valueReference.moduleName, expression.valueReference.definitionName);
|
|
215
|
+
return this.isMeaningfulDefinitionExpression(referencedDefinition.expression);
|
|
216
|
+
}
|
|
217
|
+
catch {
|
|
218
|
+
return false;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return false;
|
|
222
|
+
}
|
|
223
|
+
isMeaningfulDefinitionExpression(expression) {
|
|
224
|
+
return (expression.application !== undefined
|
|
225
|
+
|| expression.letExpression !== undefined
|
|
226
|
+
|| expression.caseExpression !== undefined
|
|
227
|
+
|| expression.updateExpression !== undefined
|
|
228
|
+
|| expression.lambda !== undefined);
|
|
229
|
+
}
|
|
230
|
+
toReplayPhase(traceStep) {
|
|
231
|
+
switch (traceStep.kind) {
|
|
232
|
+
case "stateEffect":
|
|
233
|
+
return ReplayPhase.stateEffect;
|
|
234
|
+
case "call":
|
|
235
|
+
return ReplayPhase.call;
|
|
236
|
+
case "return":
|
|
237
|
+
return ReplayPhase.return;
|
|
238
|
+
case "enterExpression":
|
|
239
|
+
return ReplayPhase.enterExpression;
|
|
240
|
+
case "exitExpression":
|
|
241
|
+
return ReplayPhase.exitExpression;
|
|
242
|
+
default:
|
|
243
|
+
return ReplayPhase.enterExpression;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
createValuePreview(traceStep) {
|
|
247
|
+
if (traceStep.stateEffect !== undefined) {
|
|
248
|
+
const display = traceStep.stateEffect.contractId
|
|
249
|
+
?? traceStep.stateEffect.choice
|
|
250
|
+
?? traceStep.stateEffect.kind;
|
|
251
|
+
return new ReplayValuePreview({
|
|
252
|
+
kind: traceStep.stateEffect.kind,
|
|
253
|
+
display,
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
if (traceStep.value === undefined) {
|
|
257
|
+
return undefined;
|
|
258
|
+
}
|
|
259
|
+
return new ReplayValuePreview({
|
|
260
|
+
kind: traceStep.value.kind,
|
|
261
|
+
display: this.stringifyRuntimeValue(traceStep.value),
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
createStateDelta(effect, eventOrdinal) {
|
|
265
|
+
const common = {
|
|
266
|
+
kind: effect.kind,
|
|
267
|
+
eventOrdinal,
|
|
268
|
+
comparisonKey: `event-${eventOrdinal}`,
|
|
269
|
+
};
|
|
270
|
+
switch (effect.kind) {
|
|
271
|
+
case "create":
|
|
272
|
+
return new ReplayStateDelta({
|
|
273
|
+
...common,
|
|
274
|
+
createdContractId: effect.contractId,
|
|
275
|
+
templateId: effect.templateId,
|
|
276
|
+
payload: effect.payload,
|
|
277
|
+
});
|
|
278
|
+
case "exercise":
|
|
279
|
+
return new ReplayStateDelta({
|
|
280
|
+
...common,
|
|
281
|
+
targetContractId: effect.contractId,
|
|
282
|
+
templateId: effect.templateId,
|
|
283
|
+
choice: effect.choice,
|
|
284
|
+
choiceArgument: effect.argument,
|
|
285
|
+
payload: effect.payload,
|
|
286
|
+
});
|
|
287
|
+
case "archive":
|
|
288
|
+
return new ReplayStateDelta({
|
|
289
|
+
...common,
|
|
290
|
+
targetContractId: effect.contractId,
|
|
291
|
+
templateId: effect.templateId,
|
|
292
|
+
});
|
|
293
|
+
default:
|
|
294
|
+
return new ReplayStateDelta(common);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
stringifyRuntimeValue(value) {
|
|
298
|
+
if ("value" in value && typeof value.value === "string") {
|
|
299
|
+
return value.value.length > 0 ? value.value : "\"\"";
|
|
300
|
+
}
|
|
301
|
+
if ("value" in value) {
|
|
302
|
+
try {
|
|
303
|
+
const serialized = JSON.stringify(value.value);
|
|
304
|
+
if (typeof serialized === "string" && serialized.length > 0) {
|
|
305
|
+
return serialized;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
catch {
|
|
309
|
+
// Fall through to a lossy scalar representation when preview
|
|
310
|
+
// values are not JSON-serializable.
|
|
311
|
+
}
|
|
312
|
+
if (value.value === undefined) {
|
|
313
|
+
return "undefined";
|
|
314
|
+
}
|
|
315
|
+
if (value.value === null) {
|
|
316
|
+
return "null";
|
|
317
|
+
}
|
|
318
|
+
return String(value.value);
|
|
319
|
+
}
|
|
320
|
+
return typeof value.kind === "string" ? value.kind : "value";
|
|
321
|
+
}
|
|
322
|
+
rememberFrameScope(frameScopes, traceStep, contractTypeById) {
|
|
323
|
+
const frameName = this.resolveFrameName(traceStep);
|
|
324
|
+
frameScopes.set(traceStep.frame.frameId, new ReplayScope({
|
|
325
|
+
frameId: traceStep.frame.frameId,
|
|
326
|
+
name: frameName,
|
|
327
|
+
variables: traceStep.locals.map((local) => ({
|
|
328
|
+
name: local.name,
|
|
329
|
+
kind: local.value.kind,
|
|
330
|
+
value: this.stringifyRuntimeValue(local.value),
|
|
331
|
+
contractType: this.resolveRuntimeValueContractType(local.value, contractTypeById),
|
|
332
|
+
})),
|
|
333
|
+
}));
|
|
334
|
+
}
|
|
335
|
+
createContractTypeIndex(contracts) {
|
|
336
|
+
const index = new Map();
|
|
337
|
+
for (const [contractId, contract] of contracts.entries()) {
|
|
338
|
+
const contractType = this.formatTemplateType(contract.templateId);
|
|
339
|
+
if (contractType !== undefined) {
|
|
340
|
+
index.set(contractId, contractType);
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
return index;
|
|
344
|
+
}
|
|
345
|
+
rememberStateEffectContractType(effect, contractTypeById) {
|
|
346
|
+
if (effect.kind !== "create" || effect.contractId === undefined) {
|
|
347
|
+
return;
|
|
348
|
+
}
|
|
349
|
+
const contractType = this.formatTemplateType(effect.templateId);
|
|
350
|
+
if (contractType !== undefined) {
|
|
351
|
+
contractTypeById.set(effect.contractId, contractType);
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
resolveRuntimeValueContractType(value, contractTypeById) {
|
|
355
|
+
if (value.kind === "contractId"
|
|
356
|
+
&& "value" in value
|
|
357
|
+
&& typeof value.value === "string") {
|
|
358
|
+
return contractTypeById.get(value.value);
|
|
359
|
+
}
|
|
360
|
+
if (value.kind === "contractId[]"
|
|
361
|
+
&& "value" in value
|
|
362
|
+
&& Array.isArray(value.value)) {
|
|
363
|
+
for (const contractId of value.value) {
|
|
364
|
+
if (typeof contractId !== "string") {
|
|
365
|
+
continue;
|
|
366
|
+
}
|
|
367
|
+
const contractType = contractTypeById.get(contractId);
|
|
368
|
+
if (contractType !== undefined) {
|
|
369
|
+
return contractType;
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
return undefined;
|
|
374
|
+
}
|
|
375
|
+
formatTemplateType(templateId) {
|
|
376
|
+
if (templateId?.moduleName !== undefined
|
|
377
|
+
&& templateId.entityName !== undefined) {
|
|
378
|
+
return `${templateId.moduleName}:${templateId.entityName}`;
|
|
379
|
+
}
|
|
380
|
+
return templateId?.entityName;
|
|
381
|
+
}
|
|
382
|
+
prepareStackForStep(traceStep, activeFrames, frameExpressionDepth, frameCallDepth) {
|
|
383
|
+
const frame = new ReplayStackFrame({
|
|
384
|
+
frameId: traceStep.frame.frameId,
|
|
385
|
+
name: this.resolveFrameName(traceStep),
|
|
386
|
+
});
|
|
387
|
+
if (traceStep.kind === "call") {
|
|
388
|
+
this.pushFrameIfMissing(activeFrames, frame);
|
|
389
|
+
frameCallDepth.set(traceStep.frame.frameId, (frameCallDepth.get(traceStep.frame.frameId) ?? 0) + 1);
|
|
390
|
+
return;
|
|
391
|
+
}
|
|
392
|
+
this.pushFrameIfMissing(activeFrames, frame);
|
|
393
|
+
if (traceStep.kind === "enterExpression") {
|
|
394
|
+
frameExpressionDepth.set(traceStep.frame.frameId, (frameExpressionDepth.get(traceStep.frame.frameId) ?? 0) + 1);
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
finalizeStackForStep(traceStep, activeFrames, frameExpressionDepth, frameCallDepth) {
|
|
398
|
+
if (traceStep.kind === "exitExpression") {
|
|
399
|
+
const nextDepth = (frameExpressionDepth.get(traceStep.frame.frameId) ?? 1) - 1;
|
|
400
|
+
if (nextDepth <= 0) {
|
|
401
|
+
frameExpressionDepth.delete(traceStep.frame.frameId);
|
|
402
|
+
if ((frameCallDepth.get(traceStep.frame.frameId) ?? 0) === 0) {
|
|
403
|
+
this.popFrameIfTop(activeFrames, traceStep.frame.frameId);
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
else {
|
|
407
|
+
frameExpressionDepth.set(traceStep.frame.frameId, nextDepth);
|
|
408
|
+
}
|
|
409
|
+
return;
|
|
410
|
+
}
|
|
411
|
+
if (traceStep.kind === "return") {
|
|
412
|
+
const nextCallDepth = (frameCallDepth.get(traceStep.frame.frameId) ?? 1) - 1;
|
|
413
|
+
if (nextCallDepth <= 0) {
|
|
414
|
+
frameCallDepth.delete(traceStep.frame.frameId);
|
|
415
|
+
}
|
|
416
|
+
else {
|
|
417
|
+
frameCallDepth.set(traceStep.frame.frameId, nextCallDepth);
|
|
418
|
+
}
|
|
419
|
+
this.popFrameIfTop(activeFrames, traceStep.frame.frameId);
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
pushFrameIfMissing(activeFrames, frame) {
|
|
423
|
+
const activeIndex = activeFrames.findIndex((candidate) => candidate.frameId === frame.frameId);
|
|
424
|
+
if (activeIndex >= 0) {
|
|
425
|
+
activeFrames.splice(activeIndex + 1);
|
|
426
|
+
return;
|
|
427
|
+
}
|
|
428
|
+
activeFrames.push(frame);
|
|
429
|
+
}
|
|
430
|
+
popFrameIfTop(activeFrames, frameId) {
|
|
431
|
+
if (activeFrames.at(-1)?.frameId === frameId) {
|
|
432
|
+
activeFrames.pop();
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
cloneScope(scope) {
|
|
436
|
+
return new ReplayScope({
|
|
437
|
+
frameId: scope.frameId,
|
|
438
|
+
name: scope.name,
|
|
439
|
+
variables: [...scope.variables],
|
|
440
|
+
});
|
|
441
|
+
}
|
|
442
|
+
resolveFrameName(traceStep) {
|
|
443
|
+
const definitionName = traceStep.frame.definition.name;
|
|
444
|
+
const generatedHelper = this.isGeneratedHelperDefinitionName(definitionName);
|
|
445
|
+
if (this.dependencies.sourceMapper === undefined) {
|
|
446
|
+
return generatedHelper
|
|
447
|
+
? this.formatGeneratedHelperLabel(definitionName)
|
|
448
|
+
: definitionName;
|
|
449
|
+
}
|
|
450
|
+
try {
|
|
451
|
+
const source = this.dependencies.sourceMapper.getDefinitionSourceOrThrow(traceStep.frame.packageId, traceStep.frame.moduleName, definitionName);
|
|
452
|
+
const label = this.formatExecutableFrameLabel(source);
|
|
453
|
+
if (label !== undefined) {
|
|
454
|
+
return generatedHelper
|
|
455
|
+
? this.formatGeneratedHelperLabel(label)
|
|
456
|
+
: label;
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
catch {
|
|
460
|
+
// Fall through to source-span and effect-based resolution when the
|
|
461
|
+
// current frame definition has no executable metadata of its own.
|
|
462
|
+
}
|
|
463
|
+
const sourceLocation = this.createSourceLocation(traceStep);
|
|
464
|
+
if (sourceLocation?.path !== undefined
|
|
465
|
+
&& sourceLocation.startLine !== undefined
|
|
466
|
+
&& sourceLocation.startColumn !== undefined) {
|
|
467
|
+
const enclosingSource = this.dependencies.sourceMapper.findExecutableSourceAt(sourceLocation.path, sourceLocation.startLine, sourceLocation.startColumn);
|
|
468
|
+
const label = enclosingSource === undefined
|
|
469
|
+
? undefined
|
|
470
|
+
: this.formatExecutableFrameLabel(enclosingSource);
|
|
471
|
+
if (label !== undefined) {
|
|
472
|
+
return generatedHelper
|
|
473
|
+
? this.formatGeneratedHelperLabel(label)
|
|
474
|
+
: label;
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
const effectLabel = this.formatReplayEffectFrameLabel(traceStep.stateEffect);
|
|
478
|
+
if (effectLabel !== undefined) {
|
|
479
|
+
return generatedHelper
|
|
480
|
+
? this.formatGeneratedHelperLabel(effectLabel)
|
|
481
|
+
: effectLabel;
|
|
482
|
+
}
|
|
483
|
+
return generatedHelper
|
|
484
|
+
? this.formatGeneratedHelperLabel(definitionName)
|
|
485
|
+
: definitionName;
|
|
486
|
+
}
|
|
487
|
+
isGeneratedHelperDefinitionName(definitionName) {
|
|
488
|
+
return /^\$+/.test(definitionName);
|
|
489
|
+
}
|
|
490
|
+
formatGeneratedHelperLabel(context) {
|
|
491
|
+
return `generated helper from ${context}`;
|
|
492
|
+
}
|
|
493
|
+
formatExecutableFrameLabel(source) {
|
|
494
|
+
if (source.entrypointKind === "exercise"
|
|
495
|
+
&& source.templateName !== undefined
|
|
496
|
+
&& source.choiceName !== undefined) {
|
|
497
|
+
return `${source.templateName}.${source.choiceName}`;
|
|
498
|
+
}
|
|
499
|
+
if (source.entrypointKind === "create"
|
|
500
|
+
&& source.templateName !== undefined) {
|
|
501
|
+
return `${source.templateName}.create`;
|
|
502
|
+
}
|
|
503
|
+
return undefined;
|
|
504
|
+
}
|
|
505
|
+
formatReplayEffectFrameLabel(effect) {
|
|
506
|
+
if (effect?.templateId?.entityName === undefined) {
|
|
507
|
+
return undefined;
|
|
508
|
+
}
|
|
509
|
+
if (effect.kind === "create") {
|
|
510
|
+
return `${effect.templateId.entityName}.create`;
|
|
511
|
+
}
|
|
512
|
+
if (effect.kind === "exercise"
|
|
513
|
+
&& effect.choice !== undefined) {
|
|
514
|
+
return `${effect.templateId.entityName}.${effect.choice}`;
|
|
515
|
+
}
|
|
516
|
+
return undefined;
|
|
517
|
+
}
|
|
518
|
+
createSourceLocation(traceStep) {
|
|
519
|
+
if (this.dependencies.sourceMapper === undefined) {
|
|
520
|
+
return undefined;
|
|
521
|
+
}
|
|
522
|
+
try {
|
|
523
|
+
const compilerExpressionSource = this.dependencies.sourceMapper.getExpressionSource(traceStep.expression);
|
|
524
|
+
if (compilerExpressionSource !== undefined) {
|
|
525
|
+
return new ReplaySourceLocation({
|
|
526
|
+
path: compilerExpressionSource.path,
|
|
527
|
+
startLine: compilerExpressionSource.startLine + 1,
|
|
528
|
+
startColumn: compilerExpressionSource.startColumn + 1,
|
|
529
|
+
endLine: compilerExpressionSource.endLine + 1,
|
|
530
|
+
endColumn: compilerExpressionSource.endColumn + 1,
|
|
531
|
+
precision: SourceMappingPrecision.exact,
|
|
532
|
+
});
|
|
533
|
+
}
|
|
534
|
+
const expressionSource = traceStep.expression.sourceLocation;
|
|
535
|
+
if (expressionSource !== undefined) {
|
|
536
|
+
const packageId = expressionSource.packageId ?? traceStep.frame.packageId;
|
|
537
|
+
const moduleName = expressionSource.moduleName ?? traceStep.frame.moduleName;
|
|
538
|
+
const moduleSource = this.dependencies.sourceMapper.getModuleSourceOrThrow(packageId, moduleName);
|
|
539
|
+
return new ReplaySourceLocation({
|
|
540
|
+
path: moduleSource.path,
|
|
541
|
+
startLine: expressionSource.startLine + 1,
|
|
542
|
+
startColumn: expressionSource.startColumn + 1,
|
|
543
|
+
endLine: expressionSource.endLine + 1,
|
|
544
|
+
endColumn: expressionSource.endColumn + 1,
|
|
545
|
+
precision: SourceMappingPrecision.exact,
|
|
546
|
+
});
|
|
547
|
+
}
|
|
548
|
+
if (traceStep.stateEffect === undefined) {
|
|
549
|
+
return undefined;
|
|
550
|
+
}
|
|
551
|
+
const source = this.dependencies.sourceMapper.getDefinitionSourceOrThrow(traceStep.frame.packageId, traceStep.frame.moduleName, traceStep.frame.definition.name);
|
|
552
|
+
return new ReplaySourceLocation({
|
|
553
|
+
path: source.path,
|
|
554
|
+
startLine: source.startLine,
|
|
555
|
+
startColumn: source.startColumn,
|
|
556
|
+
endLine: source.endLine,
|
|
557
|
+
endColumn: source.endColumn,
|
|
558
|
+
precision: source.precision,
|
|
559
|
+
});
|
|
560
|
+
}
|
|
561
|
+
catch {
|
|
562
|
+
return undefined;
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { GetDarRequest } from "../../core/types/requests/get-dar-request.js";
|
|
2
|
+
import { GetPackageReferencesRequest } from "../../core/types/requests/get-package-references-request.js";
|
|
3
|
+
import { ParticipantDarDescription } from "../../core/types/participant-dar-description.js";
|
|
4
|
+
interface IParticipantPackageReadService {
|
|
5
|
+
getPackageReferencesAsync(request: GetPackageReferencesRequest): Promise<{
|
|
6
|
+
dars: ParticipantDarDescription[];
|
|
7
|
+
}>;
|
|
8
|
+
getDarAsync(request: GetDarRequest): Promise<{
|
|
9
|
+
payload: Uint8Array;
|
|
10
|
+
}>;
|
|
11
|
+
}
|
|
12
|
+
export declare class ReplayArtifactResolver {
|
|
13
|
+
private readonly dependencies;
|
|
14
|
+
private readonly archiveLoader;
|
|
15
|
+
private readonly packageLoader;
|
|
16
|
+
private readonly sourceBundleLoader;
|
|
17
|
+
constructor(dependencies: {
|
|
18
|
+
participantPackageService: IParticipantPackageReadService;
|
|
19
|
+
});
|
|
20
|
+
resolveAsync(requiredPackageIds: readonly string[]): Promise<{
|
|
21
|
+
dars: readonly ParticipantDarDescription[];
|
|
22
|
+
packageIds: readonly string[];
|
|
23
|
+
}>;
|
|
24
|
+
private static createFingerprint;
|
|
25
|
+
private resolveSourceMappedDarCandidateOrThrowAsync;
|
|
26
|
+
private readPackageGraph;
|
|
27
|
+
private readImportedPackageIds;
|
|
28
|
+
private tryResolveImportedPackageId;
|
|
29
|
+
}
|
|
30
|
+
export {};
|