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,174 @@
1
+ import * as ts from "typescript";
2
+ import { isNumericDomain } from "../domains.js";
3
+ import { numtypesModuleSpecifier } from "../symbols.js";
4
+ import { updateImportClauseCompat } from "../ts-compat.js";
5
+ export function erasePhantomBindings(input) {
6
+ const statements = [];
7
+ for (const statement of input.sourceFile.statements) {
8
+ const erasedStatement = erasePhantomBindingStatement(input.factory, statement);
9
+ if (erasedStatement !== undefined) {
10
+ statements.push(erasedStatement);
11
+ }
12
+ }
13
+ return input.factory.updateSourceFile(input.sourceFile, statements);
14
+ }
15
+ export function eraseNumtypeDeclarationSurface(input) {
16
+ const statements = [];
17
+ for (const statement of input.sourceFile.statements) {
18
+ const erasedStatement = eraseDeclarationSurfaceStatement({
19
+ factory: input.factory,
20
+ numtypeLocalTypeNames: input.numtypeLocalTypeNames,
21
+ numtypeLocalValueNames: input.numtypeLocalValueNames,
22
+ preservedNumtypeLocalNames: input.preservedNumtypeLocalNames,
23
+ preservedNumtypeNamespaceNames: input.preservedNumtypeNamespaceNames,
24
+ statement
25
+ });
26
+ if (erasedStatement !== undefined) {
27
+ statements.push(erasedStatement);
28
+ }
29
+ }
30
+ return input.factory.updateSourceFile(input.sourceFile, statements);
31
+ }
32
+ function erasePhantomBindingStatement(factory, statement) {
33
+ if (ts.isImportDeclaration(statement)) {
34
+ return eraseImportDeclaration(factory, statement);
35
+ }
36
+ if (ts.isExportDeclaration(statement) &&
37
+ isNumtypesExportDeclaration(statement)) {
38
+ if (hasValueExport(statement)) {
39
+ return statement;
40
+ }
41
+ return eraseModuleExportDeclaration(factory, statement);
42
+ }
43
+ return statement;
44
+ }
45
+ function eraseDeclarationSurfaceStatement(input) {
46
+ if (ts.isImportDeclaration(input.statement)) {
47
+ return eraseImportDeclaration(input.factory, input.statement, {
48
+ preservedLocalNames: input.preservedNumtypeLocalNames,
49
+ preservedNamespaceNames: input.preservedNumtypeNamespaceNames
50
+ });
51
+ }
52
+ if (ts.isExportDeclaration(input.statement)) {
53
+ return eraseExportDeclaration({
54
+ factory: input.factory,
55
+ numtypeLocalTypeNames: input.numtypeLocalTypeNames,
56
+ numtypeLocalValueNames: input.numtypeLocalValueNames,
57
+ statement: input.statement
58
+ });
59
+ }
60
+ return input.statement;
61
+ }
62
+ function eraseImportDeclaration(factory, statement, options = {}) {
63
+ if (!isNumtypesImportDeclaration(statement)) {
64
+ return statement;
65
+ }
66
+ const importClause = statement.importClause;
67
+ if (importClause === undefined) {
68
+ return undefined;
69
+ }
70
+ const namedBindings = importClause.namedBindings;
71
+ if (namedBindings === undefined) {
72
+ return statement;
73
+ }
74
+ if (!ts.isNamedImports(namedBindings)) {
75
+ if (ts.isNamespaceImport(namedBindings) &&
76
+ options.preservedNamespaceNames?.has(namedBindings.name.text) === true) {
77
+ return statement;
78
+ }
79
+ return undefined;
80
+ }
81
+ const remainingSpecifiers = namedBindings.elements.filter((specifier) => {
82
+ const importedName = getModuleExportNameText(specifier.propertyName ?? specifier.name);
83
+ if (!isNumericDomain(importedName)) {
84
+ return true;
85
+ }
86
+ return options.preservedLocalNames?.has(specifier.name.text) === true;
87
+ });
88
+ if (remainingSpecifiers.length === namedBindings.elements.length) {
89
+ return statement;
90
+ }
91
+ const nextNamedBindings = remainingSpecifiers.length === 0
92
+ ? undefined
93
+ : factory.updateNamedImports(namedBindings, remainingSpecifiers);
94
+ const nextImportClause = importClause.name === undefined && nextNamedBindings === undefined
95
+ ? undefined
96
+ : updateImportClauseCompat(factory, importClause, importClause.name, nextNamedBindings);
97
+ if (nextImportClause === undefined) {
98
+ return undefined;
99
+ }
100
+ return factory.updateImportDeclaration(statement, statement.modifiers, nextImportClause, statement.moduleSpecifier, statement.attributes);
101
+ }
102
+ function eraseExportDeclaration(input) {
103
+ if (isNumtypesExportDeclaration(input.statement)) {
104
+ return eraseModuleExportDeclaration(input.factory, input.statement);
105
+ }
106
+ if (input.statement.moduleSpecifier !== undefined) {
107
+ return input.statement;
108
+ }
109
+ return eraseLocalExportDeclaration(input);
110
+ }
111
+ function eraseModuleExportDeclaration(factory, statement) {
112
+ const exportClause = statement.exportClause;
113
+ if (exportClause === undefined || ts.isNamespaceExport(exportClause)) {
114
+ return undefined;
115
+ }
116
+ const remainingSpecifiers = exportClause.elements.filter((specifier) => {
117
+ const importedName = getModuleExportNameText(specifier.propertyName ?? specifier.name);
118
+ return !isNumericDomain(importedName);
119
+ });
120
+ if (remainingSpecifiers.length === exportClause.elements.length) {
121
+ return statement;
122
+ }
123
+ if (remainingSpecifiers.length === 0) {
124
+ return undefined;
125
+ }
126
+ return factory.updateExportDeclaration(statement, statement.modifiers, statement.isTypeOnly, factory.updateNamedExports(exportClause, remainingSpecifiers), statement.moduleSpecifier, statement.attributes);
127
+ }
128
+ function eraseLocalExportDeclaration(input) {
129
+ if (input.numtypeLocalTypeNames.size === 0 &&
130
+ input.numtypeLocalValueNames.size === 0) {
131
+ return input.statement;
132
+ }
133
+ const exportClause = input.statement.exportClause;
134
+ if (exportClause === undefined || ts.isNamespaceExport(exportClause)) {
135
+ return input.statement;
136
+ }
137
+ const remainingSpecifiers = exportClause.elements.filter((specifier) => {
138
+ const localName = getModuleExportNameText(specifier.propertyName ?? specifier.name);
139
+ const exportNames = input.statement.isTypeOnly || specifier.isTypeOnly
140
+ ? input.numtypeLocalTypeNames
141
+ : input.numtypeLocalValueNames;
142
+ return !exportNames.has(localName);
143
+ });
144
+ if (remainingSpecifiers.length === exportClause.elements.length) {
145
+ return input.statement;
146
+ }
147
+ if (remainingSpecifiers.length === 0) {
148
+ return undefined;
149
+ }
150
+ return input.factory.updateExportDeclaration(input.statement, input.statement.modifiers, input.statement.isTypeOnly, input.factory.updateNamedExports(exportClause, remainingSpecifiers), input.statement.moduleSpecifier, input.statement.attributes);
151
+ }
152
+ function isNumtypesImportDeclaration(statement) {
153
+ return (ts.isStringLiteralLike(statement.moduleSpecifier) &&
154
+ statement.moduleSpecifier.text === numtypesModuleSpecifier);
155
+ }
156
+ function isNumtypesExportDeclaration(statement) {
157
+ return (statement.moduleSpecifier !== undefined &&
158
+ ts.isStringLiteralLike(statement.moduleSpecifier) &&
159
+ statement.moduleSpecifier.text === numtypesModuleSpecifier);
160
+ }
161
+ function hasValueExport(statement) {
162
+ if (statement.isTypeOnly) {
163
+ return false;
164
+ }
165
+ const exportClause = statement.exportClause;
166
+ if (exportClause === undefined || ts.isNamespaceExport(exportClause)) {
167
+ return true;
168
+ }
169
+ return exportClause.elements.some((specifier) => !specifier.isTypeOnly);
170
+ }
171
+ function getModuleExportNameText(name) {
172
+ return name.text;
173
+ }
174
+ //# sourceMappingURL=erase-imports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"erase-imports.js","sourceRoot":"","sources":["../../../src/transformer/transform/erase-imports.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type * as ts from "typescript";
2
+ import type { NumericDomain } from "../domains.js";
3
+ export interface GeneratedCoercionRegistry {
4
+ isGeneratedCoercion(expression: ts.Expression, domain?: NumericDomain): boolean;
5
+ markGeneratedCoercion<T extends ts.Expression>(expression: T, domain: NumericDomain): T;
6
+ preserveGeneratedCoercion<T extends ts.Expression>(source: ts.Expression, target: T): T;
7
+ }
8
+ export declare function createGeneratedCoercionRegistry(): GeneratedCoercionRegistry;
9
+ //# sourceMappingURL=generated-coercions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generated-coercions.d.ts","sourceRoot":"","sources":["../../../src/transformer/transform/generated-coercions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,WAAW,yBAAyB;IACxC,mBAAmB,CACjB,UAAU,EAAE,EAAE,CAAC,UAAU,EACzB,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC;IACX,qBAAqB,CAAC,CAAC,SAAS,EAAE,CAAC,UAAU,EAC3C,UAAU,EAAE,CAAC,EACb,MAAM,EAAE,aAAa,GACpB,CAAC,CAAC;IACL,yBAAyB,CAAC,CAAC,SAAS,EAAE,CAAC,UAAU,EAC/C,MAAM,EAAE,EAAE,CAAC,UAAU,EACrB,MAAM,EAAE,CAAC,GACR,CAAC,CAAC;CACN;AAED,wBAAgB,+BAA+B,IAAI,yBAAyB,CAoC3E"}
@@ -0,0 +1,22 @@
1
+ export function createGeneratedCoercionRegistry() {
2
+ const domains = new WeakMap();
3
+ return {
4
+ isGeneratedCoercion(expression, domain) {
5
+ const generatedDomain = domains.get(expression);
6
+ return (generatedDomain !== undefined &&
7
+ (domain === undefined || generatedDomain === domain));
8
+ },
9
+ markGeneratedCoercion(expression, domain) {
10
+ domains.set(expression, domain);
11
+ return expression;
12
+ },
13
+ preserveGeneratedCoercion(source, target) {
14
+ const domain = domains.get(source);
15
+ if (domain !== undefined) {
16
+ domains.set(target, domain);
17
+ }
18
+ return target;
19
+ }
20
+ };
21
+ }
22
+ //# sourceMappingURL=generated-coercions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generated-coercions.js","sourceRoot":"","sources":["../../../src/transformer/transform/generated-coercions.ts"],"names":[],"mappings":"AAkBA,MAAM,UAAU,+BAA+B;IAC7C,MAAM,OAAO,GAAG,IAAI,OAAO,EAAgC,CAAC;IAE5D,OAAO;QACL,mBAAmB,CACjB,UAAyB,EACzB,MAAsB;YAEtB,MAAM,eAAe,GAA8B,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAE3E,OAAO,CACL,eAAe,KAAK,SAAS;gBAC7B,CAAC,MAAM,KAAK,SAAS,IAAI,eAAe,KAAK,MAAM,CAAC,CACrD,CAAC;QACJ,CAAC;QACD,qBAAqB,CACnB,UAAa,EACb,MAAqB;YAErB,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAEhC,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,yBAAyB,CACvB,MAAqB,EACrB,MAAS;YAET,MAAM,MAAM,GAA8B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAE9D,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC9B,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ import * as ts from "typescript";
2
+ import type { GeneratedCoercionRegistry } from "./generated-coercions.js";
3
+ export interface OptimizeCoercionsInput {
4
+ readonly checker: ts.TypeChecker;
5
+ readonly context: ts.TransformationContext;
6
+ readonly generatedCoercions: GeneratedCoercionRegistry;
7
+ readonly optimizeTypedArrayElementAccess: boolean;
8
+ readonly sourceFile: ts.SourceFile;
9
+ }
10
+ export declare function optimizeCoercions(input: OptimizeCoercionsInput): ts.SourceFile;
11
+ //# sourceMappingURL=optimize-coercions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optimize-coercions.d.ts","sourceRoot":"","sources":["../../../src/transformer/transform/optimize-coercions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAE1E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,qBAAqB,CAAC;IAC3C,QAAQ,CAAC,kBAAkB,EAAE,yBAAyB,CAAC;IACvD,QAAQ,CAAC,+BAA+B,EAAE,OAAO,CAAC;IAClD,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC;CACpC;AA2DD,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,sBAAsB,GAC5B,EAAE,CAAC,UAAU,CASf"}