@nudojs/cli 0.2.1 → 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.
- package/dist/{chunk-3HCPXPEW.js → chunk-YDM4HHQ4.js} +1783 -1421
- package/dist/evaluator-api.d.ts +12 -1
- package/dist/evaluator-api.js +52 -2
- package/dist/index.d.ts +1 -2
- package/dist/index.js +366 -3572
- package/package.json +23 -11
- package/CHANGELOG.md +0 -41
- package/examples/real-world.js +0 -66
- package/examples/validate-real-world.ts +0 -160
- package/src/__tests__/builtin-advanced.test.ts +0 -292
- package/src/__tests__/builtin-api.test.ts +0 -308
- package/src/__tests__/builtin-functions.test.ts +0 -313
- package/src/__tests__/builtin-map.test.ts +0 -129
- package/src/__tests__/builtin-promise.test.ts +0 -150
- package/src/__tests__/builtin-regexp.test.ts +0 -133
- package/src/__tests__/builtin-set.test.ts +0 -163
- package/src/__tests__/builtin-url.test.ts +0 -256
- package/src/__tests__/builtin-web.test.ts +0 -340
- package/src/__tests__/combination-scenarios.test.ts +0 -384
- package/src/__tests__/edge-cases.test.ts +0 -749
- package/src/__tests__/evaluator-loops.test.ts +0 -283
- package/src/__tests__/evaluator-nullish-coalescing.test.ts +0 -86
- package/src/__tests__/evaluator-optional-chaining.test.ts +0 -37
- package/src/__tests__/evaluator-phase2.test.ts +0 -564
- package/src/__tests__/evaluator-phase3.test.ts +0 -864
- package/src/__tests__/evaluator-refined.test.ts +0 -121
- package/src/__tests__/evaluator-string-methods.test.ts +0 -151
- package/src/__tests__/evaluator.test.ts +0 -943
- package/src/__tests__/mock-arrow-function.test.ts +0 -169
- package/src/__tests__/mock-comparison.test.ts +0 -221
- package/src/__tests__/mock-comprehensive.test.ts +0 -250
- package/src/__tests__/mock-final-integration.test.ts +0 -263
- package/src/__tests__/mock-helpers.test.ts +0 -174
- package/src/__tests__/mock-realworld.test.ts +0 -191
- package/src/__tests__/mock-rest-debug.test.ts +0 -110
- package/src/__tests__/mock-rest-edge.test.ts +0 -176
- package/src/__tests__/mock-sinon-runtime.test.ts +0 -168
- package/src/__tests__/narrowing-discriminated.test.ts +0 -35
- package/src/__tests__/narrowing-in-operator.test.ts +0 -56
- package/src/__tests__/narrowing-switch.test.ts +0 -56
- package/src/__tests__/narrowing-truthiness.test.ts +0 -52
- package/src/__tests__/narrowing.test.ts +0 -82
- package/src/__tests__/nudo-mock-syntax.test.ts +0 -245
- package/src/__tests__/realworld-patterns.test.ts +0 -430
- package/src/__tests__/syntax-sugar.test.ts +0 -345
- package/src/builtins/builtin-intl.ts +0 -17
- package/src/builtins/builtin-map.ts +0 -174
- package/src/builtins/builtin-promise.ts +0 -116
- package/src/builtins/builtin-reflect.ts +0 -30
- package/src/builtins/builtin-regexp.ts +0 -34
- package/src/builtins/builtin-set.ts +0 -131
- package/src/builtins/builtin-symbol.ts +0 -16
- package/src/builtins/builtin-url.ts +0 -58
- package/src/builtins/builtin-weak.ts +0 -22
- package/src/builtins/builtin-web.ts +0 -111
- package/src/builtins/index.ts +0 -61
- package/src/config.ts +0 -32
- package/src/env-loader.ts +0 -174
- package/src/evaluator-api.ts +0 -36
- package/src/evaluator.ts +0 -5623
- package/src/index.ts +0 -931
- package/src/narrowing.ts +0 -537
- package/src/resolve-npm.ts +0 -63
- package/tsconfig.json +0 -9
package/dist/evaluator-api.d.ts
CHANGED
|
@@ -65,6 +65,9 @@ type CallRecord = {
|
|
|
65
65
|
argTypes: TypeValue[];
|
|
66
66
|
resultType: TypeValue;
|
|
67
67
|
throws: TypeValue;
|
|
68
|
+
/** Line-relative. Per-fn cache replay shifts this by lineDelta — if you
|
|
69
|
+
* add another position field (callee loc, arg loc), extend
|
|
70
|
+
* shiftCallRecordLines in analyzer.ts in the same change. */
|
|
68
71
|
callLoc?: {
|
|
69
72
|
line: number;
|
|
70
73
|
column: number;
|
|
@@ -130,6 +133,14 @@ declare function setCurrentFileDir(dir: string): void;
|
|
|
130
133
|
*/
|
|
131
134
|
declare function narrow(test: Node, env: Environment): [trueEnv: Environment, falseEnv: Environment];
|
|
132
135
|
|
|
136
|
+
/**
|
|
137
|
+
* 内置类原型机制:错误类集合、可构造内置类、Object/Array/Map/Set/…/Buffer
|
|
138
|
+
* 的原型成员近似表,以及 `X.prototype` 单例与类命名空间记忆化。
|
|
139
|
+
* 求值器成员分派与补全侧成员派生共用本表的唯一真值。
|
|
140
|
+
*/
|
|
141
|
+
|
|
142
|
+
declare const BUILTIN_PROTOTYPE_METHOD_APPROXIMATIONS: Record<string, Record<string, TypeValue>>;
|
|
143
|
+
|
|
133
144
|
type LoadedEnv = {
|
|
134
145
|
modules: Record<string, Record<string, TypeValue>>;
|
|
135
146
|
};
|
|
@@ -148,4 +159,4 @@ declare function findProjectConfig(startDir: string): {
|
|
|
148
159
|
|
|
149
160
|
declare function resolveNpmNudo(source: string, fromDir: string): string | null;
|
|
150
161
|
|
|
151
|
-
export { type CallRecord, type LoadedEnv, type NudoConfig, USAGE_SITE_MODULE, type UnknownRecord, evaluate, evaluateFunction, evaluateFunctionFull, evaluateProgram, findProjectConfig, getUnreachableRanges, loadEnvs, loadEnvsAsync, memberMayExistOn, narrow, preloadPathEnvs, resetEnvModules, resetMemo, resetMockModules, resetUnreachableRanges, resolveNpmNudo, setCallCollector, setCurrentFileDir, setCurrentSource, setEnvModules, setMaxConcreteIter, setMockModules, setModuleResolver, setNodeTypeCollector, setProvenanceTracking, setSampleCount, setUnknownBuiltinHandler, setUnknownCollector, setUsageSiteTag };
|
|
162
|
+
export { BUILTIN_PROTOTYPE_METHOD_APPROXIMATIONS, type CallRecord, type LoadedEnv, type NudoConfig, USAGE_SITE_MODULE, type UnknownRecord, evaluate, evaluateFunction, evaluateFunctionFull, evaluateProgram, findProjectConfig, getUnreachableRanges, loadEnvs, loadEnvsAsync, memberMayExistOn, narrow, preloadPathEnvs, resetEnvModules, resetMemo, resetMockModules, resetUnreachableRanges, resolveNpmNudo, setCallCollector, setCurrentFileDir, setCurrentSource, setEnvModules, setMaxConcreteIter, setMockModules, setModuleResolver, setNodeTypeCollector, setProvenanceTracking, setSampleCount, setUnknownBuiltinHandler, setUnknownCollector, setUsageSiteTag };
|
package/dist/evaluator-api.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
+
import { createRequire as __nudoCreateRequire } from "module";
|
|
2
|
+
const require = __nudoCreateRequire(import.meta.url);
|
|
1
3
|
import {
|
|
4
|
+
BUILTIN_PROTOTYPE_METHOD_APPROXIMATIONS,
|
|
2
5
|
USAGE_SITE_MODULE,
|
|
3
6
|
evaluate,
|
|
4
7
|
evaluateFunction,
|
|
@@ -11,7 +14,6 @@ import {
|
|
|
11
14
|
resetMemo,
|
|
12
15
|
resetMockModules,
|
|
13
16
|
resetUnreachableRanges,
|
|
14
|
-
resolveNpmNudo,
|
|
15
17
|
setCallCollector,
|
|
16
18
|
setCurrentFileDir,
|
|
17
19
|
setCurrentSource,
|
|
@@ -25,7 +27,7 @@ import {
|
|
|
25
27
|
setUnknownBuiltinHandler,
|
|
26
28
|
setUnknownCollector,
|
|
27
29
|
setUsageSiteTag
|
|
28
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-YDM4HHQ4.js";
|
|
29
31
|
|
|
30
32
|
// src/env-loader.ts
|
|
31
33
|
import { readFileSync, existsSync, statSync, mkdirSync, writeFileSync } from "fs";
|
|
@@ -180,7 +182,55 @@ function findProjectConfig(startDir) {
|
|
|
180
182
|
}
|
|
181
183
|
return null;
|
|
182
184
|
}
|
|
185
|
+
|
|
186
|
+
// src/resolve-npm.ts
|
|
187
|
+
import { readFileSync as readFileSync3, existsSync as existsSync3 } from "fs";
|
|
188
|
+
import { resolve as resolve2, join, dirname as dirname2 } from "path";
|
|
189
|
+
function findNodeModules(startDir) {
|
|
190
|
+
let dir = resolve2(startDir);
|
|
191
|
+
const root = resolve2("/");
|
|
192
|
+
while (dir !== root) {
|
|
193
|
+
const nmPath = join(dir, "node_modules");
|
|
194
|
+
if (existsSync3(nmPath)) return nmPath;
|
|
195
|
+
const parent = dirname2(dir);
|
|
196
|
+
if (parent === dir) break;
|
|
197
|
+
dir = parent;
|
|
198
|
+
}
|
|
199
|
+
return null;
|
|
200
|
+
}
|
|
201
|
+
function resolveExportsNudo(exports, subpath) {
|
|
202
|
+
if (!exports || typeof exports !== "object") return null;
|
|
203
|
+
const entry = exports[subpath];
|
|
204
|
+
if (!entry) return null;
|
|
205
|
+
if (typeof entry === "object" && entry !== null && "nudo" in entry) {
|
|
206
|
+
const nudoEntry = entry["nudo"];
|
|
207
|
+
if (typeof nudoEntry === "string") return nudoEntry;
|
|
208
|
+
}
|
|
209
|
+
return null;
|
|
210
|
+
}
|
|
211
|
+
function resolveNpmNudo(source, fromDir) {
|
|
212
|
+
const isRelative = source.startsWith(".") || source.startsWith("/");
|
|
213
|
+
if (isRelative) return null;
|
|
214
|
+
const parts = source.startsWith("@") ? source.split("/").slice(0, 2) : source.split("/").slice(0, 1);
|
|
215
|
+
const pkgName = parts.join("/");
|
|
216
|
+
const subpath = source.slice(pkgName.length) || ".";
|
|
217
|
+
const nodeModules = findNodeModules(fromDir);
|
|
218
|
+
if (!nodeModules) return null;
|
|
219
|
+
const pkgJsonPath = join(nodeModules, pkgName, "package.json");
|
|
220
|
+
if (!existsSync3(pkgJsonPath)) return null;
|
|
221
|
+
try {
|
|
222
|
+
const pkg = JSON.parse(readFileSync3(pkgJsonPath, "utf-8"));
|
|
223
|
+
const nudoEntry = resolveExportsNudo(pkg.exports, subpath);
|
|
224
|
+
if (nudoEntry) {
|
|
225
|
+
const resolved = resolve2(dirname2(pkgJsonPath), nudoEntry);
|
|
226
|
+
if (existsSync3(resolved)) return resolved;
|
|
227
|
+
}
|
|
228
|
+
} catch {
|
|
229
|
+
}
|
|
230
|
+
return null;
|
|
231
|
+
}
|
|
183
232
|
export {
|
|
233
|
+
BUILTIN_PROTOTYPE_METHOD_APPROXIMATIONS,
|
|
184
234
|
USAGE_SITE_MODULE,
|
|
185
235
|
evaluate,
|
|
186
236
|
evaluateFunction,
|
package/dist/index.d.ts
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { }
|
|
1
|
+
#!/usr/bin/env node
|