@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
package/dist/types/unions.js
CHANGED
|
@@ -2,6 +2,17 @@
|
|
|
2
2
|
* Union type emission
|
|
3
3
|
*/
|
|
4
4
|
import { emitType } from "./emitter.js";
|
|
5
|
+
const getBareTypeParameterName = (type, context) => {
|
|
6
|
+
if (type.kind === "typeParameterType")
|
|
7
|
+
return type.name;
|
|
8
|
+
// Legacy representation: type parameters sometimes arrive as referenceType nodes.
|
|
9
|
+
if (type.kind === "referenceType" &&
|
|
10
|
+
(context.typeParameters?.has(type.name) ?? false) &&
|
|
11
|
+
(!type.typeArguments || type.typeArguments.length === 0)) {
|
|
12
|
+
return type.name;
|
|
13
|
+
}
|
|
14
|
+
return undefined;
|
|
15
|
+
};
|
|
5
16
|
/**
|
|
6
17
|
* Emit union types as nullable (T?), Union<T1, T2>, or object
|
|
7
18
|
*/
|
|
@@ -20,6 +31,15 @@ export const emitUnionType = (type, context) => {
|
|
|
20
31
|
if (!firstType) {
|
|
21
32
|
return ["object?", context];
|
|
22
33
|
}
|
|
34
|
+
// `T | null` where `T` is an unconstrained type parameter cannot be represented as `T?`
|
|
35
|
+
// in C# (it forbids assigning null). Fall back to `object?` and rely on casts at use sites.
|
|
36
|
+
const typeParamName = getBareTypeParameterName(firstType, context);
|
|
37
|
+
if (typeParamName) {
|
|
38
|
+
const constraintKind = context.typeParamConstraints?.get(typeParamName) ?? "unconstrained";
|
|
39
|
+
if (constraintKind === "unconstrained") {
|
|
40
|
+
return ["object?", context];
|
|
41
|
+
}
|
|
42
|
+
}
|
|
23
43
|
const [baseType, newContext] = emitType(firstType, context);
|
|
24
44
|
// Add ? suffix for nullable types (both value types and reference types)
|
|
25
45
|
// This includes string?, int?, double?, etc. per spec/04-type-mappings.md
|
package/dist/types/unions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unions.js","sourceRoot":"","sources":["../../src/types/unions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,IAA4C,EAC5C,OAAuB,EACG,EAAE;IAC5B,qCAAqC;IACrC,YAAY;IACZ,gDAAgD;IAChD,qCAAqC;IACrC,2CAA2C;IAE3C,uDAAuD;IACvD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CACpC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CACC,CAAC,CAAC,IAAI,KAAK,eAAe;QAC1B,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAC9C,CACJ,CAAC;IAEF,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,iDAAiD;QACjD,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC9B,CAAC;
|
|
1
|
+
{"version":3,"file":"unions.js","sourceRoot":"","sources":["../../src/types/unions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,MAAM,wBAAwB,GAAG,CAC/B,IAAY,EACZ,OAAuB,EACH,EAAE;IACtB,IAAI,IAAI,CAAC,IAAI,KAAK,mBAAmB;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IAExD,kFAAkF;IAClF,IACE,IAAI,CAAC,IAAI,KAAK,eAAe;QAC7B,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;QACjD,CAAC,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,CAAC,EACxD,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,IAA4C,EAC5C,OAAuB,EACG,EAAE;IAC5B,qCAAqC;IACrC,YAAY;IACZ,gDAAgD;IAChD,qCAAqC;IACrC,2CAA2C;IAE3C,uDAAuD;IACvD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CACpC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CACC,CAAC,CAAC,IAAI,KAAK,eAAe;QAC1B,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAC9C,CACJ,CAAC;IAEF,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,iDAAiD;QACjD,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC9B,CAAC;QAED,wFAAwF;QACxF,4FAA4F;QAC5F,MAAM,aAAa,GAAG,wBAAwB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACnE,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,cAAc,GAClB,OAAO,CAAC,oBAAoB,EAAE,GAAG,CAAC,aAAa,CAAC,IAAI,eAAe,CAAC;YACtE,IAAI,cAAc,KAAK,eAAe,EAAE,CAAC;gBACvC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QAED,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC5D,yEAAyE;QACzE,0EAA0E;QAC1E,OAAO,CAAC,GAAG,QAAQ,GAAG,EAAE,UAAU,CAAC,CAAC;IACtC,CAAC;IAED,qDAAqD;IACrD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACrD,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,IAAI,cAAc,GAAG,OAAO,CAAC;QAE7B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3B,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;YAC1D,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1B,cAAc,GAAG,UAAU,CAAC;QAC9B,CAAC;QAED,OAAO;YACL,gCAAgC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;YACzD,cAAc;SACf,CAAC;IACJ,CAAC;IAED,yDAAyD;IACzD,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC7B,CAAC,CAAC"}
|
|
@@ -39,7 +39,7 @@ describe("Union Type Emission", () => {
|
|
|
39
39
|
};
|
|
40
40
|
const code = emitModule(module);
|
|
41
41
|
// Should use nullable syntax
|
|
42
|
-
expect(code).to.include("string?
|
|
42
|
+
expect(code).to.include("string? MaybeString");
|
|
43
43
|
});
|
|
44
44
|
it("should emit two-type union as Union<T1, T2>", () => {
|
|
45
45
|
const module = {
|
|
@@ -74,7 +74,7 @@ describe("Union Type Emission", () => {
|
|
|
74
74
|
};
|
|
75
75
|
const code = emitModule(module);
|
|
76
76
|
// Should use fully-qualified Union<T1, T2>
|
|
77
|
-
expect(code).to.include("global::Tsonic.Runtime.Union<string, double>
|
|
77
|
+
expect(code).to.include("global::Tsonic.Runtime.Union<string, double> Value");
|
|
78
78
|
// Should NOT include using directives - uses global:: FQN
|
|
79
79
|
expect(code).to.not.include("using Tsonic.Runtime");
|
|
80
80
|
});
|
|
@@ -116,7 +116,7 @@ describe("Union Type Emission", () => {
|
|
|
116
116
|
};
|
|
117
117
|
const code = emitModule(module);
|
|
118
118
|
// Should return Union<string, double> with global:: FQN
|
|
119
|
-
expect(code).to.include("public static global::Tsonic.Runtime.Union<string, double>
|
|
119
|
+
expect(code).to.include("public static global::Tsonic.Runtime.Union<string, double> GetValue()");
|
|
120
120
|
});
|
|
121
121
|
it("should emit function parameter with union type", () => {
|
|
122
122
|
const module = {
|
|
@@ -160,7 +160,7 @@ describe("Union Type Emission", () => {
|
|
|
160
160
|
};
|
|
161
161
|
const code = emitModule(module);
|
|
162
162
|
// Should accept Union<string, bool> parameter with global:: FQN
|
|
163
|
-
expect(code).to.include("
|
|
163
|
+
expect(code).to.include("Process(global::Tsonic.Runtime.Union<string, bool> input)");
|
|
164
164
|
});
|
|
165
165
|
it("should handle union with custom types", () => {
|
|
166
166
|
const module = {
|
|
@@ -219,7 +219,7 @@ describe("Union Type Emission", () => {
|
|
|
219
219
|
};
|
|
220
220
|
const code = emitModule(module);
|
|
221
221
|
// Should use Union<User, Product>
|
|
222
|
-
expect(code).to.include("Union<User, Product>
|
|
222
|
+
expect(code).to.include("Union<User, Product> GetResult()");
|
|
223
223
|
});
|
|
224
224
|
it("should emit three-type union as Union<T1, T2, T3>", () => {
|
|
225
225
|
const module = {
|
|
@@ -255,7 +255,7 @@ describe("Union Type Emission", () => {
|
|
|
255
255
|
};
|
|
256
256
|
const code = emitModule(module);
|
|
257
257
|
// Should use fully-qualified Union<T1, T2, T3>
|
|
258
|
-
expect(code).to.include("global::Tsonic.Runtime.Union<string, double, bool>
|
|
258
|
+
expect(code).to.include("global::Tsonic.Runtime.Union<string, double, bool> Value");
|
|
259
259
|
// Should NOT include using directives - uses global:: FQN
|
|
260
260
|
expect(code).to.not.include("using Tsonic.Runtime");
|
|
261
261
|
});
|
|
@@ -309,7 +309,7 @@ describe("Union Type Emission", () => {
|
|
|
309
309
|
};
|
|
310
310
|
const code = emitModule(module);
|
|
311
311
|
// Should use Union<T1, T2, T3, T4> with global:: FQN
|
|
312
|
-
expect(code).to.include("global::Tsonic.Runtime.Union<string, double, bool, DateLike>
|
|
312
|
+
expect(code).to.include("global::Tsonic.Runtime.Union<string, double, bool, DateLike> Process()");
|
|
313
313
|
});
|
|
314
314
|
it("should emit eight-type union as Union<T1, T2, T3, T4, T5, T6, T7, T8>", () => {
|
|
315
315
|
// Helper to create an interface declaration
|
|
@@ -366,7 +366,7 @@ describe("Union Type Emission", () => {
|
|
|
366
366
|
};
|
|
367
367
|
const code = emitModule(module);
|
|
368
368
|
// Should use Union<T1, T2, T3, T4, T5, T6, T7, T8> with global:: FQN
|
|
369
|
-
expect(code).to.include("global::Tsonic.Runtime.Union<string, double, bool, User, Product, Order, Payment, Invoice>
|
|
369
|
+
expect(code).to.include("global::Tsonic.Runtime.Union<string, double, bool, User, Product, Order, Payment, Invoice> Value");
|
|
370
370
|
});
|
|
371
371
|
it("should fall back to object for unions with more than 8 types", () => {
|
|
372
372
|
const module = {
|
|
@@ -408,7 +408,7 @@ describe("Union Type Emission", () => {
|
|
|
408
408
|
};
|
|
409
409
|
const code = emitModule(module);
|
|
410
410
|
// Should fall back to object for 9+ types
|
|
411
|
-
expect(code).to.include("object
|
|
411
|
+
expect(code).to.include("object Value");
|
|
412
412
|
});
|
|
413
413
|
});
|
|
414
414
|
//# sourceMappingURL=unions.test.js.map
|
package/dist/types.d.ts
CHANGED
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
* C# Emitter Types
|
|
3
3
|
* Main dispatcher - re-exports from emitter-types/ subdirectory
|
|
4
4
|
*/
|
|
5
|
-
export type { EmitterOptions, EmitterContext, EmitResult, CSharpFragment, CSharpAccessModifier, CSharpClassModifier, CSharpMethodModifier, CSharpUsing, ImportBinding, ModuleIdentity, ModuleMap, ExportSource, ExportMap, JsonAotRegistry, LocalTypeInfo, NarrowedBinding, } from "./emitter-types/index.js";
|
|
5
|
+
export type { EmitterOptions, EmitterContext, EmitResult, CSharpFragment, CSharpAccessModifier, CSharpClassModifier, CSharpMethodModifier, CSharpUsing, ImportBinding, ModuleIdentity, ModuleMap, ExportSource, ExportMap, TypeMemberIndex, TypeMemberKind, JsonAotRegistry, LocalTypeInfo, NarrowedBinding, ValueSymbolKind, ValueSymbolInfo, } from "./emitter-types/index.js";
|
|
6
6
|
export { createContext, indent, dedent, withStatic, withAsync, withClassName, withScoped, getIndent, renderTypeFQN, renderMemberFQN, renderFQN, FQN, } from "./emitter-types/index.js";
|
|
7
7
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY,EACV,cAAc,EACd,cAAc,EACd,UAAU,EACV,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,WAAW,EACX,aAAa,EACb,cAAc,EACd,SAAS,EACT,YAAY,EACZ,SAAS,EACT,eAAe,EACf,aAAa,EACb,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,aAAa,EACb,MAAM,EACN,MAAM,EACN,UAAU,EACV,SAAS,EACT,aAAa,EACb,UAAU,EACV,SAAS,EACT,aAAa,EACb,eAAe,EACf,SAAS,EACT,GAAG,GACJ,MAAM,0BAA0B,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY,EACV,cAAc,EACd,cAAc,EACd,UAAU,EACV,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,WAAW,EACX,aAAa,EACb,cAAc,EACd,SAAS,EACT,YAAY,EACZ,SAAS,EACT,eAAe,EACf,cAAc,EACd,eAAe,EACf,aAAa,EACb,eAAe,EACf,eAAe,EACf,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,aAAa,EACb,MAAM,EACN,MAAM,EACN,UAAU,EACV,SAAS,EACT,aAAa,EACb,UAAU,EACV,SAAS,EACT,aAAa,EACb,eAAe,EACf,SAAS,EACT,GAAG,GACJ,MAAM,0BAA0B,CAAC"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAwBH,OAAO,EACL,aAAa,EACb,MAAM,EACN,MAAM,EACN,UAAU,EACV,SAAS,EACT,aAAa,EACb,UAAU,EACV,SAAS,EACT,aAAa,EACb,eAAe,EACf,SAAS,EACT,GAAG,GACJ,MAAM,0BAA0B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tsonic/emitter",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.16",
|
|
4
4
|
"description": "C# code generator for Tsonic compiler",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -18,14 +18,14 @@
|
|
|
18
18
|
"build": "tsc -b",
|
|
19
19
|
"clean": "rm -rf dist *.tsbuildinfo",
|
|
20
20
|
"pretest": "npm run clean && npm run build",
|
|
21
|
-
"test": "mocha 'dist/**/*.test.js'",
|
|
21
|
+
"test": "mocha --parallel --timeout 10000 'dist/**/*.test.js'",
|
|
22
22
|
"test:watch": "mocha 'dist/**/*.test.js' --watch",
|
|
23
23
|
"update-golden": "npx tsx scripts/update-golden-tests.ts",
|
|
24
24
|
"update-golden:dotnet": "npx tsx scripts/update-golden-tests.ts dotnet",
|
|
25
25
|
"update-golden:js": "npx tsx scripts/update-golden-tests.ts js"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@tsonic/frontend": "
|
|
28
|
+
"@tsonic/frontend": "0.0.16"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@types/chai": "5.2.2",
|