@distrohelena/canton-typescript-sdk 0.1.53 → 0.1.55

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.
@@ -25,6 +25,12 @@ class DamlInterfaceAnalyzer {
25
25
  const templates = semanticModel
26
26
  .getTemplates()
27
27
  .map((item) => this.analyzeTemplateOrThrow(item, typeBuilder));
28
+ for (const { reference, definition } of semanticModel.getDataTypes()) {
29
+ if (!definition.serializable) {
30
+ continue;
31
+ }
32
+ typeBuilder.buildDefinitionOrThrow(reference, `data type '${reference.name}'`);
33
+ }
28
34
  return new DamlInterfaceAnalysisResult({
29
35
  templates,
30
36
  typeDefinitions: typeBuilder.getTypeDefinitions(),
@@ -189,6 +195,13 @@ class AnalyzedDamlTypeBuilder {
189
195
  throw this.unsupported(context, "the type is not serializable");
190
196
  }
191
197
  }
198
+ buildDefinitionOrThrow(reference, context) {
199
+ const key = this.getDefinitionKey(reference);
200
+ const identity = this.getCanonicalIdentity(reference, key);
201
+ const dataType = this.getDataTypeOrThrow(reference, context);
202
+ this.assertSupportedDataTypeParametersOrThrow(dataType, context);
203
+ this.registerNamedDefinitionOrThrow(reference, identity, dataType);
204
+ }
192
205
  getTypeDefinitions() {
193
206
  return Object.freeze(this.definitionKeys.map((key) => {
194
207
  const definition = this.definitions.get(key);
@@ -209,17 +222,21 @@ class AnalyzedDamlTypeBuilder {
209
222
  this.assertSupportedDataTypeParametersOrThrow(dataType, context);
210
223
  this.assertNamedArgumentCountOrThrow(typeArguments, dataType, context);
211
224
  const analyzedTypeArguments = Object.freeze(typeArguments.map((argument) => this.buildOrThrow(argument, context, typeParameters)));
212
- if (!this.definitions.has(key)) {
213
- this.definitionKeys.push(key);
214
- this.definitions.set(key, undefined);
215
- this.definitions.set(key, this.buildNamedDefinitionOrThrow(reference, identity, dataType));
216
- }
225
+ this.registerNamedDefinitionOrThrow(reference, identity, dataType);
217
226
  return Object.freeze({
218
227
  kind: "namedReference",
219
228
  identity,
220
229
  typeArguments: analyzedTypeArguments,
221
230
  });
222
231
  }
232
+ registerNamedDefinitionOrThrow(reference, identity, dataType) {
233
+ const key = this.getDefinitionKey(reference);
234
+ if (!this.definitions.has(key)) {
235
+ this.definitionKeys.push(key);
236
+ this.definitions.set(key, undefined);
237
+ this.definitions.set(key, this.buildNamedDefinitionOrThrow(reference, identity, dataType));
238
+ }
239
+ }
223
240
  buildNamedDefinitionOrThrow(reference, identity, dataType) {
224
241
  const typeParameters = this.createTypeParameterScope(dataType.typeParameters);
225
242
  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 reachable named DAML records, variants, and enums. */
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 reachable DAML package/module identity. */
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);
@@ -7,6 +7,7 @@ class DamlLfDataType extends daml_lf_definition_js_1.DamlLfDefinition {
7
7
  nodeKind = daml_lf_node_kind_js_1.DamlLfNodeKind.dataType;
8
8
  definition;
9
9
  fields;
10
+ serializable;
10
11
  typeParameters;
11
12
  constructor(init) {
12
13
  super({
@@ -19,6 +20,7 @@ class DamlLfDataType extends daml_lf_definition_js_1.DamlLfDefinition {
19
20
  this.fields = this.definition.kind === "record"
20
21
  ? this.definition.fields
21
22
  : [];
23
+ this.serializable = init.serializable ?? true;
22
24
  this.typeParameters = Object.freeze((init.typeParameters ?? []).map((parameter) => Object.freeze({
23
25
  ...parameter,
24
26
  kind: freezeTypeParameterKind(parameter.kind),
@@ -236,6 +236,7 @@ class Lf2ModelMapper {
236
236
  return new daml_lf_data_type_js_1.DamlLfDataType({
237
237
  name: Lf2ModelMapper.resolveInternedDottedName(rawPackage.internedStrings, rawPackage.internedDottedNames, rawDataType.nameInternedDname),
238
238
  definition,
239
+ serializable: rawDataType.serializable,
239
240
  typeParameters: rawDataType.params.map((parameter) => Lf2ModelMapper.mapTypeParameter(rawPackage, parameter)),
240
241
  });
241
242
  }
@@ -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 reachable named DAML data type and its complete serializable shape. */
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,12 @@ export class DamlInterfaceAnalyzer {
21
21
  const templates = semanticModel
22
22
  .getTemplates()
23
23
  .map((item) => this.analyzeTemplateOrThrow(item, typeBuilder));
24
+ for (const { reference, definition } of semanticModel.getDataTypes()) {
25
+ if (!definition.serializable) {
26
+ continue;
27
+ }
28
+ typeBuilder.buildDefinitionOrThrow(reference, `data type '${reference.name}'`);
29
+ }
24
30
  return new DamlInterfaceAnalysisResult({
25
31
  templates,
26
32
  typeDefinitions: typeBuilder.getTypeDefinitions(),
@@ -184,6 +190,13 @@ class AnalyzedDamlTypeBuilder {
184
190
  throw this.unsupported(context, "the type is not serializable");
185
191
  }
186
192
  }
193
+ buildDefinitionOrThrow(reference, context) {
194
+ const key = this.getDefinitionKey(reference);
195
+ const identity = this.getCanonicalIdentity(reference, key);
196
+ const dataType = this.getDataTypeOrThrow(reference, context);
197
+ this.assertSupportedDataTypeParametersOrThrow(dataType, context);
198
+ this.registerNamedDefinitionOrThrow(reference, identity, dataType);
199
+ }
187
200
  getTypeDefinitions() {
188
201
  return Object.freeze(this.definitionKeys.map((key) => {
189
202
  const definition = this.definitions.get(key);
@@ -204,17 +217,21 @@ class AnalyzedDamlTypeBuilder {
204
217
  this.assertSupportedDataTypeParametersOrThrow(dataType, context);
205
218
  this.assertNamedArgumentCountOrThrow(typeArguments, dataType, context);
206
219
  const analyzedTypeArguments = Object.freeze(typeArguments.map((argument) => this.buildOrThrow(argument, context, typeParameters)));
207
- if (!this.definitions.has(key)) {
208
- this.definitionKeys.push(key);
209
- this.definitions.set(key, undefined);
210
- this.definitions.set(key, this.buildNamedDefinitionOrThrow(reference, identity, dataType));
211
- }
220
+ this.registerNamedDefinitionOrThrow(reference, identity, dataType);
212
221
  return Object.freeze({
213
222
  kind: "namedReference",
214
223
  identity,
215
224
  typeArguments: analyzedTypeArguments,
216
225
  });
217
226
  }
227
+ registerNamedDefinitionOrThrow(reference, identity, dataType) {
228
+ const key = this.getDefinitionKey(reference);
229
+ if (!this.definitions.has(key)) {
230
+ this.definitionKeys.push(key);
231
+ this.definitions.set(key, undefined);
232
+ this.definitions.set(key, this.buildNamedDefinitionOrThrow(reference, identity, dataType));
233
+ }
234
+ }
218
235
  buildNamedDefinitionOrThrow(reference, identity, dataType) {
219
236
  const typeParameters = this.createTypeParameterScope(dataType.typeParameters);
220
237
  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 reachable named DAML records, variants, and enums. */
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 reachable DAML package/module identity. */
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 reachable named DAML records, variants, and enums. */
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 reachable DAML package/module identity. */
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);
@@ -37,11 +37,13 @@ export declare class DamlLfDataType extends DamlLfDefinition {
37
37
  readonly nodeKind = DamlLfNodeKind.dataType;
38
38
  readonly definition: DamlLfDataTypeDefinition;
39
39
  readonly fields: readonly DamlLfField[];
40
+ readonly serializable: boolean;
40
41
  readonly typeParameters: readonly DamlLfTypeParameter[];
41
42
  constructor(init: {
42
43
  name: string;
43
44
  definition?: DamlLfDataTypeDefinition;
44
45
  fields?: readonly DamlLfField[];
46
+ serializable?: boolean;
45
47
  typeParameters?: readonly DamlLfTypeParameter[];
46
48
  });
47
49
  }
@@ -4,6 +4,7 @@ export class DamlLfDataType extends DamlLfDefinition {
4
4
  nodeKind = DamlLfNodeKind.dataType;
5
5
  definition;
6
6
  fields;
7
+ serializable;
7
8
  typeParameters;
8
9
  constructor(init) {
9
10
  super({
@@ -16,6 +17,7 @@ export class DamlLfDataType extends DamlLfDefinition {
16
17
  this.fields = this.definition.kind === "record"
17
18
  ? this.definition.fields
18
19
  : [];
20
+ this.serializable = init.serializable ?? true;
19
21
  this.typeParameters = Object.freeze((init.typeParameters ?? []).map((parameter) => Object.freeze({
20
22
  ...parameter,
21
23
  kind: freezeTypeParameterKind(parameter.kind),
@@ -233,6 +233,7 @@ export class Lf2ModelMapper {
233
233
  return new DamlLfDataType({
234
234
  name: Lf2ModelMapper.resolveInternedDottedName(rawPackage.internedStrings, rawPackage.internedDottedNames, rawDataType.nameInternedDname),
235
235
  definition,
236
+ serializable: rawDataType.serializable,
236
237
  typeParameters: rawDataType.params.map((parameter) => Lf2ModelMapper.mapTypeParameter(rawPackage, parameter)),
237
238
  });
238
239
  }
@@ -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.53",
3
+ "version": "0.1.55",
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 && npm run test:unit",
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",