@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agoric/swingset-vat",
3
- "version": "0.33.0-u19.0",
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.0",
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.0",
34
- "@agoric/swingset-liveslots": "^0.10.3-u19.0",
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.0",
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": "29e9704c375a06bb617027093b30d2d25faa6471"
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' });
@@ -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 composition of asynchronous callbacks that are invoked at the start
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
- * @param {SlogWrappers} wrappers
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 makeFinishersKit(wrappers) {
27
- const unused = new Set(Object.keys(wrappers));
28
- return harden({
29
- /**
30
- * Robustly wrap a method if a wrapper is defined.
31
- *
32
- * @template {(...args: unknown[]) => (Finisher | unknown)} F
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 {Finisher} */ (impl(...args));
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(method, args, maybeFinisher);
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 {Finisher} */ (wrapperFinisher)(...finishArgs);
54
+ return /** @type {AnyFinisher} */ (wrapperFinisher)(
55
+ ...finishArgs,
56
+ );
57
57
  } catch (e) {
58
- console.error(`${method} wrapper finisher failed:`, e);
58
+ console.error(`${methodName} wrapper finisher failed:`, e);
59
59
  return maybeFinisher(...finishArgs);
60
60
  }
61
61
  };
62
62
  } catch (e) {
63
- console.error(`${method} wrapper failed:`, e);
63
+ console.error(`${methodName} wrapper failed:`, e);
64
64
  return maybeFinisher;
65
65
  }
66
66
  };
67
- return /** @type {F} */ (wrapped);
68
- },
69
- /**
70
- * Declare that all wrapping is done.
71
- *
72
- * @param {string} msg message to display if there are unused wrappers
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 { wrap, done } = makeFinishersKit(slogCallbacks);
93
- const dummySlogger = harden({
94
- provideVatSlogger: wrap('provideVatSlogger', () => {
95
- return harden({ vatSlog: { delivery: () => noopFinisher } });
96
- }),
97
- vatConsole: wrap('vatConsole', () => dummyConsole),
98
- startup: wrap('startup', () => noopFinisher),
99
- replayVatTranscript: wrap('replayVatTranscript', () => noopFinisher),
100
- delivery: wrap('delivery', () => noopFinisher),
101
- syscall: wrap('syscall', () => noopFinisher),
102
- changeCList: wrap('changeCList', () => noopFinisher),
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
- done('Unused makeDummySlogger slogCallbacks method names');
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
- function replayVatTranscript(vatID) {
254
- safeWrite({ type: 'replay-transcript-start', vatID });
255
- function finish() {
256
- safeWrite({ type: 'replay-transcript-finish', vatID });
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
- done('Unused makeSlogger slogCallbacks method names');
291
- return slogger;
261
+ return harden({ ...wrappedMethods, write: safeWrite });
292
262
  }