@distrohelena/canton-typescript-sdk 0.1.53 → 0.1.54
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/dist/cjs/daml-interface/analysis/daml-interface-analyzer.js +19 -5
- package/dist/cjs/daml-interface/emission/named-type-emitter.js +2 -2
- package/dist/cjs/daml-lf/semantics/daml-lf-semantic-model.js +15 -0
- package/dist/daml-interface/analysis/analyzed-daml-type-definition.d.ts +1 -1
- package/dist/daml-interface/analysis/daml-interface-analyzer.js +19 -5
- package/dist/daml-interface/emission/named-type-emitter.d.ts +2 -2
- package/dist/daml-interface/emission/named-type-emitter.js +2 -2
- package/dist/daml-lf/semantics/daml-lf-semantic-model.d.ts +6 -0
- package/dist/daml-lf/semantics/daml-lf-semantic-model.js +15 -0
- package/package.json +2 -2
|
@@ -25,6 +25,9 @@ class DamlInterfaceAnalyzer {
|
|
|
25
25
|
const templates = semanticModel
|
|
26
26
|
.getTemplates()
|
|
27
27
|
.map((item) => this.analyzeTemplateOrThrow(item, typeBuilder));
|
|
28
|
+
for (const { reference } of semanticModel.getDataTypes()) {
|
|
29
|
+
typeBuilder.buildDefinitionOrThrow(reference, `data type '${reference.name}'`);
|
|
30
|
+
}
|
|
28
31
|
return new DamlInterfaceAnalysisResult({
|
|
29
32
|
templates,
|
|
30
33
|
typeDefinitions: typeBuilder.getTypeDefinitions(),
|
|
@@ -189,6 +192,13 @@ class AnalyzedDamlTypeBuilder {
|
|
|
189
192
|
throw this.unsupported(context, "the type is not serializable");
|
|
190
193
|
}
|
|
191
194
|
}
|
|
195
|
+
buildDefinitionOrThrow(reference, context) {
|
|
196
|
+
const key = this.getDefinitionKey(reference);
|
|
197
|
+
const identity = this.getCanonicalIdentity(reference, key);
|
|
198
|
+
const dataType = this.getDataTypeOrThrow(reference, context);
|
|
199
|
+
this.assertSupportedDataTypeParametersOrThrow(dataType, context);
|
|
200
|
+
this.registerNamedDefinitionOrThrow(reference, identity, dataType);
|
|
201
|
+
}
|
|
192
202
|
getTypeDefinitions() {
|
|
193
203
|
return Object.freeze(this.definitionKeys.map((key) => {
|
|
194
204
|
const definition = this.definitions.get(key);
|
|
@@ -209,17 +219,21 @@ class AnalyzedDamlTypeBuilder {
|
|
|
209
219
|
this.assertSupportedDataTypeParametersOrThrow(dataType, context);
|
|
210
220
|
this.assertNamedArgumentCountOrThrow(typeArguments, dataType, context);
|
|
211
221
|
const analyzedTypeArguments = Object.freeze(typeArguments.map((argument) => this.buildOrThrow(argument, context, typeParameters)));
|
|
212
|
-
|
|
213
|
-
this.definitionKeys.push(key);
|
|
214
|
-
this.definitions.set(key, undefined);
|
|
215
|
-
this.definitions.set(key, this.buildNamedDefinitionOrThrow(reference, identity, dataType));
|
|
216
|
-
}
|
|
222
|
+
this.registerNamedDefinitionOrThrow(reference, identity, dataType);
|
|
217
223
|
return Object.freeze({
|
|
218
224
|
kind: "namedReference",
|
|
219
225
|
identity,
|
|
220
226
|
typeArguments: analyzedTypeArguments,
|
|
221
227
|
});
|
|
222
228
|
}
|
|
229
|
+
registerNamedDefinitionOrThrow(reference, identity, dataType) {
|
|
230
|
+
const key = this.getDefinitionKey(reference);
|
|
231
|
+
if (!this.definitions.has(key)) {
|
|
232
|
+
this.definitionKeys.push(key);
|
|
233
|
+
this.definitions.set(key, undefined);
|
|
234
|
+
this.definitions.set(key, this.buildNamedDefinitionOrThrow(reference, identity, dataType));
|
|
235
|
+
}
|
|
236
|
+
}
|
|
223
237
|
buildNamedDefinitionOrThrow(reference, identity, dataType) {
|
|
224
238
|
const typeParameters = this.createTypeParameterScope(dataType.typeParameters);
|
|
225
239
|
if (dataType.definition.kind === "record") {
|
|
@@ -5,7 +5,7 @@ const daml_lf_builtin_type_js_1 = require("../../daml-lf/model/daml-lf-builtin-t
|
|
|
5
5
|
const generated_named_type_file_js_1 = require("../emission-model/generated-named-type-file.js");
|
|
6
6
|
const type_script_name_resolver_js_1 = require("./type-script-name-resolver.js");
|
|
7
7
|
const relative_module_specifier_js_1 = require("./relative-module-specifier.js");
|
|
8
|
-
/** Emits TypeScript declarations for
|
|
8
|
+
/** Emits TypeScript declarations for modeled named DAML records, variants, and enums. */
|
|
9
9
|
class NamedTypeEmitter {
|
|
10
10
|
nameResolver;
|
|
11
11
|
constructor(nameResolver = new type_script_name_resolver_js_1.TypeScriptNameResolver()) {
|
|
@@ -16,7 +16,7 @@ class NamedTypeEmitter {
|
|
|
16
16
|
prepareProjectOrThrow(templates, definitions, packageMetadata = new Map()) {
|
|
17
17
|
this.nameResolver.prepareProjectOrThrow(templates, definitions, packageMetadata);
|
|
18
18
|
}
|
|
19
|
-
/** Emits one `types.ts` module for every
|
|
19
|
+
/** Emits one `types.ts` module for every modeled DAML package/module identity. */
|
|
20
20
|
emitNamedTypeFiles(definitions, moduleImportStyle) {
|
|
21
21
|
this.nameResolver.prepareProjectOrThrow([], definitions);
|
|
22
22
|
return this.emitPreparedNamedTypeFiles(definitions, [], moduleImportStyle);
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DamlLfSemanticModel = void 0;
|
|
4
|
+
const daml_lf_data_type_js_1 = require("../model/daml-lf-data-type.js");
|
|
5
|
+
const type_con_reference_js_1 = require("../model/type-con-reference.js");
|
|
4
6
|
class DamlLfSemanticModel {
|
|
5
7
|
compilation;
|
|
6
8
|
constructor(compilation) {
|
|
@@ -11,6 +13,19 @@ class DamlLfSemanticModel {
|
|
|
11
13
|
getTemplates() {
|
|
12
14
|
return this.compilation.getTemplates();
|
|
13
15
|
}
|
|
16
|
+
/** Returns every named data type with its fully qualified identity. */
|
|
17
|
+
getDataTypes() {
|
|
18
|
+
return this.compilation.getPackages().flatMap((pkg) => pkg.modules.flatMap((module) => module.definitions
|
|
19
|
+
.filter((definition) => definition instanceof daml_lf_data_type_js_1.DamlLfDataType)
|
|
20
|
+
.map((definition) => Object.freeze({
|
|
21
|
+
reference: Object.freeze(new type_con_reference_js_1.TypeConReference({
|
|
22
|
+
packageId: pkg.packageId,
|
|
23
|
+
moduleName: module.name,
|
|
24
|
+
name: definition.name,
|
|
25
|
+
})),
|
|
26
|
+
definition,
|
|
27
|
+
}))));
|
|
28
|
+
}
|
|
14
29
|
/** Returns the choices declared on a template identity. */
|
|
15
30
|
getTemplateChoicesOrThrow(templateId) {
|
|
16
31
|
return this.compilation.getTemplateChoicesOrThrow(templateId);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AnalyzedDamlEnumType, AnalyzedDamlRecordType, AnalyzedDamlVariantType } from "./analyzed-daml-type.js";
|
|
2
2
|
import { DamlLfTypeParameter } from "../../daml-lf/model/daml-lf-data-type.js";
|
|
3
3
|
import { TypeConReference } from "../../daml-lf/model/type-con-reference.js";
|
|
4
|
-
/** A
|
|
4
|
+
/** A modeled named DAML data type and its complete serializable shape. */
|
|
5
5
|
export type AnalyzedDamlTypeDefinition = {
|
|
6
6
|
readonly identity: TypeConReference;
|
|
7
7
|
} & ((AnalyzedDamlRecordType & {
|
|
@@ -21,6 +21,9 @@ export class DamlInterfaceAnalyzer {
|
|
|
21
21
|
const templates = semanticModel
|
|
22
22
|
.getTemplates()
|
|
23
23
|
.map((item) => this.analyzeTemplateOrThrow(item, typeBuilder));
|
|
24
|
+
for (const { reference } of semanticModel.getDataTypes()) {
|
|
25
|
+
typeBuilder.buildDefinitionOrThrow(reference, `data type '${reference.name}'`);
|
|
26
|
+
}
|
|
24
27
|
return new DamlInterfaceAnalysisResult({
|
|
25
28
|
templates,
|
|
26
29
|
typeDefinitions: typeBuilder.getTypeDefinitions(),
|
|
@@ -184,6 +187,13 @@ class AnalyzedDamlTypeBuilder {
|
|
|
184
187
|
throw this.unsupported(context, "the type is not serializable");
|
|
185
188
|
}
|
|
186
189
|
}
|
|
190
|
+
buildDefinitionOrThrow(reference, context) {
|
|
191
|
+
const key = this.getDefinitionKey(reference);
|
|
192
|
+
const identity = this.getCanonicalIdentity(reference, key);
|
|
193
|
+
const dataType = this.getDataTypeOrThrow(reference, context);
|
|
194
|
+
this.assertSupportedDataTypeParametersOrThrow(dataType, context);
|
|
195
|
+
this.registerNamedDefinitionOrThrow(reference, identity, dataType);
|
|
196
|
+
}
|
|
187
197
|
getTypeDefinitions() {
|
|
188
198
|
return Object.freeze(this.definitionKeys.map((key) => {
|
|
189
199
|
const definition = this.definitions.get(key);
|
|
@@ -204,17 +214,21 @@ class AnalyzedDamlTypeBuilder {
|
|
|
204
214
|
this.assertSupportedDataTypeParametersOrThrow(dataType, context);
|
|
205
215
|
this.assertNamedArgumentCountOrThrow(typeArguments, dataType, context);
|
|
206
216
|
const analyzedTypeArguments = Object.freeze(typeArguments.map((argument) => this.buildOrThrow(argument, context, typeParameters)));
|
|
207
|
-
|
|
208
|
-
this.definitionKeys.push(key);
|
|
209
|
-
this.definitions.set(key, undefined);
|
|
210
|
-
this.definitions.set(key, this.buildNamedDefinitionOrThrow(reference, identity, dataType));
|
|
211
|
-
}
|
|
217
|
+
this.registerNamedDefinitionOrThrow(reference, identity, dataType);
|
|
212
218
|
return Object.freeze({
|
|
213
219
|
kind: "namedReference",
|
|
214
220
|
identity,
|
|
215
221
|
typeArguments: analyzedTypeArguments,
|
|
216
222
|
});
|
|
217
223
|
}
|
|
224
|
+
registerNamedDefinitionOrThrow(reference, identity, dataType) {
|
|
225
|
+
const key = this.getDefinitionKey(reference);
|
|
226
|
+
if (!this.definitions.has(key)) {
|
|
227
|
+
this.definitionKeys.push(key);
|
|
228
|
+
this.definitions.set(key, undefined);
|
|
229
|
+
this.definitions.set(key, this.buildNamedDefinitionOrThrow(reference, identity, dataType));
|
|
230
|
+
}
|
|
231
|
+
}
|
|
218
232
|
buildNamedDefinitionOrThrow(reference, identity, dataType) {
|
|
219
233
|
const typeParameters = this.createTypeParameterScope(dataType.typeParameters);
|
|
220
234
|
if (dataType.definition.kind === "record") {
|
|
@@ -4,13 +4,13 @@ import { GeneratedNamedTypeFile } from "../emission-model/generated-named-type-f
|
|
|
4
4
|
import { GeneratedTemplateBindingFile } from "../emission-model/generated-template-binding-file.js";
|
|
5
5
|
import { TypeScriptNameResolver } from "./type-script-name-resolver.js";
|
|
6
6
|
import { type DamlModuleImportStyle } from "./daml-module-import-style.js";
|
|
7
|
-
/** Emits TypeScript declarations for
|
|
7
|
+
/** Emits TypeScript declarations for modeled named DAML records, variants, and enums. */
|
|
8
8
|
export declare class NamedTypeEmitter {
|
|
9
9
|
private readonly nameResolver;
|
|
10
10
|
constructor(nameResolver?: TypeScriptNameResolver);
|
|
11
11
|
/** Prepares shared package/module output mappings with template emission. */
|
|
12
12
|
prepareProjectOrThrow(templates: readonly import("../analysis/analyzed-template.js").AnalyzedTemplate[], definitions: readonly AnalyzedDamlTypeDefinition[], packageMetadata?: ReadonlyMap<string, DamlInterfacePackageMetadata>): void;
|
|
13
|
-
/** Emits one `types.ts` module for every
|
|
13
|
+
/** Emits one `types.ts` module for every modeled DAML package/module identity. */
|
|
14
14
|
emitNamedTypeFiles(definitions: readonly AnalyzedDamlTypeDefinition[], moduleImportStyle?: DamlModuleImportStyle): readonly GeneratedNamedTypeFile[];
|
|
15
15
|
/** Emits named type files from an already prepared shared name resolver. */
|
|
16
16
|
emitPreparedNamedTypeFiles(definitions: readonly AnalyzedDamlTypeDefinition[], templateFiles?: readonly GeneratedTemplateBindingFile[], moduleImportStyle?: DamlModuleImportStyle): readonly GeneratedNamedTypeFile[];
|
|
@@ -2,7 +2,7 @@ import { DamlLfBuiltinType } from "../../daml-lf/model/daml-lf-builtin-type.js";
|
|
|
2
2
|
import { GeneratedNamedTypeFile } from "../emission-model/generated-named-type-file.js";
|
|
3
3
|
import { TypeScriptNameResolver } from "./type-script-name-resolver.js";
|
|
4
4
|
import { RelativeModuleSpecifier } from "./relative-module-specifier.js";
|
|
5
|
-
/** Emits TypeScript declarations for
|
|
5
|
+
/** Emits TypeScript declarations for modeled named DAML records, variants, and enums. */
|
|
6
6
|
export class NamedTypeEmitter {
|
|
7
7
|
nameResolver;
|
|
8
8
|
constructor(nameResolver = new TypeScriptNameResolver()) {
|
|
@@ -13,7 +13,7 @@ export class NamedTypeEmitter {
|
|
|
13
13
|
prepareProjectOrThrow(templates, definitions, packageMetadata = new Map()) {
|
|
14
14
|
this.nameResolver.prepareProjectOrThrow(templates, definitions, packageMetadata);
|
|
15
15
|
}
|
|
16
|
-
/** Emits one `types.ts` module for every
|
|
16
|
+
/** Emits one `types.ts` module for every modeled DAML package/module identity. */
|
|
17
17
|
emitNamedTypeFiles(definitions, moduleImportStyle) {
|
|
18
18
|
this.nameResolver.prepareProjectOrThrow([], definitions);
|
|
19
19
|
return this.emitPreparedNamedTypeFiles(definitions, [], moduleImportStyle);
|
|
@@ -5,11 +5,17 @@ import { DamlLfField } from "../model/daml-lf-field.js";
|
|
|
5
5
|
import { DamlLfTemplate } from "../model/daml-lf-template.js";
|
|
6
6
|
import { DamlLfTemplateId } from "../model/daml-lf-template-id.js";
|
|
7
7
|
import { TypeConReference } from "../model/type-con-reference.js";
|
|
8
|
+
export type DamlLfDataTypeEntry = {
|
|
9
|
+
readonly reference: TypeConReference;
|
|
10
|
+
readonly definition: DamlLfDataType;
|
|
11
|
+
};
|
|
8
12
|
export declare class DamlLfSemanticModel {
|
|
9
13
|
private readonly compilation;
|
|
10
14
|
constructor(compilation: DamlLfCompilation);
|
|
11
15
|
/** Returns the templates exposed by the compiled workspace. */
|
|
12
16
|
getTemplates(): readonly DamlLfTemplate[];
|
|
17
|
+
/** Returns every named data type with its fully qualified identity. */
|
|
18
|
+
getDataTypes(): readonly DamlLfDataTypeEntry[];
|
|
13
19
|
/** Returns the choices declared on a template identity. */
|
|
14
20
|
getTemplateChoicesOrThrow(templateId: DamlLfTemplateId): readonly DamlLfChoice[];
|
|
15
21
|
/** Returns the record fields for a resolved type constructor reference. */
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { DamlLfDataType } from "../model/daml-lf-data-type.js";
|
|
2
|
+
import { TypeConReference } from "../model/type-con-reference.js";
|
|
1
3
|
export class DamlLfSemanticModel {
|
|
2
4
|
compilation;
|
|
3
5
|
constructor(compilation) {
|
|
@@ -8,6 +10,19 @@ export class DamlLfSemanticModel {
|
|
|
8
10
|
getTemplates() {
|
|
9
11
|
return this.compilation.getTemplates();
|
|
10
12
|
}
|
|
13
|
+
/** Returns every named data type with its fully qualified identity. */
|
|
14
|
+
getDataTypes() {
|
|
15
|
+
return this.compilation.getPackages().flatMap((pkg) => pkg.modules.flatMap((module) => module.definitions
|
|
16
|
+
.filter((definition) => definition instanceof DamlLfDataType)
|
|
17
|
+
.map((definition) => Object.freeze({
|
|
18
|
+
reference: Object.freeze(new TypeConReference({
|
|
19
|
+
packageId: pkg.packageId,
|
|
20
|
+
moduleName: module.name,
|
|
21
|
+
name: definition.name,
|
|
22
|
+
})),
|
|
23
|
+
definition,
|
|
24
|
+
}))));
|
|
25
|
+
}
|
|
11
26
|
/** Returns the choices declared on a template identity. */
|
|
12
27
|
getTemplateChoicesOrThrow(templateId) {
|
|
13
28
|
return this.compilation.getTemplateChoicesOrThrow(templateId);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@distrohelena/canton-typescript-sdk",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.54",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
},
|
|
88
88
|
"scripts": {
|
|
89
89
|
"build": "node ./scripts/clean-dist.mjs && tsc -p tsconfig.json && tsc -p tsconfig.cjs.json && node ./scripts/write-cjs-package.mjs",
|
|
90
|
-
"prepublishOnly": "npm run build
|
|
90
|
+
"prepublishOnly": "npm run build",
|
|
91
91
|
"generate:daml-interface": "node ./dist/daml-interface/cli/daml-interface-cli-main.js",
|
|
92
92
|
"generate:grpc": "node ./scripts/generate-grpc-bindings.mjs",
|
|
93
93
|
"examples:check": "npm run build && tsc -p tsconfig.examples.json --noEmit",
|