@tsonic/frontend 0.0.12 → 0.0.14
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/ir/converters/expressions/access.d.ts.map +1 -1
- package/dist/ir/converters/expressions/access.js +61 -1
- package/dist/ir/converters/expressions/access.js.map +1 -1
- package/dist/ir/converters/expressions/calls.d.ts +2 -2
- package/dist/ir/converters/expressions/calls.d.ts.map +1 -1
- package/dist/ir/converters/expressions/calls.js +318 -24
- package/dist/ir/converters/expressions/calls.js.map +1 -1
- package/dist/ir/converters/expressions/helpers.js +4 -4
- package/dist/ir/converters/expressions/helpers.js.map +1 -1
- package/dist/ir/converters/expressions/literals.d.ts +14 -0
- package/dist/ir/converters/expressions/literals.d.ts.map +1 -1
- package/dist/ir/converters/expressions/literals.js +22 -2
- package/dist/ir/converters/expressions/literals.js.map +1 -1
- package/dist/ir/converters/expressions/numeric-recovery.test.js +3 -2
- package/dist/ir/converters/expressions/numeric-recovery.test.js.map +1 -1
- package/dist/ir/converters/statements/helpers.d.ts.map +1 -1
- package/dist/ir/converters/statements/helpers.js +10 -4
- package/dist/ir/converters/statements/helpers.js.map +1 -1
- package/dist/ir/expression-converter.d.ts.map +1 -1
- package/dist/ir/expression-converter.js +59 -7
- package/dist/ir/expression-converter.js.map +1 -1
- package/dist/ir/index.d.ts +1 -1
- package/dist/ir/index.d.ts.map +1 -1
- package/dist/ir/index.js +1 -1
- package/dist/ir/index.js.map +1 -1
- package/dist/ir/statement-converter.d.ts.map +1 -1
- package/dist/ir/statement-converter.js +12 -0
- package/dist/ir/statement-converter.js.map +1 -1
- package/dist/ir/type-converter/inference.d.ts.map +1 -1
- package/dist/ir/type-converter/inference.js +50 -7
- package/dist/ir/type-converter/inference.js.map +1 -1
- package/dist/ir/type-converter/primitives.d.ts +26 -4
- package/dist/ir/type-converter/primitives.d.ts.map +1 -1
- package/dist/ir/type-converter/primitives.js +36 -2
- package/dist/ir/type-converter/primitives.js.map +1 -1
- package/dist/ir/type-converter/references.d.ts.map +1 -1
- package/dist/ir/type-converter/references.js +324 -11
- package/dist/ir/type-converter/references.js.map +1 -1
- package/dist/ir/type-converter/utility-types.d.ts +93 -0
- package/dist/ir/type-converter/utility-types.d.ts.map +1 -0
- package/dist/ir/type-converter/utility-types.js +528 -0
- package/dist/ir/type-converter/utility-types.js.map +1 -0
- package/dist/ir/type-converter/utility-types.test.d.ts +10 -0
- package/dist/ir/type-converter/utility-types.test.d.ts.map +1 -0
- package/dist/ir/type-converter/utility-types.test.js +1030 -0
- package/dist/ir/type-converter/utility-types.test.js.map +1 -0
- package/dist/ir/types/expressions.d.ts +87 -3
- package/dist/ir/types/expressions.d.ts.map +1 -1
- package/dist/ir/types/helpers.d.ts +3 -1
- package/dist/ir/types/helpers.d.ts.map +1 -1
- package/dist/ir/types/index.d.ts +3 -2
- package/dist/ir/types/index.d.ts.map +1 -1
- package/dist/ir/types/index.js +2 -0
- package/dist/ir/types/index.js.map +1 -1
- package/dist/ir/types/ir-types.d.ts +69 -11
- package/dist/ir/types/ir-types.d.ts.map +1 -1
- package/dist/ir/types/numeric-helpers.d.ts +46 -0
- package/dist/ir/types/numeric-helpers.d.ts.map +1 -0
- package/dist/ir/types/numeric-helpers.js +105 -0
- package/dist/ir/types/numeric-helpers.js.map +1 -0
- package/dist/ir/types/statements.d.ts +11 -1
- package/dist/ir/types/statements.d.ts.map +1 -1
- package/dist/ir/types.d.ts +2 -2
- package/dist/ir/types.d.ts.map +1 -1
- package/dist/ir/types.js +3 -1
- package/dist/ir/types.js.map +1 -1
- package/dist/ir/validation/anonymous-type-lowering-pass.d.ts +32 -0
- package/dist/ir/validation/anonymous-type-lowering-pass.d.ts.map +1 -0
- package/dist/ir/validation/anonymous-type-lowering-pass.js +868 -0
- package/dist/ir/validation/anonymous-type-lowering-pass.js.map +1 -0
- package/dist/ir/validation/attribute-collection-pass.d.ts +37 -0
- package/dist/ir/validation/attribute-collection-pass.d.ts.map +1 -0
- package/dist/ir/validation/attribute-collection-pass.js +282 -0
- package/dist/ir/validation/attribute-collection-pass.js.map +1 -0
- package/dist/ir/validation/attribute-collection-pass.test.d.ts +5 -0
- package/dist/ir/validation/attribute-collection-pass.test.d.ts.map +1 -0
- package/dist/ir/validation/attribute-collection-pass.test.js +215 -0
- package/dist/ir/validation/attribute-collection-pass.test.js.map +1 -0
- package/dist/ir/validation/index.d.ts +3 -0
- package/dist/ir/validation/index.d.ts.map +1 -1
- package/dist/ir/validation/index.js +3 -0
- package/dist/ir/validation/index.js.map +1 -1
- package/dist/ir/validation/numeric-coercion-pass.d.ts +77 -0
- package/dist/ir/validation/numeric-coercion-pass.d.ts.map +1 -0
- package/dist/ir/validation/numeric-coercion-pass.js +686 -0
- package/dist/ir/validation/numeric-coercion-pass.js.map +1 -0
- package/dist/ir/validation/numeric-invariants.test.js +130 -14
- package/dist/ir/validation/numeric-invariants.test.js.map +1 -1
- package/dist/ir/validation/numeric-proof-pass.d.ts.map +1 -1
- package/dist/ir/validation/numeric-proof-pass.js +68 -108
- package/dist/ir/validation/numeric-proof-pass.js.map +1 -1
- package/dist/ir/validation/soundness-gate.d.ts.map +1 -1
- package/dist/ir/validation/soundness-gate.js +23 -12
- package/dist/ir/validation/soundness-gate.js.map +1 -1
- package/dist/ir/validation/yield-lowering-pass.test.js +21 -12
- package/dist/ir/validation/yield-lowering-pass.test.js.map +1 -1
- package/dist/program/bindings.d.ts +20 -9
- package/dist/program/bindings.d.ts.map +1 -1
- package/dist/program/bindings.js +98 -36
- package/dist/program/bindings.js.map +1 -1
- package/dist/program/bindings.test.js +3 -3
- package/dist/program/dependency-graph.d.ts.map +1 -1
- package/dist/program/dependency-graph.js +31 -5
- package/dist/program/dependency-graph.js.map +1 -1
- package/dist/resolver/import-resolution.d.ts +4 -0
- package/dist/resolver/import-resolution.d.ts.map +1 -1
- package/dist/resolver/import-resolution.js +18 -7
- package/dist/resolver/import-resolution.js.map +1 -1
- package/dist/resolver.test.js +2 -2
- package/dist/resolver.test.js.map +1 -1
- package/dist/types/diagnostic.d.ts +1 -1
- package/dist/types/diagnostic.d.ts.map +1 -1
- package/dist/types/diagnostic.js.map +1 -1
- package/dist/validation/generics.d.ts.map +1 -1
- package/dist/validation/generics.js +133 -1
- package/dist/validation/generics.js.map +1 -1
- package/dist/validation/static-safety.js +13 -0
- package/dist/validation/static-safety.js.map +1 -1
- package/dist/validation/unsupported-utility-types.d.ts +10 -8
- package/dist/validation/unsupported-utility-types.d.ts.map +1 -1
- package/dist/validation/unsupported-utility-types.js +12 -19
- package/dist/validation/unsupported-utility-types.js.map +1 -1
- package/dist/validator.test.js +133 -28
- package/dist/validator.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Diagnostic types for Tsonic compiler
|
|
3
3
|
*/
|
|
4
4
|
export type DiagnosticSeverity = "error" | "warning" | "info";
|
|
5
|
-
export type DiagnosticCode = "TSN1001" | "TSN1002" | "TSN1003" | "TSN1004" | "TSN1005" | "TSN1006" | "TSN2001" | "TSN2002" | "TSN2003" | "TSN3001" | "TSN3002" | "TSN3011" | "TSN4001" | "TSN4002" | "TSN5001" | "TSN5002" | "TSN6001" | "TSN7101" | "TSN7102" | "TSN7103" | "TSN7104" | "TSN7105" | "TSN7201" | "TSN7202" | "TSN7203" | "TSN7204" | "TSN7301" | "TSN7401" | "TSN7403" | "TSN7405" | "TSN7406" | "TSN7407" | "TSN7408" | "TSN7409" | "TSN7410" | "TSN7413" | "TSN7414" | "TSN7420" | "TSN9001" | "TSN9002" | "TSN9003" | "TSN9004" | "TSN9005" | "TSN9006" | "TSN9007" | "TSN9008" | "TSN9009" | "TSN9010" | "TSN9011" | "TSN9012" | "TSN9013" | "TSN9014" | "TSN9015" | "TSN9016" | "TSN9017" | "TSN9018" | "TSN9101" | "TSN9102" | "TSN9103" | "TSN9104" | "TSN9105" | "TSN9106" | "TSN9107" | "TSN9108" | "TSN9109" | "TSN9110" | "TSN9111" | "TSN9112" | "TSN9113" | "TSN9114" | "TSN5101" | "TSN5102" | "TSN5103" | "TSN5104" | "TSN5105" | "TSN5106" | "TSN5107" | "TSN5108" | "TSN5109" | "TSN6101";
|
|
5
|
+
export type DiagnosticCode = "TSN1001" | "TSN1002" | "TSN1003" | "TSN1004" | "TSN1005" | "TSN1006" | "TSN2001" | "TSN2002" | "TSN2003" | "TSN3001" | "TSN3002" | "TSN3011" | "TSN4001" | "TSN4002" | "TSN5001" | "TSN5002" | "TSN6001" | "TSN7101" | "TSN7102" | "TSN7103" | "TSN7104" | "TSN7105" | "TSN7201" | "TSN7202" | "TSN7203" | "TSN7204" | "TSN7301" | "TSN7401" | "TSN7403" | "TSN7405" | "TSN7406" | "TSN7407" | "TSN7408" | "TSN7409" | "TSN7410" | "TSN7413" | "TSN7414" | "TSN7415" | "TSN7420" | "TSN7421" | "TSN9001" | "TSN9002" | "TSN9003" | "TSN9004" | "TSN9005" | "TSN9006" | "TSN9007" | "TSN9008" | "TSN9009" | "TSN9010" | "TSN9011" | "TSN9012" | "TSN9013" | "TSN9014" | "TSN9015" | "TSN9016" | "TSN9017" | "TSN9018" | "TSN9101" | "TSN9102" | "TSN9103" | "TSN9104" | "TSN9105" | "TSN9106" | "TSN9107" | "TSN9108" | "TSN9109" | "TSN9110" | "TSN9111" | "TSN9112" | "TSN9113" | "TSN9114" | "TSN5101" | "TSN5102" | "TSN5103" | "TSN5104" | "TSN5105" | "TSN5106" | "TSN5107" | "TSN5108" | "TSN5109" | "TSN5110" | "TSN6101";
|
|
6
6
|
export type SourceLocation = {
|
|
7
7
|
readonly file: string;
|
|
8
8
|
readonly line: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnostic.d.ts","sourceRoot":"","sources":["../../src/types/diagnostic.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAE9D,MAAM,MAAM,cAAc,GACtB,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GAET,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GAET,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GAET,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GAET,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GAET,SAAS,CAAC;AAEd,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC;IACnC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;CACvD,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,MAAM,cAAc,EACpB,UAAU,kBAAkB,EAC5B,SAAS,MAAM,EACf,WAAW,cAAc,EACzB,OAAO,MAAM,EACb,mBAAmB,SAAS,cAAc,EAAE,KAC3C,UAOD,CAAC;AAEH,eAAO,MAAM,OAAO,GAAI,YAAY,UAAU,KAAG,OAChB,CAAC;AAElC,eAAO,MAAM,gBAAgB,GAAI,YAAY,UAAU,KAAG,MAiBzD,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF,eAAO,MAAM,0BAA0B,QAAO,oBAG5C,CAAC;AAEH,eAAO,MAAM,aAAa,GACxB,WAAW,oBAAoB,EAC/B,YAAY,UAAU,KACrB,oBAGD,CAAC;AAEH,eAAO,MAAM,gBAAgB,GAC3B,YAAY,oBAAoB,EAChC,YAAY,oBAAoB,KAC/B,oBAGD,CAAC"}
|
|
1
|
+
{"version":3,"file":"diagnostic.d.ts","sourceRoot":"","sources":["../../src/types/diagnostic.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAE9D,MAAM,MAAM,cAAc,GACtB,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GAET,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GAET,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GAET,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GAET,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GACT,SAAS,GAET,SAAS,CAAC;AAEd,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC;IACnC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;CACvD,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,MAAM,cAAc,EACpB,UAAU,kBAAkB,EAC5B,SAAS,MAAM,EACf,WAAW,cAAc,EACzB,OAAO,MAAM,EACb,mBAAmB,SAAS,cAAc,EAAE,KAC3C,UAOD,CAAC;AAEH,eAAO,MAAM,OAAO,GAAI,YAAY,UAAU,KAAG,OAChB,CAAC;AAElC,eAAO,MAAM,gBAAgB,GAAI,YAAY,UAAU,KAAG,MAiBzD,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF,eAAO,MAAM,0BAA0B,QAAO,oBAG5C,CAAC;AAEH,eAAO,MAAM,aAAa,GACxB,WAAW,oBAAoB,EAC/B,YAAY,UAAU,KACrB,oBAGD,CAAC;AAEH,eAAO,MAAM,gBAAgB,GAC3B,YAAY,oBAAoB,EAChC,YAAY,oBAAoB,KAC/B,oBAGD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnostic.js","sourceRoot":"","sources":["../../src/types/diagnostic.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"diagnostic.js","sourceRoot":"","sources":["../../src/types/diagnostic.ts"],"names":[],"mappings":"AAAA;;GAEG;AA8GH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,IAAoB,EACpB,QAA4B,EAC5B,OAAe,EACf,QAAyB,EACzB,IAAa,EACb,gBAA4C,EAChC,EAAE,CAAC,CAAC;IAChB,IAAI;IACJ,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,IAAI;IACJ,gBAAgB;CACjB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,UAAsB,EAAW,EAAE,CACzD,UAAU,CAAC,QAAQ,KAAK,OAAO,CAAC;AAElC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,UAAsB,EAAU,EAAE;IACjE,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CACR,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,CACxF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,QAAQ,IAAI,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC;IACzD,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAE/B,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,SAAS,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC,CAAC;AAOF,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAyB,EAAE,CAAC,CAAC;IACrE,WAAW,EAAE,EAAE;IACf,SAAS,EAAE,KAAK;CACjB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,SAA+B,EAC/B,UAAsB,EACA,EAAE,CAAC,CAAC;IAC1B,WAAW,EAAE,CAAC,GAAG,SAAS,CAAC,WAAW,EAAE,UAAU,CAAC;IACnD,SAAS,EAAE,SAAS,CAAC,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC;CACtD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,UAAgC,EAChC,UAAgC,EACV,EAAE,CAAC,CAAC;IAC1B,WAAW,EAAE,CAAC,GAAG,UAAU,CAAC,WAAW,EAAE,GAAG,UAAU,CAAC,WAAW,CAAC;IACnE,SAAS,EAAE,UAAU,CAAC,SAAS,IAAI,UAAU,CAAC,SAAS;CACxD,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generics.d.ts","sourceRoot":"","sources":["../../src/validation/generics.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,
|
|
1
|
+
{"version":3,"file":"generics.d.ts","sourceRoot":"","sources":["../../src/validation/generics.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EACL,oBAAoB,EAGrB,MAAM,wBAAwB,CAAC;AA2JhC;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAC3B,YAAY,EAAE,CAAC,UAAU,EACzB,UAAU,aAAa,EACvB,WAAW,oBAAoB,KAC9B,oBAqCF,CAAC"}
|
|
@@ -2,12 +2,136 @@
|
|
|
2
2
|
* Generic type validation
|
|
3
3
|
*/
|
|
4
4
|
import * as ts from "typescript";
|
|
5
|
-
import { addDiagnostic } from "../types/diagnostic.js";
|
|
5
|
+
import { addDiagnostic, createDiagnostic, } from "../types/diagnostic.js";
|
|
6
6
|
import { checkForSymbolIndexSignature } from "../ir/generic-validator.js";
|
|
7
|
+
/**
|
|
8
|
+
* Check if a type node is a null or undefined literal type
|
|
9
|
+
*/
|
|
10
|
+
const isNullishType = (typeNode) => typeNode.kind === ts.SyntaxKind.NullKeyword ||
|
|
11
|
+
typeNode.kind === ts.SyntaxKind.UndefinedKeyword ||
|
|
12
|
+
(ts.isLiteralTypeNode(typeNode) &&
|
|
13
|
+
(typeNode.literal.kind === ts.SyntaxKind.NullKeyword ||
|
|
14
|
+
typeNode.literal.kind === ts.SyntaxKind.UndefinedKeyword));
|
|
15
|
+
/**
|
|
16
|
+
* Check if a type node references a type parameter.
|
|
17
|
+
* Returns the type parameter name if it does, undefined otherwise.
|
|
18
|
+
*/
|
|
19
|
+
const getTypeParameterReference = (typeNode) => {
|
|
20
|
+
if (ts.isTypeReferenceNode(typeNode) && ts.isIdentifier(typeNode.typeName)) {
|
|
21
|
+
return typeNode.typeName.text;
|
|
22
|
+
}
|
|
23
|
+
return undefined;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Check if a type parameter has a constraint that allows nullable representation.
|
|
27
|
+
* - `extends struct` → C# `where T : struct` allows T? as Nullable<T>
|
|
28
|
+
* - `extends object` → C# `where T : class` allows T? as nullable reference
|
|
29
|
+
* - `extends SomeClass` or `extends SomeInterface` → reference type, allows T?
|
|
30
|
+
*/
|
|
31
|
+
const hasNullableConstraint = (tp) => {
|
|
32
|
+
if (!tp.constraint) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
// `object` keyword type - T extends object
|
|
36
|
+
// This is a TypeKeyword, not a TypeReference
|
|
37
|
+
if (tp.constraint.kind === ts.SyntaxKind.ObjectKeyword) {
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
// Any type reference constraint (struct, SomeClass, SomeInterface, generic type)
|
|
41
|
+
// implies the type is constrained and allows proper nullable handling
|
|
42
|
+
if (ts.isTypeReferenceNode(tp.constraint)) {
|
|
43
|
+
// This covers:
|
|
44
|
+
// - T extends struct → value type (struct is a custom type in tsonic)
|
|
45
|
+
// - T extends SomeClass → reference type
|
|
46
|
+
// - T extends SomeInterface → reference type
|
|
47
|
+
// - T extends Comparable<T> → reference type (generic constraint)
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
// Intersection type: T extends A & B
|
|
51
|
+
// Any intersection constraint means T is constrained
|
|
52
|
+
if (ts.isIntersectionTypeNode(tp.constraint)) {
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
return false;
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Get the set of UNCONSTRAINED type parameter names in scope for a node.
|
|
59
|
+
* Walks up the tree to find enclosing generic declarations.
|
|
60
|
+
* Only returns type parameters that don't have nullable-compatible constraints.
|
|
61
|
+
*/
|
|
62
|
+
const getUnconstrainedTypeParametersInScope = (node) => {
|
|
63
|
+
const params = new Set();
|
|
64
|
+
let current = node;
|
|
65
|
+
while (current) {
|
|
66
|
+
// Check for type parameters on various declaration types
|
|
67
|
+
if ((ts.isInterfaceDeclaration(current) ||
|
|
68
|
+
ts.isClassDeclaration(current) ||
|
|
69
|
+
ts.isTypeAliasDeclaration(current) ||
|
|
70
|
+
ts.isFunctionDeclaration(current) ||
|
|
71
|
+
ts.isMethodDeclaration(current) ||
|
|
72
|
+
ts.isArrowFunction(current) ||
|
|
73
|
+
ts.isFunctionExpression(current)) &&
|
|
74
|
+
current.typeParameters) {
|
|
75
|
+
for (const tp of current.typeParameters) {
|
|
76
|
+
// Only add if it's truly unconstrained (no nullable-compatible constraint)
|
|
77
|
+
if (!hasNullableConstraint(tp)) {
|
|
78
|
+
params.add(tp.name.text);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
current = current.parent;
|
|
83
|
+
}
|
|
84
|
+
return params;
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* Check for nullable unions with unconstrained generic type parameters.
|
|
88
|
+
* Pattern: T | null where T is an unconstrained type parameter.
|
|
89
|
+
*
|
|
90
|
+
* This is unsupported because C# cannot represent nullable unconstrained generics:
|
|
91
|
+
* - For value types, T? requires `where T : struct` to become Nullable<T>
|
|
92
|
+
* - Without constraints, T? for a value type is just T (non-nullable)
|
|
93
|
+
*
|
|
94
|
+
* Returns a diagnostic if the pattern is detected, undefined otherwise.
|
|
95
|
+
*/
|
|
96
|
+
const checkNullableGenericUnion = (typeNode, sourceFile) => {
|
|
97
|
+
if (!ts.isUnionTypeNode(typeNode)) {
|
|
98
|
+
return undefined;
|
|
99
|
+
}
|
|
100
|
+
// Check if union contains null or undefined
|
|
101
|
+
const hasNullish = typeNode.types.some(isNullishType);
|
|
102
|
+
if (!hasNullish) {
|
|
103
|
+
return undefined;
|
|
104
|
+
}
|
|
105
|
+
// Check if any non-nullish type is an UNCONSTRAINED type parameter reference
|
|
106
|
+
const unconstrainedTypeParams = getUnconstrainedTypeParametersInScope(typeNode);
|
|
107
|
+
const nonNullishTypes = typeNode.types.filter((t) => !isNullishType(t));
|
|
108
|
+
for (const memberType of nonNullishTypes) {
|
|
109
|
+
const typeParamName = getTypeParameterReference(memberType);
|
|
110
|
+
if (typeParamName && unconstrainedTypeParams.has(typeParamName)) {
|
|
111
|
+
// Found a nullable union with a type parameter
|
|
112
|
+
const start = typeNode.getStart(sourceFile);
|
|
113
|
+
const end = typeNode.getEnd();
|
|
114
|
+
const { line, character } = sourceFile.getLineAndCharacterOfPosition(start);
|
|
115
|
+
return createDiagnostic("TSN7415", "error", `Nullable union '${typeNode.getText(sourceFile)}' with unconstrained generic type parameter '${typeParamName}' cannot be represented in C#. ` +
|
|
116
|
+
`Use 'object | null' for nullable generic values, or constrain the type parameter.`, {
|
|
117
|
+
file: sourceFile.fileName,
|
|
118
|
+
line: line + 1,
|
|
119
|
+
column: character,
|
|
120
|
+
length: end - start,
|
|
121
|
+
}, `In C#, T? for an unconstrained type parameter T does not provide nullability for value types. ` +
|
|
122
|
+
`Either use 'object | null' to box the value, or if T is always a reference type, this is a limitation.`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return undefined;
|
|
126
|
+
};
|
|
7
127
|
/**
|
|
8
128
|
* Validate generic types and constraints
|
|
9
129
|
*/
|
|
10
130
|
export const validateGenerics = (sourceFile, _program, collector) => {
|
|
131
|
+
// Debug: log when validation runs
|
|
132
|
+
if (process.env.DEBUG_GENERICS) {
|
|
133
|
+
console.log(`[validateGenerics] Checking: ${sourceFile.fileName}`);
|
|
134
|
+
}
|
|
11
135
|
const visitor = (node) => {
|
|
12
136
|
// Only check for truly unsupported features (no static C# mapping)
|
|
13
137
|
// Symbol index signatures - TSN7203
|
|
@@ -17,6 +141,14 @@ export const validateGenerics = (sourceFile, _program, collector) => {
|
|
|
17
141
|
collector = addDiagnostic(collector, symbolDiag);
|
|
18
142
|
}
|
|
19
143
|
}
|
|
144
|
+
// Check for nullable unions with unconstrained generic type parameters - TSN7415
|
|
145
|
+
// This covers property signatures, variable declarations, function parameters, etc.
|
|
146
|
+
if (ts.isTypeNode(node)) {
|
|
147
|
+
const nullableGenericDiag = checkNullableGenericUnion(node, sourceFile);
|
|
148
|
+
if (nullableGenericDiag) {
|
|
149
|
+
collector = addDiagnostic(collector, nullableGenericDiag);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
20
152
|
// Explicitly visit interface and type literal members
|
|
21
153
|
if (ts.isInterfaceDeclaration(node) || ts.isTypeLiteralNode(node)) {
|
|
22
154
|
for (const member of node.members) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generics.js","sourceRoot":"","sources":["../../src/validation/generics.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,
|
|
1
|
+
{"version":3,"file":"generics.js","sourceRoot":"","sources":["../../src/validation/generics.ts"],"names":[],"mappings":"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"}
|
|
@@ -258,6 +258,19 @@ const isAllowedKeyType = (typeNode) => {
|
|
|
258
258
|
typeNode.kind === ts.SyntaxKind.NumberKeyword) {
|
|
259
259
|
return true;
|
|
260
260
|
}
|
|
261
|
+
// String literal types (e.g., "a", "b")
|
|
262
|
+
if (ts.isLiteralTypeNode(typeNode)) {
|
|
263
|
+
const literal = typeNode.literal;
|
|
264
|
+
if (ts.isStringLiteral(literal) ||
|
|
265
|
+
ts.isNumericLiteral(literal) ||
|
|
266
|
+
literal.kind === ts.SyntaxKind.NumericLiteral) {
|
|
267
|
+
return true;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
// Union types - all constituents must be allowed key types
|
|
271
|
+
if (ts.isUnionTypeNode(typeNode)) {
|
|
272
|
+
return typeNode.types.every((t) => isAllowedKeyType(t));
|
|
273
|
+
}
|
|
261
274
|
// Type reference to allowed types
|
|
262
275
|
if (ts.isTypeReferenceNode(typeNode)) {
|
|
263
276
|
const typeName = typeNode.typeName;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static-safety.js","sourceRoot":"","sources":["../../src/validation/static-safety.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"static-safety.js","sourceRoot":"","sources":["../../src/validation/static-safety.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
/**
|
|
11
11
|
* Mapped-type utility types (TSN7406)
|
|
12
12
|
*
|
|
13
|
-
*
|
|
13
|
+
* SUPPORTED (expanded at compile time for concrete types):
|
|
14
14
|
* - Partial<T> → { [P in keyof T]?: T[P] }
|
|
15
15
|
* - Required<T> → { [P in keyof T]-?: T[P] }
|
|
16
16
|
* - Readonly<T> → { readonly [P in keyof T]: T[P] }
|
|
@@ -24,15 +24,17 @@ export declare const UNSUPPORTED_MAPPED_UTILITY_TYPES: Set<string>;
|
|
|
24
24
|
/**
|
|
25
25
|
* Conditional-type utility types (TSN7407)
|
|
26
26
|
*
|
|
27
|
-
*
|
|
28
|
-
* - Extract<T, U>
|
|
29
|
-
* - Exclude<T, U>
|
|
30
|
-
* - NonNullable<T>
|
|
31
|
-
* - ReturnType<T>
|
|
32
|
-
* - Parameters<T>
|
|
27
|
+
* SUPPORTED (expanded at compile time for concrete types):
|
|
28
|
+
* - Extract<T, U> → T extends U ? T : never
|
|
29
|
+
* - Exclude<T, U> → T extends U ? never : T
|
|
30
|
+
* - NonNullable<T> → T & {} (filters null/undefined from unions)
|
|
31
|
+
* - ReturnType<T> → T extends (...args: any) => infer R ? R : any
|
|
32
|
+
* - Parameters<T> → T extends (...args: infer P) => any ? P : never
|
|
33
|
+
* - Awaited<T> → T extends PromiseLike<infer U> ? Awaited<U> : T
|
|
34
|
+
*
|
|
35
|
+
* UNSUPPORTED (require constructor introspection):
|
|
33
36
|
* - ConstructorParameters → ConstructorType extends abstract new (...args: infer P) => any ? P : never
|
|
34
37
|
* - InstanceType<T> → T extends abstract new (...args: any) => infer R ? R : any
|
|
35
|
-
* - Awaited<T> → T extends PromiseLike<infer U> ? Awaited<U> : T
|
|
36
38
|
*/
|
|
37
39
|
export declare const UNSUPPORTED_CONDITIONAL_UTILITY_TYPES: Set<string>;
|
|
38
40
|
//# sourceMappingURL=unsupported-utility-types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unsupported-utility-types.d.ts","sourceRoot":"","sources":["../../src/validation/unsupported-utility-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,gCAAgC,
|
|
1
|
+
{"version":3,"file":"unsupported-utility-types.d.ts","sourceRoot":"","sources":["../../src/validation/unsupported-utility-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,gCAAgC,aAG3C,CAAC;AAEH;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,qCAAqC,aAGhD,CAAC"}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
/**
|
|
11
11
|
* Mapped-type utility types (TSN7406)
|
|
12
12
|
*
|
|
13
|
-
*
|
|
13
|
+
* SUPPORTED (expanded at compile time for concrete types):
|
|
14
14
|
* - Partial<T> → { [P in keyof T]?: T[P] }
|
|
15
15
|
* - Required<T> → { [P in keyof T]-?: T[P] }
|
|
16
16
|
* - Readonly<T> → { readonly [P in keyof T]: T[P] }
|
|
@@ -21,33 +21,26 @@
|
|
|
21
21
|
* Note: ReadonlyArray<T> is NOT a mapped type - it maps to IReadOnlyList<T> and is supported
|
|
22
22
|
*/
|
|
23
23
|
export const UNSUPPORTED_MAPPED_UTILITY_TYPES = new Set([
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
"Readonly",
|
|
27
|
-
"Pick",
|
|
28
|
-
"Omit",
|
|
24
|
+
// Partial, Required, Readonly, Pick, Omit are now supported
|
|
25
|
+
// They are expanded to IrObjectType in type-converter/utility-types.ts
|
|
29
26
|
]);
|
|
30
27
|
/**
|
|
31
28
|
* Conditional-type utility types (TSN7407)
|
|
32
29
|
*
|
|
33
|
-
*
|
|
34
|
-
* - Extract<T, U>
|
|
35
|
-
* - Exclude<T, U>
|
|
36
|
-
* - NonNullable<T>
|
|
37
|
-
* - ReturnType<T>
|
|
38
|
-
* - Parameters<T>
|
|
30
|
+
* SUPPORTED (expanded at compile time for concrete types):
|
|
31
|
+
* - Extract<T, U> → T extends U ? T : never
|
|
32
|
+
* - Exclude<T, U> → T extends U ? never : T
|
|
33
|
+
* - NonNullable<T> → T & {} (filters null/undefined from unions)
|
|
34
|
+
* - ReturnType<T> → T extends (...args: any) => infer R ? R : any
|
|
35
|
+
* - Parameters<T> → T extends (...args: infer P) => any ? P : never
|
|
36
|
+
* - Awaited<T> → T extends PromiseLike<infer U> ? Awaited<U> : T
|
|
37
|
+
*
|
|
38
|
+
* UNSUPPORTED (require constructor introspection):
|
|
39
39
|
* - ConstructorParameters → ConstructorType extends abstract new (...args: infer P) => any ? P : never
|
|
40
40
|
* - InstanceType<T> → T extends abstract new (...args: any) => infer R ? R : any
|
|
41
|
-
* - Awaited<T> → T extends PromiseLike<infer U> ? Awaited<U> : T
|
|
42
41
|
*/
|
|
43
42
|
export const UNSUPPORTED_CONDITIONAL_UTILITY_TYPES = new Set([
|
|
44
|
-
"Extract",
|
|
45
|
-
"Exclude",
|
|
46
|
-
"NonNullable",
|
|
47
|
-
"ReturnType",
|
|
48
|
-
"Parameters",
|
|
49
43
|
"ConstructorParameters",
|
|
50
44
|
"InstanceType",
|
|
51
|
-
"Awaited",
|
|
52
45
|
]);
|
|
53
46
|
//# sourceMappingURL=unsupported-utility-types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unsupported-utility-types.js","sourceRoot":"","sources":["../../src/validation/unsupported-utility-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,IAAI,GAAG,
|
|
1
|
+
{"version":3,"file":"unsupported-utility-types.js","sourceRoot":"","sources":["../../src/validation/unsupported-utility-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,IAAI,GAAG,CAAS;AAC9D,4DAA4D;AAC5D,uEAAuE;CACxE,CAAC,CAAC;AAEH;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,qCAAqC,GAAG,IAAI,GAAG,CAAC;IAC3D,uBAAuB;IACvB,cAAc;CACf,CAAC,CAAC"}
|
package/dist/validator.test.js
CHANGED
|
@@ -480,8 +480,8 @@ describe("Static Safety Validation", () => {
|
|
|
480
480
|
expect(intDiag).not.to.equal(undefined);
|
|
481
481
|
});
|
|
482
482
|
});
|
|
483
|
-
describe("
|
|
484
|
-
it("should
|
|
483
|
+
describe("Mapped utility types now supported", () => {
|
|
484
|
+
it("should accept Partial<T>", () => {
|
|
485
485
|
const source = `
|
|
486
486
|
interface Person { name: string; age: number; }
|
|
487
487
|
type PartialPerson = Partial<Person>;
|
|
@@ -489,10 +489,9 @@ describe("Static Safety Validation", () => {
|
|
|
489
489
|
const program = createTestProgram(source);
|
|
490
490
|
const diagnostics = validateProgram(program);
|
|
491
491
|
const diag = diagnostics.diagnostics.find((d) => d.code === "TSN7406");
|
|
492
|
-
expect(diag).
|
|
493
|
-
expect(diag?.message).to.include("Partial");
|
|
492
|
+
expect(diag).to.equal(undefined);
|
|
494
493
|
});
|
|
495
|
-
it("should
|
|
494
|
+
it("should accept Required<T>", () => {
|
|
496
495
|
const source = `
|
|
497
496
|
interface Person { name?: string; }
|
|
498
497
|
type RequiredPerson = Required<Person>;
|
|
@@ -500,10 +499,19 @@ describe("Static Safety Validation", () => {
|
|
|
500
499
|
const program = createTestProgram(source);
|
|
501
500
|
const diagnostics = validateProgram(program);
|
|
502
501
|
const diag = diagnostics.diagnostics.find((d) => d.code === "TSN7406");
|
|
503
|
-
expect(diag).
|
|
504
|
-
|
|
502
|
+
expect(diag).to.equal(undefined);
|
|
503
|
+
});
|
|
504
|
+
it("should accept Readonly<T>", () => {
|
|
505
|
+
const source = `
|
|
506
|
+
interface Person { name: string; age: number; }
|
|
507
|
+
type ReadonlyPerson = Readonly<Person>;
|
|
508
|
+
`;
|
|
509
|
+
const program = createTestProgram(source);
|
|
510
|
+
const diagnostics = validateProgram(program);
|
|
511
|
+
const diag = diagnostics.diagnostics.find((d) => d.code === "TSN7406");
|
|
512
|
+
expect(diag).to.equal(undefined);
|
|
505
513
|
});
|
|
506
|
-
it("should
|
|
514
|
+
it("should accept Pick<T, K>", () => {
|
|
507
515
|
const source = `
|
|
508
516
|
interface Person { name: string; age: number; email: string; }
|
|
509
517
|
type NameOnly = Pick<Person, "name">;
|
|
@@ -511,10 +519,9 @@ describe("Static Safety Validation", () => {
|
|
|
511
519
|
const program = createTestProgram(source);
|
|
512
520
|
const diagnostics = validateProgram(program);
|
|
513
521
|
const diag = diagnostics.diagnostics.find((d) => d.code === "TSN7406");
|
|
514
|
-
expect(diag).
|
|
515
|
-
expect(diag?.message).to.include("Pick");
|
|
522
|
+
expect(diag).to.equal(undefined);
|
|
516
523
|
});
|
|
517
|
-
it("should
|
|
524
|
+
it("should accept Omit<T, K>", () => {
|
|
518
525
|
const source = `
|
|
519
526
|
interface Person { name: string; age: number; }
|
|
520
527
|
type NoAge = Omit<Person, "age">;
|
|
@@ -522,12 +529,106 @@ describe("Static Safety Validation", () => {
|
|
|
522
529
|
const program = createTestProgram(source);
|
|
523
530
|
const diagnostics = validateProgram(program);
|
|
524
531
|
const diag = diagnostics.diagnostics.find((d) => d.code === "TSN7406");
|
|
525
|
-
expect(diag).
|
|
526
|
-
|
|
532
|
+
expect(diag).to.equal(undefined);
|
|
533
|
+
});
|
|
534
|
+
it("should accept nested utility types (Partial<Readonly<T>>)", () => {
|
|
535
|
+
const source = `
|
|
536
|
+
interface Person { name: string; age: number; }
|
|
537
|
+
type PartialReadonlyPerson = Partial<Readonly<Person>>;
|
|
538
|
+
`;
|
|
539
|
+
const program = createTestProgram(source);
|
|
540
|
+
const diagnostics = validateProgram(program);
|
|
541
|
+
const diag = diagnostics.diagnostics.find((d) => d.code === "TSN7406");
|
|
542
|
+
expect(diag).to.equal(undefined);
|
|
543
|
+
});
|
|
544
|
+
it("should accept Pick with multiple keys", () => {
|
|
545
|
+
const source = `
|
|
546
|
+
interface Person { name: string; age: number; email: string; phone: string; }
|
|
547
|
+
type ContactInfo = Pick<Person, "name" | "email" | "phone">;
|
|
548
|
+
`;
|
|
549
|
+
const program = createTestProgram(source);
|
|
550
|
+
const diagnostics = validateProgram(program);
|
|
551
|
+
const diag = diagnostics.diagnostics.find((d) => d.code === "TSN7406");
|
|
552
|
+
expect(diag).to.equal(undefined);
|
|
553
|
+
});
|
|
554
|
+
it("should accept Omit with multiple keys", () => {
|
|
555
|
+
const source = `
|
|
556
|
+
interface Person { name: string; age: number; email: string; phone: string; }
|
|
557
|
+
type MinimalPerson = Omit<Person, "email" | "phone">;
|
|
558
|
+
`;
|
|
559
|
+
const program = createTestProgram(source);
|
|
560
|
+
const diagnostics = validateProgram(program);
|
|
561
|
+
const diag = diagnostics.diagnostics.find((d) => d.code === "TSN7406");
|
|
562
|
+
expect(diag).to.equal(undefined);
|
|
563
|
+
});
|
|
564
|
+
it("should accept Required on type with mixed optional properties", () => {
|
|
565
|
+
const source = `
|
|
566
|
+
interface MixedPerson { name: string; age?: number; email?: string; }
|
|
567
|
+
type FullPerson = Required<MixedPerson>;
|
|
568
|
+
`;
|
|
569
|
+
const program = createTestProgram(source);
|
|
570
|
+
const diagnostics = validateProgram(program);
|
|
571
|
+
const diag = diagnostics.diagnostics.find((d) => d.code === "TSN7406");
|
|
572
|
+
expect(diag).to.equal(undefined);
|
|
573
|
+
});
|
|
574
|
+
it("should accept Partial on type with already optional properties", () => {
|
|
575
|
+
const source = `
|
|
576
|
+
interface OptionalPerson { name?: string; age?: number; }
|
|
577
|
+
type StillOptional = Partial<OptionalPerson>;
|
|
578
|
+
`;
|
|
579
|
+
const program = createTestProgram(source);
|
|
580
|
+
const diagnostics = validateProgram(program);
|
|
581
|
+
const diag = diagnostics.diagnostics.find((d) => d.code === "TSN7406");
|
|
582
|
+
expect(diag).to.equal(undefined);
|
|
583
|
+
});
|
|
584
|
+
it("should accept Readonly on type with readonly properties", () => {
|
|
585
|
+
const source = `
|
|
586
|
+
interface PartiallyReadonly { readonly id: string; name: string; }
|
|
587
|
+
type FullyReadonly = Readonly<PartiallyReadonly>;
|
|
588
|
+
`;
|
|
589
|
+
const program = createTestProgram(source);
|
|
590
|
+
const diagnostics = validateProgram(program);
|
|
591
|
+
const diag = diagnostics.diagnostics.find((d) => d.code === "TSN7406");
|
|
592
|
+
expect(diag).to.equal(undefined);
|
|
593
|
+
});
|
|
594
|
+
it("should accept utility types in variable declarations", () => {
|
|
595
|
+
const source = `
|
|
596
|
+
interface Person { name: string; age: number; }
|
|
597
|
+
const update: Partial<Person> = { name: "Alice" };
|
|
598
|
+
`;
|
|
599
|
+
const program = createTestProgram(source);
|
|
600
|
+
const diagnostics = validateProgram(program);
|
|
601
|
+
const diag = diagnostics.diagnostics.find((d) => d.code === "TSN7406");
|
|
602
|
+
expect(diag).to.equal(undefined);
|
|
603
|
+
});
|
|
604
|
+
it("should accept utility types in function parameters", () => {
|
|
605
|
+
const source = `
|
|
606
|
+
interface Person { name: string; age: number; }
|
|
607
|
+
function updatePerson(person: Person, updates: Partial<Person>): Person {
|
|
608
|
+
return { ...person, ...updates };
|
|
609
|
+
}
|
|
610
|
+
`;
|
|
611
|
+
const program = createTestProgram(source);
|
|
612
|
+
const diagnostics = validateProgram(program);
|
|
613
|
+
const diag = diagnostics.diagnostics.find((d) => d.code === "TSN7406");
|
|
614
|
+
expect(diag).to.equal(undefined);
|
|
615
|
+
});
|
|
616
|
+
it("should accept utility types in function return type", () => {
|
|
617
|
+
const source = `
|
|
618
|
+
interface Person { name: string; age: number; }
|
|
619
|
+
function getPartialPerson(): Partial<Person> {
|
|
620
|
+
return { name: "Bob" };
|
|
621
|
+
}
|
|
622
|
+
`;
|
|
623
|
+
const program = createTestProgram(source);
|
|
624
|
+
const diagnostics = validateProgram(program);
|
|
625
|
+
const diag = diagnostics.diagnostics.find((d) => d.code === "TSN7406");
|
|
626
|
+
expect(diag).to.equal(undefined);
|
|
527
627
|
});
|
|
528
628
|
});
|
|
529
629
|
describe("TSN7407 - Conditional utility types not supported", () => {
|
|
530
|
-
|
|
630
|
+
// Extract, Exclude, NonNullable are now supported and expanded at compile time
|
|
631
|
+
it("should accept Extract<T, U>", () => {
|
|
531
632
|
const source = `
|
|
532
633
|
type StringOrNumber = string | number;
|
|
533
634
|
type OnlyStrings = Extract<StringOrNumber, string>;
|
|
@@ -535,10 +636,9 @@ describe("Static Safety Validation", () => {
|
|
|
535
636
|
const program = createTestProgram(source);
|
|
536
637
|
const diagnostics = validateProgram(program);
|
|
537
638
|
const diag = diagnostics.diagnostics.find((d) => d.code === "TSN7407");
|
|
538
|
-
expect(diag).
|
|
539
|
-
expect(diag?.message).to.include("Extract");
|
|
639
|
+
expect(diag).to.equal(undefined);
|
|
540
640
|
});
|
|
541
|
-
it("should
|
|
641
|
+
it("should accept Exclude<T, U>", () => {
|
|
542
642
|
const source = `
|
|
543
643
|
type StringOrNumber = string | number;
|
|
544
644
|
type NoStrings = Exclude<StringOrNumber, string>;
|
|
@@ -546,10 +646,9 @@ describe("Static Safety Validation", () => {
|
|
|
546
646
|
const program = createTestProgram(source);
|
|
547
647
|
const diagnostics = validateProgram(program);
|
|
548
648
|
const diag = diagnostics.diagnostics.find((d) => d.code === "TSN7407");
|
|
549
|
-
expect(diag).
|
|
550
|
-
expect(diag?.message).to.include("Exclude");
|
|
649
|
+
expect(diag).to.equal(undefined);
|
|
551
650
|
});
|
|
552
|
-
it("should
|
|
651
|
+
it("should accept NonNullable<T>", () => {
|
|
553
652
|
const source = `
|
|
554
653
|
type MaybeString = string | null | undefined;
|
|
555
654
|
type DefinitelyString = NonNullable<MaybeString>;
|
|
@@ -557,10 +656,9 @@ describe("Static Safety Validation", () => {
|
|
|
557
656
|
const program = createTestProgram(source);
|
|
558
657
|
const diagnostics = validateProgram(program);
|
|
559
658
|
const diag = diagnostics.diagnostics.find((d) => d.code === "TSN7407");
|
|
560
|
-
expect(diag).
|
|
561
|
-
expect(diag?.message).to.include("NonNullable");
|
|
659
|
+
expect(diag).to.equal(undefined);
|
|
562
660
|
});
|
|
563
|
-
it("should
|
|
661
|
+
it("should accept ReturnType<T> (now supported)", () => {
|
|
564
662
|
const source = `
|
|
565
663
|
function greet(name: string): string { return name; }
|
|
566
664
|
type GreetReturn = ReturnType<typeof greet>;
|
|
@@ -568,10 +666,9 @@ describe("Static Safety Validation", () => {
|
|
|
568
666
|
const program = createTestProgram(source);
|
|
569
667
|
const diagnostics = validateProgram(program);
|
|
570
668
|
const diag = diagnostics.diagnostics.find((d) => d.code === "TSN7407");
|
|
571
|
-
expect(diag).
|
|
572
|
-
expect(diag?.message).to.include("ReturnType");
|
|
669
|
+
expect(diag).to.equal(undefined);
|
|
573
670
|
});
|
|
574
|
-
it("should
|
|
671
|
+
it("should accept Parameters<T> (now supported)", () => {
|
|
575
672
|
const source = `
|
|
576
673
|
function add(a: number, b: number): number { return a + b; }
|
|
577
674
|
type AddParams = Parameters<typeof add>;
|
|
@@ -579,8 +676,16 @@ describe("Static Safety Validation", () => {
|
|
|
579
676
|
const program = createTestProgram(source);
|
|
580
677
|
const diagnostics = validateProgram(program);
|
|
581
678
|
const diag = diagnostics.diagnostics.find((d) => d.code === "TSN7407");
|
|
582
|
-
expect(diag).
|
|
583
|
-
|
|
679
|
+
expect(diag).to.equal(undefined);
|
|
680
|
+
});
|
|
681
|
+
it("should accept Awaited<T> (now supported)", () => {
|
|
682
|
+
const source = `
|
|
683
|
+
type Result = Awaited<Promise<string>>;
|
|
684
|
+
`;
|
|
685
|
+
const program = createTestProgram(source);
|
|
686
|
+
const diagnostics = validateProgram(program);
|
|
687
|
+
const diag = diagnostics.diagnostics.find((d) => d.code === "TSN7407");
|
|
688
|
+
expect(diag).to.equal(undefined);
|
|
584
689
|
});
|
|
585
690
|
});
|
|
586
691
|
describe("No false positives for utility-like names", () => {
|