@tsonic/emitter 0.0.14 → 0.0.16
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/.tsbuildinfo +1 -1
- package/dist/adapter-generator.js +3 -3
- package/dist/adapter-generator.js.map +1 -1
- package/dist/array.test.d.ts +1 -1
- package/dist/array.test.js +18 -17
- package/dist/array.test.js.map +1 -1
- package/dist/core/attributes.test.js +2 -2
- package/dist/core/attributes.test.js.map +1 -1
- package/dist/core/imports.d.ts.map +1 -1
- package/dist/core/imports.js +7 -12
- package/dist/core/imports.js.map +1 -1
- package/dist/core/local-types.d.ts.map +1 -1
- package/dist/core/local-types.js +12 -0
- package/dist/core/local-types.js.map +1 -1
- package/dist/core/module-emitter/orchestrator.d.ts.map +1 -1
- package/dist/core/module-emitter/orchestrator.js +15 -2
- package/dist/core/module-emitter/orchestrator.js.map +1 -1
- package/dist/core/module-emitter/static-container.d.ts.map +1 -1
- package/dist/core/module-emitter/static-container.js +30 -4
- package/dist/core/module-emitter/static-container.js.map +1 -1
- package/dist/core/module-emitter.test.js +6 -6
- package/dist/core/module-map.d.ts.map +1 -1
- package/dist/core/module-map.js +42 -0
- package/dist/core/module-map.js.map +1 -1
- package/dist/core/naming-collisions.d.ts +4 -0
- package/dist/core/naming-collisions.d.ts.map +1 -0
- package/dist/core/naming-collisions.js +191 -0
- package/dist/core/naming-collisions.js.map +1 -0
- package/dist/core/type-member-index.d.ts +4 -0
- package/dist/core/type-member-index.d.ts.map +1 -0
- package/dist/core/type-member-index.js +62 -0
- package/dist/core/type-member-index.js.map +1 -0
- package/dist/core/unsafe.d.ts +11 -0
- package/dist/core/unsafe.d.ts.map +1 -0
- package/dist/core/unsafe.js +264 -0
- package/dist/core/unsafe.js.map +1 -0
- package/dist/emitter-types/context.d.ts +1 -1
- package/dist/emitter-types/context.d.ts.map +1 -1
- package/dist/emitter-types/context.js +5 -3
- package/dist/emitter-types/context.js.map +1 -1
- package/dist/emitter-types/core.d.ts +45 -2
- package/dist/emitter-types/core.d.ts.map +1 -1
- package/dist/emitter-types/fqn.d.ts +0 -7
- package/dist/emitter-types/fqn.d.ts.map +1 -1
- package/dist/emitter-types/fqn.js +0 -8
- package/dist/emitter-types/fqn.js.map +1 -1
- package/dist/emitter-types/index.d.ts +1 -1
- package/dist/emitter-types/index.d.ts.map +1 -1
- package/dist/emitter-types/index.js.map +1 -1
- package/dist/emitter.d.ts.map +1 -1
- package/dist/emitter.js +12 -1
- package/dist/emitter.js.map +1 -1
- package/dist/expression-emitter.d.ts.map +1 -1
- package/dist/expression-emitter.js +255 -73
- package/dist/expression-emitter.js.map +1 -1
- package/dist/expressions/access.d.ts +3 -1
- package/dist/expressions/access.d.ts.map +1 -1
- package/dist/expressions/access.js +144 -50
- package/dist/expressions/access.js.map +1 -1
- package/dist/expressions/calls.d.ts.map +1 -1
- package/dist/expressions/calls.js +266 -88
- package/dist/expressions/calls.js.map +1 -1
- package/dist/expressions/collections.d.ts.map +1 -1
- package/dist/expressions/collections.js +169 -57
- package/dist/expressions/collections.js.map +1 -1
- package/dist/expressions/functions.d.ts.map +1 -1
- package/dist/expressions/functions.js +30 -10
- package/dist/expressions/functions.js.map +1 -1
- package/dist/expressions/identifiers.d.ts.map +1 -1
- package/dist/expressions/identifiers.js +11 -30
- package/dist/expressions/identifiers.js.map +1 -1
- package/dist/expressions/index.test.js +89 -200
- package/dist/expressions/index.test.js.map +1 -1
- package/dist/expressions/literals.d.ts +4 -5
- package/dist/expressions/literals.d.ts.map +1 -1
- package/dist/expressions/literals.js +94 -15
- package/dist/expressions/literals.js.map +1 -1
- package/dist/expressions/operators.d.ts +0 -4
- package/dist/expressions/operators.d.ts.map +1 -1
- package/dist/expressions/operators.js +84 -24
- package/dist/expressions/operators.js.map +1 -1
- package/dist/expressions/other.d.ts.map +1 -1
- package/dist/expressions/other.js +21 -3
- package/dist/expressions/other.js.map +1 -1
- package/dist/expressions/parentheses.d.ts +4 -0
- package/dist/expressions/parentheses.d.ts.map +1 -0
- package/dist/expressions/parentheses.js +83 -0
- package/dist/expressions/parentheses.js.map +1 -0
- package/dist/extension-methods.test.d.ts +5 -0
- package/dist/extension-methods.test.d.ts.map +1 -0
- package/dist/extension-methods.test.js +110 -0
- package/dist/extension-methods.test.js.map +1 -0
- package/dist/generator-exchange.d.ts.map +1 -1
- package/dist/generator-exchange.js +5 -2
- package/dist/generator-exchange.js.map +1 -1
- package/dist/generator-wrapper.d.ts.map +1 -1
- package/dist/generator-wrapper.js +13 -7
- package/dist/generator-wrapper.js.map +1 -1
- package/dist/generator-wrapper.test.js +12 -12
- package/dist/generator-wrapper.test.js.map +1 -1
- package/dist/generator.test.js +42 -42
- package/dist/generator.test.js.map +1 -1
- package/dist/golden-tests/discovery.d.ts +6 -11
- package/dist/golden-tests/discovery.d.ts.map +1 -1
- package/dist/golden-tests/discovery.js +14 -79
- package/dist/golden-tests/discovery.js.map +1 -1
- package/dist/golden-tests/index.d.ts +1 -1
- package/dist/golden-tests/index.d.ts.map +1 -1
- package/dist/golden-tests/index.js.map +1 -1
- package/dist/golden-tests/runner.d.ts.map +1 -1
- package/dist/golden-tests/runner.js +6 -7
- package/dist/golden-tests/runner.js.map +1 -1
- package/dist/golden-tests/types.d.ts +0 -7
- package/dist/golden-tests/types.d.ts.map +1 -1
- package/dist/golden.test.d.ts +3 -10
- package/dist/golden.test.d.ts.map +1 -1
- package/dist/golden.test.js +8 -24
- package/dist/golden.test.js.map +1 -1
- package/dist/hierarchical-bindings.test.js +18 -12
- package/dist/hierarchical-bindings.test.js.map +1 -1
- package/dist/integration.test.js +76 -35
- package/dist/integration.test.js.map +1 -1
- package/dist/invariants/emitter-globals-subset.test.d.ts +1 -1
- package/dist/invariants/emitter-globals-subset.test.js +34 -74
- package/dist/invariants/emitter-globals-subset.test.js.map +1 -1
- package/dist/invariants/numeric-proof-contract.test.js +3 -3
- package/dist/invariants/numeric-proof-contract.test.js.map +1 -1
- package/dist/naming-policy.d.ts +5 -0
- package/dist/naming-policy.d.ts.map +1 -0
- package/dist/naming-policy.js +10 -0
- package/dist/naming-policy.js.map +1 -0
- package/dist/patterns.d.ts +98 -0
- package/dist/patterns.d.ts.map +1 -0
- package/dist/patterns.js +366 -0
- package/dist/patterns.js.map +1 -0
- package/dist/patterns.test.d.ts +15 -0
- package/dist/patterns.test.d.ts.map +1 -0
- package/dist/patterns.test.js +1262 -0
- package/dist/patterns.test.js.map +1 -0
- package/dist/specialization/generation.d.ts.map +1 -1
- package/dist/specialization/generation.js +2 -2
- package/dist/specialization/generation.js.map +1 -1
- package/dist/specialization/generic-classes.test.js +1 -1
- package/dist/specialization/generic-functions.test.js +6 -6
- package/dist/specialization/interfaces.test.js +5 -5
- package/dist/specialization/substitution.d.ts.map +1 -1
- package/dist/specialization/substitution.js +4 -0
- package/dist/specialization/substitution.js.map +1 -1
- package/dist/specialization/type-aliases.test.js +6 -6
- package/dist/specialization/type-aliases.test.js.map +1 -1
- package/dist/statement-emitter.d.ts.map +1 -1
- package/dist/statement-emitter.js +1 -1
- package/dist/statement-emitter.js.map +1 -1
- package/dist/statements/blocks.d.ts.map +1 -1
- package/dist/statements/blocks.js +14 -45
- package/dist/statements/blocks.js.map +1 -1
- package/dist/statements/classes/index.d.ts +1 -1
- package/dist/statements/classes/index.d.ts.map +1 -1
- package/dist/statements/classes/index.js +1 -1
- package/dist/statements/classes/index.js.map +1 -1
- package/dist/statements/classes/inline-types.d.ts +1 -1
- package/dist/statements/classes/inline-types.d.ts.map +1 -1
- package/dist/statements/classes/inline-types.js +15 -5
- package/dist/statements/classes/inline-types.js.map +1 -1
- package/dist/statements/classes/members/constructors.d.ts.map +1 -1
- package/dist/statements/classes/members/constructors.js +40 -14
- package/dist/statements/classes/members/constructors.js.map +1 -1
- package/dist/statements/classes/members/methods.d.ts.map +1 -1
- package/dist/statements/classes/members/methods.js +62 -25
- package/dist/statements/classes/members/methods.js.map +1 -1
- package/dist/statements/classes/members/orchestrator.d.ts.map +1 -1
- package/dist/statements/classes/members/orchestrator.js +1 -3
- package/dist/statements/classes/members/orchestrator.js.map +1 -1
- package/dist/statements/classes/members/properties.d.ts.map +1 -1
- package/dist/statements/classes/members/properties.js +70 -10
- package/dist/statements/classes/members/properties.js.map +1 -1
- package/dist/statements/classes/parameters.d.ts +43 -1
- package/dist/statements/classes/parameters.d.ts.map +1 -1
- package/dist/statements/classes/parameters.js +73 -13
- package/dist/statements/classes/parameters.js.map +1 -1
- package/dist/statements/classes/properties.d.ts.map +1 -1
- package/dist/statements/classes/properties.js +6 -7
- package/dist/statements/classes/properties.js.map +1 -1
- package/dist/statements/classes.d.ts +1 -1
- package/dist/statements/classes.d.ts.map +1 -1
- package/dist/statements/classes.js +1 -1
- package/dist/statements/classes.js.map +1 -1
- package/dist/statements/control/conditionals.d.ts.map +1 -1
- package/dist/statements/control/conditionals.js +193 -23
- package/dist/statements/control/conditionals.js.map +1 -1
- package/dist/statements/control/loops.d.ts.map +1 -1
- package/dist/statements/control/loops.js +25 -5
- package/dist/statements/control/loops.js.map +1 -1
- package/dist/statements/declarations/classes.d.ts.map +1 -1
- package/dist/statements/declarations/classes.js +150 -12
- package/dist/statements/declarations/classes.js.map +1 -1
- package/dist/statements/declarations/enums.d.ts.map +1 -1
- package/dist/statements/declarations/enums.js +2 -1
- package/dist/statements/declarations/enums.js.map +1 -1
- package/dist/statements/declarations/functions.d.ts.map +1 -1
- package/dist/statements/declarations/functions.js +44 -19
- package/dist/statements/declarations/functions.js.map +1 -1
- package/dist/statements/declarations/interfaces.d.ts.map +1 -1
- package/dist/statements/declarations/interfaces.js +71 -10
- package/dist/statements/declarations/interfaces.js.map +1 -1
- package/dist/statements/declarations/structs.test.js +5 -5
- package/dist/statements/declarations/type-aliases.d.ts.map +1 -1
- package/dist/statements/declarations/type-aliases.js +24 -5
- package/dist/statements/declarations/type-aliases.js.map +1 -1
- package/dist/statements/declarations/variables.d.ts.map +1 -1
- package/dist/statements/declarations/variables.js +194 -37
- package/dist/statements/declarations/variables.js.map +1 -1
- package/dist/statements/index.test.js +7 -5
- package/dist/statements/index.test.js.map +1 -1
- package/dist/type-assertion.test.js +1 -1
- package/dist/types/arrays.d.ts +3 -9
- package/dist/types/arrays.d.ts.map +1 -1
- package/dist/types/arrays.js +5 -19
- package/dist/types/arrays.js.map +1 -1
- package/dist/types/emitter.d.ts.map +1 -1
- package/dist/types/emitter.js +3 -2
- package/dist/types/emitter.js.map +1 -1
- package/dist/types/index.test.js +3 -3
- package/dist/types/parameters.d.ts +1 -1
- package/dist/types/parameters.d.ts.map +1 -1
- package/dist/types/parameters.js +77 -8
- package/dist/types/parameters.js.map +1 -1
- package/dist/types/parameters.test.js +1 -1
- package/dist/types/parameters.test.js.map +1 -1
- package/dist/types/references.d.ts.map +1 -1
- package/dist/types/references.js +126 -55
- package/dist/types/references.js.map +1 -1
- package/dist/types/references.test.js +46 -106
- package/dist/types/references.test.js.map +1 -1
- package/dist/types/unions.d.ts.map +1 -1
- package/dist/types/unions.js +20 -0
- package/dist/types/unions.js.map +1 -1
- package/dist/types/unions.test.js +9 -9
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +3 -3
|
@@ -4,11 +4,28 @@
|
|
|
4
4
|
import { getIndent, indent, dedent } from "../../../types.js";
|
|
5
5
|
import { emitExpression } from "../../../expression-emitter.js";
|
|
6
6
|
import { emitBlockStatement } from "../../blocks.js";
|
|
7
|
-
import {
|
|
7
|
+
import { escapeCSharpIdentifier } from "../../../emitter-types/index.js";
|
|
8
|
+
import { emitParametersWithDestructuring, generateParameterDestructuring, } from "../parameters.js";
|
|
9
|
+
const seedLocalNameMapFromParameters = (params, context) => {
|
|
10
|
+
const map = new Map(context.localNameMap ?? []);
|
|
11
|
+
for (const p of params) {
|
|
12
|
+
if (p.pattern.kind === "identifierPattern") {
|
|
13
|
+
map.set(p.pattern.name, escapeCSharpIdentifier(p.pattern.name));
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return { ...context, localNameMap: map };
|
|
17
|
+
};
|
|
8
18
|
/**
|
|
9
19
|
* Emit a constructor declaration
|
|
10
20
|
*/
|
|
11
21
|
export const emitConstructorMember = (member, context) => {
|
|
22
|
+
const savedScoped = {
|
|
23
|
+
typeParameters: context.typeParameters,
|
|
24
|
+
typeParamConstraints: context.typeParamConstraints,
|
|
25
|
+
typeParameterNameMap: context.typeParameterNameMap,
|
|
26
|
+
returnType: context.returnType,
|
|
27
|
+
localNameMap: context.localNameMap,
|
|
28
|
+
};
|
|
12
29
|
const ind = getIndent(context);
|
|
13
30
|
let currentContext = context;
|
|
14
31
|
const parts = [];
|
|
@@ -18,15 +35,16 @@ export const emitConstructorMember = (member, context) => {
|
|
|
18
35
|
// Constructor name (same as class name)
|
|
19
36
|
const constructorName = context.className ?? "UnknownClass";
|
|
20
37
|
parts.push(constructorName);
|
|
21
|
-
// Parameters
|
|
22
|
-
const
|
|
23
|
-
currentContext =
|
|
38
|
+
// Parameters (with destructuring support)
|
|
39
|
+
const paramsResult = emitParametersWithDestructuring(member.parameters, currentContext);
|
|
40
|
+
currentContext = paramsResult.context;
|
|
41
|
+
currentContext = seedLocalNameMapFromParameters(member.parameters, currentContext);
|
|
24
42
|
// Constructor body
|
|
25
43
|
if (!member.body) {
|
|
26
44
|
// Abstract or interface constructor without body
|
|
27
45
|
const signature = parts.join(" ");
|
|
28
|
-
const code = `${ind}${signature}(${
|
|
29
|
-
return [code, currentContext];
|
|
46
|
+
const code = `${ind}${signature}(${paramsResult.parameterList});`;
|
|
47
|
+
return [code, { ...currentContext, ...savedScoped }];
|
|
30
48
|
}
|
|
31
49
|
// Check for super() call - MUST be the first statement if present
|
|
32
50
|
// C# base() calls execute before the constructor body, so we can't preserve
|
|
@@ -39,12 +57,7 @@ export const emitConstructorMember = (member, context) => {
|
|
|
39
57
|
stmt.expression.callee.kind === "identifier" &&
|
|
40
58
|
stmt.expression.callee.name === "super");
|
|
41
59
|
if (hasLaterSuperCall) {
|
|
42
|
-
|
|
43
|
-
// For now, emit a comment noting the issue
|
|
44
|
-
const signature = parts.join(" ");
|
|
45
|
-
const errorComment = `${ind}// ERROR: super() must be the first statement in constructor`;
|
|
46
|
-
const code = `${errorComment}\n${ind}${signature}(${params[0]})\n${ind}{\n${ind} // Constructor body omitted due to error\n${ind}}`;
|
|
47
|
-
return [code, currentContext];
|
|
60
|
+
throw new Error("Unsupported constructor semantics: super() must be the first statement to preserve JavaScript initialization order.");
|
|
48
61
|
}
|
|
49
62
|
// Emit body without the super() call
|
|
50
63
|
const bodyContext = indent(currentContext);
|
|
@@ -53,9 +66,22 @@ export const emitConstructorMember = (member, context) => {
|
|
|
53
66
|
statements: bodyStatements,
|
|
54
67
|
};
|
|
55
68
|
const [bodyCode, finalContext] = emitBlockStatement(modifiedBody, bodyContext);
|
|
69
|
+
// Inject parameter destructuring statements at the start of the body
|
|
70
|
+
let finalBodyCode = bodyCode;
|
|
71
|
+
if (paramsResult.destructuringParams.length > 0) {
|
|
72
|
+
const bodyInd = getIndent(bodyContext);
|
|
73
|
+
const [destructuringStmts] = generateParameterDestructuring(paramsResult.destructuringParams, bodyInd, finalContext);
|
|
74
|
+
// Inject lines after opening brace
|
|
75
|
+
const lines = bodyCode.split("\n");
|
|
76
|
+
if (lines.length > 1) {
|
|
77
|
+
lines.splice(1, 0, ...destructuringStmts, "");
|
|
78
|
+
finalBodyCode = lines.join("\n");
|
|
79
|
+
}
|
|
80
|
+
}
|
|
56
81
|
const signature = parts.join(" ");
|
|
57
|
-
const code = `${ind}${signature}(${
|
|
58
|
-
|
|
82
|
+
const code = `${ind}${signature}(${paramsResult.parameterList})${baseCall}\n${finalBodyCode}`;
|
|
83
|
+
const returnedContext = dedent(finalContext);
|
|
84
|
+
return [code, { ...returnedContext, ...savedScoped }];
|
|
59
85
|
};
|
|
60
86
|
/**
|
|
61
87
|
* Extract super() call from first statement if present
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constructors.js","sourceRoot":"","sources":["../../../../src/statements/classes/members/constructors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAkB,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"constructors.js","sourceRoot":"","sources":["../../../../src/statements/classes/members/constructors.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"methods.d.ts","sourceRoot":"","sources":["../../../../src/statements/classes/members/methods.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"methods.d.ts","sourceRoot":"","sources":["../../../../src/statements/classes/members/methods.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAoB,MAAM,kBAAkB,CAAC;AACnE,OAAO,EACL,cAAc,EAMf,MAAM,mBAAmB,CAAC;AAwB3B;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAC3B,QAAQ,aAAa,GAAG;IAAE,IAAI,EAAE,mBAAmB,CAAA;CAAE,EACrD,SAAS,cAAc,KACtB,CAAC,MAAM,EAAE,cAAc,CAkMzB,CAAC"}
|
|
@@ -4,16 +4,48 @@
|
|
|
4
4
|
import { getIndent, indent, dedent, withAsync, withScoped, } from "../../../types.js";
|
|
5
5
|
import { emitType, emitTypeParameters } from "../../../type-emitter.js";
|
|
6
6
|
import { emitBlockStatement } from "../../blocks.js";
|
|
7
|
-
import {
|
|
7
|
+
import { emitParametersWithDestructuring, generateParameterDestructuring, } from "../parameters.js";
|
|
8
8
|
import { escapeCSharpIdentifier } from "../../../emitter-types/index.js";
|
|
9
9
|
import { emitAttributes } from "../../../core/attributes.js";
|
|
10
|
+
import { emitCSharpName } from "../../../naming-policy.js";
|
|
11
|
+
const seedLocalNameMapFromParameters = (params, context) => {
|
|
12
|
+
const map = new Map(context.localNameMap ?? []);
|
|
13
|
+
for (const p of params) {
|
|
14
|
+
if (p.pattern.kind === "identifierPattern") {
|
|
15
|
+
map.set(p.pattern.name, escapeCSharpIdentifier(p.pattern.name));
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return { ...context, localNameMap: map };
|
|
19
|
+
};
|
|
10
20
|
/**
|
|
11
21
|
* Emit a method declaration
|
|
12
22
|
*/
|
|
13
23
|
export const emitMethodMember = (member, context) => {
|
|
24
|
+
const savedScoped = {
|
|
25
|
+
typeParameters: context.typeParameters,
|
|
26
|
+
typeParamConstraints: context.typeParamConstraints,
|
|
27
|
+
typeParameterNameMap: context.typeParameterNameMap,
|
|
28
|
+
returnType: context.returnType,
|
|
29
|
+
localNameMap: context.localNameMap,
|
|
30
|
+
};
|
|
14
31
|
const ind = getIndent(context);
|
|
15
32
|
let currentContext = context;
|
|
16
33
|
const parts = [];
|
|
34
|
+
// Build method type parameter names FIRST - needed before emitting return/parameter types
|
|
35
|
+
// Type parameters must be in scope before we emit types that reference them
|
|
36
|
+
const methodTypeParams = new Set([
|
|
37
|
+
...(context.typeParameters ?? []),
|
|
38
|
+
...(member.typeParameters?.map((tp) => tp.name) ?? []),
|
|
39
|
+
]);
|
|
40
|
+
// Create signatureContext with method type parameters in scope
|
|
41
|
+
const signatureContext = {
|
|
42
|
+
...context,
|
|
43
|
+
typeParameters: methodTypeParams,
|
|
44
|
+
};
|
|
45
|
+
// Emit the <T, U> syntax and where clauses EARLY so nullable union emission
|
|
46
|
+
// can see type parameter constraint kinds when emitting return/parameter types.
|
|
47
|
+
const [typeParamsStr, whereClauses, typeParamContext] = emitTypeParameters(member.typeParameters, signatureContext);
|
|
48
|
+
currentContext = typeParamContext;
|
|
17
49
|
// Access modifier
|
|
18
50
|
const accessibility = member.accessibility ?? "public";
|
|
19
51
|
parts.push(accessibility);
|
|
@@ -24,10 +56,14 @@ export const emitMethodMember = (member, context) => {
|
|
|
24
56
|
if (member.isOverride) {
|
|
25
57
|
parts.push("override");
|
|
26
58
|
}
|
|
59
|
+
// Base method virtual (required when overridden in derived types)
|
|
60
|
+
if (!member.isStatic && !member.isOverride && member.isVirtual) {
|
|
61
|
+
parts.push("virtual");
|
|
62
|
+
}
|
|
27
63
|
if (member.isAsync) {
|
|
28
64
|
parts.push("async");
|
|
29
65
|
}
|
|
30
|
-
// Return type
|
|
66
|
+
// Return type - use signatureContext which has method type parameters in scope
|
|
31
67
|
if (member.returnType) {
|
|
32
68
|
const [returnType, newContext] = emitType(member.returnType, currentContext);
|
|
33
69
|
currentContext = newContext;
|
|
@@ -48,19 +84,16 @@ export const emitMethodMember = (member, context) => {
|
|
|
48
84
|
parts.push(member.isAsync ? "global::System.Threading.Tasks.Task" : "void");
|
|
49
85
|
}
|
|
50
86
|
// Method name (escape C# keywords)
|
|
51
|
-
parts.push(
|
|
52
|
-
//
|
|
53
|
-
const
|
|
54
|
-
currentContext =
|
|
55
|
-
// Parameters
|
|
56
|
-
const params = emitParameters(member.parameters, currentContext);
|
|
57
|
-
currentContext = params[1];
|
|
87
|
+
parts.push(emitCSharpName(member.name, "methods", context));
|
|
88
|
+
// Parameters (with destructuring support) - use signatureContext for type parameter scope
|
|
89
|
+
const paramsResult = emitParametersWithDestructuring(member.parameters, currentContext);
|
|
90
|
+
currentContext = paramsResult.context;
|
|
58
91
|
const whereClause = whereClauses.length > 0
|
|
59
92
|
? `\n${ind} ${whereClauses.join(`\n${ind} `)}`
|
|
60
93
|
: "";
|
|
61
94
|
// Method body
|
|
62
95
|
// Use withScoped to set typeParameters and returnType for nested expressions
|
|
63
|
-
const baseBodyContext = withAsync(indent(currentContext), member.isAsync);
|
|
96
|
+
const baseBodyContext = seedLocalNameMapFromParameters(member.parameters, withAsync(indent(currentContext), member.isAsync));
|
|
64
97
|
if (!member.body) {
|
|
65
98
|
// Abstract method without body
|
|
66
99
|
// Emit attributes before the method declaration
|
|
@@ -68,15 +101,11 @@ export const emitMethodMember = (member, context) => {
|
|
|
68
101
|
const signature = parts.join(" ");
|
|
69
102
|
// Build final code with attributes (if any)
|
|
70
103
|
const attrPrefix = attributesCode ? attributesCode + "\n" : "";
|
|
71
|
-
const code = `${attrPrefix}${ind}${signature}${typeParamsStr}(${
|
|
104
|
+
const code = `${attrPrefix}${ind}${signature}${typeParamsStr}(${paramsResult.parameterList})${whereClause};`;
|
|
72
105
|
return [code, attrContext];
|
|
73
106
|
}
|
|
74
|
-
// Build type parameter names set for this method (includes class type params from context)
|
|
75
|
-
const methodTypeParams = new Set([
|
|
76
|
-
...(currentContext.typeParameters ?? []),
|
|
77
|
-
...(member.typeParameters?.map((tp) => tp.name) ?? []),
|
|
78
|
-
]);
|
|
79
107
|
// Emit body with scoped typeParameters and returnType
|
|
108
|
+
// Reuse methodTypeParams defined at the top of this function
|
|
80
109
|
// Note: member.body is guaranteed to exist here (early return above handles undefined case)
|
|
81
110
|
const body = member.body;
|
|
82
111
|
const [bodyCode, finalContext] = withScoped(baseBodyContext, {
|
|
@@ -100,14 +129,21 @@ export const emitMethodMember = (member, context) => {
|
|
|
100
129
|
});
|
|
101
130
|
}
|
|
102
131
|
}
|
|
103
|
-
// Inject out parameter initializations
|
|
132
|
+
// Inject destructuring and out parameter initializations
|
|
104
133
|
let finalBodyCode = bodyCode;
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
134
|
+
const bodyInd = getIndent(baseBodyContext);
|
|
135
|
+
const injectLines = [];
|
|
136
|
+
// Generate parameter destructuring statements
|
|
137
|
+
if (paramsResult.destructuringParams.length > 0) {
|
|
138
|
+
const [destructuringStmts] = generateParameterDestructuring(paramsResult.destructuringParams, bodyInd, finalContext);
|
|
139
|
+
injectLines.push(...destructuringStmts);
|
|
140
|
+
}
|
|
141
|
+
// Add out parameter initializations
|
|
142
|
+
for (const outParam of outParams) {
|
|
143
|
+
injectLines.push(`${bodyInd}${outParam.name} = default;`);
|
|
144
|
+
}
|
|
145
|
+
// Inject lines after opening brace
|
|
146
|
+
if (injectLines.length > 0) {
|
|
111
147
|
const lines = bodyCode.split("\n");
|
|
112
148
|
if (lines.length > 1) {
|
|
113
149
|
lines.splice(1, 0, ...injectLines, "");
|
|
@@ -119,7 +155,8 @@ export const emitMethodMember = (member, context) => {
|
|
|
119
155
|
const signature = parts.join(" ");
|
|
120
156
|
// Build final code with attributes (if any)
|
|
121
157
|
const attrPrefix = attributesCode ? attributesCode + "\n" : "";
|
|
122
|
-
const code = `${attrPrefix}${ind}${signature}${typeParamsStr}(${
|
|
123
|
-
|
|
158
|
+
const code = `${attrPrefix}${ind}${signature}${typeParamsStr}(${paramsResult.parameterList})${whereClause}\n${finalBodyCode}`;
|
|
159
|
+
const returnedContext = dedent(attrContext);
|
|
160
|
+
return [code, { ...returnedContext, ...savedScoped }];
|
|
124
161
|
};
|
|
125
162
|
//# sourceMappingURL=methods.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"methods.js","sourceRoot":"","sources":["../../../../src/statements/classes/members/methods.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAEL,SAAS,EACT,MAAM,EACN,MAAM,EACN,SAAS,EACT,UAAU,GACX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,
|
|
1
|
+
{"version":3,"file":"methods.js","sourceRoot":"","sources":["../../../../src/statements/classes/members/methods.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../../../src/statements/classes/members/orchestrator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../../../src/statements/classes/members/orchestrator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAKnD;;GAEG;AACH,eAAO,MAAM,eAAe,GAC1B,QAAQ,aAAa,EACrB,SAAS,cAAc,KACtB,CAAC,MAAM,EAAE,cAAc,CAgBzB,CAAC"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Class member emission orchestrator
|
|
3
3
|
*/
|
|
4
|
-
import { getIndent } from "../../../types.js";
|
|
5
4
|
import { emitPropertyMember } from "./properties.js";
|
|
6
5
|
import { emitMethodMember } from "./methods.js";
|
|
7
6
|
import { emitConstructorMember } from "./constructors.js";
|
|
@@ -9,7 +8,6 @@ import { emitConstructorMember } from "./constructors.js";
|
|
|
9
8
|
* Emit a class member (property, method, or constructor)
|
|
10
9
|
*/
|
|
11
10
|
export const emitClassMember = (member, context) => {
|
|
12
|
-
const ind = getIndent(context);
|
|
13
11
|
switch (member.kind) {
|
|
14
12
|
case "propertyDeclaration":
|
|
15
13
|
return emitPropertyMember(member, context);
|
|
@@ -18,7 +16,7 @@ export const emitClassMember = (member, context) => {
|
|
|
18
16
|
case "constructorDeclaration":
|
|
19
17
|
return emitConstructorMember(member, context);
|
|
20
18
|
default:
|
|
21
|
-
|
|
19
|
+
throw new Error(`Unhandled IR class member kind: ${String(member.kind)}`);
|
|
22
20
|
}
|
|
23
21
|
};
|
|
24
22
|
//# sourceMappingURL=orchestrator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../../../src/statements/classes/members/orchestrator.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../../../src/statements/classes/members/orchestrator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE1D;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,MAAqB,EACrB,OAAuB,EACG,EAAE;IAC5B,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,qBAAqB;YACxB,OAAO,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAE7C,KAAK,mBAAmB;YACtB,OAAO,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAE3C,KAAK,wBAAwB;YAC3B,OAAO,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAEhD;YACE,MAAM,IAAI,KAAK,CACb,mCAAmC,MAAM,CAAE,MAA6B,CAAC,IAAI,CAAC,EAAE,CACjF,CAAC;IACN,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"properties.d.ts","sourceRoot":"","sources":["../../../../src/statements/classes/members/properties.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,
|
|
1
|
+
{"version":3,"file":"properties.d.ts","sourceRoot":"","sources":["../../../../src/statements/classes/members/properties.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EACL,cAAc,EAKf,MAAM,mBAAmB,CAAC;AAQ3B;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,aAAa,GAAG;IAAE,IAAI,EAAE,qBAAqB,CAAA;CAAE,EACvD,SAAS,cAAc,KACtB,CAAC,MAAM,EAAE,cAAc,CA6IzB,CAAC"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Property member emission
|
|
3
3
|
*/
|
|
4
|
-
import { getIndent } from "../../../types.js";
|
|
4
|
+
import { dedent, getIndent, indent, withScoped, } from "../../../types.js";
|
|
5
5
|
import { emitExpression } from "../../../expression-emitter.js";
|
|
6
6
|
import { emitType } from "../../../type-emitter.js";
|
|
7
7
|
import { escapeCSharpIdentifier } from "../../../emitter-types/index.js";
|
|
8
8
|
import { emitAttributes } from "../../../core/attributes.js";
|
|
9
|
+
import { emitBlockStatement } from "../../blocks.js";
|
|
10
|
+
import { emitCSharpName } from "../../../naming-policy.js";
|
|
9
11
|
/**
|
|
10
12
|
* Emit a property declaration
|
|
11
13
|
*/
|
|
@@ -13,6 +15,9 @@ export const emitPropertyMember = (member, context) => {
|
|
|
13
15
|
const ind = getIndent(context);
|
|
14
16
|
let currentContext = context;
|
|
15
17
|
const parts = [];
|
|
18
|
+
const hasAccessors = !!(member.getterBody || member.setterBody);
|
|
19
|
+
const isAutoProperty = member.emitAsAutoProperty === true;
|
|
20
|
+
const emitsProperty = hasAccessors || isAutoProperty;
|
|
16
21
|
// Access modifier
|
|
17
22
|
const accessibility = member.accessibility ?? "public";
|
|
18
23
|
parts.push(accessibility);
|
|
@@ -27,7 +32,7 @@ export const emitPropertyMember = (member, context) => {
|
|
|
27
32
|
if (member.isRequired) {
|
|
28
33
|
parts.push("required");
|
|
29
34
|
}
|
|
30
|
-
if (member.isReadonly) {
|
|
35
|
+
if (!hasAccessors && member.isReadonly) {
|
|
31
36
|
parts.push("readonly");
|
|
32
37
|
}
|
|
33
38
|
// Property type - uses standard type emission pipeline
|
|
@@ -41,18 +46,73 @@ export const emitPropertyMember = (member, context) => {
|
|
|
41
46
|
parts.push("object");
|
|
42
47
|
}
|
|
43
48
|
// Property name (escape C# keywords)
|
|
44
|
-
parts.push(
|
|
49
|
+
parts.push(emitCSharpName(member.name, emitsProperty ? "properties" : "fields", context));
|
|
45
50
|
// Emit attributes before the property declaration
|
|
46
51
|
const [attributesCode, attrContext] = emitAttributes(member.attributes, currentContext);
|
|
47
52
|
currentContext = attrContext;
|
|
48
|
-
// Emit as field (TypeScript class fields map to C# fields, not properties)
|
|
49
53
|
const attrPrefix = attributesCode ? attributesCode + "\n" : "";
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
54
|
+
if (!emitsProperty) {
|
|
55
|
+
// Emit as field (TypeScript class fields map to C# fields, not properties)
|
|
56
|
+
let code = `${attrPrefix}${ind}${parts.join(" ")}`;
|
|
57
|
+
if (member.initializer) {
|
|
58
|
+
const [initFrag, finalContext] = emitExpression(member.initializer, currentContext);
|
|
59
|
+
code += ` = ${initFrag.text}`;
|
|
60
|
+
currentContext = finalContext;
|
|
61
|
+
}
|
|
62
|
+
return [`${code};`, currentContext];
|
|
55
63
|
}
|
|
56
|
-
|
|
64
|
+
if (!hasAccessors) {
|
|
65
|
+
const accessors = member.isReadonly ? "{ get; }" : "{ get; set; }";
|
|
66
|
+
let code = `${attrPrefix}${ind}${parts.join(" ")} ${accessors}`;
|
|
67
|
+
if (member.initializer) {
|
|
68
|
+
const [initFrag, finalContext] = emitExpression(member.initializer, currentContext);
|
|
69
|
+
currentContext = finalContext;
|
|
70
|
+
code += ` = ${initFrag.text};`;
|
|
71
|
+
}
|
|
72
|
+
return [code, currentContext];
|
|
73
|
+
}
|
|
74
|
+
const lines = [];
|
|
75
|
+
lines.push(`${attrPrefix}${ind}${parts.join(" ")}`);
|
|
76
|
+
// Property body scope (indentation + locals)
|
|
77
|
+
let bodyContext = indent(currentContext);
|
|
78
|
+
const bodyInd = getIndent(bodyContext);
|
|
79
|
+
lines.push(`${bodyInd}{`);
|
|
80
|
+
if (member.getterBody) {
|
|
81
|
+
lines.push(`${bodyInd}get`);
|
|
82
|
+
const getterBodyContext = indent(bodyContext);
|
|
83
|
+
const [getterBlock, getterCtx] = withScoped(getterBodyContext, { returnType: member.type }, (scopedCtx) => emitBlockStatement(member.getterBody, scopedCtx));
|
|
84
|
+
lines.push(getterBlock);
|
|
85
|
+
bodyContext = dedent(getterCtx);
|
|
86
|
+
}
|
|
87
|
+
if (member.setterBody) {
|
|
88
|
+
lines.push(`${bodyInd}set`);
|
|
89
|
+
const setterBodyContext = indent(bodyContext);
|
|
90
|
+
const setterParamName = member.setterParamName;
|
|
91
|
+
const [rawSetterBlock, setterCtx] = withScoped(setterBodyContext, {
|
|
92
|
+
localNameMap: setterParamName && setterParamName !== "value"
|
|
93
|
+
? new Map([
|
|
94
|
+
...(setterBodyContext.localNameMap ?? []),
|
|
95
|
+
[setterParamName, escapeCSharpIdentifier(setterParamName)],
|
|
96
|
+
])
|
|
97
|
+
: setterBodyContext.localNameMap,
|
|
98
|
+
}, (scopedCtx) => emitBlockStatement(member.setterBody, scopedCtx));
|
|
99
|
+
const setterBlock = (() => {
|
|
100
|
+
if (!setterParamName || setterParamName === "value")
|
|
101
|
+
return rawSetterBlock;
|
|
102
|
+
const escapedParam = escapeCSharpIdentifier(setterParamName);
|
|
103
|
+
const stmtInd = getIndent(setterBodyContext);
|
|
104
|
+
const injectLine = `${stmtInd}var ${escapedParam} = value;`;
|
|
105
|
+
const blockLines = rawSetterBlock.split("\n");
|
|
106
|
+
if (blockLines.length > 1) {
|
|
107
|
+
blockLines.splice(1, 0, injectLine, "");
|
|
108
|
+
return blockLines.join("\n");
|
|
109
|
+
}
|
|
110
|
+
return rawSetterBlock;
|
|
111
|
+
})();
|
|
112
|
+
lines.push(setterBlock);
|
|
113
|
+
bodyContext = dedent(setterCtx);
|
|
114
|
+
}
|
|
115
|
+
lines.push(`${bodyInd}}`);
|
|
116
|
+
return [lines.join("\n"), dedent(bodyContext)];
|
|
57
117
|
};
|
|
58
118
|
//# sourceMappingURL=properties.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"properties.js","sourceRoot":"","sources":["../../../../src/statements/classes/members/properties.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,
|
|
1
|
+
{"version":3,"file":"properties.js","sourceRoot":"","sources":["../../../../src/statements/classes/members/properties.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,52 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Parameter emission for functions and methods
|
|
3
|
+
*
|
|
4
|
+
* Handles both simple identifier patterns and destructuring patterns.
|
|
5
|
+
* For destructuring patterns, generates synthetic parameter names (__param0, etc.)
|
|
6
|
+
* and returns lowering info for the caller to inject destructuring statements.
|
|
3
7
|
*/
|
|
4
|
-
import { IrParameter } from "@tsonic/frontend";
|
|
8
|
+
import { IrParameter, IrType } from "@tsonic/frontend";
|
|
5
9
|
import { EmitterContext } from "../../types.js";
|
|
10
|
+
/**
|
|
11
|
+
* Info about a parameter that needs destructuring in the function body
|
|
12
|
+
*/
|
|
13
|
+
type ParameterDestructuringInfo = {
|
|
14
|
+
readonly syntheticName: string;
|
|
15
|
+
readonly pattern: IrParameter["pattern"];
|
|
16
|
+
readonly type: IrType | undefined;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Result of parameter emission
|
|
20
|
+
*/
|
|
21
|
+
export type ParameterEmissionResult = {
|
|
22
|
+
/** The C# parameter list string */
|
|
23
|
+
readonly parameterList: string;
|
|
24
|
+
/** Parameters that need destructuring in the function body */
|
|
25
|
+
readonly destructuringParams: readonly ParameterDestructuringInfo[];
|
|
26
|
+
/** Updated context */
|
|
27
|
+
readonly context: EmitterContext;
|
|
28
|
+
};
|
|
6
29
|
/**
|
|
7
30
|
* Emit parameters for functions and methods
|
|
31
|
+
*
|
|
32
|
+
* For simple identifier patterns, emits directly as C# parameters.
|
|
33
|
+
* For complex patterns (array/object), generates synthetic parameter names
|
|
34
|
+
* and returns info for destructuring in the function body.
|
|
8
35
|
*/
|
|
9
36
|
export declare const emitParameters: (parameters: readonly IrParameter[], context: EmitterContext) => [string, EmitterContext];
|
|
37
|
+
/**
|
|
38
|
+
* Emit parameters with full destructuring support
|
|
39
|
+
*
|
|
40
|
+
* Returns both the parameter list and info about parameters that need
|
|
41
|
+
* destructuring statements in the function body.
|
|
42
|
+
*/
|
|
43
|
+
export declare const emitParametersWithDestructuring: (parameters: readonly IrParameter[], context: EmitterContext) => ParameterEmissionResult;
|
|
44
|
+
/**
|
|
45
|
+
* Generate destructuring statements for parameters
|
|
46
|
+
*
|
|
47
|
+
* Call this after emitParametersWithDestructuring to get the statements
|
|
48
|
+
* that should be injected at the start of the function body.
|
|
49
|
+
*/
|
|
50
|
+
export declare const generateParameterDestructuring: (destructuringParams: readonly ParameterDestructuringInfo[], indent: string, context: EmitterContext) => [readonly string[], EmitterContext];
|
|
51
|
+
export {};
|
|
10
52
|
//# sourceMappingURL=parameters.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parameters.d.ts","sourceRoot":"","sources":["../../../src/statements/classes/parameters.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"parameters.d.ts","sourceRoot":"","sources":["../../../src/statements/classes/parameters.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAMhD;;GAEG;AACH,KAAK,0BAA0B,GAAG;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG;IACpC,mCAAmC;IACnC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,8DAA8D;IAC9D,QAAQ,CAAC,mBAAmB,EAAE,SAAS,0BAA0B,EAAE,CAAC;IACpE,sBAAsB;IACtB,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;CAClC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,GACzB,YAAY,SAAS,WAAW,EAAE,EAClC,SAAS,cAAc,KACtB,CAAC,MAAM,EAAE,cAAc,CAGzB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,+BAA+B,GAC1C,YAAY,SAAS,WAAW,EAAE,EAClC,SAAS,cAAc,KACtB,uBA8EF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,8BAA8B,GACzC,qBAAqB,SAAS,0BAA0B,EAAE,EAC1D,QAAQ,MAAM,EACd,SAAS,cAAc,KACtB,CAAC,SAAS,MAAM,EAAE,EAAE,cAAc,CAiBpC,CAAC"}
|