mnemonica 1.0.8 → 1.0.9
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/.ai/rules-skill/define-patterns.md +18 -0
- package/README.md +2 -0
- package/build/index.d.ts +2 -2
- package/build/index.js +7 -6
- package/package.json +3 -4
- package/src/index.ts +4 -4
- package/examples/AsyncNewTest.js +0 -12
- package/examples/ClassReName.js +0 -23
- package/examples/README.md +0 -40
- package/examples/v8bug.js +0 -64
|
@@ -63,6 +63,24 @@ define('Parent.Child', function (this: Child, data: Data) {
|
|
|
63
63
|
});
|
|
64
64
|
```
|
|
65
65
|
|
|
66
|
+
## Export root constructors only when needed; never export subtypes
|
|
67
|
+
|
|
68
|
+
Subtypes live on the parent constructor and on parent instances. Exporting a subtype splits the Trie and usually loses the parent part of the chain.
|
|
69
|
+
|
|
70
|
+
```typescript
|
|
71
|
+
// WRONG
|
|
72
|
+
export const Admin = User.define('Admin', function (this: Admin, data: AdminData) {
|
|
73
|
+
Object.assign(this, data);
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
// RIGHT
|
|
77
|
+
User.define('Admin', function (this: Admin, data: AdminData) {
|
|
78
|
+
Object.assign(this, data);
|
|
79
|
+
});
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Root constructors **may** be exported when tactica has generated standalone instance types that include the sub-constructor chain, so consumers can do `new user.Admin(...)`. Even then, `lookup('User')` is the safer default.
|
|
83
|
+
|
|
66
84
|
## Config Options
|
|
67
85
|
|
|
68
86
|
| Option | Default | Description |
|
package/README.md
CHANGED
|
@@ -60,6 +60,8 @@ getProps(engineer); // { __type__, __parent__, __args__, __timestamp
|
|
|
60
60
|
|
|
61
61
|
The key inversion: `new` is called on the *parent instance* (`alice`), not on the class. Every `Employee` remembers which specific `Person` it came from. The prototype chain is a path; the path is the identity.
|
|
62
62
|
|
|
63
|
+
> **Typed projects:** subtypes must never be `export`ed — they live on the parent constructor and on parent instances. Root constructors may be exported only when tactica has generated standalone instance types that carry the subtype chain, but `lookup('Person')` is the safer default and keeps consumers decoupled from the model file.
|
|
64
|
+
|
|
63
65
|
---
|
|
64
66
|
|
|
65
67
|
## The four data mistakes mnemonica fixes
|
package/build/index.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import type { CreateTypesCollectionFunction, IDEF, hook, hooksTypes, constructorOptions, Proto, Constructor, DecoratedClass, TypeClass,
|
|
1
|
+
import type { CreateTypesCollectionFunction, IDEF, hook, hooksTypes, constructorOptions, Proto, IDefinitorInstance, Constructor, DecoratedClass, TypeClass, MnemonicaModule, InstanceResult, Merge } from './types';
|
|
2
2
|
export declare const isClass: (fn: import("./api/types/compileNewModificatorFunctionBody").ConstructHandler) => boolean, findSubTypeFromParent: (instance: import("./api/utils/index").parentSub | object | undefined, subType: string) => import("./api/utils/index").parentSub | null;
|
|
3
3
|
export type { IDEF, TypeConstructor, TypeConstructorBase, InstanceOfTypeRegistry, LiteralKeysOf, ParentPath, PathOfInstance, AllParentPrefixes, ParentPathOfInstance, _Internal_TC_, Proto, ProtoFlat, hooksOpts, hook, hooksTypes, TypesCollection } from './types';
|
|
4
4
|
export interface TypeRegistry {
|
|
5
5
|
}
|
|
6
6
|
export { getProps, setProps } from './api/types/Props';
|
|
7
7
|
export declare const defaultTypes: import("./types").TypesCollection;
|
|
8
|
-
export declare
|
|
8
|
+
export declare function define<T extends object, P extends object = object, N extends Proto<P, T> = Proto<P, T>, R extends IDefinitorInstance<N> = IDefinitorInstance<N>>(this: unknown, TypeName?: string | CallableFunction | NewableFunction, constructHandler?: IDEF<T> | CallableFunction | NewableFunction | object | boolean, config?: constructorOptions): R;
|
|
9
9
|
export declare function lookup<const K extends keyof TypeRegistry>(this: unknown, TypeNestedPath: K): TypeRegistry[K];
|
|
10
10
|
export declare function lookup(this: unknown, TypeNestedPath: string): TypeClass | undefined;
|
|
11
11
|
export declare const apply: <E extends object, T extends object, S extends Proto<E, T>>(entity: E, Ctor: IDEF<T>, args?: unknown[]) => InstanceResult<Merge<E, T>>;
|
package/build/index.js
CHANGED
|
@@ -37,7 +37,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
37
37
|
};
|
|
38
38
|
var _a;
|
|
39
39
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
-
exports.defineStackCleaner = exports.utils = exports.errors = exports.defaultCollection = exports.createTypesCollection = exports.ErrorMessages = exports.TYPE_TITLE_PREFIX = exports.MNEMOSYNE = exports.MNEMONICA = exports.SymbolConfig = exports.SymbolDefaultTypesCollection = exports.SymbolConstructorName = exports.SymbolParentType = exports._lookup = exports._define = exports.mnemonica = exports.registerHook = exports.decorate = exports.bind = exports.call = exports.apply = exports.
|
|
40
|
+
exports.defineStackCleaner = exports.utils = exports.errors = exports.defaultCollection = exports.createTypesCollection = exports.ErrorMessages = exports.TYPE_TITLE_PREFIX = exports.MNEMOSYNE = exports.MNEMONICA = exports.SymbolConfig = exports.SymbolDefaultTypesCollection = exports.SymbolConstructorName = exports.SymbolParentType = exports._lookup = exports._define = exports.mnemonica = exports.registerHook = exports.decorate = exports.bind = exports.call = exports.apply = exports.defaultTypes = exports.setProps = exports.getProps = exports.findSubTypeFromParent = exports.isClass = void 0;
|
|
41
|
+
exports.define = define;
|
|
41
42
|
exports.lookup = lookup;
|
|
42
43
|
const index_1 = __importDefault(require("./api/utils/index"));
|
|
43
44
|
exports.isClass = index_1.default.isClass, exports.findSubTypeFromParent = index_1.default.findSubTypeFromParent;
|
|
@@ -56,12 +57,12 @@ function checkThis(pointer) {
|
|
|
56
57
|
const result = pointer === exports.mnemonica || pointer === exports;
|
|
57
58
|
return result;
|
|
58
59
|
}
|
|
59
|
-
|
|
60
|
+
function define(TypeName, constructHandler, config) {
|
|
60
61
|
const types = checkThis(this) ? exports.defaultTypes : this || exports.defaultTypes;
|
|
61
62
|
const defineResult = types
|
|
62
63
|
.define(TypeName, constructHandler, config);
|
|
63
64
|
return defineResult;
|
|
64
|
-
}
|
|
65
|
+
}
|
|
65
66
|
function lookup(TypeNestedPath) {
|
|
66
67
|
const types = checkThis(this) ? exports.defaultTypes : this || exports.defaultTypes;
|
|
67
68
|
const lookupResult = types.lookup(TypeNestedPath);
|
|
@@ -108,7 +109,7 @@ const decorate = function (target, config) {
|
|
|
108
109
|
const decorator = function (cstr) {
|
|
109
110
|
const { name } = cstr;
|
|
110
111
|
if (parentType === undefined) {
|
|
111
|
-
const decoratorResult =
|
|
112
|
+
const decoratorResult = define(name, cstr, opts);
|
|
112
113
|
return decoratorResult;
|
|
113
114
|
}
|
|
114
115
|
const parent = parentType;
|
|
@@ -122,7 +123,7 @@ const registerHook = function (Ctor, hookType, cb) {
|
|
|
122
123
|
Ctor.registerHook(hookType, cb);
|
|
123
124
|
};
|
|
124
125
|
exports.registerHook = registerHook;
|
|
125
|
-
exports.mnemonica = Object.entries(Object.assign(Object.assign(Object.assign({ define
|
|
126
|
+
exports.mnemonica = Object.entries(Object.assign(Object.assign(Object.assign({ define,
|
|
126
127
|
lookup,
|
|
127
128
|
apply: exports.apply,
|
|
128
129
|
call: exports.call,
|
|
@@ -148,4 +149,4 @@ var utils_1 = require("./utils");
|
|
|
148
149
|
Object.defineProperty(exports, "utils", { enumerable: true, get: function () { return utils_1.utils; } });
|
|
149
150
|
var utils_2 = require("./utils");
|
|
150
151
|
Object.defineProperty(exports, "defineStackCleaner", { enumerable: true, get: function () { return utils_2.defineStackCleaner; } });
|
|
151
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsWUFBWSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBK0diLHdCQVFDO0FBcEdELDhEQUEyQztBQUUxQyxlQUFPLEdBRUosZUFBVSxVQURiLDZCQUFxQixHQUNsQixlQUFVLHVCQUFDO0FBa0NmLDJDQUUyQjtBQUQxQixpR0FBQSxRQUFRLE9BQUE7QUFBRSxpR0FBQSxRQUFRLE9BQUE7QUFHbkIsMkNBQXdDO0FBQ3hDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxxQkFBUyxDQUFDO0FBRTFCLHdEQUEwQztBQUMxQywrQ0FBNEM7QUFFNUMsTUFBTSxFQUFFLDBCQUEwQixFQUFFLEdBQUcseUJBQVcsQ0FBQyxXQUFXLENBQUM7QUFFL0Qsc0VBQStDO0FBQy9DLE1BQU0sRUFBRSw2QkFBNkIsRUFBRSxHQUFHLG1CQUFVLENBQUM7QUFFdEMsb0JBQVksR0FBTSx5QkFBVyxjQUFDO0FBRTdDLFNBQVMsU0FBUyxDQUFDLE9BQW9EO0lBQ3RFLE1BQU0sTUFBTSxHQUFHLE9BQU8sS0FBSyxpQkFBUyxJQUFJLE9BQU8sS0FBSyxPQUFPLENBQUM7SUFDNUQsT0FBTyxNQUFNLENBQUM7QUFDZixDQUFDO0FBSVksUUFBQSxNQUFNLEdBQUcsVUFTckIsUUFBc0QsRUFFdEQsZ0JBQWtGLEVBQ2xGLE1BQTJCO0lBRTNCLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLG9CQUFZLENBQUM7SUFFcEUsTUFBTSxZQUFZLEdBQUksS0FBa0M7U0FDdEQsTUFBTSxDQUNOLFFBQWtCLEVBQ2xCLGdCQUEyQixFQUMzQixNQUFNLENBQ1UsQ0FBQztJQUNuQixPQUFPLFlBQVksQ0FBQztBQUNyQixDQUFpQixDQUFD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Wiw2QkFBcUIsR0FRbEIsaUJBQVMsd0JBUFosb0NBQTRCLEdBT3pCLGlCQUFTLCtCQU5aLG9CQUFZLEdBTVQsaUJBQVMsZUFMWixpQkFBUyxHQUtOLGlCQUFTLFlBSlosaUJBQVMsR0FJTixpQkFBUyxZQUhaLHlCQUFpQixHQUdkLGlCQUFTLG9CQUZaLHFCQUFhLEdBRVYsaUJBQVMsZUFBQztBQUdELFFBQUEscUJBQXFCLEdBQ2pDLGlCQUFTLENBQUMscUJBQXNELENBQUM7QUFHckQsUUFBQSxpQkFBaUIsR0FBSSxvQkFBa0QsQ0FBQyxRQUFRLENBQUM7QUFDakYsUUFBQSxNQUFNLEdBQUcseUJBQVcsQ0FBQyxXQUFXLENBQUM7QUFFOUMsaUNBQWdDO0FBQXZCLDhGQUFBLEtBQUssT0FBQTtBQUNkLGlDQUE2QztBQUFwQywyR0FBQSxrQkFBa0IsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHNwYWNlLWJlZm9yZS1mdW5jdGlvbi1wYXJlbiAqL1xuJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdHlwZSB7XG5cdENyZWF0ZVR5cGVzQ29sbGVjdGlvbkZ1bmN0aW9uLFxuXHRJREVGLFxuXHRob29rLFxuXHRob29rc1R5cGVzLFxuXHRjb25zdHJ1Y3Rvck9wdGlvbnMsXG5cdFByb3RvLFxuXHRJRGVmaW5pdG9ySW5zdGFuY2UsXG5cdENvbnN0cnVjdG9yLFxuXHREZWNvcmF0ZWRDbGFzcyxcblx0VHlwZUNsYXNzLFxuXHRUeXBlQWJzb3JiZXIsXG5cdE1uZW1vbmljYU1vZHVsZSxcblx0SW5zdGFuY2VSZXN1bHQsXG5cdE1lcmdlXG59IGZyb20gJy4vdHlwZXMnO1xuXG5pbXBvcnQgVHlwZXNVdGlscyBmcm9tICcuL2FwaS91dGlscy9pbmRleCc7XG5leHBvcnQgY29uc3Qge1xuXHRpc0NsYXNzLFxuXHRmaW5kU3ViVHlwZUZyb21QYXJlbnQsXG59ID0gVHlwZXNVdGlscztcblxuZXhwb3J0IHR5cGUge1xuXHRJREVGLCBUeXBlQ29uc3RydWN0b3IsIFR5cGVDb25zdHJ1Y3RvckJhc2UsXG5cdEluc3RhbmNlT2ZUeXBlUmVnaXN0cnksIExpdGVyYWxLZXlzT2YsIFBhcmVudFBhdGgsIFBhdGhPZkluc3RhbmNlLFxuXHRBbGxQYXJlbnRQcmVmaXhlcywgUGFyZW50UGF0aE9mSW5zdGFuY2UsXG5cdF9JbnRlcm5hbF9UQ18sIFByb3RvLCBQcm90b0ZsYXQsXG5cdGhvb2tzT3B0cywgaG9vaywgaG9va3NUeXBlcywgVHlwZXNDb2xsZWN0aW9uXG59IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIFR5cGUtc2FmZSByZWdpc3RyeSBmb3IgbW5lbW9uaWNhIHR5cGVzLlxuICpcbiAqIFRoaXMgaW50ZXJmYWNlIHN0YXJ0cyBlbXB0eS4gQXBwbGljYXRpb24gY29kZSBvciBgQG1uZW1vbmljYS90YWN0aWNhYFxuICogYXVnbWVudHMgaXQgdGhyb3VnaCBUeXBlU2NyaXB0IG1vZHVsZSBkZWNsYXJhdGlvbiBtZXJnaW5nOlxuICpcbiAqIGBgYHRzXG4gKiBkZWNsYXJlIG1vZHVsZSAnbW5lbW9uaWNhJyB7XG4gKiAgIGludGVyZmFjZSBUeXBlUmVnaXN0cnkge1xuICogICAgICdNeVR5cGUnOiBUeXBlQ29uc3RydWN0b3I8TXlUeXBlSW5zdGFuY2U+O1xuICogICAgICdNeVR5cGUuU3ViVHlwZSc6IFR5cGVDb25zdHJ1Y3RvcjxTdWJUeXBlSW5zdGFuY2U+O1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBPbmNlIGF1Z21lbnRlZCwgYGxvb2t1cCgnTXlUeXBlJylgIGFuZCBgdXRpbHMucGFyZW50KGluc3RhbmNlLCAnTXlUeXBlJylgXG4gKiByZXNvbHZlIGtleXMgYWdhaW5zdCB0aGlzIHJlZ2lzdHJ5LiBVbmF1Z21lbnRlZCBrZXlzIGZhbGwgYmFjayB0byB0aGUgYnJvYWRcbiAqIGBUeXBlQ2xhc3MgfCB1bmRlZmluZWRgIHJldHVybiB0eXBlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVSZWdpc3RyeSB7XG5cdC8vIEludGVudGlvbmFsbHkgZW1wdHkuIEF1Z21lbnQgdGhpcyBpbnRlcmZhY2UgdmlhIGRlY2xhcmF0aW9uIG1lcmdpbmdcblx0Ly8gKGhhbmQtd3JpdHRlbiBvciBnZW5lcmF0ZWQgYnkgQG1uZW1vbmljYS90YWN0aWNhKSB0byBlbmFibGUgdHlwZWRcblx0Ly8gdXRpbGl0aWVzIGxpa2UgbG9va3VwKCkgYW5kIHBhcmVudCgpLlxufVxuZXhwb3J0IHtcblx0Z2V0UHJvcHMsIHNldFByb3BzIFxufSBmcm9tICcuL2FwaS90eXBlcy9Qcm9wcyc7XG5cbmltcG9ydCB7IGNvbnN0YW50cyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmNvbnN0IHsgb2RwIH0gPSBjb25zdGFudHM7XG5cbmltcG9ydCAqIGFzIGVycm9yc0FwaSBmcm9tICcuL2FwaS9lcnJvcnMnO1xuaW1wb3J0IHsgZGVzY3JpcHRvcnMgfSBmcm9tICcuL2Rlc2NyaXB0b3JzJztcblxuY29uc3QgeyBXUk9OR19NT0RJRklDQVRJT05fUEFUVEVSTiB9ID0gZGVzY3JpcHRvcnMuRXJyb3JzVHlwZXM7XG5cbmltcG9ydCBtbmVtb3N5bmVzIGZyb20gJy4vYXBpL3R5cGVzL01uZW1vc3luZSc7XG5jb25zdCB7IHByZXBhcmVTdWJ0eXBlRm9yQ29uc3RydWN0aW9uIH0gPSBtbmVtb3N5bmVzO1xuXG5leHBvcnQgY29uc3QgeyBkZWZhdWx0VHlwZXMsIH0gPSBkZXNjcmlwdG9ycztcblxuZnVuY3Rpb24gY2hlY2tUaGlzKHBvaW50ZXI6IHR5cGVvZiBtbmVtb25pY2EgfCB0eXBlb2YgZXhwb3J0cyB8IHVua25vd24pOiBib29sZWFuIHtcblx0Y29uc3QgcmVzdWx0ID0gcG9pbnRlciA9PT0gbW5lbW9uaWNhIHx8IHBvaW50ZXIgPT09IGV4cG9ydHM7XG5cdHJldHVybiByZXN1bHQ7XG59XG5cblxuLy8gRGVmaW5lIGZ1bmN0aW9uIHVzaW5nIFR5cGVBYnNvcmJlciBpbnRlcmZhY2Ugd2l0aCBwcm9wZXIgdHlwZSBjYXN0aW5nXG5leHBvcnQgY29uc3QgZGVmaW5lID0gZnVuY3Rpb24gPFxuXHRUIGV4dGVuZHMgb2JqZWN0LFxuXHRQIGV4dGVuZHMgb2JqZWN0ID0gb2JqZWN0LFxuXHROIGV4dGVuZHMgUHJvdG88UCwgVD4gPSBQcm90bzxQLCBUPixcblxuXHQvLyBoZXJlIElEZWZpbml0b3JJbnN0YW5jZSBpcyBhIENPTlNUUlVDVE9SICEhIVxuXHRSIGV4dGVuZHMgSURlZmluaXRvckluc3RhbmNlPE4+ID0gSURlZmluaXRvckluc3RhbmNlPE4+XG4+KFxuXHR0aGlzOiB1bmtub3duLFxuXHRUeXBlTmFtZT86IHN0cmluZyB8IENhbGxhYmxlRnVuY3Rpb24gfCBOZXdhYmxlRnVuY3Rpb24sXG5cdC8vIEFsbG93IGJvdGggc3RyaWN0IElERUYgYW5kIG1vcmUgZmxleGlibGUgZnVuY3Rpb24gc2lnbmF0dXJlc1xuXHRjb25zdHJ1Y3RIYW5kbGVyPzogSURFRjxUPiB8IENhbGxhYmxlRnVuY3Rpb24gfCBOZXdhYmxlRnVuY3Rpb24gfCBvYmplY3QgfCBib29sZWFuLFxuXHRjb25maWc/OiBjb25zdHJ1Y3Rvck9wdGlvbnMsXG4pOiBSIHtcblx0Y29uc3QgdHlwZXMgPSBjaGVja1RoaXModGhpcykgPyBkZWZhdWx0VHlwZXMgOiB0aGlzIHx8IGRlZmF1bHRUeXBlcztcblx0Ly8gVHlwZSBhc3NlcnRpb24gbmVlZGVkIGJlY2F1c2UgVHlwZXNDb2xsZWN0aW9uUHJveHkgaXMgYSBQcm94eVxuXHRjb25zdCBkZWZpbmVSZXN1bHQgPSAodHlwZXMgYXMgeyBkZWZpbmU6IFR5cGVBYnNvcmJlciB9KVxuXHRcdC5kZWZpbmUoXG5cdFx0XHRUeXBlTmFtZSBhcyBzdHJpbmcsXG5cdFx0XHRjb25zdHJ1Y3RIYW5kbGVyIGFzIElERUY8VD4sXG5cdFx0XHRjb25maWdcblx0XHQpIGFzIHVua25vd24gYXMgUjtcblx0cmV0dXJuIGRlZmluZVJlc3VsdDtcbn0gYXMgVHlwZUFic29yYmVyO1xuXG5leHBvcnQgZnVuY3Rpb24gbG9va3VwPGNvbnN0IEsgZXh0ZW5kcyBrZXlvZiBUeXBlUmVnaXN0cnk+KFxuXHR0aGlzOiB1bmtub3duLFxuXHRUeXBlTmVzdGVkUGF0aDogS1xuKTogVHlwZVJlZ2lzdHJ5W0tdO1xuZXhwb3J0IGZ1bmN0aW9uIGxvb2t1cCh0aGlzOiB1bmtub3duLCBUeXBlTmVzdGVkUGF0aDogc3RyaW5nKTogVHlwZUNsYXNzIHwgdW5kZWZpbmVkO1xuZXhwb3J0IGZ1bmN0aW9uIGxvb2t1cChcblx0dGhpczogdW5rbm93bixcblx0VHlwZU5lc3RlZFBhdGg6IHN0cmluZ1xuKTogVHlwZUNsYXNzIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgdHlwZXMgPSBjaGVja1RoaXModGhpcykgPyBkZWZhdWx0VHlwZXMgOiB0aGlzIHx8IGRlZmF1bHRUeXBlcztcblx0Ly8gVHlwZSBhc3NlcnRpb24gbmVlZGVkIGJlY2F1c2UgVHlwZXNDb2xsZWN0aW9uUHJveHkgaXMgYSBQcm94eVxuXHRjb25zdCBsb29rdXBSZXN1bHQgPSAodHlwZXMgYXMgeyBsb29rdXA6IChwYXRoOiBzdHJpbmcpID0+IFR5cGVDbGFzcyB8IHVuZGVmaW5lZCB9KS5sb29rdXAoVHlwZU5lc3RlZFBhdGgpO1xuXHRyZXR1cm4gbG9va3VwUmVzdWx0O1xufVxuXG5cbmNvbnN0ICRydW4gPSBmdW5jdGlvbiA8RSBleHRlbmRzIG9iamVjdCwgVCBleHRlbmRzIG9iamVjdCwgUyBleHRlbmRzIFByb3RvPEUsIFQ+Pihcblx0ZW50aXR5OiBFLFxuXHRDdG9yOiBJREVGPFQ+LFxuXHRhcmdzOiB1bmtub3duW11cbik6IHtcblx0XHRba2V5IGluIGtleW9mIFNdOiBTW2tleV1cblx0fSB7XG5cblx0Ly8gZGVidWdnZXI7XG5cdC8vIEB0cy1leHBlY3QtZXJyb3IgLSBleHRyYWN0aW5nIFR5cGVOYW1lIGZyb20gZnVuY3Rpb25cblx0Y29uc3QgeyBUeXBlTmFtZSB9ID0gQ3Rvcjtcblx0Y29uc3QgQ3N0ciA9IHByZXBhcmVTdWJ0eXBlRm9yQ29uc3RydWN0aW9uKFxuXHRcdFR5cGVOYW1lLFxuXHRcdGVudGl0eVxuXHQpIGFzIHVua25vd24gYXMgeyBuZXcoLi4uYXJzOiB1bmtub3duW10pOiB1bmtub3duIH07XG5cdC8vIFRPRE86IGNoZWNrIGxpbmVzIGJlbG93IGFuZCBpZiBDb25zdHJ1Y3RvciBpcyBub3QgbW5lbW9uaXplZCAuLi5cblx0aWYgKENzdHIgPT09IHVuZGVmaW5lZCkge1xuXHRcdGNvbnN0IEVycm9yQ3RvciA9IFdST05HX01PRElGSUNBVElPTl9QQVRURVJOIGFzIHVua25vd24gYXMgbmV3IChtc2c6IHN0cmluZykgPT4gRXJyb3I7XG5cdFx0dGhyb3cgbmV3IEVycm9yQ3RvcihgWyAke1R5cGVOYW1lfSBdIGlzIG5vdCBkZWZpbmVkIGFzIGEgVHlwZSBDb25zdHJ1Y3RvciBvbiB1c2VkIGluc3RhbmNlYCk7XG5cdH1cblx0Y29uc3QgcnVuUmVzdWx0ID0gbmV3IENzdHIoLi4uYXJncyk7XG5cdC8vIEB0cy1leHBlY3QtZXJyb3IgLSByZXR1cm5pbmcgcmVzdWx0IGFzIG1lcmdlZCBwcm90byB0eXBlXG5cdHJldHVybiBydW5SZXN1bHQ7XG59O1xuXG4vLyBUT0RPOiBhcHBseSBpbnN0YW5jZSAudG8gdHlwZSAud2l0aCBhcmd1bWVudHNcbmV4cG9ydCBjb25zdCBhcHBseSA9IGZ1bmN0aW9uIDxFIGV4dGVuZHMgb2JqZWN0LCBUIGV4dGVuZHMgb2JqZWN0LCBTIGV4dGVuZHMgUHJvdG88RSwgVD4+KFxuXHRlbnRpdHk6IEUsXG5cdEN0b3I6IElERUY8VD4sXG5cdGFyZ3M6IHVua25vd25bXSA9IFtdXG4pOiBJbnN0YW5jZVJlc3VsdDxNZXJnZTxFLCBUPj4ge1xuXHRjb25zdCBydW5SZXN1bHQgPSAkcnVuPEUsIFQsIFM+KFxuXHRcdGVudGl0eSxcblx0XHRDdG9yLFxuXHRcdGFyZ3Ncblx0KTtcblx0Y29uc3QgcmVzdWx0ID0gcnVuUmVzdWx0IGFzIHVua25vd24gYXMgSW5zdGFuY2VSZXN1bHQ8TWVyZ2U8RSwgVD4+O1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gVE9ETzogY2FsbCB0eXBlIC5ieSBpbnN0YW5jZSAud2l0aCBhcmd1bWVudHNcbmV4cG9ydCBjb25zdCBjYWxsID0gZnVuY3Rpb24gPEUgZXh0ZW5kcyBvYmplY3QsIFQgZXh0ZW5kcyBvYmplY3QsIFMgZXh0ZW5kcyBQcm90bzxFLCBUPj4oXG5cdGVudGl0eTogRSxcblx0Q3RvcjogSURFRjxUPixcblx0Li4uYXJnczogdW5rbm93bltdXG4pOiBJbnN0YW5jZVJlc3VsdDxNZXJnZTxFLCBUPj4ge1xuXHRjb25zdCBydW5SZXN1bHQgPSAkcnVuPEUsIFQsIFM+KFxuXHRcdGVudGl0eSxcblx0XHRDdG9yLFxuXHRcdGFyZ3Ncblx0KTtcblx0Y29uc3QgcmVzdWx0ID0gcnVuUmVzdWx0IGFzIHVua25vd24gYXMgSW5zdGFuY2VSZXN1bHQ8TWVyZ2U8RSwgVD4+O1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gVE9ETzogYmluZCB0eXBlIC53aXRoIGluc3RhbmNlIOKGkiAoLi4uYXJncylcbmV4cG9ydCBjb25zdCBiaW5kID0gZnVuY3Rpb24gPEUgZXh0ZW5kcyBvYmplY3QsIFQgZXh0ZW5kcyBvYmplY3QsIFMgZXh0ZW5kcyBQcm90bzxFLCBUPj4oXG5cdGVudGl0eTogRSxcblx0Q3RvcjogSURFRjxUPlxuKTogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gSW5zdGFuY2VSZXN1bHQ8TWVyZ2U8RSwgVD4+IHtcblx0Y29uc3QgcmVzdWx0ID0gKC4uLmFyZ3M6IHVua25vd25bXSkgPT4ge1xuXHRcdGNvbnN0IHJ1blJlc3VsdCA9ICRydW48RSwgVCwgUz4oXG5cdFx0XHRlbnRpdHksXG5cdFx0XHRDdG9yLFxuXHRcdFx0YXJnc1xuXHRcdCk7XG5cdFx0Y29uc3QgdHlwZWRSZXN1bHQgPSBydW5SZXN1bHQgYXMgdW5rbm93biBhcyBJbnN0YW5jZVJlc3VsdDxNZXJnZTxFLCBUPj47XG5cdFx0cmV0dXJuIHR5cGVkUmVzdWx0O1xuXHR9O1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IGRlY29yYXRlID0gZnVuY3Rpb24gPFxuXHRUIGV4dGVuZHMgQ29uc3RydWN0b3I8b2JqZWN0PiB8IGNvbnN0cnVjdG9yT3B0aW9ucyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuPihcblx0dGFyZ2V0PzogVCxcblx0Y29uZmlnPzogY29uc3RydWN0b3JPcHRpb25zXG4pOiA8VSBleHRlbmRzIENvbnN0cnVjdG9yPG9iamVjdD4+KGNzdHI6IFUpID0+IERlY29yYXRlZENsYXNzPFU+IHtcblx0Y29uc3Qgb3B0cyA9IChjb25maWcgPT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgdGFyZ2V0ID09PSAnb2JqZWN0JyAmJiAhKHRhcmdldCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSlcblx0XHQ/IHRhcmdldCBhcyBjb25zdHJ1Y3Rvck9wdGlvbnNcblx0XHQ6IGNvbmZpZztcblxuXHRjb25zdCBwYXJlbnRUeXBlID0gKHRhcmdldCBpbnN0YW5jZW9mIEZ1bmN0aW9uKVxuXHRcdD8gdGFyZ2V0IGFzIENvbnN0cnVjdG9yPG9iamVjdD5cblx0XHQ6IHVuZGVmaW5lZDtcblxuXHRjb25zdCBkZWNvcmF0b3IgPSBmdW5jdGlvbiA8VSBleHRlbmRzIENvbnN0cnVjdG9yPG9iamVjdD4+KGNzdHI6IFUpOiBEZWNvcmF0ZWRDbGFzczxVPiB7XG5cdFx0Y29uc3QgeyBuYW1lIH0gPSBjc3RyO1xuXHRcdGlmIChwYXJlbnRUeXBlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IGRlY29yYXRvclJlc3VsdCA9IGRlZmluZShcblx0XHRcdFx0bmFtZSxcblx0XHRcdFx0Y3N0ciBhcyBJREVGPG9iamVjdD4sXG5cdFx0XHRcdG9wdHNcblx0XHRcdCkgYXMgdW5rbm93biBhcyBEZWNvcmF0ZWRDbGFzczxVPjtcblx0XHRcdHJldHVybiBkZWNvcmF0b3JSZXN1bHQ7XG5cdFx0fVxuXHRcdGNvbnN0IHBhcmVudCA9IHBhcmVudFR5cGUgYXMgdW5rbm93biBhcyB7XG5cdFx0XHRkZWZpbmU6IFR5cGVBYnNvcmJlcjtcblx0XHR9O1xuXHRcdGNvbnN0IGRlZmluZVJlc3VsdCA9IHBhcmVudC5kZWZpbmUoXG5cdFx0XHRuYW1lLFxuXHRcdFx0Y3N0ciBhcyBJREVGPG9iamVjdD4sXG5cdFx0XHRvcHRzXG5cdFx0KSBhcyB1bmtub3duIGFzIERlY29yYXRlZENsYXNzPFU+O1xuXHRcdHJldHVybiBkZWZpbmVSZXN1bHQ7XG5cdH07XG5cdHJldHVybiBkZWNvcmF0b3I7XG59O1xuXG5cbmV4cG9ydCBjb25zdCByZWdpc3Rlckhvb2sgPSBmdW5jdGlvbiA8VCBleHRlbmRzIENvbnN0cnVjdG9yPFQ+Pihcblx0Q3RvcjogRGVjb3JhdGVkQ2xhc3M8VD4sXG5cdGhvb2tUeXBlOiBob29rc1R5cGVzLFxuXHRjYjogaG9va1xuKTogdm9pZCB7XG5cdEN0b3IucmVnaXN0ZXJIb29rKFxuXHRcdGhvb2tUeXBlLFxuXHRcdGNiXG5cdCk7XG59O1xuXG5leHBvcnQgY29uc3QgbW5lbW9uaWNhID0gT2JqZWN0LmVudHJpZXMoe1xuXG5cdGRlZmluZSxcblx0bG9va3VwLFxuXHRhcHBseSxcblx0Y2FsbCxcblx0YmluZCxcblx0ZGVjb3JhdGUsXG5cdHJlZ2lzdGVySG9vayxcblxuXHQuLi5kZXNjcmlwdG9ycyxcblxuXHQuLi5lcnJvcnNBcGksXG5cdC4uLmNvbnN0YW50cyxcblxufSkucmVkdWNlKFxuXHQoYWNjOiB7IFtpbmRleDogc3RyaW5nXTogdW5rbm93biB9LCBlbnRyeTogW3N0cmluZywgdW5rbm93bl0pID0+IHtcblx0XHRjb25zdCBbIG5hbWUsIGNvZGUgXSA9IGVudHJ5O1xuXHRcdG9kcChcblx0XHRcdGFjYyxcblx0XHRcdG5hbWUsXG5cdFx0XHR7XG5cdFx0XHRcdGdldCgpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29kZTtcblx0XHRcdFx0fSxcblx0XHRcdFx0ZW51bWVyYWJsZSA6IHRydWVcblx0XHRcdH1cblx0XHQpO1xuXHRcdHJldHVybiBhY2M7XG5cdH0sXG5cdHt9XG4pIGFzIE1uZW1vbmljYU1vZHVsZTtcblxuaW1wb3J0ICogYXMgYXBpIGZyb20gJy4vYXBpJztcblxuZXhwb3J0IGNvbnN0IHtcblx0ZGVmaW5lOiBfZGVmaW5lLFxuXHRsb29rdXA6IF9sb29rdXBcbn0gPSBhcGkudHlwZXM7XG5cbmV4cG9ydCBjb25zdCB7XG5cblx0U3ltYm9sUGFyZW50VHlwZSxcblx0U3ltYm9sQ29uc3RydWN0b3JOYW1lLFxuXHRTeW1ib2xEZWZhdWx0VHlwZXNDb2xsZWN0aW9uLFxuXHRTeW1ib2xDb25maWcsXG5cdE1ORU1PTklDQSxcblx0TU5FTU9TWU5FLFxuXHRUWVBFX1RJVExFX1BSRUZJWCxcblx0RXJyb3JNZXNzYWdlcyxcblxufSA9IG1uZW1vbmljYTtcblxuLy8gRXhwb3J0IGNyZWF0ZVR5cGVzQ29sbGVjdGlvbiB3aXRoIHByb3BlciB0eXBlXG5leHBvcnQgY29uc3QgY3JlYXRlVHlwZXNDb2xsZWN0aW9uOiBDcmVhdGVUeXBlc0NvbGxlY3Rpb25GdW5jdGlvbiA9XG5cdG1uZW1vbmljYS5jcmVhdGVUeXBlc0NvbGxlY3Rpb24gYXMgQ3JlYXRlVHlwZXNDb2xsZWN0aW9uRnVuY3Rpb247XG5cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRDb2xsZWN0aW9uID0gKGRlZmF1bHRUeXBlcyBhcyB7IHN1YnR5cGVzOiBNYXA8c3RyaW5nLCBvYmplY3Q+IH0pLnN1YnR5cGVzO1xuZXhwb3J0IGNvbnN0IGVycm9ycyA9IGRlc2NyaXB0b3JzLkVycm9yc1R5cGVzO1xuXG5leHBvcnQgeyB1dGlscyB9IGZyb20gJy4vdXRpbHMnO1xuZXhwb3J0IHsgZGVmaW5lU3RhY2tDbGVhbmVyIH0gZnJvbSAnLi91dGlscyc7XG4vKiBlc2xpbnQtZW5hYmxlIHNwYWNlLWJlZm9yZS1mdW5jdGlvbi1wYXJlbiAqL1xuIl19
|
|
152
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsWUFBWSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0ZiLHdCQXNCQztBQU9ELHdCQVFDO0FBcEdELDhEQUEyQztBQUUxQyxlQUFPLEdBRUosZUFBVSxVQURiLDZCQUFxQixHQUNsQixlQUFVLHVCQUFDO0FBa0NmLDJDQUUyQjtBQUQxQixpR0FBQSxRQUFRLE9BQUE7QUFBRSxpR0FBQSxRQUFRLE9BQUE7QUFHbkIsMkNBQXdDO0FBQ3hDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxxQkFBUyxDQUFDO0FBRTFCLHdEQUEwQztBQUMxQywrQ0FBNEM7QUFFNUMsTUFBTSxFQUFFLDBCQUEwQixFQUFFLEdBQUcseUJBQVcsQ0FBQyxXQUFXLENBQUM7QUFFL0Qsc0VBQStDO0FBQy9DLE1BQU0sRUFBRSw2QkFBNkIsRUFBRSxHQUFHLG1CQUFVLENBQUM7QUFFdEMsb0JBQVksR0FBTSx5QkFBVyxjQUFDO0FBRTdDLFNBQVMsU0FBUyxDQUFDLE9BQW9EO0lBQ3RFLE1BQU0sTUFBTSxHQUFHLE9BQU8sS0FBSyxpQkFBUyxJQUFJLE9BQU8sS0FBSyxPQUFPLENBQUM7SUFDNUQsT0FBTyxNQUFNLENBQUM7QUFDZixDQUFDO0FBS0QsU0FBZ0IsTUFBTSxDQVFyQixRQUFzRCxFQUV0RCxnQkFBa0YsRUFDbEYsTUFBMkI7SUFFM0IsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksb0JBQVksQ0FBQztJQUVwRSxNQUFNLFlBQVksR0FBSSxLQUFrQztTQUN0RCxNQUFNLENBQ04sUUFBa0IsRUFDbEIsZ0JBQTJCLEVBQzNCLE1BQU0sQ0FDVSxDQUFDO0lBQ25CLE9BQU8sWUFBWSxDQUFDO0FBQ3JCLENB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LGlCQUFTLHdCQVBaLG9DQUE0QixHQU96QixpQkFBUywrQkFOWixvQkFBWSxHQU1ULGlCQUFTLGVBTFosaUJBQVMsR0FLTixpQkFBUyxZQUpaLGlCQUFTLEdBSU4saUJBQVMsWUFIWix5QkFBaUIsR0FHZCxpQkFBUyxvQkFGWixxQkFBYSxHQUVWLGlCQUFTLGVBQUM7QUFHRCxRQUFBLHFCQUFxQixHQUNqQyxpQkFBUyxDQUFDLHFCQUFzRCxDQUFDO0FBR3JELFFBQUEsaUJBQWlCLEdBQUksb0JBQWtELENBQUMsUUFBUSxDQUFDO0FBQ2pGLFFBQUEsTUFBTSxHQUFHLHlCQUFXLENBQUMsV0FBVyxDQUFDO0FBRTlDLGlDQUFnQztBQUF2Qiw4RkFBQSxLQUFLLE9BQUE7QUFDZCxpQ0FBNkM7QUFBcEMsMkdBQUEsa0JBQWtCLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBzcGFjZS1iZWZvcmUtZnVuY3Rpb24tcGFyZW4gKi9cbid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHR5cGUge1xuXHRDcmVhdGVUeXBlc0NvbGxlY3Rpb25GdW5jdGlvbixcblx0SURFRixcblx0aG9vayxcblx0aG9va3NUeXBlcyxcblx0Y29uc3RydWN0b3JPcHRpb25zLFxuXHRQcm90byxcblx0SURlZmluaXRvckluc3RhbmNlLFxuXHRDb25zdHJ1Y3Rvcixcblx0RGVjb3JhdGVkQ2xhc3MsXG5cdFR5cGVDbGFzcyxcblx0VHlwZUFic29yYmVyLFxuXHRNbmVtb25pY2FNb2R1bGUsXG5cdEluc3RhbmNlUmVzdWx0LFxuXHRNZXJnZVxufSBmcm9tICcuL3R5cGVzJztcblxuaW1wb3J0IFR5cGVzVXRpbHMgZnJvbSAnLi9hcGkvdXRpbHMvaW5kZXgnO1xuZXhwb3J0IGNvbnN0IHtcblx0aXNDbGFzcyxcblx0ZmluZFN1YlR5cGVGcm9tUGFyZW50LFxufSA9IFR5cGVzVXRpbHM7XG5cbmV4cG9ydCB0eXBlIHtcblx0SURFRiwgVHlwZUNvbnN0cnVjdG9yLCBUeXBlQ29uc3RydWN0b3JCYXNlLFxuXHRJbnN0YW5jZU9mVHlwZVJlZ2lzdHJ5LCBMaXRlcmFsS2V5c09mLCBQYXJlbnRQYXRoLCBQYXRoT2ZJbnN0YW5jZSxcblx0QWxsUGFyZW50UHJlZml4ZXMsIFBhcmVudFBhdGhPZkluc3RhbmNlLFxuXHRfSW50ZXJuYWxfVENfLCBQcm90bywgUHJvdG9GbGF0LFxuXHRob29rc09wdHMsIGhvb2ssIGhvb2tzVHlwZXMsIFR5cGVzQ29sbGVjdGlvblxufSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBUeXBlLXNhZmUgcmVnaXN0cnkgZm9yIG1uZW1vbmljYSB0eXBlcy5cbiAqXG4gKiBUaGlzIGludGVyZmFjZSBzdGFydHMgZW1wdHkuIEFwcGxpY2F0aW9uIGNvZGUgb3IgYEBtbmVtb25pY2EvdGFjdGljYWBcbiAqIGF1Z21lbnRzIGl0IHRocm91Z2ggVHlwZVNjcmlwdCBtb2R1bGUgZGVjbGFyYXRpb24gbWVyZ2luZzpcbiAqXG4gKiBgYGB0c1xuICogZGVjbGFyZSBtb2R1bGUgJ21uZW1vbmljYScge1xuICogICBpbnRlcmZhY2UgVHlwZVJlZ2lzdHJ5IHtcbiAqICAgICAnTXlUeXBlJzogVHlwZUNvbnN0cnVjdG9yPE15VHlwZUluc3RhbmNlPjtcbiAqICAgICAnTXlUeXBlLlN1YlR5cGUnOiBUeXBlQ29uc3RydWN0b3I8U3ViVHlwZUluc3RhbmNlPjtcbiAqICAgfVxuICogfVxuICogYGBgXG4gKlxuICogT25jZSBhdWdtZW50ZWQsIGBsb29rdXAoJ015VHlwZScpYCBhbmQgYHV0aWxzLnBhcmVudChpbnN0YW5jZSwgJ015VHlwZScpYFxuICogcmVzb2x2ZSBrZXlzIGFnYWluc3QgdGhpcyByZWdpc3RyeS4gVW5hdWdtZW50ZWQga2V5cyBmYWxsIGJhY2sgdG8gdGhlIGJyb2FkXG4gKiBgVHlwZUNsYXNzIHwgdW5kZWZpbmVkYCByZXR1cm4gdHlwZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUeXBlUmVnaXN0cnkge1xuXHQvLyBJbnRlbnRpb25hbGx5IGVtcHR5LiBBdWdtZW50IHRoaXMgaW50ZXJmYWNlIHZpYSBkZWNsYXJhdGlvbiBtZXJnaW5nXG5cdC8vIChoYW5kLXdyaXR0ZW4gb3IgZ2VuZXJhdGVkIGJ5IEBtbmVtb25pY2EvdGFjdGljYSkgdG8gZW5hYmxlIHR5cGVkXG5cdC8vIHV0aWxpdGllcyBsaWtlIGxvb2t1cCgpIGFuZCBwYXJlbnQoKS5cbn1cbmV4cG9ydCB7XG5cdGdldFByb3BzLCBzZXRQcm9wcyBcbn0gZnJvbSAnLi9hcGkvdHlwZXMvUHJvcHMnO1xuXG5pbXBvcnQgeyBjb25zdGFudHMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5jb25zdCB7IG9kcCB9ID0gY29uc3RhbnRzO1xuXG5pbXBvcnQgKiBhcyBlcnJvcnNBcGkgZnJvbSAnLi9hcGkvZXJyb3JzJztcbmltcG9ydCB7IGRlc2NyaXB0b3JzIH0gZnJvbSAnLi9kZXNjcmlwdG9ycyc7XG5cbmNvbnN0IHsgV1JPTkdfTU9ESUZJQ0FUSU9OX1BBVFRFUk4gfSA9IGRlc2NyaXB0b3JzLkVycm9yc1R5cGVzO1xuXG5pbXBvcnQgbW5lbW9zeW5lcyBmcm9tICcuL2FwaS90eXBlcy9NbmVtb3N5bmUnO1xuY29uc3QgeyBwcmVwYXJlU3VidHlwZUZvckNvbnN0cnVjdGlvbiB9ID0gbW5lbW9zeW5lcztcblxuZXhwb3J0IGNvbnN0IHsgZGVmYXVsdFR5cGVzLCB9ID0gZGVzY3JpcHRvcnM7XG5cbmZ1bmN0aW9uIGNoZWNrVGhpcyhwb2ludGVyOiB0eXBlb2YgbW5lbW9uaWNhIHwgdHlwZW9mIGV4cG9ydHMgfCB1bmtub3duKTogYm9vbGVhbiB7XG5cdGNvbnN0IHJlc3VsdCA9IHBvaW50ZXIgPT09IG1uZW1vbmljYSB8fCBwb2ludGVyID09PSBleHBvcnRzO1xuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG5cblxuLy8gRGVmaW5lIGZ1bmN0aW9uIHVzaW5nIFR5cGVBYnNvcmJlciBpbnRlcmZhY2Ugd2l0aCBwcm9wZXIgdHlwZSBjYXN0aW5nXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lIDxcblx0VCBleHRlbmRzIG9iamVjdCxcblx0UCBleHRlbmRzIG9iamVjdCA9IG9iamVjdCxcblx0TiBleHRlbmRzIFByb3RvPFAsIFQ+ID0gUHJvdG88UCwgVD4sXG5cdC8vIGhlcmUgSURlZmluaXRvckluc3RhbmNlIGlzIGEgQ09OU1RSVUNUT1IgISEhXG5cdFIgZXh0ZW5kcyBJRGVmaW5pdG9ySW5zdGFuY2U8Tj4gPSBJRGVmaW5pdG9ySW5zdGFuY2U8Tj4sXG4+KFxuXHR0aGlzOiB1bmtub3duLFxuXHRUeXBlTmFtZT86IHN0cmluZyB8IENhbGxhYmxlRnVuY3Rpb24gfCBOZXdhYmxlRnVuY3Rpb24sXG5cdC8vIEFsbG93IGJvdGggc3RyaWN0IElERUYgYW5kIG1vcmUgZmxleGlibGUgZnVuY3Rpb24gc2lnbmF0dXJlc1xuXHRjb25zdHJ1Y3RIYW5kbGVyPzogSURFRjxUPiB8IENhbGxhYmxlRnVuY3Rpb24gfCBOZXdhYmxlRnVuY3Rpb24gfCBvYmplY3QgfCBib29sZWFuLFxuXHRjb25maWc/OiBjb25zdHJ1Y3Rvck9wdGlvbnMsXG4pOiBSIHtcblx0Y29uc3QgdHlwZXMgPSBjaGVja1RoaXModGhpcykgPyBkZWZhdWx0VHlwZXMgOiB0aGlzIHx8IGRlZmF1bHRUeXBlcztcblx0Ly8gVHlwZSBhc3NlcnRpb24gbmVlZGVkIGJlY2F1c2UgVHlwZXNDb2xsZWN0aW9uUHJveHkgaXMgYSBQcm94eVxuXHRjb25zdCBkZWZpbmVSZXN1bHQgPSAodHlwZXMgYXMgeyBkZWZpbmU6IFR5cGVBYnNvcmJlciB9KVxuXHRcdC5kZWZpbmUoXG5cdFx0XHRUeXBlTmFtZSBhcyBzdHJpbmcsXG5cdFx0XHRjb25zdHJ1Y3RIYW5kbGVyIGFzIElERUY8VD4sXG5cdFx0XHRjb25maWdcblx0XHQpIGFzIHVua25vd24gYXMgUjtcblx0cmV0dXJuIGRlZmluZVJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvb2t1cDxjb25zdCBLIGV4dGVuZHMga2V5b2YgVHlwZVJlZ2lzdHJ5Pihcblx0dGhpczogdW5rbm93bixcblx0VHlwZU5lc3RlZFBhdGg6IEtcbik6IFR5cGVSZWdpc3RyeVtLXTtcbmV4cG9ydCBmdW5jdGlvbiBsb29rdXAodGhpczogdW5rbm93biwgVHlwZU5lc3RlZFBhdGg6IHN0cmluZyk6IFR5cGVDbGFzcyB8IHVuZGVmaW5lZDtcbmV4cG9ydCBmdW5jdGlvbiBsb29rdXAoXG5cdHRoaXM6IHVua25vd24sXG5cdFR5cGVOZXN0ZWRQYXRoOiBzdHJpbmdcbik6IFR5cGVDbGFzcyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHR5cGVzID0gY2hlY2tUaGlzKHRoaXMpID8gZGVmYXVsdFR5cGVzIDogdGhpcyB8fCBkZWZhdWx0VHlwZXM7XG5cdC8vIFR5cGUgYXNzZXJ0aW9uIG5lZWRlZCBiZWNhdXNlIFR5cGVzQ29sbGVjdGlvblByb3h5IGlzIGEgUHJveHlcblx0Y29uc3QgbG9va3VwUmVzdWx0ID0gKHR5cGVzIGFzIHsgbG9va3VwOiAocGF0aDogc3RyaW5nKSA9PiBUeXBlQ2xhc3MgfCB1bmRlZmluZWQgfSkubG9va3VwKFR5cGVOZXN0ZWRQYXRoKTtcblx0cmV0dXJuIGxvb2t1cFJlc3VsdDtcbn1cblxuXG5jb25zdCAkcnVuID0gZnVuY3Rpb24gPEUgZXh0ZW5kcyBvYmplY3QsIFQgZXh0ZW5kcyBvYmplY3QsIFMgZXh0ZW5kcyBQcm90bzxFLCBUPj4oXG5cdGVudGl0eTogRSxcblx0Q3RvcjogSURFRjxUPixcblx0YXJnczogdW5rbm93bltdXG4pOiB7XG5cdFx0W2tleSBpbiBrZXlvZiBTXTogU1trZXldXG5cdH0ge1xuXG5cdC8vIGRlYnVnZ2VyO1xuXHQvLyBAdHMtZXhwZWN0LWVycm9yIC0gZXh0cmFjdGluZyBUeXBlTmFtZSBmcm9tIGZ1bmN0aW9uXG5cdGNvbnN0IHsgVHlwZU5hbWUgfSA9IEN0b3I7XG5cdGNvbnN0IENzdHIgPSBwcmVwYXJlU3VidHlwZUZvckNvbnN0cnVjdGlvbihcblx0XHRUeXBlTmFtZSxcblx0XHRlbnRpdHlcblx0KSBhcyB1bmtub3duIGFzIHsgbmV3KC4uLmFyczogdW5rbm93bltdKTogdW5rbm93biB9O1xuXHQvLyBUT0RPOiBjaGVjayBsaW5lcyBiZWxvdyBhbmQgaWYgQ29uc3RydWN0b3IgaXMgbm90IG1uZW1vbml6ZWQgLi4uXG5cdGlmIChDc3RyID09PSB1bmRlZmluZWQpIHtcblx0XHRjb25zdCBFcnJvckN0b3IgPSBXUk9OR19NT0RJRklDQVRJT05fUEFUVEVSTiBhcyB1bmtub3duIGFzIG5ldyAobXNnOiBzdHJpbmcpID0+IEVycm9yO1xuXHRcdHRocm93IG5ldyBFcnJvckN0b3IoYFsgJHtUeXBlTmFtZX0gXSBpcyBub3QgZGVmaW5lZCBhcyBhIFR5cGUgQ29uc3RydWN0b3Igb24gdXNlZCBpbnN0YW5jZWApO1xuXHR9XG5cdGNvbnN0IHJ1blJlc3VsdCA9IG5ldyBDc3RyKC4uLmFyZ3MpO1xuXHQvLyBAdHMtZXhwZWN0LWVycm9yIC0gcmV0dXJuaW5nIHJlc3VsdCBhcyBtZXJnZWQgcHJvdG8gdHlwZVxuXHRyZXR1cm4gcnVuUmVzdWx0O1xufTtcblxuLy8gVE9ETzogYXBwbHkgaW5zdGFuY2UgLnRvIHR5cGUgLndpdGggYXJndW1lbnRzXG5leHBvcnQgY29uc3QgYXBwbHkgPSBmdW5jdGlvbiA8RSBleHRlbmRzIG9iamVjdCwgVCBleHRlbmRzIG9iamVjdCwgUyBleHRlbmRzIFByb3RvPEUsIFQ+Pihcblx0ZW50aXR5OiBFLFxuXHRDdG9yOiBJREVGPFQ+LFxuXHRhcmdzOiB1bmtub3duW10gPSBbXVxuKTogSW5zdGFuY2VSZXN1bHQ8TWVyZ2U8RSwgVD4+IHtcblx0Y29uc3QgcnVuUmVzdWx0ID0gJHJ1bjxFLCBULCBTPihcblx0XHRlbnRpdHksXG5cdFx0Q3Rvcixcblx0XHRhcmdzXG5cdCk7XG5cdGNvbnN0IHJlc3VsdCA9IHJ1blJlc3VsdCBhcyB1bmtub3duIGFzIEluc3RhbmNlUmVzdWx0PE1lcmdlPEUsIFQ+Pjtcblx0cmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIFRPRE86IGNhbGwgdHlwZSAuYnkgaW5zdGFuY2UgLndpdGggYXJndW1lbnRzXG5leHBvcnQgY29uc3QgY2FsbCA9IGZ1bmN0aW9uIDxFIGV4dGVuZHMgb2JqZWN0LCBUIGV4dGVuZHMgb2JqZWN0LCBTIGV4dGVuZHMgUHJvdG88RSwgVD4+KFxuXHRlbnRpdHk6IEUsXG5cdEN0b3I6IElERUY8VD4sXG5cdC4uLmFyZ3M6IHVua25vd25bXVxuKTogSW5zdGFuY2VSZXN1bHQ8TWVyZ2U8RSwgVD4+IHtcblx0Y29uc3QgcnVuUmVzdWx0ID0gJHJ1bjxFLCBULCBTPihcblx0XHRlbnRpdHksXG5cdFx0Q3Rvcixcblx0XHRhcmdzXG5cdCk7XG5cdGNvbnN0IHJlc3VsdCA9IHJ1blJlc3VsdCBhcyB1bmtub3duIGFzIEluc3RhbmNlUmVzdWx0PE1lcmdlPEUsIFQ+Pjtcblx0cmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIFRPRE86IGJpbmQgdHlwZSAud2l0aCBpbnN0YW5jZSDihpIgKC4uLmFyZ3MpXG5leHBvcnQgY29uc3QgYmluZCA9IGZ1bmN0aW9uIDxFIGV4dGVuZHMgb2JqZWN0LCBUIGV4dGVuZHMgb2JqZWN0LCBTIGV4dGVuZHMgUHJvdG88RSwgVD4+KFxuXHRlbnRpdHk6IEUsXG5cdEN0b3I6IElERUY8VD5cbik6ICguLi5hcmdzOiB1bmtub3duW10pID0+IEluc3RhbmNlUmVzdWx0PE1lcmdlPEUsIFQ+PiB7XG5cdGNvbnN0IHJlc3VsdCA9ICguLi5hcmdzOiB1bmtub3duW10pID0+IHtcblx0XHRjb25zdCBydW5SZXN1bHQgPSAkcnVuPEUsIFQsIFM+KFxuXHRcdFx0ZW50aXR5LFxuXHRcdFx0Q3Rvcixcblx0XHRcdGFyZ3Ncblx0XHQpO1xuXHRcdGNvbnN0IHR5cGVkUmVzdWx0ID0gcnVuUmVzdWx0IGFzIHVua25vd24gYXMgSW5zdGFuY2VSZXN1bHQ8TWVyZ2U8RSwgVD4+O1xuXHRcdHJldHVybiB0eXBlZFJlc3VsdDtcblx0fTtcblx0cmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWNvcmF0ZSA9IGZ1bmN0aW9uIDxcblx0VCBleHRlbmRzIENvbnN0cnVjdG9yPG9iamVjdD4gfCBjb25zdHJ1Y3Rvck9wdGlvbnMgfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcbj4oXG5cdHRhcmdldD86IFQsXG5cdGNvbmZpZz86IGNvbnN0cnVjdG9yT3B0aW9uc1xuKTogPFUgZXh0ZW5kcyBDb25zdHJ1Y3RvcjxvYmplY3Q+Pihjc3RyOiBVKSA9PiBEZWNvcmF0ZWRDbGFzczxVPiB7XG5cdGNvbnN0IG9wdHMgPSAoY29uZmlnID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIHRhcmdldCA9PT0gJ29iamVjdCcgJiYgISh0YXJnZXQgaW5zdGFuY2VvZiBGdW5jdGlvbikpXG5cdFx0PyB0YXJnZXQgYXMgY29uc3RydWN0b3JPcHRpb25zXG5cdFx0OiBjb25maWc7XG5cblx0Y29uc3QgcGFyZW50VHlwZSA9ICh0YXJnZXQgaW5zdGFuY2VvZiBGdW5jdGlvbilcblx0XHQ/IHRhcmdldCBhcyBDb25zdHJ1Y3RvcjxvYmplY3Q+XG5cdFx0OiB1bmRlZmluZWQ7XG5cblx0Y29uc3QgZGVjb3JhdG9yID0gZnVuY3Rpb24gPFUgZXh0ZW5kcyBDb25zdHJ1Y3RvcjxvYmplY3Q+Pihjc3RyOiBVKTogRGVjb3JhdGVkQ2xhc3M8VT4ge1xuXHRcdGNvbnN0IHsgbmFtZSB9ID0gY3N0cjtcblx0XHRpZiAocGFyZW50VHlwZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCBkZWNvcmF0b3JSZXN1bHQgPSBkZWZpbmUoXG5cdFx0XHRcdG5hbWUsXG5cdFx0XHRcdGNzdHIgYXMgSURFRjxvYmplY3Q+LFxuXHRcdFx0XHRvcHRzXG5cdFx0XHQpIGFzIHVua25vd24gYXMgRGVjb3JhdGVkQ2xhc3M8VT47XG5cdFx0XHRyZXR1cm4gZGVjb3JhdG9yUmVzdWx0O1xuXHRcdH1cblx0XHRjb25zdCBwYXJlbnQgPSBwYXJlbnRUeXBlIGFzIHVua25vd24gYXMge1xuXHRcdFx0ZGVmaW5lOiBUeXBlQWJzb3JiZXI7XG5cdFx0fTtcblx0XHRjb25zdCBkZWZpbmVSZXN1bHQgPSBwYXJlbnQuZGVmaW5lKFxuXHRcdFx0bmFtZSxcblx0XHRcdGNzdHIgYXMgSURFRjxvYmplY3Q+LFxuXHRcdFx0b3B0c1xuXHRcdCkgYXMgdW5rbm93biBhcyBEZWNvcmF0ZWRDbGFzczxVPjtcblx0XHRyZXR1cm4gZGVmaW5lUmVzdWx0O1xuXHR9O1xuXHRyZXR1cm4gZGVjb3JhdG9yO1xufTtcblxuXG5leHBvcnQgY29uc3QgcmVnaXN0ZXJIb29rID0gZnVuY3Rpb24gPFQgZXh0ZW5kcyBDb25zdHJ1Y3RvcjxUPj4oXG5cdEN0b3I6IERlY29yYXRlZENsYXNzPFQ+LFxuXHRob29rVHlwZTogaG9va3NUeXBlcyxcblx0Y2I6IGhvb2tcbik6IHZvaWQge1xuXHRDdG9yLnJlZ2lzdGVySG9vayhcblx0XHRob29rVHlwZSxcblx0XHRjYlxuXHQpO1xufTtcblxuZXhwb3J0IGNvbnN0IG1uZW1vbmljYSA9IE9iamVjdC5lbnRyaWVzKHtcblxuXHRkZWZpbmUsXG5cdGxvb2t1cCxcblx0YXBwbHksXG5cdGNhbGwsXG5cdGJpbmQsXG5cdGRlY29yYXRlLFxuXHRyZWdpc3Rlckhvb2ssXG5cblx0Li4uZGVzY3JpcHRvcnMsXG5cblx0Li4uZXJyb3JzQXBpLFxuXHQuLi5jb25zdGFudHMsXG5cbn0pLnJlZHVjZShcblx0KGFjYzogeyBbaW5kZXg6IHN0cmluZ106IHVua25vd24gfSwgZW50cnk6IFtzdHJpbmcsIHVua25vd25dKSA9PiB7XG5cdFx0Y29uc3QgWyBuYW1lLCBjb2RlIF0gPSBlbnRyeTtcblx0XHRvZHAoXG5cdFx0XHRhY2MsXG5cdFx0XHRuYW1lLFxuXHRcdFx0e1xuXHRcdFx0XHRnZXQoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvZGU7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGVudW1lcmFibGUgOiB0cnVlXG5cdFx0XHR9XG5cdFx0KTtcblx0XHRyZXR1cm4gYWNjO1xuXHR9LFxuXHR7fVxuKSBhcyBNbmVtb25pY2FNb2R1bGU7XG5cbmltcG9ydCAqIGFzIGFwaSBmcm9tICcuL2FwaSc7XG5cbmV4cG9ydCBjb25zdCB7XG5cdGRlZmluZTogX2RlZmluZSxcblx0bG9va3VwOiBfbG9va3VwXG59ID0gYXBpLnR5cGVzO1xuXG5leHBvcnQgY29uc3Qge1xuXG5cdFN5bWJvbFBhcmVudFR5cGUsXG5cdFN5bWJvbENvbnN0cnVjdG9yTmFtZSxcblx0U3ltYm9sRGVmYXVsdFR5cGVzQ29sbGVjdGlvbixcblx0U3ltYm9sQ29uZmlnLFxuXHRNTkVNT05JQ0EsXG5cdE1ORU1PU1lORSxcblx0VFlQRV9USVRMRV9QUkVGSVgsXG5cdEVycm9yTWVzc2FnZXMsXG5cbn0gPSBtbmVtb25pY2E7XG5cbi8vIEV4cG9ydCBjcmVhdGVUeXBlc0NvbGxlY3Rpb24gd2l0aCBwcm9wZXIgdHlwZVxuZXhwb3J0IGNvbnN0IGNyZWF0ZVR5cGVzQ29sbGVjdGlvbjogQ3JlYXRlVHlwZXNDb2xsZWN0aW9uRnVuY3Rpb24gPVxuXHRtbmVtb25pY2EuY3JlYXRlVHlwZXNDb2xsZWN0aW9uIGFzIENyZWF0ZVR5cGVzQ29sbGVjdGlvbkZ1bmN0aW9uO1xuXG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0Q29sbGVjdGlvbiA9IChkZWZhdWx0VHlwZXMgYXMgeyBzdWJ0eXBlczogTWFwPHN0cmluZywgb2JqZWN0PiB9KS5zdWJ0eXBlcztcbmV4cG9ydCBjb25zdCBlcnJvcnMgPSBkZXNjcmlwdG9ycy5FcnJvcnNUeXBlcztcblxuZXhwb3J0IHsgdXRpbHMgfSBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCB7IGRlZmluZVN0YWNrQ2xlYW5lciB9IGZyb20gJy4vdXRpbHMnO1xuLyogZXNsaW50LWVuYWJsZSBzcGFjZS1iZWZvcmUtZnVuY3Rpb24tcGFyZW4gKi9cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mnemonica",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.9",
|
|
4
4
|
"description": "AI-agent ready instance inheritance system for JavaScript/TypeScript via prototype chains",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"main": "./build/index.js",
|
|
@@ -27,7 +27,6 @@
|
|
|
27
27
|
"CONTRIBUTING.md",
|
|
28
28
|
".ai",
|
|
29
29
|
"docs",
|
|
30
|
-
"examples",
|
|
31
30
|
"src",
|
|
32
31
|
"module",
|
|
33
32
|
"build"
|
|
@@ -98,7 +97,7 @@
|
|
|
98
97
|
"devDependencies": {
|
|
99
98
|
"@eslint/eslintrc": "^3.3.5",
|
|
100
99
|
"@eslint/js": "^9.21.0",
|
|
101
|
-
"@mnemonica/tactica": "^0.1.
|
|
100
|
+
"@mnemonica/tactica": "^0.1.3",
|
|
102
101
|
"@types/jest": "^29.5.14",
|
|
103
102
|
"@types/node": "^22.19.21",
|
|
104
103
|
"@typescript-eslint/eslint-plugin": "^8.61.1",
|
|
@@ -119,7 +118,7 @@
|
|
|
119
118
|
"nyc": "^17.1.0",
|
|
120
119
|
"oxlint": "^0.16.12",
|
|
121
120
|
"ts-jest": "^29.4.11",
|
|
122
|
-
"typeomatica": "^0.3.
|
|
121
|
+
"typeomatica": "^0.3.59",
|
|
123
122
|
"typescript": "^6.0.3"
|
|
124
123
|
},
|
|
125
124
|
"engines": {
|
package/src/index.ts
CHANGED
|
@@ -79,14 +79,14 @@ function checkThis(pointer: typeof mnemonica | typeof exports | unknown): boolea
|
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
|
|
82
|
+
|
|
82
83
|
// Define function using TypeAbsorber interface with proper type casting
|
|
83
|
-
export
|
|
84
|
+
export function define <
|
|
84
85
|
T extends object,
|
|
85
86
|
P extends object = object,
|
|
86
87
|
N extends Proto<P, T> = Proto<P, T>,
|
|
87
|
-
|
|
88
88
|
// here IDefinitorInstance is a CONSTRUCTOR !!!
|
|
89
|
-
R extends IDefinitorInstance<N> = IDefinitorInstance<N
|
|
89
|
+
R extends IDefinitorInstance<N> = IDefinitorInstance<N>,
|
|
90
90
|
>(
|
|
91
91
|
this: unknown,
|
|
92
92
|
TypeName?: string | CallableFunction | NewableFunction,
|
|
@@ -103,7 +103,7 @@ export const define = function <
|
|
|
103
103
|
config
|
|
104
104
|
) as unknown as R;
|
|
105
105
|
return defineResult;
|
|
106
|
-
}
|
|
106
|
+
}
|
|
107
107
|
|
|
108
108
|
export function lookup<const K extends keyof TypeRegistry>(
|
|
109
109
|
this: unknown,
|
package/examples/AsyncNewTest.js
DELETED
package/examples/ClassReName.js
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
const name = 'ClassName';
|
|
2
|
-
|
|
3
|
-
const pointer = class {
|
|
4
|
-
constructor () {
|
|
5
|
-
this.name = this.constructor.name;
|
|
6
|
-
}
|
|
7
|
-
};
|
|
8
|
-
|
|
9
|
-
console.log( ( new pointer ).name );
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const reNamer = {};
|
|
13
|
-
|
|
14
|
-
reNamer[ name ] = pointer;
|
|
15
|
-
Object.defineProperty( reNamer[ name ].prototype.constructor, 'name', {
|
|
16
|
-
get () {
|
|
17
|
-
return name;
|
|
18
|
-
}
|
|
19
|
-
} );
|
|
20
|
-
|
|
21
|
-
console.log( ( new reNamer[ name ] ).name );
|
|
22
|
-
|
|
23
|
-
console.log( ( new pointer ).name );
|
package/examples/README.md
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
# Examples
|
|
2
|
-
|
|
3
|
-
Standalone scripts that demonstrate edge cases and document JavaScript /
|
|
4
|
-
Node.js behaviors that mnemonica has to work around. They are runnable
|
|
5
|
-
from the project root after `npm run build`:
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
npm run example:async # AsyncNewTest.js
|
|
9
|
-
npm run example:rename # ClassReName.js
|
|
10
|
-
npm run example:v8bug # v8bug.js
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
## AsyncNewTest.js
|
|
14
|
-
|
|
15
|
-
Minimal demonstration that an `async function` does **not** have a
|
|
16
|
-
`prototype` property and therefore cannot be invoked with `new`. Mnemonica
|
|
17
|
-
must detect this case and route async constructors through a different
|
|
18
|
-
path. Useful when reasoning about why `define(name, async fn)` needs
|
|
19
|
-
special handling.
|
|
20
|
-
|
|
21
|
-
## ClassReName.js
|
|
22
|
-
|
|
23
|
-
Shows how `Object.defineProperty(Ctor.prototype.constructor, 'name', …)`
|
|
24
|
-
gives a class a runtime-renamed `constructor.name`. This is the technique
|
|
25
|
-
mnemonica uses internally to make every defined type's instance report
|
|
26
|
-
its declared `TypeName`, instead of the literal source-level identifier.
|
|
27
|
-
The "v8 bug" referenced in `v8bug.js` is the reason this technique
|
|
28
|
-
matters.
|
|
29
|
-
|
|
30
|
-
## v8bug.js
|
|
31
|
-
|
|
32
|
-
Documents a Node.js 22 regression in how `Object.prototype.hasOwnProperty`
|
|
33
|
-
treats the `stack` property of objects whose prototype chain includes an
|
|
34
|
-
`Error`. On Node 20 it returns `true` after assignment; on Node 22+ V8
|
|
35
|
-
optimizes the assignment away unless `Object.defineProperty` is used.
|
|
36
|
-
Mnemonica's stack-cleaning logic must use the getter pattern shown at the
|
|
37
|
-
bottom of the file for cross-version compatibility.
|
|
38
|
-
|
|
39
|
-
These are regression notes, not tutorials. For user-facing examples and
|
|
40
|
-
the public API, start with [`README.md`](../README.md).
|
package/examples/v8bug.js
DELETED
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
// though Error.prototype.stack is non standard
|
|
5
|
-
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/stack
|
|
6
|
-
|
|
7
|
-
const myErrorObject = new Error('my error');
|
|
8
|
-
myErrorObject.prop = 123;
|
|
9
|
-
const hop = (o, p) => Object.prototype.hasOwnProperty.call(o, p);
|
|
10
|
-
|
|
11
|
-
// nodejs v20 & v22 it works properly
|
|
12
|
-
console.log(hop(myErrorObject, 'stack'));
|
|
13
|
-
// and for Firefox this property above just does not exists at all
|
|
14
|
-
// hop(Object.getPrototypeOf(myErrorObject), 'stack');
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
const myIntermediateObject = {};
|
|
18
|
-
|
|
19
|
-
Object.setPrototypeOf(myIntermediateObject, myErrorObject);
|
|
20
|
-
|
|
21
|
-
console.log(myIntermediateObject instanceof Error);
|
|
22
|
-
|
|
23
|
-
myIntermediateObject.stack = myErrorObject.stack;
|
|
24
|
-
// it doesn't matter which value you assign there,
|
|
25
|
-
// for example uncomment the next line
|
|
26
|
-
// myIntermediateObject.stack = 'myErrorObject.stack';
|
|
27
|
-
myIntermediateObject.prop = 123;
|
|
28
|
-
|
|
29
|
-
// this works properly for node.js v20, but not for v22
|
|
30
|
-
console.log(':', hop(myIntermediateObject, 'stack'));
|
|
31
|
-
console.log(':', hop(myIntermediateObject, 'prop'));
|
|
32
|
-
|
|
33
|
-
const myCorrectedObject = {};
|
|
34
|
-
Object.setPrototypeOf(myCorrectedObject, myErrorObject);
|
|
35
|
-
console.log(myCorrectedObject instanceof Error);
|
|
36
|
-
|
|
37
|
-
Object.defineProperty(myCorrectedObject, 'stack', {
|
|
38
|
-
get () {
|
|
39
|
-
return myErrorObject.stack;
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
// nodejs v20 & v22 it works properly
|
|
44
|
-
console.log(hop(myCorrectedObject, 'stack'));
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
// so for objects with Error in prototoype chain
|
|
49
|
-
// it optimizes .stack property
|
|
50
|
-
|
|
51
|
-
// general behaviour works correctly for both
|
|
52
|
-
const base = {
|
|
53
|
-
stack : 'str',
|
|
54
|
-
prop : 123
|
|
55
|
-
};
|
|
56
|
-
|
|
57
|
-
const sup = {};
|
|
58
|
-
|
|
59
|
-
Object.setPrototypeOf(sup, base);
|
|
60
|
-
|
|
61
|
-
sup.stack = 'str';
|
|
62
|
-
sup.prop = 123;
|
|
63
|
-
console.log(hop(sup, 'stack'));
|
|
64
|
-
console.log(hop(sup, 'prop'));
|