@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.
- package/dist/cjs/daml-interface/analysis/daml-interface-analyzer.js +22 -5
- package/dist/cjs/daml-interface/emission/named-type-emitter.js +2 -2
- package/dist/cjs/daml-lf/model/daml-lf-data-type.js +2 -0
- package/dist/cjs/daml-lf/model/lf-2-model-mapper.js +1 -0
- 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 +22 -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/model/daml-lf-data-type.d.ts +2 -0
- package/dist/daml-lf/model/daml-lf-data-type.js +2 -0
- package/dist/daml-lf/model/lf-2-model-mapper.js +1 -0
- 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,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
|
-
|
|
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
|
|
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);
|
|
@@ -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
|
|
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
|
-
|
|
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
|
|
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);
|
|
@@ -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.
|
|
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
|
|
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",
|