@nudojs/env 0.4.7 → 0.4.10
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-KRMQSDG3.js → chunk-KQ7PVOVE.js} +112 -41
- package/dist/es.js +1 -1
- package/dist/node.js +1 -1
- package/dist/web.js +1 -1
- package/package.json +2 -2
|
@@ -3,7 +3,11 @@ import {
|
|
|
3
3
|
litValue,
|
|
4
4
|
numLit,
|
|
5
5
|
strLit as strLit2,
|
|
6
|
-
boolLit
|
|
6
|
+
boolLit,
|
|
7
|
+
evalGlobalFn,
|
|
8
|
+
makeArrayCtorAbs,
|
|
9
|
+
evalPromiseCtor,
|
|
10
|
+
evalDateCtor
|
|
7
11
|
} from "@nudojs/core";
|
|
8
12
|
|
|
9
13
|
// src/abs-helpers.ts
|
|
@@ -91,12 +95,17 @@ function errorBrandOf(name) {
|
|
|
91
95
|
}
|
|
92
96
|
function envFn(paramTypes, returnType, apply, opts) {
|
|
93
97
|
const params = opts?.params ?? paramTypes.map((_, i) => paramTypes.length === 1 && i === 0 ? "x" : `x${i}`);
|
|
98
|
+
const staticSlots = opts?.slots ? slotsOf(opts.slots) : void 0;
|
|
94
99
|
if (!apply) {
|
|
95
|
-
|
|
100
|
+
const a2 = relationFn(paramTypes, returnType, {
|
|
96
101
|
params,
|
|
97
102
|
conf: opts?.conf ?? "exact",
|
|
98
103
|
fingerprint: opts?.name ? `${opts.name}|${relationFingerprint(paramTypes, returnType)}` : void 0
|
|
99
104
|
});
|
|
105
|
+
if (staticSlots) {
|
|
106
|
+
a2.shape = { ...a2.shape, slots: staticSlots };
|
|
107
|
+
}
|
|
108
|
+
return a2;
|
|
100
109
|
}
|
|
101
110
|
const implApply = apply;
|
|
102
111
|
const a = absFunction(params, {
|
|
@@ -115,7 +124,8 @@ function envFn(paramTypes, returnType, apply, opts) {
|
|
|
115
124
|
params,
|
|
116
125
|
paramTypes,
|
|
117
126
|
returnType,
|
|
118
|
-
...opts?.name ? { name: opts.name } : {}
|
|
127
|
+
...opts?.name ? { name: opts.name } : {},
|
|
128
|
+
...staticSlots ? { slots: staticSlots } : {}
|
|
119
129
|
};
|
|
120
130
|
if (opts?.conf && opts.conf !== "exact") a.conf = opts.conf;
|
|
121
131
|
return a;
|
|
@@ -178,6 +188,17 @@ function numImpl2Abs(fn) {
|
|
|
178
188
|
return a !== void 0 && b !== void 0 ? numLit(fn(a, b)) : void 0;
|
|
179
189
|
};
|
|
180
190
|
}
|
|
191
|
+
function numImplVAbs(fn) {
|
|
192
|
+
return (args) => {
|
|
193
|
+
const nums = [];
|
|
194
|
+
for (const a of args) {
|
|
195
|
+
const n = absNumLit(a);
|
|
196
|
+
if (n === void 0) return void 0;
|
|
197
|
+
nums.push(n);
|
|
198
|
+
}
|
|
199
|
+
return numLit(fn(...nums));
|
|
200
|
+
};
|
|
201
|
+
}
|
|
181
202
|
function strToStrImplAbs(fn) {
|
|
182
203
|
return (args) => {
|
|
183
204
|
const s = absStrLit(args[0]);
|
|
@@ -275,6 +296,18 @@ function defineEnv() {
|
|
|
275
296
|
if (a.term?.op === "lit") return boolLit(false);
|
|
276
297
|
return void 0;
|
|
277
298
|
};
|
|
299
|
+
const numberImplAbs = (args) => {
|
|
300
|
+
return evalGlobalFn("Number", args);
|
|
301
|
+
};
|
|
302
|
+
const arrayImplAbs = (args) => {
|
|
303
|
+
return makeArrayCtorAbs(args);
|
|
304
|
+
};
|
|
305
|
+
const promiseCtorImplAbs = (args) => {
|
|
306
|
+
return evalPromiseCtor(args);
|
|
307
|
+
};
|
|
308
|
+
const dateCtorImplAbs = (args) => {
|
|
309
|
+
return evalDateCtor(args);
|
|
310
|
+
};
|
|
278
311
|
const promiseResolveImplAbs = (args) => {
|
|
279
312
|
if (!args[0]) return void 0;
|
|
280
313
|
return promiseOf(args[0]);
|
|
@@ -296,8 +329,18 @@ function defineEnv() {
|
|
|
296
329
|
round: envFn([prim.num()], prim.num(), numImpl1Abs(Math.round)),
|
|
297
330
|
trunc: envFn([prim.num()], prim.num(), numImpl1Abs(Math.trunc)),
|
|
298
331
|
sign: envFn([prim.num()], prim.num(), numImpl1Abs(Math.sign)),
|
|
299
|
-
max
|
|
300
|
-
|
|
332
|
+
// min/max/hypot 在 JS 里是变参(`Math.min(a, b, c)`)——二元声明会让
|
|
333
|
+
// 多实参调用落进 arity 不匹配 → unknown
|
|
334
|
+
max: envFnVariadic(prim.num(), prim.num(), {
|
|
335
|
+
apply: numImplVAbs(Math.max),
|
|
336
|
+
restName: "...values",
|
|
337
|
+
name: "Math.max"
|
|
338
|
+
}),
|
|
339
|
+
min: envFnVariadic(prim.num(), prim.num(), {
|
|
340
|
+
apply: numImplVAbs(Math.min),
|
|
341
|
+
restName: "...values",
|
|
342
|
+
name: "Math.min"
|
|
343
|
+
}),
|
|
301
344
|
pow: envFn([prim.num(), prim.num()], prim.num(), numImpl2Abs(Math.pow)),
|
|
302
345
|
sqrt: envFn([prim.num()], prim.num(), numImpl1Abs(Math.sqrt)),
|
|
303
346
|
cbrt: envFn([prim.num()], prim.num(), numImpl1Abs(Math.cbrt)),
|
|
@@ -313,7 +356,11 @@ function defineEnv() {
|
|
|
313
356
|
acos: envFn([prim.num()], prim.num(), numImpl1Abs(Math.acos)),
|
|
314
357
|
atan: envFn([prim.num()], prim.num(), numImpl1Abs(Math.atan)),
|
|
315
358
|
atan2: envFn([prim.num(), prim.num()], prim.num(), numImpl2Abs(Math.atan2)),
|
|
316
|
-
hypot:
|
|
359
|
+
hypot: envFnVariadic(prim.num(), prim.num(), {
|
|
360
|
+
apply: numImplVAbs(Math.hypot),
|
|
361
|
+
restName: "...values",
|
|
362
|
+
name: "Math.hypot"
|
|
363
|
+
}),
|
|
317
364
|
clz32: envFn([prim.num()], prim.num(), numImpl1Abs(Math.clz32)),
|
|
318
365
|
imul: envFn([prim.num(), prim.num()], prim.num(), numImpl2Abs(Math.imul)),
|
|
319
366
|
fround: envFn([prim.num()], prim.num(), numImpl1Abs(Math.fround)),
|
|
@@ -326,28 +373,44 @@ function defineEnv() {
|
|
|
326
373
|
SQRT2: prim.num(),
|
|
327
374
|
SQRT1_2: prim.num()
|
|
328
375
|
}),
|
|
329
|
-
Number
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
376
|
+
// dual-facet:Number/Array 既可调用/构造,又带静态槽。
|
|
377
|
+
// 此前 objAbs 遮蔽宿主全局后 $call/$new 折 unknown(issue #58)。
|
|
378
|
+
Number: envFn([prim.unknown], prim.num(), numberImplAbs, {
|
|
379
|
+
name: "Number",
|
|
380
|
+
params: ["value"],
|
|
381
|
+
slots: {
|
|
382
|
+
isFinite: envFn([prim.unknown], prim.bool(), isFiniteImplAbs),
|
|
383
|
+
isInteger: envFn([prim.unknown], prim.bool(), isIntegerImplAbs),
|
|
384
|
+
isNaN: envFn([prim.unknown], prim.bool(), isNaNImplAbs),
|
|
385
|
+
isSafeInteger: envFn([prim.unknown], prim.bool(), isSafeIntegerImplAbs),
|
|
386
|
+
parseFloat: envFn([prim.str()], prim.num(), parseFloatImplAbs),
|
|
387
|
+
parseInt: envFn([prim.str()], prim.num(), parseIntImplAbs),
|
|
388
|
+
MAX_SAFE_INTEGER: prim.num(),
|
|
389
|
+
MIN_SAFE_INTEGER: prim.num(),
|
|
390
|
+
MAX_VALUE: prim.num(),
|
|
391
|
+
MIN_VALUE: prim.num(),
|
|
392
|
+
POSITIVE_INFINITY: prim.num(),
|
|
393
|
+
NEGATIVE_INFINITY: prim.num(),
|
|
394
|
+
NaN: prim.num(),
|
|
395
|
+
EPSILON: prim.num()
|
|
396
|
+
}
|
|
344
397
|
}),
|
|
345
|
-
Boolean: envFn([prim.unknown], prim.bool(), booleanImplAbs
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
398
|
+
Boolean: envFn([prim.unknown], prim.bool(), booleanImplAbs, {
|
|
399
|
+
name: "Boolean",
|
|
400
|
+
params: ["value"]
|
|
401
|
+
}),
|
|
402
|
+
String: envFn([prim.unknown], prim.str(), stringImplAbs, {
|
|
403
|
+
name: "String",
|
|
404
|
+
params: ["value"]
|
|
405
|
+
}),
|
|
406
|
+
Array: envFn([prim.unknown], arrOf(prim.unknown), arrayImplAbs, {
|
|
407
|
+
name: "Array",
|
|
408
|
+
params: ["items"],
|
|
409
|
+
slots: {
|
|
410
|
+
isArray: envFn([prim.unknown], prim.bool(), isArrayImplAbs),
|
|
411
|
+
from: envFn([prim.unknown], arrOf(prim.unknown)),
|
|
412
|
+
of: envFn([prim.unknown], arrOf(prim.unknown))
|
|
413
|
+
}
|
|
351
414
|
}),
|
|
352
415
|
console: objAbs(consoleSlots),
|
|
353
416
|
parseInt: envFn([prim.str(), prim.num()], prim.num(), parseIntImplAbs),
|
|
@@ -372,21 +435,29 @@ function defineEnv() {
|
|
|
372
435
|
SyntaxError: envFn([prim.str()], errorBrandOf("SyntaxError")),
|
|
373
436
|
ReferenceError: envFn([prim.str()], errorBrandOf("ReferenceError")),
|
|
374
437
|
URIError: envFn([prim.str()], errorBrandOf("URIError")),
|
|
375
|
-
Promise:
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
[
|
|
381
|
-
promiseOf(arrOf(prim.unknown))
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
438
|
+
Promise: envFn([prim.unknown], promiseOf(prim.unknown), promiseCtorImplAbs, {
|
|
439
|
+
name: "Promise",
|
|
440
|
+
params: ["executor"],
|
|
441
|
+
slots: {
|
|
442
|
+
resolve: envFn([prim.unknown], promiseOf(prim.unknown), promiseResolveImplAbs),
|
|
443
|
+
reject: envFn([prim.unknown], promiseOf(prim.never)),
|
|
444
|
+
all: envFn([arrOf(promiseOf(prim.unknown))], promiseOf(arrOf(prim.unknown))),
|
|
445
|
+
allSettled: envFn(
|
|
446
|
+
[arrOf(promiseOf(prim.unknown))],
|
|
447
|
+
promiseOf(arrOf(prim.unknown))
|
|
448
|
+
),
|
|
449
|
+
race: envFn([arrOf(promiseOf(prim.unknown))], promiseOf(prim.unknown)),
|
|
450
|
+
any: envFn([arrOf(promiseOf(prim.unknown))], promiseOf(prim.unknown))
|
|
451
|
+
}
|
|
385
452
|
}),
|
|
386
|
-
Date:
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
453
|
+
Date: envFn([], dateAbs(), dateCtorImplAbs, {
|
|
454
|
+
name: "Date",
|
|
455
|
+
params: ["value"],
|
|
456
|
+
slots: {
|
|
457
|
+
now: envFn([], prim.num()),
|
|
458
|
+
parse: envFn([prim.str()], prim.num()),
|
|
459
|
+
UTC: envFn([prim.num(), prim.num()], prim.num())
|
|
460
|
+
}
|
|
390
461
|
}),
|
|
391
462
|
Symbol: envFn([prim.str()], brandOf("Symbol")),
|
|
392
463
|
Reflect: objAbs({
|
package/dist/es.js
CHANGED
package/dist/node.js
CHANGED
package/dist/web.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nudojs/env",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.10",
|
|
4
4
|
"engines": {
|
|
5
5
|
"node": ">=20"
|
|
6
6
|
},
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"registry": "https://registry.npmjs.org"
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@nudojs/core": "1.
|
|
38
|
+
"@nudojs/core": "1.3.0"
|
|
39
39
|
},
|
|
40
40
|
"scripts": {
|
|
41
41
|
"build": "tsup src/es.ts src/web.ts src/node.ts --format esm --dts"
|