@nudojs/env 0.2.4 → 0.2.5

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/web.d.ts CHANGED
@@ -1,6 +1,10 @@
1
1
  import { EnvDefinition } from './es.js';
2
2
  import '@nudojs/core';
3
3
 
4
+ /**
5
+ * Web env:es globals + Fetch/URL/DOM(Abs 原生)。
6
+ */
7
+
4
8
  declare function defineEnv(): EnvDefinition;
5
9
 
6
10
  export { EnvDefinition, defineEnv };
package/dist/web.js CHANGED
@@ -1,299 +1,354 @@
1
1
  import {
2
- defineEnv
3
- } from "./chunk-VBTQ36SR.js";
2
+ arrOf,
3
+ defineEnv,
4
+ envFn,
5
+ nullLit,
6
+ objAbs,
7
+ prim,
8
+ promiseOf,
9
+ undef,
10
+ unionOf
11
+ } from "./chunk-BPVYU23Z.js";
4
12
 
5
13
  // 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;
14
+ import { litValue, strLit, numLit } from "@nudojs/core";
15
+ function absStr(a) {
16
+ if (!a) return void 0;
17
+ const v = litValue(a);
18
+ return typeof v === "string" ? v : void 0;
9
19
  }
10
20
  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)
21
+ return objAbs({
22
+ href: strLit(url.href),
23
+ origin: strLit(url.origin),
24
+ protocol: strLit(url.protocol),
25
+ username: strLit(url.username),
26
+ password: strLit(url.password),
27
+ host: strLit(url.host),
28
+ hostname: strLit(url.hostname),
29
+ port: strLit(url.port),
30
+ pathname: strLit(url.pathname),
31
+ search: strLit(url.search),
32
+ searchParams: objAbs({
33
+ append: envFn([prim.str(), prim.str()], undef()),
34
+ delete: envFn([prim.str()], undef()),
35
+ get: envFn([prim.str()], unionOf(prim.str(), nullLit())),
36
+ getAll: envFn([prim.str()], arrOf(prim.str())),
37
+ has: envFn([prim.str()], prim.bool()),
38
+ set: envFn([prim.str(), prim.str()], undef()),
39
+ sort: envFn([], undef()),
40
+ toString: envFn([], prim.str(), () => strLit(url.searchParams.toString())),
41
+ entries: envFn([], prim.unknown),
42
+ keys: envFn([], prim.unknown),
43
+ values: envFn([], prim.unknown),
44
+ forEach: envFn([prim.unknown], undef()),
45
+ size: numLit(url.searchParams.size)
36
46
  }),
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))
47
+ hash: strLit(url.hash),
48
+ toString: envFn([], prim.str(), () => strLit(url.href)),
49
+ toJSON: envFn([], prim.str(), () => strLit(url.href))
40
50
  });
41
51
  }
42
52
  function defineEnv2() {
43
53
  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
+ const Headers = objAbs({
55
+ append: envFn([prim.str(), prim.str()], undef()),
56
+ delete: envFn([prim.str()], undef()),
57
+ get: envFn([prim.str()], unionOf(prim.str(), nullLit())),
58
+ has: envFn([prim.str()], prim.bool()),
59
+ set: envFn([prim.str(), prim.str()], undef()),
60
+ forEach: envFn([prim.unknown], undef()),
61
+ entries: envFn([], prim.unknown),
62
+ keys: envFn([], prim.unknown),
63
+ values: envFn([], prim.unknown)
54
64
  });
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
+ const bodySlots = {
66
+ json: envFn([], promiseOf(prim.unknown)),
67
+ text: envFn([], promiseOf(prim.str())),
68
+ arrayBuffer: envFn([], promiseOf(prim.unknown)),
69
+ blob: envFn([], promiseOf(prim.unknown)),
70
+ formData: envFn([], promiseOf(prim.unknown)),
71
+ clone: envFn([], prim.unknown),
72
+ ok: prim.bool(),
73
+ status: prim.num(),
74
+ statusText: prim.str(),
65
75
  headers: Headers,
66
- url: T.string,
67
- redirected: T.boolean,
68
- type: T.string,
69
- bodyUsed: T.boolean
76
+ url: prim.str(),
77
+ redirected: prim.bool(),
78
+ type: prim.str(),
79
+ bodyUsed: prim.bool()
70
80
  };
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)
81
+ const Response = objAbs(bodySlots);
82
+ const Request = objAbs({
83
+ ...bodySlots,
84
+ method: prim.str(),
85
+ url: prim.str(),
86
+ body: unionOf(prim.unknown, nullLit()),
87
+ mode: prim.str(),
88
+ credentials: prim.str(),
89
+ cache: prim.str(),
90
+ redirect: prim.str(),
91
+ referrer: prim.str(),
92
+ integrity: prim.str(),
93
+ signal: prim.unknown
86
94
  });
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
95
+ const URLSearchParams = objAbs({
96
+ append: envFn([prim.str(), prim.str()], undef()),
97
+ delete: envFn([prim.str()], undef()),
98
+ get: envFn([prim.str()], unionOf(prim.str(), nullLit())),
99
+ getAll: envFn([prim.str()], arrOf(prim.str())),
100
+ has: envFn([prim.str()], prim.bool()),
101
+ set: envFn([prim.str(), prim.str()], undef()),
102
+ sort: envFn([], undef()),
103
+ toString: envFn([], prim.str()),
104
+ entries: envFn([], prim.unknown),
105
+ keys: envFn([], prim.unknown),
106
+ values: envFn([], prim.unknown),
107
+ forEach: envFn([prim.unknown], undef()),
108
+ size: prim.num()
101
109
  });
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,
110
+ const URLObj = objAbs({
111
+ href: prim.str(),
112
+ origin: prim.str(),
113
+ protocol: prim.str(),
114
+ username: prim.str(),
115
+ password: prim.str(),
116
+ host: prim.str(),
117
+ hostname: prim.str(),
118
+ port: prim.str(),
119
+ pathname: prim.str(),
120
+ search: prim.str(),
113
121
  searchParams: URLSearchParams,
114
- hash: T.string,
115
- toString: T.fnSig([], T.string),
116
- toJSON: T.fnSig([], T.string)
122
+ hash: prim.str(),
123
+ toString: envFn([], prim.str()),
124
+ toJSON: envFn([], prim.str())
117
125
  });
118
- const AbortController = T.object({
119
- signal: T.unknown,
120
- abort: T.fnSig([], T.undefined)
126
+ const AbortController = objAbs({
127
+ signal: prim.unknown,
128
+ abort: envFn([], undef())
121
129
  });
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
130
+ const Storage = objAbs({
131
+ getItem: envFn([prim.str()], unionOf(prim.str(), nullLit())),
132
+ setItem: envFn([prim.str(), prim.str()], undef()),
133
+ removeItem: envFn([prim.str()], undef()),
134
+ clear: envFn([], undef()),
135
+ key: envFn([prim.num()], unionOf(prim.str(), nullLit())),
136
+ length: prim.num()
129
137
  });
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)
138
+ const EventTarget = objAbs({
139
+ addEventListener: envFn([prim.str(), prim.unknown], undef()),
140
+ removeEventListener: envFn([prim.str(), prim.unknown], undef()),
141
+ dispatchEvent: envFn([prim.unknown], prim.bool())
134
142
  });
143
+ const atobImpl = (args) => {
144
+ const v = args[0] ? litValue(args[0]) : void 0;
145
+ if (typeof v !== "string") return void 0;
146
+ try {
147
+ return strLit(atob(v));
148
+ } catch {
149
+ return void 0;
150
+ }
151
+ };
152
+ const btoaImpl = (args) => {
153
+ const v = args[0] ? litValue(args[0]) : void 0;
154
+ if (typeof v !== "string") return void 0;
155
+ try {
156
+ return strLit(btoa(v));
157
+ } catch {
158
+ return void 0;
159
+ }
160
+ };
161
+ const urlCtorImpl = (args) => {
162
+ const href = absStr(args[0]);
163
+ const base = args[1] !== void 0 ? absStr(args[1]) : void 0;
164
+ if (href === void 0) return void 0;
165
+ try {
166
+ const url = base !== void 0 ? new URL(href, base) : new URL(href);
167
+ return makeURLObj(url);
168
+ } catch {
169
+ return void 0;
170
+ }
171
+ };
135
172
  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
- }
173
+ fetch: envFn([unionOf(prim.str(), Request)], promiseOf(Response)),
174
+ Request: envFn([prim.str(), prim.unknown], Request),
175
+ Response: objAbs({
176
+ json: envFn([prim.unknown], Response),
177
+ redirect: envFn([prim.str(), prim.num()], Response),
178
+ error: envFn([], Response)
156
179
  }),
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)
180
+ Headers: envFn([prim.unknown], Headers),
181
+ URL: envFn([prim.str(), prim.str()], URLObj, urlCtorImpl),
182
+ URLSearchParams: envFn([prim.unknown], URLSearchParams),
183
+ setTimeout: envFn([prim.unknown, prim.num()], prim.num()),
184
+ setInterval: envFn([prim.unknown, prim.num()], prim.num()),
185
+ clearTimeout: envFn([prim.num()], undef()),
186
+ clearInterval: envFn([prim.num()], undef()),
187
+ queueMicrotask: envFn([prim.unknown], undef()),
188
+ requestAnimationFrame: envFn([prim.unknown], prim.num()),
189
+ cancelAnimationFrame: envFn([prim.num()], undef()),
190
+ AbortController: envFn([], AbortController),
191
+ AbortSignal: objAbs({
192
+ abort: envFn([], prim.unknown),
193
+ timeout: envFn([prim.num()], prim.unknown)
171
194
  }),
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 ---
195
+ atob: envFn([prim.str()], prim.str(), atobImpl),
196
+ btoa: envFn([prim.str()], prim.str(), btoaImpl),
197
+ TextEncoder: envFn(
198
+ [],
199
+ objAbs({
200
+ encode: envFn([prim.str()], prim.unknown),
201
+ encodeInto: envFn([prim.str(), prim.unknown], prim.unknown)
202
+ })
203
+ ),
204
+ TextDecoder: envFn(
205
+ [prim.str()],
206
+ objAbs({
207
+ decode: envFn([prim.unknown], prim.str()),
208
+ encoding: prim.str(),
209
+ fatal: prim.bool(),
210
+ ignoreBOM: prim.bool()
211
+ })
212
+ ),
202
213
  localStorage: Storage,
203
214
  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)
215
+ document: objAbs({
216
+ getElementById: envFn(
217
+ [prim.str()],
218
+ unionOf(prim.unknown, nullLit())
219
+ ),
220
+ querySelector: envFn(
221
+ [prim.str()],
222
+ unionOf(prim.unknown, nullLit())
223
+ ),
224
+ querySelectorAll: envFn([prim.str()], prim.unknown),
225
+ createElement: envFn([prim.str()], prim.unknown),
226
+ createTextNode: envFn([prim.str()], prim.unknown),
227
+ body: prim.unknown,
228
+ head: prim.unknown,
229
+ documentElement: prim.unknown,
230
+ title: prim.str(),
231
+ cookie: prim.str(),
232
+ readyState: prim.str(),
233
+ addEventListener: envFn([prim.str(), prim.unknown], undef()),
234
+ removeEventListener: envFn([prim.str(), prim.unknown], undef())
219
235
  }),
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))
236
+ window: prim.unknown,
237
+ self: prim.unknown,
238
+ navigator: objAbs({
239
+ userAgent: prim.str(),
240
+ language: prim.str(),
241
+ languages: arrOf(prim.str()),
242
+ onLine: prim.bool(),
243
+ platform: prim.str(),
244
+ clipboard: objAbs({
245
+ readText: envFn([], promiseOf(prim.str())),
246
+ writeText: envFn([prim.str()], promiseOf(undef()))
232
247
  })
233
248
  }),
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)
249
+ location: objAbs({
250
+ href: prim.str(),
251
+ origin: prim.str(),
252
+ protocol: prim.str(),
253
+ host: prim.str(),
254
+ hostname: prim.str(),
255
+ port: prim.str(),
256
+ pathname: prim.str(),
257
+ search: prim.str(),
258
+ hash: prim.str(),
259
+ assign: envFn([prim.str()], undef()),
260
+ replace: envFn([prim.str()], undef()),
261
+ reload: envFn([], undef())
247
262
  }),
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)
263
+ history: objAbs({
264
+ length: prim.num(),
265
+ state: prim.unknown,
266
+ back: envFn([], undef()),
267
+ forward: envFn([], undef()),
268
+ go: envFn([prim.num()], undef()),
269
+ pushState: envFn(
270
+ [prim.unknown, prim.str(), prim.str()],
271
+ undef()
272
+ ),
273
+ replaceState: envFn(
274
+ [prim.unknown, prim.str(), prim.str()],
275
+ undef()
276
+ )
256
277
  }),
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
278
+ EventTarget: envFn([], EventTarget),
279
+ Event: envFn(
280
+ [prim.str(), prim.unknown],
281
+ objAbs({
282
+ type: prim.str(),
283
+ target: unionOf(prim.unknown, nullLit()),
284
+ currentTarget: unionOf(prim.unknown, nullLit()),
285
+ bubbles: prim.bool(),
286
+ cancelable: prim.bool(),
287
+ defaultPrevented: prim.bool(),
288
+ preventDefault: envFn([], undef()),
289
+ stopPropagation: envFn([], undef()),
290
+ stopImmediatePropagation: envFn([], undef())
291
+ })
292
+ ),
293
+ CustomEvent: envFn([prim.str(), prim.unknown], prim.unknown),
294
+ structuredClone: envFn([prim.unknown], prim.unknown),
295
+ performance: objAbs({
296
+ now: envFn([], prim.num()),
297
+ mark: envFn([prim.str()], undef()),
298
+ measure: envFn([prim.str(), prim.str(), prim.str()], prim.unknown),
299
+ getEntriesByName: envFn([prim.str()], arrOf(prim.unknown)),
300
+ getEntriesByType: envFn([prim.str()], arrOf(prim.unknown)),
301
+ clearMarks: envFn([], undef()),
302
+ clearMeasures: envFn([], undef()),
303
+ timeOrigin: prim.num()
283
304
  }),
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))
305
+ crypto: objAbs({
306
+ randomUUID: envFn([], prim.str()),
307
+ getRandomValues: envFn([prim.unknown], prim.unknown),
308
+ subtle: objAbs({
309
+ digest: envFn(
310
+ [prim.str(), prim.unknown],
311
+ promiseOf(prim.unknown)
312
+ ),
313
+ encrypt: envFn(
314
+ [prim.unknown, prim.unknown, prim.unknown],
315
+ promiseOf(prim.unknown)
316
+ ),
317
+ decrypt: envFn(
318
+ [prim.unknown, prim.unknown, prim.unknown],
319
+ promiseOf(prim.unknown)
320
+ ),
321
+ sign: envFn(
322
+ [prim.unknown, prim.unknown, prim.unknown],
323
+ promiseOf(prim.unknown)
324
+ ),
325
+ verify: envFn(
326
+ [
327
+ prim.unknown,
328
+ prim.unknown,
329
+ prim.unknown,
330
+ prim.unknown
331
+ ],
332
+ promiseOf(prim.bool())
333
+ ),
334
+ generateKey: envFn(
335
+ [prim.unknown, prim.bool(), arrOf(prim.str())],
336
+ promiseOf(prim.unknown)
337
+ ),
338
+ importKey: envFn(
339
+ [
340
+ prim.str(),
341
+ prim.unknown,
342
+ prim.unknown,
343
+ prim.bool(),
344
+ arrOf(prim.str())
345
+ ],
346
+ promiseOf(prim.unknown)
347
+ ),
348
+ exportKey: envFn(
349
+ [prim.str(), prim.unknown],
350
+ promiseOf(prim.unknown)
351
+ )
297
352
  })
298
353
  })
299
354
  };