@vicin/sigil 3.1.4 → 3.2.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/CHANGELOG.md +17 -0
- package/README.md +121 -36
- package/dist/index.d.mts +19 -4
- package/dist/index.d.ts +19 -4
- package/dist/index.global.js +41 -21
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +41 -21
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +40 -22
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.global.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/options.ts","../src/symbols.ts","../src/helpers.ts","../src/mixin.ts","../src/classes.ts","../src/decorator.ts","../src/hof.ts"],"names":["a"],"mappings":"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","file":"index.global.js","sourcesContent":["/**\n * Configuration options for the Sigil library.\n *\n * These options control runtime validation, inheritance checks, label autofill behavior.\n */\nexport interface SigilOptions {\n /**\n * Validation rule applied to sigil labels before registration.\n *\n * - A function receives the label and must return `true` if valid.\n * - A `RegExp` must match the label.\n * - `null` disables validation entirely.\n *\n * Defaults to `null`.\n */\n labelValidation?: ((label: string) => boolean) | RegExp | null;\n\n /**\n * When enabled, non-decorated subclasses that would otherwise inherit an ancestor's label\n * will be assigned an autogenerated random label (so that explicit labels stay unique).\n */\n autofillLabels?: boolean;\n}\n\n/** -----------------------------------------\n * Main options object\n * ----------------------------------------- */\n\n/**\n * Defined SigilOptions used in the library.\n *\n * @internal\n */\nexport const OPTIONS: Required<SigilOptions> = {\n labelValidation: null,\n autofillLabels: true,\n};\n\n/**\n * Update runtime options for the Sigil library.\n * Call this early during application startup if you want non-default behavior.\n *\n * @param opts - Partial options to merge into the global `OPTIONS` object.\n */\nexport const updateSigilOptions = (opts: SigilOptions): void => {\n if ('autofillLabels' in opts) {\n if (typeof opts.autofillLabels !== 'boolean')\n throw new Error(\"'updateSigilOptions.autofillLabels' must be boolean\");\n OPTIONS.autofillLabels = opts.autofillLabels!;\n }\n\n if ('labelValidation' in opts) {\n const val = opts.labelValidation;\n if (val !== null && typeof val !== 'function' && !(val instanceof RegExp))\n throw new Error(\"'updateSigilOptions.labelValidation' must be null, function or RegExp\");\n OPTIONS.labelValidation = val ?? null;\n }\n};\n\n/** -----------------------------------------\n * Label validation\n * ----------------------------------------- */\n\n/**\n * Label validation regex. Labels must follow the pattern\n * `@scope/package.ClassName` where `ClassName` begins with an uppercase\n * letter. This avoids collisions across packages and helps debugging.\n *\n * It's advised to use this regex in 'SigilOptions.labelValidation'.\n */\nexport const DEFAULT_LABEL_REGEX = /^@[\\w-]+(?:\\/[\\w-]+)*\\.[A-Z][A-Za-z0-9]*$/;\n","/**\n * Symbol to uniquely identify sigil classes.\n *\n * @internal\n * @constant {symbol}\n */\nexport const __SIGIL__ = Symbol.for('@vicin/sigil.__SIGIL__');\n\n/**\n * Symbol used to store the identity label for a sigil constructor.\n *\n * Stored on the constructor as a non-enumerable property.\n *\n * @internal\n * @constant {symbol}\n */\nexport const __LABEL__ = Symbol.for('@vicin/sigil.__LABEL__');\n\n/**\n * Symbol used to store the human-readable label for a sigil constructor, it can be inherited if no label is deined.\n *\n * Stored on the constructor as a non-enumerable property.\n *\n * @internal\n * @constant {symbol}\n */\nexport const __EFFECTIVE_LABEL__ = Symbol.for('@vicin/sigil.__EFFECTIVE_LABEL__');\n\n/**\n * Symbol used to store the label lineage set for a sigil constructor.\n *\n * This is a set of labels (strings) representing the inheritance path of labels.\n *\n * @internal\n * @constant {symbol}\n */\nexport const __LINEAGE__ = Symbol.for('@vicin/sigil.__LINEAGE__');\n","import { OPTIONS, type SigilOptions } from './options';\nimport { __LABEL__, __EFFECTIVE_LABEL__, __SIGIL__, __LINEAGE__ } from './symbols';\nimport type { ISigil, ISigilInstance } from './types';\n\n/** Prefex use by the lib to identify auto-generated classes */\nconst AUTO_LABEL_PREFEX = '@Sigil-auto';\n\n/** -----------------------------------------\n * Main helper\n * ----------------------------------------- */\n\n/** Weak set to ensure that every ctor is handled only once. */\nconst handledCtors = new WeakSet<Function>();\n\n/** Main function to handle 'Sigil' and attach its metadata to the class */\nexport function handleSigil(ctor: Function, label?: string, opts?: SigilOptions) {\n // fast return if already defined\n if (handledCtors.has(ctor)) return;\n\n // Verify label\n verifyLabel(ctor, label, opts);\n\n // check ancestors to ensure that every label in sigil chain in unique\n const ancLabelsMap = handleAncestors(ctor, opts);\n\n // make sure that newly passed label is unique as well\n if (label && ancLabelsMap.has(label))\n throw new Error(\n `[Sigil Error] Attempt to assign label '${label}' to class '${ctor?.name}' but label is already used by parent '${ancLabelsMap.get(label)}', Make sure that every class has a unique label`\n );\n\n // handle current class\n sigilify(ctor, label ?? generateRandomLabel(ctor));\n\n // mark as handled\n handledCtors.add(ctor);\n}\n\n/** -----------------------------------------\n * Generic helpers\n * ----------------------------------------- */\n\nfunction handleAncestors(\n ctor: Function,\n opts?: Pick<SigilOptions, 'autofillLabels'>\n): Map<string, string> {\n // handle options\n const autofillLabels = opts?.autofillLabels ?? OPTIONS.autofillLabels;\n\n // get line age of this class (ancestors only)\n const ancestors: Function[] = [];\n let a = Object.getPrototypeOf(ctor);\n while (a && typeof a === 'function' && a.prototype[__SIGIL__]) {\n ancestors.unshift(a);\n a = Object.getPrototypeOf(a);\n }\n\n /** Map<label, className> to record the owner of each label. */\n const labelOwner = new Map<string, string>();\n\n // loop lineage to insure that each label is unique in ancestors\n for (const a of ancestors) {\n // get label\n const l = a.prototype[__LABEL__] as string;\n // if duplicate (no label is passed for this class) update class with new label\n if (labelOwner.has(l)) {\n if (!autofillLabels)\n throw new Error(\n `[Sigil Error] Class '${a.name}' is not sigilified with 'autofillLabels' setted to 'false', Make sure to sigilify all Sigil classes or set 'autofillLabels' to 'true'`\n );\n sigilify(a, generateRandomLabel(a));\n }\n // register current label with class name\n labelOwner.set(labelOf(a)!, a.name);\n }\n\n return labelOwner;\n}\n\nfunction sigilify(ctor: Function, label: string) {\n const sym = Symbol.for(label);\n Object.defineProperty(ctor.prototype, __SIGIL__, {\n value: sym,\n configurable: false,\n enumerable: false,\n writable: false,\n });\n Object.defineProperty(ctor.prototype, sym, {\n value: true,\n configurable: false,\n enumerable: false,\n writable: false,\n });\n Object.defineProperty(ctor.prototype, __LABEL__, {\n value: label,\n configurable: false,\n enumerable: false,\n writable: false,\n });\n if (!label.startsWith(AUTO_LABEL_PREFEX))\n Object.defineProperty(ctor.prototype, __EFFECTIVE_LABEL__, {\n value: label,\n configurable: false,\n enumerable: false,\n writable: false,\n });\n Object.defineProperty(ctor.prototype, __LINEAGE__, {\n value: new Set(['Sigil', ...(lineageOf(ctor) ?? []), label]),\n configurable: false,\n enumerable: false,\n writable: false,\n });\n // add { Symbol.for('Sigil'): true } if not present\n const sigilSym = Symbol.for('Sigil');\n if (ctor.prototype[sigilSym] !== true)\n Object.defineProperty(ctor.prototype, sigilSym, {\n value: true,\n configurable: false,\n enumerable: false,\n writable: false,\n });\n}\n\n/** -----------------------------------------\n * Introspection helpers\n * ----------------------------------------- */\n\n/**\n * Runtime predicate that checks whether the provided value is a sigil constructor.\n *\n * @param ctor - Constructor to test.\n * @returns `true` if `value` is a sigil constructor, otherwise `false`.\n */\nexport function isSigilCtor(ctor: unknown): ctor is ISigil {\n return typeof ctor === 'function' && ctor.prototype && __SIGIL__ in ctor.prototype;\n}\n\n/**\n * Runtime predicate that checks whether the provided object is an instance\n * of a sigil class.\n *\n * @param inst - The instanca to test.\n * @returns `true` if `obj` is an instance produced by a sigil constructor.\n */\nexport function isSigilInstance(inst: unknown): inst is ISigilInstance {\n return !!inst && typeof inst === 'object' && __SIGIL__ in inst;\n}\n\nexport function hasOwnSigil(ctor: Function): ctor is ISigil {\n return typeof ctor === 'function' && Object.hasOwn(ctor.prototype, __SIGIL__);\n}\n\nfunction labelOf(ctor: Function): string | undefined {\n return ctor.prototype[__LABEL__];\n}\n\nfunction lineageOf(ctor: Function): Set<string> | undefined {\n return ctor.prototype[__LINEAGE__];\n}\n\n/** -----------------------------------------\n * Label helpers\n * ----------------------------------------- */\n\nfunction verifyLabel<L extends string>(ctor: Function, label?: L, opts?: SigilOptions): void {\n // handle option\n const labelValidation = opts?.labelValidation ?? OPTIONS.labelValidation;\n const autofillLabels = opts?.autofillLabels ?? OPTIONS.autofillLabels;\n\n if (!label) {\n if (!autofillLabels)\n throw new Error(\n `[Sigil Error] Class '${ctor?.name}' is not sigilified with 'autofillLabels' setted to 'false', Make sure to sigilify all Sigil classes or set 'autofillLabels' to 'true'`\n );\n return;\n }\n\n if (label.startsWith(AUTO_LABEL_PREFEX))\n throw new Error(`'${AUTO_LABEL_PREFEX}' is a prefex reserved by the library`);\n\n if (labelValidation) {\n let valid: boolean;\n if (labelValidation instanceof RegExp) valid = labelValidation.test(label);\n else valid = labelValidation(label);\n\n if (!valid)\n throw new Error(\n `[Sigil Error] Invalid identity label '${label}'. Make sure that supplied label matches validation regex or function`\n );\n }\n}\n\nfunction initCounter() {\n if (!(globalThis as any).__SigilabelCounter) (globalThis as any).__SigilabelCounter = 0;\n}\n\nfunction generateRandomLabel(ctor: Function): string {\n initCounter();\n\n const counter = (globalThis as any).__SigilabelCounter++;\n const time = Date.now().toString(36);\n const rand = Math.random().toString(36).slice(2, 6);\n\n return `${AUTO_LABEL_PREFEX}:${ctor?.name}:${time}:${counter.toString(36)}:${rand}`;\n}\n","import { handleSigil, hasOwnSigil } from './helpers';\nimport type { SigilOptions } from './options';\nimport { __LABEL__, __EFFECTIVE_LABEL__, __LINEAGE__, __SIGIL__ } from './symbols';\nimport type {\n Constructor,\n Prettify,\n ConstructorAbstract,\n ISigilInstance,\n GetPrototype,\n ISigilStatic,\n sigil,\n} from './types';\n\n/**\n * Mixin factory that augments an existing class with Sigil runtime metadata and helpers.\n *\n * @param Base - The base constructor to extend.\n * @param label - Identity label to attach to the resulting class (e.g. '@scope/pkg.ClassName').\n * @param opts - Options object to override any global options if needed.\n * @returns A new constructor that extends `Base` and includes Sigil statics/instance methods.\n * @throws Error if `Base` is already sigilified.\n */\nexport function Sigilify<B extends Constructor, L extends string>(\n Base: B,\n label: L,\n opts?: SigilOptions\n) {\n if (hasOwnSigil(Base))\n throw new Error(\n `[Sigil Error] Class '${Base.name}' with label '${Base.SigilLabel}' is already sigilified`\n );\n\n class Sigilified extends Base implements ISigilInstance {\n /**\n * Class-level identity label constant for this sigil constructor.\n */\n static get SigilLabel(): L {\n handleSigil(this);\n return (this as any).prototype[__LABEL__];\n }\n\n /**\n * Class-level human-readable label constant for this sigil constructor, last passed label in 'Sigil' chain by developer.\n */\n static get SigilEffectiveLabel(): L {\n handleSigil(this);\n return (this as any).prototype[__EFFECTIVE_LABEL__];\n }\n\n /**\n * Linearized sigil type label chain for the current constructor.\n *\n * Useful for debugging and performing strict lineage comparisons.\n *\n * @returns An array of labels representing parent → child type labels.\n */\n static get SigilLabelLineage(): readonly string[] {\n handleSigil(this);\n return [...(this as any).prototype[__LINEAGE__]];\n }\n\n /**\n * Sigil type label set for the current constructor.\n * Useful for debugging.\n *\n * @returns A Readonly Set of labels that represent the type lineage.\n */\n static get SigilLabelSet(): Readonly<Set<string>> {\n handleSigil(this);\n return (this as any).prototype[__LINEAGE__];\n }\n\n /**\n * Compile-time nominal brand that encodes the class sigil labels object.\n */\n declare readonly [sigil]: Prettify<\n {\n Sigil: true;\n } & {\n [K in L]: true;\n }\n >;\n\n constructor(...args: any[]) {\n super(...args);\n const ctor = new.target;\n handleSigil(ctor);\n }\n\n /**\n * Check whether `other` is (or inherits from) the instance represented by the\n * calling constructor.\n *\n * This replaces `instanceof` so that checks remain valid across bundles/realms\n * and when subclassing.\n *\n * @typeParam T - The specific sigil constructor (`this`).\n * @param this - The constructor performing the type check.\n * @param other - The object to test.\n * @returns A type guard asserting `other` is an instance of the constructor.\n */\n static isOfType<T extends ISigilStatic>(this: T, other: unknown): other is GetPrototype<T> {\n handleSigil(this as any);\n if (other == null || typeof other !== 'object') return false;\n return (other as any)[(this as any).prototype[__SIGIL__]] === true;\n }\n\n /**\n * Check whether `other` is exactly the same instance represented by the\n * calling constructor.\n *\n * @typeParam T - The specific sigil constructor (`this`).\n * @param this - The constructor performing the type check.\n * @param other - The object to test.\n * @returns A type guard asserting `other` is an instance of the constructor.\n */\n static isExactType<T extends ISigilStatic>(this: T, other: unknown): other is GetPrototype<T> {\n handleSigil(this as any);\n if (other == null || typeof other !== 'object') return false;\n if ((this as any).prototype?.[__LINEAGE__].size !== (other as any)[__LINEAGE__]?.size)\n return false;\n return (other as any)[(this as any).prototype[__SIGIL__]] === true;\n }\n\n /**\n * Check whether `other` is (or inherits from) the instance represented by the\n * calling constructor.\n *\n * This replaces `instanceof` so that checks remain valid across bundles/realms\n * and when subclassing.\n *\n * @typeParam T - The specific sigil constructor (`this`).\n * @param this - The constructor performing the type check.\n * @param other - The object to test.\n * @returns A type guard asserting `other` is an instance of the constructor.\n */\n isOfType<T extends ISigilInstance>(this: T, other: unknown): other is T {\n if (other == null || typeof other !== 'object') return false;\n return (other as any)[(this as any)[__SIGIL__]] === true;\n }\n\n /**\n * Check whether `other` is exactly the same instance represented by the\n * calling constructor.\n *\n * @typeParam T - The specific sigil constructor (`this`).\n * @param this - The constructor performing the type check.\n * @param other - The object to test.\n * @returns A type guard asserting `other` is an instance of the constructor.\n */\n isExactType<T extends ISigilInstance>(this: T, other: unknown): other is T {\n if (other == null || typeof other !== 'object') return false;\n if ((this as any)[__LINEAGE__].size !== (other as any)[__LINEAGE__]?.size) return false;\n return (other as any)[(this as any)[__SIGIL__]] === true;\n }\n\n /**\n * Returns the identity sigil label of this instance's constructor.\n *\n * @returns The label string if passed (e.g. '@scope/pkg.ClassName'), random label if not passed (e.g. '@Sigil-auto:ClassName:mm2gkdwn:0:g1sq').\n */\n getSigilLabel(): string {\n return (this as any)[__LABEL__];\n }\n\n /**\n * Returns the human-readable sigil label of this instance's constructor.\n *\n * @returns The last passed label string (e.g. '@scope/pkg.ClassName').\n */\n getSigilEffectiveLabel(): string {\n return (this as any)[__EFFECTIVE_LABEL__];\n }\n\n /**\n * Returns a copy of the sigil type label lineage for this instance's constructor.\n *\n * @returns readonly array of labels representing the type lineage.\n */\n getSigilLabelLineage(): readonly string[] {\n return [...(this as any)[__LINEAGE__]];\n }\n\n /**\n * Returns a copy of the sigil type label lineage set for this instance's constructor.\n *\n * @returns readonly array of labels representing the type lineage.\n */\n getSigilLabelSet(): Readonly<Set<string>> {\n return (this as any)[__LINEAGE__];\n }\n }\n\n handleSigil(Sigilified, label, opts);\n return Sigilified;\n}\n\n/**\n * Mixin factory that augments an existing class with Sigil runtime metadata and helpers. Accept and return 'abstract' class.\n *\n * @param Base - The base constructor to extend.\n * @param label - Identity label to attach to the resulting class (e.g. '@scope/pkg.ClassName').\n * @param opts - Options object to override any global options if needed.\n * @returns A new abstract constructor that extends `Base` and includes Sigil statics/instance methods.\n * @throws Error if `Base` is already sigilified.\n */\nexport function SigilifyAbstract<B extends ConstructorAbstract, L extends string>(\n Base: B,\n label: L,\n opts?: SigilOptions\n) {\n if (hasOwnSigil(Base))\n throw new Error(\n `[Sigil Error] Class '${Base.name}' with label '${Base.SigilLabel}' is already sigilified`\n );\n\n abstract class Sigilified extends Base implements ISigilInstance {\n /**\n * Class-level identity label constant for this sigil constructor.\n */\n static get SigilLabel(): L {\n handleSigil(this);\n return (this as any).prototype[__LABEL__];\n }\n\n /**\n * Class-level human-readable label constant for this sigil constructor, last passed label in 'Sigil' chain by developer.\n */\n static get SigilEffectiveLabel(): L {\n handleSigil(this);\n return (this as any).prototype[__EFFECTIVE_LABEL__];\n }\n\n /**\n * Linearized sigil type label chain for the current constructor.\n *\n * Useful for debugging and performing strict lineage comparisons.\n *\n * @returns An array of labels representing parent → child type labels.\n */\n static get SigilLabelLineage(): readonly string[] {\n handleSigil(this);\n return [...(this as any).prototype[__LINEAGE__]];\n }\n\n /**\n * Sigil type label set for the current constructor.\n * Useful for debugging.\n *\n * @returns A Readonly Set of labels that represent the type lineage.\n */\n static get SigilLabelSet(): Readonly<Set<string>> {\n handleSigil(this);\n return (this as any).prototype[__LINEAGE__];\n }\n\n /**\n * Compile-time nominal brand that encodes the class sigil labels object.\n */\n declare readonly [sigil]: Prettify<\n {\n Sigil: true;\n } & {\n [K in L]: true;\n }\n >;\n\n constructor(...args: any[]) {\n super(...args);\n const ctor = new.target;\n handleSigil(ctor);\n }\n\n /**\n * Check whether `other` is (or inherits from) the instance represented by the\n * calling constructor.\n *\n * This replaces `instanceof` so that checks remain valid across bundles/realms\n * and when subclassing.\n *\n * @typeParam T - The specific sigil constructor (`this`).\n * @param this - The constructor performing the type check.\n * @param other - The object to test.\n * @returns A type guard asserting `other` is an instance of the constructor.\n */\n static isOfType<T>(this: T, other: unknown): other is GetPrototype<T> {\n handleSigil(this as any);\n if (other == null || typeof other !== 'object') return false;\n return (other as any)[(this as any).prototype[__SIGIL__]] === true;\n }\n\n /**\n * Check whether `other` is exactly the same instance represented by the\n * calling constructor.\n *\n * @typeParam T - The specific sigil constructor (`this`).\n * @param this - The constructor performing the type check.\n * @param other - The object to test.\n * @returns A type guard asserting `other` is an instance of the constructor.\n */\n static isExactType<T>(this: T, other: unknown): other is GetPrototype<T> {\n handleSigil(this as any);\n if (other == null || typeof other !== 'object') return false;\n if ((this as any).prototype?.[__LINEAGE__].size !== (other as any)[__LINEAGE__]?.size)\n return false;\n return (other as any)[(this as any).prototype[__SIGIL__]] === true;\n }\n\n /**\n * Check whether `other` is (or inherits from) the instance represented by the\n * calling constructor.\n *\n * This replaces `instanceof` so that checks remain valid across bundles/realms\n * and when subclassing.\n *\n * @typeParam T - The specific sigil constructor (`this`).\n * @param this - The constructor performing the type check.\n * @param other - The object to test.\n * @returns A type guard asserting `other` is an instance of the constructor.\n */\n isOfType<T>(this: T, other: unknown): other is T {\n if (other == null || typeof other !== 'object') return false;\n return (other as any)[(this as any)[__SIGIL__]] === true;\n }\n\n /**\n * Check whether `other` is exactly the same instance represented by the\n * calling constructor.\n *\n * @typeParam T - The specific sigil constructor (`this`).\n * @param this - The constructor performing the type check.\n * @param other - The object to test.\n * @returns A type guard asserting `other` is an instance of the constructor.\n */\n isExactType<T>(this: T, other: unknown): other is T {\n if (other == null || typeof other !== 'object') return false;\n if ((this as any)[__LINEAGE__].size !== (other as any)[__LINEAGE__]?.size) return false;\n return (other as any)[(this as any)[__SIGIL__]] === true;\n }\n\n /**\n * Returns the identity sigil label of this instance's constructor.\n *\n * @returns The label string if passed (e.g. '@scope/pkg.ClassName'), random label if not passed (e.g. '@Sigil-auto:ClassName:mm2gkdwn:0:g1sq').\n */\n getSigilLabel(): string {\n return (this as any)[__LABEL__];\n }\n\n /**\n * Returns the human-readable sigil label of this instance's constructor.\n *\n * @returns The last passed label string (e.g. '@scope/pkg.ClassName').\n */\n getSigilEffectiveLabel(): string {\n return (this as any)[__EFFECTIVE_LABEL__];\n }\n\n /**\n * Returns a copy of the sigil type label lineage for this instance's constructor.\n *\n * @returns readonly array of labels representing the type lineage.\n */\n getSigilLabelLineage(): readonly string[] {\n return [...(this as any)[__LINEAGE__]];\n }\n\n /**\n * Returns a copy of the sigil type label lineage set for this instance's constructor.\n *\n * @returns readonly array of labels representing the type lineage.\n */\n getSigilLabelSet(): Readonly<Set<string>> {\n return (this as any)[__LINEAGE__];\n }\n }\n\n handleSigil(Sigilified, label, opts);\n return Sigilified;\n}\n","import { Sigilify } from './mixin';\nimport type { sigil } from './types';\n\n/**\n * A minimal root Sigil class used by the library as a base identity.\n *\n * This is produced by `Sigilify` and can serve as a basic sentinel/base\n * class for other sigil classes or for debugging/inspection.\n */\nexport const Sigil = Sigilify(class {}, 'Sigil');\nexport type Sigil = InstanceType<typeof Sigil>;\n\n/**\n * A sigil variant of the built-in `Error` constructor used by the library\n * to represent Sigil-specific errors.\n *\n * Use `SigilError` when you want an Error type that is identifiable via sigil\n * runtime checks (e.g. `SigilError.isOfType(someError)`).\n */\nexport const SigilError = Sigilify(Error, 'SigilError');\nexport type SigilError = InstanceType<typeof SigilError>;\n","import { handleSigil, hasOwnSigil, isSigilCtor } from './helpers';\nimport type { SigilOptions } from './options';\n\n/**\n * Class decorator factory that attaches sigil statics to a class constructor.\n *\n * @param label - Sigil label string to assign to the decorated class (e.g. `@scope/pkg.ClassName`).\n * @param opts - Options object to override any global options if needed.\n * @returns A class decorator compatible with the ECMAScript decorator context.\n */\nexport function WithSigil(label: string, opts?: SigilOptions) {\n return function (value: Function, context: any) {\n // Only apply to class declarations\n if (!isSigilCtor(value))\n throw new Error(\n `[Sigil Error] 'WithSigil' decorator accept only Sigil classes but used on class '${value.name}'`\n );\n if (hasOwnSigil(value))\n throw new Error(\n `[Sigil Error] Class '${value.name}' with label '${value.SigilLabel}' is already sigilified`\n );\n\n handleSigil(value, label, opts);\n };\n}\n","import { handleSigil, isSigilCtor, hasOwnSigil } from './helpers';\nimport type { SigilOptions } from './options';\n\n/**\n * HOF (class inhancer) that attaches runtime sigil metadata to Sigil class.\n * Alternative to '@WithSigil' if you prefer HOFs.\n *\n * @typeParam S - Constructor type (should be an instance of sigil class).\n * @param Class - The constructor (class) to enhance.\n * @param label - Sigil label string to assign to the decorated class (e.g. `@scope/pkg.ClassName`).\n * @param opts - Options object to override any global options if needed.\n * @returns The same constructor value, with runtime metadata ensured.\n */\nexport function withSigil<S extends Function>(Class: S, label: string, opts?: SigilOptions): S {\n if (!isSigilCtor(Class))\n throw new Error(\n `[Sigil Error] 'withSigil' HOF accept only Sigil classes but used on class '${Class.name}'`\n );\n if (hasOwnSigil(Class))\n throw new Error(\n `[Sigil Error] Class '${Class.name}' with label '${Class.SigilLabel}' is already sigilified`\n );\n\n handleSigil(Class, label, opts);\n return Class;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/options.ts","../src/symbols.ts","../src/helpers.ts","../src/mixin.ts","../src/classes.ts","../src/decorator.ts","../src/hof.ts"],"names":["a"],"mappings":";;;;EAqCO,IAAM,OAAA,GAAkC;EAAA,EAC7C,eAAA,EAAiB,IAAA;EAAA,EACjB,cAAA,EAAgB;EAClB,CAAA;AAYO,MAAM,kBAAA,GAAqB,CAAC,IAAA,KAA6B;EAC9D,EAAA,IAAI,oBAAoB,IAAA,EAAM;EAC5B,IAAA,IAAI,OAAO,KAAK,cAAA,KAAmB,SAAA;EACjC,MAAA,MAAM,IAAI,MAAM,qDAAqD,CAAA;EACvE,IAAA,OAAA,CAAQ,iBAAiB,IAAA,CAAK,cAAA;EAAA,EAChC;EAEA,EAAA,IAAI,qBAAqB,IAAA,EAAM;EAC7B,IAAA,MAAM,MAAM,IAAA,CAAK,eAAA;EACjB,IAAA,IAAI,QAAQ,IAAA,IAAQ,OAAO,GAAA,KAAQ,UAAA,IAAc,EAAE,GAAA,YAAe,MAAA,CAAA;EAChE,MAAA,MAAM,IAAI,MAAM,uEAAuE,CAAA;EACzF,IAAA,OAAA,CAAQ,kBAAkB,GAAA,IAAA,IAAA,GAAA,GAAA,GAAO,IAAA;EAAA,EACnC;EACF;AAaO,MAAM,uBAAA,GAA0B;AAGhC,MAAM,mBAAA,GAAsB;;;EC3E5B,IAAM,SAAA,mBAAY,MAAA,CAAO,GAAA,CAAI,wBAAwB,CAAA;EAUrD,IAAM,SAAA,mBAAY,MAAA,CAAO,GAAA,CAAI,wBAAwB,CAAA;EAUrD,IAAM,mBAAA,mBAAsB,MAAA,CAAO,GAAA,CAAI,kCAAkC,CAAA;EAUzE,IAAM,WAAA,mBAAc,MAAA,CAAO,GAAA,CAAI,0BAA0B,CAAA;;;EC/BhE,IAAM,iBAAA,GAAoB,aAAA;EAO1B,IAAM,YAAA,uBAAmB,OAAA,EAAkB;EAGpC,SAAS,WAAA,CAAY,IAAA,EAAgB,KAAA,EAAgB,IAAA,EAAqB;EAE/E,EAAA,IAAI,YAAA,CAAa,GAAA,CAAI,IAAI,CAAA,EAAG;EAG5B,EAAA,WAAA,CAAY,IAAA,EAAM,OAAO,IAAI,CAAA;EAG7B,EAAA,eAAA,CAAgB,MAAM,IAAI,CAAA;EAG1B,EAAA,QAAA,CAAS,IAAA,EAAM,KAAA,IAAA,IAAA,GAAA,KAAA,GAAS,mBAAA,CAAoB,IAAI,CAAC,CAAA;EACnD;EAMA,SAAS,eAAA,CAAgB,MAAgB,IAAA,EAAmD;EAjC5F,EAAA,IAAA,EAAA;EAmCE,EAAA,MAAM,cAAA,GAAA,CAAiB,EAAA,GAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,cAAA,KAAN,IAAA,GAAA,EAAA,GAAwB,OAAA,CAAQ,cAAA;EAGvD,EAAA,MAAM,YAAwB,EAAC;EAC/B,EAAA,IAAI,CAAA,GAAI,MAAA,CAAO,cAAA,CAAe,IAAI,CAAA;EAClC,EAAA,OAAO,KAAK,OAAO,CAAA,KAAM,cAAc,CAAA,CAAE,SAAA,CAAU,SAAS,CAAA,EAAG;EAC7D,IAAA,SAAA,CAAU,QAAQ,CAAC,CAAA;EACnB,IAAA,CAAA,GAAI,MAAA,CAAO,eAAe,CAAC,CAAA;EAAA,EAC7B;EAGA,EAAA,MAAM,UAAA,uBAAiB,GAAA,EAAoB;EAG3C,EAAA,KAAA,MAAWA,MAAK,SAAA,EAAW;EAEzB,IAAA,MAAM,CAAA,GAAIA,EAAAA,CAAE,SAAA,CAAU,SAAS,CAAA;EAE/B,IAAA,IAAI,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,EAAG;EACrB,MAAA,IAAI,CAAC,cAAA;EACH,QAAA,MAAM,IAAI,KAAA;EAAA,UACR,CAAA,qBAAA,EAAwBA,GAAE,IAAI,CAAA,8FAAA;EAAA,SAChC;EACF,MAAA,QAAA,CAASA,EAAAA,EAAG,mBAAA,CAAoBA,EAAC,CAAC,CAAA;EAAA,IACpC;EAEA,IAAA,UAAA,CAAW,GAAA,CAAI,OAAA,CAAQA,EAAC,CAAA,EAAIA,GAAE,IAAI,CAAA;EAAA,EACpC;EACF;EAEA,SAAS,QAAA,CAAS,MAAgB,KAAA,EAAe;EAjEjD,EAAA,IAAA,EAAA;EAkEE,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA;EAC5B,EAAA,MAAA,CAAO,cAAA,CAAe,IAAA,CAAK,SAAA,EAAW,SAAA,EAAW;EAAA,IAC/C,KAAA,EAAO,GAAA;EAAA,IACP,YAAA,EAAc,KAAA;EAAA,IACd,UAAA,EAAY,KAAA;EAAA,IACZ,QAAA,EAAU;EAAA,GACX,CAAA;EACD,EAAA,MAAA,CAAO,cAAA,CAAe,IAAA,CAAK,SAAA,EAAW,GAAA,EAAK;EAAA,IACzC,KAAA,EAAO,IAAA;EAAA,IACP,YAAA,EAAc,KAAA;EAAA,IACd,UAAA,EAAY,KAAA;EAAA,IACZ,QAAA,EAAU;EAAA,GACX,CAAA;EACD,EAAA,MAAA,CAAO,cAAA,CAAe,IAAA,CAAK,SAAA,EAAW,SAAA,EAAW;EAAA,IAC/C,KAAA,EAAO,KAAA;EAAA,IACP,YAAA,EAAc,KAAA;EAAA,IACd,UAAA,EAAY,KAAA;EAAA,IACZ,QAAA,EAAU;EAAA,GACX,CAAA;EACD,EAAA,IAAI,CAAC,KAAA,CAAM,UAAA,CAAW,iBAAiB,CAAA;EACrC,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,CAAK,SAAA,EAAW,mBAAA,EAAqB;EAAA,MACzD,KAAA,EAAO,KAAA;EAAA,MACP,YAAA,EAAc,KAAA;EAAA,MACd,UAAA,EAAY,KAAA;EAAA,MACZ,QAAA,EAAU;EAAA,KACX,CAAA;EACH,EAAA,MAAA,CAAO,cAAA,CAAe,IAAA,CAAK,SAAA,EAAW,WAAA,EAAa;EAAA,IACjD,KAAA,kBAAO,IAAI,GAAA,CAAI,CAAC,OAAA,EAAS,GAAA,CAAI,EAAA,GAAA,SAAA,CAAU,IAAI,CAAA,KAAd,IAAA,GAAA,EAAA,GAAmB,EAAC,EAAI,KAAK,CAAC,CAAA;EAAA,IAC3D,YAAA,EAAc,KAAA;EAAA,IACd,UAAA,EAAY,KAAA;EAAA,IACZ,QAAA,EAAU;EAAA,GACX,CAAA;EAED,EAAA,MAAM,QAAA,mBAAW,MAAA,CAAO,GAAA,CAAI,OAAO,CAAA;EACnC,EAAA,IAAI,IAAA,CAAK,SAAA,CAAU,QAAQ,CAAA,KAAM,IAAA;EAC/B,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,CAAK,SAAA,EAAW,QAAA,EAAU;EAAA,MAC9C,KAAA,EAAO,IAAA;EAAA,MACP,YAAA,EAAc,KAAA;EAAA,MACd,UAAA,EAAY,KAAA;EAAA,MACZ,QAAA,EAAU;EAAA,KACX,CAAA;EAEH,EAAA,gBAAA,EAAiB,CAAE,IAAI,KAAK,CAAA;EAC5B,EAAA,YAAA,CAAa,IAAI,IAAI,CAAA;EACvB;EAYO,SAAS,YAAY,IAAA,EAA+B;EACzD,EAAA,OAAO,OAAO,IAAA,KAAS,UAAA,IAAc,IAAA,CAAK,SAAA,IAAa,aAAa,IAAA,CAAK,SAAA;EAC3E;EASO,SAAS,gBAAgB,IAAA,EAAuC;EACrE,EAAA,OAAO,CAAC,CAAC,IAAA,IAAQ,OAAO,IAAA,KAAS,YAAY,SAAA,IAAa,IAAA;EAC5D;EAEO,SAAS,YAAY,IAAA,EAAgC;EAC1D,EAAA,OAAO,OAAO,IAAA,KAAS,UAAA,IAAc,OAAO,MAAA,CAAO,IAAA,CAAK,WAAW,SAAS,CAAA;EAC9E;EAEA,SAAS,QAAQ,IAAA,EAAoC;EACnD,EAAA,OAAO,IAAA,CAAK,UAAU,SAAS,CAAA;EACjC;EAEA,SAAS,UAAU,IAAA,EAAyC;EAC1D,EAAA,OAAO,IAAA,CAAK,UAAU,WAAW,CAAA;EACnC;EAQO,SAAS,cAAA,CAAe,cAAuB,KAAA,EAAiB;EACrE,EAAA,MAAM,MAAA,GAAS,gBAAA,EAAiB,CAAE,MAAA,EAAO;EACzC,EAAA,IAAI,aAAa,OAAO,MAAA;EACxB,EAAA,OAAO,MAAA,CAAO,OAAO,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,UAAA,CAAW,iBAAiB,CAAC,CAAA;EAC9D;EAeA,SAAS,gBAAA,GAAkC;EACzC,EAAA,IAAI,mBAAA,IAAuB,UAAA,EAAY,OAAQ,UAAA,CAAmB,iBAAA;EAElE,EAAA,MAAM,QAAA,uBAAe,GAAA,EAAY;EACjC,EAAA,IAAI,KAAA,GAAQ,CAAA;EAEZ,EAAA,MAAM,aAAA,GAA+B;EAAA,IACnC,GAAA,EAAK,CAAC,KAAA,KAAkB,QAAA,CAAS,IAAI,KAAK,CAAA;EAAA,IAC1C,GAAA,EAAK,CAAC,KAAA,KAAkB,QAAA,CAAS,IAAI,KAAK,CAAA;EAAA,IAC1C,MAAA,EAAQ,MAAM,CAAC,GAAG,QAAQ,CAAA;EAAA,IAC1B,GAAA,EAAK,MAAM,EAAE;EAAA,GACf;EAEA,EAAA,MAAA,CAAO,OAAO,aAAa,CAAA;EAE3B,EAAA,MAAA,CAAO,cAAA,CAAe,YAAY,mBAAA,EAAqB;EAAA,IACrD,KAAA,EAAO,aAAA;EAAA,IACP,QAAA,EAAU,KAAA;EAAA,IACV,YAAA,EAAc,KAAA;EAAA,IACd,UAAA,EAAY;EAAA,GACb,CAAA;EAED,EAAA,OAAO,aAAA;EACT;EAGA,SAAS,WAAA,CAA8B,IAAA,EAAgB,KAAA,EAAW,IAAA,EAA2B;EAxM7F,EAAA,IAAA,EAAA,EAAA,EAAA;EA0ME,EAAA,MAAM,eAAA,GAAA,CAAkB,EAAA,GAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,eAAA,KAAN,IAAA,GAAA,EAAA,GAAyB,OAAA,CAAQ,eAAA;EACzD,EAAA,MAAM,cAAA,GAAA,CAAiB,EAAA,GAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,cAAA,KAAN,IAAA,GAAA,EAAA,GAAwB,OAAA,CAAQ,cAAA;EAEvD,EAAA,IAAI,CAAC,KAAA,EAAO;EACV,IAAA,IAAI,CAAC,cAAA;EACH,MAAA,MAAM,IAAI,KAAA;EAAA,QACR,CAAA,qBAAA,EAAwB,6BAAM,IAAI,CAAA,8FAAA;EAAA,OACpC;EACF,IAAA;EAAA,EACF;EAEA,EAAA,IAAI,KAAA,CAAM,WAAW,iBAAiB,CAAA;EACpC,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,CAAA,EAAI,iBAAiB,CAAA,qCAAA,CAAuC,CAAA;EAE9E,EAAA,IAAI,gBAAA,EAAiB,CAAE,GAAA,CAAI,KAAK,CAAA;EAC9B,IAAA,MAAM,IAAI,KAAA;EAAA,MACR,CAAA,4BAAA,EAA+B,KAAK,CAAA,YAAA,EAAe,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,IAAI,CAAA,0CAAA;EAAA,KAC/D;EAEF,EAAA,IAAI,eAAA,EAAiB;EACnB,IAAA,IAAI,KAAA;EACJ,IAAA,IAAI,eAAA,YAA2B,MAAA,EAAQ,KAAA,GAAQ,eAAA,CAAgB,KAAK,KAAK,CAAA;EAAA,SACpE,KAAA,GAAQ,gBAAgB,KAAK,CAAA;EAElC,IAAA,IAAI,CAAC,KAAA;EACH,MAAA,MAAM,IAAI,KAAA;EAAA,QACR,sCAAsC,KAAK,CAAA,qEAAA;EAAA,OAC7C;EAAA,EACJ;EACF;EAGA,SAAS,oBAAoB,IAAA,EAAwB;EACnD,EAAA,OAAO,CAAA,EAAG,iBAAiB,CAAA,CAAA,EAAI,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,IAAI,CAAA,CAAA,EAAI,gBAAA,GAAmB,GAAA,EAAK,IAAI,IAAA,CAAK,MAAA,GAAS,QAAA,CAAS,EAAE,EAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,CAAA;EAClH;;;ECtNO,SAAS,QAAA,CACd,IAAA,EACA,KAAA,EACA,IAAA,EACA;EACA,EAAA,IAAI,YAAY,IAAI,CAAA;EAClB,IAAA,MAAM,IAAI,KAAA;EAAA,MACR,CAAA,qBAAA,EAAwB,IAAA,CAAK,IAAI,CAAA,cAAA,EAAiB,KAAK,UAAU,CAAA,uBAAA;EAAA,KACnE;EAAA,EAEF,MAAM,mBAAmB,IAAA,CAA+B;EAAA;EAAA;EAAA;EAAA,IAItD,WAAW,UAAA,GAAgB;EACzB,MAAA,WAAA,CAAY,IAAI,CAAA;EAChB,MAAA,OAAQ,IAAA,CAAa,UAAU,SAAS,CAAA;EAAA,IAC1C;EAAA;EAAA;EAAA;EAAA,IAKA,WAAW,mBAAA,GAAyB;EAClC,MAAA,WAAA,CAAY,IAAI,CAAA;EAChB,MAAA,OAAQ,IAAA,CAAa,UAAU,mBAAmB,CAAA;EAAA,IACpD;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA,IASA,WAAW,iBAAA,GAAuC;EAChD,MAAA,WAAA,CAAY,IAAI,CAAA;EAChB,MAAA,OAAO,CAAC,GAAI,IAAA,CAAa,SAAA,CAAU,WAAW,CAAC,CAAA;EAAA,IACjD;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA,IAQA,WAAW,aAAA,GAAuC;EAChD,MAAA,WAAA,CAAY,IAAI,CAAA;EAChB,MAAA,OAAQ,IAAA,CAAa,UAAU,WAAW,CAAA;EAAA,IAC5C;EAAA,IAaA,eAAe,IAAA,EAAa;EAC1B,MAAA,KAAA,CAAM,GAAG,IAAI,CAAA;EACb,MAAA,MAAM,IAAA,GAAO,GAAA,CAAA,MAAA;EACb,MAAA,WAAA,CAAY,IAAI,CAAA;EAAA,IAClB;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA,IAcA,OAAO,SAA0C,KAAA,EAA0C;EACzF,MAAA,WAAA,CAAY,IAAW,CAAA;EACvB,MAAA,IAAI,KAAA,IAAS,IAAA,IAAQ,OAAO,KAAA,KAAU,UAAU,OAAO,KAAA;EACvD,MAAA,OAAQ,KAAA,CAAe,IAAA,CAAa,SAAA,CAAU,SAAS,CAAC,CAAA,KAAM,IAAA;EAAA,IAChE;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA,IAWA,OAAO,YAA6C,KAAA,EAA0C;EApHlG,MAAA,IAAA,EAAA,EAAA,EAAA;EAqHM,MAAA,WAAA,CAAY,IAAW,CAAA;EACvB,MAAA,IAAI,KAAA,IAAS,IAAA,IAAQ,OAAO,KAAA,KAAU,UAAU,OAAO,KAAA;EACvD,MAAA,IAAA,CAAA,CAAK,EAAA,GAAA,IAAA,CAAa,cAAb,IAAA,GAAA,MAAA,GAAA,EAAA,CAAyB,WAAA,CAAA,CAAa,YAAU,EAAA,GAAA,KAAA,CAAc,WAAW,MAAzB,IAAA,GAAA,MAAA,GAAA,EAAA,CAA4B,IAAA,CAAA;EAC/E,QAAA,OAAO,KAAA;EACT,MAAA,OAAQ,KAAA,CAAe,IAAA,CAAa,SAAA,CAAU,SAAS,CAAC,CAAA,KAAM,IAAA;EAAA,IAChE;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA,IAcA,SAA4C,KAAA,EAA4B;EACtE,MAAA,IAAI,KAAA,IAAS,IAAA,IAAQ,OAAO,KAAA,KAAU,UAAU,OAAO,KAAA;EACvD,MAAA,OAAQ,KAAA,CAAe,IAAA,CAAa,SAAS,CAAC,CAAA,KAAM,IAAA;EAAA,IACtD;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA,IAWA,YAA+C,KAAA,EAA4B;EAtJ/E,MAAA,IAAA,EAAA;EAuJM,MAAA,IAAI,KAAA,IAAS,IAAA,IAAQ,OAAO,KAAA,KAAU,UAAU,OAAO,KAAA;EACvD,MAAA,IAAK,IAAA,CAAa,WAAW,CAAA,CAAE,IAAA,MAAA,CAAU,WAAc,WAAW,CAAA,KAAzB,IAAA,GAAA,MAAA,GAAA,EAAA,CAA4B,IAAA,CAAA,EAAM,OAAO,KAAA;EAClF,MAAA,OAAQ,KAAA,CAAe,IAAA,CAAa,SAAS,CAAC,CAAA,KAAM,IAAA;EAAA,IACtD;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA,IAOA,aAAA,GAAwB;EACtB,MAAA,OAAQ,KAAa,SAAS,CAAA;EAAA,IAChC;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA,IAOA,sBAAA,GAAiC;EAC/B,MAAA,OAAQ,KAAa,mBAAmB,CAAA;EAAA,IAC1C;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA,IAOA,oBAAA,GAA0C;EACxC,MAAA,OAAO,CAAC,GAAI,IAAA,CAAa,WAAW,CAAC,CAAA;EAAA,IACvC;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA,IAOA,gBAAA,GAA0C;EACxC,MAAA,OAAQ,KAAa,WAAW,CAAA;EAAA,IAClC;EAAA;EAGF,EAAA,WAAA,CAAY,UAAA,EAAY,OAAO,IAAI,CAAA;EACnC,EAAA,OAAO,UAAA;EACT;EAWO,SAAS,gBAAA,CACd,IAAA,EACA,KAAA,EACA,IAAA,EACA;EACA,EAAA,IAAI,YAAY,IAAI,CAAA;EAClB,IAAA,MAAM,IAAI,KAAA;EAAA,MACR,CAAA,qBAAA,EAAwB,IAAA,CAAK,IAAI,CAAA,cAAA,EAAiB,KAAK,UAAU,CAAA,uBAAA;EAAA,KACnE;EAAA,EAEF,MAAe,mBAAmB,IAAA,CAA+B;EAAA;EAAA;EAAA;EAAA,IAI/D,WAAW,UAAA,GAAgB;EACzB,MAAA,WAAA,CAAY,IAAI,CAAA;EAChB,MAAA,OAAQ,IAAA,CAAa,UAAU,SAAS,CAAA;EAAA,IAC1C;EAAA;EAAA;EAAA;EAAA,IAKA,WAAW,mBAAA,GAAyB;EAClC,MAAA,WAAA,CAAY,IAAI,CAAA;EAChB,MAAA,OAAQ,IAAA,CAAa,UAAU,mBAAmB,CAAA;EAAA,IACpD;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA,IASA,WAAW,iBAAA,GAAuC;EAChD,MAAA,WAAA,CAAY,IAAI,CAAA;EAChB,MAAA,OAAO,CAAC,GAAI,IAAA,CAAa,SAAA,CAAU,WAAW,CAAC,CAAA;EAAA,IACjD;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA,IAQA,WAAW,aAAA,GAAuC;EAChD,MAAA,WAAA,CAAY,IAAI,CAAA;EAChB,MAAA,OAAQ,IAAA,CAAa,UAAU,WAAW,CAAA;EAAA,IAC5C;EAAA,IAaA,eAAe,IAAA,EAAa;EAC1B,MAAA,KAAA,CAAM,GAAG,IAAI,CAAA;EACb,MAAA,MAAM,IAAA,GAAO,GAAA,CAAA,MAAA;EACb,MAAA,WAAA,CAAY,IAAI,CAAA;EAAA,IAClB;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA,IAcA,OAAO,SAAqB,KAAA,EAA0C;EACpE,MAAA,WAAA,CAAY,IAAW,CAAA;EACvB,MAAA,IAAI,KAAA,IAAS,IAAA,IAAQ,OAAO,KAAA,KAAU,UAAU,OAAO,KAAA;EACvD,MAAA,OAAQ,KAAA,CAAe,IAAA,CAAa,SAAA,CAAU,SAAS,CAAC,CAAA,KAAM,IAAA;EAAA,IAChE;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA,IAWA,OAAO,YAAwB,KAAA,EAA0C;EA5S7E,MAAA,IAAA,EAAA,EAAA,EAAA;EA6SM,MAAA,WAAA,CAAY,IAAW,CAAA;EACvB,MAAA,IAAI,KAAA,IAAS,IAAA,IAAQ,OAAO,KAAA,KAAU,UAAU,OAAO,KAAA;EACvD,MAAA,IAAA,CAAA,CAAK,EAAA,GAAA,IAAA,CAAa,cAAb,IAAA,GAAA,MAAA,GAAA,EAAA,CAAyB,WAAA,CAAA,CAAa,YAAU,EAAA,GAAA,KAAA,CAAc,WAAW,MAAzB,IAAA,GAAA,MAAA,GAAA,EAAA,CAA4B,IAAA,CAAA;EAC/E,QAAA,OAAO,KAAA;EACT,MAAA,OAAQ,KAAA,CAAe,IAAA,CAAa,SAAA,CAAU,SAAS,CAAC,CAAA,KAAM,IAAA;EAAA,IAChE;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA,IAcA,SAAqB,KAAA,EAA4B;EAC/C,MAAA,IAAI,KAAA,IAAS,IAAA,IAAQ,OAAO,KAAA,KAAU,UAAU,OAAO,KAAA;EACvD,MAAA,OAAQ,KAAA,CAAe,IAAA,CAAa,SAAS,CAAC,CAAA,KAAM,IAAA;EAAA,IACtD;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA,IAWA,YAAwB,KAAA,EAA4B;EA9UxD,MAAA,IAAA,EAAA;EA+UM,MAAA,IAAI,KAAA,IAAS,IAAA,IAAQ,OAAO,KAAA,KAAU,UAAU,OAAO,KAAA;EACvD,MAAA,IAAK,IAAA,CAAa,WAAW,CAAA,CAAE,IAAA,MAAA,CAAU,WAAc,WAAW,CAAA,KAAzB,IAAA,GAAA,MAAA,GAAA,EAAA,CAA4B,IAAA,CAAA,EAAM,OAAO,KAAA;EAClF,MAAA,OAAQ,KAAA,CAAe,IAAA,CAAa,SAAS,CAAC,CAAA,KAAM,IAAA;EAAA,IACtD;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA,IAOA,aAAA,GAAwB;EACtB,MAAA,OAAQ,KAAa,SAAS,CAAA;EAAA,IAChC;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA,IAOA,sBAAA,GAAiC;EAC/B,MAAA,OAAQ,KAAa,mBAAmB,CAAA;EAAA,IAC1C;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA,IAOA,oBAAA,GAA0C;EACxC,MAAA,OAAO,CAAC,GAAI,IAAA,CAAa,WAAW,CAAC,CAAA;EAAA,IACvC;EAAA;EAAA;EAAA;EAAA;EAAA;EAAA,IAOA,gBAAA,GAA0C;EACxC,MAAA,OAAQ,KAAa,WAAW,CAAA;EAAA,IAClC;EAAA;EAGF,EAAA,WAAA,CAAY,UAAA,EAAY,OAAO,IAAI,CAAA;EACnC,EAAA,OAAO,UAAA;EACT;;;AClXO,MAAM,KAAA,GAAQ,SAAS,MAAM;EAAC,CAAA,EAAG,OAAO;AAUxC,MAAM,UAAA,GAAa,QAAA,CAAS,KAAA,EAAO,YAAY;;;ECT/C,SAAS,SAAA,CAAU,OAAe,IAAA,EAAqB;EAC5D,EAAA,OAAO,SAAU,OAAiB,OAAA,EAAc;EAC9C,IAAA,IAAI,CAAC,YAAY,KAAK,CAAA;EACpB,MAAA,MAAM,IAAI,KAAA;EAAA,QACR,CAAA,iFAAA,EAAoF,MAAM,IAAI,CAAA,CAAA;EAAA,OAChG;EACF,IAAA,IAAI,YAAY,KAAK,CAAA;EACnB,MAAA,MAAM,IAAI,KAAA;EAAA,QACR,CAAA,qBAAA,EAAwB,KAAA,CAAM,IAAI,CAAA,cAAA,EAAiB,MAAM,UAAU,CAAA,uBAAA;EAAA,OACrE;EAEF,IAAA,WAAA,CAAY,KAAA,EAAO,OAAO,IAAI,CAAA;EAAA,EAChC,CAAA;EACF;;;ECVO,SAAS,SAAA,CAA8B,KAAA,EAAU,KAAA,EAAe,IAAA,EAAwB;EAC7F,EAAA,IAAI,CAAC,YAAY,KAAK,CAAA;EACpB,IAAA,MAAM,IAAI,KAAA;EAAA,MACR,CAAA,2EAAA,EAA8E,MAAM,IAAI,CAAA,CAAA;EAAA,KAC1F;EACF,EAAA,IAAI,YAAY,KAAK,CAAA;EACnB,IAAA,MAAM,IAAI,KAAA;EAAA,MACR,CAAA,qBAAA,EAAwB,KAAA,CAAM,IAAI,CAAA,cAAA,EAAiB,MAAM,UAAU,CAAA,uBAAA;EAAA,KACrE;EAEF,EAAA,WAAA,CAAY,KAAA,EAAO,OAAO,IAAI,CAAA;EAC9B,EAAA,OAAO,KAAA;EACT","file":"index.global.js","sourcesContent":["/** -----------------------------------------\n * Types\n * ----------------------------------------- */\n\n/**\n * Configuration options for the Sigil library.\n *\n * These options control runtime validation, inheritance checks, label autofill behavior.\n */\nexport interface SigilOptions {\n /**\n * Validation rule applied to sigil labels before registration.\n *\n * - A function receives the label and must return `true` if valid.\n * - A `RegExp` must match the label.\n * - `null` disables validation entirely.\n *\n * Defaults to `null`.\n */\n labelValidation?: ((label: string) => boolean) | RegExp | null;\n\n /**\n * When enabled, non-decorated subclasses that would otherwise inherit an ancestor's label\n * will be assigned an autogenerated random label (so that explicit labels stay unique).\n */\n autofillLabels?: boolean;\n}\n\n/** -----------------------------------------\n * Internal options object\n * ----------------------------------------- */\n\n/**\n * Defined SigilOptions used in the library.\n *\n * @internal\n */\nexport const OPTIONS: Required<SigilOptions> = {\n labelValidation: null,\n autofillLabels: true,\n};\n\n/** -----------------------------------------\n * Update options\n * ----------------------------------------- */\n\n/**\n * Update runtime options for the Sigil library.\n * Call this early during application startup if you want non-default behavior.\n *\n * @param opts - Partial options to merge into the global `OPTIONS` object.\n */\nexport const updateSigilOptions = (opts: SigilOptions): void => {\n if ('autofillLabels' in opts) {\n if (typeof opts.autofillLabels !== 'boolean')\n throw new Error(\"'updateSigilOptions.autofillLabels' must be boolean\");\n OPTIONS.autofillLabels = opts.autofillLabels!;\n }\n\n if ('labelValidation' in opts) {\n const val = opts.labelValidation;\n if (val !== null && typeof val !== 'function' && !(val instanceof RegExp))\n throw new Error(\"'updateSigilOptions.labelValidation' must be null, function or RegExp\");\n OPTIONS.labelValidation = val ?? null;\n }\n};\n\n/** -----------------------------------------\n * Label validation\n * ----------------------------------------- */\n\n/**\n * Label validation regex. Labels must follow the pattern\n * `@scope/package.ClassName` where `ClassName` begins with an uppercase\n * letter. This avoids collisions across packages and helps debugging.\n *\n * It's advised to use this regex in 'SigilOptions.labelValidation'.\n */\nexport const RECOMMENDED_LABEL_REGEX = /^@[\\w-]+(?:\\/[\\w-]+)*\\.[A-Z][A-Za-z0-9]*$/;\n\n/** @deprecated - Use 'RECOMMENDED_LABEL_REGEX' instead, will be removed in v4 */\nexport const DEFAULT_LABEL_REGEX = RECOMMENDED_LABEL_REGEX;\n","/**\n * Symbol to uniquely identify sigil classes.\n *\n * @internal\n * @constant {symbol}\n */\nexport const __SIGIL__ = Symbol.for('@vicin/sigil.__SIGIL__');\n\n/**\n * Symbol used to store the identity label for a sigil constructor.\n *\n * Stored on the constructor as a non-enumerable property.\n *\n * @internal\n * @constant {symbol}\n */\nexport const __LABEL__ = Symbol.for('@vicin/sigil.__LABEL__');\n\n/**\n * Symbol used to store the human-readable label for a sigil constructor, it can be inherited if no label is deined.\n *\n * Stored on the constructor as a non-enumerable property.\n *\n * @internal\n * @constant {symbol}\n */\nexport const __EFFECTIVE_LABEL__ = Symbol.for('@vicin/sigil.__EFFECTIVE_LABEL__');\n\n/**\n * Symbol used to store the label lineage set for a sigil constructor.\n *\n * This is a set of labels (strings) representing the inheritance path of labels.\n *\n * @internal\n * @constant {symbol}\n */\nexport const __LINEAGE__ = Symbol.for('@vicin/sigil.__LINEAGE__');\n","import { OPTIONS, type SigilOptions } from './options';\nimport { __LABEL__, __EFFECTIVE_LABEL__, __SIGIL__, __LINEAGE__ } from './symbols';\nimport type { ISigil, ISigilInstance } from './types';\n\n/** Prefex use by the lib to identify auto-generated classes */\nconst AUTO_LABEL_PREFEX = '@Sigil-auto';\n\n/** -----------------------------------------\n * Main helper\n * ----------------------------------------- */\n\n/** Weak set to ensure that every ctor is handled only once. */\nconst handledCtors = new WeakSet<Function>();\n\n/** Main function to handle 'Sigil' and attach its metadata to the class */\nexport function handleSigil(ctor: Function, label?: string, opts?: SigilOptions) {\n // fast return if already defined\n if (handledCtors.has(ctor)) return;\n\n // Verify label\n verifyLabel(ctor, label, opts);\n\n // check ancestors to ensure that every label in sigil chain in unique\n handleAncestors(ctor, opts);\n\n // handle current class\n sigilify(ctor, label ?? generateRandomLabel(ctor));\n}\n\n/** -----------------------------------------\n * Generic helpers\n * ----------------------------------------- */\n\nfunction handleAncestors(ctor: Function, opts?: Pick<SigilOptions, 'autofillLabels'>): void {\n // handle options\n const autofillLabels = opts?.autofillLabels ?? OPTIONS.autofillLabels;\n\n // get line age of this class (ancestors only)\n const ancestors: Function[] = [];\n let a = Object.getPrototypeOf(ctor);\n while (a && typeof a === 'function' && a.prototype[__SIGIL__]) {\n ancestors.unshift(a);\n a = Object.getPrototypeOf(a);\n }\n\n /** Map<label, className> to record the owner of each label. */\n const labelOwner = new Map<string, string>();\n\n // loop lineage to insure that each label is unique in ancestors\n for (const a of ancestors) {\n // get label\n const l = a.prototype[__LABEL__] as string;\n // if duplicate (no label is passed for this class) update class with new label\n if (labelOwner.has(l)) {\n if (!autofillLabels)\n throw new Error(\n `[Sigil Error] Class '${a.name}' is not sigilified, Make sure to sigilify all Sigil classes or set 'autofillLabels' to 'true'`\n );\n sigilify(a, generateRandomLabel(a));\n }\n // register current label with class name\n labelOwner.set(labelOf(a)!, a.name);\n }\n}\n\nfunction sigilify(ctor: Function, label: string) {\n const sym = Symbol.for(label);\n Object.defineProperty(ctor.prototype, __SIGIL__, {\n value: sym,\n configurable: false,\n enumerable: false,\n writable: false,\n });\n Object.defineProperty(ctor.prototype, sym, {\n value: true,\n configurable: false,\n enumerable: false,\n writable: false,\n });\n Object.defineProperty(ctor.prototype, __LABEL__, {\n value: label,\n configurable: false,\n enumerable: false,\n writable: false,\n });\n if (!label.startsWith(AUTO_LABEL_PREFEX))\n Object.defineProperty(ctor.prototype, __EFFECTIVE_LABEL__, {\n value: label,\n configurable: false,\n enumerable: false,\n writable: false,\n });\n Object.defineProperty(ctor.prototype, __LINEAGE__, {\n value: new Set(['Sigil', ...(lineageOf(ctor) ?? []), label]),\n configurable: false,\n enumerable: false,\n writable: false,\n });\n // add { Symbol.for('Sigil'): true } if not present\n const sigilSym = Symbol.for('Sigil');\n if (ctor.prototype[sigilSym] !== true)\n Object.defineProperty(ctor.prototype, sigilSym, {\n value: true,\n configurable: false,\n enumerable: false,\n writable: false,\n });\n // Add label to registered labels and mark as handled\n getLabelRegistry().add(label);\n handledCtors.add(ctor);\n}\n\n/** -----------------------------------------\n * Inspection helpers\n * ----------------------------------------- */\n\n/**\n * Runtime predicate that checks whether the provided value is a sigil constructor.\n *\n * @param ctor - Constructor to test.\n * @returns `true` if `value` is a sigil constructor, otherwise `false`.\n */\nexport function isSigilCtor(ctor: unknown): ctor is ISigil {\n return typeof ctor === 'function' && ctor.prototype && __SIGIL__ in ctor.prototype;\n}\n\n/**\n * Runtime predicate that checks whether the provided object is an instance\n * of a sigil class.\n *\n * @param inst - The instanca to test.\n * @returns `true` if `obj` is an instance produced by a sigil constructor.\n */\nexport function isSigilInstance(inst: unknown): inst is ISigilInstance {\n return !!inst && typeof inst === 'object' && __SIGIL__ in inst;\n}\n\nexport function hasOwnSigil(ctor: Function): ctor is ISigil {\n return typeof ctor === 'function' && Object.hasOwn(ctor.prototype, __SIGIL__);\n}\n\nfunction labelOf(ctor: Function): string | undefined {\n return ctor.prototype[__LABEL__];\n}\n\nfunction lineageOf(ctor: Function): Set<string> | undefined {\n return ctor.prototype[__LINEAGE__];\n}\n\n/**\n * Helper function to get labels registered by 'Sigil'\n *\n * @param includeAuto - Flag to include auto-generated labels as well, default is 'false'.\n * @returns Sigil labels registered\n */\nexport function getSigilLabels(includeAuto: boolean = false): string[] {\n const labels = getLabelRegistry().labels();\n if (includeAuto) return labels;\n return labels.filter((l) => !l.startsWith(AUTO_LABEL_PREFEX));\n}\n\n/** -----------------------------------------\n * Label helpers\n * ----------------------------------------- */\n\n/** Exposed methods of global label registry */\ninterface LabelRegistry {\n has: (label: string) => boolean;\n add: (label: string) => void;\n labels: () => string[];\n enc: () => number;\n}\n\n/** Internal helper to get (or init then get) global label registry */\nfunction getLabelRegistry(): LabelRegistry {\n if ('__labelRegistry__' in globalThis) return (globalThis as any).__labelRegistry__;\n\n const labelSet = new Set<string>();\n let count = 0;\n\n const labelRegistry: LabelRegistry = {\n has: (label: string) => labelSet.has(label),\n add: (label: string) => labelSet.add(label),\n labels: () => [...labelSet],\n enc: () => ++count,\n };\n\n Object.freeze(labelRegistry);\n\n Object.defineProperty(globalThis, '__labelRegistry__', {\n value: labelRegistry,\n writable: false,\n configurable: false,\n enumerable: false,\n });\n\n return labelRegistry;\n}\n\n/** Internal helper to validate passed label */\nfunction verifyLabel<L extends string>(ctor: Function, label?: L, opts?: SigilOptions): void {\n // handle option\n const labelValidation = opts?.labelValidation ?? OPTIONS.labelValidation;\n const autofillLabels = opts?.autofillLabels ?? OPTIONS.autofillLabels;\n\n if (!label) {\n if (!autofillLabels)\n throw new Error(\n `[Sigil Error] Class '${ctor?.name}' is not sigilified, Make sure to sigilify all Sigil classes or set 'autofillLabels' to 'true'`\n );\n return;\n }\n\n if (label.startsWith(AUTO_LABEL_PREFEX))\n throw new Error(`'${AUTO_LABEL_PREFEX}' is a prefex reserved by the library`);\n\n if (getLabelRegistry().has(label))\n throw new Error(\n `[Sigil Error] Passed label '${label}' to class '${ctor?.name}' is re-used, passed labels must be unique`\n );\n\n if (labelValidation) {\n let valid: boolean;\n if (labelValidation instanceof RegExp) valid = labelValidation.test(label);\n else valid = labelValidation(label);\n\n if (!valid)\n throw new Error(\n `[Sigil Error] Invalid Sigil label '${label}'. Make sure that supplied label matches validation regex or function`\n );\n }\n}\n\n/** Internal helper to generate random label */\nfunction generateRandomLabel(ctor: Function): string {\n return `${AUTO_LABEL_PREFEX}:${ctor?.name}:${getLabelRegistry().enc()}:${Math.random().toString(36).slice(2, 10)}`;\n}\n","import { handleSigil, hasOwnSigil } from './helpers';\nimport type { SigilOptions } from './options';\nimport { __LABEL__, __EFFECTIVE_LABEL__, __LINEAGE__, __SIGIL__ } from './symbols';\nimport type {\n Constructor,\n Prettify,\n ConstructorAbstract,\n ISigilInstance,\n GetPrototype,\n ISigilStatic,\n sigil,\n} from './types';\n\n/**\n * Mixin factory that augments an existing class with Sigil runtime metadata and helpers.\n *\n * @param Base - The base constructor to extend.\n * @param label - Identity label to attach to the resulting class (e.g. '@scope/pkg.ClassName').\n * @param opts - Options object to override any global options if needed.\n * @returns A new constructor that extends `Base` and includes Sigil statics/instance methods.\n * @throws Error if `Base` is already sigilified.\n */\nexport function Sigilify<B extends Constructor, L extends string>(\n Base: B,\n label: L,\n opts?: SigilOptions\n) {\n if (hasOwnSigil(Base))\n throw new Error(\n `[Sigil Error] Class '${Base.name}' with label '${Base.SigilLabel}' is already sigilified`\n );\n\n class Sigilified extends Base implements ISigilInstance {\n /**\n * Class-level identity label constant for this sigil constructor.\n */\n static get SigilLabel(): L {\n handleSigil(this);\n return (this as any).prototype[__LABEL__];\n }\n\n /**\n * Class-level human-readable label constant for this sigil constructor, last passed label in 'Sigil' chain by developer.\n */\n static get SigilEffectiveLabel(): L {\n handleSigil(this);\n return (this as any).prototype[__EFFECTIVE_LABEL__];\n }\n\n /**\n * Linearized sigil type label chain for the current constructor.\n *\n * Useful for debugging and performing strict lineage comparisons.\n *\n * @returns An array of labels representing parent → child type labels.\n */\n static get SigilLabelLineage(): readonly string[] {\n handleSigil(this);\n return [...(this as any).prototype[__LINEAGE__]];\n }\n\n /**\n * Sigil type label set for the current constructor.\n * Useful for debugging.\n *\n * @returns A Readonly Set of labels that represent the type lineage.\n */\n static get SigilLabelSet(): Readonly<Set<string>> {\n handleSigil(this);\n return (this as any).prototype[__LINEAGE__];\n }\n\n /**\n * Compile-time nominal brand that encodes the class sigil labels object.\n */\n declare readonly [sigil]: Prettify<\n {\n Sigil: true;\n } & {\n [K in L]: true;\n }\n >;\n\n constructor(...args: any[]) {\n super(...args);\n const ctor = new.target;\n handleSigil(ctor);\n }\n\n /**\n * Check whether `other` is (or inherits from) the instance represented by the\n * calling constructor.\n *\n * This replaces `instanceof` so that checks remain valid across bundles/realms\n * and when subclassing.\n *\n * @typeParam T - The specific sigil constructor (`this`).\n * @param this - The constructor performing the type check.\n * @param other - The object to test.\n * @returns A type guard asserting `other` is an instance of the constructor.\n */\n static isOfType<T extends ISigilStatic>(this: T, other: unknown): other is GetPrototype<T> {\n handleSigil(this as any);\n if (other == null || typeof other !== 'object') return false;\n return (other as any)[(this as any).prototype[__SIGIL__]] === true;\n }\n\n /**\n * Check whether `other` is exactly the same instance represented by the\n * calling constructor.\n *\n * @typeParam T - The specific sigil constructor (`this`).\n * @param this - The constructor performing the type check.\n * @param other - The object to test.\n * @returns A type guard asserting `other` is an instance of the constructor.\n */\n static isExactType<T extends ISigilStatic>(this: T, other: unknown): other is GetPrototype<T> {\n handleSigil(this as any);\n if (other == null || typeof other !== 'object') return false;\n if ((this as any).prototype?.[__LINEAGE__].size !== (other as any)[__LINEAGE__]?.size)\n return false;\n return (other as any)[(this as any).prototype[__SIGIL__]] === true;\n }\n\n /**\n * Check whether `other` is (or inherits from) the instance represented by the\n * calling constructor.\n *\n * This replaces `instanceof` so that checks remain valid across bundles/realms\n * and when subclassing.\n *\n * @typeParam T - The specific sigil constructor (`this`).\n * @param this - The constructor performing the type check.\n * @param other - The object to test.\n * @returns A type guard asserting `other` is an instance of the constructor.\n */\n isOfType<T extends ISigilInstance>(this: T, other: unknown): other is T {\n if (other == null || typeof other !== 'object') return false;\n return (other as any)[(this as any)[__SIGIL__]] === true;\n }\n\n /**\n * Check whether `other` is exactly the same instance represented by the\n * calling constructor.\n *\n * @typeParam T - The specific sigil constructor (`this`).\n * @param this - The constructor performing the type check.\n * @param other - The object to test.\n * @returns A type guard asserting `other` is an instance of the constructor.\n */\n isExactType<T extends ISigilInstance>(this: T, other: unknown): other is T {\n if (other == null || typeof other !== 'object') return false;\n if ((this as any)[__LINEAGE__].size !== (other as any)[__LINEAGE__]?.size) return false;\n return (other as any)[(this as any)[__SIGIL__]] === true;\n }\n\n /**\n * Returns the identity sigil label of this instance's constructor.\n *\n * @returns The label string if passed (e.g. '@scope/pkg.ClassName'), random label if not passed (e.g. '@Sigil-auto:ClassName:1:pnf11bgl').\n */\n getSigilLabel(): string {\n return (this as any)[__LABEL__];\n }\n\n /**\n * Returns the human-readable sigil label of this instance's constructor.\n *\n * @returns The last passed label string (e.g. '@scope/pkg.ClassName').\n */\n getSigilEffectiveLabel(): string {\n return (this as any)[__EFFECTIVE_LABEL__];\n }\n\n /**\n * Returns a copy of the sigil type label lineage for this instance's constructor.\n *\n * @returns readonly array of labels representing the type lineage.\n */\n getSigilLabelLineage(): readonly string[] {\n return [...(this as any)[__LINEAGE__]];\n }\n\n /**\n * Returns a copy of the sigil type label lineage set for this instance's constructor.\n *\n * @returns readonly array of labels representing the type lineage.\n */\n getSigilLabelSet(): Readonly<Set<string>> {\n return (this as any)[__LINEAGE__];\n }\n }\n\n handleSigil(Sigilified, label, opts);\n return Sigilified;\n}\n\n/**\n * Mixin factory that augments an existing class with Sigil runtime metadata and helpers. Accept and return 'abstract' class.\n *\n * @param Base - The base constructor to extend.\n * @param label - Identity label to attach to the resulting class (e.g. '@scope/pkg.ClassName').\n * @param opts - Options object to override any global options if needed.\n * @returns A new abstract constructor that extends `Base` and includes Sigil statics/instance methods.\n * @throws Error if `Base` is already sigilified.\n */\nexport function SigilifyAbstract<B extends ConstructorAbstract, L extends string>(\n Base: B,\n label: L,\n opts?: SigilOptions\n) {\n if (hasOwnSigil(Base))\n throw new Error(\n `[Sigil Error] Class '${Base.name}' with label '${Base.SigilLabel}' is already sigilified`\n );\n\n abstract class Sigilified extends Base implements ISigilInstance {\n /**\n * Class-level identity label constant for this sigil constructor.\n */\n static get SigilLabel(): L {\n handleSigil(this);\n return (this as any).prototype[__LABEL__];\n }\n\n /**\n * Class-level human-readable label constant for this sigil constructor, last passed label in 'Sigil' chain by developer.\n */\n static get SigilEffectiveLabel(): L {\n handleSigil(this);\n return (this as any).prototype[__EFFECTIVE_LABEL__];\n }\n\n /**\n * Linearized sigil type label chain for the current constructor.\n *\n * Useful for debugging and performing strict lineage comparisons.\n *\n * @returns An array of labels representing parent → child type labels.\n */\n static get SigilLabelLineage(): readonly string[] {\n handleSigil(this);\n return [...(this as any).prototype[__LINEAGE__]];\n }\n\n /**\n * Sigil type label set for the current constructor.\n * Useful for debugging.\n *\n * @returns A Readonly Set of labels that represent the type lineage.\n */\n static get SigilLabelSet(): Readonly<Set<string>> {\n handleSigil(this);\n return (this as any).prototype[__LINEAGE__];\n }\n\n /**\n * Compile-time nominal brand that encodes the class sigil labels object.\n */\n declare readonly [sigil]: Prettify<\n {\n Sigil: true;\n } & {\n [K in L]: true;\n }\n >;\n\n constructor(...args: any[]) {\n super(...args);\n const ctor = new.target;\n handleSigil(ctor);\n }\n\n /**\n * Check whether `other` is (or inherits from) the instance represented by the\n * calling constructor.\n *\n * This replaces `instanceof` so that checks remain valid across bundles/realms\n * and when subclassing.\n *\n * @typeParam T - The specific sigil constructor (`this`).\n * @param this - The constructor performing the type check.\n * @param other - The object to test.\n * @returns A type guard asserting `other` is an instance of the constructor.\n */\n static isOfType<T>(this: T, other: unknown): other is GetPrototype<T> {\n handleSigil(this as any);\n if (other == null || typeof other !== 'object') return false;\n return (other as any)[(this as any).prototype[__SIGIL__]] === true;\n }\n\n /**\n * Check whether `other` is exactly the same instance represented by the\n * calling constructor.\n *\n * @typeParam T - The specific sigil constructor (`this`).\n * @param this - The constructor performing the type check.\n * @param other - The object to test.\n * @returns A type guard asserting `other` is an instance of the constructor.\n */\n static isExactType<T>(this: T, other: unknown): other is GetPrototype<T> {\n handleSigil(this as any);\n if (other == null || typeof other !== 'object') return false;\n if ((this as any).prototype?.[__LINEAGE__].size !== (other as any)[__LINEAGE__]?.size)\n return false;\n return (other as any)[(this as any).prototype[__SIGIL__]] === true;\n }\n\n /**\n * Check whether `other` is (or inherits from) the instance represented by the\n * calling constructor.\n *\n * This replaces `instanceof` so that checks remain valid across bundles/realms\n * and when subclassing.\n *\n * @typeParam T - The specific sigil constructor (`this`).\n * @param this - The constructor performing the type check.\n * @param other - The object to test.\n * @returns A type guard asserting `other` is an instance of the constructor.\n */\n isOfType<T>(this: T, other: unknown): other is T {\n if (other == null || typeof other !== 'object') return false;\n return (other as any)[(this as any)[__SIGIL__]] === true;\n }\n\n /**\n * Check whether `other` is exactly the same instance represented by the\n * calling constructor.\n *\n * @typeParam T - The specific sigil constructor (`this`).\n * @param this - The constructor performing the type check.\n * @param other - The object to test.\n * @returns A type guard asserting `other` is an instance of the constructor.\n */\n isExactType<T>(this: T, other: unknown): other is T {\n if (other == null || typeof other !== 'object') return false;\n if ((this as any)[__LINEAGE__].size !== (other as any)[__LINEAGE__]?.size) return false;\n return (other as any)[(this as any)[__SIGIL__]] === true;\n }\n\n /**\n * Returns the identity sigil label of this instance's constructor.\n *\n * @returns The label string if passed (e.g. '@scope/pkg.ClassName'), random label if not passed (e.g. '@Sigil-auto:ClassName:1:pnf11bgl').\n */\n getSigilLabel(): string {\n return (this as any)[__LABEL__];\n }\n\n /**\n * Returns the human-readable sigil label of this instance's constructor.\n *\n * @returns The last passed label string (e.g. '@scope/pkg.ClassName').\n */\n getSigilEffectiveLabel(): string {\n return (this as any)[__EFFECTIVE_LABEL__];\n }\n\n /**\n * Returns a copy of the sigil type label lineage for this instance's constructor.\n *\n * @returns readonly array of labels representing the type lineage.\n */\n getSigilLabelLineage(): readonly string[] {\n return [...(this as any)[__LINEAGE__]];\n }\n\n /**\n * Returns a copy of the sigil type label lineage set for this instance's constructor.\n *\n * @returns readonly array of labels representing the type lineage.\n */\n getSigilLabelSet(): Readonly<Set<string>> {\n return (this as any)[__LINEAGE__];\n }\n }\n\n handleSigil(Sigilified, label, opts);\n return Sigilified;\n}\n","import { Sigilify } from './mixin';\nimport type { sigil } from './types';\n\n/**\n * A minimal root Sigil class used by the library as a base identity.\n *\n * This is produced by `Sigilify` and can serve as a basic sentinel/base\n * class for other sigil classes or for debugging/inspection.\n */\nexport const Sigil = Sigilify(class {}, 'Sigil');\nexport type Sigil = InstanceType<typeof Sigil>;\n\n/**\n * A sigil variant of the built-in `Error` constructor used by the library\n * to represent Sigil-specific errors.\n *\n * Use `SigilError` when you want an Error type that is identifiable via sigil\n * runtime checks (e.g. `SigilError.isOfType(someError)`).\n */\nexport const SigilError = Sigilify(Error, 'SigilError');\nexport type SigilError = InstanceType<typeof SigilError>;\n","import { handleSigil, hasOwnSigil, isSigilCtor } from './helpers';\nimport type { SigilOptions } from './options';\n\n/**\n * Class decorator factory that attaches sigil statics to a class constructor.\n *\n * @param label - Sigil label string to assign to the decorated class (e.g. `@scope/pkg.ClassName`).\n * @param opts - Options object to override any global options if needed.\n * @returns A class decorator compatible with the ECMAScript decorator context.\n */\nexport function WithSigil(label: string, opts?: SigilOptions) {\n return function (value: Function, context: any) {\n if (!isSigilCtor(value))\n throw new Error(\n `[Sigil Error] 'WithSigil' decorator accept only Sigil classes but used on class '${value.name}'`\n );\n if (hasOwnSigil(value))\n throw new Error(\n `[Sigil Error] Class '${value.name}' with label '${value.SigilLabel}' is already sigilified`\n );\n\n handleSigil(value, label, opts);\n };\n}\n","import { handleSigil, isSigilCtor, hasOwnSigil } from './helpers';\nimport type { SigilOptions } from './options';\n\n/**\n * HOF (class inhancer) that attaches runtime sigil metadata to Sigil class.\n * Alternative to '@WithSigil' if you prefer HOFs.\n *\n * @typeParam S - Constructor type (should be an instance of sigil class).\n * @param Class - The constructor (class) to enhance.\n * @param label - Sigil label string to assign to the decorated class (e.g. `@scope/pkg.ClassName`).\n * @param opts - Options object to override any global options if needed.\n * @returns The same constructor value, with runtime metadata ensured.\n */\nexport function withSigil<S extends Function>(Class: S, label: string, opts?: SigilOptions): S {\n if (!isSigilCtor(Class))\n throw new Error(\n `[Sigil Error] 'withSigil' HOF accept only Sigil classes but used on class '${Class.name}'`\n );\n if (hasOwnSigil(Class))\n throw new Error(\n `[Sigil Error] Class '${Class.name}' with label '${Class.SigilLabel}' is already sigilified`\n );\n\n handleSigil(Class, label, opts);\n return Class;\n}\n"]}
|
package/dist/index.js
CHANGED
|
@@ -18,7 +18,8 @@ var updateSigilOptions = (opts) => {
|
|
|
18
18
|
OPTIONS.labelValidation = val != null ? val : null;
|
|
19
19
|
}
|
|
20
20
|
};
|
|
21
|
-
var
|
|
21
|
+
var RECOMMENDED_LABEL_REGEX = /^@[\w-]+(?:\/[\w-]+)*\.[A-Z][A-Za-z0-9]*$/;
|
|
22
|
+
var DEFAULT_LABEL_REGEX = RECOMMENDED_LABEL_REGEX;
|
|
22
23
|
|
|
23
24
|
// src/symbols.ts
|
|
24
25
|
var __SIGIL__ = /* @__PURE__ */ Symbol.for("@vicin/sigil.__SIGIL__");
|
|
@@ -32,13 +33,8 @@ var handledCtors = /* @__PURE__ */ new WeakSet();
|
|
|
32
33
|
function handleSigil(ctor, label, opts) {
|
|
33
34
|
if (handledCtors.has(ctor)) return;
|
|
34
35
|
verifyLabel(ctor, label, opts);
|
|
35
|
-
|
|
36
|
-
if (label && ancLabelsMap.has(label))
|
|
37
|
-
throw new Error(
|
|
38
|
-
`[Sigil Error] Attempt to assign label '${label}' to class '${ctor == null ? void 0 : ctor.name}' but label is already used by parent '${ancLabelsMap.get(label)}', Make sure that every class has a unique label`
|
|
39
|
-
);
|
|
36
|
+
handleAncestors(ctor, opts);
|
|
40
37
|
sigilify(ctor, label != null ? label : generateRandomLabel(ctor));
|
|
41
|
-
handledCtors.add(ctor);
|
|
42
38
|
}
|
|
43
39
|
function handleAncestors(ctor, opts) {
|
|
44
40
|
var _a;
|
|
@@ -55,13 +51,12 @@ function handleAncestors(ctor, opts) {
|
|
|
55
51
|
if (labelOwner.has(l)) {
|
|
56
52
|
if (!autofillLabels)
|
|
57
53
|
throw new Error(
|
|
58
|
-
`[Sigil Error] Class '${a2.name}' is not sigilified
|
|
54
|
+
`[Sigil Error] Class '${a2.name}' is not sigilified, Make sure to sigilify all Sigil classes or set 'autofillLabels' to 'true'`
|
|
59
55
|
);
|
|
60
56
|
sigilify(a2, generateRandomLabel(a2));
|
|
61
57
|
}
|
|
62
58
|
labelOwner.set(labelOf(a2), a2.name);
|
|
63
59
|
}
|
|
64
|
-
return labelOwner;
|
|
65
60
|
}
|
|
66
61
|
function sigilify(ctor, label) {
|
|
67
62
|
var _a;
|
|
@@ -105,6 +100,8 @@ function sigilify(ctor, label) {
|
|
|
105
100
|
enumerable: false,
|
|
106
101
|
writable: false
|
|
107
102
|
});
|
|
103
|
+
getLabelRegistry().add(label);
|
|
104
|
+
handledCtors.add(ctor);
|
|
108
105
|
}
|
|
109
106
|
function isSigilCtor(ctor) {
|
|
110
107
|
return typeof ctor === "function" && ctor.prototype && __SIGIL__ in ctor.prototype;
|
|
@@ -121,6 +118,30 @@ function labelOf(ctor) {
|
|
|
121
118
|
function lineageOf(ctor) {
|
|
122
119
|
return ctor.prototype[__LINEAGE__];
|
|
123
120
|
}
|
|
121
|
+
function getSigilLabels(includeAuto = false) {
|
|
122
|
+
const labels = getLabelRegistry().labels();
|
|
123
|
+
if (includeAuto) return labels;
|
|
124
|
+
return labels.filter((l) => !l.startsWith(AUTO_LABEL_PREFEX));
|
|
125
|
+
}
|
|
126
|
+
function getLabelRegistry() {
|
|
127
|
+
if ("__labelRegistry__" in globalThis) return globalThis.__labelRegistry__;
|
|
128
|
+
const labelSet = /* @__PURE__ */ new Set();
|
|
129
|
+
let count = 0;
|
|
130
|
+
const labelRegistry = {
|
|
131
|
+
has: (label) => labelSet.has(label),
|
|
132
|
+
add: (label) => labelSet.add(label),
|
|
133
|
+
labels: () => [...labelSet],
|
|
134
|
+
enc: () => ++count
|
|
135
|
+
};
|
|
136
|
+
Object.freeze(labelRegistry);
|
|
137
|
+
Object.defineProperty(globalThis, "__labelRegistry__", {
|
|
138
|
+
value: labelRegistry,
|
|
139
|
+
writable: false,
|
|
140
|
+
configurable: false,
|
|
141
|
+
enumerable: false
|
|
142
|
+
});
|
|
143
|
+
return labelRegistry;
|
|
144
|
+
}
|
|
124
145
|
function verifyLabel(ctor, label, opts) {
|
|
125
146
|
var _a, _b;
|
|
126
147
|
const labelValidation = (_a = opts == null ? void 0 : opts.labelValidation) != null ? _a : OPTIONS.labelValidation;
|
|
@@ -128,31 +149,28 @@ function verifyLabel(ctor, label, opts) {
|
|
|
128
149
|
if (!label) {
|
|
129
150
|
if (!autofillLabels)
|
|
130
151
|
throw new Error(
|
|
131
|
-
`[Sigil Error] Class '${ctor == null ? void 0 : ctor.name}' is not sigilified
|
|
152
|
+
`[Sigil Error] Class '${ctor == null ? void 0 : ctor.name}' is not sigilified, Make sure to sigilify all Sigil classes or set 'autofillLabels' to 'true'`
|
|
132
153
|
);
|
|
133
154
|
return;
|
|
134
155
|
}
|
|
135
156
|
if (label.startsWith(AUTO_LABEL_PREFEX))
|
|
136
157
|
throw new Error(`'${AUTO_LABEL_PREFEX}' is a prefex reserved by the library`);
|
|
158
|
+
if (getLabelRegistry().has(label))
|
|
159
|
+
throw new Error(
|
|
160
|
+
`[Sigil Error] Passed label '${label}' to class '${ctor == null ? void 0 : ctor.name}' is re-used, passed labels must be unique`
|
|
161
|
+
);
|
|
137
162
|
if (labelValidation) {
|
|
138
163
|
let valid;
|
|
139
164
|
if (labelValidation instanceof RegExp) valid = labelValidation.test(label);
|
|
140
165
|
else valid = labelValidation(label);
|
|
141
166
|
if (!valid)
|
|
142
167
|
throw new Error(
|
|
143
|
-
`[Sigil Error] Invalid
|
|
168
|
+
`[Sigil Error] Invalid Sigil label '${label}'. Make sure that supplied label matches validation regex or function`
|
|
144
169
|
);
|
|
145
170
|
}
|
|
146
171
|
}
|
|
147
|
-
function initCounter() {
|
|
148
|
-
if (!globalThis.__SigilabelCounter) globalThis.__SigilabelCounter = 0;
|
|
149
|
-
}
|
|
150
172
|
function generateRandomLabel(ctor) {
|
|
151
|
-
|
|
152
|
-
const counter = globalThis.__SigilabelCounter++;
|
|
153
|
-
const time = Date.now().toString(36);
|
|
154
|
-
const rand = Math.random().toString(36).slice(2, 6);
|
|
155
|
-
return `${AUTO_LABEL_PREFEX}:${ctor == null ? void 0 : ctor.name}:${time}:${counter.toString(36)}:${rand}`;
|
|
173
|
+
return `${AUTO_LABEL_PREFEX}:${ctor == null ? void 0 : ctor.name}:${getLabelRegistry().enc()}:${Math.random().toString(36).slice(2, 10)}`;
|
|
156
174
|
}
|
|
157
175
|
|
|
158
176
|
// src/mixin.ts
|
|
@@ -270,7 +288,7 @@ function Sigilify(Base, label, opts) {
|
|
|
270
288
|
/**
|
|
271
289
|
* Returns the identity sigil label of this instance's constructor.
|
|
272
290
|
*
|
|
273
|
-
* @returns The label string if passed (e.g. '@scope/pkg.ClassName'), random label if not passed (e.g. '@Sigil-auto:ClassName:
|
|
291
|
+
* @returns The label string if passed (e.g. '@scope/pkg.ClassName'), random label if not passed (e.g. '@Sigil-auto:ClassName:1:pnf11bgl').
|
|
274
292
|
*/
|
|
275
293
|
getSigilLabel() {
|
|
276
294
|
return this[__LABEL__];
|
|
@@ -417,7 +435,7 @@ function SigilifyAbstract(Base, label, opts) {
|
|
|
417
435
|
/**
|
|
418
436
|
* Returns the identity sigil label of this instance's constructor.
|
|
419
437
|
*
|
|
420
|
-
* @returns The label string if passed (e.g. '@scope/pkg.ClassName'), random label if not passed (e.g. '@Sigil-auto:ClassName:
|
|
438
|
+
* @returns The label string if passed (e.g. '@scope/pkg.ClassName'), random label if not passed (e.g. '@Sigil-auto:ClassName:1:pnf11bgl').
|
|
421
439
|
*/
|
|
422
440
|
getSigilLabel() {
|
|
423
441
|
return this[__LABEL__];
|
|
@@ -486,11 +504,13 @@ function withSigil(Class, label, opts) {
|
|
|
486
504
|
}
|
|
487
505
|
|
|
488
506
|
exports.DEFAULT_LABEL_REGEX = DEFAULT_LABEL_REGEX;
|
|
507
|
+
exports.RECOMMENDED_LABEL_REGEX = RECOMMENDED_LABEL_REGEX;
|
|
489
508
|
exports.Sigil = Sigil;
|
|
490
509
|
exports.SigilError = SigilError;
|
|
491
510
|
exports.Sigilify = Sigilify;
|
|
492
511
|
exports.SigilifyAbstract = SigilifyAbstract;
|
|
493
512
|
exports.WithSigil = WithSigil;
|
|
513
|
+
exports.getSigilLabels = getSigilLabels;
|
|
494
514
|
exports.isSigilCtor = isSigilCtor;
|
|
495
515
|
exports.isSigilInstance = isSigilInstance;
|
|
496
516
|
exports.updateSigilOptions = updateSigilOptions;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/options.ts","../src/symbols.ts","../src/helpers.ts","../src/mixin.ts","../src/classes.ts","../src/decorator.ts","../src/hof.ts"],"names":["a"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Configuration options for the Sigil library.\n *\n * These options control runtime validation, inheritance checks, label autofill behavior.\n */\nexport interface SigilOptions {\n /**\n * Validation rule applied to sigil labels before registration.\n *\n * - A function receives the label and must return `true` if valid.\n * - A `RegExp` must match the label.\n * - `null` disables validation entirely.\n *\n * Defaults to `null`.\n */\n labelValidation?: ((label: string) => boolean) | RegExp | null;\n\n /**\n * When enabled, non-decorated subclasses that would otherwise inherit an ancestor's label\n * will be assigned an autogenerated random label (so that explicit labels stay unique).\n */\n autofillLabels?: boolean;\n}\n\n/** -----------------------------------------\n * Main options object\n * ----------------------------------------- */\n\n/**\n * Defined SigilOptions used in the library.\n *\n * @internal\n */\nexport const OPTIONS: Required<SigilOptions> = {\n labelValidation: null,\n autofillLabels: true,\n};\n\n/**\n * Update runtime options for the Sigil library.\n * Call this early during application startup if you want non-default behavior.\n *\n * @param opts - Partial options to merge into the global `OPTIONS` object.\n */\nexport const updateSigilOptions = (opts: SigilOptions): void => {\n if ('autofillLabels' in opts) {\n if (typeof opts.autofillLabels !== 'boolean')\n throw new Error(\"'updateSigilOptions.autofillLabels' must be boolean\");\n OPTIONS.autofillLabels = opts.autofillLabels!;\n }\n\n if ('labelValidation' in opts) {\n const val = opts.labelValidation;\n if (val !== null && typeof val !== 'function' && !(val instanceof RegExp))\n throw new Error(\"'updateSigilOptions.labelValidation' must be null, function or RegExp\");\n OPTIONS.labelValidation = val ?? null;\n }\n};\n\n/** -----------------------------------------\n * Label validation\n * ----------------------------------------- */\n\n/**\n * Label validation regex. Labels must follow the pattern\n * `@scope/package.ClassName` where `ClassName` begins with an uppercase\n * letter. This avoids collisions across packages and helps debugging.\n *\n * It's advised to use this regex in 'SigilOptions.labelValidation'.\n */\nexport const DEFAULT_LABEL_REGEX = /^@[\\w-]+(?:\\/[\\w-]+)*\\.[A-Z][A-Za-z0-9]*$/;\n","/**\n * Symbol to uniquely identify sigil classes.\n *\n * @internal\n * @constant {symbol}\n */\nexport const __SIGIL__ = Symbol.for('@vicin/sigil.__SIGIL__');\n\n/**\n * Symbol used to store the identity label for a sigil constructor.\n *\n * Stored on the constructor as a non-enumerable property.\n *\n * @internal\n * @constant {symbol}\n */\nexport const __LABEL__ = Symbol.for('@vicin/sigil.__LABEL__');\n\n/**\n * Symbol used to store the human-readable label for a sigil constructor, it can be inherited if no label is deined.\n *\n * Stored on the constructor as a non-enumerable property.\n *\n * @internal\n * @constant {symbol}\n */\nexport const __EFFECTIVE_LABEL__ = Symbol.for('@vicin/sigil.__EFFECTIVE_LABEL__');\n\n/**\n * Symbol used to store the label lineage set for a sigil constructor.\n *\n * This is a set of labels (strings) representing the inheritance path of labels.\n *\n * @internal\n * @constant {symbol}\n */\nexport const __LINEAGE__ = Symbol.for('@vicin/sigil.__LINEAGE__');\n","import { OPTIONS, type SigilOptions } from './options';\nimport { __LABEL__, __EFFECTIVE_LABEL__, __SIGIL__, __LINEAGE__ } from './symbols';\nimport type { ISigil, ISigilInstance } from './types';\n\n/** Prefex use by the lib to identify auto-generated classes */\nconst AUTO_LABEL_PREFEX = '@Sigil-auto';\n\n/** -----------------------------------------\n * Main helper\n * ----------------------------------------- */\n\n/** Weak set to ensure that every ctor is handled only once. */\nconst handledCtors = new WeakSet<Function>();\n\n/** Main function to handle 'Sigil' and attach its metadata to the class */\nexport function handleSigil(ctor: Function, label?: string, opts?: SigilOptions) {\n // fast return if already defined\n if (handledCtors.has(ctor)) return;\n\n // Verify label\n verifyLabel(ctor, label, opts);\n\n // check ancestors to ensure that every label in sigil chain in unique\n const ancLabelsMap = handleAncestors(ctor, opts);\n\n // make sure that newly passed label is unique as well\n if (label && ancLabelsMap.has(label))\n throw new Error(\n `[Sigil Error] Attempt to assign label '${label}' to class '${ctor?.name}' but label is already used by parent '${ancLabelsMap.get(label)}', Make sure that every class has a unique label`\n );\n\n // handle current class\n sigilify(ctor, label ?? generateRandomLabel(ctor));\n\n // mark as handled\n handledCtors.add(ctor);\n}\n\n/** -----------------------------------------\n * Generic helpers\n * ----------------------------------------- */\n\nfunction handleAncestors(\n ctor: Function,\n opts?: Pick<SigilOptions, 'autofillLabels'>\n): Map<string, string> {\n // handle options\n const autofillLabels = opts?.autofillLabels ?? OPTIONS.autofillLabels;\n\n // get line age of this class (ancestors only)\n const ancestors: Function[] = [];\n let a = Object.getPrototypeOf(ctor);\n while (a && typeof a === 'function' && a.prototype[__SIGIL__]) {\n ancestors.unshift(a);\n a = Object.getPrototypeOf(a);\n }\n\n /** Map<label, className> to record the owner of each label. */\n const labelOwner = new Map<string, string>();\n\n // loop lineage to insure that each label is unique in ancestors\n for (const a of ancestors) {\n // get label\n const l = a.prototype[__LABEL__] as string;\n // if duplicate (no label is passed for this class) update class with new label\n if (labelOwner.has(l)) {\n if (!autofillLabels)\n throw new Error(\n `[Sigil Error] Class '${a.name}' is not sigilified with 'autofillLabels' setted to 'false', Make sure to sigilify all Sigil classes or set 'autofillLabels' to 'true'`\n );\n sigilify(a, generateRandomLabel(a));\n }\n // register current label with class name\n labelOwner.set(labelOf(a)!, a.name);\n }\n\n return labelOwner;\n}\n\nfunction sigilify(ctor: Function, label: string) {\n const sym = Symbol.for(label);\n Object.defineProperty(ctor.prototype, __SIGIL__, {\n value: sym,\n configurable: false,\n enumerable: false,\n writable: false,\n });\n Object.defineProperty(ctor.prototype, sym, {\n value: true,\n configurable: false,\n enumerable: false,\n writable: false,\n });\n Object.defineProperty(ctor.prototype, __LABEL__, {\n value: label,\n configurable: false,\n enumerable: false,\n writable: false,\n });\n if (!label.startsWith(AUTO_LABEL_PREFEX))\n Object.defineProperty(ctor.prototype, __EFFECTIVE_LABEL__, {\n value: label,\n configurable: false,\n enumerable: false,\n writable: false,\n });\n Object.defineProperty(ctor.prototype, __LINEAGE__, {\n value: new Set(['Sigil', ...(lineageOf(ctor) ?? []), label]),\n configurable: false,\n enumerable: false,\n writable: false,\n });\n // add { Symbol.for('Sigil'): true } if not present\n const sigilSym = Symbol.for('Sigil');\n if (ctor.prototype[sigilSym] !== true)\n Object.defineProperty(ctor.prototype, sigilSym, {\n value: true,\n configurable: false,\n enumerable: false,\n writable: false,\n });\n}\n\n/** -----------------------------------------\n * Introspection helpers\n * ----------------------------------------- */\n\n/**\n * Runtime predicate that checks whether the provided value is a sigil constructor.\n *\n * @param ctor - Constructor to test.\n * @returns `true` if `value` is a sigil constructor, otherwise `false`.\n */\nexport function isSigilCtor(ctor: unknown): ctor is ISigil {\n return typeof ctor === 'function' && ctor.prototype && __SIGIL__ in ctor.prototype;\n}\n\n/**\n * Runtime predicate that checks whether the provided object is an instance\n * of a sigil class.\n *\n * @param inst - The instanca to test.\n * @returns `true` if `obj` is an instance produced by a sigil constructor.\n */\nexport function isSigilInstance(inst: unknown): inst is ISigilInstance {\n return !!inst && typeof inst === 'object' && __SIGIL__ in inst;\n}\n\nexport function hasOwnSigil(ctor: Function): ctor is ISigil {\n return typeof ctor === 'function' && Object.hasOwn(ctor.prototype, __SIGIL__);\n}\n\nfunction labelOf(ctor: Function): string | undefined {\n return ctor.prototype[__LABEL__];\n}\n\nfunction lineageOf(ctor: Function): Set<string> | undefined {\n return ctor.prototype[__LINEAGE__];\n}\n\n/** -----------------------------------------\n * Label helpers\n * ----------------------------------------- */\n\nfunction verifyLabel<L extends string>(ctor: Function, label?: L, opts?: SigilOptions): void {\n // handle option\n const labelValidation = opts?.labelValidation ?? OPTIONS.labelValidation;\n const autofillLabels = opts?.autofillLabels ?? OPTIONS.autofillLabels;\n\n if (!label) {\n if (!autofillLabels)\n throw new Error(\n `[Sigil Error] Class '${ctor?.name}' is not sigilified with 'autofillLabels' setted to 'false', Make sure to sigilify all Sigil classes or set 'autofillLabels' to 'true'`\n );\n return;\n }\n\n if (label.startsWith(AUTO_LABEL_PREFEX))\n throw new Error(`'${AUTO_LABEL_PREFEX}' is a prefex reserved by the library`);\n\n if (labelValidation) {\n let valid: boolean;\n if (labelValidation instanceof RegExp) valid = labelValidation.test(label);\n else valid = labelValidation(label);\n\n if (!valid)\n throw new Error(\n `[Sigil Error] Invalid identity label '${label}'. Make sure that supplied label matches validation regex or function`\n );\n }\n}\n\nfunction initCounter() {\n if (!(globalThis as any).__SigilabelCounter) (globalThis as any).__SigilabelCounter = 0;\n}\n\nfunction generateRandomLabel(ctor: Function): string {\n initCounter();\n\n const counter = (globalThis as any).__SigilabelCounter++;\n const time = Date.now().toString(36);\n const rand = Math.random().toString(36).slice(2, 6);\n\n return `${AUTO_LABEL_PREFEX}:${ctor?.name}:${time}:${counter.toString(36)}:${rand}`;\n}\n","import { handleSigil, hasOwnSigil } from './helpers';\nimport type { SigilOptions } from './options';\nimport { __LABEL__, __EFFECTIVE_LABEL__, __LINEAGE__, __SIGIL__ } from './symbols';\nimport type {\n Constructor,\n Prettify,\n ConstructorAbstract,\n ISigilInstance,\n GetPrototype,\n ISigilStatic,\n sigil,\n} from './types';\n\n/**\n * Mixin factory that augments an existing class with Sigil runtime metadata and helpers.\n *\n * @param Base - The base constructor to extend.\n * @param label - Identity label to attach to the resulting class (e.g. '@scope/pkg.ClassName').\n * @param opts - Options object to override any global options if needed.\n * @returns A new constructor that extends `Base` and includes Sigil statics/instance methods.\n * @throws Error if `Base` is already sigilified.\n */\nexport function Sigilify<B extends Constructor, L extends string>(\n Base: B,\n label: L,\n opts?: SigilOptions\n) {\n if (hasOwnSigil(Base))\n throw new Error(\n `[Sigil Error] Class '${Base.name}' with label '${Base.SigilLabel}' is already sigilified`\n );\n\n class Sigilified extends Base implements ISigilInstance {\n /**\n * Class-level identity label constant for this sigil constructor.\n */\n static get SigilLabel(): L {\n handleSigil(this);\n return (this as any).prototype[__LABEL__];\n }\n\n /**\n * Class-level human-readable label constant for this sigil constructor, last passed label in 'Sigil' chain by developer.\n */\n static get SigilEffectiveLabel(): L {\n handleSigil(this);\n return (this as any).prototype[__EFFECTIVE_LABEL__];\n }\n\n /**\n * Linearized sigil type label chain for the current constructor.\n *\n * Useful for debugging and performing strict lineage comparisons.\n *\n * @returns An array of labels representing parent → child type labels.\n */\n static get SigilLabelLineage(): readonly string[] {\n handleSigil(this);\n return [...(this as any).prototype[__LINEAGE__]];\n }\n\n /**\n * Sigil type label set for the current constructor.\n * Useful for debugging.\n *\n * @returns A Readonly Set of labels that represent the type lineage.\n */\n static get SigilLabelSet(): Readonly<Set<string>> {\n handleSigil(this);\n return (this as any).prototype[__LINEAGE__];\n }\n\n /**\n * Compile-time nominal brand that encodes the class sigil labels object.\n */\n declare readonly [sigil]: Prettify<\n {\n Sigil: true;\n } & {\n [K in L]: true;\n }\n >;\n\n constructor(...args: any[]) {\n super(...args);\n const ctor = new.target;\n handleSigil(ctor);\n }\n\n /**\n * Check whether `other` is (or inherits from) the instance represented by the\n * calling constructor.\n *\n * This replaces `instanceof` so that checks remain valid across bundles/realms\n * and when subclassing.\n *\n * @typeParam T - The specific sigil constructor (`this`).\n * @param this - The constructor performing the type check.\n * @param other - The object to test.\n * @returns A type guard asserting `other` is an instance of the constructor.\n */\n static isOfType<T extends ISigilStatic>(this: T, other: unknown): other is GetPrototype<T> {\n handleSigil(this as any);\n if (other == null || typeof other !== 'object') return false;\n return (other as any)[(this as any).prototype[__SIGIL__]] === true;\n }\n\n /**\n * Check whether `other` is exactly the same instance represented by the\n * calling constructor.\n *\n * @typeParam T - The specific sigil constructor (`this`).\n * @param this - The constructor performing the type check.\n * @param other - The object to test.\n * @returns A type guard asserting `other` is an instance of the constructor.\n */\n static isExactType<T extends ISigilStatic>(this: T, other: unknown): other is GetPrototype<T> {\n handleSigil(this as any);\n if (other == null || typeof other !== 'object') return false;\n if ((this as any).prototype?.[__LINEAGE__].size !== (other as any)[__LINEAGE__]?.size)\n return false;\n return (other as any)[(this as any).prototype[__SIGIL__]] === true;\n }\n\n /**\n * Check whether `other` is (or inherits from) the instance represented by the\n * calling constructor.\n *\n * This replaces `instanceof` so that checks remain valid across bundles/realms\n * and when subclassing.\n *\n * @typeParam T - The specific sigil constructor (`this`).\n * @param this - The constructor performing the type check.\n * @param other - The object to test.\n * @returns A type guard asserting `other` is an instance of the constructor.\n */\n isOfType<T extends ISigilInstance>(this: T, other: unknown): other is T {\n if (other == null || typeof other !== 'object') return false;\n return (other as any)[(this as any)[__SIGIL__]] === true;\n }\n\n /**\n * Check whether `other` is exactly the same instance represented by the\n * calling constructor.\n *\n * @typeParam T - The specific sigil constructor (`this`).\n * @param this - The constructor performing the type check.\n * @param other - The object to test.\n * @returns A type guard asserting `other` is an instance of the constructor.\n */\n isExactType<T extends ISigilInstance>(this: T, other: unknown): other is T {\n if (other == null || typeof other !== 'object') return false;\n if ((this as any)[__LINEAGE__].size !== (other as any)[__LINEAGE__]?.size) return false;\n return (other as any)[(this as any)[__SIGIL__]] === true;\n }\n\n /**\n * Returns the identity sigil label of this instance's constructor.\n *\n * @returns The label string if passed (e.g. '@scope/pkg.ClassName'), random label if not passed (e.g. '@Sigil-auto:ClassName:mm2gkdwn:0:g1sq').\n */\n getSigilLabel(): string {\n return (this as any)[__LABEL__];\n }\n\n /**\n * Returns the human-readable sigil label of this instance's constructor.\n *\n * @returns The last passed label string (e.g. '@scope/pkg.ClassName').\n */\n getSigilEffectiveLabel(): string {\n return (this as any)[__EFFECTIVE_LABEL__];\n }\n\n /**\n * Returns a copy of the sigil type label lineage for this instance's constructor.\n *\n * @returns readonly array of labels representing the type lineage.\n */\n getSigilLabelLineage(): readonly string[] {\n return [...(this as any)[__LINEAGE__]];\n }\n\n /**\n * Returns a copy of the sigil type label lineage set for this instance's constructor.\n *\n * @returns readonly array of labels representing the type lineage.\n */\n getSigilLabelSet(): Readonly<Set<string>> {\n return (this as any)[__LINEAGE__];\n }\n }\n\n handleSigil(Sigilified, label, opts);\n return Sigilified;\n}\n\n/**\n * Mixin factory that augments an existing class with Sigil runtime metadata and helpers. Accept and return 'abstract' class.\n *\n * @param Base - The base constructor to extend.\n * @param label - Identity label to attach to the resulting class (e.g. '@scope/pkg.ClassName').\n * @param opts - Options object to override any global options if needed.\n * @returns A new abstract constructor that extends `Base` and includes Sigil statics/instance methods.\n * @throws Error if `Base` is already sigilified.\n */\nexport function SigilifyAbstract<B extends ConstructorAbstract, L extends string>(\n Base: B,\n label: L,\n opts?: SigilOptions\n) {\n if (hasOwnSigil(Base))\n throw new Error(\n `[Sigil Error] Class '${Base.name}' with label '${Base.SigilLabel}' is already sigilified`\n );\n\n abstract class Sigilified extends Base implements ISigilInstance {\n /**\n * Class-level identity label constant for this sigil constructor.\n */\n static get SigilLabel(): L {\n handleSigil(this);\n return (this as any).prototype[__LABEL__];\n }\n\n /**\n * Class-level human-readable label constant for this sigil constructor, last passed label in 'Sigil' chain by developer.\n */\n static get SigilEffectiveLabel(): L {\n handleSigil(this);\n return (this as any).prototype[__EFFECTIVE_LABEL__];\n }\n\n /**\n * Linearized sigil type label chain for the current constructor.\n *\n * Useful for debugging and performing strict lineage comparisons.\n *\n * @returns An array of labels representing parent → child type labels.\n */\n static get SigilLabelLineage(): readonly string[] {\n handleSigil(this);\n return [...(this as any).prototype[__LINEAGE__]];\n }\n\n /**\n * Sigil type label set for the current constructor.\n * Useful for debugging.\n *\n * @returns A Readonly Set of labels that represent the type lineage.\n */\n static get SigilLabelSet(): Readonly<Set<string>> {\n handleSigil(this);\n return (this as any).prototype[__LINEAGE__];\n }\n\n /**\n * Compile-time nominal brand that encodes the class sigil labels object.\n */\n declare readonly [sigil]: Prettify<\n {\n Sigil: true;\n } & {\n [K in L]: true;\n }\n >;\n\n constructor(...args: any[]) {\n super(...args);\n const ctor = new.target;\n handleSigil(ctor);\n }\n\n /**\n * Check whether `other` is (or inherits from) the instance represented by the\n * calling constructor.\n *\n * This replaces `instanceof` so that checks remain valid across bundles/realms\n * and when subclassing.\n *\n * @typeParam T - The specific sigil constructor (`this`).\n * @param this - The constructor performing the type check.\n * @param other - The object to test.\n * @returns A type guard asserting `other` is an instance of the constructor.\n */\n static isOfType<T>(this: T, other: unknown): other is GetPrototype<T> {\n handleSigil(this as any);\n if (other == null || typeof other !== 'object') return false;\n return (other as any)[(this as any).prototype[__SIGIL__]] === true;\n }\n\n /**\n * Check whether `other` is exactly the same instance represented by the\n * calling constructor.\n *\n * @typeParam T - The specific sigil constructor (`this`).\n * @param this - The constructor performing the type check.\n * @param other - The object to test.\n * @returns A type guard asserting `other` is an instance of the constructor.\n */\n static isExactType<T>(this: T, other: unknown): other is GetPrototype<T> {\n handleSigil(this as any);\n if (other == null || typeof other !== 'object') return false;\n if ((this as any).prototype?.[__LINEAGE__].size !== (other as any)[__LINEAGE__]?.size)\n return false;\n return (other as any)[(this as any).prototype[__SIGIL__]] === true;\n }\n\n /**\n * Check whether `other` is (or inherits from) the instance represented by the\n * calling constructor.\n *\n * This replaces `instanceof` so that checks remain valid across bundles/realms\n * and when subclassing.\n *\n * @typeParam T - The specific sigil constructor (`this`).\n * @param this - The constructor performing the type check.\n * @param other - The object to test.\n * @returns A type guard asserting `other` is an instance of the constructor.\n */\n isOfType<T>(this: T, other: unknown): other is T {\n if (other == null || typeof other !== 'object') return false;\n return (other as any)[(this as any)[__SIGIL__]] === true;\n }\n\n /**\n * Check whether `other` is exactly the same instance represented by the\n * calling constructor.\n *\n * @typeParam T - The specific sigil constructor (`this`).\n * @param this - The constructor performing the type check.\n * @param other - The object to test.\n * @returns A type guard asserting `other` is an instance of the constructor.\n */\n isExactType<T>(this: T, other: unknown): other is T {\n if (other == null || typeof other !== 'object') return false;\n if ((this as any)[__LINEAGE__].size !== (other as any)[__LINEAGE__]?.size) return false;\n return (other as any)[(this as any)[__SIGIL__]] === true;\n }\n\n /**\n * Returns the identity sigil label of this instance's constructor.\n *\n * @returns The label string if passed (e.g. '@scope/pkg.ClassName'), random label if not passed (e.g. '@Sigil-auto:ClassName:mm2gkdwn:0:g1sq').\n */\n getSigilLabel(): string {\n return (this as any)[__LABEL__];\n }\n\n /**\n * Returns the human-readable sigil label of this instance's constructor.\n *\n * @returns The last passed label string (e.g. '@scope/pkg.ClassName').\n */\n getSigilEffectiveLabel(): string {\n return (this as any)[__EFFECTIVE_LABEL__];\n }\n\n /**\n * Returns a copy of the sigil type label lineage for this instance's constructor.\n *\n * @returns readonly array of labels representing the type lineage.\n */\n getSigilLabelLineage(): readonly string[] {\n return [...(this as any)[__LINEAGE__]];\n }\n\n /**\n * Returns a copy of the sigil type label lineage set for this instance's constructor.\n *\n * @returns readonly array of labels representing the type lineage.\n */\n getSigilLabelSet(): Readonly<Set<string>> {\n return (this as any)[__LINEAGE__];\n }\n }\n\n handleSigil(Sigilified, label, opts);\n return Sigilified;\n}\n","import { Sigilify } from './mixin';\nimport type { sigil } from './types';\n\n/**\n * A minimal root Sigil class used by the library as a base identity.\n *\n * This is produced by `Sigilify` and can serve as a basic sentinel/base\n * class for other sigil classes or for debugging/inspection.\n */\nexport const Sigil = Sigilify(class {}, 'Sigil');\nexport type Sigil = InstanceType<typeof Sigil>;\n\n/**\n * A sigil variant of the built-in `Error` constructor used by the library\n * to represent Sigil-specific errors.\n *\n * Use `SigilError` when you want an Error type that is identifiable via sigil\n * runtime checks (e.g. `SigilError.isOfType(someError)`).\n */\nexport const SigilError = Sigilify(Error, 'SigilError');\nexport type SigilError = InstanceType<typeof SigilError>;\n","import { handleSigil, hasOwnSigil, isSigilCtor } from './helpers';\nimport type { SigilOptions } from './options';\n\n/**\n * Class decorator factory that attaches sigil statics to a class constructor.\n *\n * @param label - Sigil label string to assign to the decorated class (e.g. `@scope/pkg.ClassName`).\n * @param opts - Options object to override any global options if needed.\n * @returns A class decorator compatible with the ECMAScript decorator context.\n */\nexport function WithSigil(label: string, opts?: SigilOptions) {\n return function (value: Function, context: any) {\n // Only apply to class declarations\n if (!isSigilCtor(value))\n throw new Error(\n `[Sigil Error] 'WithSigil' decorator accept only Sigil classes but used on class '${value.name}'`\n );\n if (hasOwnSigil(value))\n throw new Error(\n `[Sigil Error] Class '${value.name}' with label '${value.SigilLabel}' is already sigilified`\n );\n\n handleSigil(value, label, opts);\n };\n}\n","import { handleSigil, isSigilCtor, hasOwnSigil } from './helpers';\nimport type { SigilOptions } from './options';\n\n/**\n * HOF (class inhancer) that attaches runtime sigil metadata to Sigil class.\n * Alternative to '@WithSigil' if you prefer HOFs.\n *\n * @typeParam S - Constructor type (should be an instance of sigil class).\n * @param Class - The constructor (class) to enhance.\n * @param label - Sigil label string to assign to the decorated class (e.g. `@scope/pkg.ClassName`).\n * @param opts - Options object to override any global options if needed.\n * @returns The same constructor value, with runtime metadata ensured.\n */\nexport function withSigil<S extends Function>(Class: S, label: string, opts?: SigilOptions): S {\n if (!isSigilCtor(Class))\n throw new Error(\n `[Sigil Error] 'withSigil' HOF accept only Sigil classes but used on class '${Class.name}'`\n );\n if (hasOwnSigil(Class))\n throw new Error(\n `[Sigil Error] Class '${Class.name}' with label '${Class.SigilLabel}' is already sigilified`\n );\n\n handleSigil(Class, label, opts);\n return Class;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/options.ts","../src/symbols.ts","../src/helpers.ts","../src/mixin.ts","../src/classes.ts","../src/decorator.ts","../src/hof.ts"],"names":["a"],"mappings":"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","file":"index.js","sourcesContent":["/** -----------------------------------------\n * Types\n * ----------------------------------------- */\n\n/**\n * Configuration options for the Sigil library.\n *\n * These options control runtime validation, inheritance checks, label autofill behavior.\n */\nexport interface SigilOptions {\n /**\n * Validation rule applied to sigil labels before registration.\n *\n * - A function receives the label and must return `true` if valid.\n * - A `RegExp` must match the label.\n * - `null` disables validation entirely.\n *\n * Defaults to `null`.\n */\n labelValidation?: ((label: string) => boolean) | RegExp | null;\n\n /**\n * When enabled, non-decorated subclasses that would otherwise inherit an ancestor's label\n * will be assigned an autogenerated random label (so that explicit labels stay unique).\n */\n autofillLabels?: boolean;\n}\n\n/** -----------------------------------------\n * Internal options object\n * ----------------------------------------- */\n\n/**\n * Defined SigilOptions used in the library.\n *\n * @internal\n */\nexport const OPTIONS: Required<SigilOptions> = {\n labelValidation: null,\n autofillLabels: true,\n};\n\n/** -----------------------------------------\n * Update options\n * ----------------------------------------- */\n\n/**\n * Update runtime options for the Sigil library.\n * Call this early during application startup if you want non-default behavior.\n *\n * @param opts - Partial options to merge into the global `OPTIONS` object.\n */\nexport const updateSigilOptions = (opts: SigilOptions): void => {\n if ('autofillLabels' in opts) {\n if (typeof opts.autofillLabels !== 'boolean')\n throw new Error(\"'updateSigilOptions.autofillLabels' must be boolean\");\n OPTIONS.autofillLabels = opts.autofillLabels!;\n }\n\n if ('labelValidation' in opts) {\n const val = opts.labelValidation;\n if (val !== null && typeof val !== 'function' && !(val instanceof RegExp))\n throw new Error(\"'updateSigilOptions.labelValidation' must be null, function or RegExp\");\n OPTIONS.labelValidation = val ?? null;\n }\n};\n\n/** -----------------------------------------\n * Label validation\n * ----------------------------------------- */\n\n/**\n * Label validation regex. Labels must follow the pattern\n * `@scope/package.ClassName` where `ClassName` begins with an uppercase\n * letter. This avoids collisions across packages and helps debugging.\n *\n * It's advised to use this regex in 'SigilOptions.labelValidation'.\n */\nexport const RECOMMENDED_LABEL_REGEX = /^@[\\w-]+(?:\\/[\\w-]+)*\\.[A-Z][A-Za-z0-9]*$/;\n\n/** @deprecated - Use 'RECOMMENDED_LABEL_REGEX' instead, will be removed in v4 */\nexport const DEFAULT_LABEL_REGEX = RECOMMENDED_LABEL_REGEX;\n","/**\n * Symbol to uniquely identify sigil classes.\n *\n * @internal\n * @constant {symbol}\n */\nexport const __SIGIL__ = Symbol.for('@vicin/sigil.__SIGIL__');\n\n/**\n * Symbol used to store the identity label for a sigil constructor.\n *\n * Stored on the constructor as a non-enumerable property.\n *\n * @internal\n * @constant {symbol}\n */\nexport const __LABEL__ = Symbol.for('@vicin/sigil.__LABEL__');\n\n/**\n * Symbol used to store the human-readable label for a sigil constructor, it can be inherited if no label is deined.\n *\n * Stored on the constructor as a non-enumerable property.\n *\n * @internal\n * @constant {symbol}\n */\nexport const __EFFECTIVE_LABEL__ = Symbol.for('@vicin/sigil.__EFFECTIVE_LABEL__');\n\n/**\n * Symbol used to store the label lineage set for a sigil constructor.\n *\n * This is a set of labels (strings) representing the inheritance path of labels.\n *\n * @internal\n * @constant {symbol}\n */\nexport const __LINEAGE__ = Symbol.for('@vicin/sigil.__LINEAGE__');\n","import { OPTIONS, type SigilOptions } from './options';\nimport { __LABEL__, __EFFECTIVE_LABEL__, __SIGIL__, __LINEAGE__ } from './symbols';\nimport type { ISigil, ISigilInstance } from './types';\n\n/** Prefex use by the lib to identify auto-generated classes */\nconst AUTO_LABEL_PREFEX = '@Sigil-auto';\n\n/** -----------------------------------------\n * Main helper\n * ----------------------------------------- */\n\n/** Weak set to ensure that every ctor is handled only once. */\nconst handledCtors = new WeakSet<Function>();\n\n/** Main function to handle 'Sigil' and attach its metadata to the class */\nexport function handleSigil(ctor: Function, label?: string, opts?: SigilOptions) {\n // fast return if already defined\n if (handledCtors.has(ctor)) return;\n\n // Verify label\n verifyLabel(ctor, label, opts);\n\n // check ancestors to ensure that every label in sigil chain in unique\n handleAncestors(ctor, opts);\n\n // handle current class\n sigilify(ctor, label ?? generateRandomLabel(ctor));\n}\n\n/** -----------------------------------------\n * Generic helpers\n * ----------------------------------------- */\n\nfunction handleAncestors(ctor: Function, opts?: Pick<SigilOptions, 'autofillLabels'>): void {\n // handle options\n const autofillLabels = opts?.autofillLabels ?? OPTIONS.autofillLabels;\n\n // get line age of this class (ancestors only)\n const ancestors: Function[] = [];\n let a = Object.getPrototypeOf(ctor);\n while (a && typeof a === 'function' && a.prototype[__SIGIL__]) {\n ancestors.unshift(a);\n a = Object.getPrototypeOf(a);\n }\n\n /** Map<label, className> to record the owner of each label. */\n const labelOwner = new Map<string, string>();\n\n // loop lineage to insure that each label is unique in ancestors\n for (const a of ancestors) {\n // get label\n const l = a.prototype[__LABEL__] as string;\n // if duplicate (no label is passed for this class) update class with new label\n if (labelOwner.has(l)) {\n if (!autofillLabels)\n throw new Error(\n `[Sigil Error] Class '${a.name}' is not sigilified, Make sure to sigilify all Sigil classes or set 'autofillLabels' to 'true'`\n );\n sigilify(a, generateRandomLabel(a));\n }\n // register current label with class name\n labelOwner.set(labelOf(a)!, a.name);\n }\n}\n\nfunction sigilify(ctor: Function, label: string) {\n const sym = Symbol.for(label);\n Object.defineProperty(ctor.prototype, __SIGIL__, {\n value: sym,\n configurable: false,\n enumerable: false,\n writable: false,\n });\n Object.defineProperty(ctor.prototype, sym, {\n value: true,\n configurable: false,\n enumerable: false,\n writable: false,\n });\n Object.defineProperty(ctor.prototype, __LABEL__, {\n value: label,\n configurable: false,\n enumerable: false,\n writable: false,\n });\n if (!label.startsWith(AUTO_LABEL_PREFEX))\n Object.defineProperty(ctor.prototype, __EFFECTIVE_LABEL__, {\n value: label,\n configurable: false,\n enumerable: false,\n writable: false,\n });\n Object.defineProperty(ctor.prototype, __LINEAGE__, {\n value: new Set(['Sigil', ...(lineageOf(ctor) ?? []), label]),\n configurable: false,\n enumerable: false,\n writable: false,\n });\n // add { Symbol.for('Sigil'): true } if not present\n const sigilSym = Symbol.for('Sigil');\n if (ctor.prototype[sigilSym] !== true)\n Object.defineProperty(ctor.prototype, sigilSym, {\n value: true,\n configurable: false,\n enumerable: false,\n writable: false,\n });\n // Add label to registered labels and mark as handled\n getLabelRegistry().add(label);\n handledCtors.add(ctor);\n}\n\n/** -----------------------------------------\n * Inspection helpers\n * ----------------------------------------- */\n\n/**\n * Runtime predicate that checks whether the provided value is a sigil constructor.\n *\n * @param ctor - Constructor to test.\n * @returns `true` if `value` is a sigil constructor, otherwise `false`.\n */\nexport function isSigilCtor(ctor: unknown): ctor is ISigil {\n return typeof ctor === 'function' && ctor.prototype && __SIGIL__ in ctor.prototype;\n}\n\n/**\n * Runtime predicate that checks whether the provided object is an instance\n * of a sigil class.\n *\n * @param inst - The instanca to test.\n * @returns `true` if `obj` is an instance produced by a sigil constructor.\n */\nexport function isSigilInstance(inst: unknown): inst is ISigilInstance {\n return !!inst && typeof inst === 'object' && __SIGIL__ in inst;\n}\n\nexport function hasOwnSigil(ctor: Function): ctor is ISigil {\n return typeof ctor === 'function' && Object.hasOwn(ctor.prototype, __SIGIL__);\n}\n\nfunction labelOf(ctor: Function): string | undefined {\n return ctor.prototype[__LABEL__];\n}\n\nfunction lineageOf(ctor: Function): Set<string> | undefined {\n return ctor.prototype[__LINEAGE__];\n}\n\n/**\n * Helper function to get labels registered by 'Sigil'\n *\n * @param includeAuto - Flag to include auto-generated labels as well, default is 'false'.\n * @returns Sigil labels registered\n */\nexport function getSigilLabels(includeAuto: boolean = false): string[] {\n const labels = getLabelRegistry().labels();\n if (includeAuto) return labels;\n return labels.filter((l) => !l.startsWith(AUTO_LABEL_PREFEX));\n}\n\n/** -----------------------------------------\n * Label helpers\n * ----------------------------------------- */\n\n/** Exposed methods of global label registry */\ninterface LabelRegistry {\n has: (label: string) => boolean;\n add: (label: string) => void;\n labels: () => string[];\n enc: () => number;\n}\n\n/** Internal helper to get (or init then get) global label registry */\nfunction getLabelRegistry(): LabelRegistry {\n if ('__labelRegistry__' in globalThis) return (globalThis as any).__labelRegistry__;\n\n const labelSet = new Set<string>();\n let count = 0;\n\n const labelRegistry: LabelRegistry = {\n has: (label: string) => labelSet.has(label),\n add: (label: string) => labelSet.add(label),\n labels: () => [...labelSet],\n enc: () => ++count,\n };\n\n Object.freeze(labelRegistry);\n\n Object.defineProperty(globalThis, '__labelRegistry__', {\n value: labelRegistry,\n writable: false,\n configurable: false,\n enumerable: false,\n });\n\n return labelRegistry;\n}\n\n/** Internal helper to validate passed label */\nfunction verifyLabel<L extends string>(ctor: Function, label?: L, opts?: SigilOptions): void {\n // handle option\n const labelValidation = opts?.labelValidation ?? OPTIONS.labelValidation;\n const autofillLabels = opts?.autofillLabels ?? OPTIONS.autofillLabels;\n\n if (!label) {\n if (!autofillLabels)\n throw new Error(\n `[Sigil Error] Class '${ctor?.name}' is not sigilified, Make sure to sigilify all Sigil classes or set 'autofillLabels' to 'true'`\n );\n return;\n }\n\n if (label.startsWith(AUTO_LABEL_PREFEX))\n throw new Error(`'${AUTO_LABEL_PREFEX}' is a prefex reserved by the library`);\n\n if (getLabelRegistry().has(label))\n throw new Error(\n `[Sigil Error] Passed label '${label}' to class '${ctor?.name}' is re-used, passed labels must be unique`\n );\n\n if (labelValidation) {\n let valid: boolean;\n if (labelValidation instanceof RegExp) valid = labelValidation.test(label);\n else valid = labelValidation(label);\n\n if (!valid)\n throw new Error(\n `[Sigil Error] Invalid Sigil label '${label}'. Make sure that supplied label matches validation regex or function`\n );\n }\n}\n\n/** Internal helper to generate random label */\nfunction generateRandomLabel(ctor: Function): string {\n return `${AUTO_LABEL_PREFEX}:${ctor?.name}:${getLabelRegistry().enc()}:${Math.random().toString(36).slice(2, 10)}`;\n}\n","import { handleSigil, hasOwnSigil } from './helpers';\nimport type { SigilOptions } from './options';\nimport { __LABEL__, __EFFECTIVE_LABEL__, __LINEAGE__, __SIGIL__ } from './symbols';\nimport type {\n Constructor,\n Prettify,\n ConstructorAbstract,\n ISigilInstance,\n GetPrototype,\n ISigilStatic,\n sigil,\n} from './types';\n\n/**\n * Mixin factory that augments an existing class with Sigil runtime metadata and helpers.\n *\n * @param Base - The base constructor to extend.\n * @param label - Identity label to attach to the resulting class (e.g. '@scope/pkg.ClassName').\n * @param opts - Options object to override any global options if needed.\n * @returns A new constructor that extends `Base` and includes Sigil statics/instance methods.\n * @throws Error if `Base` is already sigilified.\n */\nexport function Sigilify<B extends Constructor, L extends string>(\n Base: B,\n label: L,\n opts?: SigilOptions\n) {\n if (hasOwnSigil(Base))\n throw new Error(\n `[Sigil Error] Class '${Base.name}' with label '${Base.SigilLabel}' is already sigilified`\n );\n\n class Sigilified extends Base implements ISigilInstance {\n /**\n * Class-level identity label constant for this sigil constructor.\n */\n static get SigilLabel(): L {\n handleSigil(this);\n return (this as any).prototype[__LABEL__];\n }\n\n /**\n * Class-level human-readable label constant for this sigil constructor, last passed label in 'Sigil' chain by developer.\n */\n static get SigilEffectiveLabel(): L {\n handleSigil(this);\n return (this as any).prototype[__EFFECTIVE_LABEL__];\n }\n\n /**\n * Linearized sigil type label chain for the current constructor.\n *\n * Useful for debugging and performing strict lineage comparisons.\n *\n * @returns An array of labels representing parent → child type labels.\n */\n static get SigilLabelLineage(): readonly string[] {\n handleSigil(this);\n return [...(this as any).prototype[__LINEAGE__]];\n }\n\n /**\n * Sigil type label set for the current constructor.\n * Useful for debugging.\n *\n * @returns A Readonly Set of labels that represent the type lineage.\n */\n static get SigilLabelSet(): Readonly<Set<string>> {\n handleSigil(this);\n return (this as any).prototype[__LINEAGE__];\n }\n\n /**\n * Compile-time nominal brand that encodes the class sigil labels object.\n */\n declare readonly [sigil]: Prettify<\n {\n Sigil: true;\n } & {\n [K in L]: true;\n }\n >;\n\n constructor(...args: any[]) {\n super(...args);\n const ctor = new.target;\n handleSigil(ctor);\n }\n\n /**\n * Check whether `other` is (or inherits from) the instance represented by the\n * calling constructor.\n *\n * This replaces `instanceof` so that checks remain valid across bundles/realms\n * and when subclassing.\n *\n * @typeParam T - The specific sigil constructor (`this`).\n * @param this - The constructor performing the type check.\n * @param other - The object to test.\n * @returns A type guard asserting `other` is an instance of the constructor.\n */\n static isOfType<T extends ISigilStatic>(this: T, other: unknown): other is GetPrototype<T> {\n handleSigil(this as any);\n if (other == null || typeof other !== 'object') return false;\n return (other as any)[(this as any).prototype[__SIGIL__]] === true;\n }\n\n /**\n * Check whether `other` is exactly the same instance represented by the\n * calling constructor.\n *\n * @typeParam T - The specific sigil constructor (`this`).\n * @param this - The constructor performing the type check.\n * @param other - The object to test.\n * @returns A type guard asserting `other` is an instance of the constructor.\n */\n static isExactType<T extends ISigilStatic>(this: T, other: unknown): other is GetPrototype<T> {\n handleSigil(this as any);\n if (other == null || typeof other !== 'object') return false;\n if ((this as any).prototype?.[__LINEAGE__].size !== (other as any)[__LINEAGE__]?.size)\n return false;\n return (other as any)[(this as any).prototype[__SIGIL__]] === true;\n }\n\n /**\n * Check whether `other` is (or inherits from) the instance represented by the\n * calling constructor.\n *\n * This replaces `instanceof` so that checks remain valid across bundles/realms\n * and when subclassing.\n *\n * @typeParam T - The specific sigil constructor (`this`).\n * @param this - The constructor performing the type check.\n * @param other - The object to test.\n * @returns A type guard asserting `other` is an instance of the constructor.\n */\n isOfType<T extends ISigilInstance>(this: T, other: unknown): other is T {\n if (other == null || typeof other !== 'object') return false;\n return (other as any)[(this as any)[__SIGIL__]] === true;\n }\n\n /**\n * Check whether `other` is exactly the same instance represented by the\n * calling constructor.\n *\n * @typeParam T - The specific sigil constructor (`this`).\n * @param this - The constructor performing the type check.\n * @param other - The object to test.\n * @returns A type guard asserting `other` is an instance of the constructor.\n */\n isExactType<T extends ISigilInstance>(this: T, other: unknown): other is T {\n if (other == null || typeof other !== 'object') return false;\n if ((this as any)[__LINEAGE__].size !== (other as any)[__LINEAGE__]?.size) return false;\n return (other as any)[(this as any)[__SIGIL__]] === true;\n }\n\n /**\n * Returns the identity sigil label of this instance's constructor.\n *\n * @returns The label string if passed (e.g. '@scope/pkg.ClassName'), random label if not passed (e.g. '@Sigil-auto:ClassName:1:pnf11bgl').\n */\n getSigilLabel(): string {\n return (this as any)[__LABEL__];\n }\n\n /**\n * Returns the human-readable sigil label of this instance's constructor.\n *\n * @returns The last passed label string (e.g. '@scope/pkg.ClassName').\n */\n getSigilEffectiveLabel(): string {\n return (this as any)[__EFFECTIVE_LABEL__];\n }\n\n /**\n * Returns a copy of the sigil type label lineage for this instance's constructor.\n *\n * @returns readonly array of labels representing the type lineage.\n */\n getSigilLabelLineage(): readonly string[] {\n return [...(this as any)[__LINEAGE__]];\n }\n\n /**\n * Returns a copy of the sigil type label lineage set for this instance's constructor.\n *\n * @returns readonly array of labels representing the type lineage.\n */\n getSigilLabelSet(): Readonly<Set<string>> {\n return (this as any)[__LINEAGE__];\n }\n }\n\n handleSigil(Sigilified, label, opts);\n return Sigilified;\n}\n\n/**\n * Mixin factory that augments an existing class with Sigil runtime metadata and helpers. Accept and return 'abstract' class.\n *\n * @param Base - The base constructor to extend.\n * @param label - Identity label to attach to the resulting class (e.g. '@scope/pkg.ClassName').\n * @param opts - Options object to override any global options if needed.\n * @returns A new abstract constructor that extends `Base` and includes Sigil statics/instance methods.\n * @throws Error if `Base` is already sigilified.\n */\nexport function SigilifyAbstract<B extends ConstructorAbstract, L extends string>(\n Base: B,\n label: L,\n opts?: SigilOptions\n) {\n if (hasOwnSigil(Base))\n throw new Error(\n `[Sigil Error] Class '${Base.name}' with label '${Base.SigilLabel}' is already sigilified`\n );\n\n abstract class Sigilified extends Base implements ISigilInstance {\n /**\n * Class-level identity label constant for this sigil constructor.\n */\n static get SigilLabel(): L {\n handleSigil(this);\n return (this as any).prototype[__LABEL__];\n }\n\n /**\n * Class-level human-readable label constant for this sigil constructor, last passed label in 'Sigil' chain by developer.\n */\n static get SigilEffectiveLabel(): L {\n handleSigil(this);\n return (this as any).prototype[__EFFECTIVE_LABEL__];\n }\n\n /**\n * Linearized sigil type label chain for the current constructor.\n *\n * Useful for debugging and performing strict lineage comparisons.\n *\n * @returns An array of labels representing parent → child type labels.\n */\n static get SigilLabelLineage(): readonly string[] {\n handleSigil(this);\n return [...(this as any).prototype[__LINEAGE__]];\n }\n\n /**\n * Sigil type label set for the current constructor.\n * Useful for debugging.\n *\n * @returns A Readonly Set of labels that represent the type lineage.\n */\n static get SigilLabelSet(): Readonly<Set<string>> {\n handleSigil(this);\n return (this as any).prototype[__LINEAGE__];\n }\n\n /**\n * Compile-time nominal brand that encodes the class sigil labels object.\n */\n declare readonly [sigil]: Prettify<\n {\n Sigil: true;\n } & {\n [K in L]: true;\n }\n >;\n\n constructor(...args: any[]) {\n super(...args);\n const ctor = new.target;\n handleSigil(ctor);\n }\n\n /**\n * Check whether `other` is (or inherits from) the instance represented by the\n * calling constructor.\n *\n * This replaces `instanceof` so that checks remain valid across bundles/realms\n * and when subclassing.\n *\n * @typeParam T - The specific sigil constructor (`this`).\n * @param this - The constructor performing the type check.\n * @param other - The object to test.\n * @returns A type guard asserting `other` is an instance of the constructor.\n */\n static isOfType<T>(this: T, other: unknown): other is GetPrototype<T> {\n handleSigil(this as any);\n if (other == null || typeof other !== 'object') return false;\n return (other as any)[(this as any).prototype[__SIGIL__]] === true;\n }\n\n /**\n * Check whether `other` is exactly the same instance represented by the\n * calling constructor.\n *\n * @typeParam T - The specific sigil constructor (`this`).\n * @param this - The constructor performing the type check.\n * @param other - The object to test.\n * @returns A type guard asserting `other` is an instance of the constructor.\n */\n static isExactType<T>(this: T, other: unknown): other is GetPrototype<T> {\n handleSigil(this as any);\n if (other == null || typeof other !== 'object') return false;\n if ((this as any).prototype?.[__LINEAGE__].size !== (other as any)[__LINEAGE__]?.size)\n return false;\n return (other as any)[(this as any).prototype[__SIGIL__]] === true;\n }\n\n /**\n * Check whether `other` is (or inherits from) the instance represented by the\n * calling constructor.\n *\n * This replaces `instanceof` so that checks remain valid across bundles/realms\n * and when subclassing.\n *\n * @typeParam T - The specific sigil constructor (`this`).\n * @param this - The constructor performing the type check.\n * @param other - The object to test.\n * @returns A type guard asserting `other` is an instance of the constructor.\n */\n isOfType<T>(this: T, other: unknown): other is T {\n if (other == null || typeof other !== 'object') return false;\n return (other as any)[(this as any)[__SIGIL__]] === true;\n }\n\n /**\n * Check whether `other` is exactly the same instance represented by the\n * calling constructor.\n *\n * @typeParam T - The specific sigil constructor (`this`).\n * @param this - The constructor performing the type check.\n * @param other - The object to test.\n * @returns A type guard asserting `other` is an instance of the constructor.\n */\n isExactType<T>(this: T, other: unknown): other is T {\n if (other == null || typeof other !== 'object') return false;\n if ((this as any)[__LINEAGE__].size !== (other as any)[__LINEAGE__]?.size) return false;\n return (other as any)[(this as any)[__SIGIL__]] === true;\n }\n\n /**\n * Returns the identity sigil label of this instance's constructor.\n *\n * @returns The label string if passed (e.g. '@scope/pkg.ClassName'), random label if not passed (e.g. '@Sigil-auto:ClassName:1:pnf11bgl').\n */\n getSigilLabel(): string {\n return (this as any)[__LABEL__];\n }\n\n /**\n * Returns the human-readable sigil label of this instance's constructor.\n *\n * @returns The last passed label string (e.g. '@scope/pkg.ClassName').\n */\n getSigilEffectiveLabel(): string {\n return (this as any)[__EFFECTIVE_LABEL__];\n }\n\n /**\n * Returns a copy of the sigil type label lineage for this instance's constructor.\n *\n * @returns readonly array of labels representing the type lineage.\n */\n getSigilLabelLineage(): readonly string[] {\n return [...(this as any)[__LINEAGE__]];\n }\n\n /**\n * Returns a copy of the sigil type label lineage set for this instance's constructor.\n *\n * @returns readonly array of labels representing the type lineage.\n */\n getSigilLabelSet(): Readonly<Set<string>> {\n return (this as any)[__LINEAGE__];\n }\n }\n\n handleSigil(Sigilified, label, opts);\n return Sigilified;\n}\n","import { Sigilify } from './mixin';\nimport type { sigil } from './types';\n\n/**\n * A minimal root Sigil class used by the library as a base identity.\n *\n * This is produced by `Sigilify` and can serve as a basic sentinel/base\n * class for other sigil classes or for debugging/inspection.\n */\nexport const Sigil = Sigilify(class {}, 'Sigil');\nexport type Sigil = InstanceType<typeof Sigil>;\n\n/**\n * A sigil variant of the built-in `Error` constructor used by the library\n * to represent Sigil-specific errors.\n *\n * Use `SigilError` when you want an Error type that is identifiable via sigil\n * runtime checks (e.g. `SigilError.isOfType(someError)`).\n */\nexport const SigilError = Sigilify(Error, 'SigilError');\nexport type SigilError = InstanceType<typeof SigilError>;\n","import { handleSigil, hasOwnSigil, isSigilCtor } from './helpers';\nimport type { SigilOptions } from './options';\n\n/**\n * Class decorator factory that attaches sigil statics to a class constructor.\n *\n * @param label - Sigil label string to assign to the decorated class (e.g. `@scope/pkg.ClassName`).\n * @param opts - Options object to override any global options if needed.\n * @returns A class decorator compatible with the ECMAScript decorator context.\n */\nexport function WithSigil(label: string, opts?: SigilOptions) {\n return function (value: Function, context: any) {\n if (!isSigilCtor(value))\n throw new Error(\n `[Sigil Error] 'WithSigil' decorator accept only Sigil classes but used on class '${value.name}'`\n );\n if (hasOwnSigil(value))\n throw new Error(\n `[Sigil Error] Class '${value.name}' with label '${value.SigilLabel}' is already sigilified`\n );\n\n handleSigil(value, label, opts);\n };\n}\n","import { handleSigil, isSigilCtor, hasOwnSigil } from './helpers';\nimport type { SigilOptions } from './options';\n\n/**\n * HOF (class inhancer) that attaches runtime sigil metadata to Sigil class.\n * Alternative to '@WithSigil' if you prefer HOFs.\n *\n * @typeParam S - Constructor type (should be an instance of sigil class).\n * @param Class - The constructor (class) to enhance.\n * @param label - Sigil label string to assign to the decorated class (e.g. `@scope/pkg.ClassName`).\n * @param opts - Options object to override any global options if needed.\n * @returns The same constructor value, with runtime metadata ensured.\n */\nexport function withSigil<S extends Function>(Class: S, label: string, opts?: SigilOptions): S {\n if (!isSigilCtor(Class))\n throw new Error(\n `[Sigil Error] 'withSigil' HOF accept only Sigil classes but used on class '${Class.name}'`\n );\n if (hasOwnSigil(Class))\n throw new Error(\n `[Sigil Error] Class '${Class.name}' with label '${Class.SigilLabel}' is already sigilified`\n );\n\n handleSigil(Class, label, opts);\n return Class;\n}\n"]}
|