@agoric/swingset-vat 0.33.0-u19.0 → 0.33.0-u19.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/package.json +6 -6
- package/src/controller/controller.js +1 -1
- package/src/kernel/slogger.js +51 -81
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agoric/swingset-vat",
|
|
3
|
-
"version": "0.33.0-u19.
|
|
3
|
+
"version": "0.33.0-u19.1",
|
|
4
4
|
"description": "Vat/Container Launcher",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "src/index.js",
|
|
@@ -27,14 +27,14 @@
|
|
|
27
27
|
"@types/yargs-parser": "^21.0.0"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@agoric/internal": "^0.4.0-u19.
|
|
30
|
+
"@agoric/internal": "^0.4.0-u19.1",
|
|
31
31
|
"@agoric/kmarshal": "^0.1.1-u19.0",
|
|
32
32
|
"@agoric/store": "^0.9.3-u19.0",
|
|
33
|
-
"@agoric/swing-store": "^0.10.0-u19.
|
|
34
|
-
"@agoric/swingset-liveslots": "^0.10.3-u19.
|
|
33
|
+
"@agoric/swing-store": "^0.10.0-u19.1",
|
|
34
|
+
"@agoric/swingset-liveslots": "^0.10.3-u19.1",
|
|
35
35
|
"@agoric/swingset-xsnap-supervisor": "^0.10.3-u19.0",
|
|
36
36
|
"@agoric/time": "^0.3.3-u19.0",
|
|
37
|
-
"@agoric/vat-data": "^0.5.3-u19.
|
|
37
|
+
"@agoric/vat-data": "^0.5.3-u19.1",
|
|
38
38
|
"@agoric/xsnap-lockdown": "^0.14.1-u19.0",
|
|
39
39
|
"@endo/base64": "^1.0.9",
|
|
40
40
|
"@endo/bundle-source": "^3.5.1",
|
|
@@ -102,5 +102,5 @@
|
|
|
102
102
|
"typeCoverage": {
|
|
103
103
|
"atLeast": 76.28
|
|
104
104
|
},
|
|
105
|
-
"gitHead": "
|
|
105
|
+
"gitHead": "a04d2bf43a9753d123954b52c6ba8d35083a3c8f"
|
|
106
106
|
}
|
|
@@ -216,7 +216,7 @@ export async function makeSwingsetController(
|
|
|
216
216
|
const sloggingKernelConsole = makeLimitedConsole(level => {
|
|
217
217
|
return (...args) => {
|
|
218
218
|
kernelConsole[level](...args);
|
|
219
|
-
writeSlogObject({ type: 'console', source: 'kernel', args });
|
|
219
|
+
writeSlogObject({ type: 'console', source: 'kernel', level, args });
|
|
220
220
|
};
|
|
221
221
|
});
|
|
222
222
|
writeSlogObject({ type: 'import-kernel-start' });
|
package/src/kernel/slogger.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { q } from '@endo/errors';
|
|
2
|
+
import { objectMap } from '@agoric/internal';
|
|
2
3
|
import { makeLimitedConsole } from '@agoric/internal/src/ses-utils.js';
|
|
3
4
|
|
|
5
|
+
/** @import {Callable} from '@agoric/internal'; */
|
|
4
6
|
/** @import {LimitedConsole} from '@agoric/internal/src/js-utils.js'; */
|
|
5
7
|
|
|
6
8
|
const IDLE = 'idle';
|
|
@@ -13,7 +15,7 @@ const noopFinisher = harden(() => {});
|
|
|
13
15
|
/** @typedef {Partial<Record<Exclude<keyof KernelSlog, 'write'>, (methodName: string, args: unknown[], finisher: AnyFinisher) => unknown>>} SlogWrappers */
|
|
14
16
|
|
|
15
17
|
/**
|
|
16
|
-
* Support
|
|
18
|
+
* Support asynchronous slog callbacks that are invoked at the start
|
|
17
19
|
* of an operation and return either a non-function result or a "finisher"
|
|
18
20
|
* function to be invoked upon operation completion.
|
|
19
21
|
* This maker accepts a collection of wrapper functions that receive the same
|
|
@@ -21,61 +23,54 @@ const noopFinisher = harden(() => {});
|
|
|
21
23
|
* (e.g., its finisher), and are expected to return a finisher of their own that
|
|
22
24
|
* will invoke that wrapped finisher.
|
|
23
25
|
*
|
|
24
|
-
* @
|
|
26
|
+
* @template {Record<string, Callable>} Methods
|
|
27
|
+
* @param {SlogWrappers} slogCallbacks
|
|
28
|
+
* @param {string} unusedMsgPrefix prefix for warn-level logging about unused callbacks
|
|
29
|
+
* @param {Methods} methods to wrap
|
|
30
|
+
* @returns {Methods}
|
|
25
31
|
*/
|
|
26
|
-
function
|
|
27
|
-
const unused = new Set(Object.keys(
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
* @template {AnyFinisher} [Finisher=AnyFinisher]
|
|
34
|
-
* @param {string} method name
|
|
35
|
-
* @param {F} impl the original implementation
|
|
36
|
-
* @returns {F} the wrapped method
|
|
37
|
-
*/
|
|
38
|
-
wrap(method, impl) {
|
|
39
|
-
unused.delete(method);
|
|
40
|
-
const wrapper = wrappers[method];
|
|
32
|
+
function addSlogCallbacks(slogCallbacks, unusedMsgPrefix, methods) {
|
|
33
|
+
const unused = new Set(Object.keys(slogCallbacks));
|
|
34
|
+
const wrappedMethods = /** @type {Methods} */ (
|
|
35
|
+
objectMap(methods, (impl, methodKey) => {
|
|
36
|
+
const methodName = /** @type {keyof typeof slogCallbacks} */ (methodKey);
|
|
37
|
+
unused.delete(methodName);
|
|
38
|
+
const wrapper = slogCallbacks[methodName];
|
|
41
39
|
|
|
42
40
|
// If there is no registered wrapper, return the implementation directly.
|
|
43
41
|
if (!wrapper) return impl;
|
|
44
42
|
|
|
45
43
|
const wrapped = (...args) => {
|
|
46
|
-
const maybeFinisher = /** @type {
|
|
44
|
+
const maybeFinisher = /** @type {AnyFinisher} */ (impl(...args));
|
|
47
45
|
try {
|
|
48
46
|
// Allow the callback to observe the call synchronously, and replace
|
|
49
47
|
// the implementation's finisher function, but not to throw an exception.
|
|
50
|
-
const wrapperFinisher = wrapper(
|
|
48
|
+
const wrapperFinisher = wrapper(methodName, args, maybeFinisher);
|
|
51
49
|
if (typeof maybeFinisher !== 'function') return wrapperFinisher;
|
|
52
50
|
|
|
53
51
|
// We wrap the finisher in the callback's return value.
|
|
54
52
|
return (...finishArgs) => {
|
|
55
53
|
try {
|
|
56
|
-
return /** @type {
|
|
54
|
+
return /** @type {AnyFinisher} */ (wrapperFinisher)(
|
|
55
|
+
...finishArgs,
|
|
56
|
+
);
|
|
57
57
|
} catch (e) {
|
|
58
|
-
console.error(`${
|
|
58
|
+
console.error(`${methodName} wrapper finisher failed:`, e);
|
|
59
59
|
return maybeFinisher(...finishArgs);
|
|
60
60
|
}
|
|
61
61
|
};
|
|
62
62
|
} catch (e) {
|
|
63
|
-
console.error(`${
|
|
63
|
+
console.error(`${methodName} wrapper failed:`, e);
|
|
64
64
|
return maybeFinisher;
|
|
65
65
|
}
|
|
66
66
|
};
|
|
67
|
-
return /** @type {
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
done(msg = 'Unused wrappers') {
|
|
75
|
-
if (!unused.size) return;
|
|
76
|
-
console.warn(msg, ...[...unused.keys()].sort().map(q));
|
|
77
|
-
},
|
|
78
|
-
});
|
|
67
|
+
return /** @type {typeof impl} */ (/** @type {unknown} */ (wrapped));
|
|
68
|
+
})
|
|
69
|
+
);
|
|
70
|
+
if (unused.size) {
|
|
71
|
+
console.warn(unusedMsgPrefix, ...[...unused.keys()].sort().map(q));
|
|
72
|
+
}
|
|
73
|
+
return wrappedMethods;
|
|
79
74
|
}
|
|
80
75
|
|
|
81
76
|
export const badConsole = makeLimitedConsole(level => () => {
|
|
@@ -89,22 +84,19 @@ export const noopConsole = makeLimitedConsole(_level => () => {});
|
|
|
89
84
|
* @returns {KernelSlog}
|
|
90
85
|
*/
|
|
91
86
|
export function makeDummySlogger(slogCallbacks, dummyConsole = badConsole) {
|
|
92
|
-
const
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
vatConsole:
|
|
98
|
-
startup:
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
terminateVat: wrap('terminateVat', () => noopFinisher),
|
|
104
|
-
write: noopFinisher,
|
|
87
|
+
const unusedWrapperPrefix =
|
|
88
|
+
'Unused methods in makeDummySlogger slogCallbacks';
|
|
89
|
+
const wrappedMethods = addSlogCallbacks(slogCallbacks, unusedWrapperPrefix, {
|
|
90
|
+
provideVatSlogger: () =>
|
|
91
|
+
harden({ vatSlog: { delivery: () => noopFinisher } }),
|
|
92
|
+
vatConsole: () => dummyConsole,
|
|
93
|
+
startup: () => noopFinisher,
|
|
94
|
+
delivery: () => noopFinisher,
|
|
95
|
+
syscall: () => noopFinisher,
|
|
96
|
+
changeCList: () => noopFinisher,
|
|
97
|
+
terminateVat: () => noopFinisher,
|
|
105
98
|
});
|
|
106
|
-
|
|
107
|
-
return dummySlogger;
|
|
99
|
+
return harden({ ...wrappedMethods, write: noopFinisher });
|
|
108
100
|
}
|
|
109
101
|
|
|
110
102
|
/**
|
|
@@ -250,43 +242,21 @@ export function makeSlogger(slogCallbacks, writeObj) {
|
|
|
250
242
|
return { vatSlog, starting: true };
|
|
251
243
|
}
|
|
252
244
|
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
}
|
|
258
|
-
return harden(finish);
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
// function annotateVat(vatID, data) {
|
|
262
|
-
// safeWrite({ type: 'annotate-vat', vatID, data });
|
|
263
|
-
// }
|
|
264
|
-
|
|
265
|
-
const { wrap, done } = makeFinishersKit(slogCallbacks);
|
|
266
|
-
const slogger = harden({
|
|
267
|
-
provideVatSlogger: wrap('provideVatSlogger', provideVatSlogger),
|
|
268
|
-
vatConsole: wrap('vatConsole', (vatID, ...args) =>
|
|
245
|
+
const unusedWrapperPrefix = 'Unused methods in makeSlogger slogCallbacks';
|
|
246
|
+
const wrappedMethods = addSlogCallbacks(slogCallbacks, unusedWrapperPrefix, {
|
|
247
|
+
provideVatSlogger,
|
|
248
|
+
vatConsole: (vatID, ...args) =>
|
|
269
249
|
provideVatSlogger(vatID).vatSlog.vatConsole(...args),
|
|
270
|
-
)
|
|
271
|
-
startup: wrap('startup', (vatID, ...args) =>
|
|
250
|
+
startup: (vatID, ...args) =>
|
|
272
251
|
provideVatSlogger(vatID).vatSlog.startup(...args),
|
|
273
|
-
)
|
|
274
|
-
// TODO: Remove this seemingly dead code.
|
|
275
|
-
replayVatTranscript,
|
|
276
|
-
delivery: wrap('delivery', (vatID, ...args) =>
|
|
252
|
+
delivery: (vatID, ...args) =>
|
|
277
253
|
provideVatSlogger(vatID).vatSlog.delivery(...args),
|
|
278
|
-
)
|
|
279
|
-
syscall: wrap('syscall', (vatID, ...args) =>
|
|
254
|
+
syscall: (vatID, ...args) =>
|
|
280
255
|
provideVatSlogger(vatID).vatSlog.syscall(...args),
|
|
281
|
-
)
|
|
282
|
-
changeCList: wrap('changeCList', (vatID, ...args) =>
|
|
256
|
+
changeCList: (vatID, ...args) =>
|
|
283
257
|
provideVatSlogger(vatID).vatSlog.changeCList(...args),
|
|
284
|
-
)
|
|
285
|
-
terminateVat: wrap('terminateVat', (vatID, ...args) =>
|
|
258
|
+
terminateVat: (vatID, ...args) =>
|
|
286
259
|
provideVatSlogger(vatID).vatSlog.terminateVat(...args),
|
|
287
|
-
),
|
|
288
|
-
write: safeWrite,
|
|
289
260
|
});
|
|
290
|
-
|
|
291
|
-
return slogger;
|
|
261
|
+
return harden({ ...wrappedMethods, write: safeWrite });
|
|
292
262
|
}
|