@nudojs/core 0.3.0 → 0.3.1

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 (123) hide show
  1. package/dist/chunk-BU4A6XJ3.js +6856 -0
  2. package/dist/exec.d.ts +2 -0
  3. package/dist/exec.js +168 -0
  4. package/dist/index-CVYjXnwU.d.ts +902 -0
  5. package/dist/index.d.ts +64 -710
  6. package/dist/index.js +3258 -8426
  7. package/package.json +18 -5
  8. package/CHANGELOG.md +0 -34
  9. package/src/__tests__/environment.test.ts +0 -48
  10. package/src/__tests__/fn-sig-impl.test.ts +0 -57
  11. package/src/__tests__/ops-refined.test.ts +0 -196
  12. package/src/__tests__/ops.test.ts +0 -84
  13. package/src/__tests__/type-value-phase2.test.ts +0 -117
  14. package/src/__tests__/type-value-phase3.test.ts +0 -94
  15. package/src/__tests__/type-value-refined.test.ts +0 -210
  16. package/src/__tests__/type-value.test.ts +0 -319
  17. package/src/algebra/__tests__/abs-native.test.ts +0 -176
  18. package/src/algebra/__tests__/arithmetic.test.ts +0 -170
  19. package/src/algebra/__tests__/ast-eval.test.ts +0 -154
  20. package/src/algebra/__tests__/bridge.test.ts +0 -160
  21. package/src/algebra/__tests__/call-budget.test.ts +0 -117
  22. package/src/algebra/__tests__/check-case-consistency.test.ts +0 -69
  23. package/src/algebra/__tests__/check-gold.test.ts +0 -290
  24. package/src/algebra/__tests__/check-json.test.ts +0 -57
  25. package/src/algebra/__tests__/check-mini-repo.test.ts +0 -49
  26. package/src/algebra/__tests__/check-real-commander.test.ts +0 -43
  27. package/src/algebra/__tests__/check-real-packages.test.ts +0 -165
  28. package/src/algebra/__tests__/check-recall-gold.test.ts +0 -1024
  29. package/src/algebra/__tests__/check-require-dep-memo.test.ts +0 -45
  30. package/src/algebra/__tests__/check-return-contract.test.ts +0 -90
  31. package/src/algebra/__tests__/check-shape-gold.test.ts +0 -303
  32. package/src/algebra/__tests__/check-source-memo.test.ts +0 -204
  33. package/src/algebra/__tests__/check.test.ts +0 -69
  34. package/src/algebra/__tests__/denote.test.ts +0 -77
  35. package/src/algebra/__tests__/diagnostics.test.ts +0 -64
  36. package/src/algebra/__tests__/differential.test.ts +0 -124
  37. package/src/algebra/__tests__/div-mod.test.ts +0 -38
  38. package/src/algebra/__tests__/example0.test.ts +0 -103
  39. package/src/algebra/__tests__/exec-analyze-throws.test.ts +0 -60
  40. package/src/algebra/__tests__/exec-async.test.ts +0 -46
  41. package/src/algebra/__tests__/exec-bpath.test.ts +0 -193
  42. package/src/algebra/__tests__/exec-class.test.ts +0 -56
  43. package/src/algebra/__tests__/exec-e2e.test.ts +0 -97
  44. package/src/algebra/__tests__/exec-generator.test.ts +0 -53
  45. package/src/algebra/__tests__/exec-inherit-default.test.ts +0 -111
  46. package/src/algebra/__tests__/exec-optional-nested.test.ts +0 -87
  47. package/src/algebra/__tests__/exec-rest.test.ts +0 -55
  48. package/src/algebra/__tests__/exec-spread-forof.test.ts +0 -85
  49. package/src/algebra/__tests__/exec-static-computed.test.ts +0 -61
  50. package/src/algebra/__tests__/exec-switch.test.ts +0 -74
  51. package/src/algebra/__tests__/exec-trycatch.test.ts +0 -71
  52. package/src/algebra/__tests__/fn-fp-memo.test.ts +0 -166
  53. package/src/algebra/__tests__/fn-fp-multidecl.test.ts +0 -49
  54. package/src/algebra/__tests__/format.test.ts +0 -34
  55. package/src/algebra/__tests__/generalize-memo.test.ts +0 -285
  56. package/src/algebra/__tests__/generalize.test.ts +0 -113
  57. package/src/algebra/__tests__/hash-source.test.ts +0 -19
  58. package/src/algebra/__tests__/hof.test.ts +0 -80
  59. package/src/algebra/__tests__/inlay.test.ts +0 -30
  60. package/src/algebra/__tests__/language.test.ts +0 -77
  61. package/src/algebra/__tests__/leq.test.ts +0 -109
  62. package/src/algebra/__tests__/load-deps-fp-memo.test.ts +0 -132
  63. package/src/algebra/__tests__/methods.test.ts +0 -37
  64. package/src/algebra/__tests__/node-types.test.ts +0 -26
  65. package/src/algebra/__tests__/nudo-constraints.ts +0 -46
  66. package/src/algebra/__tests__/objects.test.ts +0 -117
  67. package/src/algebra/__tests__/parse-source-cache.test.ts +0 -42
  68. package/src/algebra/__tests__/refine-import.test.ts +0 -109
  69. package/src/algebra/__tests__/stable-source-key-block.test.ts +0 -23
  70. package/src/algebra/__tests__/stable-source-key.test.ts +0 -31
  71. package/src/algebra/__tests__/surface.test.ts +0 -41
  72. package/src/algebra/__tests__/this-inherit.test.ts +0 -130
  73. package/src/algebra/abs-fn.ts +0 -49
  74. package/src/algebra/abs-modules.ts +0 -139
  75. package/src/algebra/abs.ts +0 -206
  76. package/src/algebra/arithmetic.ts +0 -691
  77. package/src/algebra/ast-eval.ts +0 -1763
  78. package/src/algebra/bridge.ts +0 -350
  79. package/src/algebra/builtins.ts +0 -373
  80. package/src/algebra/check-report.ts +0 -150
  81. package/src/algebra/check.ts +0 -1867
  82. package/src/algebra/constraint.ts +0 -304
  83. package/src/algebra/denote.ts +0 -166
  84. package/src/algebra/diagnostics.ts +0 -210
  85. package/src/algebra/exec/call.ts +0 -29
  86. package/src/algebra/exec/calls.ts +0 -96
  87. package/src/algebra/exec/class-registry.ts +0 -29
  88. package/src/algebra/exec/class.ts +0 -329
  89. package/src/algebra/exec/index.ts +0 -6
  90. package/src/algebra/exec/member-diag.ts +0 -141
  91. package/src/algebra/exec/run.ts +0 -341
  92. package/src/algebra/exec/runtime.ts +0 -583
  93. package/src/algebra/exec/transpile.ts +0 -993
  94. package/src/algebra/fn-fp.ts +0 -294
  95. package/src/algebra/format.ts +0 -91
  96. package/src/algebra/generalize.ts +0 -776
  97. package/src/algebra/hash-source.ts +0 -27
  98. package/src/algebra/index.ts +0 -34
  99. package/src/algebra/inlay.ts +0 -198
  100. package/src/algebra/language.ts +0 -289
  101. package/src/algebra/leak.ts +0 -68
  102. package/src/algebra/leq.ts +0 -301
  103. package/src/algebra/load-deps-fp.ts +0 -97
  104. package/src/algebra/methods.ts +0 -128
  105. package/src/algebra/objects.ts +0 -251
  106. package/src/algebra/parse-source.ts +0 -64
  107. package/src/algebra/phi.ts +0 -42
  108. package/src/algebra/pred.ts +0 -395
  109. package/src/algebra/refine.ts +0 -227
  110. package/src/algebra/stable-source-key.ts +0 -81
  111. package/src/algebra/surface.ts +0 -206
  112. package/src/algebra/template.ts +0 -143
  113. package/src/algebra/term.ts +0 -119
  114. package/src/environment.ts +0 -74
  115. package/src/index.ts +0 -73
  116. package/src/mock-helpers.ts +0 -166
  117. package/src/ops.ts +0 -191
  118. package/src/refinements/range.ts +0 -86
  119. package/src/refinements/template-predicates.ts +0 -11
  120. package/src/refinements/template.ts +0 -176
  121. package/src/strip-types.ts +0 -236
  122. package/src/type-value.ts +0 -513
  123. package/tsconfig.json +0 -8
@@ -1,236 +0,0 @@
1
- import type { Node } from "@babel/types";
2
-
3
- /**
4
- * TS 剥除 pass(Babel typescript 插件 AST → 纯 JS AST)。
5
- *
6
- * 为什么放在 parser 层而不是 evaluator 里逐节点 unwrap:
7
- * parse() 的产物被所有下游消费——CLI resolveModule/generate、service
8
- * analyzer/case-emitter、LSP server/agent-tools、evaluator 的整条求值链。
9
- * 在 evaluator 层做 unwrap 只能修一条链,其余消费方(buildModuleGraph 的
10
- * import 提取、directive 提取、semanticTokens 等)仍会撞上 TS-only 节点。
11
- * parse() 统一剥除后所有消费方零改动即可分析 .ts 文件。
12
- *
13
- * 对纯 JS 源码本 pass 是结构性 no-op(TS-only 节点/字段根本不会出现),
14
- * 向后兼容;节点均原地改写,loc/start/end 与兄弟节点顺序保持不变
15
- * (@nudo:case 注释按 comment loc 对齐,删语句只从语句数组中剔除)。
16
- *
17
- * 剥除规则:
18
- * - 表达式解包:TSAsExpression(含 as const)/ TSSatisfiesExpression /
19
- * TSTypeAssertion(<T>x)/ TSNonNullExpression(x!)/ TSInstantiationExpression
20
- * (裸泛型引用 const f = foo<number>)→ 直接取 .expression
21
- * - 类型声明删除:TSInterfaceDeclaration / TSTypeAliasDeclaration /
22
- * TSDeclareFunction / declare 修饰的 TSModuleDeclaration、VariableDeclaration、
23
- * ClassDeclaration,以及包装它们的 ExportNamedDeclaration / ExportDefaultDeclaration
24
- * - TSEnumDeclaration 直接删除。风险:TS enum 有运行时语义(编译为带反向映射的
25
- * 对象),删除后源码中 enum 成员引用会退化为 unknown-global 诊断;nudo 的
26
- * 求值器没有 enum 求值语义,保真合成对象超出本次范围
27
- * - type-only import/export:importKind/exportKind === "type" 的声明删除;
28
- * 值 import 里混入的 type specifier(import { type A, b })按 specifier 剔除,
29
- * 全部为 type 时整个声明删除
30
- * - 类成员:TSIndexSignature / TSDeclareMethod(含 abstract 方法)/ declare·abstract
31
- * 的 ClassProperty 删除;implements / superTypeParameters 字段删除
32
- * - 求值器不读的类型字段:typeParameters(声明与调用点 TSTypeParameterInstantiation,
33
- * 即 foo<string>(1))、typeAnnotation、returnType(含 TSTypePredicate)、
34
- * 参数 Identifier/ObjectPattern/ArrayPattern/RestElement 上的 optional 一律 delete
35
- *
36
- * 已知不处理(会以 unknown 求值,不崩溃):非 declare 的 namespace(运行时语义)、
37
- * TSImportEqualsDeclaration(import x = require(...))、构造器参数属性
38
- * (constructor(private x))——均在 .ts 推断目标场景之外。
39
- */
40
-
41
- /** 数组槽位删除哨兵:语句/成员/specifier 只出现在数组上下文中 */
42
- const REMOVE: unique symbol = Symbol("nudo.strip.remove");
43
-
44
- /** 不含 AST 子节点的键:位置/注释/打印器元数据 */
45
- const SKIP_KEYS = new Set([
46
- "loc",
47
- "start",
48
- "end",
49
- "range",
50
- "leadingComments",
51
- "trailingComments",
52
- "innerComments",
53
- "comments",
54
- "tokens",
55
- "extra",
56
- ]);
57
-
58
- /** 实参/形参模式等数组中的空洞(ArrayPattern 的 elision)保持原样 */
59
- function transformValue(value: unknown): unknown {
60
- if (Array.isArray(value)) {
61
- let changed = false;
62
- const out: unknown[] = [];
63
- for (const el of value) {
64
- if (el === null || el === undefined) {
65
- out.push(el);
66
- continue;
67
- }
68
- const r = transformValue(el);
69
- if (r === REMOVE) {
70
- changed = true;
71
- } else {
72
- if (r !== el) changed = true;
73
- out.push(r);
74
- }
75
- }
76
- return changed ? out : value;
77
- }
78
- if (typeof value !== "object" || value === null) return value;
79
- if (typeof (value as { type?: unknown }).type !== "string") return value;
80
- return transformNode(value as Node & Record<string, unknown>);
81
- }
82
-
83
- function isTsDeclareLike(node: Node): boolean {
84
- return (node as { declare?: unknown }).declare === true;
85
- }
86
-
87
- /** 类型声明本身是否 TS-only(供 export 包装语句判断整体删除) */
88
- function isTypeOnlyDeclaration(decl: Node): boolean {
89
- switch (decl.type) {
90
- case "TSInterfaceDeclaration":
91
- case "TSTypeAliasDeclaration":
92
- case "TSEnumDeclaration":
93
- case "TSDeclareFunction":
94
- return true;
95
- case "VariableDeclaration":
96
- case "ClassDeclaration":
97
- return isTsDeclareLike(decl);
98
- default:
99
- return false;
100
- }
101
- }
102
-
103
- /**
104
- * 语句/类成员/specifier 级删除判定(只会在数组上下文中出现,
105
- * 返回 REMOVE 时父数组剔除该元素)。
106
- */
107
- function isTypeOnlyStatement(node: Node): boolean {
108
- const anyNode = node as Node & { importKind?: string; exportKind?: string; specifiers?: unknown[] };
109
- switch (node.type) {
110
- case "TSInterfaceDeclaration":
111
- case "TSTypeAliasDeclaration":
112
- case "TSEnumDeclaration":
113
- case "TSDeclareFunction":
114
- return true;
115
- case "TSModuleDeclaration":
116
- // declare module / declare namespace 纯类型;非 declare 的 namespace 有运行时语义,保留
117
- return isTsDeclareLike(node);
118
- case "VariableDeclaration":
119
- case "ClassDeclaration":
120
- return isTsDeclareLike(node);
121
- case "ImportDeclaration":
122
- if (anyNode.importKind === "type") return true;
123
- // import { type A, type B } from "m" —— 全 type specifier 则整个 import 无值语义
124
- {
125
- const specs = anyNode.specifiers as { importKind?: string }[] | undefined;
126
- if (specs && specs.length > 0 && specs.every((s) => s.importKind === "type" || s.importKind === "typeof")) {
127
- return true;
128
- }
129
- }
130
- return false;
131
- case "ExportNamedDeclaration": {
132
- if (anyNode.exportKind === "type") return true;
133
- const decl = (node as { declaration: Node | null }).declaration;
134
- if (decl && isTypeOnlyDeclaration(decl)) return true;
135
- // export { type A } / export { type A } from "m"
136
- {
137
- const specs = anyNode.specifiers as { exportKind?: string }[] | null;
138
- if (!decl && specs && specs.length > 0 && specs.every((s) => s.exportKind === "type")) return true;
139
- }
140
- return false;
141
- }
142
- case "ExportAllDeclaration":
143
- return anyNode.exportKind === "type";
144
- case "ExportDefaultDeclaration":
145
- return isTypeOnlyDeclaration((node as { declaration: Node }).declaration);
146
- // ---- 类成员 ----
147
- case "TSIndexSignature":
148
- case "TSDeclareMethod": // declare / abstract 方法,无运行时实现
149
- return true;
150
- case "ClassProperty":
151
- case "ClassPrivateProperty":
152
- return isTsDeclareLike(node) || (node as { abstract?: unknown }).abstract === true;
153
- default:
154
- return false;
155
- }
156
- }
157
-
158
- /** 求值器不读的类型字段:原地 delete */
159
- function deleteTypeSyntaxFields(node: Node & Record<string, unknown>): void {
160
- const tp = node.typeParameters as { type?: string } | undefined;
161
- if (tp && typeof tp.type === "string" && tp.type.startsWith("TSTypeParameter")) {
162
- // 声明处(TSTypeParameterDeclaration)与调用处(TSTypeParameterInstantiation,
163
- // 即 foo<string>(1) / new Foo<string>())一并删除
164
- delete node.typeParameters;
165
- }
166
- const ta = node.typeAnnotation as { type?: string } | undefined;
167
- if (ta && ta.type === "TSTypeAnnotation") delete node.typeAnnotation;
168
- const rt = node.returnType as { type?: string } | undefined;
169
- if (rt && (rt.type === "TSTypeAnnotation" || rt.type === "TSTypePredicate")) delete node.returnType;
170
- // `a?: T` 的可选标记。只在这些模式节点上删:OptionalMemberExpression 等
171
- // 表达式节点自己的 optional 语义(a?.b)不属于 TS 语法,不能动
172
- if (
173
- node.optional === true &&
174
- (node.type === "Identifier" || node.type === "ObjectPattern" || node.type === "ArrayPattern" || node.type === "RestElement")
175
- ) {
176
- delete node.optional;
177
- }
178
- // 类的 implements 子句与继承泛型实参
179
- if ("implements" in node) delete node.implements;
180
- if ("superTypeParameters" in node) delete node.superTypeParameters;
181
- }
182
-
183
- /** 表达式级解包:类型断言/满足断言/非空断言/裸泛型引用 → 内层表达式 */
184
- function unwrapExpression(node: Node & Record<string, unknown>): Node | null {
185
- switch (node.type) {
186
- case "TSAsExpression": // 含 as const
187
- case "TSSatisfiesExpression":
188
- case "TSTypeAssertion":
189
- case "TSNonNullExpression":
190
- case "TSInstantiationExpression":
191
- return node.expression as Node;
192
- default:
193
- return null;
194
- }
195
- }
196
-
197
- function transformNode(node: Node & Record<string, unknown>): Node | typeof REMOVE {
198
- if (isTypeOnlyStatement(node)) return REMOVE;
199
-
200
- deleteTypeSyntaxFields(node);
201
-
202
- // 值 import/export 里混入的 type-only specifier 逐个剔除
203
- if (node.type === "ImportDeclaration") {
204
- node.specifiers = node.specifiers.filter(
205
- (s) => !((s as { importKind?: string }).importKind === "type" || (s as { importKind?: string }).importKind === "typeof"),
206
- );
207
- } else if (node.type === "ExportNamedDeclaration") {
208
- if (node.specifiers) {
209
- node.specifiers = node.specifiers.filter((s) => (s as { exportKind?: string }).exportKind !== "type");
210
- }
211
- }
212
-
213
- for (const key of Object.keys(node)) {
214
- if (SKIP_KEYS.has(key)) continue;
215
- const child = node[key];
216
- if (child === null || typeof child !== "object") continue;
217
- const r = transformValue(child);
218
- if (r === REMOVE) {
219
- // 单槽位理论上不会收到 REMOVE(删除项均为数组上下文),防御性清槽
220
- delete node[key];
221
- } else {
222
- node[key] = r;
223
- }
224
- }
225
-
226
- return unwrapExpression(node) ?? node;
227
- }
228
-
229
- /**
230
- * 原地剥除 AST 中的 TS-only 语法节点/字段,返回同一棵 AST(便于链式使用)。
231
- * 不改写任何 loc/start/end;语句删除只影响所在数组,不重排兄弟节点。
232
- */
233
- export function stripTypes<T extends Node>(ast: T): T {
234
- transformValue(ast);
235
- return ast;
236
- }