@jsii/kernel 1.57.0 → 1.60.0
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/lib/api.d.ts +1 -0
- package/lib/api.js +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +7 -3
- package/lib/kernel.d.ts +1 -0
- package/lib/kernel.js +26 -42
- package/lib/objects.d.ts +1 -0
- package/lib/objects.js +4 -7
- package/lib/on-exit.d.ts +1 -0
- package/lib/on-exit.js +1 -1
- package/{test → lib}/recording.d.ts +2 -1
- package/lib/recording.js +73 -0
- package/lib/serialization.d.ts +1 -0
- package/lib/serialization.js +56 -57
- package/package.json +8 -15
- package/test/kernel.test.d.ts +0 -1
- package/test/kernel.test.js +0 -1805
- package/test/objects.test.d.ts +0 -1
- package/test/objects.test.js +0 -20
- package/test/recording.js +0 -73
- package/test/serialization.test.d.ts +0 -1
- package/test/serialization.test.js +0 -93
package/lib/objects.js
CHANGED
|
@@ -24,8 +24,7 @@ const JSII_SYMBOL = Symbol.for('__jsii__');
|
|
|
24
24
|
* information.
|
|
25
25
|
*/
|
|
26
26
|
function jsiiTypeFqn(obj) {
|
|
27
|
-
|
|
28
|
-
return (_a = obj.constructor[JSII_SYMBOL]) === null || _a === void 0 ? void 0 : _a.fqn;
|
|
27
|
+
return obj.constructor[JSII_SYMBOL]?.fqn;
|
|
29
28
|
}
|
|
30
29
|
exports.jsiiTypeFqn = jsiiTypeFqn;
|
|
31
30
|
/**
|
|
@@ -99,7 +98,6 @@ class ObjectTable {
|
|
|
99
98
|
* Return the existing registration if available.
|
|
100
99
|
*/
|
|
101
100
|
registerObject(obj, fqn, interfaces) {
|
|
102
|
-
var _a;
|
|
103
101
|
if (fqn === undefined) {
|
|
104
102
|
throw new Error('FQN cannot be undefined');
|
|
105
103
|
}
|
|
@@ -107,7 +105,7 @@ class ObjectTable {
|
|
|
107
105
|
if (existingRef) {
|
|
108
106
|
if (interfaces) {
|
|
109
107
|
const allIfaces = new Set(interfaces);
|
|
110
|
-
for (const iface of
|
|
108
|
+
for (const iface of existingRef[api.TOKEN_INTERFACES] ?? []) {
|
|
111
109
|
allIfaces.add(iface);
|
|
112
110
|
}
|
|
113
111
|
// Note - obj[INTERFACES_SYMBOL] should already have been declared as a
|
|
@@ -133,7 +131,6 @@ class ObjectTable {
|
|
|
133
131
|
* Find the object and registered type for the given ObjRef
|
|
134
132
|
*/
|
|
135
133
|
findObject(objref) {
|
|
136
|
-
var _a;
|
|
137
134
|
if (typeof objref !== 'object' || !(api.TOKEN_REF in objref)) {
|
|
138
135
|
throw new Error(`Malformed object reference: ${JSON.stringify(objref)}`);
|
|
139
136
|
}
|
|
@@ -153,7 +150,7 @@ class ObjectTable {
|
|
|
153
150
|
return {
|
|
154
151
|
...obj,
|
|
155
152
|
interfaces: [
|
|
156
|
-
...(
|
|
153
|
+
...(obj.interfaces ?? []),
|
|
157
154
|
// We append at the end so "registered" interface information has
|
|
158
155
|
// precedence over client-declared ones.
|
|
159
156
|
...additionalInterfaces,
|
|
@@ -235,4 +232,4 @@ class InterfaceCollection {
|
|
|
235
232
|
return this.interfaces[Symbol.iterator]();
|
|
236
233
|
}
|
|
237
234
|
}
|
|
238
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm9iamVjdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQW1DO0FBRW5DLDZCQUE2QjtBQUM3QixtREFBbUQ7QUFFbkQ7O0dBRUc7QUFDSCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFFckQ7O0dBRUc7QUFDSCxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFFM0Q7O0dBRUc7QUFDSCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBRTNDOzs7Ozs7R0FNRztBQUNILFNBQWdCLFdBQVcsQ0FBQyxHQUFROztJQUNsQyxhQUFPLEdBQUcsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLDBDQUFFLEdBQUcsQ0FBQztBQUMzQyxDQUFDO0FBRkQsa0NBRUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsZUFBZSxDQUFDLEdBQVk7SUFDMUMscUNBQXFDO0lBQ3JDLElBQUssR0FBVyxDQUFDLFlBQVksQ0FBQyxFQUFFO1FBQzlCLE9BQU87WUFDTCxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRyxHQUFxQixDQUFDLFlBQVksQ0FBQztZQUNyRCxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFHLEdBQXFCLENBQUMsYUFBYSxDQUFDO1NBQzlELENBQUM7S0FDSDtJQUVELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFWRCwwQ0FVQztBQU9ELFNBQVMsU0FBUyxDQUFDLEdBQVksRUFBRSxLQUFhLEVBQUUsVUFBcUI7SUFDbkUsTUFBTSxZQUFZLEdBQXNEO1FBQ3RFLDRFQUE0RTtRQUM1RSwwRUFBMEU7UUFDMUUsd0VBQXdFO1FBQ3hFLGdDQUFnQztRQUNoQyxVQUFVLEVBQUUsS0FBSztRQUNqQix5RUFBeUU7UUFDekUsMEVB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LENBQUM7YUFDOUI7U0FDRjtJQUNILENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxHQUFXO1FBQ2pDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FDYix1Q0FBdUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQ3hFLENBQUM7U0FDSDtRQUNELElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFO1lBQ2xCLE9BQU87U0FDUjtRQUNELEtBQUssTUFBTSxLQUFLLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRTtZQUNqQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUM5QixTQUFTO2FBQ1Y7WUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDOUI7SUFDSCxDQUFDO0lBRU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBzcGVjIGZyb20gJ0Bqc2lpL3NwZWMnO1xuXG5pbXBvcnQgKiBhcyBhcGkgZnJvbSAnLi9hcGknO1xuaW1wb3J0IHsgRU1QVFlfT0JKRUNUX0ZRTiB9IGZyb20gJy4vc2VyaWFsaXphdGlvbic7XG5cbi8qKlxuICogU3ltYm9sIHVuZGVyIHdoaWNoIHdlIHN0b3JlIHRoZSB7IHR5cGUgLT4gb2JqaWQgfSBtYXAgb24gb2JqZWN0IGluc3RhbmNlc1xuICovXG5jb25zdCBPQkpJRF9TWU1CT0wgPSBTeW1ib2wuZm9yKCckX19qc2lpX19vYmppZF9fJCcpO1xuXG4vKipcbiAqIFN5bWJvbCB1bmRlciB3aGljaCB3ZSBzdG9yZSB0aGUgaW50ZXJmYWNlcyBpbXBsZW1lbnRlZCBieSBpbnN0YW5jZXNcbiAqL1xuY29uc3QgSUZBQ0VTX1NZTUJPTCA9IFN5bWJvbC5mb3IoJyRfX2pzaWlfX2ludGVyZmFjZXNfXyQnKTtcblxuLyoqXG4gKiBTeW1ib2wgd2UgdXNlIHRvIHRhZyB0aGUgY29uc3RydWN0b3Igb2YgYSBKU0lJIGNsYXNzXG4gKi9cbmNvbnN0IEpTSUlfU1lNQk9MID0gU3ltYm9sLmZvcignX19qc2lpX18nKTtcblxuLyoqXG4gKiBHZXQgdGhlIEpTSUkgZnFuIGZvciBhbiBvYmplY3QgKGlmIGF2YWlsYWJsZSlcbiAqXG4gKiBUaGlzIHdpbGwgcmV0dXJuIHNvbWV0aGluZyBpZiB0aGUgb2JqZWN0IHdhcyBjb25zdHJ1Y3RlZCBmcm9tIGEgSlNJSS1lbmFibGVkXG4gKiBjbGFzcy9jb25zdHJ1Y3Rvciwgb3IgaWYgYSBsaXRlcmFsIG9iamVjdCB3YXMgYW5ub3RhdGVkIHdpdGggdHlwZVxuICogaW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqc2lpVHlwZUZxbihvYmo6IGFueSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBvYmouY29uc3RydWN0b3JbSlNJSV9TWU1CT0xdPy5mcW47XG59XG5cbi8qKlxuICogSWYgdGhpcyBvYmplY3Qgd2FzIHByZXZpb3VzbHkgc2VyaWFsaXplZCB1bmRlciBhIGdpdmVuIHJlZmVyZW5jZSwgcmV0dXJuIHRoZSBzYW1lIHJlZmVyZW5jZVxuICpcbiAqIFRoaXMgaXMgdG8gcmV0YWluIG9iamVjdCBpZGVudGl0eSBhY3Jvc3MgaW52b2NhdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvYmplY3RSZWZlcmVuY2Uob2JqOiB1bmtub3duKTogYXBpLk9ialJlZiB8IHVuZGVmaW5lZCB7XG4gIC8vIElmIHRoaXMgb2JqZWN0IGFzIGFscmVhZHkgcmV0dXJuZWRcbiAgaWYgKChvYmogYXMgYW55KVtPQkpJRF9TWU1CT0xdKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFthcGkuVE9LRU5fUkVGXTogKG9iaiBhcyBNYW5hZ2VkT2JqZWN0KVtPQkpJRF9TWU1CT0xdLFxuICAgICAgW2FwaS5UT0tFTl9JTlRFUkZBQ0VTXTogKG9iaiBhcyBNYW5hZ2VkT2JqZWN0KVtJRkFDRVNfU1lNQk9MXSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxudHlwZSBNYW5hZ2VkT2JqZWN0ID0ge1xuICBbT0JKSURfU1lNQk9MXTogc3RyaW5nO1xuICBbSUZBQ0VTX1NZTUJPTF0/OiBzdHJpbmdbXTtcbn07XG5cbmZ1bmN0aW9uIHRhZ09iamVjdChvYmo6IHVua25vd24sIG9iamlkOiBzdHJpbmcsIGludGVyZmFjZXM/OiBzdHJpbmdbXSkge1xuICBjb25zdCBwcml2YXRlRmllbGQ6IE9taXQ8UHJvcGVydHlEZXNjcmlwdG9yLCAndmFsdWUnIHwgJ2dldCcgfCAnc2V0Jz4gPSB7XG4gICAgLy8gTWFrZSBzdXJlIHRoZSBmaWVsZCBkb2VzIG5vdCBzaG93IGluIGBKU09OLnN0cmluZ2lmeWAgb3V0cHV0cywgYW5kIGlzIG5vdFxuICAgIC8vIGNvcGllZCBieSBzcGxhdCBleHByZXNzaW9ucyAoYHsuLi5vYmp9YCksIGFzIHRoaXMgd291bGQgYmUgcHJvYmxlbWF0aWMuXG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvMTc4NzYgZm9yIGFuIGV4YW1wbGUgb2YgdGhlXG4gICAgLy8gY29uc2VxdWVuY2VzIHRoaXMgY291bGQgaGF2ZS5cbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAvLyBQcm9iYWJseSBub3QgbmVjZXNzYXJ5LCBidXQgYWxsb3cgdGhlIHByb3BlcnR5IHRvIGJlIHJlLWNvbmZpZ3VyZWQgKGl0XG4gICAgLy8gd291bGQgYmUgZ29vZCB0byBtYWtlIHRoaXMgYGZhbHNlYCBpbiB0aGUgZnV0dXJlLCBidXQgbWlnaHQgY2F1c2Ugd2VpcmRcbiAgICAvLyBidWdzLCBzbyBub3QgZG9pbmcgaXQgbm93Li4uKVxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgfTtcblxuICAvLyBMb2cgYSB3YXJuaW5nIGluIGNhc2Ugd2UgYXJlIHJlLXRhZ2dpbmcgdGhpcyB2YWx1ZSwgc28gd2UgY2FuIGhvcGVmdWxseVxuICAvLyBkaXNjb3ZlciBhYm91dCB0aGUgYnVncyB3ZSdkIGhhdmUgaWYgd2UgZGlkIG5vdCBtYWtlIGl0IGNvbmZpZ3VyYWJsZSBub3JcbiAgLy8gd3JpdGFibGUuXG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBPQkpJRF9TWU1CT0wpKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgIGBbanNpaS9rZXJuZWxdIFdBUk5JTkc6IG9iamVjdCAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICBvYmogYXMgYW55LFxuICAgICAgKX0gd2FzIGFscmVhZHkgdGFnZ2VkIGFzICR7KG9iaiBhcyBhbnkpW09CSklEX1NZTUJPTF19IWAsXG4gICAgKTtcbiAgfVxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIE9CSklEX1NZTUJPTCwgeyAuLi5wcml2YXRlRmllbGQsIHZhbHVlOiBvYmppZCB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgSUZBQ0VTX1NZTUJPTCwge1xuICAgIC4uLnByaXZhdGVGaWVsZCxcbiAgICB2YWx1ZTogaW50ZXJmYWNlcyxcbiAgfSk7XG59XG5cbi8qKlxuICogU2V0IHRoZSBKU0lJIEZRTiBmb3IgY2xhc3NlcyBwcm9kdWNlZCBieSBhIGdpdmVuIGNvbnN0cnVjdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0YWdKc2lpQ29uc3RydWN0b3IoY29uc3RydWN0b3I6IGFueSwgZnFuOiBzdHJpbmcpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnN0cnVjdG9yLCBKU0lJX1NZTUJPTCwge1xuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgd3JpdGFibGU6IGZhbHNlLFxuICAgIHZhbHVlOiB7IGZxbiB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBUYWJsZSBvZiBKU0lJIG9iamVjdHNcbiAqXG4gKiBUaGVyZSBjYW4gYmUgbXVsdGlwbGUgcmVmZXJlbmNlcyB0byB0aGUgc2FtZSBvYmplY3QsIGVhY2ggdW5kZXIgYSBkaWZmZXJlbnQgcmVxdWVzdGVkXG4gKiB0eXBlLlxuICovXG5leHBvcnQgY2xhc3MgT2JqZWN0VGFibGUge1xuICBwcml2YXRlIG9iamVjdHM6IHsgW29iamlkOiBzdHJpbmddOiBSZWdpc3RlcmVkT2JqZWN0IH0gPSB7fTtcbiAgcHJpdmF0ZSBuZXh0aWQgPSAxMDAwMDtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXNvbHZlVHlwZTogKGZxbjogc3RyaW5nKSA9PiBzcGVjLlR5cGUsXG4gICkge31cblxuICAvKipcbiAgICogUmVnaXN0ZXIgdGhlIGdpdmVuIG9iamVjdCB3aXRoIHRoZSBnaXZlbiB0eXBlXG4gICAqXG4gICAqIFJldHVybiB0aGUgZXhpc3RpbmcgcmVnaXN0cmF0aW9uIGlmIGF2YWlsYWJsZS5cbiAgICovXG4gIHB1YmxpYyByZWdpc3Rlck9iamVjdChcbiAgICBvYmo6IHVua25vd24sXG4gICAgZnFuOiBzdHJpbmcsXG4gICAgaW50ZXJmYWNlcz86IHN0cmluZ1tdLFxuICApOiBhcGkuT2JqUmVmIHtcbiAgICBpZiAoZnFuID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRlFOIGNhbm5vdCBiZSB1bmRlZmluZWQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBleGlzdGluZ1JlZiA9IG9iamVjdFJlZmVyZW5jZShvYmopO1xuICAgIGlmIChleGlzdGluZ1JlZikge1xuICAgICAgaWYgKGludGVyZmFjZXMpIHtcbiAgICAgICAgY29uc3QgYWxsSWZhY2VzID0gbmV3IFNldChpbnRlcmZhY2VzKTtcbiAgICAgICAgZm9yIChjb25zdCBpZmFjZSBvZiBleGlzdGluZ1JlZlthcGkuVE9LRU5fSU5URVJGQUNFU10gPz8gW10pIHtcbiAgICAgICAgICBhbGxJZmFjZXMuYWRkKGlmYWNlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBOb3RlIC0gb2JqW0lOVEVSRkFDRVNfU1lNQk9MXSBzaG91bGQgYWxyZWFkeSBoYXZlIGJlZW4gZGVjbGFyZWQgYXMgYVxuICAgICAgICAvLyBwcml2YXRlIHByb3BlcnR5IGJ5IGEgcHJldmlvdXMgY2FsbCB0byB0YWdPYmplY3QgIGF0IHRoaXMgc3RhZ2UuXG4gICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgSUZBQ0VTX1NZTUJPTCkpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgYFtqc2lpL2tlcm5lbF0gV0FSTklORzogcmVmZXJlbmNlZCBvYmplY3QgJHtcbiAgICAgICAgICAgICAgZXhpc3RpbmdSZWZbYXBpLlRPS0VOX1JFRl1cbiAgICAgICAgICAgIH0gZG9lcyBub3QgaGF2ZSB0aGUgJHtTdHJpbmcoSUZBQ0VTX1NZTUJPTCl9IHByb3BlcnR5IWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub2JqZWN0c1tleGlzdGluZ1JlZlthcGkuVE9LRU5fUkVGXV0uaW50ZXJmYWNlcyA9XG4gICAgICAgICAgKG9iaiBhcyBhbnkpW0lGQUNFU19TWU1CT0xdID1cbiAgICAgICAgICBleGlzdGluZ1JlZlthcGkuVE9LRU5fSU5URVJGQUNFU10gPVxuICAgICAgICAgIGludGVyZmFjZXMgPVxuICAgICAgICAgICAgdGhpcy5yZW1vdmVSZWR1bmRhbnQoQXJyYXkuZnJvbShhbGxJZmFjZXMpLCBmcW4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGV4aXN0aW5nUmVmO1xuICAgIH1cblxuICAgIGludGVyZmFjZXMgPSB0aGlzLnJlbW92ZVJlZHVuZGFudChpbnRlcmZhY2VzLCBmcW4pO1xuXG4gICAgY29uc3Qgb2JqaWQgPSB0aGlzLm1ha2VJZChmcW4pO1xuICAgIHRoaXMub2JqZWN0c1tvYmppZF0gPSB7IGluc3RhbmNlOiBvYmosIGZxbiwgaW50ZXJmYWNlcyB9O1xuICAgIHRhZ09iamVjdChvYmosIG9iamlkLCBpbnRlcmZhY2VzKTtcblxuICAgIHJldHVybiB7IFthcGkuVE9LRU5fUkVGXTogb2JqaWQsIFthcGkuVE9LRU5fSU5URVJGQUNFU106IGludGVyZmFjZXMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIHRoZSBvYmplY3QgYW5kIHJlZ2lzdGVyZWQgdHlwZSBmb3IgdGhlIGdpdmVuIE9ialJlZlxuICAgKi9cbiAgcHVibGljIGZpbmRPYmplY3Qob2JqcmVmOiBhcGkuT2JqUmVmKTogUmVnaXN0ZXJlZE9iamVjdCB7XG4gICAgaWYgKHR5cGVvZiBvYmpyZWYgIT09ICdvYmplY3QnIHx8ICEoYXBpLlRPS0VOX1JFRiBpbiBvYmpyZWYpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1hbGZvcm1lZCBvYmplY3QgcmVmZXJlbmNlOiAke0pTT04uc3RyaW5naWZ5KG9ianJlZil9YCk7XG4gICAgfVxuXG4gICAgY29uc3Qgb2JqaWQgPSBvYmpyZWZbYXBpLlRPS0VOX1JFRl07XG4gICAgY29uc3Qgb2JqID0gdGhpcy5vYmplY3RzW29iamlkXTtcbiAgICBpZiAoIW9iaikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBPYmplY3QgJHtvYmppZH0gbm90IGZvdW5kYCk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUgYXJlIFwiYWRkaXRpb25hbFwiIGludGVyZmFjZXMgZGVjbGFyZWQgb24gdGhlIG9ianJlZiwgbWVyZ2UgdGhlbVxuICAgIC8vIGludG8gdGhlIHJldHVybmVkIG9iamVjdC4gVGhpcyBpcyB1c2VkIHRvIHN1cHBvcnQgY2xpZW50LXNpZGUgZm9yY2VkXG4gICAgLy8gZG93bi1jYXN0aW5nIChhLmsuYTogdW5zYWZlIGNhc3RpbmcpLiBXZSBkbyBOT1QgcmVnaXN0ZXIgdGhlIGV4dHJhXG4gICAgLy8gaW50ZXJmYWNlcyBoZXJlIHNvIHRoYXQgaWYgdGhlIGNsaWVudCBwcm92aWRlZCBhbiBpbnRlcmZhY2UgdGhhdCBpc1xuICAgIC8vIGFjdHVhbGx5IG5vdCBpbXBsZW1lbnRlZCwgd2UgYXJlbid0IFwicG9pc29uaW5nXCIgb3VyIHN0YXRlIHdpdGggdGhhdFxuICAgIC8vIGluY29ycmVjdCBpbmZvcm1hdGlvbi5cbiAgICBjb25zdCBhZGRpdGlvbmFsSW50ZXJmYWNlcyA9IG9ianJlZlthcGkuVE9LRU5fSU5URVJGQUNFU107XG4gICAgaWYgKGFkZGl0aW9uYWxJbnRlcmZhY2VzICE9IG51bGwgJiYgYWRkaXRpb25hbEludGVyZmFjZXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub2JqLFxuICAgICAgICBpbnRlcmZhY2VzOiBbXG4gICAgICAgICAgLi4uKG9iai5pbnRlcmZhY2VzID8/IFtdKSxcbiAgICAgICAgICAvLyBXZSBhcHBlbmQgYXQgdGhlIGVuZCBzbyBcInJlZ2lzdGVyZWRcIiBpbnRlcmZhY2UgaW5mb3JtYXRpb24gaGFzXG4gICAgICAgICAgLy8gcHJlY2VkZW5jZSBvdmVyIGNsaWVudC1kZWNsYXJlZCBvbmVzLlxuICAgICAgICAgIC4uLmFkZGl0aW9uYWxJbnRlcmZhY2VzLFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSB0aGUgcmVnaXN0cmF0aW9uIHdpdGggdGhlIGdpdmVuIG9ianJlZlxuICAgKi9cbiAgcHVibGljIGRlbGV0ZU9iamVjdChvYmpyZWY6IGFwaS5PYmpSZWYpIHtcbiAgICB0aGlzLmZpbmRPYmplY3Qob2JqcmVmKTsgLy8gbWFrZSBzdXJlIG9iamVjdCBleGlzdHNcbiAgICBkZWxldGUgdGhpcy5vYmplY3RzW29ianJlZlthcGkuVE9LRU5fUkVGXV07XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMub2JqZWN0cykubGVuZ3RoO1xuICB9XG5cbiAgcHJpdmF0ZSBtYWtlSWQoZnFuOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYCR7ZnFufUAke3RoaXMubmV4dGlkKyt9YDtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlUmVkdW5kYW50KFxuICAgIGludGVyZmFjZXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkLFxuICAgIGZxbjogc3RyaW5nLFxuICApOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFpbnRlcmZhY2VzIHx8IGludGVyZmFjZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQoaW50ZXJmYWNlcyk7XG4gICAgY29uc3QgYnVpbHRJbiA9IG5ldyBJbnRlcmZhY2VDb2xsZWN0aW9uKHRoaXMucmVzb2x2ZVR5cGUpO1xuXG4gICAgaWYgKGZxbiAhPT0gRU1QVFlfT0JKRUNUX0ZRTikge1xuICAgICAgYnVpbHRJbi5hZGRGcm9tQ2xhc3MoZnFuKTtcbiAgICB9XG4gICAgaW50ZXJmYWNlcy5mb3JFYWNoKGJ1aWx0SW4uYWRkRnJvbUludGVyZmFjZS5iaW5kKGJ1aWx0SW4pKTtcblxuICAgIGZvciAoY29uc3QgaWZhY2Ugb2YgYnVpbHRJbikge1xuICAgICAgcmVzdWx0LmRlbGV0ZShpZmFjZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdC5zaXplID4gMCA/IEFycmF5LmZyb20ocmVzdWx0KS5zb3J0KCkgOiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RlcmVkT2JqZWN0IHtcbiAgaW5zdGFuY2U6IGFueTtcbiAgZnFuOiBzdHJpbmc7XG4gIGludGVyZmFjZXM/OiBzdHJpbmdbXTtcbn1cblxuY2xhc3MgSW50ZXJmYWNlQ29sbGVjdGlvbiBpbXBsZW1lbnRzIEl0ZXJhYmxlPHN0cmluZz4ge1xuICBwcml2YXRlIHJlYWRvbmx5IGludGVyZmFjZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXNvbHZlVHlwZTogKGZxbjogc3RyaW5nKSA9PiBzcGVjLlR5cGUsXG4gICkge31cblxuICBwdWJsaWMgYWRkRnJvbUNsYXNzKGZxbjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgdGkgPSB0aGlzLnJlc29sdmVUeXBlKGZxbik7XG4gICAgaWYgKCFzcGVjLmlzQ2xhc3NUeXBlKHRpKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRXhwZWN0ZWQgYSBjbGFzcywgYnV0IHJlY2VpdmVkICR7c3BlYy5kZXNjcmliZVR5cGVSZWZlcmVuY2UodGkpfWAsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodGkuYmFzZSkge1xuICAgICAgdGhpcy5hZGRGcm9tQ2xhc3ModGkuYmFzZSk7XG4gICAgfVxuICAgIGlmICh0aS5pbnRlcmZhY2VzKSB7XG4gICAgICBmb3IgKGNvbnN0IGlmYWNlIG9mIHRpLmludGVyZmFjZXMpIHtcbiAgICAgICAgaWYgKHRoaXMuaW50ZXJmYWNlcy5oYXMoaWZhY2UpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnRlcmZhY2VzLmFkZChpZmFjZSk7XG4gICAgICAgIHRoaXMuYWRkRnJvbUludGVyZmFjZShpZmFjZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFkZEZyb21JbnRlcmZhY2UoZnFuOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCB0aSA9IHRoaXMucmVzb2x2ZVR5cGUoZnFuKTtcbiAgICBpZiAoIXNwZWMuaXNJbnRlcmZhY2VUeXBlKHRpKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRXhwZWN0ZWQgYW4gaW50ZXJmYWNlLCBidXQgcmVjZWl2ZWQgJHtzcGVjLmRlc2NyaWJlVHlwZVJlZmVyZW5jZSh0aSl9YCxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghdGkuaW50ZXJmYWNlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGlmYWNlIG9mIHRpLmludGVyZmFjZXMpIHtcbiAgICAgIGlmICh0aGlzLmludGVyZmFjZXMuaGFzKGlmYWNlKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaW50ZXJmYWNlcy5hZGQoaWZhY2UpO1xuICAgICAgdGhpcy5hZGRGcm9tSW50ZXJmYWNlKGlmYWNlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgcmV0dXJuIHRoaXMuaW50ZXJmYWNlc1tTeW1ib2wuaXRlcmF0b3JdKCk7XG4gIH1cbn1cbiJdfQ==
|
|
235
|
+
//# sourceMappingURL=objects.js.map
|
package/lib/on-exit.d.ts
CHANGED
package/lib/on-exit.js
CHANGED
|
@@ -29,4 +29,4 @@ function registerIfNeeded() {
|
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
|
-
//# sourceMappingURL=
|
|
32
|
+
//# sourceMappingURL=on-exit.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Kernel } from '
|
|
1
|
+
import { Kernel } from './kernel';
|
|
2
2
|
export declare function closeRecording(kernel: Kernel): Promise<void>;
|
|
3
3
|
/**
|
|
4
4
|
* Start recording all interaction with the kernel object.
|
|
@@ -11,3 +11,4 @@ export declare function closeRecording(kernel: Kernel): Promise<void>;
|
|
|
11
11
|
* @param outputLog Output log stream.
|
|
12
12
|
*/
|
|
13
13
|
export declare function recordInteraction(kernel: Kernel, inputOutputLogPath: string): void;
|
|
14
|
+
//# sourceMappingURL=recording.d.ts.map
|
package/lib/recording.js
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.recordInteraction = exports.closeRecording = void 0;
|
|
4
|
+
const fs = require("fs-extra");
|
|
5
|
+
const kernel_1 = require("./kernel");
|
|
6
|
+
async function closeRecording(kernel) {
|
|
7
|
+
const logfile = kernel.logfile;
|
|
8
|
+
if (!logfile) {
|
|
9
|
+
return Promise.resolve();
|
|
10
|
+
}
|
|
11
|
+
logfile.end();
|
|
12
|
+
return new Promise((ok) => {
|
|
13
|
+
logfile.once('finish', () => {
|
|
14
|
+
ok();
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
exports.closeRecording = closeRecording;
|
|
19
|
+
/**
|
|
20
|
+
* Start recording all interaction with the kernel object.
|
|
21
|
+
*
|
|
22
|
+
* This method installs a proxy function for each public API in the kernel (methods that do not
|
|
23
|
+
* start with '_') and records input requests and output requests into JSON stream files.
|
|
24
|
+
*
|
|
25
|
+
* @param kernel The kernel object to record.
|
|
26
|
+
* @param inputLog Input log stream
|
|
27
|
+
* @param outputLog Output log stream.
|
|
28
|
+
*/
|
|
29
|
+
function recordInteraction(kernel, inputOutputLogPath) {
|
|
30
|
+
const logfile = fs.createWriteStream(inputOutputLogPath);
|
|
31
|
+
kernel.logfile = logfile;
|
|
32
|
+
Object.entries(Object.getOwnPropertyDescriptors(kernel_1.Kernel.prototype))
|
|
33
|
+
.filter(([p, v]) => !p.startsWith('_') && typeof v.value === 'function')
|
|
34
|
+
.forEach(([api, old]) => {
|
|
35
|
+
Object.defineProperty(kernel, api, {
|
|
36
|
+
...old,
|
|
37
|
+
value(...args) {
|
|
38
|
+
logInput({ api, ...args[0] });
|
|
39
|
+
try {
|
|
40
|
+
const ret = old.value.apply(this, args);
|
|
41
|
+
// if this is an async function, wait for the promised value.
|
|
42
|
+
if (typeof ret?.then === 'function') {
|
|
43
|
+
return new Promise((ok, fail) => {
|
|
44
|
+
return ret
|
|
45
|
+
.then((value) => {
|
|
46
|
+
logOutput({ ok: value });
|
|
47
|
+
ok(value);
|
|
48
|
+
})
|
|
49
|
+
.catch((err) => {
|
|
50
|
+
logOutput({ error: err.message });
|
|
51
|
+
fail(err);
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
logOutput({ ok: ret });
|
|
56
|
+
return ret;
|
|
57
|
+
}
|
|
58
|
+
catch (e) {
|
|
59
|
+
logOutput({ error: e.message });
|
|
60
|
+
throw e;
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
function logInput(obj) {
|
|
66
|
+
logfile.write(`> ${JSON.stringify(obj)}\n`);
|
|
67
|
+
}
|
|
68
|
+
function logOutput(obj) {
|
|
69
|
+
logfile.write(`< ${JSON.stringify(obj)}\n`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
exports.recordInteraction = recordInteraction;
|
|
73
|
+
//# sourceMappingURL=recording.js.map
|
package/lib/serialization.d.ts
CHANGED