@agoric/internal 0.3.3-other-dev-8f8782b.0 → 0.3.3-other-dev-fbe72e7.0.fbe72e7
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/README.md +7 -2
- package/exported.js +2 -0
- package/package.json +41 -19
- package/src/action-types.d.ts +51 -5
- package/src/action-types.d.ts.map +1 -1
- package/src/action-types.js +74 -15
- package/src/batched-deliver.d.ts +9 -6
- package/src/batched-deliver.d.ts.map +1 -1
- package/src/batched-deliver.js +9 -3
- package/src/callback.d.ts +24 -17
- package/src/callback.d.ts.map +1 -1
- package/src/callback.js +55 -61
- package/src/chain-storage-paths.d.ts +2 -3
- package/src/chain-storage-paths.d.ts.map +1 -1
- package/src/chain-storage-paths.js +2 -3
- package/src/chain-utils.d.ts +27 -0
- package/src/chain-utils.d.ts.map +1 -0
- package/src/chain-utils.js +62 -0
- package/src/cli-utils.d.ts +2 -0
- package/src/cli-utils.d.ts.map +1 -0
- package/src/cli-utils.js +21 -0
- package/src/config.d.ts +22 -12
- package/src/config.d.ts.map +1 -1
- package/src/config.js +23 -10
- package/src/debug.d.ts +1 -1
- package/src/errors.d.ts +2 -0
- package/src/errors.d.ts.map +1 -0
- package/src/errors.js +16 -0
- package/src/hex.d.ts +15 -0
- package/src/hex.d.ts.map +1 -0
- package/src/hex.js +105 -0
- package/src/index.d.ts +10 -1
- package/src/index.js +13 -2
- package/src/install-ses-debug.d.ts +2 -0
- package/src/install-ses-debug.d.ts.map +1 -0
- package/src/install-ses-debug.js +6 -0
- package/src/js-utils.d.ts +40 -0
- package/src/js-utils.d.ts.map +1 -0
- package/src/js-utils.js +237 -0
- package/src/lib-chainStorage.d.ts +59 -67
- package/src/lib-chainStorage.d.ts.map +1 -1
- package/src/lib-chainStorage.js +95 -92
- package/src/lib-nodejs/ava-unhandled-rejection.d.ts +13 -0
- package/src/lib-nodejs/ava-unhandled-rejection.d.ts.map +1 -0
- package/src/lib-nodejs/ava-unhandled-rejection.js +66 -0
- package/src/lib-nodejs/engine-gc.d.ts +3 -0
- package/src/lib-nodejs/engine-gc.d.ts.map +1 -0
- package/src/lib-nodejs/engine-gc.js +22 -0
- package/src/lib-nodejs/gc-and-finalize.d.ts +2 -0
- package/src/lib-nodejs/gc-and-finalize.d.ts.map +1 -0
- package/src/lib-nodejs/gc-and-finalize.js +91 -0
- package/src/lib-nodejs/spawnSubprocessWorker.d.ts +15 -0
- package/src/lib-nodejs/spawnSubprocessWorker.d.ts.map +1 -0
- package/src/lib-nodejs/spawnSubprocessWorker.js +89 -0
- package/src/lib-nodejs/waitUntilQuiescent.d.ts +2 -0
- package/src/lib-nodejs/waitUntilQuiescent.d.ts.map +1 -0
- package/src/lib-nodejs/waitUntilQuiescent.js +18 -0
- package/src/lib-nodejs/worker-protocol.d.ts +4 -0
- package/src/lib-nodejs/worker-protocol.d.ts.map +1 -0
- package/src/lib-nodejs/worker-protocol.js +54 -0
- package/src/magic-cookie-test-only.js +2 -2
- package/src/marshal.d.ts +33 -0
- package/src/marshal.d.ts.map +1 -0
- package/src/marshal.js +156 -0
- package/src/method-tools.d.ts +1 -0
- package/src/method-tools.d.ts.map +1 -1
- package/src/method-tools.js +33 -62
- package/src/metrics.d.ts +183 -0
- package/src/metrics.d.ts.map +1 -0
- package/src/metrics.js +476 -0
- package/src/module-utils.d.ts +2 -0
- package/src/module-utils.d.ts.map +1 -0
- package/src/module-utils.js +27 -0
- package/src/natural-sort.d.ts +2 -0
- package/src/natural-sort.d.ts.map +1 -0
- package/src/natural-sort.js +48 -0
- package/src/netstring.d.ts +24 -0
- package/src/netstring.d.ts.map +1 -0
- package/src/netstring.js +125 -0
- package/src/node/buffer-line-transform.d.ts +20 -16
- package/src/node/buffer-line-transform.d.ts.map +1 -1
- package/src/node/buffer-line-transform.js +12 -9
- package/src/node/createBundles.d.ts.map +1 -1
- package/src/node/createBundles.js +12 -3
- package/src/node/fs-stream.d.ts +1 -1
- package/src/node/fs-stream.d.ts.map +1 -1
- package/src/node/fs-stream.js +48 -37
- package/src/node/shutdown.d.ts.map +1 -1
- package/src/node/shutdown.js +0 -1
- package/src/priority-senders.d.ts +2 -1
- package/src/priority-senders.d.ts.map +1 -1
- package/src/priority-senders.js +10 -4
- package/src/queue.d.ts +1 -1
- package/src/queue.d.ts.map +1 -1
- package/src/queue.js +7 -8
- package/src/scratch.d.ts +1 -1
- package/src/scratch.d.ts.map +1 -1
- package/src/ses-utils.d.ts +68 -0
- package/src/ses-utils.d.ts.map +1 -0
- package/src/ses-utils.js +422 -0
- package/src/storage-test-utils.d.ts +49 -84
- package/src/storage-test-utils.d.ts.map +1 -1
- package/src/storage-test-utils.js +234 -116
- package/src/tagged.d.ts +152 -0
- package/src/testing-utils.d.ts +2 -0
- package/src/testing-utils.d.ts.map +1 -1
- package/src/testing-utils.js +44 -5
- package/src/tmpDir.d.ts +2 -0
- package/src/tmpDir.d.ts.map +1 -0
- package/src/tmpDir.js +17 -0
- package/src/tokens.d.ts +34 -0
- package/src/tokens.d.ts.map +1 -0
- package/src/tokens.js +35 -0
- package/src/typeCheck.d.ts +9 -0
- package/src/typeCheck.d.ts.map +1 -0
- package/src/typeCheck.js +23 -0
- package/src/typeGuards.d.ts +17 -0
- package/src/typeGuards.d.ts.map +1 -1
- package/src/typeGuards.js +20 -0
- package/src/types-index.d.ts +1 -0
- package/src/types-index.js +2 -0
- package/src/types.d.ts +83 -18
- package/src/types.d.ts.map +1 -0
- package/src/types.ts +129 -0
- package/src/upgrade-api.d.ts +14 -4
- package/src/upgrade-api.d.ts.map +1 -1
- package/src/upgrade-api.js +50 -18
- package/CHANGELOG.md +0 -106
- package/src/utils.d.ts +0 -67
- package/src/utils.d.ts.map +0 -1
- package/src/utils.js +0 -451
package/src/netstring.js
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/* eslint-env node */
|
|
2
|
+
import { Fail } from '@endo/errors';
|
|
3
|
+
|
|
4
|
+
// adapted from 'netstring-stream', https://github.com/tlivings/netstring-stream/
|
|
5
|
+
import { Transform } from 'stream';
|
|
6
|
+
|
|
7
|
+
const COLON = 58;
|
|
8
|
+
const COMMA = 44;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @param {Buffer} data
|
|
12
|
+
* @returns {Buffer} netstring-wrapped
|
|
13
|
+
*/
|
|
14
|
+
export function encode(data) {
|
|
15
|
+
const prefix = Buffer.from(`${data.length}:`);
|
|
16
|
+
const suffix = Buffer.from(',');
|
|
17
|
+
return Buffer.concat([prefix, data, suffix]);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// input is a sequence of strings, output is a byte pipe
|
|
21
|
+
export function netstringEncoderStream() {
|
|
22
|
+
/**
|
|
23
|
+
* @param {Buffer} chunk
|
|
24
|
+
* @param {BufferEncoding} encoding
|
|
25
|
+
* @param {any} callback
|
|
26
|
+
* @this {{ push: (b: Buffer) => void }}
|
|
27
|
+
*/
|
|
28
|
+
function transform(chunk, encoding, callback) {
|
|
29
|
+
if (!Buffer.isBuffer(chunk)) {
|
|
30
|
+
throw Error('stream requires Buffers');
|
|
31
|
+
}
|
|
32
|
+
let err;
|
|
33
|
+
try {
|
|
34
|
+
this.push(encode(chunk));
|
|
35
|
+
} catch (e) {
|
|
36
|
+
err = e;
|
|
37
|
+
}
|
|
38
|
+
callback(err);
|
|
39
|
+
}
|
|
40
|
+
// (maybe empty) Buffer in, Buffer out. We use writableObjectMode to
|
|
41
|
+
// indicate that empty input buffers are important
|
|
42
|
+
return new Transform({ transform, writableObjectMode: true });
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* @param {Buffer} data containing zero or more netstrings and maybe some
|
|
47
|
+
* leftover bytes
|
|
48
|
+
* @param {number} [optMaxChunkSize]
|
|
49
|
+
* @returns {{ leftover: Buffer; payloads: Buffer[] }} zero or more decoded
|
|
50
|
+
* Buffers, one per netstring,
|
|
51
|
+
*/
|
|
52
|
+
export function decode(data, optMaxChunkSize) {
|
|
53
|
+
// TODO: it would be more efficient to accumulate pending data in an array,
|
|
54
|
+
// rather than doing a concat each time
|
|
55
|
+
let start = 0;
|
|
56
|
+
const payloads = [];
|
|
57
|
+
|
|
58
|
+
for (;;) {
|
|
59
|
+
const colon = data.indexOf(COLON, start);
|
|
60
|
+
if (colon === -1) {
|
|
61
|
+
break; // still waiting for `${LENGTH}:`
|
|
62
|
+
}
|
|
63
|
+
const sizeString = data.toString('utf-8', start, colon);
|
|
64
|
+
const size = parseInt(sizeString, 10);
|
|
65
|
+
if (!(size > -1)) {
|
|
66
|
+
// reject NaN, all negative numbers
|
|
67
|
+
Fail`unparsable size ${sizeString}, should be integer`;
|
|
68
|
+
}
|
|
69
|
+
if (optMaxChunkSize) {
|
|
70
|
+
size <= optMaxChunkSize ||
|
|
71
|
+
Fail`size ${size} exceeds limit of ${optMaxChunkSize}`;
|
|
72
|
+
}
|
|
73
|
+
if (data.length < colon + 1 + size + 1) {
|
|
74
|
+
break; // still waiting for `${DATA}.`
|
|
75
|
+
}
|
|
76
|
+
data[colon + 1 + size] === COMMA ||
|
|
77
|
+
Fail`malformed netstring: not terminated by comma`;
|
|
78
|
+
payloads.push(data.subarray(colon + 1, colon + 1 + size));
|
|
79
|
+
start = colon + 1 + size + 1;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const leftover = data.subarray(start);
|
|
83
|
+
return { leftover, payloads };
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* @param {number} [optMaxChunkSize]
|
|
88
|
+
* @returns {Transform}
|
|
89
|
+
*/
|
|
90
|
+
// input is a byte pipe, output is a sequence of Buffers
|
|
91
|
+
export function netstringDecoderStream(optMaxChunkSize) {
|
|
92
|
+
/** @type {Buffer<ArrayBufferLike>} */
|
|
93
|
+
let buffered = Buffer.from('');
|
|
94
|
+
/**
|
|
95
|
+
* @param {Buffer} chunk
|
|
96
|
+
* @param {BufferEncoding} encoding
|
|
97
|
+
* @param {any} callback
|
|
98
|
+
* @this {{ push: (b: Buffer) => void }}
|
|
99
|
+
*/
|
|
100
|
+
function transform(chunk, encoding, callback) {
|
|
101
|
+
if (!Buffer.isBuffer(chunk)) {
|
|
102
|
+
throw Error('stream requires Buffers');
|
|
103
|
+
}
|
|
104
|
+
buffered = Buffer.concat([buffered, chunk]);
|
|
105
|
+
let err;
|
|
106
|
+
try {
|
|
107
|
+
const { leftover, payloads } = decode(buffered, optMaxChunkSize);
|
|
108
|
+
buffered = leftover;
|
|
109
|
+
for (let i = 0; i < payloads.length; i += 1) {
|
|
110
|
+
this.push(payloads[i]);
|
|
111
|
+
}
|
|
112
|
+
} catch (e) {
|
|
113
|
+
err = e;
|
|
114
|
+
}
|
|
115
|
+
// we buffer all data internally, to accommodate netstrings larger than
|
|
116
|
+
// Transform's default buffer size, and callback() indicates that we've
|
|
117
|
+
// consumed the input
|
|
118
|
+
callback(err);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Buffer in, Buffer out, except that each output Buffer is precious, even
|
|
122
|
+
// empty ones, and without readableObjectMode the Stream will discard empty
|
|
123
|
+
// buffers
|
|
124
|
+
return new Transform({ transform, readableObjectMode: true });
|
|
125
|
+
}
|
|
@@ -1,41 +1,45 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
1
|
/**
|
|
3
2
|
* @typedef {object} BufferLineTransformOptions
|
|
4
|
-
* @property {Buffer | string | number} [break] line break matcher for
|
|
5
|
-
*
|
|
3
|
+
* @property {Buffer | string | number} [break] line break matcher for
|
|
4
|
+
* Buffer.indexOf() (default: 10)
|
|
5
|
+
* @property {BufferEncoding} [breakEncoding] if break is a string, the encoding
|
|
6
|
+
* to use
|
|
6
7
|
*/
|
|
7
8
|
export default class BufferLineTransform extends Transform {
|
|
8
9
|
/**
|
|
9
|
-
* The BufferLineTransform is reading String or Buffer content from a Readable
|
|
10
|
-
* and writing each line as a Buffer in object mode
|
|
10
|
+
* The BufferLineTransform is reading String or Buffer content from a Readable
|
|
11
|
+
* stream and writing each line as a Buffer in object mode
|
|
11
12
|
*
|
|
12
|
-
* @param {import('node:stream').TransformOptions &
|
|
13
|
+
* @param {import('node:stream').TransformOptions &
|
|
14
|
+
* BufferLineTransformOptions} [options]
|
|
13
15
|
*/
|
|
14
|
-
constructor(options?:
|
|
15
|
-
_breakValue: string | number | Buffer
|
|
16
|
+
constructor(options?: import("node:stream").TransformOptions & BufferLineTransformOptions);
|
|
17
|
+
_breakValue: string | number | Buffer<ArrayBufferLike>;
|
|
16
18
|
_breakEncoding: BufferEncoding | undefined;
|
|
17
19
|
_breakLength: number;
|
|
18
|
-
/** @type {
|
|
19
|
-
_chunks:
|
|
20
|
+
/** @type {Buffer[]} */
|
|
21
|
+
_chunks: Buffer[];
|
|
20
22
|
/**
|
|
21
|
-
* @override
|
|
22
23
|
* @param {any} chunk
|
|
23
24
|
* @param {BufferEncoding | 'buffer'} encoding
|
|
24
25
|
* @param {import('node:stream').TransformCallback} cb
|
|
26
|
+
* @override
|
|
25
27
|
*/
|
|
26
|
-
override _transform(chunk: any, encoding: BufferEncoding |
|
|
28
|
+
override _transform(chunk: any, encoding: BufferEncoding | "buffer", cb: import("node:stream").TransformCallback): void;
|
|
27
29
|
/** @param {Buffer} line */
|
|
28
30
|
_writeItem(line: Buffer): void;
|
|
29
31
|
}
|
|
30
32
|
export type BufferLineTransformOptions = {
|
|
31
33
|
/**
|
|
32
|
-
* line break matcher for
|
|
34
|
+
* line break matcher for
|
|
35
|
+
* Buffer.indexOf() (default: 10)
|
|
33
36
|
*/
|
|
34
|
-
break?: string | number | Buffer | undefined;
|
|
37
|
+
break?: string | number | Buffer<ArrayBufferLike> | undefined;
|
|
35
38
|
/**
|
|
36
|
-
* if break is a string, the encoding
|
|
39
|
+
* if break is a string, the encoding
|
|
40
|
+
* to use
|
|
37
41
|
*/
|
|
38
42
|
breakEncoding?: BufferEncoding | undefined;
|
|
39
43
|
};
|
|
40
|
-
import { Transform } from
|
|
44
|
+
import { Transform } from 'node:stream';
|
|
41
45
|
//# sourceMappingURL=buffer-line-transform.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buffer-line-transform.d.ts","sourceRoot":"","sources":["buffer-line-transform.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"buffer-line-transform.d.ts","sourceRoot":"","sources":["buffer-line-transform.js"],"names":[],"mappings":"AAKA;;;;;;GAMG;AAEH;IACE;;;;;;OAMG;IACH,sBAHW,OAAO,aAAa,EAAE,gBAAgB,GAC5C,0BAA0B,EAyB9B;IAhBC,uDAAmC;IACnC,2CAAmC;IAWnC,qBAA+B;IAE/B,uBAAuB;IACvB,SADW,MAAM,EAAE,CACF;IAGnB;;;;;OAKG;IACH,2BALW,GAAG,YACH,cAAc,GAAG,QAAQ,MACzB,OAAO,aAAa,EAAE,iBAAiB,QAiDjD;IAeD,2BAA2B;IAC3B,iBADY,MAAM,QAOjB;CACF;;;;;;;;;;;;;0BAtHyB,aAAa"}
|
|
@@ -1,20 +1,23 @@
|
|
|
1
|
-
/*
|
|
1
|
+
/* eslint-env node */
|
|
2
2
|
/* eslint-disable no-underscore-dangle */
|
|
3
3
|
|
|
4
4
|
import { Transform } from 'node:stream';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* @typedef {object} BufferLineTransformOptions
|
|
8
|
-
* @property {Buffer | string | number} [break] line break matcher for
|
|
9
|
-
*
|
|
8
|
+
* @property {Buffer | string | number} [break] line break matcher for
|
|
9
|
+
* Buffer.indexOf() (default: 10)
|
|
10
|
+
* @property {BufferEncoding} [breakEncoding] if break is a string, the encoding
|
|
11
|
+
* to use
|
|
10
12
|
*/
|
|
11
13
|
|
|
12
14
|
export default class BufferLineTransform extends Transform {
|
|
13
15
|
/**
|
|
14
|
-
* The BufferLineTransform is reading String or Buffer content from a Readable
|
|
15
|
-
* and writing each line as a Buffer in object mode
|
|
16
|
+
* The BufferLineTransform is reading String or Buffer content from a Readable
|
|
17
|
+
* stream and writing each line as a Buffer in object mode
|
|
16
18
|
*
|
|
17
|
-
* @param {import('node:stream').TransformOptions &
|
|
19
|
+
* @param {import('node:stream').TransformOptions &
|
|
20
|
+
* BufferLineTransformOptions} [options]
|
|
18
21
|
*/
|
|
19
22
|
constructor(options) {
|
|
20
23
|
const {
|
|
@@ -37,15 +40,15 @@ export default class BufferLineTransform extends Transform {
|
|
|
37
40
|
}
|
|
38
41
|
this._breakLength = breakLength;
|
|
39
42
|
|
|
40
|
-
/** @type {
|
|
43
|
+
/** @type {Buffer[]} */
|
|
41
44
|
this._chunks = [];
|
|
42
45
|
}
|
|
43
46
|
|
|
44
47
|
/**
|
|
45
|
-
* @override
|
|
46
48
|
* @param {any} chunk
|
|
47
49
|
* @param {BufferEncoding | 'buffer'} encoding
|
|
48
50
|
* @param {import('node:stream').TransformCallback} cb
|
|
51
|
+
* @override
|
|
49
52
|
*/
|
|
50
53
|
_transform(chunk, encoding, cb) {
|
|
51
54
|
try {
|
|
@@ -96,8 +99,8 @@ export default class BufferLineTransform extends Transform {
|
|
|
96
99
|
}
|
|
97
100
|
|
|
98
101
|
/**
|
|
99
|
-
* @override
|
|
100
102
|
* @param {import('node:stream').TransformCallback} cb
|
|
103
|
+
* @override
|
|
101
104
|
*/
|
|
102
105
|
_flush(cb) {
|
|
103
106
|
if (this._chunks.length) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createBundles.d.ts","sourceRoot":"","sources":["createBundles.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"createBundles.d.ts","sourceRoot":"","sources":["createBundles.js"],"names":[],"mappings":"AAYO,6EAgCN;AAEM,mFAMN;AAEM,iGAkCN"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
+
/* eslint-env node */
|
|
1
2
|
// Use modules not prefixed with `node:` since some deploy scripts may
|
|
2
3
|
// still be running in esm emulation
|
|
3
4
|
import path from 'path';
|
|
4
5
|
import { spawnSync } from 'child_process';
|
|
5
6
|
import { createRequire } from 'module';
|
|
6
7
|
|
|
7
|
-
|
|
8
|
+
import { Fail, q } from '@endo/errors';
|
|
9
|
+
|
|
8
10
|
const BUNDLE_SOURCE_PROGRAM = 'bundle-source';
|
|
9
11
|
const req = createRequire(import.meta.url);
|
|
10
12
|
|
|
@@ -22,14 +24,21 @@ export const createBundlesFromAbsolute = async sourceBundles => {
|
|
|
22
24
|
}
|
|
23
25
|
const bundle = match[1];
|
|
24
26
|
|
|
25
|
-
const args = cacheToArgs.get(cache) || ['--
|
|
27
|
+
const args = cacheToArgs.get(cache) || ['--cache-js', cache];
|
|
28
|
+
args.push('--elide-comments');
|
|
26
29
|
args.push(srcPath, bundle);
|
|
27
30
|
cacheToArgs.set(cache, args);
|
|
28
31
|
}
|
|
29
32
|
|
|
30
33
|
for (const args of cacheToArgs.values()) {
|
|
31
34
|
console.log(BUNDLE_SOURCE_PROGRAM, ...args);
|
|
32
|
-
const
|
|
35
|
+
const env = /** @type {NodeJS.ProcessEnv} */ (
|
|
36
|
+
/** @type {unknown} */ ({
|
|
37
|
+
__proto__: process.env,
|
|
38
|
+
LOCKDOWN_OVERRIDE_TAMING: 'severe',
|
|
39
|
+
})
|
|
40
|
+
);
|
|
41
|
+
const { status } = spawnSync(prog, args, { stdio: 'inherit', env });
|
|
33
42
|
status === 0 ||
|
|
34
43
|
Fail`${q(BUNDLE_SOURCE_PROGRAM)} failed with status ${q(status)}`;
|
|
35
44
|
}
|
package/src/node/fs-stream.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export function fsStreamReady(stream: import("fs").ReadStream | import("fs").WriteStream): Promise<void>;
|
|
1
|
+
export function fsStreamReady(stream: import("fs").ReadStream | import("fs").WriteStream | import("net").Socket): Promise<void>;
|
|
2
2
|
export function makeFsStreamWriter(filePath: string | undefined | null): Promise<{
|
|
3
3
|
write: (data: any) => Promise<void>;
|
|
4
4
|
flush: () => Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs-stream.d.ts","sourceRoot":"","sources":["fs-stream.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fs-stream.d.ts","sourceRoot":"","sources":["fs-stream.js"],"names":[],"mappings":"AAUO,sCALI,OAAO,IAAI,EAAE,UAAU,GAC3B,OAAO,IAAI,EAAE,WAAW,GACxB,OAAO,KAAK,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAgCtB;AAIG,6CADK,MAAM,GAAG,SAAS,GAAG,IAAI;;;;eAwEpC;6BAzEa,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,CAAC"}
|
package/src/node/fs-stream.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import { createWriteStream } from 'node:fs';
|
|
2
1
|
import { open } from 'node:fs/promises';
|
|
3
|
-
import
|
|
2
|
+
import process from 'node:process';
|
|
3
|
+
import { promisify } from 'node:util';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
* @param {import(
|
|
6
|
+
* @param {import('fs').ReadStream
|
|
7
|
+
* | import('fs').WriteStream
|
|
8
|
+
* | import('net').Socket} stream
|
|
7
9
|
* @returns {Promise<void>}
|
|
8
10
|
*/
|
|
9
11
|
export const fsStreamReady = stream =>
|
|
@@ -19,13 +21,13 @@ export const fsStreamReady = stream =>
|
|
|
19
21
|
}
|
|
20
22
|
|
|
21
23
|
const onReady = () => {
|
|
22
|
-
cleanup();
|
|
24
|
+
cleanup();
|
|
23
25
|
resolve();
|
|
24
26
|
};
|
|
25
27
|
|
|
26
28
|
/** @param {Error} err */
|
|
27
29
|
const onError = err => {
|
|
28
|
-
cleanup();
|
|
30
|
+
cleanup();
|
|
29
31
|
reject(err);
|
|
30
32
|
};
|
|
31
33
|
|
|
@@ -38,10 +40,6 @@ export const fsStreamReady = stream =>
|
|
|
38
40
|
stream.on('error', onError);
|
|
39
41
|
});
|
|
40
42
|
|
|
41
|
-
const noPath = /** @type {import('fs').PathLike} */ (
|
|
42
|
-
/** @type {unknown} */ (undefined)
|
|
43
|
-
);
|
|
44
|
-
|
|
45
43
|
/** @typedef {NonNullable<Awaited<ReturnType<typeof makeFsStreamWriter>>>} FsStreamWriter */
|
|
46
44
|
/** @param {string | undefined | null} filePath */
|
|
47
45
|
export const makeFsStreamWriter = async filePath => {
|
|
@@ -49,45 +47,55 @@ export const makeFsStreamWriter = async filePath => {
|
|
|
49
47
|
return undefined;
|
|
50
48
|
}
|
|
51
49
|
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
|
|
50
|
+
const useStdout = filePath === '-';
|
|
51
|
+
const { handle, stream } = await (async () => {
|
|
52
|
+
if (useStdout) {
|
|
53
|
+
return { handle: undefined, stream: process.stdout };
|
|
54
|
+
}
|
|
55
|
+
const fh = await open(filePath, 'a');
|
|
56
|
+
return { handle: fh, stream: fh.createWriteStream({ flush: true }) };
|
|
57
|
+
})();
|
|
55
58
|
await fsStreamReady(stream);
|
|
59
|
+
const writeAsync = promisify(stream.write.bind(stream));
|
|
60
|
+
const closeAsync =
|
|
61
|
+
useStdout || !(/** @type {any} */ (stream).close)
|
|
62
|
+
? undefined
|
|
63
|
+
: promisify(
|
|
64
|
+
/** @type {import('fs').WriteStream} */ (stream).close.bind(stream),
|
|
65
|
+
);
|
|
56
66
|
|
|
57
67
|
let flushed = Promise.resolve();
|
|
58
68
|
let closed = false;
|
|
59
69
|
|
|
60
|
-
const
|
|
61
|
-
if (closed) {
|
|
62
|
-
throw Error('Stream closed');
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/** @type {Promise<void>} */
|
|
66
|
-
const written = new Promise((resolve, reject) => {
|
|
67
|
-
stream.write(data, err => {
|
|
68
|
-
if (err) {
|
|
69
|
-
reject(err);
|
|
70
|
-
} else {
|
|
71
|
-
resolve();
|
|
72
|
-
}
|
|
73
|
-
});
|
|
74
|
-
});
|
|
70
|
+
const updateFlushed = p => {
|
|
75
71
|
flushed = flushed.then(
|
|
76
|
-
() =>
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
72
|
+
() => p,
|
|
73
|
+
err =>
|
|
74
|
+
p.then(
|
|
75
|
+
() => Promise.reject(err),
|
|
76
|
+
pError =>
|
|
77
|
+
Promise.reject(
|
|
78
|
+
pError !== err ? AggregateError([err, pError]) : err,
|
|
79
|
+
),
|
|
83
80
|
),
|
|
84
81
|
);
|
|
85
|
-
|
|
82
|
+
flushed.catch(() => {});
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
const write = async data => {
|
|
86
|
+
const written = closed
|
|
87
|
+
? Promise.reject(Error('Stream closed'))
|
|
88
|
+
: writeAsync(data);
|
|
89
|
+
updateFlushed(written);
|
|
90
|
+
const waitForDrain = await written;
|
|
91
|
+
if (waitForDrain) {
|
|
92
|
+
await new Promise(resolve => stream.once('drain', resolve));
|
|
93
|
+
}
|
|
86
94
|
};
|
|
87
95
|
|
|
88
96
|
const flush = async () => {
|
|
89
97
|
await flushed;
|
|
90
|
-
await handle
|
|
98
|
+
await handle?.sync().catch(err => {
|
|
91
99
|
if (err.code === 'EINVAL') {
|
|
92
100
|
return;
|
|
93
101
|
}
|
|
@@ -96,10 +104,13 @@ export const makeFsStreamWriter = async filePath => {
|
|
|
96
104
|
};
|
|
97
105
|
|
|
98
106
|
const close = async () => {
|
|
107
|
+
// TODO: Consider creating a single Error here to use a write rejection
|
|
99
108
|
closed = true;
|
|
100
109
|
await flush();
|
|
101
|
-
|
|
110
|
+
await closeAsync?.();
|
|
102
111
|
};
|
|
103
112
|
|
|
113
|
+
stream.on('error', err => updateFlushed(Promise.reject(err)));
|
|
114
|
+
|
|
104
115
|
return harden({ write, flush, close });
|
|
105
116
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shutdown.d.ts","sourceRoot":"","sources":["shutdown.js"],"names":[],"mappings":"AAKO;;
|
|
1
|
+
{"version":3,"file":"shutdown.d.ts","sourceRoot":"","sources":["shutdown.js"],"names":[],"mappings":"AAKO;;EA8DN;AAGM,wDAON"}
|
package/src/node/shutdown.js
CHANGED
|
@@ -22,7 +22,6 @@ export const makeFreshShutdown = (verbose = true) => {
|
|
|
22
22
|
process.off('SIGINT', shutdown);
|
|
23
23
|
process.off('SIGTERM', shutdown);
|
|
24
24
|
process.off('beforeExit', shutdown);
|
|
25
|
-
// eslint-disable-next-line no-use-before-define
|
|
26
25
|
process.off('uncaughtException', uncaughtShutdown);
|
|
27
26
|
verbose && console.error(`Shutting down cleanly...`);
|
|
28
27
|
const shutdowners = [...shutdownThunks.keys()];
|
|
@@ -13,7 +13,7 @@ export function makePrioritySendersManager(sendersNode: ERef<import("./lib-chain
|
|
|
13
13
|
* @returns {Promise<void>}
|
|
14
14
|
*/
|
|
15
15
|
remove: (rawNamespace: string, address: string) => Promise<void>;
|
|
16
|
-
} & import("@endo/eventual-send").RemotableBrand<{}, {
|
|
16
|
+
} & import("@endo/pass-style").RemotableObject<`Alleged: ${string}`> & import("@endo/eventual-send").RemotableBrand<{}, {
|
|
17
17
|
/**
|
|
18
18
|
* @param {string} rawNamespace
|
|
19
19
|
* @param {string} address
|
|
@@ -28,4 +28,5 @@ export function makePrioritySendersManager(sendersNode: ERef<import("./lib-chain
|
|
|
28
28
|
remove: (rawNamespace: string, address: string) => Promise<void>;
|
|
29
29
|
}>;
|
|
30
30
|
export type PrioritySendersManager = ReturnType<typeof makePrioritySendersManager>;
|
|
31
|
+
import type { ERef } from '@endo/far';
|
|
31
32
|
//# sourceMappingURL=priority-senders.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"priority-senders.d.ts","sourceRoot":"","sources":["priority-senders.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"priority-senders.d.ts","sourceRoot":"","sources":["priority-senders.js"],"names":[],"mappings":"AAQA,4CAA4C;AAC5C,uCADW,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAMtC;AAQK,wDAFI,KAAK,OAAO,uBAAuB,EAAE,WAAW,CAAC;IA0CxD;;;;OAIG;wBAHQ,MAAM,WACN,MAAM,KACJ,OAAO,CAAC,IAAI,CAAC;IAe1B;;;;OAIG;2BAHQ,MAAM,WACN,MAAM,KACJ,OAAO,CAAC,IAAI,CAAC;;IArB1B;;;;OAIG;wBAHQ,MAAM,WACN,MAAM,KACJ,OAAO,CAAC,IAAI,CAAC;IAe1B;;;;OAIG;2BAHQ,MAAM,WACN,MAAM,KACJ,OAAO,CAAC,IAAI,CAAC;GAuB7B;qCAGa,UAAU,CAAC,OAAO,0BAA0B,CAAC;0BA1GnC,WAAW"}
|
package/src/priority-senders.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { Fail, q } from '@endo/errors';
|
|
1
2
|
import { E, Far } from '@endo/far';
|
|
2
3
|
|
|
3
|
-
|
|
4
|
+
/** @import {ERef} from '@endo/far'; */
|
|
5
|
+
/** @import {StorageNode} from './lib-chainStorage.js'; */
|
|
4
6
|
|
|
5
7
|
const PRIORITY_SENDERS_NAMESPACE_RE = /^[a-zA-Z0-9_-]{1,50}$/;
|
|
6
8
|
|
|
@@ -20,9 +22,13 @@ harden(normalizeSenderNamespace);
|
|
|
20
22
|
*/
|
|
21
23
|
export const makePrioritySendersManager = sendersNode => {
|
|
22
24
|
/**
|
|
23
|
-
* address to tuple with storage node and set of namespaces that requested
|
|
25
|
+
* address to tuple with storage node and set of namespaces that requested
|
|
26
|
+
* priority
|
|
24
27
|
*
|
|
25
|
-
* @type {Map<
|
|
28
|
+
* @type {Map<
|
|
29
|
+
* string,
|
|
30
|
+
* readonly [node: StorageNode, namespaces: Set<string>]
|
|
31
|
+
* >}
|
|
26
32
|
*/
|
|
27
33
|
const addressRecords = new Map();
|
|
28
34
|
|
|
@@ -47,7 +53,7 @@ export const makePrioritySendersManager = sendersNode => {
|
|
|
47
53
|
const node = await E(sendersNode).makeChildNode(address, {
|
|
48
54
|
sequence: false,
|
|
49
55
|
});
|
|
50
|
-
/** @type {readonly [
|
|
56
|
+
/** @type {readonly [node: StorageNode, namespaces: Set<string>]} */
|
|
51
57
|
const r = [node, new Set()];
|
|
52
58
|
addressRecords.set(address, r);
|
|
53
59
|
return r;
|
package/src/queue.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export function makeWithQueue():
|
|
1
|
+
export function makeWithQueue(): (inner: T) => (...args: Parameters<T>) => Promise<Awaited<ReturnType<T>>>;
|
|
2
2
|
//# sourceMappingURL=queue.d.ts.map
|
package/src/queue.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["queue.js"],"names":[],"mappings":"AAQO,
|
|
1
|
+
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["queue.js"],"names":[],"mappings":"AAQO,kCA2BqB,OAFf,CAEoB,MAKH,GAAG,MAHlB,UAAU,CAAC,CAAC,CAGU,KAFpB,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAkB/C"}
|
package/src/queue.js
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
import { makePromiseKit } from '@endo/promise-kit';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
* Return a function that can wrap an async or sync method, but
|
|
7
|
-
*
|
|
6
|
+
* Return a function that can wrap an async or sync method, but ensures only one
|
|
7
|
+
* of them (in order) is running at a time.
|
|
8
8
|
*/
|
|
9
9
|
export const makeWithQueue = () => {
|
|
10
10
|
const queue = [];
|
|
@@ -16,7 +16,7 @@ export const makeWithQueue = () => {
|
|
|
16
16
|
}
|
|
17
17
|
const [thunk, resolve, reject] = queue[0];
|
|
18
18
|
// Run the thunk in a new turn.
|
|
19
|
-
Promise.resolve()
|
|
19
|
+
void Promise.resolve()
|
|
20
20
|
.then(thunk)
|
|
21
21
|
// Resolve or reject our caller with the thunk's value.
|
|
22
22
|
.then(resolve, reject)
|
|
@@ -30,14 +30,13 @@ export const makeWithQueue = () => {
|
|
|
30
30
|
};
|
|
31
31
|
|
|
32
32
|
/**
|
|
33
|
-
* @template {any[]} T
|
|
34
|
-
* @
|
|
35
|
-
* @param {(...args: T) => Promise<R>} inner
|
|
33
|
+
* @template {(...args: any[]) => any} T
|
|
34
|
+
* @param {T} inner
|
|
36
35
|
*/
|
|
37
36
|
return function withQueue(inner) {
|
|
38
37
|
/**
|
|
39
|
-
* @param {T} args
|
|
40
|
-
* @returns {Promise<
|
|
38
|
+
* @param {Parameters<T>} args
|
|
39
|
+
* @returns {Promise<Awaited<ReturnType<T>>>}
|
|
41
40
|
*/
|
|
42
41
|
return function queueCall(...args) {
|
|
43
42
|
// Curry the arguments into the inner function, and
|
package/src/scratch.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ export default function makeScratchPad(): {
|
|
|
6
6
|
keys: () => Promise<any[]>;
|
|
7
7
|
list: () => Promise<any[]>;
|
|
8
8
|
set: (keyP: any, objP: any) => Promise<any>;
|
|
9
|
-
} & import("@endo/eventual-send").RemotableBrand<{}, {
|
|
9
|
+
} & import("@endo/pass-style").RemotableObject<`Alleged: ${string}`> & import("@endo/eventual-send").RemotableBrand<{}, {
|
|
10
10
|
delete: (keyP: any) => Promise<void>;
|
|
11
11
|
get: (keyP: any) => Promise<any>;
|
|
12
12
|
lookup: (...path: any[]) => any;
|
package/src/scratch.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scratch.d.ts","sourceRoot":"","sources":["scratch.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgDC;yBACa,
|
|
1
|
+
{"version":3,"file":"scratch.d.ts","sourceRoot":"","sources":["scratch.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgDC;yBACa,UAAU,CAAC,OAAO,cAAc,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
export function makeLimitedConsole(makeLogger: (level: string) => (...args: unknown[]) => void): LimitedConsole;
|
|
2
|
+
/**
|
|
3
|
+
* @template T
|
|
4
|
+
* @typedef {{ [KeyType in keyof T]: T[KeyType] } & {}} Simplify flatten the
|
|
5
|
+
* type output to improve type hints shown in editors
|
|
6
|
+
* https://github.com/sindresorhus/type-fest/blob/main/source/simplify.d.ts
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* @typedef {(...args: any[]) => any} Callable
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* @template {{}} T
|
|
13
|
+
* @typedef {{
|
|
14
|
+
* [K in keyof T]: T[K] extends Callable ? T[K] : DeeplyAwaited<T[K]>;
|
|
15
|
+
* }} DeeplyAwaitedObject
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* @template T
|
|
19
|
+
* @typedef {T extends PromiseLike<any>
|
|
20
|
+
* ? Awaited<T>
|
|
21
|
+
* : T extends {}
|
|
22
|
+
* ? Simplify<DeeplyAwaitedObject<T>>
|
|
23
|
+
* : Awaited<T>} DeeplyAwaited
|
|
24
|
+
*/
|
|
25
|
+
/**
|
|
26
|
+
* A more constrained version of {deeplyFulfilled} for type safety until
|
|
27
|
+
* https://github.com/endojs/endo/issues/1257 Useful in starting contracts that
|
|
28
|
+
* need all terms to be fulfilled in order to be durable.
|
|
29
|
+
*
|
|
30
|
+
* @type {<T extends {}>(unfulfilledTerms: T) => Promise<DeeplyAwaited<T>>}
|
|
31
|
+
*/
|
|
32
|
+
export const deeplyFulfilledObject: <T extends {}>(unfulfilledTerms: T) => Promise<DeeplyAwaited<T>>;
|
|
33
|
+
export function PromiseAllOrErrors<T>(items: readonly (T | PromiseLike<T>)[]): Promise<T[]>;
|
|
34
|
+
export function aggregateTryFinally<T>(trier: () => Promise<T>, finalizer: (error?: unknown) => Promise<unknown>): ReturnType<() => Promise<T>>;
|
|
35
|
+
export function withDeferredCleanup<T>(fn: (addCleanup: (fn: (err?: unknown) => Promise<void>) => void) => Promise<T>): ReturnType<(addCleanup: (fn: (err?: unknown) => Promise<void>) => void) => Promise<T>>;
|
|
36
|
+
export function assertAllDefined<T extends Record<string, unknown>>(obj: T): asserts obj is AllDefined<T>;
|
|
37
|
+
export function attenuate<T, P extends Permit<T>>(specimen: T, permit: P, transform?: <U, SubP extends Permit<U>>(attenuation: U, permit: SubP) => U): Attenuated<T, P>;
|
|
38
|
+
export const forever: AsyncIterable<undefined>;
|
|
39
|
+
export function whileTrue<T>(produce: () => T): AsyncIterable<Awaited<T>>;
|
|
40
|
+
export function untilTrue<T>(produce: () => T): AsyncIterable<Awaited<T>>;
|
|
41
|
+
/** @type {<X, Y>(xs: X[], ys: Y[]) => [X, Y][]} */
|
|
42
|
+
export const zip: <X, Y>(xs: X[], ys: Y[]) => [X, Y][];
|
|
43
|
+
/**
|
|
44
|
+
* @type {<T extends Record<string, ERef<any>>>(
|
|
45
|
+
* obj: T,
|
|
46
|
+
* ) => Promise<{ [K in keyof T]: Awaited<T[K]> }>}
|
|
47
|
+
*/
|
|
48
|
+
export const allValues: <T extends Record<string, ERef<any>>>(obj: T) => Promise<{ [K in keyof T]: Awaited<T[K]>; }>;
|
|
49
|
+
export function synchronizedTee<T = unknown>(sourceStream: AsyncIterator<T, void, void>, readerCount: number): AsyncGenerator<T, void, void>[];
|
|
50
|
+
/**
|
|
51
|
+
* flatten the
|
|
52
|
+
* type output to improve type hints shown in editors
|
|
53
|
+
* https://github.com/sindresorhus/type-fest/blob/main/source/simplify.d.ts
|
|
54
|
+
*/
|
|
55
|
+
export type Simplify<T> = { [KeyType in keyof T]: T[KeyType]; } & {};
|
|
56
|
+
export type Callable = (...args: any[]) => any;
|
|
57
|
+
export type DeeplyAwaitedObject<T extends {}> = { [K in keyof T]: T[K] extends Callable ? T[K] : DeeplyAwaited<T[K]>; };
|
|
58
|
+
export type DeeplyAwaited<T> = T extends PromiseLike<any> ? Awaited<T> : T extends {} ? Simplify<DeeplyAwaitedObject<T>> : Awaited<T>;
|
|
59
|
+
export type AllDefined<T extends Record<string, unknown>> = { [P in keyof T]: Exclude<T[P], undefined>; };
|
|
60
|
+
import { objectMap } from '@endo/common/object-map.js';
|
|
61
|
+
import { objectMetaMap } from '@endo/common/object-meta-map.js';
|
|
62
|
+
import { fromUniqueEntries } from '@endo/common/from-unique-entries.js';
|
|
63
|
+
import type { LimitedConsole } from './js-utils.js';
|
|
64
|
+
import type { Permit } from './types.js';
|
|
65
|
+
import type { Attenuated } from './types.js';
|
|
66
|
+
import type { ERef } from '@endo/far';
|
|
67
|
+
export { objectMap, objectMetaMap, fromUniqueEntries };
|
|
68
|
+
//# sourceMappingURL=ses-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ses-utils.d.ts","sourceRoot":"","sources":["ses-utils.js"],"names":[],"mappings":"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"}
|