@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.
@@ -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
- 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
- }
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 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);
@@ -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,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
- 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
- }
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 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);
@@ -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.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 && 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",