numtypes 0.0.0

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.
Files changed (87) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/LICENSE +12 -0
  3. package/LICENSE-APACHE +201 -0
  4. package/LICENSE-MIT +21 -0
  5. package/README.md +652 -0
  6. package/dist/lib/index.d.ts +22 -0
  7. package/dist/lib/index.d.ts.map +1 -0
  8. package/dist/lib/index.js +2 -0
  9. package/dist/lib/index.js.map +1 -0
  10. package/dist/transformer/analyze/analyze-source-file.d.ts +15 -0
  11. package/dist/transformer/analyze/analyze-source-file.d.ts.map +1 -0
  12. package/dist/transformer/analyze/analyze-source-file.js +605 -0
  13. package/dist/transformer/analyze/analyze-source-file.js.map +1 -0
  14. package/dist/transformer/analyze/get-contextual-domain.d.ts +19 -0
  15. package/dist/transformer/analyze/get-contextual-domain.d.ts.map +1 -0
  16. package/dist/transformer/analyze/get-contextual-domain.js +197 -0
  17. package/dist/transformer/analyze/get-contextual-domain.js.map +1 -0
  18. package/dist/transformer/analyze/get-expression-domain.d.ts +26 -0
  19. package/dist/transformer/analyze/get-expression-domain.d.ts.map +1 -0
  20. package/dist/transformer/analyze/get-expression-domain.js +804 -0
  21. package/dist/transformer/analyze/get-expression-domain.js.map +1 -0
  22. package/dist/transformer/analyze/type-domain.d.ts +41 -0
  23. package/dist/transformer/analyze/type-domain.d.ts.map +1 -0
  24. package/dist/transformer/analyze/type-domain.js +260 -0
  25. package/dist/transformer/analyze/type-domain.js.map +1 -0
  26. package/dist/transformer/ast.d.ts +10 -0
  27. package/dist/transformer/ast.d.ts.map +1 -0
  28. package/dist/transformer/ast.js +115 -0
  29. package/dist/transformer/ast.js.map +1 -0
  30. package/dist/transformer/diagnostics.d.ts +17 -0
  31. package/dist/transformer/diagnostics.d.ts.map +1 -0
  32. package/dist/transformer/diagnostics.js +30 -0
  33. package/dist/transformer/diagnostics.js.map +1 -0
  34. package/dist/transformer/domains.d.ts +11 -0
  35. package/dist/transformer/domains.d.ts.map +1 -0
  36. package/dist/transformer/domains.js +32 -0
  37. package/dist/transformer/domains.js.map +1 -0
  38. package/dist/transformer/index.d.ts +10 -0
  39. package/dist/transformer/index.d.ts.map +1 -0
  40. package/dist/transformer/index.js +60 -0
  41. package/dist/transformer/index.js.map +1 -0
  42. package/dist/transformer/operators.d.ts +16 -0
  43. package/dist/transformer/operators.d.ts.map +1 -0
  44. package/dist/transformer/operators.js +44 -0
  45. package/dist/transformer/operators.js.map +1 -0
  46. package/dist/transformer/options.d.ts +19 -0
  47. package/dist/transformer/options.d.ts.map +1 -0
  48. package/dist/transformer/options.js +17 -0
  49. package/dist/transformer/options.js.map +1 -0
  50. package/dist/transformer/symbols.d.ts +56 -0
  51. package/dist/transformer/symbols.d.ts.map +1 -0
  52. package/dist/transformer/symbols.js +270 -0
  53. package/dist/transformer/symbols.js.map +1 -0
  54. package/dist/transformer/transform/erase-imports.d.ts +14 -0
  55. package/dist/transformer/transform/erase-imports.d.ts.map +1 -0
  56. package/dist/transformer/transform/erase-imports.js +174 -0
  57. package/dist/transformer/transform/erase-imports.js.map +1 -0
  58. package/dist/transformer/transform/generated-coercions.d.ts +9 -0
  59. package/dist/transformer/transform/generated-coercions.d.ts.map +1 -0
  60. package/dist/transformer/transform/generated-coercions.js +22 -0
  61. package/dist/transformer/transform/generated-coercions.js.map +1 -0
  62. package/dist/transformer/transform/optimize-coercions.d.ts +11 -0
  63. package/dist/transformer/transform/optimize-coercions.d.ts.map +1 -0
  64. package/dist/transformer/transform/optimize-coercions.js +1702 -0
  65. package/dist/transformer/transform/optimize-coercions.js.map +1 -0
  66. package/dist/transformer/transform/transform-declaration-file.d.ts +9 -0
  67. package/dist/transformer/transform/transform-declaration-file.d.ts.map +1 -0
  68. package/dist/transformer/transform/transform-declaration-file.js +376 -0
  69. package/dist/transformer/transform/transform-declaration-file.js.map +1 -0
  70. package/dist/transformer/transform/transform-expression.d.ts +24 -0
  71. package/dist/transformer/transform/transform-expression.d.ts.map +1 -0
  72. package/dist/transformer/transform/transform-expression.js +545 -0
  73. package/dist/transformer/transform/transform-expression.js.map +1 -0
  74. package/dist/transformer/transform/transform-source-file.d.ts +10 -0
  75. package/dist/transformer/transform/transform-source-file.d.ts.map +1 -0
  76. package/dist/transformer/transform/transform-source-file.js +52 -0
  77. package/dist/transformer/transform/transform-source-file.js.map +1 -0
  78. package/dist/transformer/ts-compat.d.ts +4 -0
  79. package/dist/transformer/ts-compat.d.ts.map +1 -0
  80. package/dist/transformer/ts-compat.js +24 -0
  81. package/dist/transformer/ts-compat.js.map +1 -0
  82. package/docs/implementation-plan.md +335 -0
  83. package/docs/lib-implementation.md +77 -0
  84. package/docs/lowering-optimization-spec.md +1020 -0
  85. package/docs/project-structure.md +52 -0
  86. package/docs/transform-spec.md +2114 -0
  87. package/package.json +83 -0
@@ -0,0 +1,19 @@
1
+ import * as ts from "typescript";
2
+ import type { NumericDomain } from "../domains.js";
3
+ import type { TransformerDiagnostic } from "../diagnostics.js";
4
+ import type { NumtypeSymbolTable } from "../symbols.js";
5
+ export type ContextualDomainReason = "assignment-target" | "array-element" | "conditional-branch" | "declaration" | "object-property" | "return-type" | "unknown";
6
+ export interface ContextualDomainInput {
7
+ readonly checker: ts.TypeChecker;
8
+ readonly node: ts.Node;
9
+ readonly symbols: NumtypeSymbolTable;
10
+ }
11
+ export interface ContextualDomainResult {
12
+ readonly diagnostics: readonly TransformerDiagnostic[];
13
+ readonly domain: NumericDomain | undefined;
14
+ readonly hasNonNumericUnionMembers?: boolean | undefined;
15
+ readonly reason: ContextualDomainReason;
16
+ readonly unionDomains?: readonly NumericDomain[] | undefined;
17
+ }
18
+ export declare function getContextualDomain(input: ContextualDomainInput): ContextualDomainResult;
19
+ //# sourceMappingURL=get-contextual-domain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-contextual-domain.d.ts","sourceRoot":"","sources":["../../../src/transformer/analyze/get-contextual-domain.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAQjC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAGxD,MAAM,MAAM,sBAAsB,GAC9B,mBAAmB,GACnB,eAAe,GACf,oBAAoB,GACpB,aAAa,GACb,iBAAiB,GACjB,aAAa,GACb,SAAS,CAAC;AAEd,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;CACtC;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,WAAW,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACvD,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,yBAAyB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACzD,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC;IACxC,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,aAAa,EAAE,GAAG,SAAS,CAAC;CAC9D;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,qBAAqB,GAC3B,sBAAsB,CASxB"}
@@ -0,0 +1,197 @@
1
+ import * as ts from "typescript";
2
+ import { getDeclarationDomain, getFunctionReturnDomain, getTypeDomain, isNumericTypeDomain } from "./type-domain.js";
3
+ import { isRuntimeExpression } from "../ast.js";
4
+ export function getContextualDomain(input) {
5
+ if (!isRuntimeExpression(input.node)) {
6
+ return createContextualDomainResult({
7
+ diagnostics: [],
8
+ reason: "unknown"
9
+ });
10
+ }
11
+ return getExpressionContextualDomain(input, input.node);
12
+ }
13
+ function getExpressionContextualDomain(input, expression) {
14
+ const parent = expression.parent;
15
+ if (ts.isParenthesizedExpression(parent)) {
16
+ return getExpressionContextualDomain(input, parent);
17
+ }
18
+ if (ts.isVariableDeclaration(parent) && parent.initializer === expression) {
19
+ return getVariableDeclarationContext(input, parent);
20
+ }
21
+ if (ts.isBinaryExpression(parent) && parent.right === expression) {
22
+ return getAssignmentContext(input, parent);
23
+ }
24
+ if (ts.isReturnStatement(parent) && parent.expression === expression) {
25
+ return getReturnContext(input, parent);
26
+ }
27
+ if (ts.isArrowFunction(parent) && parent.body === expression) {
28
+ return getSignatureReturnContext(input, parent);
29
+ }
30
+ if (ts.isCallExpression(parent)) {
31
+ return createContextualDomainResult({
32
+ diagnostics: [],
33
+ reason: "unknown"
34
+ });
35
+ }
36
+ if (ts.isConditionalExpression(parent)) {
37
+ return getConditionalBranchContext(input, parent, expression);
38
+ }
39
+ if (ts.isPropertyAssignment(parent) && parent.initializer === expression) {
40
+ return getContextualTypeContext(input, expression, "object-property");
41
+ }
42
+ if (ts.isArrayLiteralExpression(parent) &&
43
+ parent.elements.some((element) => element === expression)) {
44
+ return getContextualTypeContext(input, expression, "array-element");
45
+ }
46
+ return createContextualDomainResult({
47
+ diagnostics: [],
48
+ reason: "unknown"
49
+ });
50
+ }
51
+ function getVariableDeclarationContext(input, declaration) {
52
+ const typeResult = getDeclarationDomain({
53
+ checker: input.checker,
54
+ declaration,
55
+ symbols: input.symbols
56
+ });
57
+ return resultFromTypeDomain(typeResult, "declaration");
58
+ }
59
+ function getAssignmentContext(input, expression) {
60
+ if (!isAssignmentOperator(expression.operatorToken.kind)) {
61
+ return createContextualDomainResult({
62
+ diagnostics: [],
63
+ reason: "unknown"
64
+ });
65
+ }
66
+ const targetResult = getTypeDomain({
67
+ checker: input.checker,
68
+ node: expression.left,
69
+ symbols: input.symbols,
70
+ type: input.checker.getTypeAtLocation(expression.left)
71
+ });
72
+ return resultFromTypeDomain(targetResult, "assignment-target");
73
+ }
74
+ function getReturnContext(input, returnStatement) {
75
+ const functionLike = findContainingSignatureDeclaration(returnStatement);
76
+ if (functionLike === undefined) {
77
+ return createContextualDomainResult({
78
+ diagnostics: [],
79
+ reason: "unknown"
80
+ });
81
+ }
82
+ return getSignatureReturnContext(input, functionLike);
83
+ }
84
+ function getSignatureReturnContext(input, signatureDeclaration) {
85
+ const returnTypeResult = getFunctionReturnDomain({
86
+ checker: input.checker,
87
+ declaration: signatureDeclaration,
88
+ symbols: input.symbols
89
+ });
90
+ return resultFromTypeDomain(returnTypeResult, "return-type");
91
+ }
92
+ function getConditionalBranchContext(input, conditionalExpression, branchExpression) {
93
+ if (conditionalExpression.whenTrue !== branchExpression &&
94
+ conditionalExpression.whenFalse !== branchExpression) {
95
+ return createContextualDomainResult({
96
+ diagnostics: [],
97
+ reason: "unknown"
98
+ });
99
+ }
100
+ const parentContext = getExpressionContextualDomain(input, conditionalExpression);
101
+ if (parentContext.domain === undefined) {
102
+ return parentContext;
103
+ }
104
+ return createContextualDomainResult({
105
+ diagnostics: parentContext.diagnostics,
106
+ domain: parentContext.domain,
107
+ reason: "conditional-branch"
108
+ });
109
+ }
110
+ function getContextualTypeContext(input, expression, reason) {
111
+ const contextualType = input.checker.getContextualType(expression);
112
+ if (contextualType === undefined) {
113
+ return createContextualDomainResult({
114
+ diagnostics: [],
115
+ reason: "unknown"
116
+ });
117
+ }
118
+ const typeResult = getTypeDomain({
119
+ checker: input.checker,
120
+ node: expression,
121
+ symbols: input.symbols,
122
+ type: contextualType
123
+ });
124
+ return resultFromTypeDomain(typeResult, reason);
125
+ }
126
+ function resultFromTypeDomain(typeResult, reason) {
127
+ if (typeResult.unionDomains !== undefined &&
128
+ typeResult.unionDomains.length > 0) {
129
+ return createContextualDomainResult({
130
+ diagnostics: typeResult.diagnostics,
131
+ hasNonNumericUnionMembers: typeResult.hasNonNumericUnionMembers,
132
+ reason,
133
+ unionDomains: typeResult.unionDomains
134
+ });
135
+ }
136
+ if (!isNumericTypeDomain(typeResult.domain)) {
137
+ return createContextualDomainResult({
138
+ diagnostics: typeResult.diagnostics,
139
+ reason: "unknown"
140
+ });
141
+ }
142
+ return createContextualDomainResult({
143
+ diagnostics: typeResult.diagnostics,
144
+ domain: typeResult.domain,
145
+ reason
146
+ });
147
+ }
148
+ function createContextualDomainResult(input) {
149
+ const result = {
150
+ diagnostics: input.diagnostics,
151
+ domain: input.domain,
152
+ reason: input.reason
153
+ };
154
+ if (input.unionDomains === undefined || input.unionDomains.length === 0) {
155
+ return result;
156
+ }
157
+ return {
158
+ ...result,
159
+ hasNonNumericUnionMembers: input.hasNonNumericUnionMembers === true,
160
+ unionDomains: input.unionDomains
161
+ };
162
+ }
163
+ function isAssignmentOperator(operator) {
164
+ return (operator === ts.SyntaxKind.EqualsToken ||
165
+ operator === ts.SyntaxKind.PlusEqualsToken ||
166
+ operator === ts.SyntaxKind.MinusEqualsToken ||
167
+ operator === ts.SyntaxKind.AsteriskEqualsToken ||
168
+ operator === ts.SyntaxKind.AsteriskAsteriskEqualsToken ||
169
+ operator === ts.SyntaxKind.SlashEqualsToken ||
170
+ operator === ts.SyntaxKind.PercentEqualsToken ||
171
+ operator === ts.SyntaxKind.LessThanLessThanEqualsToken ||
172
+ operator === ts.SyntaxKind.GreaterThanGreaterThanEqualsToken ||
173
+ operator === ts.SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken ||
174
+ operator === ts.SyntaxKind.AmpersandEqualsToken ||
175
+ operator === ts.SyntaxKind.BarEqualsToken ||
176
+ operator === ts.SyntaxKind.CaretEqualsToken);
177
+ }
178
+ function findContainingSignatureDeclaration(node) {
179
+ let current = node.parent;
180
+ while (!ts.isSourceFile(current)) {
181
+ if (isSignatureDeclarationWithBody(current)) {
182
+ return current;
183
+ }
184
+ current = current.parent;
185
+ }
186
+ return undefined;
187
+ }
188
+ function isSignatureDeclarationWithBody(node) {
189
+ return (ts.isFunctionDeclaration(node) ||
190
+ ts.isFunctionExpression(node) ||
191
+ ts.isArrowFunction(node) ||
192
+ ts.isMethodDeclaration(node) ||
193
+ ts.isGetAccessorDeclaration(node) ||
194
+ ts.isSetAccessorDeclaration(node) ||
195
+ ts.isConstructorDeclaration(node));
196
+ }
197
+ //# sourceMappingURL=get-contextual-domain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-contextual-domain.js","sourceRoot":"","sources":["../../../src/transformer/analyze/get-contextual-domain.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,aAAa,EACb,mBAAmB,EACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AA6BhD,MAAM,UAAU,mBAAmB,CACjC,KAA4B;IAE5B,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,OAAO,4BAA4B,CAAC;YAClC,WAAW,EAAE,EAAE;YACf,MAAM,EAAE,SAAS;SAClB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,6BAA6B,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,6BAA6B,CACpC,KAA4B,EAC5B,UAAyB;IAEzB,MAAM,MAAM,GAAY,UAAU,CAAC,MAAM,CAAC;IAE1C,IAAI,EAAE,CAAC,yBAAyB,CAAC,MAAM,CAAC,EAAE,CAAC;QACzC,OAAO,6BAA6B,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;QAC1E,OAAO,6BAA6B,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,EAAE,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;QACjE,OAAO,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;QACrE,OAAO,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC7D,OAAO,yBAAyB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAClD,CAAC;IAED,IAAI,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;QAChC,OAAO,4BAA4B,CAAC;YAClC,WAAW,EAAE,EAAE;YACf,MAAM,EAAE,SAAS;SAClB,CAAC,CAAC;IACL,CAAC;IAED,IAAI,EAAE,CAAC,uBAAuB,CAAC,MAAM,CAAC,EAAE,CAAC;QACvC,OAAO,2BAA2B,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IAChE,CAAC;IAED,IAAI,EAAE,CAAC,oBAAoB,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;QACzE,OAAO,wBAAwB,CAAC,KAAK,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC;IACxE,CAAC;IAED,IACE,EAAE,CAAC,wBAAwB,CAAC,MAAM,CAAC;QACnC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAsB,EAAW,EAAE,CAAC,OAAO,KAAK,UAAU,CAAC,EACjF,CAAC;QACD,OAAO,wBAAwB,CAAC,KAAK,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;IACtE,CAAC;IAED,OAAO,4BAA4B,CAAC;QAClC,WAAW,EAAE,EAAE;QACf,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,6BAA6B,CACpC,KAA4B,EAC5B,WAAmC;IAEnC,MAAM,UAAU,GAAqB,oBAAoB,CAAC;QACxD,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,WAAW;QACX,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC,CAAC;IAEH,OAAO,oBAAoB,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,oBAAoB,CAC3B,KAA4B,EAC5B,UAA+B;IAE/B,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;QACzD,OAAO,4BAA4B,CAAC;YAClC,WAAW,EAAE,EAAE;YACf,MAAM,EAAE,SAAS;SAClB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,YAAY,GAAqB,aAAa,CAAC;QACnD,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC;KACvD,CAAC,CAAC;IAEH,OAAO,oBAAoB,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,gBAAgB,CACvB,KAA4B,EAC5B,eAAmC;IAEnC,MAAM,YAAY,GAChB,kCAAkC,CAAC,eAAe,CAAC,CAAC;IAEtD,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,4BAA4B,CAAC;YAClC,WAAW,EAAE,EAAE;YACf,MAAM,EAAE,SAAS;SAClB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,yBAAyB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,yBAAyB,CAChC,KAA4B,EAC5B,oBAA6C;IAE7C,MAAM,gBAAgB,GAAqB,uBAAuB,CAAC;QACjE,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,WAAW,EAAE,oBAAoB;QACjC,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC,CAAC;IAEH,OAAO,oBAAoB,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,2BAA2B,CAClC,KAA4B,EAC5B,qBAA+C,EAC/C,gBAA+B;IAE/B,IACE,qBAAqB,CAAC,QAAQ,KAAK,gBAAgB;QACnD,qBAAqB,CAAC,SAAS,KAAK,gBAAgB,EACpD,CAAC;QACD,OAAO,4BAA4B,CAAC;YAClC,WAAW,EAAE,EAAE;YACf,MAAM,EAAE,SAAS;SAClB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,aAAa,GAA2B,6BAA6B,CACzE,KAAK,EACL,qBAAqB,CACtB,CAAC;IAEF,IAAI,aAAa,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACvC,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,OAAO,4BAA4B,CAAC;QAClC,WAAW,EAAE,aAAa,CAAC,WAAW;QACtC,MAAM,EAAE,aAAa,CAAC,MAAM;QAC5B,MAAM,EAAE,oBAAoB;KAC7B,CAAC,CAAC;AACL,CAAC;AAED,SAAS,wBAAwB,CAC/B,KAA4B,EAC5B,UAAyB,EACzB,MAA2C;IAE3C,MAAM,cAAc,GAClB,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;IAE9C,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,4BAA4B,CAAC;YAClC,WAAW,EAAE,EAAE;YACf,MAAM,EAAE,SAAS;SAClB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,UAAU,GAAqB,aAAa,CAAC;QACjD,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,IAAI,EAAE,cAAc;KACrB,CAAC,CAAC;IAEH,OAAO,oBAAoB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,oBAAoB,CAC3B,UAA4B,EAC5B,MAA8B;IAE9B,IACE,UAAU,CAAC,YAAY,KAAK,SAAS;QACrC,UAAU,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAClC,CAAC;QACD,OAAO,4BAA4B,CAAC;YAClC,WAAW,EAAE,UAAU,CAAC,WAAW;YACnC,yBAAyB,EAAE,UAAU,CAAC,yBAAyB;YAC/D,MAAM;YACN,YAAY,EAAE,UAAU,CAAC,YAAY;SACtC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5C,OAAO,4BAA4B,CAAC;YAClC,WAAW,EAAE,UAAU,CAAC,WAAW;YACnC,MAAM,EAAE,SAAS;SAClB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,4BAA4B,CAAC;QAClC,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,MAAM;KACP,CAAC,CAAC;AACL,CAAC;AAED,SAAS,4BAA4B,CAAC,KAMrC;IACC,MAAM,MAAM,GAA2B;QACrC,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,MAAM,EAAE,KAAK,CAAC,MAAM;KACrB,CAAC;IAEF,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO;QACL,GAAG,MAAM;QACT,yBAAyB,EAAE,KAAK,CAAC,yBAAyB,KAAK,IAAI;QACnE,YAAY,EAAE,KAAK,CAAC,YAAY;KACjC,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,QAAuB;IACnD,OAAO,CACL,QAAQ,KAAK,EAAE,CAAC,UAAU,CAAC,WAAW;QACtC,QAAQ,KAAK,EAAE,CAAC,UAAU,CAAC,eAAe;QAC1C,QAAQ,KAAK,EAAE,CAAC,UAAU,CAAC,gBAAgB;QAC3C,QAAQ,KAAK,EAAE,CAAC,UAAU,CAAC,mBAAmB;QAC9C,QAAQ,KAAK,EAAE,CAAC,UAAU,CAAC,2BAA2B;QACtD,QAAQ,KAAK,EAAE,CAAC,UAAU,CAAC,gBAAgB;QAC3C,QAAQ,KAAK,EAAE,CAAC,UAAU,CAAC,kBAAkB;QAC7C,QAAQ,KAAK,EAAE,CAAC,UAAU,CAAC,2BAA2B;QACtD,QAAQ,KAAK,EAAE,CAAC,UAAU,CAAC,iCAAiC;QAC5D,QAAQ,KAAK,EAAE,CAAC,UAAU,CAAC,4CAA4C;QACvE,QAAQ,KAAK,EAAE,CAAC,UAAU,CAAC,oBAAoB;QAC/C,QAAQ,KAAK,EAAE,CAAC,UAAU,CAAC,cAAc;QACzC,QAAQ,KAAK,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAC5C,CAAC;AACJ,CAAC;AAED,SAAS,kCAAkC,CACzC,IAAa;IAEb,IAAI,OAAO,GAAY,IAAI,CAAC,MAAM,CAAC;IAEnC,OAAO,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,IAAI,8BAA8B,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5C,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,8BAA8B,CACrC,IAAa;IAEb,OAAO,CACL,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC;QAC9B,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC;QAC7B,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC;QACxB,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAC5B,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC;QACjC,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC;QACjC,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAClC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,26 @@
1
+ import * as ts from "typescript";
2
+ import type { NumericDomain } from "../domains.js";
3
+ import type { TransformerDiagnostic } from "../diagnostics.js";
4
+ import type { NumtypeSymbolTable } from "../symbols.js";
5
+ import type { TypeDomain } from "./type-domain.js";
6
+ export type ExpressionDomainReason = "cast-call" | "contextual-literal" | "literal" | "operator" | "type" | "unknown";
7
+ export interface ExpressionDomainInput {
8
+ readonly cache?: ExpressionDomainCache | undefined;
9
+ readonly checker: ts.TypeChecker;
10
+ readonly contextualDomain?: NumericDomain | undefined;
11
+ readonly expression: ts.Expression;
12
+ readonly symbols: NumtypeSymbolTable;
13
+ }
14
+ export interface ExpressionDomainResult {
15
+ readonly diagnostics: readonly TransformerDiagnostic[];
16
+ readonly domain: TypeDomain;
17
+ readonly hasNonNumericUnionMembers?: boolean | undefined;
18
+ readonly isDomainBound: boolean;
19
+ readonly reason: ExpressionDomainReason;
20
+ readonly requiresClosure: boolean;
21
+ readonly unionDomains?: readonly NumericDomain[] | undefined;
22
+ }
23
+ export type ExpressionDomainCache = WeakMap<ts.Expression, Map<string, ExpressionDomainResult>>;
24
+ export declare function createExpressionDomainCache(): ExpressionDomainCache;
25
+ export declare function getExpressionDomain(input: ExpressionDomainInput): ExpressionDomainResult;
26
+ //# sourceMappingURL=get-expression-domain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-expression-domain.d.ts","sourceRoot":"","sources":["../../../src/transformer/analyze/get-expression-domain.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAWjC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,KAAK,EAAwB,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAC9E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AA2DnD,MAAM,MAAM,sBAAsB,GAC9B,WAAW,GACX,oBAAoB,GACpB,SAAS,GACT,UAAU,GACV,MAAM,GACN,SAAS,CAAC;AAEd,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,KAAK,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAC;IACnD,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC;IACjC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IACtD,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;CACtC;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,WAAW,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACvD,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,yBAAyB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACzD,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC;IACxC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,aAAa,EAAE,GAAG,SAAS,CAAC;CAC9D;AAED,MAAM,MAAM,qBAAqB,GAAG,OAAO,CACzC,EAAE,CAAC,UAAU,EACb,GAAG,CAAC,MAAM,EAAE,sBAAsB,CAAC,CACpC,CAAC;AAyBF,wBAAgB,2BAA2B,IAAI,qBAAqB,CAEnE;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,qBAAqB,GAC3B,sBAAsB,CAKxB"}