k99 0.6.0-alpha.0 → 0.6.0-alpha.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/LICENSE +1 -1
- package/browser/index.d.ts +4 -4
- package/browser/index.js +8 -109
- package/browser/index.min.js +3 -3
- package/browser/index.min.mjs +3 -3
- package/browser/index.mjs +8 -107
- package/cli/index.d.ts +19 -19
- package/cli/index.mjs +20 -32
- package/cli.mjs +2 -2
- package/index.d.ts +165 -160
- package/index.js +1042 -1814
- package/index.min.js +3 -3
- package/index.min.mjs +3 -3
- package/index.mjs +829 -1603
- package/node/index.d.ts +18 -11
- package/node/index.mjs +47 -234
- package/package.json +2 -2
- package/services/index.d.ts +6 -8
- package/services/index.js +10 -45
- package/services/index.min.js +3 -3
- package/services/index.min.mjs +3 -3
- package/services/index.mjs +10 -43
- package/starter.mjs +2 -2
package/LICENSE
CHANGED
package/browser/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* k99 v0.6.0-alpha.
|
|
3
|
-
* (c) 2019-
|
|
2
|
+
* k99 v0.6.0-alpha.1
|
|
3
|
+
* (c) 2019-2023 猛火Fierflame
|
|
4
4
|
* @license MIT
|
|
5
5
|
*/
|
|
6
|
-
import { Log, Asset, Setting, K99Request, K99Response
|
|
6
|
+
import { Log, Asset, Setting, K99Request, K99Response } from 'k99';
|
|
7
7
|
|
|
8
8
|
declare function createCacheApis(name?: string, { assets, log, settings, }?: {
|
|
9
9
|
assets?: string;
|
|
@@ -33,6 +33,6 @@ declare function createRequest(request: Request, searchParser?: (search: string)
|
|
|
33
33
|
|
|
34
34
|
declare function createResponse(target: K99Response): Response;
|
|
35
35
|
|
|
36
|
-
declare function createFetch(
|
|
36
|
+
declare function createFetch(run: (request: K99Request) => Promise<K99Response | null>, notFound?: null | ((request: Request) => Response | Promise<Response>), searchParser?: (search: string) => Record<string, string | string[]>): (input: RequestInfo, init?: RequestInit) => Promise<Response>;
|
|
37
37
|
|
|
38
38
|
export { createBufferRead, createCacheApis, createFetch, createIndexedApis, createRequest, createResponse, createStreamRead };
|
package/browser/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* k99 v0.6.0-alpha.
|
|
3
|
-
* (c) 2019-
|
|
2
|
+
* k99 v0.6.0-alpha.1
|
|
3
|
+
* (c) 2019-2023 猛火Fierflame
|
|
4
4
|
* @license MIT
|
|
5
5
|
*/
|
|
6
6
|
(function (global, factory) {
|
|
@@ -14,59 +14,45 @@
|
|
|
14
14
|
async read(path) {
|
|
15
15
|
path = `${root}${path}`;
|
|
16
16
|
const response = await cache.match(path);
|
|
17
|
-
|
|
18
17
|
if (!response) {
|
|
19
18
|
return undefined;
|
|
20
19
|
}
|
|
21
|
-
|
|
22
20
|
return response.json();
|
|
23
21
|
},
|
|
24
|
-
|
|
25
22
|
async write(path, cfg) {
|
|
26
23
|
path = `${root}${path}`;
|
|
27
|
-
|
|
28
24
|
if (cfg === undefined) {
|
|
29
25
|
return cache.delete(path);
|
|
30
26
|
}
|
|
31
|
-
|
|
32
27
|
await cache.put(path, new Response(JSON.stringify(cfg)));
|
|
33
28
|
return true;
|
|
34
29
|
}
|
|
35
|
-
|
|
36
30
|
};
|
|
37
31
|
}
|
|
38
|
-
|
|
39
32
|
function createAssetsApi$1(cache, root) {
|
|
40
33
|
return {
|
|
41
34
|
async read(path) {
|
|
42
35
|
path = `${root}${path}`;
|
|
43
36
|
const response = await cache.match(path);
|
|
44
|
-
|
|
45
37
|
if (!response) {
|
|
46
38
|
return null;
|
|
47
39
|
}
|
|
48
|
-
|
|
49
40
|
return new Uint8Array(await response.arrayBuffer());
|
|
50
41
|
},
|
|
51
|
-
|
|
52
42
|
async write(path, data) {
|
|
53
43
|
path = `${root}${path}`;
|
|
54
44
|
await cache.put(path, new Response(data));
|
|
55
45
|
return true;
|
|
56
46
|
},
|
|
57
|
-
|
|
58
47
|
async delete(path) {
|
|
59
48
|
path = `${root}${path}`;
|
|
60
49
|
return cache.delete(path);
|
|
61
50
|
},
|
|
62
|
-
|
|
63
51
|
stat() {
|
|
64
52
|
return null;
|
|
65
53
|
}
|
|
66
|
-
|
|
67
54
|
};
|
|
68
55
|
}
|
|
69
|
-
|
|
70
56
|
function createLogApi$1(cache, root) {
|
|
71
57
|
return {
|
|
72
58
|
async read(path) {
|
|
@@ -74,7 +60,6 @@
|
|
|
74
60
|
const response = await cache.match(path);
|
|
75
61
|
return response ? response.text() : '';
|
|
76
62
|
},
|
|
77
|
-
|
|
78
63
|
async write(path, log) {
|
|
79
64
|
path = `${root}${path}`;
|
|
80
65
|
const response = await cache.match(path);
|
|
@@ -82,46 +67,36 @@
|
|
|
82
67
|
await cache.put(path, new Response(text));
|
|
83
68
|
return true;
|
|
84
69
|
},
|
|
85
|
-
|
|
86
70
|
async clear(path) {
|
|
87
71
|
path = `${root}${path}`;
|
|
88
72
|
await cache.delete(path);
|
|
89
73
|
}
|
|
90
|
-
|
|
91
74
|
};
|
|
92
75
|
}
|
|
93
|
-
|
|
94
76
|
async function createCacheApis(name = 'k99', {
|
|
95
77
|
assets = '/k99/assets',
|
|
96
78
|
log = '/k99/log',
|
|
97
79
|
settings = '/k99/settings'
|
|
98
80
|
} = {}) {
|
|
99
81
|
const cache = await caches.open(name);
|
|
100
|
-
|
|
101
82
|
if (assets[assets.length - 1] !== '/') {
|
|
102
83
|
assets = `${assets}/`;
|
|
103
84
|
}
|
|
104
|
-
|
|
105
85
|
if (assets[0] !== '/') {
|
|
106
86
|
assets = `/${assets}`;
|
|
107
87
|
}
|
|
108
|
-
|
|
109
88
|
if (log[log.length - 1] !== '/') {
|
|
110
89
|
log = `${log}/`;
|
|
111
90
|
}
|
|
112
|
-
|
|
113
91
|
if (log[0] !== '/') {
|
|
114
92
|
log = `/${log}`;
|
|
115
93
|
}
|
|
116
|
-
|
|
117
94
|
if (settings[log.length - 1] !== '/') {
|
|
118
95
|
settings = `${settings}/`;
|
|
119
96
|
}
|
|
120
|
-
|
|
121
97
|
if (settings[0] !== '/') {
|
|
122
98
|
settings = `/${settings}`;
|
|
123
99
|
}
|
|
124
|
-
|
|
125
100
|
return {
|
|
126
101
|
logApi: createLogApi$1(cache, log),
|
|
127
102
|
assetsApi: createAssetsApi$1(cache, assets),
|
|
@@ -138,7 +113,6 @@
|
|
|
138
113
|
request.addEventListener('success', () => r(request.result || null));
|
|
139
114
|
});
|
|
140
115
|
},
|
|
141
|
-
|
|
142
116
|
async write(path, data) {
|
|
143
117
|
return new Promise(r => {
|
|
144
118
|
const request = db.transaction(store, 'readwrite').objectStore(store).add(data, path);
|
|
@@ -146,7 +120,6 @@
|
|
|
146
120
|
request.addEventListener('success', () => r(true));
|
|
147
121
|
});
|
|
148
122
|
},
|
|
149
|
-
|
|
150
123
|
async delete(path) {
|
|
151
124
|
return new Promise(r => {
|
|
152
125
|
const request = db.transaction(store, 'readwrite').objectStore(store).delete(path);
|
|
@@ -154,14 +127,11 @@
|
|
|
154
127
|
request.addEventListener('success', () => r(true));
|
|
155
128
|
});
|
|
156
129
|
},
|
|
157
|
-
|
|
158
130
|
stat() {
|
|
159
131
|
return null;
|
|
160
132
|
}
|
|
161
|
-
|
|
162
133
|
};
|
|
163
134
|
}
|
|
164
|
-
|
|
165
135
|
function createSettingsApi(db, store) {
|
|
166
136
|
return {
|
|
167
137
|
async read(path) {
|
|
@@ -171,7 +141,6 @@
|
|
|
171
141
|
request.addEventListener('success', () => r(request.result || null));
|
|
172
142
|
});
|
|
173
143
|
},
|
|
174
|
-
|
|
175
144
|
async write(path, cfg) {
|
|
176
145
|
if (cfg === null || cfg === undefined) {
|
|
177
146
|
return new Promise(r => {
|
|
@@ -180,17 +149,14 @@
|
|
|
180
149
|
request.addEventListener('success', () => r(true));
|
|
181
150
|
});
|
|
182
151
|
}
|
|
183
|
-
|
|
184
152
|
return new Promise(r => {
|
|
185
153
|
const request = db.transaction(store, 'readwrite').objectStore(store).add(cfg, path);
|
|
186
154
|
request.addEventListener('error', () => r(false));
|
|
187
155
|
request.addEventListener('success', () => r(true));
|
|
188
156
|
});
|
|
189
157
|
}
|
|
190
|
-
|
|
191
158
|
};
|
|
192
159
|
}
|
|
193
|
-
|
|
194
160
|
function createLogApi(db, store) {
|
|
195
161
|
return {
|
|
196
162
|
async read(path) {
|
|
@@ -200,7 +166,6 @@
|
|
|
200
166
|
request.addEventListener('success', () => r(request.result || null));
|
|
201
167
|
});
|
|
202
168
|
},
|
|
203
|
-
|
|
204
169
|
async write(path, log) {
|
|
205
170
|
return new Promise(r => {
|
|
206
171
|
const transaction = db.transaction(store, 'readwrite');
|
|
@@ -213,7 +178,6 @@
|
|
|
213
178
|
});
|
|
214
179
|
});
|
|
215
180
|
},
|
|
216
|
-
|
|
217
181
|
async clear(path) {
|
|
218
182
|
return new Promise(r => {
|
|
219
183
|
const request = db.transaction(store, 'readwrite').objectStore(store).delete(path);
|
|
@@ -221,10 +185,8 @@
|
|
|
221
185
|
request.addEventListener('success', () => r());
|
|
222
186
|
});
|
|
223
187
|
}
|
|
224
|
-
|
|
225
188
|
};
|
|
226
189
|
}
|
|
227
|
-
|
|
228
190
|
function createIndexedApis(database = 'k99', {
|
|
229
191
|
assets = 'assets',
|
|
230
192
|
log = 'log',
|
|
@@ -255,156 +217,122 @@
|
|
|
255
217
|
const dataList = [];
|
|
256
218
|
let dataSize = 0;
|
|
257
219
|
const list = [];
|
|
258
|
-
|
|
259
220
|
function get() {
|
|
260
221
|
if (!current || dataSize <= current) {
|
|
261
222
|
const chunk = new Uint8Array(dataSize);
|
|
262
223
|
let index = 0;
|
|
263
|
-
|
|
264
224
|
for (const item of dataList) {
|
|
265
225
|
for (let i = 0; i < item.byteLength; i++, index++) {
|
|
266
226
|
chunk[index] = item[i];
|
|
267
227
|
}
|
|
268
228
|
}
|
|
269
|
-
|
|
270
229
|
dataSize = 0;
|
|
271
230
|
dataList.length = 0;
|
|
272
231
|
return chunk;
|
|
273
232
|
}
|
|
274
|
-
|
|
275
233
|
let item = dataList.shift();
|
|
276
|
-
|
|
277
234
|
if (!item) {
|
|
278
235
|
return null;
|
|
279
236
|
}
|
|
280
|
-
|
|
281
237
|
const chunk = new Uint8Array(current);
|
|
282
238
|
let index = 0;
|
|
283
239
|
let i = 0;
|
|
284
240
|
let len = item.length;
|
|
285
|
-
|
|
286
241
|
while (index < current) {
|
|
287
242
|
if (i >= length) {
|
|
288
243
|
item = dataList.shift();
|
|
289
|
-
|
|
290
244
|
if (!item) {
|
|
291
245
|
break;
|
|
292
246
|
}
|
|
293
|
-
|
|
294
247
|
i = 0;
|
|
295
248
|
len = item.length;
|
|
296
249
|
}
|
|
297
|
-
|
|
298
250
|
chunk[index] = item[i];
|
|
299
251
|
i++;
|
|
300
252
|
index++;
|
|
301
253
|
}
|
|
302
|
-
|
|
303
254
|
if (item && i < len) {
|
|
304
255
|
dataList.unshift(new Uint8Array(item.buffer.slice(i)));
|
|
305
256
|
}
|
|
306
|
-
|
|
307
257
|
dataSize -= current;
|
|
308
258
|
return chunk;
|
|
309
259
|
}
|
|
310
|
-
|
|
311
260
|
function add(data) {
|
|
312
261
|
dataSize += data.length || 0;
|
|
313
262
|
dataList.push(data);
|
|
314
263
|
return dataSize;
|
|
315
264
|
}
|
|
316
|
-
|
|
317
265
|
function runCb() {
|
|
318
266
|
if (!cb) {
|
|
319
267
|
return;
|
|
320
268
|
}
|
|
321
|
-
|
|
322
269
|
const v = dataSize ? get() : null;
|
|
323
270
|
cb(v);
|
|
324
271
|
[current, cb] = list.shift() || [0, null];
|
|
325
272
|
}
|
|
326
|
-
|
|
327
273
|
async function run() {
|
|
328
|
-
|
|
329
274
|
for (;;) {
|
|
330
275
|
if (!cb) {
|
|
331
276
|
break;
|
|
332
277
|
}
|
|
333
|
-
|
|
334
278
|
if (end) {
|
|
335
279
|
runCb();
|
|
336
280
|
continue;
|
|
337
281
|
}
|
|
338
|
-
|
|
339
282
|
if (dataSize && (!current || dataSize >= current)) {
|
|
340
283
|
runCb();
|
|
341
284
|
continue;
|
|
342
285
|
}
|
|
343
|
-
|
|
344
286
|
const {
|
|
345
287
|
value,
|
|
346
288
|
done
|
|
347
289
|
} = await reader.read();
|
|
348
|
-
|
|
349
290
|
if (done) {
|
|
350
291
|
end = true;
|
|
351
292
|
continue;
|
|
352
293
|
}
|
|
353
|
-
|
|
354
294
|
add(value);
|
|
355
|
-
|
|
356
295
|
if (dataSize && (!current || dataSize >= current)) {
|
|
357
296
|
runCb();
|
|
358
297
|
continue;
|
|
359
298
|
}
|
|
360
299
|
}
|
|
361
300
|
}
|
|
362
|
-
|
|
363
301
|
function read(size = 0) {
|
|
364
302
|
return new Promise(resolve => {
|
|
365
303
|
if (!reader) {
|
|
366
304
|
reader = readableStream.getReader();
|
|
367
305
|
}
|
|
368
|
-
|
|
369
306
|
size = Math.max(size, 0);
|
|
370
|
-
|
|
371
307
|
if (cb) {
|
|
372
308
|
list.push([size, resolve]);
|
|
373
309
|
return;
|
|
374
310
|
}
|
|
375
|
-
|
|
376
311
|
current = size;
|
|
377
312
|
cb = resolve;
|
|
378
313
|
run();
|
|
379
314
|
});
|
|
380
315
|
}
|
|
381
|
-
|
|
382
316
|
return read;
|
|
383
317
|
}
|
|
384
318
|
|
|
385
319
|
function createBufferRead(request) {
|
|
386
320
|
let arrayBuffer;
|
|
387
|
-
|
|
388
321
|
function read(size = 0) {
|
|
389
322
|
if (!arrayBuffer) {
|
|
390
323
|
arrayBuffer = request.arrayBuffer().then(t => [new Uint8Array(0), new Uint8Array(t), 0]);
|
|
391
324
|
}
|
|
392
|
-
|
|
393
325
|
arrayBuffer = arrayBuffer.then(v => {
|
|
394
326
|
if (!v) {
|
|
395
327
|
return null;
|
|
396
328
|
}
|
|
397
|
-
|
|
398
329
|
let [, buff, index] = v;
|
|
399
|
-
|
|
400
330
|
if (index >= buff.byteLength) {
|
|
401
331
|
return null;
|
|
402
332
|
}
|
|
403
|
-
|
|
404
333
|
if (!size || size + index >= buff.byteLength) {
|
|
405
334
|
return [buff.slice(index), buff, buff.byteLength];
|
|
406
335
|
}
|
|
407
|
-
|
|
408
336
|
let end = index + size;
|
|
409
337
|
return [buff.slice(index, end), buff, end];
|
|
410
338
|
});
|
|
@@ -412,51 +340,39 @@
|
|
|
412
340
|
if (!v) {
|
|
413
341
|
return null;
|
|
414
342
|
}
|
|
415
|
-
|
|
416
343
|
const [value] = v;
|
|
417
344
|
return value;
|
|
418
345
|
});
|
|
419
346
|
}
|
|
420
|
-
|
|
421
347
|
return read;
|
|
422
348
|
}
|
|
423
349
|
|
|
424
350
|
function getNameValue(s) {
|
|
425
351
|
const index = s.indexOf('=');
|
|
426
|
-
|
|
427
352
|
if (index < 0) {
|
|
428
353
|
return [decodeURIComponent(s), ''];
|
|
429
354
|
}
|
|
430
|
-
|
|
431
355
|
return [decodeURIComponent(s.substring(0, index)), decodeURIComponent(s.substring(index + 1))];
|
|
432
356
|
}
|
|
433
|
-
|
|
434
357
|
function parseQuery(s) {
|
|
435
358
|
const query = {};
|
|
436
|
-
|
|
437
359
|
for (const k of s.split('&').filter(Boolean)) {
|
|
438
360
|
const [index, value] = getNameValue(k);
|
|
439
|
-
|
|
440
361
|
if (index in query) {
|
|
441
362
|
query[index] = [query[index], value].flat();
|
|
442
363
|
} else {
|
|
443
364
|
query[index] = value;
|
|
444
365
|
}
|
|
445
366
|
}
|
|
446
|
-
|
|
447
367
|
return query;
|
|
448
368
|
}
|
|
449
|
-
|
|
450
369
|
function getHeaders(h) {
|
|
451
370
|
const headers = {};
|
|
452
|
-
|
|
453
371
|
for (const [k, v] of h.entries()) {
|
|
454
372
|
headers[k.toLowerCase()] = v;
|
|
455
373
|
}
|
|
456
|
-
|
|
457
374
|
return headers;
|
|
458
375
|
}
|
|
459
|
-
|
|
460
376
|
function createRequest(request, searchParser = parseQuery) {
|
|
461
377
|
const url = new URL(request.url);
|
|
462
378
|
const {
|
|
@@ -465,15 +381,11 @@
|
|
|
465
381
|
} = request;
|
|
466
382
|
const aborted = new Promise((_, reject) => {
|
|
467
383
|
if (signal.aborted) {
|
|
468
|
-
return reject(
|
|
384
|
+
return reject(signal.reason);
|
|
469
385
|
}
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
reject(new DOMException('The user aborted a request.'));
|
|
474
|
-
};
|
|
475
|
-
|
|
476
|
-
signal.addEventListener('abort', abort);
|
|
386
|
+
signal.addEventListener('abort', () => reject(signal.reason), {
|
|
387
|
+
once: true
|
|
388
|
+
});
|
|
477
389
|
});
|
|
478
390
|
return {
|
|
479
391
|
method: (request.method || 'GET').toUpperCase(),
|
|
@@ -489,16 +401,13 @@
|
|
|
489
401
|
|
|
490
402
|
function createHeaders(target) {
|
|
491
403
|
const headers = new Headers();
|
|
492
|
-
|
|
493
404
|
for (const [k, v] of Object.entries(target.headers)) {
|
|
494
405
|
for (const it of [v].flat()) {
|
|
495
406
|
headers.append(k.toLowerCase(), String(it));
|
|
496
407
|
}
|
|
497
408
|
}
|
|
498
|
-
|
|
499
409
|
return headers;
|
|
500
410
|
}
|
|
501
|
-
|
|
502
411
|
function createResponse(target) {
|
|
503
412
|
return new Response(new ReadableStream({
|
|
504
413
|
async pull(controller) {
|
|
@@ -506,45 +415,37 @@
|
|
|
506
415
|
value,
|
|
507
416
|
done
|
|
508
417
|
} = await target.next();
|
|
509
|
-
|
|
510
418
|
if (done) {
|
|
511
419
|
controller.close();
|
|
512
420
|
} else {
|
|
513
421
|
controller.enqueue(value);
|
|
514
422
|
}
|
|
515
423
|
},
|
|
516
|
-
|
|
517
424
|
async cancel(reason) {
|
|
518
425
|
return target.throw(reason).then(() => {}, () => {});
|
|
519
426
|
}
|
|
520
|
-
|
|
521
427
|
}), {
|
|
522
428
|
status: target.status,
|
|
523
429
|
headers: createHeaders(target)
|
|
524
430
|
});
|
|
525
431
|
}
|
|
526
432
|
|
|
527
|
-
function createFetch(
|
|
433
|
+
function createFetch(run, notFound, searchParser) {
|
|
528
434
|
return async function fetch(input, init) {
|
|
529
435
|
const request = new Request(input, init);
|
|
530
436
|
const {
|
|
531
437
|
signal
|
|
532
438
|
} = request;
|
|
533
|
-
|
|
534
439
|
if (signal.aborted) {
|
|
535
440
|
return Promise.reject(new DOMException('The user aborted a request.'));
|
|
536
441
|
}
|
|
537
|
-
|
|
538
|
-
const r = await app.request(createRequest(request, searchParser));
|
|
539
|
-
|
|
442
|
+
const r = await run(createRequest(request, searchParser));
|
|
540
443
|
if (r) {
|
|
541
444
|
return createResponse(r);
|
|
542
445
|
}
|
|
543
|
-
|
|
544
446
|
if (typeof notFound === 'function') {
|
|
545
447
|
return notFound(request);
|
|
546
448
|
}
|
|
547
|
-
|
|
548
449
|
return new Response(null, {
|
|
549
450
|
status: 404
|
|
550
451
|
});
|
|
@@ -559,6 +460,4 @@
|
|
|
559
460
|
exports.createResponse = createResponse;
|
|
560
461
|
exports.createStreamRead = createStreamRead;
|
|
561
462
|
|
|
562
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
563
|
-
|
|
564
463
|
}));
|
package/browser/index.min.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* k99 v0.6.0-alpha.
|
|
3
|
-
* (c) 2019-
|
|
2
|
+
* k99 v0.6.0-alpha.1
|
|
3
|
+
* (c) 2019-2023 猛火Fierflame
|
|
4
4
|
* @license MIT
|
|
5
5
|
*/
|
|
6
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).k99Browser={})}(this,(function(e){"use strict";function t(e,t){return{async read(n){n=`${t}${n}`;const r=await e.match(n);if(r)return r.json()},write:async(n,r)=>(n=`${t}${n}`,void 0===r?e.delete(n):(await e.put(n,new Response(JSON.stringify(r))),!0))}}function n(e,t){return{async read(n){n=`${t}${n}`;const r=await e.match(n);return r?new Uint8Array(await r.arrayBuffer()):null},write:async(n,r)=>(n=`${t}${n}`,await e.put(n,new Response(r)),!0),delete:async n=>(n=`${t}${n}`,e.delete(n)),stat:()=>null}}function r(e,t){return{async read(n){n=`${t}${n}`;const r=await e.match(n);return r?r.text():""},async write(n,r){n=`${t}${n}`;const s=await e.match(n),
|
|
6
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).k99Browser={})}(this,(function(e){"use strict";function t(e,t){return{async read(n){n=`${t}${n}`;const r=await e.match(n);if(r)return r.json()},write:async(n,r)=>(n=`${t}${n}`,void 0===r?e.delete(n):(await e.put(n,new Response(JSON.stringify(r))),!0))}}function n(e,t){return{async read(n){n=`${t}${n}`;const r=await e.match(n);return r?new Uint8Array(await r.arrayBuffer()):null},write:async(n,r)=>(n=`${t}${n}`,await e.put(n,new Response(r)),!0),delete:async n=>(n=`${t}${n}`,e.delete(n)),stat:()=>null}}function r(e,t){return{async read(n){n=`${t}${n}`;const r=await e.match(n);return r?r.text():""},async write(n,r){n=`${t}${n}`;const s=await e.match(n),a=`${await(s?.text())||""}${r}\n`;return await e.put(n,new Response(a)),!0},async clear(n){n=`${t}${n}`,await e.delete(n)}}}function s(e,t){return{read:async n=>new Promise((r=>{const s=e.transaction(t).objectStore(t).get(n);s.addEventListener("error",(()=>r(null))),s.addEventListener("success",(()=>r(s.result||null)))})),write:async(n,r)=>new Promise((s=>{const a=e.transaction(t,"readwrite").objectStore(t).add(r,n);a.addEventListener("error",(()=>s(!1))),a.addEventListener("success",(()=>s(!0)))})),delete:async n=>new Promise((r=>{const s=e.transaction(t,"readwrite").objectStore(t).delete(n);s.addEventListener("error",(()=>r(!1))),s.addEventListener("success",(()=>r(!0)))})),stat:()=>null}}function a(e,t){return{read:async n=>new Promise((r=>{const s=e.transaction(t).objectStore(t).get(n);s.addEventListener("error",(()=>r(null))),s.addEventListener("success",(()=>r(s.result||null)))})),write:async(n,r)=>new Promise(null==r?r=>{const s=e.transaction(t,"readwrite").objectStore(t).delete(n);s.addEventListener("error",(()=>r(!1))),s.addEventListener("success",(()=>r(!0)))}:s=>{const a=e.transaction(t,"readwrite").objectStore(t).add(r,n);a.addEventListener("error",(()=>s(!1))),a.addEventListener("success",(()=>s(!0)))})}}function o(e,t){return{read:async n=>new Promise((r=>{const s=e.transaction(t).objectStore(t).get(n);s.addEventListener("error",(()=>r(""))),s.addEventListener("success",(()=>r(s.result||null)))})),write:async(n,r)=>new Promise((s=>{const a=e.transaction(t,"readwrite"),o=a.objectStore(t).get(n);o.addEventListener("error",(()=>s(!1))),o.addEventListener("success",(()=>{const e=a.objectStore(t).add(`${o.result||""}${r}\n`,n);e.addEventListener("error",(()=>s(!1))),e.addEventListener("success",(()=>s(!0)))}))})),clear:async n=>new Promise((r=>{const s=e.transaction(t,"readwrite").objectStore(t).delete(n);s.addEventListener("error",(()=>r())),s.addEventListener("success",(()=>r()))}))}}function c(e){let t,n=0,r=null,s=!1;const a=[];let o=0;const c=[];function i(){if(!r)return;const e=o?function(){if(!n||o<=n){const e=new Uint8Array(o);let t=0;for(const n of a)for(let r=0;r<n.byteLength;r++,t++)e[t]=n[r];return o=0,a.length=0,e}let e=a.shift();if(!e)return null;const t=new Uint8Array(n);let r=0,s=0,c=e.length;for(;r<n;){if(s>=length){if(e=a.shift(),!e)break;s=0,c=e.length}t[r]=e[s],s++,r++}return e&&s<c&&a.unshift(new Uint8Array(e.buffer.slice(s))),o-=n,t}():null;r(e),[n,r]=c.shift()||[0,null]}return function(u=0){return new Promise((d=>{t||(t=e.getReader()),u=Math.max(u,0),r?c.push([u,d]):(n=u,r=d,async function(){for(;r;){if(s){i();continue}if(o&&(!n||o>=n)){i();continue}const{value:r,done:c}=await t.read();c?s=!0:(o+=(e=r).length||0,a.push(e),o&&(!n||o>=n)&&i())}var e}())}))}}function i(e){let t;return function(n=0){return t||(t=e.arrayBuffer().then((e=>[new Uint8Array(0),new Uint8Array(e),0]))),t=t.then((e=>{if(!e)return null;let[,t,r]=e;if(r>=t.byteLength)return null;if(!n||n+r>=t.byteLength)return[t.slice(r),t,t.byteLength];let s=r+n;return[t.slice(r,s),t,s]})),t.then((e=>{if(!e)return null;const[t]=e;return t}))}}function u(e){const t=e.indexOf("=");return t<0?[decodeURIComponent(e),""]:[decodeURIComponent(e.substring(0,t)),decodeURIComponent(e.substring(t+1))]}function d(e){const t={};for(const n of e.split("&").filter(Boolean)){const[e,r]=u(n);t[e]=e in t?[t[e],r].flat():r}return t}function l(e){const t={};for(const[n,r]of e.entries())t[n.toLowerCase()]=r;return t}function f(e,t=d){const n=new URL(e.url),{body:r,signal:s}=e,a=new Promise(((e,t)=>{if(s.aborted)return t(s.reason);s.addEventListener("abort",(()=>t(s.reason)),{once:!0})}));return{method:(e.method||"GET").toUpperCase(),url:`${n.pathname}${n.search}`||"/",headers:l(e.headers),pathname:n.pathname||"/",search:n.search||"",query:t(n.search.substring(1)),aborted:a,read:r?c(r):i(e)}}function w(e){const t=new Headers;for(const[n,r]of Object.entries(e.headers))for(const e of[r].flat())t.append(n.toLowerCase(),String(e));return t}function h(e){return new Response(new ReadableStream({async pull(t){const{value:n,done:r}=await e.next();r?t.close():t.enqueue(n)},cancel:async t=>e.throw(t).then((()=>{}),(()=>{}))}),{status:e.status,headers:w(e)})}e.createBufferRead=i,e.createCacheApis=async function(e="k99",{assets:s="/k99/assets",log:a="/k99/log",settings:o="/k99/settings"}={}){const c=await caches.open(e);return"/"!==s[s.length-1]&&(s=`${s}/`),"/"!==s[0]&&(s=`/${s}`),"/"!==a[a.length-1]&&(a=`${a}/`),"/"!==a[0]&&(a=`/${a}`),"/"!==o[a.length-1]&&(o=`${o}/`),"/"!==o[0]&&(o=`/${o}`),{logApi:r(c,a),assetsApi:n(c,s),settingsApi:t(c,o)}},e.createFetch=function(e,t,n){return async function(r,s){const a=new Request(r,s),{signal:o}=a;if(o.aborted)return Promise.reject(new DOMException("The user aborted a request."));const c=await e(f(a,n));return c?h(c):"function"==typeof t?t(a):new Response(null,{status:404})}},e.createIndexedApis=function(e="k99",{assets:t="assets",log:n="log",settings:r="settings"}={},c=1){return new Promise(((s,a)=>{const o=indexedDB.open(e,c);o.addEventListener("upgradeneeded",(e=>{const s=e.target.result;s.createObjectStore(t),s.createObjectStore(n),s.createObjectStore(r)})),o.addEventListener("error",(()=>a(o.error))),o.addEventListener("success",(()=>s(o.result)))})).then((e=>({logApi:o(e,n),assetsApi:s(e,t),settingsApi:a(e,r)})))},e.createRequest=f,e.createResponse=h,e.createStreamRead=c}));
|
package/browser/index.min.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* k99 v0.6.0-alpha.
|
|
3
|
-
* (c) 2019-
|
|
2
|
+
* k99 v0.6.0-alpha.1
|
|
3
|
+
* (c) 2019-2023 猛火Fierflame
|
|
4
4
|
* @license MIT
|
|
5
5
|
*/
|
|
6
|
-
function e(e,t){return{async read(n){n=`${t}${n}`;const r=await e.match(n);if(r)return r.json()},write:async(n,r)=>(n=`${t}${n}`,void 0===r?e.delete(n):(await e.put(n,new Response(JSON.stringify(r))),!0))}}function t(e,t){return{async read(n){n=`${t}${n}`;const r=await e.match(n);return r?new Uint8Array(await r.arrayBuffer()):null},write:async(n,r)=>(n=`${t}${n}`,await e.put(n,new Response(r)),!0),delete:async n=>(n=`${t}${n}`,e.delete(n)),stat:()=>null}}function n(e,t){return{async read(n){n=`${t}${n}`;const r=await e.match(n);return r?r.text():""},async write(n,r){n=`${t}${n}`;const s=await e.match(n),a=`${await(s?.text())||""}${r}\n`;return await e.put(n,new Response(a)),!0},async clear(n){n=`${t}${n}`,await e.delete(n)}}}async function r(r="k99",{assets:s="/k99/assets",log:a="/k99/log",settings:o="/k99/settings"}={}){const c=await caches.open(r);return"/"!==s[s.length-1]&&(s=`${s}/`),"/"!==s[0]&&(s=`/${s}`),"/"!==a[a.length-1]&&(a=`${a}/`),"/"!==a[0]&&(a=`/${a}`),"/"!==o[a.length-1]&&(o=`${o}/`),"/"!==o[0]&&(o=`/${o}`),{logApi:n(c,a),assetsApi:t(c,s),settingsApi:e(c,o)}}function s(e,t){return{read:async n=>new Promise((r=>{const s=e.transaction(t).objectStore(t).get(n);s.addEventListener("error",(()=>r(null))),s.addEventListener("success",(()=>r(s.result||null)))})),write:async(n,r)=>new Promise((s=>{const a=e.transaction(t,"readwrite").objectStore(t).add(r,n);a.addEventListener("error",(()=>s(!1))),a.addEventListener("success",(()=>s(!0)))})),delete:async n=>new Promise((r=>{const s=e.transaction(t,"readwrite").objectStore(t).delete(n);s.addEventListener("error",(()=>r(!1))),s.addEventListener("success",(()=>r(!0)))})),stat:()=>null}}function a(e,t){return{read:async n=>new Promise((r=>{const s=e.transaction(t).objectStore(t).get(n);s.addEventListener("error",(()=>r(null))),s.addEventListener("success",(()=>r(s.result||null)))})),write:async(n,r)=>new Promise(null==r?r=>{const s=e.transaction(t,"readwrite").objectStore(t).delete(n);s.addEventListener("error",(()=>r(!1))),s.addEventListener("success",(()=>r(!0)))}:s=>{const a=e.transaction(t,"readwrite").objectStore(t).add(r,n);a.addEventListener("error",(()=>s(!1))),a.addEventListener("success",(()=>s(!0)))})}}function o(e,t){return{read:async n=>new Promise((r=>{const s=e.transaction(t).objectStore(t).get(n);s.addEventListener("error",(()=>r(""))),s.addEventListener("success",(()=>r(s.result||null)))})),write:async(n,r)=>new Promise((s=>{const a=e.transaction(t,"readwrite"),o=a.objectStore(t).get(n);o.addEventListener("error",(()=>s(!1))),o.addEventListener("success",(()=>{const e=a.objectStore(t).add(`${o.result||""}${r}\n`,n);e.addEventListener("error",(()=>s(!1))),e.addEventListener("success",(()=>s(!0)))}))})),clear:async n=>new Promise((r=>{const s=e.transaction(t,"readwrite").objectStore(t).delete(n);s.addEventListener("error",(()=>r())),s.addEventListener("success",(()=>r()))}))}}function c(e="k99",{assets:t="assets",log:n="log",settings:r="settings"}={},c=1){return new Promise(((s,a)=>{const o=indexedDB.open(e,c);o.addEventListener("upgradeneeded",(e=>{const s=e.target.result;s.createObjectStore(t),s.createObjectStore(n),s.createObjectStore(r)})),o.addEventListener("error",(()=>a(o.error))),o.addEventListener("success",(()=>s(o.result)))})).then((e=>({logApi:o(e,n),assetsApi:s(e,t),settingsApi:a(e,r)})))}function i(e){let t,n=0,r=null,s=!1;const a=[];let o=0;const c=[];function i(){if(!r)return;const e=o?function(){if(!n||o<=n){const e=new Uint8Array(o);let t=0;for(const n of a)for(let r=0;r<n.byteLength;r++,t++)e[t]=n[r];return o=0,a.length=0,e}let e=a.shift();if(!e)return null;const t=new Uint8Array(n);let r=0,s=0,c=e.length;for(;r<n;){if(s>=length){if(e=a.shift(),!e)break;s=0,c=e.length}t[r]=e[s],s++,r++}return e&&s<c&&a.unshift(new Uint8Array(e.buffer.slice(s))),o-=n,t}():null;r(e),[n,r]=c.shift()||[0,null]}return function(u=0){return new Promise((d=>{t||(t=e.getReader()),u=Math.max(u,0),r?c.push([u,d]):(n=u,r=d,async function(){for(;r;){if(s){i();continue}if(o&&(!n||o>=n)){i();continue}const{value:r,done:c}=await t.read();c?s=!0:(o+=(e=r).length||0,a.push(e),o&&(!n||o>=n)&&i())}var e}())}))}}function u(e){let t;return function(n=0){return t||(t=e.arrayBuffer().then((e=>[new Uint8Array(0),new Uint8Array(e),0]))),t=t.then((e=>{if(!e)return null;let[,t,r]=e;if(r>=t.byteLength)return null;if(!n||n+r>=t.byteLength)return[t.slice(r),t,t.byteLength];let s=r+n;return[t.slice(r,s),t,s]})),t.then((e=>{if(!e)return null;const[t]=e;return t}))}}function d(e){const t=e.indexOf("=");return t<0?[decodeURIComponent(e),""]:[decodeURIComponent(e.substring(0,t)),decodeURIComponent(e.substring(t+1))]}function l(e){const t={};for(const n of e.split("&").filter(Boolean)){const[e,r]=d(n);t[e]=e in t?[t[e],r].flat():r}return t}function f(e){const t={};for(const[n,r]of e.entries())t[n.toLowerCase()]=r;return t}function w(e,t=l){const n=new URL(e.url),{body:r,signal:s}=e,a=new Promise(((e,t)=>{if(s.aborted)return t(
|
|
6
|
+
function e(e,t){return{async read(n){n=`${t}${n}`;const r=await e.match(n);if(r)return r.json()},write:async(n,r)=>(n=`${t}${n}`,void 0===r?e.delete(n):(await e.put(n,new Response(JSON.stringify(r))),!0))}}function t(e,t){return{async read(n){n=`${t}${n}`;const r=await e.match(n);return r?new Uint8Array(await r.arrayBuffer()):null},write:async(n,r)=>(n=`${t}${n}`,await e.put(n,new Response(r)),!0),delete:async n=>(n=`${t}${n}`,e.delete(n)),stat:()=>null}}function n(e,t){return{async read(n){n=`${t}${n}`;const r=await e.match(n);return r?r.text():""},async write(n,r){n=`${t}${n}`;const s=await e.match(n),a=`${await(s?.text())||""}${r}\n`;return await e.put(n,new Response(a)),!0},async clear(n){n=`${t}${n}`,await e.delete(n)}}}async function r(r="k99",{assets:s="/k99/assets",log:a="/k99/log",settings:o="/k99/settings"}={}){const c=await caches.open(r);return"/"!==s[s.length-1]&&(s=`${s}/`),"/"!==s[0]&&(s=`/${s}`),"/"!==a[a.length-1]&&(a=`${a}/`),"/"!==a[0]&&(a=`/${a}`),"/"!==o[a.length-1]&&(o=`${o}/`),"/"!==o[0]&&(o=`/${o}`),{logApi:n(c,a),assetsApi:t(c,s),settingsApi:e(c,o)}}function s(e,t){return{read:async n=>new Promise((r=>{const s=e.transaction(t).objectStore(t).get(n);s.addEventListener("error",(()=>r(null))),s.addEventListener("success",(()=>r(s.result||null)))})),write:async(n,r)=>new Promise((s=>{const a=e.transaction(t,"readwrite").objectStore(t).add(r,n);a.addEventListener("error",(()=>s(!1))),a.addEventListener("success",(()=>s(!0)))})),delete:async n=>new Promise((r=>{const s=e.transaction(t,"readwrite").objectStore(t).delete(n);s.addEventListener("error",(()=>r(!1))),s.addEventListener("success",(()=>r(!0)))})),stat:()=>null}}function a(e,t){return{read:async n=>new Promise((r=>{const s=e.transaction(t).objectStore(t).get(n);s.addEventListener("error",(()=>r(null))),s.addEventListener("success",(()=>r(s.result||null)))})),write:async(n,r)=>new Promise(null==r?r=>{const s=e.transaction(t,"readwrite").objectStore(t).delete(n);s.addEventListener("error",(()=>r(!1))),s.addEventListener("success",(()=>r(!0)))}:s=>{const a=e.transaction(t,"readwrite").objectStore(t).add(r,n);a.addEventListener("error",(()=>s(!1))),a.addEventListener("success",(()=>s(!0)))})}}function o(e,t){return{read:async n=>new Promise((r=>{const s=e.transaction(t).objectStore(t).get(n);s.addEventListener("error",(()=>r(""))),s.addEventListener("success",(()=>r(s.result||null)))})),write:async(n,r)=>new Promise((s=>{const a=e.transaction(t,"readwrite"),o=a.objectStore(t).get(n);o.addEventListener("error",(()=>s(!1))),o.addEventListener("success",(()=>{const e=a.objectStore(t).add(`${o.result||""}${r}\n`,n);e.addEventListener("error",(()=>s(!1))),e.addEventListener("success",(()=>s(!0)))}))})),clear:async n=>new Promise((r=>{const s=e.transaction(t,"readwrite").objectStore(t).delete(n);s.addEventListener("error",(()=>r())),s.addEventListener("success",(()=>r()))}))}}function c(e="k99",{assets:t="assets",log:n="log",settings:r="settings"}={},c=1){return new Promise(((s,a)=>{const o=indexedDB.open(e,c);o.addEventListener("upgradeneeded",(e=>{const s=e.target.result;s.createObjectStore(t),s.createObjectStore(n),s.createObjectStore(r)})),o.addEventListener("error",(()=>a(o.error))),o.addEventListener("success",(()=>s(o.result)))})).then((e=>({logApi:o(e,n),assetsApi:s(e,t),settingsApi:a(e,r)})))}function i(e){let t,n=0,r=null,s=!1;const a=[];let o=0;const c=[];function i(){if(!r)return;const e=o?function(){if(!n||o<=n){const e=new Uint8Array(o);let t=0;for(const n of a)for(let r=0;r<n.byteLength;r++,t++)e[t]=n[r];return o=0,a.length=0,e}let e=a.shift();if(!e)return null;const t=new Uint8Array(n);let r=0,s=0,c=e.length;for(;r<n;){if(s>=length){if(e=a.shift(),!e)break;s=0,c=e.length}t[r]=e[s],s++,r++}return e&&s<c&&a.unshift(new Uint8Array(e.buffer.slice(s))),o-=n,t}():null;r(e),[n,r]=c.shift()||[0,null]}return function(u=0){return new Promise((d=>{t||(t=e.getReader()),u=Math.max(u,0),r?c.push([u,d]):(n=u,r=d,async function(){for(;r;){if(s){i();continue}if(o&&(!n||o>=n)){i();continue}const{value:r,done:c}=await t.read();c?s=!0:(o+=(e=r).length||0,a.push(e),o&&(!n||o>=n)&&i())}var e}())}))}}function u(e){let t;return function(n=0){return t||(t=e.arrayBuffer().then((e=>[new Uint8Array(0),new Uint8Array(e),0]))),t=t.then((e=>{if(!e)return null;let[,t,r]=e;if(r>=t.byteLength)return null;if(!n||n+r>=t.byteLength)return[t.slice(r),t,t.byteLength];let s=r+n;return[t.slice(r,s),t,s]})),t.then((e=>{if(!e)return null;const[t]=e;return t}))}}function d(e){const t=e.indexOf("=");return t<0?[decodeURIComponent(e),""]:[decodeURIComponent(e.substring(0,t)),decodeURIComponent(e.substring(t+1))]}function l(e){const t={};for(const n of e.split("&").filter(Boolean)){const[e,r]=d(n);t[e]=e in t?[t[e],r].flat():r}return t}function f(e){const t={};for(const[n,r]of e.entries())t[n.toLowerCase()]=r;return t}function w(e,t=l){const n=new URL(e.url),{body:r,signal:s}=e,a=new Promise(((e,t)=>{if(s.aborted)return t(s.reason);s.addEventListener("abort",(()=>t(s.reason)),{once:!0})}));return{method:(e.method||"GET").toUpperCase(),url:`${n.pathname}${n.search}`||"/",headers:f(e.headers),pathname:n.pathname||"/",search:n.search||"",query:t(n.search.substring(1)),aborted:a,read:r?i(r):u(e)}}function h(e){const t=new Headers;for(const[n,r]of Object.entries(e.headers))for(const e of[r].flat())t.append(n.toLowerCase(),String(e));return t}function g(e){return new Response(new ReadableStream({async pull(t){const{value:n,done:r}=await e.next();r?t.close():t.enqueue(n)},cancel:async t=>e.throw(t).then((()=>{}),(()=>{}))}),{status:e.status,headers:h(e)})}function y(e,t,n){return async function(r,s){const a=new Request(r,s),{signal:o}=a;if(o.aborted)return Promise.reject(new DOMException("The user aborted a request."));const c=await e(w(a,n));return c?g(c):"function"==typeof t?t(a):new Response(null,{status:404})}}export{u as createBufferRead,r as createCacheApis,y as createFetch,c as createIndexedApis,w as createRequest,g as createResponse,i as createStreamRead};
|