@nudojs/env 0.1.0 → 0.2.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/CHANGELOG.md +17 -0
- package/LICENSE +21 -0
- package/dist/chunk-VBTQ36SR.js +227 -0
- package/dist/es.d.ts +9 -0
- package/dist/es.js +6 -0
- package/dist/node.d.ts +6 -0
- package/dist/node.js +372 -0
- package/dist/web.d.ts +6 -0
- package/dist/web.js +306 -0
- package/package.json +3 -3
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# @nudojs/env
|
|
2
|
+
|
|
3
|
+
## 0.2.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [5786fa5]
|
|
8
|
+
- Updated dependencies [5786fa5]
|
|
9
|
+
- @nudojs/core@0.3.0
|
|
10
|
+
|
|
11
|
+
## 0.2.0
|
|
12
|
+
|
|
13
|
+
### Minor Changes
|
|
14
|
+
|
|
15
|
+
- 0fd0718: Merge the three environment packages into one: `@nudojs/env-es`, `@nudojs/env-web`, `@nudojs/env-node` are replaced by a single `@nudojs/env` package with subpath exports `@nudojs/env/es`, `@nudojs/env/web`, `@nudojs/env/node`.
|
|
16
|
+
|
|
17
|
+
Move agent-facing tools from the standalone MCP server into the language server: `@nudojs/mcp` is removed. `@nudojs/lsp` now exposes `nudo.whatIf`, `nudo.suggestCase`, `nudo.trace`, `nudo.selectCase`, and `nudo.getActiveCases` via `workspace/executeCommand` (custom-request aliases `nudo/whatIf` etc. included), adds pull-mode diagnostics, and works on files that are not open in the editor (disk fallback). `nudo.whatIf` now actually applies the given type bindings — previously they were ignored. AI agents connect through any LSP↔MCP bridge (cclsp, mcpls, agent-lsp) or a native LSP client; an installable agent skill ships at `packages/lsp/agent-skill/SKILL.md`.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Nudo Contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
// src/es.ts
|
|
2
|
+
import { T } from "@nudojs/core";
|
|
3
|
+
function litNum(tv) {
|
|
4
|
+
return tv.kind === "literal" && typeof tv.value === "number" ? tv.value : void 0;
|
|
5
|
+
}
|
|
6
|
+
function litStr(tv) {
|
|
7
|
+
return tv.kind === "literal" && typeof tv.value === "string" ? tv.value : void 0;
|
|
8
|
+
}
|
|
9
|
+
function numImpl1(fn) {
|
|
10
|
+
return (args) => {
|
|
11
|
+
const a = litNum(args[0]);
|
|
12
|
+
return a !== void 0 ? T.literal(fn(a)) : void 0;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
function numImpl2(fn) {
|
|
16
|
+
return (args) => {
|
|
17
|
+
const a = litNum(args[0]);
|
|
18
|
+
const b = litNum(args[1]);
|
|
19
|
+
return a !== void 0 && b !== void 0 ? T.literal(fn(a, b)) : void 0;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function strToStrImpl(fn) {
|
|
23
|
+
return (args) => {
|
|
24
|
+
const s = litStr(args[0]);
|
|
25
|
+
return s !== void 0 ? T.literal(fn(s)) : void 0;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function defineEnv() {
|
|
29
|
+
const voidFn = T.fnSig([T.unknown], T.undefined);
|
|
30
|
+
const consoleMethods = {};
|
|
31
|
+
for (const name of ["log", "error", "warn", "info", "debug", "trace", "dir", "table", "time", "timeEnd", "timeLog", "clear", "count", "countReset", "group", "groupCollapsed", "groupEnd", "assert"]) {
|
|
32
|
+
consoleMethods[name] = voidFn;
|
|
33
|
+
}
|
|
34
|
+
const jsonStringifyImpl = (args) => {
|
|
35
|
+
const v = args[0];
|
|
36
|
+
if (v.kind === "literal") {
|
|
37
|
+
try {
|
|
38
|
+
const result = JSON.stringify(v.value);
|
|
39
|
+
return result === void 0 ? T.undefined : T.literal(result);
|
|
40
|
+
} catch {
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return void 0;
|
|
44
|
+
};
|
|
45
|
+
const parseIntImpl = (args) => {
|
|
46
|
+
const s = litStr(args[0]);
|
|
47
|
+
const radix = args[1] !== void 0 ? litNum(args[1]) : 10;
|
|
48
|
+
if (s !== void 0 && radix !== void 0) {
|
|
49
|
+
const result = parseInt(s, radix);
|
|
50
|
+
return Number.isNaN(result) ? T.literal(NaN) : T.literal(result);
|
|
51
|
+
}
|
|
52
|
+
return void 0;
|
|
53
|
+
};
|
|
54
|
+
const parseFloatImpl = (args) => {
|
|
55
|
+
const s = litStr(args[0]);
|
|
56
|
+
if (s !== void 0) {
|
|
57
|
+
const result = parseFloat(s);
|
|
58
|
+
return T.literal(result);
|
|
59
|
+
}
|
|
60
|
+
return void 0;
|
|
61
|
+
};
|
|
62
|
+
const isNaNImpl = (args) => {
|
|
63
|
+
const v = args[0];
|
|
64
|
+
if (v.kind === "literal" && typeof v.value === "number") return T.literal(Number.isNaN(v.value));
|
|
65
|
+
return void 0;
|
|
66
|
+
};
|
|
67
|
+
const isFiniteImpl = (args) => {
|
|
68
|
+
const v = args[0];
|
|
69
|
+
if (v.kind === "literal" && typeof v.value === "number") return T.literal(Number.isFinite(v.value));
|
|
70
|
+
return void 0;
|
|
71
|
+
};
|
|
72
|
+
return {
|
|
73
|
+
globals: {
|
|
74
|
+
// --- JSON ---
|
|
75
|
+
JSON: T.object({
|
|
76
|
+
parse: T.fnSig([T.string], T.unknown, T.instanceOf("SyntaxError")),
|
|
77
|
+
stringify: T.fnSig([T.unknown], T.union(T.string, T.undefined), T.never, jsonStringifyImpl)
|
|
78
|
+
}),
|
|
79
|
+
// --- Math ---
|
|
80
|
+
Math: T.object({
|
|
81
|
+
abs: T.fnSig([T.number], T.number, T.never, numImpl1(Math.abs)),
|
|
82
|
+
ceil: T.fnSig([T.number], T.number, T.never, numImpl1(Math.ceil)),
|
|
83
|
+
floor: T.fnSig([T.number], T.number, T.never, numImpl1(Math.floor)),
|
|
84
|
+
round: T.fnSig([T.number], T.number, T.never, numImpl1(Math.round)),
|
|
85
|
+
trunc: T.fnSig([T.number], T.number, T.never, numImpl1(Math.trunc)),
|
|
86
|
+
sign: T.fnSig([T.number], T.number, T.never, numImpl1(Math.sign)),
|
|
87
|
+
max: T.fnSig([T.number, T.number], T.number, T.never, numImpl2(Math.max)),
|
|
88
|
+
min: T.fnSig([T.number, T.number], T.number, T.never, numImpl2(Math.min)),
|
|
89
|
+
pow: T.fnSig([T.number, T.number], T.number, T.never, numImpl2(Math.pow)),
|
|
90
|
+
sqrt: T.fnSig([T.number], T.number, T.never, numImpl1(Math.sqrt)),
|
|
91
|
+
cbrt: T.fnSig([T.number], T.number, T.never, numImpl1(Math.cbrt)),
|
|
92
|
+
log: T.fnSig([T.number], T.number, T.never, numImpl1(Math.log)),
|
|
93
|
+
log2: T.fnSig([T.number], T.number, T.never, numImpl1(Math.log2)),
|
|
94
|
+
log10: T.fnSig([T.number], T.number, T.never, numImpl1(Math.log10)),
|
|
95
|
+
exp: T.fnSig([T.number], T.number, T.never, numImpl1(Math.exp)),
|
|
96
|
+
random: T.fnSig([], T.number),
|
|
97
|
+
sin: T.fnSig([T.number], T.number, T.never, numImpl1(Math.sin)),
|
|
98
|
+
cos: T.fnSig([T.number], T.number, T.never, numImpl1(Math.cos)),
|
|
99
|
+
tan: T.fnSig([T.number], T.number, T.never, numImpl1(Math.tan)),
|
|
100
|
+
asin: T.fnSig([T.number], T.number, T.never, numImpl1(Math.asin)),
|
|
101
|
+
acos: T.fnSig([T.number], T.number, T.never, numImpl1(Math.acos)),
|
|
102
|
+
atan: T.fnSig([T.number], T.number, T.never, numImpl1(Math.atan)),
|
|
103
|
+
atan2: T.fnSig([T.number, T.number], T.number, T.never, numImpl2(Math.atan2)),
|
|
104
|
+
hypot: T.fnSig([T.number, T.number], T.number, T.never, numImpl2(Math.hypot)),
|
|
105
|
+
clz32: T.fnSig([T.number], T.number, T.never, numImpl1(Math.clz32)),
|
|
106
|
+
imul: T.fnSig([T.number, T.number], T.number, T.never, numImpl2(Math.imul)),
|
|
107
|
+
fround: T.fnSig([T.number], T.number, T.never, numImpl1(Math.fround)),
|
|
108
|
+
PI: T.number,
|
|
109
|
+
E: T.number,
|
|
110
|
+
LN2: T.number,
|
|
111
|
+
LN10: T.number,
|
|
112
|
+
LOG2E: T.number,
|
|
113
|
+
LOG10E: T.number,
|
|
114
|
+
SQRT2: T.number,
|
|
115
|
+
SQRT1_2: T.number
|
|
116
|
+
}),
|
|
117
|
+
// --- Number ---
|
|
118
|
+
Number: T.object({
|
|
119
|
+
isFinite: T.fnSig([T.unknown], T.boolean, T.never, isFiniteImpl),
|
|
120
|
+
isInteger: T.fnSig([T.unknown], T.boolean, T.never, (args) => {
|
|
121
|
+
const v = args[0];
|
|
122
|
+
if (v.kind === "literal" && typeof v.value === "number") return T.literal(Number.isInteger(v.value));
|
|
123
|
+
return void 0;
|
|
124
|
+
}),
|
|
125
|
+
isNaN: T.fnSig([T.unknown], T.boolean, T.never, isNaNImpl),
|
|
126
|
+
isSafeInteger: T.fnSig([T.unknown], T.boolean, T.never, (args) => {
|
|
127
|
+
const v = args[0];
|
|
128
|
+
if (v.kind === "literal" && typeof v.value === "number") return T.literal(Number.isSafeInteger(v.value));
|
|
129
|
+
return void 0;
|
|
130
|
+
}),
|
|
131
|
+
parseFloat: T.fnSig([T.string], T.number, T.never, parseFloatImpl),
|
|
132
|
+
parseInt: T.fnSig([T.string], T.number, T.never, parseIntImpl),
|
|
133
|
+
MAX_SAFE_INTEGER: T.number,
|
|
134
|
+
MIN_SAFE_INTEGER: T.number,
|
|
135
|
+
MAX_VALUE: T.number,
|
|
136
|
+
MIN_VALUE: T.number,
|
|
137
|
+
POSITIVE_INFINITY: T.number,
|
|
138
|
+
NEGATIVE_INFINITY: T.number,
|
|
139
|
+
NaN: T.number,
|
|
140
|
+
EPSILON: T.number
|
|
141
|
+
}),
|
|
142
|
+
// --- Boolean ---
|
|
143
|
+
Boolean: T.fnSig([T.unknown], T.boolean, T.never, (args) => {
|
|
144
|
+
const v = args[0];
|
|
145
|
+
if (v.kind === "literal") return T.literal(Boolean(v.value));
|
|
146
|
+
return void 0;
|
|
147
|
+
}),
|
|
148
|
+
// --- String ---
|
|
149
|
+
String: T.fnSig([T.unknown], T.string, T.never, (args) => {
|
|
150
|
+
const v = args[0];
|
|
151
|
+
if (v.kind === "literal" && v.value !== null && v.value !== void 0) return T.literal(String(v.value));
|
|
152
|
+
return void 0;
|
|
153
|
+
}),
|
|
154
|
+
// --- Array ---
|
|
155
|
+
Array: T.object({
|
|
156
|
+
isArray: T.fnSig([T.unknown], T.boolean, T.never, (args) => {
|
|
157
|
+
const v = args[0];
|
|
158
|
+
if (v.kind === "array" || v.kind === "tuple") return T.literal(true);
|
|
159
|
+
if (v.kind === "literal" || v.kind === "primitive" || v.kind === "object") return T.literal(false);
|
|
160
|
+
return void 0;
|
|
161
|
+
}),
|
|
162
|
+
from: T.fnSig([T.unknown], T.array(T.unknown)),
|
|
163
|
+
of: T.fnSig([T.unknown], T.array(T.unknown))
|
|
164
|
+
}),
|
|
165
|
+
// --- console ---
|
|
166
|
+
console: T.object(consoleMethods),
|
|
167
|
+
// --- Global functions ---
|
|
168
|
+
parseInt: T.fnSig([T.string, T.number], T.number, T.never, parseIntImpl),
|
|
169
|
+
parseFloat: T.fnSig([T.string], T.number, T.never, parseFloatImpl),
|
|
170
|
+
isNaN: T.fnSig([T.unknown], T.boolean, T.never, isNaNImpl),
|
|
171
|
+
isFinite: T.fnSig([T.unknown], T.boolean, T.never, isFiniteImpl),
|
|
172
|
+
encodeURI: T.fnSig([T.string], T.string, T.never, strToStrImpl(encodeURI)),
|
|
173
|
+
decodeURI: T.fnSig([T.string], T.string, T.instanceOf("URIError"), strToStrImpl(decodeURI)),
|
|
174
|
+
encodeURIComponent: T.fnSig([T.string], T.string, T.never, strToStrImpl(encodeURIComponent)),
|
|
175
|
+
decodeURIComponent: T.fnSig([T.string], T.string, T.instanceOf("URIError"), strToStrImpl(decodeURIComponent)),
|
|
176
|
+
// --- Error constructors ---
|
|
177
|
+
Error: T.fnSig([T.string], T.instanceOf("Error")),
|
|
178
|
+
TypeError: T.fnSig([T.string], T.instanceOf("TypeError")),
|
|
179
|
+
RangeError: T.fnSig([T.string], T.instanceOf("RangeError")),
|
|
180
|
+
SyntaxError: T.fnSig([T.string], T.instanceOf("SyntaxError")),
|
|
181
|
+
ReferenceError: T.fnSig([T.string], T.instanceOf("ReferenceError")),
|
|
182
|
+
URIError: T.fnSig([T.string], T.instanceOf("URIError")),
|
|
183
|
+
// --- Promise ---
|
|
184
|
+
Promise: T.object({
|
|
185
|
+
resolve: T.fnSig([T.unknown], T.promise(T.unknown), T.never, (args) => T.promise(args[0])),
|
|
186
|
+
reject: T.fnSig([T.unknown], T.promise(T.never)),
|
|
187
|
+
all: T.fnSig([T.array(T.promise(T.unknown))], T.promise(T.array(T.unknown))),
|
|
188
|
+
allSettled: T.fnSig([T.array(T.promise(T.unknown))], T.promise(T.array(T.unknown))),
|
|
189
|
+
race: T.fnSig([T.array(T.promise(T.unknown))], T.promise(T.unknown)),
|
|
190
|
+
any: T.fnSig([T.array(T.promise(T.unknown))], T.promise(T.unknown))
|
|
191
|
+
}),
|
|
192
|
+
// --- Date ---
|
|
193
|
+
Date: T.object({
|
|
194
|
+
now: T.fnSig([], T.number),
|
|
195
|
+
parse: T.fnSig([T.string], T.number),
|
|
196
|
+
UTC: T.fnSig([T.number, T.number], T.number)
|
|
197
|
+
}),
|
|
198
|
+
// --- Symbol ---
|
|
199
|
+
Symbol: T.fnSig([T.string], T.symbol),
|
|
200
|
+
// --- Reflect ---
|
|
201
|
+
Reflect: T.object({
|
|
202
|
+
apply: T.fnSig([T.unknown, T.unknown, T.array(T.unknown)], T.unknown),
|
|
203
|
+
construct: T.fnSig([T.unknown, T.array(T.unknown)], T.unknown),
|
|
204
|
+
defineProperty: T.fnSig([T.unknown, T.string, T.unknown], T.boolean),
|
|
205
|
+
deleteProperty: T.fnSig([T.unknown, T.string], T.boolean),
|
|
206
|
+
get: T.fnSig([T.unknown, T.string], T.unknown),
|
|
207
|
+
getOwnPropertyDescriptor: T.fnSig([T.unknown, T.string], T.union(T.unknown, T.undefined)),
|
|
208
|
+
getPrototypeOf: T.fnSig([T.unknown], T.union(T.unknown, T.null)),
|
|
209
|
+
has: T.fnSig([T.unknown, T.string], T.boolean),
|
|
210
|
+
isExtensible: T.fnSig([T.unknown], T.boolean),
|
|
211
|
+
ownKeys: T.fnSig([T.unknown], T.array(T.string)),
|
|
212
|
+
preventExtensions: T.fnSig([T.unknown], T.boolean),
|
|
213
|
+
set: T.fnSig([T.unknown, T.string, T.unknown], T.boolean),
|
|
214
|
+
setPrototypeOf: T.fnSig([T.unknown, T.unknown], T.boolean)
|
|
215
|
+
}),
|
|
216
|
+
// --- globalThis ---
|
|
217
|
+
globalThis: T.unknown,
|
|
218
|
+
undefined: T.undefined,
|
|
219
|
+
NaN: T.number,
|
|
220
|
+
Infinity: T.number
|
|
221
|
+
}
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
export {
|
|
226
|
+
defineEnv
|
|
227
|
+
};
|
package/dist/es.d.ts
ADDED
package/dist/es.js
ADDED
package/dist/node.d.ts
ADDED
package/dist/node.js
ADDED
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
import {
|
|
2
|
+
defineEnv
|
|
3
|
+
} from "./chunk-VBTQ36SR.js";
|
|
4
|
+
|
|
5
|
+
// src/node.ts
|
|
6
|
+
import { T } from "@nudojs/core";
|
|
7
|
+
import nodePath from "path";
|
|
8
|
+
function litStr(tv) {
|
|
9
|
+
return tv.kind === "literal" && typeof tv.value === "string" ? tv.value : void 0;
|
|
10
|
+
}
|
|
11
|
+
function allLitStr(args) {
|
|
12
|
+
const result = [];
|
|
13
|
+
for (const a of args) {
|
|
14
|
+
const s = litStr(a);
|
|
15
|
+
if (s === void 0) return void 0;
|
|
16
|
+
result.push(s);
|
|
17
|
+
}
|
|
18
|
+
return result;
|
|
19
|
+
}
|
|
20
|
+
function defineEnv2() {
|
|
21
|
+
const esEnv = defineEnv();
|
|
22
|
+
const BufferInstance = T.instanceOf("Buffer", {
|
|
23
|
+
toString: T.fnSig([T.string], T.string),
|
|
24
|
+
toJSON: T.fnSig([], T.object({ type: T.string, data: T.array(T.number) })),
|
|
25
|
+
length: T.number,
|
|
26
|
+
slice: T.fnSig([T.number, T.number], T.instanceOf("Buffer")),
|
|
27
|
+
copy: T.fnSig([T.unknown, T.number, T.number, T.number], T.number),
|
|
28
|
+
write: T.fnSig([T.string, T.number, T.number, T.string], T.number),
|
|
29
|
+
readUInt8: T.fnSig([T.number], T.number),
|
|
30
|
+
readUInt16BE: T.fnSig([T.number], T.number),
|
|
31
|
+
readUInt16LE: T.fnSig([T.number], T.number),
|
|
32
|
+
readUInt32BE: T.fnSig([T.number], T.number),
|
|
33
|
+
readUInt32LE: T.fnSig([T.number], T.number),
|
|
34
|
+
readInt8: T.fnSig([T.number], T.number),
|
|
35
|
+
readInt16BE: T.fnSig([T.number], T.number),
|
|
36
|
+
readInt16LE: T.fnSig([T.number], T.number),
|
|
37
|
+
readInt32BE: T.fnSig([T.number], T.number),
|
|
38
|
+
readInt32LE: T.fnSig([T.number], T.number),
|
|
39
|
+
includes: T.fnSig([T.union(T.string, T.number)], T.boolean),
|
|
40
|
+
indexOf: T.fnSig([T.union(T.string, T.number)], T.number),
|
|
41
|
+
fill: T.fnSig([T.union(T.string, T.number)], T.instanceOf("Buffer")),
|
|
42
|
+
equals: T.fnSig([T.instanceOf("Buffer")], T.boolean),
|
|
43
|
+
compare: T.fnSig([T.instanceOf("Buffer")], T.number),
|
|
44
|
+
subarray: T.fnSig([T.number, T.number], T.instanceOf("Buffer"))
|
|
45
|
+
});
|
|
46
|
+
const fsModule = {
|
|
47
|
+
readFileSync: T.fnSig([T.string, T.union(T.string, T.object({}))], T.union(T.string, BufferInstance)),
|
|
48
|
+
writeFileSync: T.fnSig([T.string, T.union(T.string, BufferInstance)], T.undefined),
|
|
49
|
+
appendFileSync: T.fnSig([T.string, T.union(T.string, BufferInstance)], T.undefined),
|
|
50
|
+
existsSync: T.fnSig([T.string], T.boolean),
|
|
51
|
+
mkdirSync: T.fnSig([T.string, T.unknown], T.union(T.string, T.undefined)),
|
|
52
|
+
rmdirSync: T.fnSig([T.string], T.undefined),
|
|
53
|
+
rmSync: T.fnSig([T.string, T.unknown], T.undefined),
|
|
54
|
+
unlinkSync: T.fnSig([T.string], T.undefined),
|
|
55
|
+
renameSync: T.fnSig([T.string, T.string], T.undefined),
|
|
56
|
+
copyFileSync: T.fnSig([T.string, T.string], T.undefined),
|
|
57
|
+
statSync: T.fnSig([T.string], T.object({
|
|
58
|
+
isFile: T.fnSig([], T.boolean),
|
|
59
|
+
isDirectory: T.fnSig([], T.boolean),
|
|
60
|
+
isSymbolicLink: T.fnSig([], T.boolean),
|
|
61
|
+
size: T.number,
|
|
62
|
+
mtime: T.unknown,
|
|
63
|
+
ctime: T.unknown,
|
|
64
|
+
atime: T.unknown,
|
|
65
|
+
birthtime: T.unknown,
|
|
66
|
+
mode: T.number,
|
|
67
|
+
uid: T.number,
|
|
68
|
+
gid: T.number
|
|
69
|
+
})),
|
|
70
|
+
readdirSync: T.fnSig([T.string, T.unknown], T.array(T.union(T.string, T.unknown))),
|
|
71
|
+
realpathSync: T.fnSig([T.string], T.string),
|
|
72
|
+
readlinkSync: T.fnSig([T.string], T.string),
|
|
73
|
+
symlinkSync: T.fnSig([T.string, T.string], T.undefined),
|
|
74
|
+
chmodSync: T.fnSig([T.string, T.number], T.undefined),
|
|
75
|
+
chownSync: T.fnSig([T.string, T.number, T.number], T.undefined),
|
|
76
|
+
accessSync: T.fnSig([T.string, T.number], T.undefined),
|
|
77
|
+
readFile: T.fnSig([T.string, T.unknown], T.promise(T.union(T.string, BufferInstance))),
|
|
78
|
+
writeFile: T.fnSig([T.string, T.union(T.string, BufferInstance)], T.promise(T.undefined)),
|
|
79
|
+
mkdir: T.fnSig([T.string, T.unknown], T.promise(T.union(T.string, T.undefined))),
|
|
80
|
+
rm: T.fnSig([T.string, T.unknown], T.promise(T.undefined)),
|
|
81
|
+
stat: T.fnSig([T.string], T.promise(T.unknown)),
|
|
82
|
+
readdir: T.fnSig([T.string, T.unknown], T.promise(T.array(T.unknown))),
|
|
83
|
+
access: T.fnSig([T.string, T.number], T.promise(T.undefined))
|
|
84
|
+
};
|
|
85
|
+
const strImpl1 = (fn) => (args) => {
|
|
86
|
+
const a = litStr(args[0]);
|
|
87
|
+
return a !== void 0 ? T.literal(fn(a)) : void 0;
|
|
88
|
+
};
|
|
89
|
+
const pathModule = {
|
|
90
|
+
join: T.fnSig([T.string, T.string], T.string, T.never, (args) => {
|
|
91
|
+
const strs = allLitStr(args);
|
|
92
|
+
return strs ? T.literal(nodePath.join(...strs)) : void 0;
|
|
93
|
+
}),
|
|
94
|
+
resolve: T.fnSig([T.string], T.string, T.never, (args) => {
|
|
95
|
+
const strs = allLitStr(args);
|
|
96
|
+
return strs ? T.literal(nodePath.resolve(...strs)) : void 0;
|
|
97
|
+
}),
|
|
98
|
+
dirname: T.fnSig([T.string], T.string, T.never, strImpl1(nodePath.dirname)),
|
|
99
|
+
basename: T.fnSig([T.string, T.string], T.string, T.never, (args) => {
|
|
100
|
+
const p = litStr(args[0]);
|
|
101
|
+
if (p === void 0) return void 0;
|
|
102
|
+
const ext = args[1] !== void 0 ? litStr(args[1]) : void 0;
|
|
103
|
+
return T.literal(ext !== void 0 ? nodePath.basename(p, ext) : nodePath.basename(p));
|
|
104
|
+
}),
|
|
105
|
+
extname: T.fnSig([T.string], T.string, T.never, strImpl1(nodePath.extname)),
|
|
106
|
+
relative: T.fnSig([T.string, T.string], T.string, T.never, (args) => {
|
|
107
|
+
const from = litStr(args[0]);
|
|
108
|
+
const to = litStr(args[1]);
|
|
109
|
+
return from !== void 0 && to !== void 0 ? T.literal(nodePath.relative(from, to)) : void 0;
|
|
110
|
+
}),
|
|
111
|
+
normalize: T.fnSig([T.string], T.string, T.never, strImpl1(nodePath.normalize)),
|
|
112
|
+
isAbsolute: T.fnSig([T.string], T.boolean, T.never, (args) => {
|
|
113
|
+
const p = litStr(args[0]);
|
|
114
|
+
return p !== void 0 ? T.literal(nodePath.isAbsolute(p)) : void 0;
|
|
115
|
+
}),
|
|
116
|
+
parse: T.fnSig([T.string], T.object({
|
|
117
|
+
root: T.string,
|
|
118
|
+
dir: T.string,
|
|
119
|
+
base: T.string,
|
|
120
|
+
ext: T.string,
|
|
121
|
+
name: T.string
|
|
122
|
+
}), T.never, (args) => {
|
|
123
|
+
const p = litStr(args[0]);
|
|
124
|
+
if (p === void 0) return void 0;
|
|
125
|
+
const parsed = nodePath.parse(p);
|
|
126
|
+
return T.object({
|
|
127
|
+
root: T.literal(parsed.root),
|
|
128
|
+
dir: T.literal(parsed.dir),
|
|
129
|
+
base: T.literal(parsed.base),
|
|
130
|
+
ext: T.literal(parsed.ext),
|
|
131
|
+
name: T.literal(parsed.name)
|
|
132
|
+
});
|
|
133
|
+
}),
|
|
134
|
+
format: T.fnSig([T.object({})], T.string),
|
|
135
|
+
sep: T.string,
|
|
136
|
+
delimiter: T.string,
|
|
137
|
+
posix: T.unknown,
|
|
138
|
+
win32: T.unknown
|
|
139
|
+
};
|
|
140
|
+
const osModule = {
|
|
141
|
+
platform: T.fnSig([], T.string),
|
|
142
|
+
arch: T.fnSig([], T.string),
|
|
143
|
+
type: T.fnSig([], T.string),
|
|
144
|
+
release: T.fnSig([], T.string),
|
|
145
|
+
hostname: T.fnSig([], T.string),
|
|
146
|
+
homedir: T.fnSig([], T.string),
|
|
147
|
+
tmpdir: T.fnSig([], T.string),
|
|
148
|
+
cpus: T.fnSig([], T.array(T.object({
|
|
149
|
+
model: T.string,
|
|
150
|
+
speed: T.number
|
|
151
|
+
}))),
|
|
152
|
+
totalmem: T.fnSig([], T.number),
|
|
153
|
+
freemem: T.fnSig([], T.number),
|
|
154
|
+
uptime: T.fnSig([], T.number),
|
|
155
|
+
loadavg: T.fnSig([], T.tuple([T.number, T.number, T.number])),
|
|
156
|
+
networkInterfaces: T.fnSig([], T.unknown),
|
|
157
|
+
userInfo: T.fnSig([], T.object({
|
|
158
|
+
username: T.string,
|
|
159
|
+
uid: T.number,
|
|
160
|
+
gid: T.number,
|
|
161
|
+
shell: T.union(T.string, T.null),
|
|
162
|
+
homedir: T.string
|
|
163
|
+
})),
|
|
164
|
+
EOL: T.string
|
|
165
|
+
};
|
|
166
|
+
const nodeUrlObj = T.object({
|
|
167
|
+
href: T.string,
|
|
168
|
+
origin: T.string,
|
|
169
|
+
protocol: T.string,
|
|
170
|
+
username: T.string,
|
|
171
|
+
password: T.string,
|
|
172
|
+
host: T.string,
|
|
173
|
+
hostname: T.string,
|
|
174
|
+
port: T.string,
|
|
175
|
+
pathname: T.string,
|
|
176
|
+
search: T.string,
|
|
177
|
+
hash: T.string,
|
|
178
|
+
toString: T.fnSig([], T.string),
|
|
179
|
+
toJSON: T.fnSig([], T.string)
|
|
180
|
+
});
|
|
181
|
+
const urlModule = {
|
|
182
|
+
URL: T.fnSig([T.string, T.string], nodeUrlObj, T.instanceOf("TypeError"), (args) => {
|
|
183
|
+
const href = litStr(args[0]);
|
|
184
|
+
const base = args[1] !== void 0 ? litStr(args[1]) : void 0;
|
|
185
|
+
if (href === void 0) return void 0;
|
|
186
|
+
try {
|
|
187
|
+
const url = base !== void 0 ? new URL(href, base) : new URL(href);
|
|
188
|
+
return T.object({
|
|
189
|
+
href: T.literal(url.href),
|
|
190
|
+
origin: T.literal(url.origin),
|
|
191
|
+
protocol: T.literal(url.protocol),
|
|
192
|
+
username: T.literal(url.username),
|
|
193
|
+
password: T.literal(url.password),
|
|
194
|
+
host: T.literal(url.host),
|
|
195
|
+
hostname: T.literal(url.hostname),
|
|
196
|
+
port: T.literal(url.port),
|
|
197
|
+
pathname: T.literal(url.pathname),
|
|
198
|
+
search: T.literal(url.search),
|
|
199
|
+
hash: T.literal(url.hash),
|
|
200
|
+
toString: T.fnSig([], T.string, T.never, () => T.literal(url.href)),
|
|
201
|
+
toJSON: T.fnSig([], T.string, T.never, () => T.literal(url.href))
|
|
202
|
+
});
|
|
203
|
+
} catch {
|
|
204
|
+
return void 0;
|
|
205
|
+
}
|
|
206
|
+
}),
|
|
207
|
+
URLSearchParams: T.fnSig([T.unknown], T.object({
|
|
208
|
+
get: T.fnSig([T.string], T.union(T.string, T.null)),
|
|
209
|
+
has: T.fnSig([T.string], T.boolean),
|
|
210
|
+
set: T.fnSig([T.string, T.string], T.undefined),
|
|
211
|
+
append: T.fnSig([T.string, T.string], T.undefined),
|
|
212
|
+
delete: T.fnSig([T.string], T.undefined),
|
|
213
|
+
toString: T.fnSig([], T.string)
|
|
214
|
+
})),
|
|
215
|
+
fileURLToPath: T.fnSig([T.string], T.string, T.never, strImpl1((s) => {
|
|
216
|
+
try {
|
|
217
|
+
return new URL(s).pathname;
|
|
218
|
+
} catch {
|
|
219
|
+
return s;
|
|
220
|
+
}
|
|
221
|
+
})),
|
|
222
|
+
pathToFileURL: T.fnSig([T.string], T.object({ href: T.string }), T.never, (args) => {
|
|
223
|
+
const p = litStr(args[0]);
|
|
224
|
+
if (p === void 0) return void 0;
|
|
225
|
+
try {
|
|
226
|
+
const href = `file://${p.startsWith("/") ? "" : "/"}${p}`;
|
|
227
|
+
return T.object({ href: T.literal(href) });
|
|
228
|
+
} catch {
|
|
229
|
+
return void 0;
|
|
230
|
+
}
|
|
231
|
+
}),
|
|
232
|
+
format: T.fnSig([T.unknown], T.string)
|
|
233
|
+
};
|
|
234
|
+
const cryptoModule = {
|
|
235
|
+
randomBytes: T.fnSig([T.number], BufferInstance),
|
|
236
|
+
randomUUID: T.fnSig([], T.string),
|
|
237
|
+
randomInt: T.fnSig([T.number, T.number], T.number),
|
|
238
|
+
createHash: T.fnSig([T.string], T.object({
|
|
239
|
+
update: T.fnSig([T.union(T.string, BufferInstance)], T.unknown),
|
|
240
|
+
digest: T.fnSig([T.string], T.union(T.string, BufferInstance))
|
|
241
|
+
})),
|
|
242
|
+
createHmac: T.fnSig([T.string, T.union(T.string, BufferInstance)], T.object({
|
|
243
|
+
update: T.fnSig([T.union(T.string, BufferInstance)], T.unknown),
|
|
244
|
+
digest: T.fnSig([T.string], T.union(T.string, BufferInstance))
|
|
245
|
+
})),
|
|
246
|
+
createCipheriv: T.fnSig([T.string, T.unknown, T.unknown], T.unknown),
|
|
247
|
+
createDecipheriv: T.fnSig([T.string, T.unknown, T.unknown], T.unknown),
|
|
248
|
+
pbkdf2Sync: T.fnSig([T.string, T.string, T.number, T.number, T.string], BufferInstance),
|
|
249
|
+
scryptSync: T.fnSig([T.string, T.string, T.number], BufferInstance),
|
|
250
|
+
timingSafeEqual: T.fnSig([BufferInstance, BufferInstance], T.boolean)
|
|
251
|
+
};
|
|
252
|
+
const childProcessModule = {
|
|
253
|
+
execSync: T.fnSig([T.string, T.unknown], T.union(T.string, BufferInstance)),
|
|
254
|
+
execFileSync: T.fnSig([T.string, T.array(T.string), T.unknown], T.union(T.string, BufferInstance)),
|
|
255
|
+
spawnSync: T.fnSig([T.string, T.array(T.string), T.unknown], T.object({
|
|
256
|
+
status: T.union(T.number, T.null),
|
|
257
|
+
stdout: T.union(T.string, BufferInstance),
|
|
258
|
+
stderr: T.union(T.string, BufferInstance),
|
|
259
|
+
error: T.union(T.instanceOf("Error"), T.undefined)
|
|
260
|
+
})),
|
|
261
|
+
exec: T.fnSig([T.string, T.unknown], T.unknown),
|
|
262
|
+
spawn: T.fnSig([T.string, T.array(T.string), T.unknown], T.unknown),
|
|
263
|
+
fork: T.fnSig([T.string, T.array(T.string), T.unknown], T.unknown)
|
|
264
|
+
};
|
|
265
|
+
const utilModule = {
|
|
266
|
+
promisify: T.fnSig([T.unknown], T.unknown),
|
|
267
|
+
inspect: T.fnSig([T.unknown, T.unknown], T.string),
|
|
268
|
+
format: T.fnSig([T.string], T.string),
|
|
269
|
+
types: T.object({
|
|
270
|
+
isDate: T.fnSig([T.unknown], T.boolean),
|
|
271
|
+
isRegExp: T.fnSig([T.unknown], T.boolean),
|
|
272
|
+
isPromise: T.fnSig([T.unknown], T.boolean),
|
|
273
|
+
isArrayBuffer: T.fnSig([T.unknown], T.boolean),
|
|
274
|
+
isTypedArray: T.fnSig([T.unknown], T.boolean)
|
|
275
|
+
}),
|
|
276
|
+
TextEncoder: T.fnSig([], T.object({
|
|
277
|
+
encode: T.fnSig([T.string], T.unknown)
|
|
278
|
+
})),
|
|
279
|
+
TextDecoder: T.fnSig([T.string], T.object({
|
|
280
|
+
decode: T.fnSig([T.unknown], T.string)
|
|
281
|
+
}))
|
|
282
|
+
};
|
|
283
|
+
const nodeGlobals = {
|
|
284
|
+
process: T.object({
|
|
285
|
+
env: T.object({}),
|
|
286
|
+
argv: T.array(T.string),
|
|
287
|
+
argv0: T.string,
|
|
288
|
+
execArgv: T.array(T.string),
|
|
289
|
+
execPath: T.string,
|
|
290
|
+
cwd: T.fnSig([], T.string),
|
|
291
|
+
chdir: T.fnSig([T.string], T.undefined),
|
|
292
|
+
exit: T.fnSig([T.number], T.never),
|
|
293
|
+
pid: T.number,
|
|
294
|
+
ppid: T.number,
|
|
295
|
+
platform: T.string,
|
|
296
|
+
arch: T.string,
|
|
297
|
+
version: T.string,
|
|
298
|
+
versions: T.object({}),
|
|
299
|
+
stdout: T.object({ write: T.fnSig([T.string], T.boolean) }),
|
|
300
|
+
stderr: T.object({ write: T.fnSig([T.string], T.boolean) }),
|
|
301
|
+
stdin: T.object({ on: T.fnSig([T.string, T.unknown], T.unknown) }),
|
|
302
|
+
hrtime: T.object({
|
|
303
|
+
bigint: T.fnSig([], T.bigint)
|
|
304
|
+
}),
|
|
305
|
+
memoryUsage: T.fnSig([], T.object({
|
|
306
|
+
rss: T.number,
|
|
307
|
+
heapTotal: T.number,
|
|
308
|
+
heapUsed: T.number,
|
|
309
|
+
external: T.number,
|
|
310
|
+
arrayBuffers: T.number
|
|
311
|
+
})),
|
|
312
|
+
cpuUsage: T.fnSig([], T.object({ user: T.number, system: T.number })),
|
|
313
|
+
uptime: T.fnSig([], T.number),
|
|
314
|
+
nextTick: T.fnSig([T.unknown], T.undefined),
|
|
315
|
+
on: T.fnSig([T.string, T.unknown], T.unknown),
|
|
316
|
+
once: T.fnSig([T.string, T.unknown], T.unknown),
|
|
317
|
+
off: T.fnSig([T.string, T.unknown], T.unknown),
|
|
318
|
+
emit: T.fnSig([T.string], T.boolean)
|
|
319
|
+
}),
|
|
320
|
+
Buffer: T.object({
|
|
321
|
+
from: T.fnSig([T.union(T.string, T.array(T.number))], BufferInstance),
|
|
322
|
+
alloc: T.fnSig([T.number], BufferInstance),
|
|
323
|
+
allocUnsafe: T.fnSig([T.number], BufferInstance),
|
|
324
|
+
isBuffer: T.fnSig([T.unknown], T.boolean),
|
|
325
|
+
byteLength: T.fnSig([T.union(T.string, BufferInstance)], T.number),
|
|
326
|
+
concat: T.fnSig([T.array(BufferInstance)], BufferInstance),
|
|
327
|
+
compare: T.fnSig([BufferInstance, BufferInstance], T.number)
|
|
328
|
+
}),
|
|
329
|
+
__dirname: T.string,
|
|
330
|
+
__filename: T.string,
|
|
331
|
+
setTimeout: T.fnSig([T.unknown, T.number], T.unknown),
|
|
332
|
+
setInterval: T.fnSig([T.unknown, T.number], T.unknown),
|
|
333
|
+
setImmediate: T.fnSig([T.unknown], T.unknown),
|
|
334
|
+
clearTimeout: T.fnSig([T.unknown], T.undefined),
|
|
335
|
+
clearInterval: T.fnSig([T.unknown], T.undefined),
|
|
336
|
+
clearImmediate: T.fnSig([T.unknown], T.undefined),
|
|
337
|
+
queueMicrotask: T.fnSig([T.unknown], T.undefined),
|
|
338
|
+
structuredClone: T.fnSig([T.unknown], T.unknown)
|
|
339
|
+
};
|
|
340
|
+
const modules = {
|
|
341
|
+
fs: fsModule,
|
|
342
|
+
"node:fs": fsModule,
|
|
343
|
+
"node:fs/promises": {
|
|
344
|
+
readFile: fsModule.readFile,
|
|
345
|
+
writeFile: fsModule.writeFile,
|
|
346
|
+
mkdir: fsModule.mkdir,
|
|
347
|
+
rm: fsModule.rm,
|
|
348
|
+
stat: fsModule.stat,
|
|
349
|
+
readdir: fsModule.readdir,
|
|
350
|
+
access: fsModule.access
|
|
351
|
+
},
|
|
352
|
+
path: pathModule,
|
|
353
|
+
"node:path": pathModule,
|
|
354
|
+
os: osModule,
|
|
355
|
+
"node:os": osModule,
|
|
356
|
+
url: urlModule,
|
|
357
|
+
"node:url": urlModule,
|
|
358
|
+
crypto: cryptoModule,
|
|
359
|
+
"node:crypto": cryptoModule,
|
|
360
|
+
child_process: childProcessModule,
|
|
361
|
+
"node:child_process": childProcessModule,
|
|
362
|
+
util: utilModule,
|
|
363
|
+
"node:util": utilModule
|
|
364
|
+
};
|
|
365
|
+
return {
|
|
366
|
+
globals: { ...esEnv.globals, ...nodeGlobals },
|
|
367
|
+
modules
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
export {
|
|
371
|
+
defineEnv2 as defineEnv
|
|
372
|
+
};
|
package/dist/web.d.ts
ADDED
package/dist/web.js
ADDED
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
import {
|
|
2
|
+
defineEnv
|
|
3
|
+
} from "./chunk-VBTQ36SR.js";
|
|
4
|
+
|
|
5
|
+
// src/web.ts
|
|
6
|
+
import { T } from "@nudojs/core";
|
|
7
|
+
function litStr(tv) {
|
|
8
|
+
return tv.kind === "literal" && typeof tv.value === "string" ? tv.value : void 0;
|
|
9
|
+
}
|
|
10
|
+
function makeURLObj(url) {
|
|
11
|
+
return T.object({
|
|
12
|
+
href: T.literal(url.href),
|
|
13
|
+
origin: T.literal(url.origin),
|
|
14
|
+
protocol: T.literal(url.protocol),
|
|
15
|
+
username: T.literal(url.username),
|
|
16
|
+
password: T.literal(url.password),
|
|
17
|
+
host: T.literal(url.host),
|
|
18
|
+
hostname: T.literal(url.hostname),
|
|
19
|
+
port: T.literal(url.port),
|
|
20
|
+
pathname: T.literal(url.pathname),
|
|
21
|
+
search: T.literal(url.search),
|
|
22
|
+
searchParams: T.object({
|
|
23
|
+
append: T.fnSig([T.string, T.string], T.undefined),
|
|
24
|
+
delete: T.fnSig([T.string], T.undefined),
|
|
25
|
+
get: T.fnSig([T.string], T.union(T.string, T.null)),
|
|
26
|
+
getAll: T.fnSig([T.string], T.array(T.string)),
|
|
27
|
+
has: T.fnSig([T.string], T.boolean),
|
|
28
|
+
set: T.fnSig([T.string, T.string], T.undefined),
|
|
29
|
+
sort: T.fnSig([], T.undefined),
|
|
30
|
+
toString: T.fnSig([], T.string, T.never, () => T.literal(url.searchParams.toString())),
|
|
31
|
+
entries: T.fnSig([], T.unknown),
|
|
32
|
+
keys: T.fnSig([], T.unknown),
|
|
33
|
+
values: T.fnSig([], T.unknown),
|
|
34
|
+
forEach: T.fnSig([T.unknown], T.undefined),
|
|
35
|
+
size: T.literal(url.searchParams.size)
|
|
36
|
+
}),
|
|
37
|
+
hash: T.literal(url.hash),
|
|
38
|
+
toString: T.fnSig([], T.string, T.never, () => T.literal(url.href)),
|
|
39
|
+
toJSON: T.fnSig([], T.string, T.never, () => T.literal(url.href))
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
function defineEnv2() {
|
|
43
|
+
const esEnv = defineEnv();
|
|
44
|
+
const Headers = T.object({
|
|
45
|
+
append: T.fnSig([T.string, T.string], T.undefined),
|
|
46
|
+
delete: T.fnSig([T.string], T.undefined),
|
|
47
|
+
get: T.fnSig([T.string], T.union(T.string, T.null)),
|
|
48
|
+
has: T.fnSig([T.string], T.boolean),
|
|
49
|
+
set: T.fnSig([T.string, T.string], T.undefined),
|
|
50
|
+
forEach: T.fnSig([T.unknown], T.undefined),
|
|
51
|
+
entries: T.fnSig([], T.unknown),
|
|
52
|
+
keys: T.fnSig([], T.unknown),
|
|
53
|
+
values: T.fnSig([], T.unknown)
|
|
54
|
+
});
|
|
55
|
+
const Body = {
|
|
56
|
+
json: T.fnSig([], T.promise(T.unknown)),
|
|
57
|
+
text: T.fnSig([], T.promise(T.string)),
|
|
58
|
+
arrayBuffer: T.fnSig([], T.promise(T.unknown)),
|
|
59
|
+
blob: T.fnSig([], T.promise(T.unknown)),
|
|
60
|
+
formData: T.fnSig([], T.promise(T.unknown)),
|
|
61
|
+
clone: T.fnSig([], T.unknown),
|
|
62
|
+
ok: T.boolean,
|
|
63
|
+
status: T.number,
|
|
64
|
+
statusText: T.string,
|
|
65
|
+
headers: Headers,
|
|
66
|
+
url: T.string,
|
|
67
|
+
redirected: T.boolean,
|
|
68
|
+
type: T.string,
|
|
69
|
+
bodyUsed: T.boolean
|
|
70
|
+
};
|
|
71
|
+
const Response = T.object(Body);
|
|
72
|
+
const Request = T.object({
|
|
73
|
+
...Body,
|
|
74
|
+
method: T.string,
|
|
75
|
+
url: T.string,
|
|
76
|
+
headers: Headers,
|
|
77
|
+
body: T.union(T.unknown, T.null),
|
|
78
|
+
mode: T.string,
|
|
79
|
+
credentials: T.string,
|
|
80
|
+
cache: T.string,
|
|
81
|
+
redirect: T.string,
|
|
82
|
+
referrer: T.string,
|
|
83
|
+
integrity: T.string,
|
|
84
|
+
signal: T.unknown,
|
|
85
|
+
clone: T.fnSig([], T.unknown)
|
|
86
|
+
});
|
|
87
|
+
const URLSearchParams = T.object({
|
|
88
|
+
append: T.fnSig([T.string, T.string], T.undefined),
|
|
89
|
+
delete: T.fnSig([T.string], T.undefined),
|
|
90
|
+
get: T.fnSig([T.string], T.union(T.string, T.null)),
|
|
91
|
+
getAll: T.fnSig([T.string], T.array(T.string)),
|
|
92
|
+
has: T.fnSig([T.string], T.boolean),
|
|
93
|
+
set: T.fnSig([T.string, T.string], T.undefined),
|
|
94
|
+
sort: T.fnSig([], T.undefined),
|
|
95
|
+
toString: T.fnSig([], T.string),
|
|
96
|
+
entries: T.fnSig([], T.unknown),
|
|
97
|
+
keys: T.fnSig([], T.unknown),
|
|
98
|
+
values: T.fnSig([], T.unknown),
|
|
99
|
+
forEach: T.fnSig([T.unknown], T.undefined),
|
|
100
|
+
size: T.number
|
|
101
|
+
});
|
|
102
|
+
const URLObj = T.object({
|
|
103
|
+
href: T.string,
|
|
104
|
+
origin: T.string,
|
|
105
|
+
protocol: T.string,
|
|
106
|
+
username: T.string,
|
|
107
|
+
password: T.string,
|
|
108
|
+
host: T.string,
|
|
109
|
+
hostname: T.string,
|
|
110
|
+
port: T.string,
|
|
111
|
+
pathname: T.string,
|
|
112
|
+
search: T.string,
|
|
113
|
+
searchParams: URLSearchParams,
|
|
114
|
+
hash: T.string,
|
|
115
|
+
toString: T.fnSig([], T.string),
|
|
116
|
+
toJSON: T.fnSig([], T.string)
|
|
117
|
+
});
|
|
118
|
+
const AbortController = T.object({
|
|
119
|
+
signal: T.unknown,
|
|
120
|
+
abort: T.fnSig([], T.undefined)
|
|
121
|
+
});
|
|
122
|
+
const Storage = T.object({
|
|
123
|
+
getItem: T.fnSig([T.string], T.union(T.string, T.null)),
|
|
124
|
+
setItem: T.fnSig([T.string, T.string], T.undefined),
|
|
125
|
+
removeItem: T.fnSig([T.string], T.undefined),
|
|
126
|
+
clear: T.fnSig([], T.undefined),
|
|
127
|
+
key: T.fnSig([T.number], T.union(T.string, T.null)),
|
|
128
|
+
length: T.number
|
|
129
|
+
});
|
|
130
|
+
const EventTarget = T.object({
|
|
131
|
+
addEventListener: T.fnSig([T.string, T.unknown], T.undefined),
|
|
132
|
+
removeEventListener: T.fnSig([T.string, T.unknown], T.undefined),
|
|
133
|
+
dispatchEvent: T.fnSig([T.unknown], T.boolean)
|
|
134
|
+
});
|
|
135
|
+
const webGlobals = {
|
|
136
|
+
// --- Fetch API ---
|
|
137
|
+
fetch: T.fnSig([T.union(T.string, Request)], T.promise(Response)),
|
|
138
|
+
Request: T.fnSig([T.string, T.unknown], Request),
|
|
139
|
+
Response: T.object({
|
|
140
|
+
json: T.fnSig([T.unknown], Response),
|
|
141
|
+
redirect: T.fnSig([T.string, T.number], Response),
|
|
142
|
+
error: T.fnSig([], Response)
|
|
143
|
+
}),
|
|
144
|
+
Headers: T.fnSig([T.unknown], Headers),
|
|
145
|
+
// --- URL ---
|
|
146
|
+
URL: T.fnSig([T.string, T.string], URLObj, T.instanceOf("TypeError"), (args) => {
|
|
147
|
+
const href = litStr(args[0]);
|
|
148
|
+
const base = args[1] !== void 0 ? litStr(args[1]) : void 0;
|
|
149
|
+
if (href === void 0) return void 0;
|
|
150
|
+
try {
|
|
151
|
+
const url = base !== void 0 ? new URL(href, base) : new URL(href);
|
|
152
|
+
return makeURLObj(url);
|
|
153
|
+
} catch {
|
|
154
|
+
return void 0;
|
|
155
|
+
}
|
|
156
|
+
}),
|
|
157
|
+
URLSearchParams: T.fnSig([T.unknown], URLSearchParams),
|
|
158
|
+
// --- Timers ---
|
|
159
|
+
setTimeout: T.fnSig([T.unknown, T.number], T.number),
|
|
160
|
+
setInterval: T.fnSig([T.unknown, T.number], T.number),
|
|
161
|
+
clearTimeout: T.fnSig([T.number], T.undefined),
|
|
162
|
+
clearInterval: T.fnSig([T.number], T.undefined),
|
|
163
|
+
queueMicrotask: T.fnSig([T.unknown], T.undefined),
|
|
164
|
+
requestAnimationFrame: T.fnSig([T.unknown], T.number),
|
|
165
|
+
cancelAnimationFrame: T.fnSig([T.number], T.undefined),
|
|
166
|
+
// --- Abort ---
|
|
167
|
+
AbortController: T.fnSig([], AbortController),
|
|
168
|
+
AbortSignal: T.object({
|
|
169
|
+
abort: T.fnSig([], T.unknown),
|
|
170
|
+
timeout: T.fnSig([T.number], T.unknown)
|
|
171
|
+
}),
|
|
172
|
+
// --- Encoding ---
|
|
173
|
+
atob: T.fnSig([T.string], T.string, T.never, (args) => {
|
|
174
|
+
const s = litStr(args[0]);
|
|
175
|
+
if (s === void 0) return void 0;
|
|
176
|
+
try {
|
|
177
|
+
return T.literal(atob(s));
|
|
178
|
+
} catch {
|
|
179
|
+
return void 0;
|
|
180
|
+
}
|
|
181
|
+
}),
|
|
182
|
+
btoa: T.fnSig([T.string], T.string, T.never, (args) => {
|
|
183
|
+
const s = litStr(args[0]);
|
|
184
|
+
if (s === void 0) return void 0;
|
|
185
|
+
try {
|
|
186
|
+
return T.literal(btoa(s));
|
|
187
|
+
} catch {
|
|
188
|
+
return void 0;
|
|
189
|
+
}
|
|
190
|
+
}),
|
|
191
|
+
TextEncoder: T.fnSig([], T.object({
|
|
192
|
+
encode: T.fnSig([T.string], T.unknown),
|
|
193
|
+
encodeInto: T.fnSig([T.string, T.unknown], T.unknown)
|
|
194
|
+
})),
|
|
195
|
+
TextDecoder: T.fnSig([T.string], T.object({
|
|
196
|
+
decode: T.fnSig([T.unknown], T.string),
|
|
197
|
+
encoding: T.string,
|
|
198
|
+
fatal: T.boolean,
|
|
199
|
+
ignoreBOM: T.boolean
|
|
200
|
+
})),
|
|
201
|
+
// --- Storage ---
|
|
202
|
+
localStorage: Storage,
|
|
203
|
+
sessionStorage: Storage,
|
|
204
|
+
// --- DOM (minimal) ---
|
|
205
|
+
document: T.object({
|
|
206
|
+
getElementById: T.fnSig([T.string], T.union(T.unknown, T.null)),
|
|
207
|
+
querySelector: T.fnSig([T.string], T.union(T.unknown, T.null)),
|
|
208
|
+
querySelectorAll: T.fnSig([T.string], T.unknown),
|
|
209
|
+
createElement: T.fnSig([T.string], T.unknown),
|
|
210
|
+
createTextNode: T.fnSig([T.string], T.unknown),
|
|
211
|
+
body: T.unknown,
|
|
212
|
+
head: T.unknown,
|
|
213
|
+
documentElement: T.unknown,
|
|
214
|
+
title: T.string,
|
|
215
|
+
cookie: T.string,
|
|
216
|
+
readyState: T.string,
|
|
217
|
+
addEventListener: T.fnSig([T.string, T.unknown], T.undefined),
|
|
218
|
+
removeEventListener: T.fnSig([T.string, T.unknown], T.undefined)
|
|
219
|
+
}),
|
|
220
|
+
// --- Window ---
|
|
221
|
+
window: T.unknown,
|
|
222
|
+
self: T.unknown,
|
|
223
|
+
navigator: T.object({
|
|
224
|
+
userAgent: T.string,
|
|
225
|
+
language: T.string,
|
|
226
|
+
languages: T.array(T.string),
|
|
227
|
+
onLine: T.boolean,
|
|
228
|
+
platform: T.string,
|
|
229
|
+
clipboard: T.object({
|
|
230
|
+
readText: T.fnSig([], T.promise(T.string)),
|
|
231
|
+
writeText: T.fnSig([T.string], T.promise(T.undefined))
|
|
232
|
+
})
|
|
233
|
+
}),
|
|
234
|
+
location: T.object({
|
|
235
|
+
href: T.string,
|
|
236
|
+
origin: T.string,
|
|
237
|
+
protocol: T.string,
|
|
238
|
+
host: T.string,
|
|
239
|
+
hostname: T.string,
|
|
240
|
+
port: T.string,
|
|
241
|
+
pathname: T.string,
|
|
242
|
+
search: T.string,
|
|
243
|
+
hash: T.string,
|
|
244
|
+
assign: T.fnSig([T.string], T.undefined),
|
|
245
|
+
replace: T.fnSig([T.string], T.undefined),
|
|
246
|
+
reload: T.fnSig([], T.undefined)
|
|
247
|
+
}),
|
|
248
|
+
history: T.object({
|
|
249
|
+
length: T.number,
|
|
250
|
+
state: T.unknown,
|
|
251
|
+
back: T.fnSig([], T.undefined),
|
|
252
|
+
forward: T.fnSig([], T.undefined),
|
|
253
|
+
go: T.fnSig([T.number], T.undefined),
|
|
254
|
+
pushState: T.fnSig([T.unknown, T.string, T.string], T.undefined),
|
|
255
|
+
replaceState: T.fnSig([T.unknown, T.string, T.string], T.undefined)
|
|
256
|
+
}),
|
|
257
|
+
// --- Events ---
|
|
258
|
+
EventTarget: T.fnSig([], EventTarget),
|
|
259
|
+
Event: T.fnSig([T.string, T.unknown], T.object({
|
|
260
|
+
type: T.string,
|
|
261
|
+
target: T.union(T.unknown, T.null),
|
|
262
|
+
currentTarget: T.union(T.unknown, T.null),
|
|
263
|
+
bubbles: T.boolean,
|
|
264
|
+
cancelable: T.boolean,
|
|
265
|
+
defaultPrevented: T.boolean,
|
|
266
|
+
preventDefault: T.fnSig([], T.undefined),
|
|
267
|
+
stopPropagation: T.fnSig([], T.undefined),
|
|
268
|
+
stopImmediatePropagation: T.fnSig([], T.undefined)
|
|
269
|
+
})),
|
|
270
|
+
CustomEvent: T.fnSig([T.string, T.unknown], T.unknown),
|
|
271
|
+
// --- Structured clone ---
|
|
272
|
+
structuredClone: T.fnSig([T.unknown], T.unknown),
|
|
273
|
+
// --- Performance ---
|
|
274
|
+
performance: T.object({
|
|
275
|
+
now: T.fnSig([], T.number),
|
|
276
|
+
mark: T.fnSig([T.string], T.undefined),
|
|
277
|
+
measure: T.fnSig([T.string, T.string, T.string], T.unknown),
|
|
278
|
+
getEntriesByName: T.fnSig([T.string], T.array(T.unknown)),
|
|
279
|
+
getEntriesByType: T.fnSig([T.string], T.array(T.unknown)),
|
|
280
|
+
clearMarks: T.fnSig([], T.undefined),
|
|
281
|
+
clearMeasures: T.fnSig([], T.undefined),
|
|
282
|
+
timeOrigin: T.number
|
|
283
|
+
}),
|
|
284
|
+
// --- Crypto ---
|
|
285
|
+
crypto: T.object({
|
|
286
|
+
randomUUID: T.fnSig([], T.string),
|
|
287
|
+
getRandomValues: T.fnSig([T.unknown], T.unknown),
|
|
288
|
+
subtle: T.object({
|
|
289
|
+
digest: T.fnSig([T.string, T.unknown], T.promise(T.unknown)),
|
|
290
|
+
encrypt: T.fnSig([T.unknown, T.unknown, T.unknown], T.promise(T.unknown)),
|
|
291
|
+
decrypt: T.fnSig([T.unknown, T.unknown, T.unknown], T.promise(T.unknown)),
|
|
292
|
+
sign: T.fnSig([T.unknown, T.unknown, T.unknown], T.promise(T.unknown)),
|
|
293
|
+
verify: T.fnSig([T.unknown, T.unknown, T.unknown, T.unknown], T.promise(T.boolean)),
|
|
294
|
+
generateKey: T.fnSig([T.unknown, T.boolean, T.array(T.string)], T.promise(T.unknown)),
|
|
295
|
+
importKey: T.fnSig([T.string, T.unknown, T.unknown, T.boolean, T.array(T.string)], T.promise(T.unknown)),
|
|
296
|
+
exportKey: T.fnSig([T.string, T.unknown], T.promise(T.unknown))
|
|
297
|
+
})
|
|
298
|
+
})
|
|
299
|
+
};
|
|
300
|
+
return {
|
|
301
|
+
globals: { ...esEnv.globals, ...webGlobals }
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
export {
|
|
305
|
+
defineEnv2 as defineEnv
|
|
306
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nudojs/env",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "ES standard, Web platform, and Node.js API type definitions for the Nudo inference engine",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -20,9 +20,9 @@
|
|
|
20
20
|
"registry": "https://registry.npmjs.org"
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@nudojs/core": "
|
|
23
|
+
"@nudojs/core": "0.3.0"
|
|
24
24
|
},
|
|
25
25
|
"scripts": {
|
|
26
26
|
"build": "tsup src/es.ts src/web.ts src/node.ts --format esm --dts"
|
|
27
27
|
}
|
|
28
|
-
}
|
|
28
|
+
}
|