diff --git a/README.md b/README.md index 84a91d4..f04bd1d 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ signals, and for using `class`es as Solid.js components. # Table of Contents - [At a glance](#at-a-glance) -- [Install](#install) - [`npm install classy-solid`](#npm-install-classy-solid) +- [Install](#install) - [Vite Setup](#vite-setup) - [Babel Setup](#babel-setup) - [API and Usage](#api-and-usage) @@ -120,7 +120,7 @@ See the [live example](https://rawcdn.githack.com/lume/classy-solid/84a66ba70924 # Install -#### `npm install classy-solid` +#### `npm install classy-solid` > **Note** If you do not have or do not wish to use a build tool, see the > [Without compiler support](#without-compiler-support) section for plain @@ -514,6 +514,65 @@ class MyElement extends HTMLElement { customElements.define('my-element', MyElement) ``` +**Preventing auto-start with `static autoStartEffects`:** + +By default, effects created with the `@effect` decorator start immediately when +an instance is constructed. You can prevent this by setting a static +`autoStartEffects` property to `false` on your class. This is useful when you +want to manually control when effects begin running, such as when deferring +effect startup until a component is mounted or an element is connected to the +DOM. + +```ts +import {effect, signal, Effects, startEffects} from 'classy-solid' + +class Counter extends Effects { + @signal count = 0 + + // Prevent effects from auto-starting on construction + static autoStartEffects = false + + @effect #logCount() { + console.log('Count:', this.count) + } +} + +const counter = new Counter() +// Effects haven't run yet, so nothing is logged + +// Later, when you want effects to start: +startEffects(counter) +// Now logs "Count: 0" + +counter.count = 5 // logs "Count: 5" +``` + +This pattern is particularly useful with custom elements: + +```ts +import {effect, signal, Effectful, startEffects, stopEffects} from 'classy-solid' + +class MyElement extends HTMLElement { + static autoStartEffects = false + + @signal data = null + + @effect #renderData() { + console.log('Rendering:', this.data) + } + + connectedCallback() { + // Start effects only when element is in the DOM + startEffects(this) + } + + disconnectedCallback() { + // Stop effects when element is removed + stopEffects(this) + } +} +``` + ### `@untracked` A class decorator that makes a class's constructor untracked, preventing signal @@ -1519,6 +1578,85 @@ counterEl.remove() // effects stop > instance, unless it is called inside another root in which case it'll use that > root. +**Deferred effect startup with `addEffectFn()`:** + +By default, `createEffect()` immediately starts effects. In some cases, you may +want to add effect functions without starting them, and then start them all at +once later using `startEffects()`. The `addEffectFn()` method allows you to do +this: + +- `this.addEffectFn(fn)` - Adds an effect function to the instance without starting it. + +```js +import {onCleanup} from 'solid-js' +import {signal, Effectful, startEffects, stopEffects} from 'classy-solid' + +class DeferredEffects extends Effectful(Object) { + @signal count = 0 + + constructor() { + super() + + // Add effects without starting them + this.addEffectFn(() => { + console.log('count is', this.count) + }) + + this.addEffectFn(() => { + const inter = setInterval(() => this.count++, 1000) + onCleanup(() => clearInterval(inter)) + }) + } +} + +const deferred = new DeferredEffects() +// No effects run yet + +deferred.startEffects() +// Now logs "count is 0" and starts interval incrementing count + +deferred.count = 5 +// Logs "count is 5" and continues interval incrementing count + +deferred.stopEffects() +// Effects stop +``` + +This is particularly useful when combined with `static autoStartEffects = false` +and the `@effect` decorator. The above example can be rewritten like this: + +```js +import {onCleanup} from 'solid-js' +import {signal, Effectful, startEffects, stopEffects} from 'classy-solid' + +class DeferredEffects extends Effectful(Object) { + static autoStartEffects = false + + @signal count = 0 + + @effect logCount() { + console.log('count is', this.count) + } + + @effect interval() { + const inter = setInterval(() => this.count++, 1000) + onCleanup(() => clearInterval(inter)) + } +} + +const deferred = new DeferredEffects() +// No effects run yet + +deferred.startEffects() +// Now logs "count is 0" and starts interval incrementing count + +deferred.count = 5 +// Logs "count is 5" and continues interval incrementing count + +deferred.stopEffects() +// Effects stop +``` + ### `Effects` A pre-instantiated version of `Effectful(Object)`, providing the same API diff --git a/dist/_state.d.ts b/dist/_state.d.ts index 15c9be3..f5ffe32 100644 --- a/dist/_state.d.ts +++ b/dist/_state.d.ts @@ -1,16 +1,19 @@ import type { AnyObject, MemberStat, MetadataMembers, PropKey, ClassySolidMetadata, MemberType } from './decorators/types.js'; import { Effects } from './mixins/Effectful.js'; /** Libraries that wrap classy-solid signal accessors should add their overriding getters to this set. */ -export declare const isSignalGetter: WeakSet; +export declare const isSignalGetter__: WeakSet; /** Libraries that wrap classy-solid memo accessors should add their overriding getters to this set. */ -export declare const isMemoGetter: WeakSet; -export declare function getMembers(metadata: ClassySolidMetadata): MetadataMembers; -export declare function getMemberStat(name: PropKey, type: MemberType, members: MetadataMembers, context: ClassMemberDecoratorContext): MemberStat; -export declare function signalifyIfNeeded(obj: AnyObject, stat: MemberStat): void; -export declare function memoifyIfNeeded(obj: AnyObject, stat: MemberStat): void; +export declare const isMemoGetter__: WeakSet; +export declare function getMembers__(metadata: ClassySolidMetadata): MetadataMembers; +export declare function getMemberStat__(name: PropKey, type: MemberType, members: MetadataMembers, context: ClassMemberDecoratorContext): MemberStat; +export declare function signalifyIfNeeded__(obj: AnyObject, stat: MemberStat): void; +export declare function memoifyIfNeeded__(obj: AnyObject, stat: MemberStat): void; /** @private internal state */ export declare const effects__: WeakMap; -export declare function effectifyIfNeeded(obj: AnyObject, stat: MemberStat): void; +export type AutoStartable = { + autoStartEffects?: boolean; +}; +export declare function effectifyIfNeeded__(obj: AnyObject, stat: MemberStat): void; /** * This finalizes memo initialization for the members tracked, in our custom * ordering. @@ -23,5 +26,5 @@ export declare function effectifyIfNeeded(obj: AnyObject, stat: MemberStat): voi * * See: https://github.com/tc39/proposal-decorators/issues/566 */ -export declare function finalizeMembersIfLast(obj: AnyObject, members: MetadataMembers): void; +export declare function finalizeMembersIfLast__(obj: AnyObject, members: MetadataMembers): void; //# sourceMappingURL=_state.d.ts.map \ No newline at end of file diff --git a/dist/_state.d.ts.map b/dist/_state.d.ts.map index e168bb6..7142a1b 100644 --- a/dist/_state.d.ts.map +++ b/dist/_state.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"_state.d.ts","sourceRoot":"","sources":["../src/_state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,SAAS,EACT,UAAU,EACV,eAAe,EACf,OAAO,EACP,mBAAmB,EACnB,UAAU,EACV,MAAM,uBAAuB,CAAA;AAI9B,OAAO,EAAC,OAAO,EAAC,MAAM,uBAAuB,CAAA;AAG7C,yGAAyG;AACzG,eAAO,MAAM,cAAc,mBAA0B,CAAA;AACrD,uGAAuG;AACvG,eAAO,MAAM,YAAY,mBAA0B,CAAA;AAEnD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,mBAAmB,mBAGvD;AAED,wBAAgB,aAAa,CAC5B,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,eAAe,EACxB,OAAO,EAAE,2BAA2B,cAWpC;AAgDD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,QAajE;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,QAkB/D;AAED,8BAA8B;AAC9B,eAAO,MAAM,SAAS,6BAAoC,CAAA;AAE1D,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,QA4CjE;AASD;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,QAkB7E"} \ No newline at end of file +{"version":3,"file":"_state.d.ts","sourceRoot":"","sources":["../src/_state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,SAAS,EACT,UAAU,EACV,eAAe,EACf,OAAO,EACP,mBAAmB,EACnB,UAAU,EACV,MAAM,uBAAuB,CAAA;AAI9B,OAAO,EAAC,OAAO,EAAC,MAAM,uBAAuB,CAAA;AAG7C,yGAAyG;AACzG,eAAO,MAAM,gBAAgB,mBAA0B,CAAA;AACvD,uGAAuG;AACvG,eAAO,MAAM,cAAc,mBAA0B,CAAA;AAErD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,mBAAmB,mBAGzD;AAED,wBAAgB,eAAe,CAC9B,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,eAAe,EACxB,OAAO,EAAE,2BAA2B,cAWpC;AAgDD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,QAanE;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,QAkBjE;AAED,8BAA8B;AAC9B,eAAO,MAAM,SAAS,6BAAoC,CAAA;AAE1D,MAAM,MAAM,aAAa,GAAG;IAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC1B,CAAA;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,QAoDnE;AASD;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,QAkB/E"} \ No newline at end of file diff --git a/dist/_state.js b/dist/_state.js index 762d402..62a9923 100644 --- a/dist/_state.js +++ b/dist/_state.js @@ -5,14 +5,14 @@ import { Effects } from './mixins/Effectful.js'; import { untrack } from 'solid-js'; /** Libraries that wrap classy-solid signal accessors should add their overriding getters to this set. */ -export const isSignalGetter = new WeakSet(); +export const isSignalGetter__ = new WeakSet(); /** Libraries that wrap classy-solid memo accessors should add their overriding getters to this set. */ -export const isMemoGetter = new WeakSet(); -export function getMembers(metadata) { +export const isMemoGetter__ = new WeakSet(); +export function getMembers__(metadata) { if (!Object.hasOwn(metadata, 'classySolid_members')) metadata.classySolid_members = []; // we don't extend the array from parent classes return metadata.classySolid_members; } -export function getMemberStat(name, type, members, context) { +export function getMemberStat__(name, type, members, context) { const index = members.findIndex(member => member.name === name); const existingStat = members[index]; const newStat = { @@ -72,7 +72,7 @@ function sortMetadataMembersCustomOrder(members) { // auto-accessors, finally memo accessors and methods. members.sort((a, b) => customSortOrder[a.type] - customSortOrder[b.type]); } -export function signalifyIfNeeded(obj, stat) { +export function signalifyIfNeeded__(obj, stat) { const { name } = stat; @@ -80,7 +80,7 @@ export function signalifyIfNeeded(obj, stat) { if (!stat.reuseExistingSignal) signalify(obj, [name, untrack(() => obj[name])]); stat.applied.set(obj, true); } -export function memoifyIfNeeded(obj, stat) { +export function memoifyIfNeeded__(obj, stat) { const { name, context @@ -97,7 +97,7 @@ export function memoifyIfNeeded(obj, stat) { /** @private internal state */ export const effects__ = new WeakMap(); -export function effectifyIfNeeded(obj, stat) { +export function effectifyIfNeeded__(obj, stat) { const { name, context @@ -125,7 +125,13 @@ export function effectifyIfNeeded(obj, stat) { // Otherwise, create a new Effects instance to manage the effects. else effects__.set(obj, effects = new Effects()); } - effects.createEffect(() => effectFn.call(obj)); + const ctor = obj.constructor; + const autoStart = ctor.autoStartEffects === undefined || ctor.autoStartEffects; + if (autoStart) effects.createEffect(() => effectFn.call(obj));else { + // start stopped; effects will be added but not started yet if autoStart is false + effects.stopEffects(); + effects.addEffectFn(() => effectFn.call(obj)); + } stat.applied.set(obj, true); } @@ -148,7 +154,7 @@ const extraInitializersCount = new WeakMap(); * * See: https://github.com/tc39/proposal-decorators/issues/566 */ -export function finalizeMembersIfLast(obj, members) { +export function finalizeMembersIfLast__(obj, members) { let count = extraInitializersCount.get(obj) ?? 0; extraInitializersCount.set(obj, ++count); diff --git a/dist/_state.js.map b/dist/_state.js.map index 20d4b18..81a71bf 100644 --- a/dist/_state.js.map +++ b/dist/_state.js.map @@ -1 +1 @@ -{"version":3,"file":"_state.js","names":["memoify","setMemoifyMemberStat","getInheritedDescriptor","signalify","Effects","untrack","isSignalGetter","WeakSet","isMemoGetter","getMembers","metadata","Object","hasOwn","classySolid_members","getMemberStat","name","type","members","context","index","findIndex","member","existingStat","newStat","applied","WeakMap","finalize","push","isSortedCustom","customSortOrder","sortMetadataMembersCustomOrder","has","add","sort","a","b","signalifyIfNeeded","obj","stat","get","Error","String","reuseExistingSignal","set","memoifyIfNeeded","private","kind","effects__","effectifyIfNeeded","decoratedMember","value","privateMember","leafmostMember","effectFn","access","effects","createEffect","call","extraInitializersCount","finalizeMembersIfLast","count","length"],"sources":["../src/_state.ts"],"sourcesContent":["import type {\n\tAnyObject,\n\tMemberStat,\n\tMetadataMembers,\n\tPropKey,\n\tClassySolidMetadata,\n\tMemberType,\n} from './decorators/types.js'\nimport {memoify, setMemoifyMemberStat} from './signals/memoify.js'\nimport {getInheritedDescriptor} from 'lowclass/dist/getInheritedDescriptor.js'\nimport {signalify} from './signals/signalify.js'\nimport {Effects} from './mixins/Effectful.js'\nimport {untrack} from 'solid-js'\n\n/** Libraries that wrap classy-solid signal accessors should add their overriding getters to this set. */\nexport const isSignalGetter = new WeakSet()\n/** Libraries that wrap classy-solid memo accessors should add their overriding getters to this set. */\nexport const isMemoGetter = new WeakSet()\n\nexport function getMembers(metadata: ClassySolidMetadata) {\n\tif (!Object.hasOwn(metadata, 'classySolid_members')) metadata.classySolid_members = [] // we don't extend the array from parent classes\n\treturn metadata.classySolid_members!\n}\n\nexport function getMemberStat(\n\tname: PropKey,\n\ttype: MemberType,\n\tmembers: MetadataMembers,\n\tcontext: ClassMemberDecoratorContext,\n) {\n\tconst index = members.findIndex(member => member.name === name)\n\tconst existingStat = members[index]\n\tconst newStat: MemberStat = {type, name, applied: new WeakMap(), finalize: () => {}, context}\n\n\t// replace stat in the array with the latest (f.e. duplicate class members, last one wins)\n\tif (existingStat) members[index] = newStat\n\telse members.push(newStat)\n\n\treturn newStat\n}\n\nconst isSortedCustom = new WeakSet()\n\n// This is the order we want for initializing supported types of members.\nconst customSortOrder: Record = {\n\t'signal-field': 0,\n\t'memo-auto-accessor': 1,\n\t'memo-accessor': 1,\n\t'memo-method': 1,\n\t'effect-auto-accessor': 2,\n\t'effect-method': 2,\n}\n\n// This is the EcmaScript decorator extra initializer application order we don't want, for reference.\n// Anything in the same group is applied in source order within that group.\n// const ecmascriptSortOrder: Record = {\n// \t'memo-method': 0,\n// \t'memo-accessor': 0,\n// \t'effect-method': 0,\n// \t'signal-field': 1,\n// \t'memo-auto-accessor': 1,\n// \t'effect-auto-accessor': 1,\n// }\n\n/**\n * Sort signal, memo, and effect members tracked in metadata in the order of\n * our custom `memberSortOrder`.\n *\n * This is so that any members that are normally initialized *after*\n * getters/setters/methods (such as signal fields, and memo fields and\n * auto-accessors) will be initialized before getters/setters/methods (memo\n * accessors and methods), otherwise they will be initialize *after*\n * getters/setters/methods due to EcmaScript decorator application order rules.\n *\n * See: https://github.com/tc39/proposal-decorators/issues/566\n */\nfunction sortMetadataMembersCustomOrder(members: MetadataMembers) {\n\t// Avoid sorting multiple times (that's why this is called in class\n\t// initializers rather than in the decorator directly).\n\tif (isSortedCustom.has(members)) return\n\tisSortedCustom.add(members)\n\n\t// Sort so that signal fields come first, then memo fields and\n\t// auto-accessors, finally memo accessors and methods.\n\tmembers.sort((a, b) => customSortOrder[a.type] - customSortOrder[b.type])\n}\n\nexport function signalifyIfNeeded(obj: AnyObject, stat: MemberStat) {\n\tconst {name} = stat\n\n\tif (stat.applied.get(obj))\n\t\tthrow new Error(\n\t\t\t`@signal decorated member \"${String(\n\t\t\t\tname,\n\t\t\t)}\" has already been signalified. This can happen if there are duplicated class members.`,\n\t\t)\n\n\tif (!stat.reuseExistingSignal) signalify(obj, [name, untrack(() => obj[name])])\n\n\tstat.applied.set(obj, true)\n}\n\nexport function memoifyIfNeeded(obj: AnyObject, stat: MemberStat) {\n\tconst {name, context} = stat\n\n\tif (stat.applied.get(obj))\n\t\tthrow new Error(\n\t\t\t`@memo decorated member \"${String(\n\t\t\t\tname,\n\t\t\t)}\" has already been memoified. This can happen if there are duplicated class members.`,\n\t\t)\n\n\tif (context.private && context.kind === 'getter') {\n\t\t// stat.memoGet\n\t} else {\n\t\tsetMemoifyMemberStat(stat)\n\t\tmemoify(obj, name as keyof typeof obj)\n\t}\n\n\tstat.applied.set(obj, true)\n}\n\n/** @private internal state */\nexport const effects__ = new WeakMap()\n\nexport function effectifyIfNeeded(obj: AnyObject, stat: MemberStat) {\n\tconst {name, context} = stat\n\n\tif (stat.applied.get(obj))\n\t\tthrow new Error(\n\t\t\t`@effect decorated member \"${String(\n\t\t\t\tname,\n\t\t\t)}\" has already been effectified. This can happen if there are duplicated class members.`,\n\t\t)\n\n\tif (context.kind !== 'method' && context.kind !== 'accessor') throw new Error('not possible')\n\n\tconst decoratedMember = stat.value as Function\n\tif (!decoratedMember) throw new Error('not possible')\n\n\t// In case of private members, there is no inheritance, so the decorated value is the member itself.\n\tconst privateMember = context.private && decoratedMember\n\n\t// Get any overriding/extending member from the prototype chain.\n\tconst leafmostMember = privateMember\n\t\t? privateMember\n\t\t: stat.type === 'effect-auto-accessor'\n\t\t? getInheritedDescriptor(obj, name)!.get // auto-accessor getter is the member (not the value)\n\t\t: obj[name] // method is both value and member\n\n\t// Skip base class effectify if a subclass is overriding an effect.\n\tif (leafmostMember !== decoratedMember) return\n\n\tconst effectFn = context.access.get(obj)\n\n\tif (typeof effectFn !== 'function')\n\t\tthrow new Error(`@effect decorated member \"${String(name)}\" is not a function: ${effectFn}`)\n\n\tlet effects = effects__.get(obj)\n\tif (!effects) {\n\t\t// If the object is already an Effects instance, use it directly.\n\t\tif (obj instanceof Effects) effects__.set(obj, (effects = obj))\n\t\t// Otherwise, create a new Effects instance to manage the effects.\n\t\telse effects__.set(obj, (effects = new Effects()))\n\t}\n\n\teffects.createEffect(() => effectFn.call(obj))\n\n\tstat.applied.set(obj, true)\n}\n\n/**\n * Count number of extra initializers called for the given members array\n * per instance, so we know when the last one is called, to finalize all\n * members.\n */\nconst extraInitializersCount = new WeakMap()\n\n/**\n * This finalizes memo initialization for the members tracked, in our custom\n * ordering.\n *\n * This is important because memos may depend on signals or other memos, and we\n * cannot rely on EcmaScript decorator order, or extra initializer order alone,\n * because accessor and method decorators/initializers run before field\n * decorators no matter the order in source code (give or take some details\n * regarding auto accessor ordering).\n *\n * See: https://github.com/tc39/proposal-decorators/issues/566\n */\nexport function finalizeMembersIfLast(obj: AnyObject, members: MetadataMembers) {\n\tlet count = extraInitializersCount.get(obj) ?? 0\n\textraInitializersCount.set(obj, ++count)\n\n\t// If this is not the last extra initializer called, return.\n\tif (count !== members.length) return\n\n\textraInitializersCount.set(obj, 0)\n\n\t// The last member in EcmaScript decorator extra initializer application\n\t// order has been initialized, so we can now initialize all the members we\n\t// track in our custom order.\n\tsortMetadataMembersCustomOrder(members)\n\n\t// All signal-fields, memo-fields, and memo-auto-accessors have been\n\t// initialized. Now initialize memo fields that were waiting for\n\t// those to be ready.\n\tfor (const stat of members) stat.finalize?.call(obj)\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file +{"version":3,"file":"_state.js","names":["memoify","setMemoifyMemberStat","getInheritedDescriptor","signalify","Effects","untrack","isSignalGetter__","WeakSet","isMemoGetter__","getMembers__","metadata","Object","hasOwn","classySolid_members","getMemberStat__","name","type","members","context","index","findIndex","member","existingStat","newStat","applied","WeakMap","finalize","push","isSortedCustom","customSortOrder","sortMetadataMembersCustomOrder","has","add","sort","a","b","signalifyIfNeeded__","obj","stat","get","Error","String","reuseExistingSignal","set","memoifyIfNeeded__","private","kind","effects__","effectifyIfNeeded__","decoratedMember","value","privateMember","leafmostMember","effectFn","access","effects","ctor","constructor","autoStart","autoStartEffects","undefined","createEffect","call","stopEffects","addEffectFn","extraInitializersCount","finalizeMembersIfLast__","count","length"],"sources":["../src/_state.ts"],"sourcesContent":["import type {\n\tAnyObject,\n\tMemberStat,\n\tMetadataMembers,\n\tPropKey,\n\tClassySolidMetadata,\n\tMemberType,\n} from './decorators/types.js'\nimport {memoify, setMemoifyMemberStat} from './signals/memoify.js'\nimport {getInheritedDescriptor} from 'lowclass/dist/getInheritedDescriptor.js'\nimport {signalify} from './signals/signalify.js'\nimport {Effects} from './mixins/Effectful.js'\nimport {untrack} from 'solid-js'\n\n/** Libraries that wrap classy-solid signal accessors should add their overriding getters to this set. */\nexport const isSignalGetter__ = new WeakSet()\n/** Libraries that wrap classy-solid memo accessors should add their overriding getters to this set. */\nexport const isMemoGetter__ = new WeakSet()\n\nexport function getMembers__(metadata: ClassySolidMetadata) {\n\tif (!Object.hasOwn(metadata, 'classySolid_members')) metadata.classySolid_members = [] // we don't extend the array from parent classes\n\treturn metadata.classySolid_members!\n}\n\nexport function getMemberStat__(\n\tname: PropKey,\n\ttype: MemberType,\n\tmembers: MetadataMembers,\n\tcontext: ClassMemberDecoratorContext,\n) {\n\tconst index = members.findIndex(member => member.name === name)\n\tconst existingStat = members[index]\n\tconst newStat: MemberStat = {type, name, applied: new WeakMap(), finalize: () => {}, context}\n\n\t// replace stat in the array with the latest (f.e. duplicate class members, last one wins)\n\tif (existingStat) members[index] = newStat\n\telse members.push(newStat)\n\n\treturn newStat\n}\n\nconst isSortedCustom = new WeakSet()\n\n// This is the order we want for initializing supported types of members.\nconst customSortOrder: Record = {\n\t'signal-field': 0,\n\t'memo-auto-accessor': 1,\n\t'memo-accessor': 1,\n\t'memo-method': 1,\n\t'effect-auto-accessor': 2,\n\t'effect-method': 2,\n}\n\n// This is the EcmaScript decorator extra initializer application order we don't want, for reference.\n// Anything in the same group is applied in source order within that group.\n// const ecmascriptSortOrder: Record = {\n// \t'memo-method': 0,\n// \t'memo-accessor': 0,\n// \t'effect-method': 0,\n// \t'signal-field': 1,\n// \t'memo-auto-accessor': 1,\n// \t'effect-auto-accessor': 1,\n// }\n\n/**\n * Sort signal, memo, and effect members tracked in metadata in the order of\n * our custom `memberSortOrder`.\n *\n * This is so that any members that are normally initialized *after*\n * getters/setters/methods (such as signal fields, and memo fields and\n * auto-accessors) will be initialized before getters/setters/methods (memo\n * accessors and methods), otherwise they will be initialize *after*\n * getters/setters/methods due to EcmaScript decorator application order rules.\n *\n * See: https://github.com/tc39/proposal-decorators/issues/566\n */\nfunction sortMetadataMembersCustomOrder(members: MetadataMembers) {\n\t// Avoid sorting multiple times (that's why this is called in class\n\t// initializers rather than in the decorator directly).\n\tif (isSortedCustom.has(members)) return\n\tisSortedCustom.add(members)\n\n\t// Sort so that signal fields come first, then memo fields and\n\t// auto-accessors, finally memo accessors and methods.\n\tmembers.sort((a, b) => customSortOrder[a.type] - customSortOrder[b.type])\n}\n\nexport function signalifyIfNeeded__(obj: AnyObject, stat: MemberStat) {\n\tconst {name} = stat\n\n\tif (stat.applied.get(obj))\n\t\tthrow new Error(\n\t\t\t`@signal decorated member \"${String(\n\t\t\t\tname,\n\t\t\t)}\" has already been signalified. This can happen if there are duplicated class members.`,\n\t\t)\n\n\tif (!stat.reuseExistingSignal) signalify(obj, [name, untrack(() => obj[name])])\n\n\tstat.applied.set(obj, true)\n}\n\nexport function memoifyIfNeeded__(obj: AnyObject, stat: MemberStat) {\n\tconst {name, context} = stat\n\n\tif (stat.applied.get(obj))\n\t\tthrow new Error(\n\t\t\t`@memo decorated member \"${String(\n\t\t\t\tname,\n\t\t\t)}\" has already been memoified. This can happen if there are duplicated class members.`,\n\t\t)\n\n\tif (context.private && context.kind === 'getter') {\n\t\t// stat.memoGet\n\t} else {\n\t\tsetMemoifyMemberStat(stat)\n\t\tmemoify(obj, name as keyof typeof obj)\n\t}\n\n\tstat.applied.set(obj, true)\n}\n\n/** @private internal state */\nexport const effects__ = new WeakMap()\n\nexport type AutoStartable = {\n\tautoStartEffects?: boolean\n}\n\nexport function effectifyIfNeeded__(obj: AnyObject, stat: MemberStat) {\n\tconst {name, context} = stat\n\n\tif (stat.applied.get(obj))\n\t\tthrow new Error(\n\t\t\t`@effect decorated member \"${String(\n\t\t\t\tname,\n\t\t\t)}\" has already been effectified. This can happen if there are duplicated class members.`,\n\t\t)\n\n\tif (context.kind !== 'method' && context.kind !== 'accessor') throw new Error('not possible')\n\n\tconst decoratedMember = stat.value as Function\n\tif (!decoratedMember) throw new Error('not possible')\n\n\t// In case of private members, there is no inheritance, so the decorated value is the member itself.\n\tconst privateMember = context.private && decoratedMember\n\n\t// Get any overriding/extending member from the prototype chain.\n\tconst leafmostMember = privateMember\n\t\t? privateMember\n\t\t: stat.type === 'effect-auto-accessor'\n\t\t? getInheritedDescriptor(obj, name)!.get // auto-accessor getter is the member (not the value)\n\t\t: obj[name] // method is both value and member\n\n\t// Skip base class effectify if a subclass is overriding an effect.\n\tif (leafmostMember !== decoratedMember) return\n\n\tconst effectFn = context.access.get(obj)\n\n\tif (typeof effectFn !== 'function')\n\t\tthrow new Error(`@effect decorated member \"${String(name)}\" is not a function: ${effectFn}`)\n\n\tlet effects = effects__.get(obj)\n\tif (!effects) {\n\t\t// If the object is already an Effects instance, use it directly.\n\t\tif (obj instanceof Effects) effects__.set(obj, (effects = obj))\n\t\t// Otherwise, create a new Effects instance to manage the effects.\n\t\telse effects__.set(obj, (effects = new Effects()))\n\t}\n\n\tconst ctor = obj.constructor as AutoStartable\n\tconst autoStart = ctor.autoStartEffects === undefined || ctor.autoStartEffects\n\n\tif (autoStart) effects.createEffect(() => effectFn.call(obj))\n\telse {\n\t\t// start stopped; effects will be added but not started yet if autoStart is false\n\t\teffects.stopEffects()\n\t\teffects.addEffectFn(() => effectFn.call(obj))\n\t}\n\n\tstat.applied.set(obj, true)\n}\n\n/**\n * Count number of extra initializers called for the given members array\n * per instance, so we know when the last one is called, to finalize all\n * members.\n */\nconst extraInitializersCount = new WeakMap()\n\n/**\n * This finalizes memo initialization for the members tracked, in our custom\n * ordering.\n *\n * This is important because memos may depend on signals or other memos, and we\n * cannot rely on EcmaScript decorator order, or extra initializer order alone,\n * because accessor and method decorators/initializers run before field\n * decorators no matter the order in source code (give or take some details\n * regarding auto accessor ordering).\n *\n * See: https://github.com/tc39/proposal-decorators/issues/566\n */\nexport function finalizeMembersIfLast__(obj: AnyObject, members: MetadataMembers) {\n\tlet count = extraInitializersCount.get(obj) ?? 0\n\textraInitializersCount.set(obj, ++count)\n\n\t// If this is not the last extra initializer called, return.\n\tif (count !== members.length) return\n\n\textraInitializersCount.set(obj, 0)\n\n\t// The last member in EcmaScript decorator extra initializer application\n\t// order has been initialized, so we can now initialize all the members we\n\t// track in our custom order.\n\tsortMetadataMembersCustomOrder(members)\n\n\t// All signal-fields, memo-fields, and memo-auto-accessors have been\n\t// initialized. Now initialize memo fields that were waiting for\n\t// those to be ready.\n\tfor (const stat of members) stat.finalize?.call(obj)\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/dist/decorators/effect.d.ts.map b/dist/decorators/effect.d.ts.map index f8c7001..adc53f2 100644 --- a/dist/decorators/effect.d.ts.map +++ b/dist/decorators/effect.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"effect.d.ts","sourceRoot":"","sources":["../../src/decorators/effect.ts"],"names":[],"mappings":"AAEA,OAAO,oBAAoB,CAAA;AAE3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkEG;AAEH,wBAAgB,MAAM,CACrB,KAAK,EAAE,QAAQ,GAAG,4BAA4B,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,EACnE,OAAO,EAAE,2BAA2B,GAAG,6BAA6B,QA0BpE;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,QAIvC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,QAItC"} \ No newline at end of file +{"version":3,"file":"effect.d.ts","sourceRoot":"","sources":["../../src/decorators/effect.ts"],"names":[],"mappings":"AAEA,OAAO,oBAAoB,CAAA;AAE3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkEG;AACH,wBAAgB,MAAM,CACrB,KAAK,EAAE,QAAQ,GAAG,4BAA4B,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,EACnE,OAAO,EAAE,2BAA2B,GAAG,6BAA6B,QA0BpE;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,QAIvC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,QAItC"} \ No newline at end of file diff --git a/dist/decorators/effect.js b/dist/decorators/effect.js index d1d4490..b361744 100644 --- a/dist/decorators/effect.js +++ b/dist/decorators/effect.js @@ -1,4 +1,4 @@ -import { effectifyIfNeeded, finalizeMembersIfLast, getMemberStat, getMembers, effects__ } from '../_state.js'; +import { effectifyIfNeeded__, finalizeMembersIfLast__, getMemberStat__, getMembers__, effects__ } from '../_state.js'; import './metadata-shim.js'; /** @@ -68,7 +68,6 @@ import './metadata-shim.js'; * fun.stopEffects() * ``` */ - export function effect(value, context) { if (context.static) throw new Error('@effect is not supported on static members.'); const { @@ -76,14 +75,14 @@ export function effect(value, context) { name } = context; const metadata = context.metadata; - const members = getMembers(metadata); + const members = getMembers__(metadata); if (!(kind === 'method' || kind === 'accessor')) throw new Error('@effect can only be used on methods or function-valued auto accessors'); - const stat = kind === 'accessor' ? getMemberStat(name, 'effect-auto-accessor', members, context) : getMemberStat(name, 'effect-method', members, context); + const stat = kind === 'accessor' ? getMemberStat__(name, 'effect-auto-accessor', members, context) : getMemberStat__(name, 'effect-method', members, context); stat.finalize = function () { - effectifyIfNeeded(this, stat); + effectifyIfNeeded__(this, stat); }; context.addInitializer(function () { - finalizeMembersIfLast(this, members); + finalizeMembersIfLast__(this, members); }); if (kind === 'method') stat.value = value;else if (kind === 'accessor') stat.value = value.get; } diff --git a/dist/decorators/effect.js.map b/dist/decorators/effect.js.map index 2c7345e..a3c2776 100644 --- a/dist/decorators/effect.js.map +++ b/dist/decorators/effect.js.map @@ -1 +1 @@ -{"version":3,"file":"effect.js","names":["effectifyIfNeeded","finalizeMembersIfLast","getMemberStat","getMembers","effects__","effect","value","context","static","Error","kind","name","metadata","members","stat","finalize","addInitializer","get","startEffects","obj","effects","stopEffects"],"sources":["../../src/decorators/effect.ts"],"sourcesContent":["import {effectifyIfNeeded, finalizeMembersIfLast, getMemberStat, getMembers, effects__} from '../_state.js'\nimport type {AnyObject, ClassySolidMetadata} from './types.js'\nimport './metadata-shim.js'\n\n/**\n * Decorator for making Solid.js effects out of methods or function-valued\n * properties. This is more convenient than calling `this.createEffect()` in the\n * constructor or a class method, reducing boilerplate. Pair this with `@signal`\n * and `@memo` to make reactive classes with less code.\n *\n * The `@effect` decorator can be used on methods or auto accessors. Methods are\n * the recommended usage.\n *\n * When used on auto accessors, the auto accessor value must be a function. Note\n * that currently the auto accessor function value cannot be changed (if you\n * change it, the new function will not be used).\n *\n * Example:\n *\n * ```ts\n * import { effect, signal, stopEffects } from 'classy-solid'\n * import { createSignal } from 'solid-js'\n *\n * const [a, setA] = createSignal(1)\n *\n * class Funkalicious {\n * @signal b = 2\n *\n * @effect logSum() {\n * console.log('Sum:', a() + this.b)\n * }\n *\n * // Not recommended, but supported (more concise for simple effects):\n * @effect accessor logA = () => console.log('a:', a())\n * }\n *\n * const fun = new Funkalicious() // logs \"Sum: 3\"\n *\n * setA(5) // logs \"Sum: 7\", \"a: 5\"\n * fun.b = 10 // logs \"Sum: 15\"\n *\n * // Later, clean up when done...\n * stopEffects(fun)\n * ```\n *\n * When extending from Effectful() or Effects, the `stopEffects` method can\n * be used instead of the standalone `stopEffects()` function:\n *\n * ```ts\n * import { effect, signal, Effects } from 'classy-solid'\n * import { createSignal } from 'solid-js'\n *\n * const [a, setA] = createSignal(1)\n *\n * class Funkalicious extends Effects {\n * @signal b = 2\n *\n * @effect logSum() {\n * console.log('Sum:', a() + this.b)\n * }\n * }\n *\n * const fun = new Funkalicious() // logs \"Sum: 3\"\n *\n * setA(5) // logs \"Sum: 7\"\n * fun.b = 10 // logs \"Sum: 15\"\n *\n * // Later, clean up when done...\n * fun.stopEffects()\n * ```\n */\n\nexport function effect(\n\tvalue: Function | ClassAccessorDecoratorTarget void>,\n\tcontext: ClassMethodDecoratorContext | ClassAccessorDecoratorContext,\n) {\n\tif (context.static) throw new Error('@effect is not supported on static members.')\n\n\tconst {kind, name} = context\n\tconst metadata = context.metadata as ClassySolidMetadata\n\tconst members = getMembers(metadata)\n\n\tif (!(kind === 'method' || kind === 'accessor'))\n\t\tthrow new Error('@effect can only be used on methods or function-valued auto accessors')\n\n\tconst stat =\n\t\tkind === 'accessor'\n\t\t\t? getMemberStat(name, 'effect-auto-accessor', members, context)\n\t\t\t: getMemberStat(name, 'effect-method', members, context)\n\n\tstat.finalize = function () {\n\t\teffectifyIfNeeded(this as AnyObject, stat)\n\t}\n\n\tcontext.addInitializer(function () {\n\t\tfinalizeMembersIfLast(this as AnyObject, members)\n\t})\n\n\tif (kind === 'method') stat.value = value\n\telse if (kind === 'accessor') stat.value = (value as ClassAccessorDecoratorTarget void>).get\n}\n\n/**\n * Starts all Solid.js effects created by the `@effect` decorator on the given\n * object. This can be used to restart effects that were previously stopped with\n * `stopEffects()`.\n *\n * Effects are created and started automatically, so this only needs to be\n * called if you have previously stopped the effects and want to start them\n * again.\n */\nexport function startEffects(obj: object) {\n\tlet effects = effects__.get(obj as AnyObject)\n\tif (!effects) return\n\teffects.startEffects()\n}\n\n/**\n * Stops all Solid.js effects created by the `@effect` decorator on the given\n * object. Use this once you are done with the instance and need to clean up.\n *\n * This does not needed to be used if the object is created in a reactive\n * context (such as inside a Solid.js component, or a nested effect), as those\n * effects will be cleaned up automatically when the owner context is cleaned\n * up.\n *\n * Effects that have been stopped can later be restarted by calling\n * `startEffects(obj)`.\n */\nexport function stopEffects(obj: object) {\n\tconst effects = effects__.get(obj as AnyObject)\n\tif (!effects) return\n\teffects.stopEffects()\n}\n"],"mappings":"AAAA,SAAQA,iBAAiB,EAAEC,qBAAqB,EAAEC,aAAa,EAAEC,UAAU,EAAEC,SAAS,QAAO,cAAc;AAE3G,OAAO,oBAAoB;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO,SAASC,MAAMA,CACrBC,KAAmE,EACnEC,OAAoE,EACnE;EACD,IAAIA,OAAO,CAACC,MAAM,EAAE,MAAM,IAAIC,KAAK,CAAC,6CAA6C,CAAC;EAElF,MAAM;IAACC,IAAI;IAAEC;EAAI,CAAC,GAAGJ,OAAO;EAC5B,MAAMK,QAAQ,GAAGL,OAAO,CAACK,QAA+B;EACxD,MAAMC,OAAO,GAAGV,UAAU,CAACS,QAAQ,CAAC;EAEpC,IAAI,EAAEF,IAAI,KAAK,QAAQ,IAAIA,IAAI,KAAK,UAAU,CAAC,EAC9C,MAAM,IAAID,KAAK,CAAC,uEAAuE,CAAC;EAEzF,MAAMK,IAAI,GACTJ,IAAI,KAAK,UAAU,GAChBR,aAAa,CAACS,IAAI,EAAE,sBAAsB,EAAEE,OAAO,EAAEN,OAAO,CAAC,GAC7DL,aAAa,CAACS,IAAI,EAAE,eAAe,EAAEE,OAAO,EAAEN,OAAO,CAAC;EAE1DO,IAAI,CAACC,QAAQ,GAAG,YAAY;IAC3Bf,iBAAiB,CAAC,IAAI,EAAec,IAAI,CAAC;EAC3C,CAAC;EAEDP,OAAO,CAACS,cAAc,CAAC,YAAY;IAClCf,qBAAqB,CAAC,IAAI,EAAeY,OAAO,CAAC;EAClD,CAAC,CAAC;EAEF,IAAIH,IAAI,KAAK,QAAQ,EAAEI,IAAI,CAACR,KAAK,GAAGA,KAAK,MACpC,IAAII,IAAI,KAAK,UAAU,EAAEI,IAAI,CAACR,KAAK,GAAIA,KAAK,CAAuDW,GAAG;AAC5G;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,YAAYA,CAACC,GAAW,EAAE;EACzC,IAAIC,OAAO,GAAGhB,SAAS,CAACa,GAAG,CAACE,GAAgB,CAAC;EAC7C,IAAI,CAACC,OAAO,EAAE;EACdA,OAAO,CAACF,YAAY,CAAC,CAAC;AACvB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASG,WAAWA,CAACF,GAAW,EAAE;EACxC,MAAMC,OAAO,GAAGhB,SAAS,CAACa,GAAG,CAACE,GAAgB,CAAC;EAC/C,IAAI,CAACC,OAAO,EAAE;EACdA,OAAO,CAACC,WAAW,CAAC,CAAC;AACtB","ignoreList":[]} \ No newline at end of file +{"version":3,"file":"effect.js","names":["effectifyIfNeeded__","finalizeMembersIfLast__","getMemberStat__","getMembers__","effects__","effect","value","context","static","Error","kind","name","metadata","members","stat","finalize","addInitializer","get","startEffects","obj","effects","stopEffects"],"sources":["../../src/decorators/effect.ts"],"sourcesContent":["import {effectifyIfNeeded__, finalizeMembersIfLast__, getMemberStat__, getMembers__, effects__} from '../_state.js'\nimport type {AnyObject, ClassySolidMetadata} from './types.js'\nimport './metadata-shim.js'\n\n/**\n * Decorator for making Solid.js effects out of methods or function-valued\n * properties. This is more convenient than calling `this.createEffect()` in the\n * constructor or a class method, reducing boilerplate. Pair this with `@signal`\n * and `@memo` to make reactive classes with less code.\n *\n * The `@effect` decorator can be used on methods or auto accessors. Methods are\n * the recommended usage.\n *\n * When used on auto accessors, the auto accessor value must be a function. Note\n * that currently the auto accessor function value cannot be changed (if you\n * change it, the new function will not be used).\n *\n * Example:\n *\n * ```ts\n * import { effect, signal, stopEffects } from 'classy-solid'\n * import { createSignal } from 'solid-js'\n *\n * const [a, setA] = createSignal(1)\n *\n * class Funkalicious {\n * @signal b = 2\n *\n * @effect logSum() {\n * console.log('Sum:', a() + this.b)\n * }\n *\n * // Not recommended, but supported (more concise for simple effects):\n * @effect accessor logA = () => console.log('a:', a())\n * }\n *\n * const fun = new Funkalicious() // logs \"Sum: 3\"\n *\n * setA(5) // logs \"Sum: 7\", \"a: 5\"\n * fun.b = 10 // logs \"Sum: 15\"\n *\n * // Later, clean up when done...\n * stopEffects(fun)\n * ```\n *\n * When extending from Effectful() or Effects, the `stopEffects` method can\n * be used instead of the standalone `stopEffects()` function:\n *\n * ```ts\n * import { effect, signal, Effects } from 'classy-solid'\n * import { createSignal } from 'solid-js'\n *\n * const [a, setA] = createSignal(1)\n *\n * class Funkalicious extends Effects {\n * @signal b = 2\n *\n * @effect logSum() {\n * console.log('Sum:', a() + this.b)\n * }\n * }\n *\n * const fun = new Funkalicious() // logs \"Sum: 3\"\n *\n * setA(5) // logs \"Sum: 7\"\n * fun.b = 10 // logs \"Sum: 15\"\n *\n * // Later, clean up when done...\n * fun.stopEffects()\n * ```\n */\nexport function effect(\n\tvalue: Function | ClassAccessorDecoratorTarget void>,\n\tcontext: ClassMethodDecoratorContext | ClassAccessorDecoratorContext,\n) {\n\tif (context.static) throw new Error('@effect is not supported on static members.')\n\n\tconst {kind, name} = context\n\tconst metadata = context.metadata as ClassySolidMetadata\n\tconst members = getMembers__(metadata)\n\n\tif (!(kind === 'method' || kind === 'accessor'))\n\t\tthrow new Error('@effect can only be used on methods or function-valued auto accessors')\n\n\tconst stat =\n\t\tkind === 'accessor'\n\t\t\t? getMemberStat__(name, 'effect-auto-accessor', members, context)\n\t\t\t: getMemberStat__(name, 'effect-method', members, context)\n\n\tstat.finalize = function () {\n\t\teffectifyIfNeeded__(this as AnyObject, stat)\n\t}\n\n\tcontext.addInitializer(function () {\n\t\tfinalizeMembersIfLast__(this as AnyObject, members)\n\t})\n\n\tif (kind === 'method') stat.value = value\n\telse if (kind === 'accessor') stat.value = (value as ClassAccessorDecoratorTarget void>).get\n}\n\n/**\n * Starts all Solid.js effects created by the `@effect` decorator on the given\n * object. This can be used to restart effects that were previously stopped with\n * `stopEffects()`.\n *\n * Effects are created and started automatically, so this only needs to be\n * called if you have previously stopped the effects and want to start them\n * again.\n */\nexport function startEffects(obj: object) {\n\tlet effects = effects__.get(obj as AnyObject)\n\tif (!effects) return\n\teffects.startEffects()\n}\n\n/**\n * Stops all Solid.js effects created by the `@effect` decorator on the given\n * object. Use this once you are done with the instance and need to clean up.\n *\n * This does not needed to be used if the object is created in a reactive\n * context (such as inside a Solid.js component, or a nested effect), as those\n * effects will be cleaned up automatically when the owner context is cleaned\n * up.\n *\n * Effects that have been stopped can later be restarted by calling\n * `startEffects(obj)`.\n */\nexport function stopEffects(obj: object) {\n\tconst effects = effects__.get(obj as AnyObject)\n\tif (!effects) return\n\teffects.stopEffects()\n}\n"],"mappings":"AAAA,SAAQA,mBAAmB,EAAEC,uBAAuB,EAAEC,eAAe,EAAEC,YAAY,EAAEC,SAAS,QAAO,cAAc;AAEnH,OAAO,oBAAoB;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,MAAMA,CACrBC,KAAmE,EACnEC,OAAoE,EACnE;EACD,IAAIA,OAAO,CAACC,MAAM,EAAE,MAAM,IAAIC,KAAK,CAAC,6CAA6C,CAAC;EAElF,MAAM;IAACC,IAAI;IAAEC;EAAI,CAAC,GAAGJ,OAAO;EAC5B,MAAMK,QAAQ,GAAGL,OAAO,CAACK,QAA+B;EACxD,MAAMC,OAAO,GAAGV,YAAY,CAACS,QAAQ,CAAC;EAEtC,IAAI,EAAEF,IAAI,KAAK,QAAQ,IAAIA,IAAI,KAAK,UAAU,CAAC,EAC9C,MAAM,IAAID,KAAK,CAAC,uEAAuE,CAAC;EAEzF,MAAMK,IAAI,GACTJ,IAAI,KAAK,UAAU,GAChBR,eAAe,CAACS,IAAI,EAAE,sBAAsB,EAAEE,OAAO,EAAEN,OAAO,CAAC,GAC/DL,eAAe,CAACS,IAAI,EAAE,eAAe,EAAEE,OAAO,EAAEN,OAAO,CAAC;EAE5DO,IAAI,CAACC,QAAQ,GAAG,YAAY;IAC3Bf,mBAAmB,CAAC,IAAI,EAAec,IAAI,CAAC;EAC7C,CAAC;EAEDP,OAAO,CAACS,cAAc,CAAC,YAAY;IAClCf,uBAAuB,CAAC,IAAI,EAAeY,OAAO,CAAC;EACpD,CAAC,CAAC;EAEF,IAAIH,IAAI,KAAK,QAAQ,EAAEI,IAAI,CAACR,KAAK,GAAGA,KAAK,MACpC,IAAII,IAAI,KAAK,UAAU,EAAEI,IAAI,CAACR,KAAK,GAAIA,KAAK,CAAuDW,GAAG;AAC5G;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,YAAYA,CAACC,GAAW,EAAE;EACzC,IAAIC,OAAO,GAAGhB,SAAS,CAACa,GAAG,CAACE,GAAgB,CAAC;EAC7C,IAAI,CAACC,OAAO,EAAE;EACdA,OAAO,CAACF,YAAY,CAAC,CAAC;AACvB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASG,WAAWA,CAACF,GAAW,EAAE;EACxC,MAAMC,OAAO,GAAGhB,SAAS,CAACa,GAAG,CAACE,GAAgB,CAAC;EAC/C,IAAI,CAACC,OAAO,EAAE;EACdA,OAAO,CAACC,WAAW,CAAC,CAAC;AACtB","ignoreList":[]} \ No newline at end of file diff --git a/dist/decorators/effect.test.js b/dist/decorators/effect.test.js index a18de77..d587a88 100644 --- a/dist/decorators/effect.test.js +++ b/dist/decorators/effect.test.js @@ -32,23 +32,80 @@ describe('classy-solid', () => { const fun = new Funkalicious(); basicTest(fun, setA); }); + it('runs a basic public method effect, using stopEffects, with autoStart false', () => { + let _initProto2, _init_b2, _init_extra_b2; + const [a, setA] = createSignal(1); + class Funkalicious { + static { + [_init_b2, _init_extra_b2, _initProto2] = _applyDecs(this, [], [[signal, 0, "b"], [effect, 2, "logSum"]]).e; + } + constructor() { + _init_extra_b2(this); + } + last = (_initProto2(this), null); + runs = 0; + b = _init_b2(this, 2); + static autoStartEffects = false; + logSum() { + this.runs++; + this.last = a() + this.b; + } + } + const fun = new Funkalicious(); + + // Ensure effects didn't start yet. + expect(fun.last === null).toBe(true); + expect(fun.runs).toBe(0); + startEffects(fun); // manually start first + + basicTest(fun, setA); + }); + it('works with both static autoStartEffects = false and Effects class without calling start/stopEffects methods', () => { + let _initProto3, _init_b3, _init_extra_b3; + const [a, setA] = createSignal(1); + class Funkalicious extends Effects { + static { + [_init_b3, _init_extra_b3, _initProto3] = _applyDecs(this, [], [[signal, 0, "b"], [effect, 2, "logSum"]], 0, void 0, Effects).e; + } + constructor(...args) { + super(...args); + _init_extra_b3(this); + } + last = (_initProto3(this), null); + runs = 0; + b = _init_b3(this, 2); + static autoStartEffects = false; + logSum() { + this.runs++; + this.last = a() + this.b; + } + } + const fun = new Funkalicious(); + + // Ensure effects didn't start yet. + expect(fun.last === null).toBe(true); + expect(fun.runs).toBe(0); + startEffects(fun); // manually start first + + basicTest(fun, setA, true); + }); it('runs a basic private method effect, using stopEffects', () => { - let _initProto2, _init_b2, _init_extra_b2, _call_logSum; + let _initProto4, _init_b4, _init_extra_b4, _call_logSum; const [a, setA] = createSignal(1); class Funkalicious { static { - [_call_logSum, _init_b2, _init_extra_b2, _initProto2] = _applyDecs(this, [], [[signal, 0, "b"], [effect, 2, "logSum", function () { + [_call_logSum, _init_b4, _init_extra_b4, _initProto4] = _applyDecs(this, [], [[signal, 0, "b"], [effect, 2, "logSum", function () { this.runs++; this.last = a() + this.b; }]], 0, _ => #logSum in _).e; } constructor() { - _init_extra_b2(this); + _init_extra_b4(this); } #logSum = _call_logSum; - last = (_initProto2(this), null); + last = (_initProto4(this), null); runs = 0; - b = _init_b2(this, 2); + b = _init_b4(this, 2); // @ts-expect-error unused private method } @@ -56,21 +113,21 @@ describe('classy-solid', () => { basicTest(fun, setA); }); it('runs a basic private auto accessor effect, using stopEffects', () => { - let _init_b3, _init_extra_b3, _init_logSum, _get_logSum, _set_logSum, _init_extra_logSum; + let _init_b5, _init_extra_b5, _init_logSum, _get_logSum, _set_logSum, _init_extra_logSum; const [a, setA] = createSignal(1); class Funkalicious { static { - [_init_logSum, _get_logSum, _set_logSum, _init_extra_logSum, _init_b3, _init_extra_b3] = _applyDecs(this, [], [[signal, 0, "b"], [effect, 1, "logSum", o => o.#A, (o, v) => o.#A = v]], 0, _ => #logSum in _).e; + [_init_logSum, _get_logSum, _set_logSum, _init_extra_logSum, _init_b5, _init_extra_b5] = _applyDecs(this, [], [[signal, 0, "b"], [effect, 1, "logSum", o => o.#A, (o, v) => o.#A = v]], 0, _ => #logSum in _).e; } constructor() { _init_extra_logSum(this); } last = null; runs = 0; - b = _init_b3(this, 2); + b = _init_b5(this, 2); // @ts-expect-error unused private member - #A = (_init_extra_b3(this), _init_logSum(this, () => { + #A = (_init_extra_b5(this), _init_logSum(this, () => { this.runs++; this.last = a() + this.b; })); @@ -85,19 +142,19 @@ describe('classy-solid', () => { basicTest(fun, setA); }); it('runs a basic public method effect, using Effects', () => { - let _initProto3, _init_b4, _init_extra_b4; + let _initProto5, _init_b6, _init_extra_b6; const [a, setA] = createSignal(1); class Funkalicious extends Effects { static { - [_init_b4, _init_extra_b4, _initProto3] = _applyDecs(this, [], [[signal, 0, "b"], [effect, 2, "logSum"]], 0, void 0, Effects).e; + [_init_b6, _init_extra_b6, _initProto5] = _applyDecs(this, [], [[signal, 0, "b"], [effect, 2, "logSum"]], 0, void 0, Effects).e; } constructor(...args) { super(...args); - _init_extra_b4(this); + _init_extra_b6(this); } - last = (_initProto3(this), null); + last = (_initProto5(this), null); runs = 0; - b = _init_b4(this, 2); + b = _init_b6(this, 2); logSum() { this.runs++; this.last = a() + this.b; @@ -107,23 +164,23 @@ describe('classy-solid', () => { basicTest(fun, setA); }); it('runs a basic private method effect, using Effects', () => { - let _initProto4, _init_b5, _init_extra_b5, _call_logSum2; + let _initProto6, _init_b7, _init_extra_b7, _call_logSum2; const [a, setA] = createSignal(1); class Funkalicious extends Effects { static { - [_call_logSum2, _init_b5, _init_extra_b5, _initProto4] = _applyDecs(this, [], [[signal, 0, "b"], [effect, 2, "logSum", function () { + [_call_logSum2, _init_b7, _init_extra_b7, _initProto6] = _applyDecs(this, [], [[signal, 0, "b"], [effect, 2, "logSum", function () { this.runs++; this.last = a() + this.b; }]], 0, _ => #logSum in _, Effects).e; } constructor(...args) { super(...args); - _init_extra_b5(this); + _init_extra_b7(this); } #logSum = _call_logSum2; - last = (_initProto4(this), null); + last = (_initProto6(this), null); runs = 0; - b = _init_b5(this, 2); + b = _init_b7(this, 2); // @ts-expect-error unused private method } @@ -131,11 +188,11 @@ describe('classy-solid', () => { basicTest(fun, setA); }); it('runs a basic private auto accessor effect, using Effects', () => { - let _init_b6, _init_extra_b6, _init_logSum2, _get_logSum2, _set_logSum2, _init_extra_logSum2; + let _init_b8, _init_extra_b8, _init_logSum2, _get_logSum2, _set_logSum2, _init_extra_logSum2; const [a, setA] = createSignal(1); class Funkalicious extends Effects { static { - [_init_logSum2, _get_logSum2, _set_logSum2, _init_extra_logSum2, _init_b6, _init_extra_b6] = _applyDecs(this, [], [[signal, 0, "b"], [effect, 1, "logSum", o => o.#A, (o, v) => o.#A = v]], 0, _ => #logSum in _, Effects).e; + [_init_logSum2, _get_logSum2, _set_logSum2, _init_extra_logSum2, _init_b8, _init_extra_b8] = _applyDecs(this, [], [[signal, 0, "b"], [effect, 1, "logSum", o => o.#A, (o, v) => o.#A = v]], 0, _ => #logSum in _, Effects).e; } constructor(...args) { super(...args); @@ -143,10 +200,10 @@ describe('classy-solid', () => { } last = null; runs = 0; - b = _init_b6(this, 2); + b = _init_b8(this, 2); // @ts-expect-error unused private member - #A = (_init_extra_b6(this), _init_logSum2(this, () => { + #A = (_init_extra_b8(this), _init_logSum2(this, () => { this.runs++; this.last = a() + this.b; })); @@ -160,7 +217,7 @@ describe('classy-solid', () => { const fun = new Funkalicious(); basicTest(fun, setA); }); - function basicTest(fun, setA) { + function basicTest(fun, setA, useFunctions = false) { expect(fun.last).toBe(1 + 2); expect(fun.runs).toBe(1); setA(5); @@ -169,48 +226,48 @@ describe('classy-solid', () => { fun.b = 10; expect(fun.last).toBe(5 + 10); expect(fun.runs).toBe(3); - fun instanceof Effects ? fun.stopEffects() : stopEffects(fun); + fun instanceof Effects && !useFunctions ? fun.stopEffects() : stopEffects(fun); setA(1); fun.b = 1; expect(fun.last).toBe(5 + 10); expect(fun.runs).toBe(3); - fun instanceof Effects ? fun.startEffects() : startEffects(fun); + fun instanceof Effects && !useFunctions ? fun.startEffects() : startEffects(fun); expect(fun.last).toBe(1 + 1); expect(fun.runs).toBe(4); // Ensure no duplicate effects - fun instanceof Effects ? fun.startEffects() : startEffects(fun); + fun instanceof Effects && !useFunctions ? fun.startEffects() : startEffects(fun); expect(fun.last).toBe(1 + 1); expect(fun.runs).toBe(4); setA(3); expect(fun.last).toBe(3 + 1); expect(fun.runs).toBe(5); - fun instanceof Effects ? fun.stopEffects() : stopEffects(fun); + fun instanceof Effects && !useFunctions ? fun.stopEffects() : stopEffects(fun); setA(10); fun.b = 20; expect(fun.last).toBe(3 + 1); expect(fun.runs).toBe(5); } it('runs multiple effects independently, using Effects', () => { - let _initProto5, _init_b7, _init_extra_b7, _init_eff, _init_extra_eff; + let _initProto7, _init_b9, _init_extra_b9, _init_eff, _init_extra_eff; const [a, setA] = createSignal(1); let sum1 = 0; let sum2 = 0; let runs = 0; class Doubler extends Effects { static { - [_init_eff, _init_extra_eff, _init_b7, _init_extra_b7, _initProto5] = _applyDecs(this, [], [[signal, 0, "b"], [effect, 2, "eff1"], [effect, 1, "eff2"]], 0, void 0, Effects).e; + [_init_eff, _init_extra_eff, _init_b9, _init_extra_b9, _initProto7] = _applyDecs(this, [], [[signal, 0, "b"], [effect, 2, "eff1"], [effect, 1, "eff2"]], 0, void 0, Effects).e; } constructor(...args) { super(...args); _init_extra_eff(this); } - b = (_initProto5(this), _init_b7(this, 3)); + b = (_initProto7(this), _init_b9(this, 3)); eff1() { runs++; sum1 = a() + this.b; } - #A = (_init_extra_b7(this), _init_eff(this, () => { + #A = (_init_extra_b9(this), _init_eff(this, () => { runs++; sum2 = (a() + this.b) * 2; })); @@ -241,24 +298,24 @@ describe('classy-solid', () => { expect(runs).toBe(6); }); it('runs multiple effects independently, using stopEffects', () => { - let _initProto6, _init_b8, _init_extra_b8, _init_eff2, _init_extra_eff2; + let _initProto8, _init_b0, _init_extra_b0, _init_eff2, _init_extra_eff2; const [a, setA] = createSignal(1); let sum1 = 0; let sum2 = 0; let runs = 0; class Doubler { static { - [_init_eff2, _init_extra_eff2, _init_b8, _init_extra_b8, _initProto6] = _applyDecs(this, [], [[signal, 0, "b"], [effect, 2, "eff1"], [effect, 1, "eff2"]]).e; + [_init_eff2, _init_extra_eff2, _init_b0, _init_extra_b0, _initProto8] = _applyDecs(this, [], [[signal, 0, "b"], [effect, 2, "eff1"], [effect, 1, "eff2"]]).e; } constructor() { _init_extra_eff2(this); } - b = (_initProto6(this), _init_b8(this, 3)); + b = (_initProto8(this), _init_b0(this, 3)); eff1() { runs++; sum1 = a() + this.b; } - #A = (_init_extra_b8(this), _init_eff2(this, () => { + #A = (_init_extra_b0(this), _init_eff2(this, () => { runs++; sum2 = (a() + this.b) * 2; })); @@ -289,18 +346,18 @@ describe('classy-solid', () => { expect(runs).toBe(6); }); it('reruns effect when memos change inside effect, using Effects', () => { - let _initProto7; + let _initProto9; const [a, setA] = createSignal(1); const [b, setB] = createSignal(2); let memoVal = 0; let effectRuns = 0; class MemoUser extends Effects { static { - [_initProto7] = _applyDecs(this, [], [[memo, 3, "sum"], [effect, 2, "report"]], 0, void 0, Effects).e; + [_initProto9] = _applyDecs(this, [], [[memo, 3, "sum"], [effect, 2, "report"]], 0, void 0, Effects).e; } constructor(...args) { super(...args); - _initProto7(this); + _initProto9(this); } get sum() { return a() + b(); @@ -331,17 +388,17 @@ describe('classy-solid', () => { expect(effectRuns).toBe(3); }); it('reruns effect when memos change inside effect, using stopEffects', () => { - let _initProto8; + let _initProto0; const [a, setA] = createSignal(1); const [b, setB] = createSignal(2); let memoVal = 0; let effectRuns = 0; class MemoUser { static { - [_initProto8] = _applyDecs(this, [], [[memo, 3, "sum"], [effect, 2, "report"]]).e; + [_initProto0] = _applyDecs(this, [], [[memo, 3, "sum"], [effect, 2, "report"]]).e; } constructor() { - _initProto8(this); + _initProto0(this); } get sum() { return a() + b(); @@ -371,22 +428,22 @@ describe('classy-solid', () => { expect(memoVal).toBe(11); }); it('runs an effect on auto accessor, using Effects', () => { - let _init_b9, _init_extra_b9, _init_compute, _init_extra_compute; + let _init_b1, _init_extra_b1, _init_compute, _init_extra_compute; const [a, setA] = createSignal(1); class AccessorClass extends Effects { static { - [_init_compute, _init_extra_compute, _init_b9, _init_extra_b9] = _applyDecs(this, [], [[signal, 0, "b"], [effect, 1, "compute"]], 0, void 0, Effects).e; + [_init_compute, _init_extra_compute, _init_b1, _init_extra_b1] = _applyDecs(this, [], [[signal, 0, "b"], [effect, 1, "compute"]], 0, void 0, Effects).e; } constructor(...args) { super(...args); _init_extra_compute(this); } - b = _init_b9(this, 2); + b = _init_b1(this, 2); // Stick this here to ensure that nested constructor doesn't // interfere with decorator behavior mid-way through initialization // of the wrapper parent class (tested with a subclass) - child = (_init_extra_b9(this), this.constructor !== AccessorClass ? new AccessorClass() : null); + child = (_init_extra_b1(this), this.constructor !== AccessorClass ? new AccessorClass() : null); result = 0; runs = 0; #A = _init_compute(this, () => { @@ -417,21 +474,21 @@ describe('classy-solid', () => { expect(o.runs).toBe(3); }); it('runs an effect on auto accessor, using stopEffects', () => { - let _init_b0, _init_extra_b0, _init_compute2, _init_extra_compute2; + let _init_b10, _init_extra_b10, _init_compute2, _init_extra_compute2; const [a, setA] = createSignal(1); class AccessorClass { static { - [_init_compute2, _init_extra_compute2, _init_b0, _init_extra_b0] = _applyDecs(this, [], [[signal, 0, "b"], [effect, 1, "compute"]]).e; + [_init_compute2, _init_extra_compute2, _init_b10, _init_extra_b10] = _applyDecs(this, [], [[signal, 0, "b"], [effect, 1, "compute"]]).e; } constructor() { _init_extra_compute2(this); } - b = _init_b0(this, 2); + b = _init_b10(this, 2); // Stick this here to ensure that nested constructor doesn't // interfere with decorator behavior mid-way through initialization // of the wrapper parent class (tested with a subclass) - child = (_init_extra_b0(this), this.constructor !== AccessorClass ? new AccessorClass() : null); + child = (_init_extra_b10(this), this.constructor !== AccessorClass ? new AccessorClass() : null); result = 0; runs = 0; #A = _init_compute2(this, () => { @@ -462,18 +519,18 @@ describe('classy-solid', () => { expect(o.runs).toBe(3); }); it('managed within an existing root, without Effects, without stopEffects', () => { - let _initProto9, _init_b1, _init_extra_b1; + let _initProto1, _init_b11, _init_extra_b11; const [a, setA] = createSignal(1); let observed = 0; let runs = 0; class PlainYogurt { static { - [_init_b1, _init_extra_b1, _initProto9] = _applyDecs(this, [], [[signal, 0, "b"], [effect, 2, "sum"]]).e; + [_init_b11, _init_extra_b11, _initProto1] = _applyDecs(this, [], [[signal, 0, "b"], [effect, 2, "sum"]]).e; } constructor() { - _init_extra_b1(this); + _init_extra_b11(this); } - b = (_initProto9(this), _init_b1(this, 2)); + b = (_initProto1(this), _init_b11(this, 2)); sum() { runs++; observed = a() + this.b; @@ -505,21 +562,21 @@ describe('classy-solid', () => { }); describe('subclass effect overriding/extending', () => { it('runs subclass effect auto accessor extending base effect auto accessor with super', () => { - let _init_b10, _init_extra_b10, _init_eff3, _init_extra_eff3, _init_eff4, _init_extra_eff4; + let _init_b12, _init_extra_b12, _init_eff3, _init_extra_eff3, _init_eff4, _init_extra_eff4; const [a, setA] = createSignal(1); let baseRuns = 0; let subRuns = 0; let observed = 0; class Base extends Effects { static { - [_init_eff3, _init_extra_eff3, _init_b10, _init_extra_b10] = _applyDecs(this, [], [[signal, 0, "b"], [effect, 1, "eff"]], 0, void 0, Effects).e; + [_init_eff3, _init_extra_eff3, _init_b12, _init_extra_b12] = _applyDecs(this, [], [[signal, 0, "b"], [effect, 1, "eff"]], 0, void 0, Effects).e; } constructor(...args) { super(...args); _init_extra_eff3(this); } - b = _init_b10(this, 2); - #A = (_init_extra_b10(this), _init_eff3(this, () => { + b = _init_b12(this, 2); + #A = (_init_extra_b12(this), _init_eff3(this, () => { baseRuns++; observed = a() + this.b; })); @@ -569,21 +626,21 @@ describe('classy-solid', () => { expect(observed).toBe(10 + 5 + 10); }); it('runs subclass effect auto accessor overriding base effect auto accessor without super', () => { - let _init_b11, _init_extra_b11, _init_eff5, _init_extra_eff5, _init_eff6, _init_extra_eff6; + let _init_b13, _init_extra_b13, _init_eff5, _init_extra_eff5, _init_eff6, _init_extra_eff6; const [a, setA] = createSignal(1); let baseRuns = 0; let subRuns = 0; let observed = 0; class Base extends Effects { static { - [_init_eff5, _init_extra_eff5, _init_b11, _init_extra_b11] = _applyDecs(this, [], [[signal, 0, "b"], [effect, 1, "eff"]], 0, void 0, Effects).e; + [_init_eff5, _init_extra_eff5, _init_b13, _init_extra_b13] = _applyDecs(this, [], [[signal, 0, "b"], [effect, 1, "eff"]], 0, void 0, Effects).e; } constructor(...args) { super(...args); _init_extra_eff5(this); } - b = _init_b11(this, 2); - #A = (_init_extra_b11(this), _init_eff5(this, () => { + b = _init_b13(this, 2); + #A = (_init_extra_b13(this), _init_eff5(this, () => { baseRuns++; observed = a() + this.b; })); @@ -632,20 +689,20 @@ describe('classy-solid', () => { expect(observed).toBe((10 + 5) * 2); }); it('runs subclass effect method extending base effect method with super', () => { - let _initProto0, _init_b12, _init_extra_b12, _initProto1, _init_c, _init_extra_c; + let _initProto10, _init_b14, _init_extra_b14, _initProto11, _init_c, _init_extra_c; const [a, setA] = createSignal(1); let superRuns = 0; let subRuns = 0; let observed = 0; class Base extends Effects { static { - [_init_b12, _init_extra_b12, _initProto0] = _applyDecs(this, [], [[signal, 0, "b"], [effect, 2, "compute"]], 0, void 0, Effects).e; + [_init_b14, _init_extra_b14, _initProto10] = _applyDecs(this, [], [[signal, 0, "b"], [effect, 2, "compute"]], 0, void 0, Effects).e; } constructor(...args) { super(...args); - _init_extra_b12(this); + _init_extra_b14(this); } - b = (_initProto0(this), _init_b12(this, 2)); + b = (_initProto10(this), _init_b14(this, 2)); compute() { superRuns++; observed = a() + this.b; @@ -653,13 +710,13 @@ describe('classy-solid', () => { } class Sub extends Base { static { - [_init_c, _init_extra_c, _initProto1] = _applyDecs(this, [], [[signal, 0, "c"], [effect, 2, "compute"]], 0, void 0, Base).e; + [_init_c, _init_extra_c, _initProto11] = _applyDecs(this, [], [[signal, 0, "c"], [effect, 2, "compute"]], 0, void 0, Base).e; } constructor(...args) { super(...args); _init_extra_c(this); } - c = (_initProto1(this), _init_c(this, 3)); + c = (_initProto11(this), _init_c(this, 3)); compute() { subRuns++; super.compute(); @@ -692,7 +749,7 @@ describe('classy-solid', () => { expect(observed).toBe(5 + 10 + 5); }); it('supports multi-level effect method extending base effect method with super', () => { - let _initProto10, _init_b13, _init_extra_b13, _initProto11, _init_c2, _init_extra_c2, _initProto12, _init_d, _init_extra_d; + let _initProto12, _init_b15, _init_extra_b15, _initProto13, _init_c2, _init_extra_c2, _initProto14, _init_d, _init_extra_d; const [a, setA] = createSignal(1); let baseRuns = 0; let midRuns = 0; @@ -700,13 +757,13 @@ describe('classy-solid', () => { let observed = 0; class Base extends Effects { static { - [_init_b13, _init_extra_b13, _initProto10] = _applyDecs(this, [], [[signal, 0, "b"], [effect, 2, "compute"]], 0, void 0, Effects).e; + [_init_b15, _init_extra_b15, _initProto12] = _applyDecs(this, [], [[signal, 0, "b"], [effect, 2, "compute"]], 0, void 0, Effects).e; } constructor(...args) { super(...args); - _init_extra_b13(this); + _init_extra_b15(this); } - b = (_initProto10(this), _init_b13(this, 2)); + b = (_initProto12(this), _init_b15(this, 2)); compute() { baseRuns++; observed = a() + this.b; @@ -714,13 +771,13 @@ describe('classy-solid', () => { } class Mid extends Base { static { - [_init_c2, _init_extra_c2, _initProto11] = _applyDecs(this, [], [[signal, 0, "c"], [effect, 2, "compute"]], 0, void 0, Base).e; + [_init_c2, _init_extra_c2, _initProto13] = _applyDecs(this, [], [[signal, 0, "c"], [effect, 2, "compute"]], 0, void 0, Base).e; } constructor(...args) { super(...args); _init_extra_c2(this); } - c = (_initProto11(this), _init_c2(this, 3)); + c = (_initProto13(this), _init_c2(this, 3)); compute() { midRuns++; super.compute(); @@ -729,13 +786,13 @@ describe('classy-solid', () => { } class Sub extends Mid { static { - [_init_d, _init_extra_d, _initProto12] = _applyDecs(this, [], [[signal, 0, "d"], [effect, 2, "compute"]], 0, void 0, Mid).e; + [_init_d, _init_extra_d, _initProto14] = _applyDecs(this, [], [[signal, 0, "d"], [effect, 2, "compute"]], 0, void 0, Mid).e; } constructor(...args) { super(...args); _init_extra_d(this); } - d = (_initProto12(this), _init_d(this, 4)); + d = (_initProto14(this), _init_d(this, 4)); compute() { subRuns++; super.compute(); @@ -778,20 +835,20 @@ describe('classy-solid', () => { expect(observed).toBe(5 + 10 + 6 + 7); }); it('runs subclass effect method overriding base effect method without super', () => { - let _initProto13, _init_b14, _init_extra_b14, _initProto14; + let _initProto15, _init_b16, _init_extra_b16, _initProto16; const [a, setA] = createSignal(1); let superRuns = 0; let subRuns = 0; let observed = 0; class Base extends Effects { static { - [_init_b14, _init_extra_b14, _initProto13] = _applyDecs(this, [], [[signal, 0, "b"], [effect, 2, "compute"]], 0, void 0, Effects).e; + [_init_b16, _init_extra_b16, _initProto15] = _applyDecs(this, [], [[signal, 0, "b"], [effect, 2, "compute"]], 0, void 0, Effects).e; } constructor(...args) { super(...args); - _init_extra_b14(this); + _init_extra_b16(this); } - b = (_initProto13(this), _init_b14(this, 2)); + b = (_initProto15(this), _init_b16(this, 2)); compute() { superRuns++; observed = a() + this.b; @@ -799,11 +856,11 @@ describe('classy-solid', () => { } class Sub extends Base { static { - [_initProto14] = _applyDecs(this, [], [[effect, 2, "compute"]], 0, void 0, Base).e; + [_initProto16] = _applyDecs(this, [], [[effect, 2, "compute"]], 0, void 0, Base).e; } constructor(...args) { super(...args); - _initProto14(this); + _initProto16(this); } compute() { subRuns++; @@ -829,18 +886,18 @@ describe('classy-solid', () => { }); }); it('works with nested effects', () => { - let _initProto15, _init_a, _init_extra_a, _init_b15, _init_extra_b15; + let _initProto17, _init_a, _init_extra_a, _init_b17, _init_extra_b17; let outerRuns = 0; let innerRuns = 0; class MyEffects { static { - [_init_a, _init_extra_a, _init_b15, _init_extra_b15, _initProto15] = _applyDecs(this, [], [[signal, 0, "a"], [signal, 0, "b"], [effect, 2, "outer"]]).e; + [_init_a, _init_extra_a, _init_b17, _init_extra_b17, _initProto17] = _applyDecs(this, [], [[signal, 0, "a"], [signal, 0, "b"], [effect, 2, "outer"]]).e; } constructor() { - _init_extra_b15(this); + _init_extra_b17(this); } - a = (_initProto15(this), _init_a(this, 0)); - b = (_init_extra_a(this), _init_b15(this, 0)); + a = (_initProto17(this), _init_a(this, 0)); + b = (_init_extra_a(this), _init_b17(this, 0)); outer() { outerRuns++; this.a; @@ -895,15 +952,15 @@ describe('classy-solid', () => { }); it('throws on invalid getter usage', () => { expect(() => { - let _initProto16, _init_a2, _init_extra_a2; + let _initProto18, _init_a2, _init_extra_a2; class BadGetter { static { - [_init_a2, _init_extra_a2, _initProto16] = _applyDecs(this, [], [[signal, 0, "a"], [effect, 3, "nope"]]).e; + [_init_a2, _init_extra_a2, _initProto18] = _applyDecs(this, [], [[signal, 0, "a"], [effect, 3, "nope"]]).e; } constructor() { _init_extra_a2(this); } - a = (_initProto16(this), _init_a2(this, 1)); + a = (_initProto18(this), _init_a2(this, 1)); // @ts-expect-error invalid decorator usage on getter get nope() { return this.a; @@ -950,13 +1007,13 @@ describe('classy-solid', () => { }); it('throws on duplicate members', () => { const run = () => { - let _initProto17; + let _initProto19; class SuperDuper { static { - [_initProto17] = _applyDecs(this, [], [[effect, 2, "dupe"], [effect, 2, "dupe"]]).e; + [_initProto19] = _applyDecs(this, [], [[effect, 2, "dupe"], [effect, 2, "dupe"]]).e; } constructor() { - _initProto17(this); + _initProto19(this); } // @ts-expect-error duplicate member dupe() { diff --git a/dist/decorators/effect.test.js.map b/dist/decorators/effect.test.js.map index 0bc127d..6711624 100644 --- a/dist/decorators/effect.test.js.map +++ b/dist/decorators/effect.test.js.map @@ -1 +1 @@ -{"version":3,"file":"effect.test.js","names":["createSignal","batch","createRoot","createEffect","signal","memo","effect","startEffects","stopEffects","Effects","testElementEffects","describe","it","_initProto","_init_b","_init_extra_b","a","setA","Funkalicious","_applyDecs","e","constructor","last","runs","b","logSum","fun","basicTest","_initProto2","_init_b2","_init_extra_b2","_call_logSum","_","_init_b3","_init_extra_b3","_init_logSum","_get_logSum","_set_logSum","_init_extra_logSum","o","A","v","#logSum","_initProto3","_init_b4","_init_extra_b4","args","_initProto4","_init_b5","_init_extra_b5","_call_logSum2","_init_b6","_init_extra_b6","_init_logSum2","_get_logSum2","_set_logSum2","_init_extra_logSum2","expect","toBe","_initProto5","_init_b7","_init_extra_b7","_init_eff","_init_extra_eff","sum1","sum2","Doubler","eff1","eff2","_initProto6","_init_b8","_init_extra_b8","_init_eff2","_init_extra_eff2","_initProto7","setB","memoVal","effectRuns","MemoUser","sum","report","m","_initProto8","_init_b9","_init_extra_b9","_init_compute","_init_extra_compute","AccessorClass","child","result","compute","Sub","_init_b0","_init_extra_b0","_init_compute2","_init_extra_compute2","_initProto9","_init_b1","_init_extra_b1","observed","PlainYogurt","p","dispose","d","_init_b10","_init_extra_b10","_init_eff3","_init_extra_eff3","_init_eff4","_init_extra_eff4","baseRuns","subRuns","Base","eff","_init_b11","_init_extra_b11","_init_eff5","_init_extra_eff5","_init_eff6","_init_extra_eff6","_initProto0","_init_b12","_init_extra_b12","_initProto1","_init_c","_init_extra_c","superRuns","c","_initProto10","_init_b13","_init_extra_b13","_initProto11","_init_c2","_init_extra_c2","_initProto12","_init_d","_init_extra_d","midRuns","Mid","_initProto13","_init_b14","_init_extra_b14","_initProto14","_initProto15","_init_a","_init_extra_a","_init_b15","_init_extra_b15","outerRuns","innerRuns","MyEffects","outer","_init_nope","_init_extra_nope","BadField","nope","toThrow","_initProto16","_init_a2","_init_extra_a2","BadGetter","_initStatic","BadStatic","_init_a3","_init_extra_a3","_init_nope2","_init_extra_nope2","NonFunction","run","_initProto17","SuperDuper","dupe","el","document","createElement"],"sources":["../../src/decorators/effect.test.ts"],"sourcesContent":["import {createSignal, batch, createRoot, createEffect} from 'solid-js'\nimport {signal} from './signal.js'\nimport {memo} from './memo.js'\nimport {effect, startEffects, stopEffects} from './effect.js'\nimport {Effects} from '../mixins/Effectful.js'\nimport {testElementEffects, type MyElement4} from '../index.test.js'\n\ndescribe('classy-solid', () => {\n\tdescribe('@effect decorator', () => {\n\t\tit('runs a basic public method effect, using stopEffects', () => {\n\t\t\tconst [a, setA] = createSignal(1)\n\n\t\t\tclass Funkalicious {\n\t\t\t\tlast: number | null = null\n\t\t\t\truns = 0\n\n\t\t\t\t@signal b = 2\n\n\t\t\t\t@effect logSum() {\n\t\t\t\t\tthis.runs++\n\t\t\t\t\tthis.last = a() + this.b\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst fun = new Funkalicious()\n\t\t\tbasicTest(fun, setA)\n\t\t})\n\n\t\tit('runs a basic private method effect, using stopEffects', () => {\n\t\t\tconst [a, setA] = createSignal(1)\n\n\t\t\tclass Funkalicious {\n\t\t\t\tlast: number | null = null\n\t\t\t\truns = 0\n\n\t\t\t\t@signal b = 2\n\n\t\t\t\t// @ts-expect-error unused private method\n\t\t\t\t@effect #logSum() {\n\t\t\t\t\tthis.runs++\n\t\t\t\t\tthis.last = a() + this.b\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst fun = new Funkalicious()\n\t\t\tbasicTest(fun, setA)\n\t\t})\n\n\t\tit('runs a basic private auto accessor effect, using stopEffects', () => {\n\t\t\tconst [a, setA] = createSignal(1)\n\n\t\t\tclass Funkalicious {\n\t\t\t\tlast: number | null = null\n\t\t\t\truns = 0\n\n\t\t\t\t@signal b = 2\n\n\t\t\t\t// @ts-expect-error unused private member\n\t\t\t\t@effect accessor #logSum = () => {\n\t\t\t\t\tthis.runs++\n\t\t\t\t\tthis.last = a() + this.b\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst fun = new Funkalicious()\n\t\t\tbasicTest(fun, setA)\n\t\t})\n\n\t\tit('runs a basic public method effect, using Effects', () => {\n\t\t\tconst [a, setA] = createSignal(1)\n\n\t\t\tclass Funkalicious extends Effects {\n\t\t\t\tlast: number | null = null\n\t\t\t\truns = 0\n\n\t\t\t\t@signal b = 2\n\n\t\t\t\t@effect logSum() {\n\t\t\t\t\tthis.runs++\n\t\t\t\t\tthis.last = a() + this.b\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst fun = new Funkalicious()\n\t\t\tbasicTest(fun, setA)\n\t\t})\n\n\t\tit('runs a basic private method effect, using Effects', () => {\n\t\t\tconst [a, setA] = createSignal(1)\n\n\t\t\tclass Funkalicious extends Effects {\n\t\t\t\tlast: number | null = null\n\t\t\t\truns = 0\n\n\t\t\t\t@signal b = 2\n\n\t\t\t\t// @ts-expect-error unused private method\n\t\t\t\t@effect #logSum() {\n\t\t\t\t\tthis.runs++\n\t\t\t\t\tthis.last = a() + this.b\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst fun = new Funkalicious()\n\t\t\tbasicTest(fun, setA)\n\t\t})\n\n\t\tit('runs a basic private auto accessor effect, using Effects', () => {\n\t\t\tconst [a, setA] = createSignal(1)\n\n\t\t\tclass Funkalicious extends Effects {\n\t\t\t\tlast: number | null = null\n\t\t\t\truns = 0\n\n\t\t\t\t@signal b = 2\n\n\t\t\t\t// @ts-expect-error unused private member\n\t\t\t\t@effect accessor #logSum = () => {\n\t\t\t\t\tthis.runs++\n\t\t\t\t\tthis.last = a() + this.b\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst fun = new Funkalicious()\n\t\t\tbasicTest(fun, setA)\n\t\t})\n\n\t\tfunction basicTest(fun: {b: number; last: number | null; runs: number}, setA: (v: number) => void) {\n\t\t\texpect(fun.last).toBe(1 + 2)\n\t\t\texpect(fun.runs).toBe(1)\n\n\t\t\tsetA(5)\n\t\t\texpect(fun.last).toBe(5 + 2)\n\t\t\texpect(fun.runs).toBe(2)\n\n\t\t\tfun.b = 10\n\t\t\texpect(fun.last).toBe(5 + 10)\n\t\t\texpect(fun.runs).toBe(3)\n\t\t\tfun instanceof Effects ? fun.stopEffects() : stopEffects(fun)\n\t\t\tsetA(1)\n\t\t\tfun.b = 1\n\t\t\texpect(fun.last).toBe(5 + 10)\n\t\t\texpect(fun.runs).toBe(3)\n\n\t\t\tfun instanceof Effects ? fun.startEffects() : startEffects(fun)\n\t\t\texpect(fun.last).toBe(1 + 1)\n\t\t\texpect(fun.runs).toBe(4)\n\n\t\t\t// Ensure no duplicate effects\n\t\t\tfun instanceof Effects ? fun.startEffects() : startEffects(fun)\n\t\t\texpect(fun.last).toBe(1 + 1)\n\t\t\texpect(fun.runs).toBe(4)\n\n\t\t\tsetA(3)\n\t\t\texpect(fun.last).toBe(3 + 1)\n\t\t\texpect(fun.runs).toBe(5)\n\n\t\t\tfun instanceof Effects ? fun.stopEffects() : stopEffects(fun)\n\t\t\tsetA(10)\n\t\t\tfun.b = 20\n\t\t\texpect(fun.last).toBe(3 + 1)\n\t\t\texpect(fun.runs).toBe(5)\n\t\t}\n\n\t\tit('runs multiple effects independently, using Effects', () => {\n\t\t\tconst [a, setA] = createSignal(1)\n\t\t\tlet sum1 = 0\n\t\t\tlet sum2 = 0\n\t\t\tlet runs = 0\n\n\t\t\tclass Doubler extends Effects {\n\t\t\t\t@signal b = 3\n\t\t\t\t@effect eff1() {\n\t\t\t\t\truns++\n\t\t\t\t\tsum1 = a() + this.b\n\t\t\t\t}\n\t\t\t\t@effect accessor eff2 = () => {\n\t\t\t\t\truns++\n\t\t\t\t\tsum2 = (a() + this.b) * 2\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst o = new Doubler()\n\t\t\texpect(sum1).toBe(4)\n\t\t\texpect(sum2).toBe(8)\n\t\t\texpect(runs).toBe(2)\n\n\t\t\tsetA(2)\n\t\t\texpect(sum1).toBe(5)\n\t\t\texpect(sum2).toBe(10)\n\t\t\texpect(runs).toBe(4)\n\n\t\t\to.b = 4\n\t\t\texpect(sum1).toBe(6)\n\t\t\texpect(sum2).toBe(12)\n\t\t\texpect(runs).toBe(6)\n\n\t\t\to.stopEffects()\n\t\t\tsetA(10)\n\t\t\to.b = 20\n\t\t\texpect(sum1).toBe(6)\n\t\t\texpect(sum2).toBe(12)\n\t\t\texpect(runs).toBe(6)\n\t\t})\n\n\t\tit('runs multiple effects independently, using stopEffects', () => {\n\t\t\tconst [a, setA] = createSignal(1)\n\t\t\tlet sum1 = 0\n\t\t\tlet sum2 = 0\n\t\t\tlet runs = 0\n\n\t\t\tclass Doubler {\n\t\t\t\t@signal b = 3\n\t\t\t\t@effect eff1() {\n\t\t\t\t\truns++\n\t\t\t\t\tsum1 = a() + this.b\n\t\t\t\t}\n\t\t\t\t@effect accessor eff2 = () => {\n\t\t\t\t\truns++\n\t\t\t\t\tsum2 = (a() + this.b) * 2\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst o = new Doubler()\n\t\t\texpect(sum1).toBe(4)\n\t\t\texpect(sum2).toBe(8)\n\t\t\texpect(runs).toBe(2)\n\n\t\t\tsetA(2)\n\t\t\texpect(sum1).toBe(5)\n\t\t\texpect(sum2).toBe(10)\n\t\t\texpect(runs).toBe(4)\n\n\t\t\to.b = 4\n\t\t\texpect(sum1).toBe(6)\n\t\t\texpect(sum2).toBe(12)\n\t\t\texpect(runs).toBe(6)\n\n\t\t\tstopEffects(o)\n\t\t\tsetA(10)\n\t\t\to.b = 20\n\t\t\texpect(sum1).toBe(6)\n\t\t\texpect(sum2).toBe(12)\n\t\t\texpect(runs).toBe(6)\n\t\t})\n\n\t\tit('reruns effect when memos change inside effect, using Effects', () => {\n\t\t\tconst [a, setA] = createSignal(1)\n\t\t\tconst [b, setB] = createSignal(2)\n\t\t\tlet memoVal = 0\n\t\t\tlet effectRuns = 0\n\n\t\t\tclass MemoUser extends Effects {\n\t\t\t\t@memo get sum() {\n\t\t\t\t\treturn a() + b()\n\t\t\t\t}\n\t\t\t\t@effect report() {\n\t\t\t\t\teffectRuns++\n\t\t\t\t\tmemoVal = this.sum\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst m = new MemoUser()\n\t\t\texpect(memoVal).toBe(3)\n\t\t\texpect(effectRuns).toBe(1)\n\n\t\t\tsetA(5)\n\t\t\texpect(memoVal).toBe(7)\n\t\t\texpect(effectRuns).toBe(2)\n\n\t\t\tbatch(() => {\n\t\t\t\tsetA(6)\n\t\t\t\tsetB(1)\n\t\t\t}) // sum stays 7\n\t\t\texpect(effectRuns).toBe(2)\n\n\t\t\tsetB(5)\n\t\t\texpect(memoVal).toBe(11)\n\t\t\texpect(effectRuns).toBe(3)\n\n\t\t\tm.stopEffects()\n\t\t\tsetA(0)\n\t\t\tsetB(0)\n\t\t\texpect(memoVal).toBe(11)\n\t\t\texpect(effectRuns).toBe(3)\n\t\t})\n\n\t\tit('reruns effect when memos change inside effect, using stopEffects', () => {\n\t\t\tconst [a, setA] = createSignal(1)\n\t\t\tconst [b, setB] = createSignal(2)\n\t\t\tlet memoVal = 0\n\t\t\tlet effectRuns = 0\n\n\t\t\tclass MemoUser {\n\t\t\t\t@memo get sum() {\n\t\t\t\t\treturn a() + b()\n\t\t\t\t}\n\t\t\t\t@effect report() {\n\t\t\t\t\teffectRuns++\n\t\t\t\t\tmemoVal = this.sum\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst m = new MemoUser()\n\t\t\texpect(memoVal).toBe(3)\n\t\t\texpect(effectRuns).toBe(1)\n\n\t\t\tsetA(5)\n\t\t\texpect(memoVal).toBe(7)\n\t\t\texpect(effectRuns).toBe(2)\n\n\t\t\tbatch(() => {\n\t\t\t\tsetA(6)\n\t\t\t\tsetB(1)\n\t\t\t}) // sum stays 7\n\t\t\texpect(effectRuns).toBe(2)\n\n\t\t\tsetB(5)\n\t\t\texpect(memoVal).toBe(11)\n\t\t\texpect(effectRuns).toBe(3)\n\n\t\t\tstopEffects(m)\n\t\t\tsetA(0)\n\t\t\tsetB(0)\n\t\t\texpect(memoVal).toBe(11)\n\t\t})\n\n\t\tit('runs an effect on auto accessor, using Effects', () => {\n\t\t\tconst [a, setA] = createSignal(1)\n\n\t\t\tclass AccessorClass extends Effects {\n\t\t\t\t@signal b = 2\n\n\t\t\t\t// Stick this here to ensure that nested constructor doesn't\n\t\t\t\t// interfere with decorator behavior mid-way through initialization\n\t\t\t\t// of the wrapper parent class (tested with a subclass)\n\t\t\t\tchild: AccessorClass | null = this.constructor !== AccessorClass ? new AccessorClass() : null\n\n\t\t\t\tresult = 0\n\t\t\t\truns = 0\n\t\t\t\t@effect accessor compute = () => {\n\t\t\t\t\tthis.runs++\n\t\t\t\t\tthis.result = a() + this.b\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tclass Sub extends AccessorClass {}\n\n\t\t\tconst o = new Sub()\n\t\t\texpect(o.result).toBe(3)\n\t\t\texpect(o.runs).toBe(1)\n\n\t\t\tsetA(5)\n\t\t\texpect(o.result).toBe(7)\n\t\t\texpect(o.runs).toBe(2)\n\t\t\to.b = 10\n\t\t\texpect(o.result).toBe(15)\n\t\t\texpect(o.runs).toBe(3)\n\n\t\t\to.stopEffects()\n\t\t\tsetA(1)\n\t\t\to.b = 1\n\t\t\texpect(o.result).toBe(15)\n\t\t\texpect(o.runs).toBe(3)\n\t\t})\n\n\t\tit('runs an effect on auto accessor, using stopEffects', () => {\n\t\t\tconst [a, setA] = createSignal(1)\n\n\t\t\tclass AccessorClass {\n\t\t\t\t@signal b = 2\n\n\t\t\t\t// Stick this here to ensure that nested constructor doesn't\n\t\t\t\t// interfere with decorator behavior mid-way through initialization\n\t\t\t\t// of the wrapper parent class (tested with a subclass)\n\t\t\t\tchild: AccessorClass | null = this.constructor !== AccessorClass ? new AccessorClass() : null\n\n\t\t\t\tresult = 0\n\t\t\t\truns = 0\n\t\t\t\t@effect accessor compute = () => {\n\t\t\t\t\tthis.runs++\n\t\t\t\t\tthis.result = a() + this.b\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tclass Sub extends AccessorClass {}\n\n\t\t\tconst o = new Sub()\n\t\t\texpect(o.result).toBe(3)\n\t\t\texpect(o.runs).toBe(1)\n\n\t\t\tsetA(5)\n\t\t\texpect(o.result).toBe(7)\n\t\t\texpect(o.runs).toBe(2)\n\n\t\t\to.b = 10\n\t\t\texpect(o.result).toBe(15)\n\t\t\texpect(o.runs).toBe(3)\n\n\t\t\tstopEffects(o)\n\t\t\tsetA(1)\n\t\t\to.b = 1\n\t\t\texpect(o.result).toBe(15)\n\t\t\texpect(o.runs).toBe(3)\n\t\t})\n\n\t\tit('managed within an existing root, without Effects, without stopEffects', () => {\n\t\t\tconst [a, setA] = createSignal(1)\n\t\t\tlet observed = 0\n\t\t\tlet runs = 0\n\n\t\t\tclass PlainYogurt {\n\t\t\t\t@signal b = 2\n\t\t\t\t@effect sum() {\n\t\t\t\t\truns++\n\t\t\t\t\tobserved = a() + this.b\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet p!: PlainYogurt\n\t\t\tlet dispose!: () => void\n\n\t\t\tcreateRoot(d => {\n\t\t\t\tp = new PlainYogurt()\n\t\t\t\tdispose = d\n\t\t\t})\n\n\t\t\t// As p is created inside a root, it will be tied to that root's owner,\n\t\t\t// so this stopEffects(p) will not dispose the effects.\n\t\t\tstopEffects(p)\n\n\t\t\texpect(observed).toBe(3)\n\t\t\texpect(runs).toBe(1)\n\n\t\t\tsetA(4)\n\t\t\tp.b = 5\n\n\t\t\texpect(observed).toBe(9)\n\t\t\texpect(runs).toBe(3)\n\n\t\t\t// Now dispose the root to clean up effects\n\t\t\tdispose()\n\t\t\tsetA(10)\n\t\t\tp.b = 20\n\t\t\texpect(observed).toBe(9) // disposed root, no further updates\n\t\t\texpect(runs).toBe(3)\n\t\t})\n\n\t\tdescribe('subclass effect overriding/extending', () => {\n\t\t\tit('runs subclass effect auto accessor extending base effect auto accessor with super', () => {\n\t\t\t\tconst [a, setA] = createSignal(1)\n\n\t\t\t\tlet baseRuns = 0\n\t\t\t\tlet subRuns = 0\n\t\t\t\tlet observed = 0\n\n\t\t\t\tclass Base extends Effects {\n\t\t\t\t\t@signal b = 2\n\t\t\t\t\t@effect accessor eff = () => {\n\t\t\t\t\t\tbaseRuns++\n\t\t\t\t\t\tobserved = a() + this.b\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclass Sub extends Base {\n\t\t\t\t\t@effect override accessor eff = () => {\n\t\t\t\t\t\tsubRuns++\n\t\t\t\t\t\tsuper.eff()\n\t\t\t\t\t\tobserved = observed + 10\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst o = new Sub()\n\t\t\t\texpect(baseRuns).toBe(1)\n\t\t\t\texpect(subRuns).toBe(1)\n\t\t\t\texpect(observed).toBe(1 + 2 + 10)\n\n\t\t\t\to.b = 5\n\t\t\t\texpect(baseRuns).toBe(2)\n\t\t\t\texpect(subRuns).toBe(2)\n\t\t\t\texpect(observed).toBe(1 + 5 + 10)\n\n\t\t\t\tsetA(10)\n\t\t\t\texpect(baseRuns).toBe(3)\n\t\t\t\texpect(subRuns).toBe(3)\n\t\t\t\texpect(observed).toBe(10 + 5 + 10)\n\n\t\t\t\to.stopEffects()\n\t\t\t\to.b = 100\n\t\t\t\texpect(baseRuns).toBe(3)\n\t\t\t\texpect(subRuns).toBe(3)\n\t\t\t\texpect(observed).toBe(10 + 5 + 10)\n\t\t\t})\n\n\t\t\tit('runs subclass effect auto accessor overriding base effect auto accessor without super', () => {\n\t\t\t\tconst [a, setA] = createSignal(1)\n\n\t\t\t\tlet baseRuns = 0\n\t\t\t\tlet subRuns = 0\n\t\t\t\tlet observed = 0\n\n\t\t\t\tclass Base extends Effects {\n\t\t\t\t\t@signal b = 2\n\t\t\t\t\t@effect accessor eff = () => {\n\t\t\t\t\t\tbaseRuns++\n\t\t\t\t\t\tobserved = a() + this.b\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclass Sub extends Base {\n\t\t\t\t\t@effect override accessor eff = () => {\n\t\t\t\t\t\tsubRuns++\n\t\t\t\t\t\tobserved = (a() + this.b) * 2 // override without super\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst o = new Sub()\n\t\t\t\texpect(baseRuns).toBe(0)\n\t\t\t\texpect(subRuns).toBe(1)\n\t\t\t\texpect(observed).toBe((1 + 2) * 2)\n\n\t\t\t\to.b = 5\n\t\t\t\texpect(baseRuns).toBe(0)\n\t\t\t\texpect(subRuns).toBe(2)\n\t\t\t\texpect(observed).toBe((1 + 5) * 2)\n\n\t\t\t\tsetA(10)\n\t\t\t\texpect(baseRuns).toBe(0)\n\t\t\t\texpect(subRuns).toBe(3)\n\t\t\t\texpect(observed).toBe((10 + 5) * 2)\n\n\t\t\t\to.stopEffects()\n\t\t\t\to.b = 100\n\t\t\t\texpect(baseRuns).toBe(0)\n\t\t\t\texpect(subRuns).toBe(3)\n\t\t\t\texpect(observed).toBe((10 + 5) * 2)\n\t\t\t})\n\n\t\t\tit('runs subclass effect method extending base effect method with super', () => {\n\t\t\t\tconst [a, setA] = createSignal(1)\n\t\t\t\tlet superRuns = 0\n\t\t\t\tlet subRuns = 0\n\t\t\t\tlet observed = 0\n\n\t\t\t\tclass Base extends Effects {\n\t\t\t\t\t@signal b = 2\n\t\t\t\t\t@effect compute() {\n\t\t\t\t\t\tsuperRuns++\n\t\t\t\t\t\tobserved = a() + this.b\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclass Sub extends Base {\n\t\t\t\t\t@signal c = 3\n\t\t\t\t\t@effect override compute() {\n\t\t\t\t\t\tsubRuns++\n\t\t\t\t\t\tsuper.compute()\n\t\t\t\t\t\tobserved += this.c // extend behavior\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst o = new Sub()\n\t\t\t\texpect(superRuns).toBe(1)\n\t\t\t\texpect(subRuns).toBe(1)\n\t\t\t\texpect(observed).toBe(1 + 2 + 3) // a + b + extension\n\n\t\t\t\tsetA(5)\n\t\t\t\texpect(superRuns).toBe(2)\n\t\t\t\texpect(subRuns).toBe(2)\n\t\t\t\texpect(observed).toBe(5 + 2 + 3)\n\n\t\t\t\to.b = 10\n\t\t\t\texpect(superRuns).toBe(3)\n\t\t\t\texpect(subRuns).toBe(3)\n\t\t\t\texpect(observed).toBe(5 + 10 + 3)\n\n\t\t\t\to.c = 5\n\t\t\t\texpect(superRuns).toBe(4)\n\t\t\t\texpect(subRuns).toBe(4)\n\t\t\t\texpect(observed).toBe(5 + 10 + 5)\n\n\t\t\t\to.stopEffects()\n\t\t\t\tsetA(0)\n\t\t\t\to.b = 0\n\t\t\t\to.c = 0\n\t\t\t\texpect(superRuns).toBe(4)\n\t\t\t\texpect(subRuns).toBe(4)\n\t\t\t\texpect(observed).toBe(5 + 10 + 5)\n\t\t\t})\n\n\t\t\tit('supports multi-level effect method extending base effect method with super', () => {\n\t\t\t\tconst [a, setA] = createSignal(1)\n\t\t\t\tlet baseRuns = 0\n\t\t\t\tlet midRuns = 0\n\t\t\t\tlet subRuns = 0\n\t\t\t\tlet observed = 0\n\n\t\t\t\tclass Base extends Effects {\n\t\t\t\t\t@signal b = 2\n\t\t\t\t\t@effect compute() {\n\t\t\t\t\t\tbaseRuns++\n\t\t\t\t\t\tobserved = a() + this.b\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclass Mid extends Base {\n\t\t\t\t\t@signal c = 3\n\t\t\t\t\t@effect override compute() {\n\t\t\t\t\t\tmidRuns++\n\t\t\t\t\t\tsuper.compute()\n\t\t\t\t\t\tobserved += this.c\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclass Sub extends Mid {\n\t\t\t\t\t@signal d = 4\n\t\t\t\t\t@effect override compute() {\n\t\t\t\t\t\tsubRuns++\n\t\t\t\t\t\tsuper.compute()\n\t\t\t\t\t\tobserved += this.d\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst o = new Sub()\n\t\t\t\texpect(baseRuns).toBe(1)\n\t\t\t\texpect(midRuns).toBe(1)\n\t\t\t\texpect(subRuns).toBe(1)\n\t\t\t\texpect(observed).toBe(1 + 2 + 3 + 4)\n\n\t\t\t\tsetA(5)\n\t\t\t\texpect(baseRuns).toBe(2)\n\t\t\t\texpect(midRuns).toBe(2)\n\t\t\t\texpect(subRuns).toBe(2)\n\t\t\t\texpect(observed).toBe(5 + 2 + 3 + 4)\n\n\t\t\t\to.b = 10\n\t\t\t\texpect(baseRuns).toBe(3)\n\t\t\t\texpect(midRuns).toBe(3)\n\t\t\t\texpect(subRuns).toBe(3)\n\t\t\t\texpect(observed).toBe(5 + 10 + 3 + 4)\n\n\t\t\t\to.c = 6\n\t\t\t\texpect(baseRuns).toBe(4)\n\t\t\t\texpect(midRuns).toBe(4)\n\t\t\t\texpect(subRuns).toBe(4)\n\t\t\t\texpect(observed).toBe(5 + 10 + 6 + 4)\n\n\t\t\t\to.d = 7\n\t\t\t\texpect(baseRuns).toBe(5)\n\t\t\t\texpect(midRuns).toBe(5)\n\t\t\t\texpect(subRuns).toBe(5)\n\t\t\t\texpect(observed).toBe(5 + 10 + 6 + 7)\n\n\t\t\t\to.stopEffects()\n\t\t\t\tsetA(0)\n\t\t\t\to.b = 0\n\t\t\t\to.c = 0\n\t\t\t\to.d = 0\n\t\t\t\texpect(baseRuns).toBe(5)\n\t\t\t\texpect(midRuns).toBe(5)\n\t\t\t\texpect(subRuns).toBe(5)\n\t\t\t\texpect(observed).toBe(5 + 10 + 6 + 7)\n\t\t\t})\n\n\t\t\tit('runs subclass effect method overriding base effect method without super', () => {\n\t\t\t\tconst [a, setA] = createSignal(1)\n\t\t\t\tlet superRuns = 0\n\t\t\t\tlet subRuns = 0\n\t\t\t\tlet observed = 0\n\n\t\t\t\tclass Base extends Effects {\n\t\t\t\t\t@signal b = 2\n\t\t\t\t\t@effect compute() {\n\t\t\t\t\t\tsuperRuns++\n\t\t\t\t\t\tobserved = a() + this.b\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclass Sub extends Base {\n\t\t\t\t\t@effect override compute() {\n\t\t\t\t\t\tsubRuns++\n\t\t\t\t\t\tobserved = (a() + this.b) * 2 // override without super\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst o = new Sub()\n\t\t\t\texpect(superRuns).toBe(0)\n\t\t\t\texpect(subRuns).toBe(1)\n\t\t\t\texpect(observed).toBe((1 + 2) * 2)\n\n\t\t\t\tsetA(3)\n\t\t\t\texpect(superRuns).toBe(0)\n\t\t\t\texpect(subRuns).toBe(2)\n\t\t\t\texpect(observed).toBe((3 + 2) * 2)\n\n\t\t\t\to.b = 5\n\t\t\t\texpect(superRuns).toBe(0)\n\t\t\t\texpect(subRuns).toBe(3)\n\t\t\t\texpect(observed).toBe((3 + 5) * 2)\n\n\t\t\t\to.stopEffects()\n\t\t\t\tsetA(10)\n\t\t\t\to.b = 1\n\t\t\t\texpect(subRuns).toBe(3)\n\t\t\t})\n\t\t})\n\n\t\tit('works with nested effects', () => {\n\t\t\tlet outerRuns = 0\n\t\t\tlet innerRuns = 0\n\n\t\t\tclass MyEffects {\n\t\t\t\t@signal a = 0\n\t\t\t\t@signal b = 0\n\n\t\t\t\t@effect outer() {\n\t\t\t\t\touterRuns++\n\t\t\t\t\tthis.a\n\n\t\t\t\t\tcreateEffect(() => {\n\t\t\t\t\t\tinnerRuns++\n\t\t\t\t\t\tthis.b\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst e = new MyEffects()\n\n\t\t\texpect(outerRuns).toBe(1)\n\t\t\texpect(innerRuns).toBe(1)\n\n\t\t\tstartEffects(e) // should not duplicate effects (already started)\n\n\t\t\texpect(outerRuns).toBe(1)\n\t\t\texpect(innerRuns).toBe(1)\n\n\t\t\te.a = 1\n\t\t\texpect(outerRuns).toBe(2)\n\t\t\texpect(innerRuns).toBe(2) // inner effect runs because outer effect re-ran\n\n\t\t\te.b = 1\n\t\t\texpect(outerRuns).toBe(2)\n\t\t\texpect(innerRuns).toBe(3) // inner effect runs independently\n\n\t\t\tstopEffects(e)\n\n\t\t\texpect(outerRuns).toBe(2)\n\t\t\texpect(innerRuns).toBe(3)\n\n\t\t\tstartEffects(e)\n\n\t\t\texpect(outerRuns).toBe(3)\n\t\t\texpect(innerRuns).toBe(4) // inner effect runs because outer effect re-ran\n\n\t\t\te.b = 2\n\t\t\texpect(outerRuns).toBe(3)\n\t\t\texpect(innerRuns).toBe(5) // inner effect runs independently\n\t\t})\n\n\t\tdescribe('invalid usage', () => {\n\t\t\tit('throws on invalid field usage', () => {\n\t\t\t\texpect(() => {\n\t\t\t\t\tclass BadField {\n\t\t\t\t\t\t// @ts-expect-error invalid decorator usage on field\n\t\t\t\t\t\t@effect nope = () => 123\n\t\t\t\t\t}\n\t\t\t\t\tnew BadField()\n\t\t\t\t}).toThrow('@effect can only be used on methods or function-valued auto accessors')\n\t\t\t})\n\n\t\t\tit('throws on invalid getter usage', () => {\n\t\t\t\texpect(() => {\n\t\t\t\t\tclass BadGetter {\n\t\t\t\t\t\t@signal a = 1\n\t\t\t\t\t\t// @ts-expect-error invalid decorator usage on getter\n\t\t\t\t\t\t@effect get nope() {\n\t\t\t\t\t\t\treturn this.a\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tnew BadGetter()\n\t\t\t\t}).toThrow('@effect can only be used on methods or function-valued auto accessors')\n\t\t\t})\n\n\t\t\tit('throws on invalid static usage', () => {\n\t\t\t\texpect(() => {\n\t\t\t\t\tclass BadStatic {\n\t\t\t\t\t\t@effect static nope() {}\n\t\t\t\t\t}\n\t\t\t\t\tBadStatic\n\t\t\t\t}).toThrow('@effect is not supported on static members.')\n\t\t\t})\n\n\t\t\tit('throws on invalid non-function value', () => {\n\t\t\t\texpect(() => {\n\t\t\t\t\tclass NonFunction {\n\t\t\t\t\t\t@signal a = 1\n\t\t\t\t\t\t// @ts-expect-error invalid decorator usage on non-function\n\t\t\t\t\t\t@effect accessor nope: number = 123\n\t\t\t\t\t}\n\t\t\t\t\tnew NonFunction()\n\t\t\t\t}).toThrow('@effect decorated member \"nope\" is not a function')\n\t\t\t})\n\n\t\t\tit('throws on duplicate members', () => {\n\t\t\t\tconst run = () => {\n\t\t\t\t\tclass SuperDuper {\n\t\t\t\t\t\t// @ts-expect-error duplicate member\n\t\t\t\t\t\t@effect dupe() {\n\t\t\t\t\t\t\tthis\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// @ts-expect-error duplicate member\n\t\t\t\t\t\t@effect dupe() {\n\t\t\t\t\t\t\tthis\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tnew SuperDuper()\n\t\t\t\t}\n\n\t\t\t\t// When compiling with Babel, decorators currently throw an error when applied onto multiple members of the same name.\n\t\t\t\texpect(run).toThrow('Decorating two elements with the same name (dupe) is not supported yet')\n\n\t\t\t\t// When compiling with TypeScript, decorating duplicate members is allowed, and the last one wins.\n\t\t\t\t// expect(run).toThrow(\n\t\t\t\t// \t'@effect decorated member \"dupe\" has already been effectified. This can happen if there are duplicated class members.',\n\t\t\t\t// )\n\t\t\t})\n\t\t})\n\n\t\tdescribe('usage with custom elements', () => {\n\t\t\tit('@effect methods, startEffects in connectedCallback, stopEffects in disconnectedCallback', () => {\n\t\t\t\tconst el = document.createElement('my-element4') as MyElement4\n\t\t\t\texpect(el.result).toBe(1 + 2)\n\t\t\t\texpect(el.runs).toBe(1) // already ran in constructor\n\n\t\t\t\ttestElementEffects(el)\n\t\t\t})\n\t\t})\n\t})\n})\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file +{"version":3,"file":"effect.test.js","names":["createSignal","batch","createRoot","createEffect","signal","memo","effect","startEffects","stopEffects","Effects","testElementEffects","describe","it","_initProto","_init_b","_init_extra_b","a","setA","Funkalicious","_applyDecs","e","constructor","last","runs","b","logSum","fun","basicTest","_initProto2","_init_b2","_init_extra_b2","autoStartEffects","expect","toBe","_initProto3","_init_b3","_init_extra_b3","args","_initProto4","_init_b4","_init_extra_b4","_call_logSum","_","_init_b5","_init_extra_b5","_init_logSum","_get_logSum","_set_logSum","_init_extra_logSum","o","A","v","#logSum","_initProto5","_init_b6","_init_extra_b6","_initProto6","_init_b7","_init_extra_b7","_call_logSum2","_init_b8","_init_extra_b8","_init_logSum2","_get_logSum2","_set_logSum2","_init_extra_logSum2","useFunctions","_initProto7","_init_b9","_init_extra_b9","_init_eff","_init_extra_eff","sum1","sum2","Doubler","eff1","eff2","_initProto8","_init_b0","_init_extra_b0","_init_eff2","_init_extra_eff2","_initProto9","setB","memoVal","effectRuns","MemoUser","sum","report","m","_initProto0","_init_b1","_init_extra_b1","_init_compute","_init_extra_compute","AccessorClass","child","result","compute","Sub","_init_b10","_init_extra_b10","_init_compute2","_init_extra_compute2","_initProto1","_init_b11","_init_extra_b11","observed","PlainYogurt","p","dispose","d","_init_b12","_init_extra_b12","_init_eff3","_init_extra_eff3","_init_eff4","_init_extra_eff4","baseRuns","subRuns","Base","eff","_init_b13","_init_extra_b13","_init_eff5","_init_extra_eff5","_init_eff6","_init_extra_eff6","_initProto10","_init_b14","_init_extra_b14","_initProto11","_init_c","_init_extra_c","superRuns","c","_initProto12","_init_b15","_init_extra_b15","_initProto13","_init_c2","_init_extra_c2","_initProto14","_init_d","_init_extra_d","midRuns","Mid","_initProto15","_init_b16","_init_extra_b16","_initProto16","_initProto17","_init_a","_init_extra_a","_init_b17","_init_extra_b17","outerRuns","innerRuns","MyEffects","outer","_init_nope","_init_extra_nope","BadField","nope","toThrow","_initProto18","_init_a2","_init_extra_a2","BadGetter","_initStatic","BadStatic","_init_a3","_init_extra_a3","_init_nope2","_init_extra_nope2","NonFunction","run","_initProto19","SuperDuper","dupe","el","document","createElement"],"sources":["../../src/decorators/effect.test.ts"],"sourcesContent":["import {createSignal, batch, createRoot, createEffect} from 'solid-js'\nimport {signal} from './signal.js'\nimport {memo} from './memo.js'\nimport {effect, startEffects, stopEffects} from './effect.js'\nimport {Effects} from '../mixins/Effectful.js'\nimport {testElementEffects, type MyElement4} from '../index.test.js'\n\ndescribe('classy-solid', () => {\n\tdescribe('@effect decorator', () => {\n\t\tit('runs a basic public method effect, using stopEffects', () => {\n\t\t\tconst [a, setA] = createSignal(1)\n\n\t\t\tclass Funkalicious {\n\t\t\t\tlast: number | null = null\n\t\t\t\truns = 0\n\n\t\t\t\t@signal b = 2\n\n\t\t\t\t@effect logSum() {\n\t\t\t\t\tthis.runs++\n\t\t\t\t\tthis.last = a() + this.b\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst fun = new Funkalicious()\n\t\t\tbasicTest(fun, setA)\n\t\t})\n\n\t\tit('runs a basic public method effect, using stopEffects, with autoStart false', () => {\n\t\t\tconst [a, setA] = createSignal(1)\n\n\t\t\tclass Funkalicious {\n\t\t\t\tlast: number | null = null\n\t\t\t\truns = 0\n\n\t\t\t\t@signal b = 2\n\n\t\t\t\tstatic autoStartEffects = false\n\n\t\t\t\t@effect logSum() {\n\t\t\t\t\tthis.runs++\n\t\t\t\t\tthis.last = a() + this.b\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst fun = new Funkalicious()\n\n\t\t\t// Ensure effects didn't start yet.\n\t\t\texpect(fun.last === null).toBe(true)\n\t\t\texpect(fun.runs).toBe(0)\n\n\t\t\tstartEffects(fun) // manually start first\n\n\t\t\tbasicTest(fun, setA)\n\t\t})\n\n\t\tit('works with both static autoStartEffects = false and Effects class without calling start/stopEffects methods', () => {\n\t\t\tconst [a, setA] = createSignal(1)\n\n\t\t\tclass Funkalicious extends Effects {\n\t\t\t\tlast: number | null = null\n\t\t\t\truns = 0\n\n\t\t\t\t@signal b = 2\n\n\t\t\t\tstatic autoStartEffects = false\n\n\t\t\t\t@effect logSum() {\n\t\t\t\t\tthis.runs++\n\t\t\t\t\tthis.last = a() + this.b\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst fun = new Funkalicious()\n\n\t\t\t// Ensure effects didn't start yet.\n\t\t\texpect(fun.last === null).toBe(true)\n\t\t\texpect(fun.runs).toBe(0)\n\n\t\t\tstartEffects(fun) // manually start first\n\n\t\t\tbasicTest(fun, setA, true)\n\t\t})\n\n\t\tit('runs a basic private method effect, using stopEffects', () => {\n\t\t\tconst [a, setA] = createSignal(1)\n\n\t\t\tclass Funkalicious {\n\t\t\t\tlast: number | null = null\n\t\t\t\truns = 0\n\n\t\t\t\t@signal b = 2\n\n\t\t\t\t// @ts-expect-error unused private method\n\t\t\t\t@effect #logSum() {\n\t\t\t\t\tthis.runs++\n\t\t\t\t\tthis.last = a() + this.b\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst fun = new Funkalicious()\n\t\t\tbasicTest(fun, setA)\n\t\t})\n\n\t\tit('runs a basic private auto accessor effect, using stopEffects', () => {\n\t\t\tconst [a, setA] = createSignal(1)\n\n\t\t\tclass Funkalicious {\n\t\t\t\tlast: number | null = null\n\t\t\t\truns = 0\n\n\t\t\t\t@signal b = 2\n\n\t\t\t\t// @ts-expect-error unused private member\n\t\t\t\t@effect accessor #logSum = () => {\n\t\t\t\t\tthis.runs++\n\t\t\t\t\tthis.last = a() + this.b\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst fun = new Funkalicious()\n\t\t\tbasicTest(fun, setA)\n\t\t})\n\n\t\tit('runs a basic public method effect, using Effects', () => {\n\t\t\tconst [a, setA] = createSignal(1)\n\n\t\t\tclass Funkalicious extends Effects {\n\t\t\t\tlast: number | null = null\n\t\t\t\truns = 0\n\n\t\t\t\t@signal b = 2\n\n\t\t\t\t@effect logSum() {\n\t\t\t\t\tthis.runs++\n\t\t\t\t\tthis.last = a() + this.b\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst fun = new Funkalicious()\n\t\t\tbasicTest(fun, setA)\n\t\t})\n\n\t\tit('runs a basic private method effect, using Effects', () => {\n\t\t\tconst [a, setA] = createSignal(1)\n\n\t\t\tclass Funkalicious extends Effects {\n\t\t\t\tlast: number | null = null\n\t\t\t\truns = 0\n\n\t\t\t\t@signal b = 2\n\n\t\t\t\t// @ts-expect-error unused private method\n\t\t\t\t@effect #logSum() {\n\t\t\t\t\tthis.runs++\n\t\t\t\t\tthis.last = a() + this.b\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst fun = new Funkalicious()\n\t\t\tbasicTest(fun, setA)\n\t\t})\n\n\t\tit('runs a basic private auto accessor effect, using Effects', () => {\n\t\t\tconst [a, setA] = createSignal(1)\n\n\t\t\tclass Funkalicious extends Effects {\n\t\t\t\tlast: number | null = null\n\t\t\t\truns = 0\n\n\t\t\t\t@signal b = 2\n\n\t\t\t\t// @ts-expect-error unused private member\n\t\t\t\t@effect accessor #logSum = () => {\n\t\t\t\t\tthis.runs++\n\t\t\t\t\tthis.last = a() + this.b\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst fun = new Funkalicious()\n\t\t\tbasicTest(fun, setA)\n\t\t})\n\n\t\tfunction basicTest(\n\t\t\tfun: {b: number; last: number | null; runs: number},\n\t\t\tsetA: (v: number) => void,\n\t\t\tuseFunctions = false,\n\t\t) {\n\t\t\texpect(fun.last).toBe(1 + 2)\n\t\t\texpect(fun.runs).toBe(1)\n\n\t\t\tsetA(5)\n\t\t\texpect(fun.last).toBe(5 + 2)\n\t\t\texpect(fun.runs).toBe(2)\n\n\t\t\tfun.b = 10\n\t\t\texpect(fun.last).toBe(5 + 10)\n\t\t\texpect(fun.runs).toBe(3)\n\t\t\tfun instanceof Effects && !useFunctions ? fun.stopEffects() : stopEffects(fun)\n\t\t\tsetA(1)\n\t\t\tfun.b = 1\n\t\t\texpect(fun.last).toBe(5 + 10)\n\t\t\texpect(fun.runs).toBe(3)\n\n\t\t\tfun instanceof Effects && !useFunctions ? fun.startEffects() : startEffects(fun)\n\t\t\texpect(fun.last).toBe(1 + 1)\n\t\t\texpect(fun.runs).toBe(4)\n\n\t\t\t// Ensure no duplicate effects\n\t\t\tfun instanceof Effects && !useFunctions ? fun.startEffects() : startEffects(fun)\n\t\t\texpect(fun.last).toBe(1 + 1)\n\t\t\texpect(fun.runs).toBe(4)\n\n\t\t\tsetA(3)\n\t\t\texpect(fun.last).toBe(3 + 1)\n\t\t\texpect(fun.runs).toBe(5)\n\n\t\t\tfun instanceof Effects && !useFunctions ? fun.stopEffects() : stopEffects(fun)\n\t\t\tsetA(10)\n\t\t\tfun.b = 20\n\t\t\texpect(fun.last).toBe(3 + 1)\n\t\t\texpect(fun.runs).toBe(5)\n\t\t}\n\n\t\tit('runs multiple effects independently, using Effects', () => {\n\t\t\tconst [a, setA] = createSignal(1)\n\t\t\tlet sum1 = 0\n\t\t\tlet sum2 = 0\n\t\t\tlet runs = 0\n\n\t\t\tclass Doubler extends Effects {\n\t\t\t\t@signal b = 3\n\t\t\t\t@effect eff1() {\n\t\t\t\t\truns++\n\t\t\t\t\tsum1 = a() + this.b\n\t\t\t\t}\n\t\t\t\t@effect accessor eff2 = () => {\n\t\t\t\t\truns++\n\t\t\t\t\tsum2 = (a() + this.b) * 2\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst o = new Doubler()\n\t\t\texpect(sum1).toBe(4)\n\t\t\texpect(sum2).toBe(8)\n\t\t\texpect(runs).toBe(2)\n\n\t\t\tsetA(2)\n\t\t\texpect(sum1).toBe(5)\n\t\t\texpect(sum2).toBe(10)\n\t\t\texpect(runs).toBe(4)\n\n\t\t\to.b = 4\n\t\t\texpect(sum1).toBe(6)\n\t\t\texpect(sum2).toBe(12)\n\t\t\texpect(runs).toBe(6)\n\n\t\t\to.stopEffects()\n\t\t\tsetA(10)\n\t\t\to.b = 20\n\t\t\texpect(sum1).toBe(6)\n\t\t\texpect(sum2).toBe(12)\n\t\t\texpect(runs).toBe(6)\n\t\t})\n\n\t\tit('runs multiple effects independently, using stopEffects', () => {\n\t\t\tconst [a, setA] = createSignal(1)\n\t\t\tlet sum1 = 0\n\t\t\tlet sum2 = 0\n\t\t\tlet runs = 0\n\n\t\t\tclass Doubler {\n\t\t\t\t@signal b = 3\n\t\t\t\t@effect eff1() {\n\t\t\t\t\truns++\n\t\t\t\t\tsum1 = a() + this.b\n\t\t\t\t}\n\t\t\t\t@effect accessor eff2 = () => {\n\t\t\t\t\truns++\n\t\t\t\t\tsum2 = (a() + this.b) * 2\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst o = new Doubler()\n\t\t\texpect(sum1).toBe(4)\n\t\t\texpect(sum2).toBe(8)\n\t\t\texpect(runs).toBe(2)\n\n\t\t\tsetA(2)\n\t\t\texpect(sum1).toBe(5)\n\t\t\texpect(sum2).toBe(10)\n\t\t\texpect(runs).toBe(4)\n\n\t\t\to.b = 4\n\t\t\texpect(sum1).toBe(6)\n\t\t\texpect(sum2).toBe(12)\n\t\t\texpect(runs).toBe(6)\n\n\t\t\tstopEffects(o)\n\t\t\tsetA(10)\n\t\t\to.b = 20\n\t\t\texpect(sum1).toBe(6)\n\t\t\texpect(sum2).toBe(12)\n\t\t\texpect(runs).toBe(6)\n\t\t})\n\n\t\tit('reruns effect when memos change inside effect, using Effects', () => {\n\t\t\tconst [a, setA] = createSignal(1)\n\t\t\tconst [b, setB] = createSignal(2)\n\t\t\tlet memoVal = 0\n\t\t\tlet effectRuns = 0\n\n\t\t\tclass MemoUser extends Effects {\n\t\t\t\t@memo get sum() {\n\t\t\t\t\treturn a() + b()\n\t\t\t\t}\n\t\t\t\t@effect report() {\n\t\t\t\t\teffectRuns++\n\t\t\t\t\tmemoVal = this.sum\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst m = new MemoUser()\n\t\t\texpect(memoVal).toBe(3)\n\t\t\texpect(effectRuns).toBe(1)\n\n\t\t\tsetA(5)\n\t\t\texpect(memoVal).toBe(7)\n\t\t\texpect(effectRuns).toBe(2)\n\n\t\t\tbatch(() => {\n\t\t\t\tsetA(6)\n\t\t\t\tsetB(1)\n\t\t\t}) // sum stays 7\n\t\t\texpect(effectRuns).toBe(2)\n\n\t\t\tsetB(5)\n\t\t\texpect(memoVal).toBe(11)\n\t\t\texpect(effectRuns).toBe(3)\n\n\t\t\tm.stopEffects()\n\t\t\tsetA(0)\n\t\t\tsetB(0)\n\t\t\texpect(memoVal).toBe(11)\n\t\t\texpect(effectRuns).toBe(3)\n\t\t})\n\n\t\tit('reruns effect when memos change inside effect, using stopEffects', () => {\n\t\t\tconst [a, setA] = createSignal(1)\n\t\t\tconst [b, setB] = createSignal(2)\n\t\t\tlet memoVal = 0\n\t\t\tlet effectRuns = 0\n\n\t\t\tclass MemoUser {\n\t\t\t\t@memo get sum() {\n\t\t\t\t\treturn a() + b()\n\t\t\t\t}\n\t\t\t\t@effect report() {\n\t\t\t\t\teffectRuns++\n\t\t\t\t\tmemoVal = this.sum\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst m = new MemoUser()\n\t\t\texpect(memoVal).toBe(3)\n\t\t\texpect(effectRuns).toBe(1)\n\n\t\t\tsetA(5)\n\t\t\texpect(memoVal).toBe(7)\n\t\t\texpect(effectRuns).toBe(2)\n\n\t\t\tbatch(() => {\n\t\t\t\tsetA(6)\n\t\t\t\tsetB(1)\n\t\t\t}) // sum stays 7\n\t\t\texpect(effectRuns).toBe(2)\n\n\t\t\tsetB(5)\n\t\t\texpect(memoVal).toBe(11)\n\t\t\texpect(effectRuns).toBe(3)\n\n\t\t\tstopEffects(m)\n\t\t\tsetA(0)\n\t\t\tsetB(0)\n\t\t\texpect(memoVal).toBe(11)\n\t\t})\n\n\t\tit('runs an effect on auto accessor, using Effects', () => {\n\t\t\tconst [a, setA] = createSignal(1)\n\n\t\t\tclass AccessorClass extends Effects {\n\t\t\t\t@signal b = 2\n\n\t\t\t\t// Stick this here to ensure that nested constructor doesn't\n\t\t\t\t// interfere with decorator behavior mid-way through initialization\n\t\t\t\t// of the wrapper parent class (tested with a subclass)\n\t\t\t\tchild: AccessorClass | null = this.constructor !== AccessorClass ? new AccessorClass() : null\n\n\t\t\t\tresult = 0\n\t\t\t\truns = 0\n\t\t\t\t@effect accessor compute = () => {\n\t\t\t\t\tthis.runs++\n\t\t\t\t\tthis.result = a() + this.b\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tclass Sub extends AccessorClass {}\n\n\t\t\tconst o = new Sub()\n\t\t\texpect(o.result).toBe(3)\n\t\t\texpect(o.runs).toBe(1)\n\n\t\t\tsetA(5)\n\t\t\texpect(o.result).toBe(7)\n\t\t\texpect(o.runs).toBe(2)\n\t\t\to.b = 10\n\t\t\texpect(o.result).toBe(15)\n\t\t\texpect(o.runs).toBe(3)\n\n\t\t\to.stopEffects()\n\t\t\tsetA(1)\n\t\t\to.b = 1\n\t\t\texpect(o.result).toBe(15)\n\t\t\texpect(o.runs).toBe(3)\n\t\t})\n\n\t\tit('runs an effect on auto accessor, using stopEffects', () => {\n\t\t\tconst [a, setA] = createSignal(1)\n\n\t\t\tclass AccessorClass {\n\t\t\t\t@signal b = 2\n\n\t\t\t\t// Stick this here to ensure that nested constructor doesn't\n\t\t\t\t// interfere with decorator behavior mid-way through initialization\n\t\t\t\t// of the wrapper parent class (tested with a subclass)\n\t\t\t\tchild: AccessorClass | null = this.constructor !== AccessorClass ? new AccessorClass() : null\n\n\t\t\t\tresult = 0\n\t\t\t\truns = 0\n\t\t\t\t@effect accessor compute = () => {\n\t\t\t\t\tthis.runs++\n\t\t\t\t\tthis.result = a() + this.b\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tclass Sub extends AccessorClass {}\n\n\t\t\tconst o = new Sub()\n\t\t\texpect(o.result).toBe(3)\n\t\t\texpect(o.runs).toBe(1)\n\n\t\t\tsetA(5)\n\t\t\texpect(o.result).toBe(7)\n\t\t\texpect(o.runs).toBe(2)\n\n\t\t\to.b = 10\n\t\t\texpect(o.result).toBe(15)\n\t\t\texpect(o.runs).toBe(3)\n\n\t\t\tstopEffects(o)\n\t\t\tsetA(1)\n\t\t\to.b = 1\n\t\t\texpect(o.result).toBe(15)\n\t\t\texpect(o.runs).toBe(3)\n\t\t})\n\n\t\tit('managed within an existing root, without Effects, without stopEffects', () => {\n\t\t\tconst [a, setA] = createSignal(1)\n\t\t\tlet observed = 0\n\t\t\tlet runs = 0\n\n\t\t\tclass PlainYogurt {\n\t\t\t\t@signal b = 2\n\t\t\t\t@effect sum() {\n\t\t\t\t\truns++\n\t\t\t\t\tobserved = a() + this.b\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet p!: PlainYogurt\n\t\t\tlet dispose!: () => void\n\n\t\t\tcreateRoot(d => {\n\t\t\t\tp = new PlainYogurt()\n\t\t\t\tdispose = d\n\t\t\t})\n\n\t\t\t// As p is created inside a root, it will be tied to that root's owner,\n\t\t\t// so this stopEffects(p) will not dispose the effects.\n\t\t\tstopEffects(p)\n\n\t\t\texpect(observed).toBe(3)\n\t\t\texpect(runs).toBe(1)\n\n\t\t\tsetA(4)\n\t\t\tp.b = 5\n\n\t\t\texpect(observed).toBe(9)\n\t\t\texpect(runs).toBe(3)\n\n\t\t\t// Now dispose the root to clean up effects\n\t\t\tdispose()\n\t\t\tsetA(10)\n\t\t\tp.b = 20\n\t\t\texpect(observed).toBe(9) // disposed root, no further updates\n\t\t\texpect(runs).toBe(3)\n\t\t})\n\n\t\tdescribe('subclass effect overriding/extending', () => {\n\t\t\tit('runs subclass effect auto accessor extending base effect auto accessor with super', () => {\n\t\t\t\tconst [a, setA] = createSignal(1)\n\n\t\t\t\tlet baseRuns = 0\n\t\t\t\tlet subRuns = 0\n\t\t\t\tlet observed = 0\n\n\t\t\t\tclass Base extends Effects {\n\t\t\t\t\t@signal b = 2\n\t\t\t\t\t@effect accessor eff = () => {\n\t\t\t\t\t\tbaseRuns++\n\t\t\t\t\t\tobserved = a() + this.b\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclass Sub extends Base {\n\t\t\t\t\t@effect override accessor eff = () => {\n\t\t\t\t\t\tsubRuns++\n\t\t\t\t\t\tsuper.eff()\n\t\t\t\t\t\tobserved = observed + 10\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst o = new Sub()\n\t\t\t\texpect(baseRuns).toBe(1)\n\t\t\t\texpect(subRuns).toBe(1)\n\t\t\t\texpect(observed).toBe(1 + 2 + 10)\n\n\t\t\t\to.b = 5\n\t\t\t\texpect(baseRuns).toBe(2)\n\t\t\t\texpect(subRuns).toBe(2)\n\t\t\t\texpect(observed).toBe(1 + 5 + 10)\n\n\t\t\t\tsetA(10)\n\t\t\t\texpect(baseRuns).toBe(3)\n\t\t\t\texpect(subRuns).toBe(3)\n\t\t\t\texpect(observed).toBe(10 + 5 + 10)\n\n\t\t\t\to.stopEffects()\n\t\t\t\to.b = 100\n\t\t\t\texpect(baseRuns).toBe(3)\n\t\t\t\texpect(subRuns).toBe(3)\n\t\t\t\texpect(observed).toBe(10 + 5 + 10)\n\t\t\t})\n\n\t\t\tit('runs subclass effect auto accessor overriding base effect auto accessor without super', () => {\n\t\t\t\tconst [a, setA] = createSignal(1)\n\n\t\t\t\tlet baseRuns = 0\n\t\t\t\tlet subRuns = 0\n\t\t\t\tlet observed = 0\n\n\t\t\t\tclass Base extends Effects {\n\t\t\t\t\t@signal b = 2\n\t\t\t\t\t@effect accessor eff = () => {\n\t\t\t\t\t\tbaseRuns++\n\t\t\t\t\t\tobserved = a() + this.b\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclass Sub extends Base {\n\t\t\t\t\t@effect override accessor eff = () => {\n\t\t\t\t\t\tsubRuns++\n\t\t\t\t\t\tobserved = (a() + this.b) * 2 // override without super\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst o = new Sub()\n\t\t\t\texpect(baseRuns).toBe(0)\n\t\t\t\texpect(subRuns).toBe(1)\n\t\t\t\texpect(observed).toBe((1 + 2) * 2)\n\n\t\t\t\to.b = 5\n\t\t\t\texpect(baseRuns).toBe(0)\n\t\t\t\texpect(subRuns).toBe(2)\n\t\t\t\texpect(observed).toBe((1 + 5) * 2)\n\n\t\t\t\tsetA(10)\n\t\t\t\texpect(baseRuns).toBe(0)\n\t\t\t\texpect(subRuns).toBe(3)\n\t\t\t\texpect(observed).toBe((10 + 5) * 2)\n\n\t\t\t\to.stopEffects()\n\t\t\t\to.b = 100\n\t\t\t\texpect(baseRuns).toBe(0)\n\t\t\t\texpect(subRuns).toBe(3)\n\t\t\t\texpect(observed).toBe((10 + 5) * 2)\n\t\t\t})\n\n\t\t\tit('runs subclass effect method extending base effect method with super', () => {\n\t\t\t\tconst [a, setA] = createSignal(1)\n\t\t\t\tlet superRuns = 0\n\t\t\t\tlet subRuns = 0\n\t\t\t\tlet observed = 0\n\n\t\t\t\tclass Base extends Effects {\n\t\t\t\t\t@signal b = 2\n\t\t\t\t\t@effect compute() {\n\t\t\t\t\t\tsuperRuns++\n\t\t\t\t\t\tobserved = a() + this.b\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclass Sub extends Base {\n\t\t\t\t\t@signal c = 3\n\t\t\t\t\t@effect override compute() {\n\t\t\t\t\t\tsubRuns++\n\t\t\t\t\t\tsuper.compute()\n\t\t\t\t\t\tobserved += this.c // extend behavior\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst o = new Sub()\n\t\t\t\texpect(superRuns).toBe(1)\n\t\t\t\texpect(subRuns).toBe(1)\n\t\t\t\texpect(observed).toBe(1 + 2 + 3) // a + b + extension\n\n\t\t\t\tsetA(5)\n\t\t\t\texpect(superRuns).toBe(2)\n\t\t\t\texpect(subRuns).toBe(2)\n\t\t\t\texpect(observed).toBe(5 + 2 + 3)\n\n\t\t\t\to.b = 10\n\t\t\t\texpect(superRuns).toBe(3)\n\t\t\t\texpect(subRuns).toBe(3)\n\t\t\t\texpect(observed).toBe(5 + 10 + 3)\n\n\t\t\t\to.c = 5\n\t\t\t\texpect(superRuns).toBe(4)\n\t\t\t\texpect(subRuns).toBe(4)\n\t\t\t\texpect(observed).toBe(5 + 10 + 5)\n\n\t\t\t\to.stopEffects()\n\t\t\t\tsetA(0)\n\t\t\t\to.b = 0\n\t\t\t\to.c = 0\n\t\t\t\texpect(superRuns).toBe(4)\n\t\t\t\texpect(subRuns).toBe(4)\n\t\t\t\texpect(observed).toBe(5 + 10 + 5)\n\t\t\t})\n\n\t\t\tit('supports multi-level effect method extending base effect method with super', () => {\n\t\t\t\tconst [a, setA] = createSignal(1)\n\t\t\t\tlet baseRuns = 0\n\t\t\t\tlet midRuns = 0\n\t\t\t\tlet subRuns = 0\n\t\t\t\tlet observed = 0\n\n\t\t\t\tclass Base extends Effects {\n\t\t\t\t\t@signal b = 2\n\t\t\t\t\t@effect compute() {\n\t\t\t\t\t\tbaseRuns++\n\t\t\t\t\t\tobserved = a() + this.b\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclass Mid extends Base {\n\t\t\t\t\t@signal c = 3\n\t\t\t\t\t@effect override compute() {\n\t\t\t\t\t\tmidRuns++\n\t\t\t\t\t\tsuper.compute()\n\t\t\t\t\t\tobserved += this.c\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclass Sub extends Mid {\n\t\t\t\t\t@signal d = 4\n\t\t\t\t\t@effect override compute() {\n\t\t\t\t\t\tsubRuns++\n\t\t\t\t\t\tsuper.compute()\n\t\t\t\t\t\tobserved += this.d\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst o = new Sub()\n\t\t\t\texpect(baseRuns).toBe(1)\n\t\t\t\texpect(midRuns).toBe(1)\n\t\t\t\texpect(subRuns).toBe(1)\n\t\t\t\texpect(observed).toBe(1 + 2 + 3 + 4)\n\n\t\t\t\tsetA(5)\n\t\t\t\texpect(baseRuns).toBe(2)\n\t\t\t\texpect(midRuns).toBe(2)\n\t\t\t\texpect(subRuns).toBe(2)\n\t\t\t\texpect(observed).toBe(5 + 2 + 3 + 4)\n\n\t\t\t\to.b = 10\n\t\t\t\texpect(baseRuns).toBe(3)\n\t\t\t\texpect(midRuns).toBe(3)\n\t\t\t\texpect(subRuns).toBe(3)\n\t\t\t\texpect(observed).toBe(5 + 10 + 3 + 4)\n\n\t\t\t\to.c = 6\n\t\t\t\texpect(baseRuns).toBe(4)\n\t\t\t\texpect(midRuns).toBe(4)\n\t\t\t\texpect(subRuns).toBe(4)\n\t\t\t\texpect(observed).toBe(5 + 10 + 6 + 4)\n\n\t\t\t\to.d = 7\n\t\t\t\texpect(baseRuns).toBe(5)\n\t\t\t\texpect(midRuns).toBe(5)\n\t\t\t\texpect(subRuns).toBe(5)\n\t\t\t\texpect(observed).toBe(5 + 10 + 6 + 7)\n\n\t\t\t\to.stopEffects()\n\t\t\t\tsetA(0)\n\t\t\t\to.b = 0\n\t\t\t\to.c = 0\n\t\t\t\to.d = 0\n\t\t\t\texpect(baseRuns).toBe(5)\n\t\t\t\texpect(midRuns).toBe(5)\n\t\t\t\texpect(subRuns).toBe(5)\n\t\t\t\texpect(observed).toBe(5 + 10 + 6 + 7)\n\t\t\t})\n\n\t\t\tit('runs subclass effect method overriding base effect method without super', () => {\n\t\t\t\tconst [a, setA] = createSignal(1)\n\t\t\t\tlet superRuns = 0\n\t\t\t\tlet subRuns = 0\n\t\t\t\tlet observed = 0\n\n\t\t\t\tclass Base extends Effects {\n\t\t\t\t\t@signal b = 2\n\t\t\t\t\t@effect compute() {\n\t\t\t\t\t\tsuperRuns++\n\t\t\t\t\t\tobserved = a() + this.b\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclass Sub extends Base {\n\t\t\t\t\t@effect override compute() {\n\t\t\t\t\t\tsubRuns++\n\t\t\t\t\t\tobserved = (a() + this.b) * 2 // override without super\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst o = new Sub()\n\t\t\t\texpect(superRuns).toBe(0)\n\t\t\t\texpect(subRuns).toBe(1)\n\t\t\t\texpect(observed).toBe((1 + 2) * 2)\n\n\t\t\t\tsetA(3)\n\t\t\t\texpect(superRuns).toBe(0)\n\t\t\t\texpect(subRuns).toBe(2)\n\t\t\t\texpect(observed).toBe((3 + 2) * 2)\n\n\t\t\t\to.b = 5\n\t\t\t\texpect(superRuns).toBe(0)\n\t\t\t\texpect(subRuns).toBe(3)\n\t\t\t\texpect(observed).toBe((3 + 5) * 2)\n\n\t\t\t\to.stopEffects()\n\t\t\t\tsetA(10)\n\t\t\t\to.b = 1\n\t\t\t\texpect(subRuns).toBe(3)\n\t\t\t})\n\t\t})\n\n\t\tit('works with nested effects', () => {\n\t\t\tlet outerRuns = 0\n\t\t\tlet innerRuns = 0\n\n\t\t\tclass MyEffects {\n\t\t\t\t@signal a = 0\n\t\t\t\t@signal b = 0\n\n\t\t\t\t@effect outer() {\n\t\t\t\t\touterRuns++\n\t\t\t\t\tthis.a\n\n\t\t\t\t\tcreateEffect(() => {\n\t\t\t\t\t\tinnerRuns++\n\t\t\t\t\t\tthis.b\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst e = new MyEffects()\n\n\t\t\texpect(outerRuns).toBe(1)\n\t\t\texpect(innerRuns).toBe(1)\n\n\t\t\tstartEffects(e) // should not duplicate effects (already started)\n\n\t\t\texpect(outerRuns).toBe(1)\n\t\t\texpect(innerRuns).toBe(1)\n\n\t\t\te.a = 1\n\t\t\texpect(outerRuns).toBe(2)\n\t\t\texpect(innerRuns).toBe(2) // inner effect runs because outer effect re-ran\n\n\t\t\te.b = 1\n\t\t\texpect(outerRuns).toBe(2)\n\t\t\texpect(innerRuns).toBe(3) // inner effect runs independently\n\n\t\t\tstopEffects(e)\n\n\t\t\texpect(outerRuns).toBe(2)\n\t\t\texpect(innerRuns).toBe(3)\n\n\t\t\tstartEffects(e)\n\n\t\t\texpect(outerRuns).toBe(3)\n\t\t\texpect(innerRuns).toBe(4) // inner effect runs because outer effect re-ran\n\n\t\t\te.b = 2\n\t\t\texpect(outerRuns).toBe(3)\n\t\t\texpect(innerRuns).toBe(5) // inner effect runs independently\n\t\t})\n\n\t\tdescribe('invalid usage', () => {\n\t\t\tit('throws on invalid field usage', () => {\n\t\t\t\texpect(() => {\n\t\t\t\t\tclass BadField {\n\t\t\t\t\t\t// @ts-expect-error invalid decorator usage on field\n\t\t\t\t\t\t@effect nope = () => 123\n\t\t\t\t\t}\n\t\t\t\t\tnew BadField()\n\t\t\t\t}).toThrow('@effect can only be used on methods or function-valued auto accessors')\n\t\t\t})\n\n\t\t\tit('throws on invalid getter usage', () => {\n\t\t\t\texpect(() => {\n\t\t\t\t\tclass BadGetter {\n\t\t\t\t\t\t@signal a = 1\n\t\t\t\t\t\t// @ts-expect-error invalid decorator usage on getter\n\t\t\t\t\t\t@effect get nope() {\n\t\t\t\t\t\t\treturn this.a\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tnew BadGetter()\n\t\t\t\t}).toThrow('@effect can only be used on methods or function-valued auto accessors')\n\t\t\t})\n\n\t\t\tit('throws on invalid static usage', () => {\n\t\t\t\texpect(() => {\n\t\t\t\t\tclass BadStatic {\n\t\t\t\t\t\t@effect static nope() {}\n\t\t\t\t\t}\n\t\t\t\t\tBadStatic\n\t\t\t\t}).toThrow('@effect is not supported on static members.')\n\t\t\t})\n\n\t\t\tit('throws on invalid non-function value', () => {\n\t\t\t\texpect(() => {\n\t\t\t\t\tclass NonFunction {\n\t\t\t\t\t\t@signal a = 1\n\t\t\t\t\t\t// @ts-expect-error invalid decorator usage on non-function\n\t\t\t\t\t\t@effect accessor nope: number = 123\n\t\t\t\t\t}\n\t\t\t\t\tnew NonFunction()\n\t\t\t\t}).toThrow('@effect decorated member \"nope\" is not a function')\n\t\t\t})\n\n\t\t\tit('throws on duplicate members', () => {\n\t\t\t\tconst run = () => {\n\t\t\t\t\tclass SuperDuper {\n\t\t\t\t\t\t// @ts-expect-error duplicate member\n\t\t\t\t\t\t@effect dupe() {\n\t\t\t\t\t\t\tthis\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// @ts-expect-error duplicate member\n\t\t\t\t\t\t@effect dupe() {\n\t\t\t\t\t\t\tthis\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tnew SuperDuper()\n\t\t\t\t}\n\n\t\t\t\t// When compiling with Babel, decorators currently throw an error when applied onto multiple members of the same name.\n\t\t\t\texpect(run).toThrow('Decorating two elements with the same name (dupe) is not supported yet')\n\n\t\t\t\t// When compiling with TypeScript, decorating duplicate members is allowed, and the last one wins.\n\t\t\t\t// expect(run).toThrow(\n\t\t\t\t// \t'@effect decorated member \"dupe\" has already been effectified. This can happen if there are duplicated class members.',\n\t\t\t\t// )\n\t\t\t})\n\t\t})\n\n\t\tdescribe('usage with custom elements', () => {\n\t\t\tit('@effect methods, startEffects in connectedCallback, stopEffects in disconnectedCallback', () => {\n\t\t\t\tconst el = document.createElement('my-element4') as MyElement4\n\t\t\t\texpect(el.result).toBe(1 + 2)\n\t\t\t\texpect(el.runs).toBe(1) // already ran in constructor\n\n\t\t\t\ttestElementEffects(el)\n\t\t\t})\n\t\t})\n\t})\n})\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/dist/decorators/memo.js b/dist/decorators/memo.js index 7fe04fa..35a041d 100644 --- a/dist/decorators/memo.js +++ b/dist/decorators/memo.js @@ -1,6 +1,6 @@ import { createMemo, createRoot } from 'solid-js'; import { createWritableMemo } from '@solid-primitives/memo'; -import { finalizeMembersIfLast, getMemberStat, getMembers, memoifyIfNeeded } from '../_state.js'; +import { finalizeMembersIfLast__, getMemberStat__, getMembers__, memoifyIfNeeded__ } from '../_state.js'; import './metadata-shim.js'; /** @@ -109,7 +109,7 @@ context) { name } = context; const metadata = context.metadata; - const members = getMembers(metadata); + const members = getMembers__(metadata); // Apply finalization logic to all except setters (setters are finalized // together with their getters). @@ -196,12 +196,12 @@ context) { // @ts-expect-error skip type checking in case of invalid kind in plain JS if (kind === 'field') throw new Error('@memo is not supported on class fields.'); const memberType = kind === 'accessor' ? 'memo-auto-accessor' : kind === 'method' ? 'memo-method' : 'memo-accessor'; - const stat = getMemberStat(name, memberType, members, context); + const stat = getMemberStat__(name, memberType, members, context); stat.finalize = function () { - memoifyIfNeeded(this, stat); + memoifyIfNeeded__(this, stat); }; context.addInitializer(function () { - finalizeMembersIfLast(this, members); + finalizeMembersIfLast__(this, members); }); if (kind === 'method' || kind === 'getter') stat.value = value;else if (kind === 'accessor') stat.value = value.get; } diff --git a/dist/decorators/memo.js.map b/dist/decorators/memo.js.map index 5446517..6f0ce77 100644 --- a/dist/decorators/memo.js.map +++ b/dist/decorators/memo.js.map @@ -1 +1 @@ -{"version":3,"file":"memo.js","names":["createMemo","createRoot","createWritableMemo","finalizeMembersIfLast","getMemberStat","getMembers","memoifyIfNeeded","memo","value","context","static","Error","kind","name","metadata","members","private","getterSetterMemos","getGetterSetterMemos","val","get","memos","memoFn","self","set","call","WeakMap","init","Undefined","Symbol","length","memberType","stat","finalize","addInitializer","Object","hasOwn","classySolid_getterSetterMemos","getterSetterMemoStorage"],"sources":["../../src/decorators/memo.ts"],"sourcesContent":["import {createMemo, createRoot, type Setter, type Signal} from 'solid-js'\nimport {createWritableMemo} from '@solid-primitives/memo'\nimport type {AnyObject, ClassySolidMetadata, PropKey} from './types.js'\nimport {finalizeMembersIfLast, getMemberStat, getMembers, memoifyIfNeeded} from '../_state.js'\nimport './metadata-shim.js'\n\n/**\n * A decorator that make a signal property derived from a memoized computation\n * based on other signals. Effects depending on this property will re-run when\n * the computed value changes, but not if the computed value stays the same even\n * if the dependencies changed.\n *\n * @example\n * ```ts\n * import {reactive, signal, memo} from \"classy-solid\";\n *\n * class Example {\n * @signal a = 1\n * @signal b = 2\n *\n * // @memo can be used on a getter, accessor, or method, with readonly and\n * // writable variants:\n *\n * // Readonly memo via getter only\n * @memo get sum1() {\n * return this.a + this.b\n * }\n *\n * // Writable memo via getter with setter\n * @memo get sum2() {\n * return this.a + this.b\n * }\n * @memo set sum2(value: number) {\n * // use an empty setter to enable writable (logic in here will be ignored if any)\n * }\n *\n * // Readonly memo via auto accessor (requires arrow function, not writable because no parameter (arity = 0))\n * @memo accessor sum3 = () => this.a + this.b\n *\n * // Writable memo via auto accessor (requires arrow function with parameter, arity > 0)\n * // Ignore the parameter, it only enables writable memo\n * @memo accessor sum4 = (v?: number) => this.a + this.b\n *\n * // Readonly memo via method\n * @memo sum5() {\n * return this.a + this.b\n * }\n *\n * // Writable memo via method with parameter (arity > 0)\n * @memo sum6(value?: number) {\n * // Ignore the parameter, it only enables writable memo\n * return this.a + this.b\n * }\n *\n * // The following variants are not supported yet as no runtime or TS support exists yet for the syntax.\n *\n * // Writable memo via accessor, alternative long-hand syntax (not yet released, no runtime or TS support yet)\n * @memo accessor sum6 { get; set } = () => this.a + this.b\n *\n * // Readonly memo via accessor with only getter (not released yet, no runtime or TS support yet)\n * @memo accessor sum7 { get; } = () => this.a + this.b\n *\n * // Readonly memo via accessor with only getter, alternative syntax (not released yet, no runtime or TS support yet)\n * @memo accessor sum8 {\n * get() {\n * return this.a + this.b\n * }\n * }\n *\n * // Readonly memo via accessor with only getter, alternative syntax (not released yet, no runtime or TS support yet)\n * @memo accessor sum8 {\n * get() {\n * return this.a + this.b\n * }\n * set(_v: number) {\n * // empty setter makes it writable (logic in here will be ignored if any)\n * }\n * }\n * }\n *\n * const ex = new Example()\n *\n * console.log(ex.sum1, ex.sum2, ex.sum3(), ex.sum4(), ex.sum5(), ex.sum6()) // 3 3 3 3 3 3\n *\n * createEffect(() => {\n * console.log(ex.sum1, ex.sum2, ex.sum3(), ex.sum4(), ex.sum5(), ex.sum6())\n * });\n *\n * ex.a = 5 // Logs: 7 7 7 7 7 7\n *\n * // This won't log anything since the computed memo values don't change (all still 7).\n * batch(() => {\n * ex.a = 3\n * ex.b = 4\n * })\n *\n * ex.sum2 = 20 // Logs: 20 7 7 7 7 7 (only sum2 is updated)\n *\n * ex.sum6(15) // Logs: 20 7 7 7 7 15 (only sum6 is updated)\n *\n * ex.sum1 = 10 // Runtime error: Cannot set readonly property \"sum1\".\n * ```\n */\nexport function memo(\n\tvalue:\n\t\t| ((val?: any) => any) // writable memo via method\n\t\t| (() => any) // readonly memo via method\n\t\t| ((val?: any) => void) // memo setter\n\t\t| (() => void) // memo getter\n\t\t| ClassAccessorDecoratorTarget any> // today's auto-accessors, readonly memo\n\t\t| ClassAccessorDecoratorTarget any>, // today's auto-accessors, writable memo\n\tcontext:\n\t\t| ClassGetterDecoratorContext\n\t\t| ClassSetterDecoratorContext\n\t\t| ClassAccessorDecoratorContext\n\t\t| ClassMethodDecoratorContext,\n) {\n\tif (context.static) throw new Error('@memo is not supported on static fields yet.')\n\n\tconst {kind, name} = context\n\tconst metadata = context.metadata as ClassySolidMetadata\n\tconst members = getMembers(metadata)\n\n\t// Apply finalization logic to all except setters (setters are finalized\n\t// together with their getters).\n\t// By skipping setters we also avoid double-counting the getter+setter pair\n\t// in the finalizeMembersIfLast logic.\n\tif (kind === 'setter') {\n\t\tif (context.private) {\n\t\t\tconst getterSetterMemos = getGetterSetterMemos(metadata, name)\n\n\t\t\treturn function (this: unknown, val: unknown) {\n\t\t\t\tlet memo = getterSetterMemos.get(this as AnyObject)\n\t\t\t\tif (!memo)\n\t\t\t\t\tthrow new Error('Memo not initialized yet. Access the getter first (f.e. set up effects first), then write.')\n\t\t\t\tmemo![1](val)\n\t\t\t} as any // unable to make TypeScript happy about the return type here at @memo application sites\n\t\t}\n\t\treturn\n\t}\n\n\t// TODO move off of memoify() (memoifyIfNeeded()), and follow this pattern for\n\t// public members like we do here with private members.\n\tif (context.private) {\n\t\tif (kind === 'getter') {\n\t\t\tconst memos = getGetterSetterMemos(metadata, name)\n\t\t\tconst memoFn = value as () => any\n\n\t\t\treturn function (this: unknown) {\n\t\t\t\tconst self = this as AnyObject\n\t\t\t\tlet memo = memos.get(self)\n\t\t\t\tif (!memo) {\n\t\t\t\t\t// Initialize memo on first usage.\n\t\t\t\t\t// Use createRoot to detach the from any current effect or\n\t\t\t\t\t// the memo will be cleaned up when an outer effect re-runs,\n\t\t\t\t\t// stopping any effects that depend on the memo from\n\t\t\t\t\t// re-running.\n\t\t\t\t\t// https://github.com/solidjs/solid/issues/2571\n\t\t\t\t\tmemos.set(self, (memo = createRoot(() => createWritableMemo(() => memoFn.call(this)))))\n\t\t\t\t}\n\t\t\t\treturn memo[0]()\n\t\t\t}\n\t\t} else if (kind === 'accessor') {\n\t\t\tconst memos = new WeakMap>()\n\t\t\tconst memoFn = (value as ClassAccessorDecoratorTarget any>).get\n\n\t\t\tconst get = function (this: unknown) {\n\t\t\t\tconst memo = memos.get(this as AnyObject)!\n\t\t\t\treturn memo[0]()\n\t\t\t}\n\n\t\t\tconst set = function (this: unknown, val: unknown) {\n\t\t\t\tconst memo = memos.get(this as AnyObject)!\n\t\t\t\tmemo[1](val)\n\t\t\t}\n\n\t\t\tconst init = function (this: unknown, val: unknown) {\n\t\t\t\tconst self = this as AnyObject\n\t\t\t\tmemos.set(\n\t\t\t\t\tself,\n\t\t\t\t\tcreateWritableMemo(() => memoFn.call(self), val),\n\t\t\t\t)\n\t\t\t\treturn val\n\t\t\t}\n\n\t\t\treturn {get, set, init}\n\t\t} else if (kind === 'method') {\n\t\t\tconst memos = new WeakMap>()\n\t\t\tconst memoFn = value as (val?: any) => any\n\t\t\tconst Undefined = Symbol()\n\n\t\t\treturn function (this: unknown, val: unknown = Undefined) {\n\t\t\t\tconst self = this as AnyObject\n\t\t\t\tlet memo = memos.get(self)\n\t\t\t\tif (!memo) {\n\t\t\t\t\t// Initialize memo on first usage.\n\t\t\t\t\tmemos.set(\n\t\t\t\t\t\tself,\n\t\t\t\t\t\t// Use createRoot to detach the from any current effect or\n\t\t\t\t\t\t// the memo will be cleaned up when an outer effect re-runs,\n\t\t\t\t\t\t// stopping any effects that depend on the memo from\n\t\t\t\t\t\t// re-running.\n\t\t\t\t\t\t// https://github.com/solidjs/solid/issues/2571\n\t\t\t\t\t\t(memo = createRoot(() =>\n\t\t\t\t\t\t\tmemoFn.length === 0\n\t\t\t\t\t\t\t\t? [createMemo(() => memoFn.call(self)), (() => {}) as Setter]\n\t\t\t\t\t\t\t\t: createWritableMemo(() => {\n\t\t\t\t\t\t\t\t\t\tdebugger\n\t\t\t\t\t\t\t\t\t\treturn memoFn.call(self)\n\t\t\t\t\t\t\t\t }),\n\t\t\t\t\t\t)),\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\treturn val === Undefined ? memo[0]() : memo[1](val)\n\t\t\t}\n\t\t}\n\t}\n\n\t// @ts-expect-error skip type checking in case of invalid kind in plain JS\n\tif (kind === 'field') throw new Error('@memo is not supported on class fields.')\n\n\tconst memberType = kind === 'accessor' ? 'memo-auto-accessor' : kind === 'method' ? 'memo-method' : 'memo-accessor'\n\n\tconst stat = getMemberStat(name, memberType, members, context)\n\n\tstat.finalize = function () {\n\t\tmemoifyIfNeeded(this as AnyObject, stat)\n\t}\n\n\tcontext.addInitializer(function () {\n\t\tfinalizeMembersIfLast(this as AnyObject, members)\n\t})\n\n\tif (kind === 'method' || kind === 'getter') stat.value = value\n\telse if (kind === 'accessor') stat.value = (value as ClassAccessorDecoratorTarget void>).get\n}\n\nfunction getGetterSetterMemos(metadata: ClassySolidMetadata, name: PropKey) {\n\tif (!Object.hasOwn(metadata, 'classySolid_getterSetterMemos')) metadata.classySolid_getterSetterMemos = {}\n\tconst getterSetterMemoStorage = metadata.classySolid_getterSetterMemos!\n\tlet getterSetterMemos = getterSetterMemoStorage[name]\n\tif (!getterSetterMemos)\n\t\tmetadata.classySolid_getterSetterMemos![name] = getterSetterMemos = new WeakMap>()\n\treturn getterSetterMemos\n}\n"],"mappings":"AAAA,SAAQA,UAAU,EAAEC,UAAU,QAAiC,UAAU;AACzE,SAAQC,kBAAkB,QAAO,wBAAwB;AAEzD,SAAQC,qBAAqB,EAAEC,aAAa,EAAEC,UAAU,EAAEC,eAAe,QAAO,cAAc;AAC9F,OAAO,oBAAoB;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,IAAIA,CACnBC,KAM+D;AAAE;AACjEC,OAI8B,EAC7B;EACD,IAAIA,OAAO,CAACC,MAAM,EAAE,MAAM,IAAIC,KAAK,CAAC,8CAA8C,CAAC;EAEnF,MAAM;IAACC,IAAI;IAAEC;EAAI,CAAC,GAAGJ,OAAO;EAC5B,MAAMK,QAAQ,GAAGL,OAAO,CAACK,QAA+B;EACxD,MAAMC,OAAO,GAAGV,UAAU,CAACS,QAAQ,CAAC;;EAEpC;EACA;EACA;EACA;EACA,IAAIF,IAAI,KAAK,QAAQ,EAAE;IACtB,IAAIH,OAAO,CAACO,OAAO,EAAE;MACpB,MAAMC,iBAAiB,GAAGC,oBAAoB,CAACJ,QAAQ,EAAED,IAAI,CAAC;MAE9D,OAAO,UAAyBM,GAAY,EAAE;QAC7C,IAAIZ,IAAI,GAAGU,iBAAiB,CAACG,GAAG,CAAC,IAAiB,CAAC;QACnD,IAAI,CAACb,IAAI,EACR,MAAM,IAAII,KAAK,CAAC,4FAA4F,CAAC;QAC9GJ,IAAI,CAAE,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","ignoreList":[]} \ No newline at end of file +{"version":3,"file":"memo.js","names":["createMemo","createRoot","createWritableMemo","finalizeMembersIfLast__","getMemberStat__","getMembers__","memoifyIfNeeded__","memo","value","context","static","Error","kind","name","metadata","members","private","getterSetterMemos","getGetterSetterMemos","val","get","memos","memoFn","self","set","call","WeakMap","init","Undefined","Symbol","length","memberType","stat","finalize","addInitializer","Object","hasOwn","classySolid_getterSetterMemos","getterSetterMemoStorage"],"sources":["../../src/decorators/memo.ts"],"sourcesContent":["import {createMemo, createRoot, type Setter, type Signal} from 'solid-js'\nimport {createWritableMemo} from '@solid-primitives/memo'\nimport type {AnyObject, ClassySolidMetadata, PropKey} from './types.js'\nimport {finalizeMembersIfLast__, getMemberStat__, getMembers__, memoifyIfNeeded__} from '../_state.js'\nimport './metadata-shim.js'\n\n/**\n * A decorator that make a signal property derived from a memoized computation\n * based on other signals. Effects depending on this property will re-run when\n * the computed value changes, but not if the computed value stays the same even\n * if the dependencies changed.\n *\n * @example\n * ```ts\n * import {reactive, signal, memo} from \"classy-solid\";\n *\n * class Example {\n * @signal a = 1\n * @signal b = 2\n *\n * // @memo can be used on a getter, accessor, or method, with readonly and\n * // writable variants:\n *\n * // Readonly memo via getter only\n * @memo get sum1() {\n * return this.a + this.b\n * }\n *\n * // Writable memo via getter with setter\n * @memo get sum2() {\n * return this.a + this.b\n * }\n * @memo set sum2(value: number) {\n * // use an empty setter to enable writable (logic in here will be ignored if any)\n * }\n *\n * // Readonly memo via auto accessor (requires arrow function, not writable because no parameter (arity = 0))\n * @memo accessor sum3 = () => this.a + this.b\n *\n * // Writable memo via auto accessor (requires arrow function with parameter, arity > 0)\n * // Ignore the parameter, it only enables writable memo\n * @memo accessor sum4 = (v?: number) => this.a + this.b\n *\n * // Readonly memo via method\n * @memo sum5() {\n * return this.a + this.b\n * }\n *\n * // Writable memo via method with parameter (arity > 0)\n * @memo sum6(value?: number) {\n * // Ignore the parameter, it only enables writable memo\n * return this.a + this.b\n * }\n *\n * // The following variants are not supported yet as no runtime or TS support exists yet for the syntax.\n *\n * // Writable memo via accessor, alternative long-hand syntax (not yet released, no runtime or TS support yet)\n * @memo accessor sum6 { get; set } = () => this.a + this.b\n *\n * // Readonly memo via accessor with only getter (not released yet, no runtime or TS support yet)\n * @memo accessor sum7 { get; } = () => this.a + this.b\n *\n * // Readonly memo via accessor with only getter, alternative syntax (not released yet, no runtime or TS support yet)\n * @memo accessor sum8 {\n * get() {\n * return this.a + this.b\n * }\n * }\n *\n * // Readonly memo via accessor with only getter, alternative syntax (not released yet, no runtime or TS support yet)\n * @memo accessor sum8 {\n * get() {\n * return this.a + this.b\n * }\n * set(_v: number) {\n * // empty setter makes it writable (logic in here will be ignored if any)\n * }\n * }\n * }\n *\n * const ex = new Example()\n *\n * console.log(ex.sum1, ex.sum2, ex.sum3(), ex.sum4(), ex.sum5(), ex.sum6()) // 3 3 3 3 3 3\n *\n * createEffect(() => {\n * console.log(ex.sum1, ex.sum2, ex.sum3(), ex.sum4(), ex.sum5(), ex.sum6())\n * });\n *\n * ex.a = 5 // Logs: 7 7 7 7 7 7\n *\n * // This won't log anything since the computed memo values don't change (all still 7).\n * batch(() => {\n * ex.a = 3\n * ex.b = 4\n * })\n *\n * ex.sum2 = 20 // Logs: 20 7 7 7 7 7 (only sum2 is updated)\n *\n * ex.sum6(15) // Logs: 20 7 7 7 7 15 (only sum6 is updated)\n *\n * ex.sum1 = 10 // Runtime error: Cannot set readonly property \"sum1\".\n * ```\n */\nexport function memo(\n\tvalue:\n\t\t| ((val?: any) => any) // writable memo via method\n\t\t| (() => any) // readonly memo via method\n\t\t| ((val?: any) => void) // memo setter\n\t\t| (() => void) // memo getter\n\t\t| ClassAccessorDecoratorTarget any> // today's auto-accessors, readonly memo\n\t\t| ClassAccessorDecoratorTarget any>, // today's auto-accessors, writable memo\n\tcontext:\n\t\t| ClassGetterDecoratorContext\n\t\t| ClassSetterDecoratorContext\n\t\t| ClassAccessorDecoratorContext\n\t\t| ClassMethodDecoratorContext,\n) {\n\tif (context.static) throw new Error('@memo is not supported on static fields yet.')\n\n\tconst {kind, name} = context\n\tconst metadata = context.metadata as ClassySolidMetadata\n\tconst members = getMembers__(metadata)\n\n\t// Apply finalization logic to all except setters (setters are finalized\n\t// together with their getters).\n\t// By skipping setters we also avoid double-counting the getter+setter pair\n\t// in the finalizeMembersIfLast logic.\n\tif (kind === 'setter') {\n\t\tif (context.private) {\n\t\t\tconst getterSetterMemos = getGetterSetterMemos(metadata, name)\n\n\t\t\treturn function (this: unknown, val: unknown) {\n\t\t\t\tlet memo = getterSetterMemos.get(this as AnyObject)\n\t\t\t\tif (!memo)\n\t\t\t\t\tthrow new Error('Memo not initialized yet. Access the getter first (f.e. set up effects first), then write.')\n\t\t\t\tmemo![1](val)\n\t\t\t} as any // unable to make TypeScript happy about the return type here at @memo application sites\n\t\t}\n\t\treturn\n\t}\n\n\t// TODO move off of memoify() (memoifyIfNeeded()), and follow this pattern for\n\t// public members like we do here with private members.\n\tif (context.private) {\n\t\tif (kind === 'getter') {\n\t\t\tconst memos = getGetterSetterMemos(metadata, name)\n\t\t\tconst memoFn = value as () => any\n\n\t\t\treturn function (this: unknown) {\n\t\t\t\tconst self = this as AnyObject\n\t\t\t\tlet memo = memos.get(self)\n\t\t\t\tif (!memo) {\n\t\t\t\t\t// Initialize memo on first usage.\n\t\t\t\t\t// Use createRoot to detach the from any current effect or\n\t\t\t\t\t// the memo will be cleaned up when an outer effect re-runs,\n\t\t\t\t\t// stopping any effects that depend on the memo from\n\t\t\t\t\t// re-running.\n\t\t\t\t\t// https://github.com/solidjs/solid/issues/2571\n\t\t\t\t\tmemos.set(self, (memo = createRoot(() => createWritableMemo(() => memoFn.call(this)))))\n\t\t\t\t}\n\t\t\t\treturn memo[0]()\n\t\t\t}\n\t\t} else if (kind === 'accessor') {\n\t\t\tconst memos = new WeakMap>()\n\t\t\tconst memoFn = (value as ClassAccessorDecoratorTarget any>).get\n\n\t\t\tconst get = function (this: unknown) {\n\t\t\t\tconst memo = memos.get(this as AnyObject)!\n\t\t\t\treturn memo[0]()\n\t\t\t}\n\n\t\t\tconst set = function (this: unknown, val: unknown) {\n\t\t\t\tconst memo = memos.get(this as AnyObject)!\n\t\t\t\tmemo[1](val)\n\t\t\t}\n\n\t\t\tconst init = function (this: unknown, val: unknown) {\n\t\t\t\tconst self = this as AnyObject\n\t\t\t\tmemos.set(\n\t\t\t\t\tself,\n\t\t\t\t\tcreateWritableMemo(() => memoFn.call(self), val),\n\t\t\t\t)\n\t\t\t\treturn val\n\t\t\t}\n\n\t\t\treturn {get, set, init}\n\t\t} else if (kind === 'method') {\n\t\t\tconst memos = new WeakMap>()\n\t\t\tconst memoFn = value as (val?: any) => any\n\t\t\tconst Undefined = Symbol()\n\n\t\t\treturn function (this: unknown, val: unknown = Undefined) {\n\t\t\t\tconst self = this as AnyObject\n\t\t\t\tlet memo = memos.get(self)\n\t\t\t\tif (!memo) {\n\t\t\t\t\t// Initialize memo on first usage.\n\t\t\t\t\tmemos.set(\n\t\t\t\t\t\tself,\n\t\t\t\t\t\t// Use createRoot to detach the from any current effect or\n\t\t\t\t\t\t// the memo will be cleaned up when an outer effect re-runs,\n\t\t\t\t\t\t// stopping any effects that depend on the memo from\n\t\t\t\t\t\t// re-running.\n\t\t\t\t\t\t// https://github.com/solidjs/solid/issues/2571\n\t\t\t\t\t\t(memo = createRoot(() =>\n\t\t\t\t\t\t\tmemoFn.length === 0\n\t\t\t\t\t\t\t\t? [createMemo(() => memoFn.call(self)), (() => {}) as Setter]\n\t\t\t\t\t\t\t\t: createWritableMemo(() => {\n\t\t\t\t\t\t\t\t\t\tdebugger\n\t\t\t\t\t\t\t\t\t\treturn memoFn.call(self)\n\t\t\t\t\t\t\t\t }),\n\t\t\t\t\t\t)),\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\treturn val === Undefined ? memo[0]() : memo[1](val)\n\t\t\t}\n\t\t}\n\t}\n\n\t// @ts-expect-error skip type checking in case of invalid kind in plain JS\n\tif (kind === 'field') throw new Error('@memo is not supported on class fields.')\n\n\tconst memberType = kind === 'accessor' ? 'memo-auto-accessor' : kind === 'method' ? 'memo-method' : 'memo-accessor'\n\n\tconst stat = getMemberStat__(name, memberType, members, context)\n\n\tstat.finalize = function () {\n\t\tmemoifyIfNeeded__(this as AnyObject, stat)\n\t}\n\n\tcontext.addInitializer(function () {\n\t\tfinalizeMembersIfLast__(this as AnyObject, members)\n\t})\n\n\tif (kind === 'method' || kind === 'getter') stat.value = value\n\telse if (kind === 'accessor') stat.value = (value as ClassAccessorDecoratorTarget void>).get\n}\n\nfunction getGetterSetterMemos(metadata: ClassySolidMetadata, name: PropKey) {\n\tif (!Object.hasOwn(metadata, 'classySolid_getterSetterMemos')) metadata.classySolid_getterSetterMemos = {}\n\tconst getterSetterMemoStorage = metadata.classySolid_getterSetterMemos!\n\tlet getterSetterMemos = getterSetterMemoStorage[name]\n\tif (!getterSetterMemos)\n\t\tmetadata.classySolid_getterSetterMemos![name] = getterSetterMemos = new WeakMap>()\n\treturn getterSetterMemos\n}\n"],"mappings":"AAAA,SAAQA,UAAU,EAAEC,UAAU,QAAiC,UAAU;AACzE,SAAQC,kBAAkB,QAAO,wBAAwB;AAEzD,SAAQC,uBAAuB,EAAEC,eAAe,EAAEC,YAAY,EAAEC,iBAAiB,QAAO,cAAc;AACtG,OAAO,oBAAoB;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,IAAIA,CACnBC,KAM+D;AAAE;AACjEC,OAI8B,EAC7B;EACD,IAAIA,OAAO,CAACC,MAAM,EAAE,MAAM,IAAIC,KAAK,CAAC,8CAA8C,CAAC;EAEnF,MAAM;IAACC,IAAI;IAAEC;EAAI,CAAC,GAAGJ,OAAO;EAC5B,MAAMK,QAAQ,GAAGL,OAAO,CAACK,QAA+B;EACxD,MAAMC,OAAO,GAAGV,YAAY,CAACS,QAAQ,CAAC;;EAEtC;EACA;EACA;EACA;EACA,IAAIF,IAAI,KAAK,QAAQ,EAAE;IACtB,IAAIH,OAAO,CAACO,OAAO,EAAE;MACpB,MAAMC,iBAAiB,GAAGC,oBAAoB,CAACJ,QAAQ,EAAED,IAAI,CAAC;MAE9D,OAAO,UAAyBM,GAAY,EAAE;QAC7C,IAAIZ,IAAI,GAAGU,iBAAiB,CAACG,GAAG,CAAC,IAAiB,CAAC;QACnD,IAAI,CAACb,IAAI,EACR,MAAM,IAAII,KAAK,CAAC,4FAA4F,CAAC;QAC9GJ,IAAI,CAA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","ignoreList":[]} \ No newline at end of file diff --git a/dist/decorators/memo.test.js b/dist/decorators/memo.test.js index 674da6a..1755f67 100644 --- a/dist/decorators/memo.test.js +++ b/dist/decorators/memo.test.js @@ -698,9 +698,6 @@ describe('classy-solid', () => { expect(lastSum).toBe(7); expect(count).toBe(2); // should not run because sum didn't change - // CONTINUE writing not working yet for private method memos - // Uncomment when fixed - debugger; ex.sum = 20; console.log('sum?', ex.sum); expect(lastSum).toBe(20); diff --git a/dist/decorators/memo.test.js.map b/dist/decorators/memo.test.js.map index 1cbe81d..00fe3cd 100644 --- a/dist/decorators/memo.test.js.map +++ b/dist/decorators/memo.test.js.map @@ -1 +1 @@ -{"version":3,"file":"memo.test.js","names":["createEffect","batch","createSignal","signal","memo","effect","describe","it","_initProto","_init_a","_init_extra_a","_init_b","_init_extra_b","Example","_applyDecs","e","constructor","a","b","sum2","ex","count","lastSum","expect","toBe","toThrow","_initProto2","_init_a2","_init_extra_a2","_init_b2","_init_extra_b2","_val","_init_a3","_init_extra_a3","_init_b3","_init_extra_b3","_init_sum","_init_extra_sum","A","sum3","v","runs","_init_a4","_init_extra_a4","_init_b4","_init_extra_b4","_init_sum2","_init_extra_sum2","_initProto3","_init_a5","_init_extra_a5","_init_b5","_init_extra_b5","sum4","_initProto4","_init_a6","_init_extra_a6","_init_b6","_init_extra_b6","_initProto5","_init_x","_init_extra_x","_init_y","_init_extra_y","Calculator","computeCount","x","y","result","calc","_initProto6","_init_value","_init_extra_value","_init_quadruple","_init_extra_quadruple","MultiMemo","value","double","triple","quadruple","mm","doubleCount","tripleCount","quadCount","_initProto7","_init_base","_init_extra_base","ChainedMemo","base","squared","cubed","cm","_initProto8","_init_a7","_init_extra_a7","_init_b7","_init_extra_b7","WritableOverride","sum","wo","lastValue","_init_a8","_init_extra_a8","_init_b8","_init_extra_b8","_init_sum3","_init_extra_sum3","_initProto9","_init_a9","_init_extra_a9","_init_b9","_init_extra_b9","_initProto0","ConstantMemo","constant","val","_initProto1","_init_a0","_init_extra_a0","_init_b0","_init_extra_b0","_call_sumPrivate","_call_sumPrivate2","_","sumPrivate","#sumPrivate","accessorGetSet","__","_init_a1","_init_extra_a1","_init_b1","_init_extra_b1","_sumPrivateDecs","_init_sumPrivate","_get_sumPrivate","_set_sumPrivate","_init_extra_sumPrivate","o","get","set","_initProto10","_init_a10","_init_extra_a10","_init_b10","_init_extra_b10","_call_sumPrivate3","console","log","_initProto11","_init_a11","_init_extra_a11","_initProto12","Base","baseVal","Sub","args","s","last","_initProto13","_init_a12","_init_extra_a12","_initProto14","_initProto15","_initProto16","setA","baseRuns","subRuns","effectRuns","effectVal","_initProto17","_initProto18","_initProto19","midRuns","Mid","_initProto20","_init_a13","_init_extra_a13","_initProto21","BaseM","SubM","_initProto22","_init_a14","_init_extra_a14","_initProto23","_init_a15","_init_extra_a15","_init_val","_init_extra_val","_init_val2","_init_extra_val2","BaseFO","SubFO","_init_a16","_init_extra_a16","_init_val3","_init_extra_val3","_init_val4","_init_extra_val4","_init_foo","_init_extra_foo","foo","_init_a17","_init_extra_a17","InvalidMemo","run","_initProto24","SuperDuper","dupe","_initProto25","_init_bar","_init_extra_bar","_initProto26","_init_bar2","_init_extra_bar2","Bar","bar","baz","logBar","Bar2","not"],"sources":["../../src/decorators/memo.test.ts"],"sourcesContent":["import {createEffect, batch, createSignal} from 'solid-js'\nimport {signal} from './signal.js'\nimport {memo} from './memo.js'\nimport {effect} from './effect.js'\n\ndescribe('classy-solid', () => {\n\tdescribe('@memo decorator', () => {\n\t\tit('creates a readonly memo via getter', () => {\n\t\t\tclass Example {\n\t\t\t\t@signal a = 1\n\t\t\t\t@signal b = 2\n\n\t\t\t\t@memo get sum2() {\n\t\t\t\t\treturn this.a + this.b\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst ex = new Example()\n\t\t\tlet count = 0\n\t\t\tlet lastSum = 0\n\n\t\t\tcreateEffect(() => {\n\t\t\t\tlastSum = ex.sum2\n\t\t\t\tcount++\n\t\t\t})\n\n\t\t\texpect(ex.sum2).toBe(3)\n\t\t\texpect(count).toBe(1)\n\n\t\t\tex.a = 5\n\t\t\texpect(ex.sum2).toBe(7)\n\t\t\texpect(lastSum).toBe(7)\n\t\t\texpect(count).toBe(2)\n\n\t\t\t// This should not trigger the effect since the computed value doesn't change (still 7)\n\t\t\tbatch(() => {\n\t\t\t\tex.a = 3\n\t\t\t\tex.b = 4\n\t\t\t})\n\n\t\t\texpect(ex.sum2).toBe(7)\n\t\t\texpect(lastSum).toBe(7)\n\t\t\texpect(count).toBe(2) // count should still be 2, not 3\n\n\t\t\t// Readonly memo cannot be set - should throw in strict mode\n\t\t\texpect(() => {\n\t\t\t\t// @ts-expect-error - intentionally setting readonly property\n\t\t\t\tex.sum2 = 20\n\t\t\t}).toThrow()\n\t\t})\n\n\t\tit('creates a writable memo via getter+setter', () => {\n\t\t\tclass Example {\n\t\t\t\t@signal a = 1\n\t\t\t\t@signal b = 2\n\n\t\t\t\t@memo get sum2() {\n\t\t\t\t\treturn this.a + this.b\n\t\t\t\t}\n\t\t\t\t@memo set sum2(_val: number) {}\n\t\t\t}\n\n\t\t\tconst ex = new Example()\n\t\t\tlet count = 0\n\t\t\tlet lastSum = 0\n\n\t\t\tcreateEffect(() => {\n\t\t\t\tlastSum = ex.sum2\n\t\t\t\tcount++\n\t\t\t})\n\n\t\t\texpect(ex.sum2).toBe(3)\n\t\t\texpect(count).toBe(1)\n\n\t\t\tex.a = 5\n\t\t\texpect(ex.sum2).toBe(7)\n\t\t\texpect(lastSum).toBe(7)\n\t\t\texpect(count).toBe(2)\n\n\t\t\t// This should not trigger the effect since the computed value doesn't change (still 7)\n\t\t\tbatch(() => {\n\t\t\t\tex.a = 3\n\t\t\t\tex.b = 4\n\t\t\t})\n\n\t\t\texpect(ex.sum2).toBe(7)\n\t\t\texpect(lastSum).toBe(7)\n\t\t\texpect(count).toBe(2) // count should still be 2, not 3\n\n\t\t\t// Writable memo can be set directly\n\t\t\tex.sum2 = 20\n\t\t\texpect(ex.sum2).toBe(20)\n\t\t\texpect(lastSum).toBe(20)\n\t\t\texpect(count).toBe(3)\n\t\t})\n\n\t\tit('creates a readonly memo via accessor function value', () => {\n\t\t\tclass Example {\n\t\t\t\t@signal a = 1\n\t\t\t\t@signal b = 2\n\n\t\t\t\t@memo accessor sum3 = () => this.a + this.b\n\t\t\t}\n\n\t\t\tconst ex = new Example()\n\t\t\tlet runs = 0\n\t\t\tlet lastSum = 0\n\n\t\t\tcreateEffect(() => {\n\t\t\t\tlastSum = ex.sum3()\n\t\t\t\truns++\n\t\t\t})\n\n\t\t\texpect(ex.sum3()).toBe(3)\n\t\t\texpect(runs).toBe(1)\n\n\t\t\tex.a = 5\n\t\t\texpect(ex.sum3()).toBe(7)\n\t\t\texpect(lastSum).toBe(7)\n\t\t\texpect(runs).toBe(2)\n\n\t\t\t// This should not trigger the effect since the computed value doesn't change (still 7)\n\t\t\tbatch(() => {\n\t\t\t\tex.a = 3\n\t\t\t\tex.b = 4\n\t\t\t})\n\n\t\t\texpect(ex.sum3()).toBe(7)\n\t\t\texpect(lastSum).toBe(7)\n\t\t\texpect(runs).toBe(2) // count should still be 2, not 3\n\n\t\t\t// @ts-expect-error Readonly memo cannot be set - should throw\n\t\t\texpect(() => ex.sum3(20)).toThrow()\n\t\t})\n\n\t\tit('creates a writable memo via accessor function value', () => {\n\t\t\tclass Example {\n\t\t\t\t@signal a = 1\n\t\t\t\t@signal b = 2\n\n\t\t\t\t@memo accessor sum3 = (_val?: number) => this.a + this.b\n\t\t\t}\n\n\t\t\tconst ex = new Example()\n\t\t\tlet count = 0\n\t\t\tlet lastSum = 0\n\n\t\t\tcreateEffect(() => {\n\t\t\t\tlastSum = ex.sum3()\n\t\t\t\tcount++\n\t\t\t})\n\n\t\t\texpect(ex.sum3()).toBe(3)\n\t\t\texpect(count).toBe(1)\n\n\t\t\tex.a = 5\n\t\t\texpect(ex.sum3()).toBe(7)\n\t\t\texpect(lastSum).toBe(7)\n\t\t\texpect(count).toBe(2)\n\n\t\t\t// This should not trigger the effect since the computed value doesn't change (still 7)\n\t\t\tbatch(() => {\n\t\t\t\tex.a = 3\n\t\t\t\tex.b = 4\n\t\t\t})\n\n\t\t\texpect(ex.sum3()).toBe(7)\n\t\t\texpect(lastSum).toBe(7)\n\t\t\texpect(count).toBe(2) // count should still be 2, not 3\n\n\t\t\t// Writable memo can be set directly\n\t\t\tex.sum3(20)\n\t\t\texpect(ex.sum3()).toBe(20)\n\t\t\texpect(lastSum).toBe(20)\n\t\t\texpect(count).toBe(3)\n\t\t})\n\n\t\tit('creates a readonly memo via method', () => {\n\t\t\tclass Example {\n\t\t\t\t@signal a = 1\n\t\t\t\t@signal b = 2\n\n\t\t\t\t@memo sum4() {\n\t\t\t\t\treturn this.a + this.b\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst ex = new Example()\n\t\t\tlet count = 0\n\t\t\tlet lastSum = 0\n\n\t\t\tcreateEffect(() => {\n\t\t\t\tlastSum = ex.sum4()\n\t\t\t\tcount++\n\t\t\t})\n\n\t\t\texpect(ex.sum4()).toBe(3)\n\t\t\texpect(count).toBe(1)\n\n\t\t\tex.a = 5\n\t\t\texpect(ex.sum4()).toBe(7)\n\t\t\texpect(lastSum).toBe(7)\n\t\t\texpect(count).toBe(2)\n\n\t\t\t// This should not trigger the effect since the computed value doesn't change (still 7)\n\t\t\tbatch(() => {\n\t\t\t\tex.a = 3\n\t\t\t\tex.b = 4\n\t\t\t})\n\n\t\t\texpect(ex.sum4()).toBe(7)\n\t\t\texpect(lastSum).toBe(7)\n\t\t\texpect(count).toBe(2) // count should still be 2, not 3\n\n\t\t\t// Readonly memo cannot be set - should throw\n\t\t\texpect(() => {\n\t\t\t\t// @ts-expect-error - intentionally setting readonly memo\n\t\t\t\tex.sum4(20)\n\t\t\t}).toThrow()\n\t\t})\n\n\t\tit('creates a writable memo via method', () => {\n\t\t\tclass Example {\n\t\t\t\t@signal a = 1\n\t\t\t\t@signal b = 2\n\n\t\t\t\t@memo sum4(_val?: number) {\n\t\t\t\t\treturn this.a + this.b\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst ex = new Example()\n\t\t\tlet count = 0\n\t\t\tlet lastSum = 0\n\n\t\t\tcreateEffect(() => {\n\t\t\t\tlastSum = ex.sum4()\n\t\t\t\tcount++\n\t\t\t})\n\n\t\t\texpect(ex.sum4()).toBe(3)\n\t\t\texpect(count).toBe(1)\n\n\t\t\tex.a = 5\n\t\t\texpect(ex.sum4()).toBe(7)\n\t\t\texpect(lastSum).toBe(7)\n\t\t\texpect(count).toBe(2)\n\n\t\t\t// This should not trigger the effect since the computed value doesn't change (still 7)\n\t\t\tbatch(() => {\n\t\t\t\tex.a = 3\n\t\t\t\tex.b = 4\n\t\t\t})\n\n\t\t\texpect(ex.sum4()).toBe(7)\n\t\t\texpect(lastSum).toBe(7)\n\t\t\texpect(count).toBe(2) // count should still be 2, not 3\n\n\t\t\t// Writable memo can be set directly\n\t\t\tex.sum4(20)\n\t\t\texpect(ex.sum4()).toBe(20)\n\t\t\texpect(lastSum).toBe(20)\n\t\t\texpect(count).toBe(3)\n\t\t})\n\n\t\tit('memoizes complex computations and only re-runs when dependencies change', () => {\n\t\t\tclass Calculator {\n\t\t\t\tcomputeCount = 0\n\t\t\t\t@signal x = 10\n\t\t\t\t@signal y = 5\n\n\t\t\t\t@memo get result() {\n\t\t\t\t\tthis.computeCount++\n\t\t\t\t\treturn this.x * 2 + this.y\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst calc = new Calculator()\n\n\t\t\texpect(calc.result).toBe(25)\n\t\t\texpect(calc.computeCount).toBe(1)\n\n\t\t\t// Reading again should not re-compute\n\t\t\texpect(calc.result).toBe(25)\n\t\t\texpect(calc.computeCount).toBe(1)\n\n\t\t\t// Changing a dependency should trigger recomputation\n\t\t\tcalc.x = 20\n\t\t\texpect(calc.result).toBe(45)\n\t\t\texpect(calc.computeCount).toBe(2)\n\n\t\t\t// Reading again should not re-compute\n\t\t\texpect(calc.result).toBe(45)\n\t\t\texpect(calc.computeCount).toBe(2)\n\t\t})\n\n\t\tit('works with multiple memo properties', () => {\n\t\t\tclass MultiMemo {\n\t\t\t\t@signal value = 10\n\n\t\t\t\t@memo double() {\n\t\t\t\t\treturn this.value * 2\n\t\t\t\t}\n\t\t\t\t@memo get triple() {\n\t\t\t\t\treturn this.value * 3\n\t\t\t\t}\n\t\t\t\t@memo accessor quadruple = () => this.value * 4\n\t\t\t}\n\n\t\t\tconst mm = new MultiMemo()\n\t\t\tlet doubleCount = 0\n\t\t\tlet tripleCount = 0\n\t\t\tlet quadCount = 0\n\n\t\t\tcreateEffect(() => {\n\t\t\t\tmm.double()\n\t\t\t\tdoubleCount++\n\t\t\t})\n\t\t\tcreateEffect(() => {\n\t\t\t\tmm.triple\n\t\t\t\ttripleCount++\n\t\t\t})\n\t\t\tcreateEffect(() => {\n\t\t\t\tmm.quadruple()\n\t\t\t\tquadCount++\n\t\t\t})\n\n\t\t\texpect(mm.double()).toBe(20)\n\t\t\texpect(mm.triple).toBe(30)\n\t\t\texpect(mm.quadruple()).toBe(40)\n\t\t\texpect(doubleCount).toBe(1)\n\t\t\texpect(tripleCount).toBe(1)\n\t\t\texpect(quadCount).toBe(1)\n\n\t\t\tmm.value = 5\n\t\t\texpect(mm.double()).toBe(10)\n\t\t\texpect(mm.triple).toBe(15)\n\t\t\texpect(mm.quadruple()).toBe(20)\n\t\t\texpect(doubleCount).toBe(2)\n\t\t\texpect(tripleCount).toBe(2)\n\t\t\texpect(quadCount).toBe(2)\n\t\t})\n\n\t\tit('handles memo depending on other memos', () => {\n\t\t\tclass ChainedMemo {\n\t\t\t\t@signal base = 2\n\n\t\t\t\t@memo get squared() {\n\t\t\t\t\treturn this.base * this.base\n\t\t\t\t}\n\n\t\t\t\t@memo get cubed() {\n\t\t\t\t\treturn this.squared * this.base\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst cm = new ChainedMemo()\n\t\t\tlet count = 0\n\n\t\t\tcreateEffect(() => {\n\t\t\t\tcm.cubed\n\t\t\t\tcount++\n\t\t\t})\n\n\t\t\texpect(cm.squared).toBe(4)\n\t\t\texpect(cm.cubed).toBe(8)\n\t\t\texpect(count).toBe(1)\n\n\t\t\tcm.base = 3\n\t\t\texpect(cm.squared).toBe(9)\n\t\t\texpect(cm.cubed).toBe(27)\n\t\t\texpect(count).toBe(2)\n\t\t})\n\n\t\tit('correctly handles writable getter+setter memo overriding explicit value', () => {\n\t\t\tclass WritableOverride {\n\t\t\t\t@signal a = 5\n\t\t\t\t@signal b = 10\n\n\t\t\t\t@memo get sum() {\n\t\t\t\t\treturn this.a + this.b\n\t\t\t\t}\n\t\t\t\t@memo set sum(_val: number) {}\n\t\t\t}\n\n\t\t\tconst wo = new WritableOverride()\n\t\t\tlet count = 0\n\t\t\tlet lastValue = 0\n\n\t\t\tcreateEffect(() => {\n\t\t\t\tlastValue = wo.sum\n\t\t\t\tcount++\n\t\t\t})\n\n\t\t\texpect(wo.sum).toBe(15)\n\t\t\texpect(count).toBe(1)\n\t\t\texpect(lastValue).toBe(15)\n\n\t\t\t// Override with direct value\n\t\t\two.sum = 100\n\t\t\texpect(wo.sum).toBe(100)\n\t\t\texpect(count).toBe(2)\n\t\t\texpect(lastValue).toBe(100)\n\n\t\t\t// Changing dependencies should still work after override\n\t\t\two.a = 20\n\t\t\t// The memo should now compute based on signals again\n\t\t\texpect(wo.sum).toBe(30) // 20 + 10\n\t\t\texpect(count).toBe(3)\n\t\t\texpect(lastValue).toBe(30)\n\t\t})\n\n\t\tit('correctly handles writable accessor memo overriding explicit value', () => {\n\t\t\tclass WritableOverride {\n\t\t\t\t@signal a = 5\n\t\t\t\t@signal b = 10\n\n\t\t\t\t@memo accessor sum = (_val?: number) => this.a + this.b\n\t\t\t}\n\n\t\t\tconst wo = new WritableOverride()\n\t\t\tlet count = 0\n\t\t\tlet lastValue = 0\n\n\t\t\tcreateEffect(() => {\n\t\t\t\tlastValue = wo.sum()\n\t\t\t\tcount++\n\t\t\t})\n\n\t\t\texpect(wo.sum()).toBe(15)\n\t\t\texpect(count).toBe(1)\n\t\t\texpect(lastValue).toBe(15)\n\n\t\t\t// Override with direct value\n\t\t\two.sum(100)\n\t\t\texpect(wo.sum()).toBe(100)\n\t\t\texpect(count).toBe(2)\n\t\t\texpect(lastValue).toBe(100)\n\n\t\t\t// Changing dependencies should still work after override\n\t\t\two.a = 20\n\t\t\t// The memo should now compute based on signals again\n\t\t\texpect(wo.sum()).toBe(30) // 20 + 10\n\t\t\texpect(count).toBe(3)\n\t\t\texpect(lastValue).toBe(30)\n\t\t})\n\n\t\tit('correctly handles writable method memo overriding explicit value', () => {\n\t\t\tclass WritableOverride {\n\t\t\t\t@signal a = 5\n\t\t\t\t@signal b = 10\n\n\t\t\t\t@memo sum(_val?: number) {\n\t\t\t\t\treturn this.a + this.b\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst wo = new WritableOverride()\n\t\t\tlet count = 0\n\t\t\tlet lastValue = 0\n\n\t\t\tcreateEffect(() => {\n\t\t\t\tlastValue = wo.sum()\n\t\t\t\tcount++\n\t\t\t})\n\n\t\t\texpect(wo.sum()).toBe(15)\n\t\t\texpect(count).toBe(1)\n\t\t\texpect(lastValue).toBe(15)\n\n\t\t\t// Override with direct value\n\t\t\two.sum(100)\n\t\t\texpect(wo.sum()).toBe(100)\n\t\t\texpect(count).toBe(2)\n\t\t\texpect(lastValue).toBe(100)\n\n\t\t\t// Changing dependencies should still work after override\n\t\t\two.a = 20\n\t\t\t// The memo should now compute based on signals again\n\t\t\texpect(wo.sum()).toBe(30) // 20 + 10\n\t\t\texpect(count).toBe(3)\n\t\t\texpect(lastValue).toBe(30)\n\t\t})\n\n\t\tit('handles memo with no dependencies', () => {\n\t\t\tclass ConstantMemo {\n\t\t\t\t@memo get constant() {\n\t\t\t\t\treturn 42\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst cm = new ConstantMemo()\n\t\t\tlet count = 0\n\n\t\t\tcreateEffect(() => {\n\t\t\t\tcm.constant\n\t\t\t\tcount++\n\t\t\t})\n\n\t\t\texpect(cm.constant).toBe(42)\n\t\t\texpect(count).toBe(1)\n\n\t\t\t// Reading again should not trigger effect\n\t\t\tconst val = cm.constant\n\t\t\texpect(val).toBe(42)\n\t\t\texpect(count).toBe(1)\n\t\t})\n\n\t\tit('supports private getter/setters', () => {\n\t\t\tclass Example {\n\t\t\t\t@signal a = 1\n\t\t\t\t@signal b = 2\n\n\t\t\t\t@memo get #sumPrivate() {\n\t\t\t\t\treturn this.a + this.b\n\t\t\t\t}\n\t\t\t\t@memo set #sumPrivate(_val: number) {}\n\n\t\t\t\tget sum() {\n\t\t\t\t\treturn this.#sumPrivate\n\t\t\t\t}\n\t\t\t\tset sum(val) {\n\t\t\t\t\tthis.#sumPrivate = val\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst ex = new Example()\n\t\t\tlet count = 0\n\t\t\tlet lastSum = 0\n\n\t\t\tcreateEffect(() => {\n\t\t\t\tlastSum = ex.sum\n\t\t\t\tcount++\n\t\t\t})\n\n\t\t\texpect(lastSum).toBe(3)\n\t\t\texpect(count).toBe(1)\n\n\t\t\tex.a = 5\n\t\t\texpect(lastSum).toBe(7)\n\t\t\texpect(count).toBe(2)\n\n\t\t\tbatch(() => {\n\t\t\t\tex.a = 3\n\t\t\t\tex.b = 4\n\t\t\t})\n\n\t\t\texpect(lastSum).toBe(7)\n\t\t\texpect(count).toBe(2) // should not run because sum didn't change\n\n\t\t\tex.sum = 20\n\t\t\texpect(lastSum).toBe(20)\n\t\t\texpect(count).toBe(3)\n\t\t})\n\n\t\tfunction accessorGetSet(value: ClassAccessorDecoratorTarget) {\n\t\t\treturn function (_: ClassAccessorDecoratorTarget, __: ClassAccessorDecoratorContext) {\n\t\t\t\treturn value\n\t\t\t}\n\t\t}\n\n\t\t// This is undocumented, but helps us get set up for concise accessors once that syntax lands.\n\t\tit('supports private auto accessors', () => {\n\t\t\tclass Example {\n\t\t\t\t@signal a = 1\n\t\t\t\t@signal b = 2\n\n\t\t\t\t// @ts-ignore\n\t\t\t\t@memo\n\t\t\t\t@accessorGetSet({\n\t\t\t\t\tget(this: any) {\n\t\t\t\t\t\treturn this.a + this.b\n\t\t\t\t\t},\n\t\t\t\t\tset() {},\n\t\t\t\t})\n\t\t\t\taccessor #sumPrivate = 0 // initial value won't matter, memo will override initially\n\n\t\t\t\tget sum() {\n\t\t\t\t\treturn this.#sumPrivate\n\t\t\t\t}\n\t\t\t\tset sum(val) {\n\t\t\t\t\tthis.#sumPrivate = val\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst ex = new Example()\n\t\t\tlet count = 0\n\t\t\tlet lastSum = 0\n\n\t\t\tcreateEffect(() => {\n\t\t\t\tlastSum = ex.sum\n\t\t\t\tcount++\n\t\t\t})\n\n\t\t\texpect(lastSum).toBe(1 + 2)\n\t\t\texpect(count).toBe(1)\n\n\t\t\tex.a = 5\n\t\t\texpect(lastSum).toBe(5 + 2)\n\t\t\texpect(count).toBe(2)\n\n\t\t\tbatch(() => {\n\t\t\t\tex.a = 3\n\t\t\t\tex.b = 4\n\t\t\t})\n\n\t\t\texpect(lastSum).toBe(7)\n\t\t\texpect(count).toBe(2) // should not run because sum didn't change\n\n\t\t\tex.sum = 20\n\t\t\texpect(lastSum).toBe(20)\n\t\t\texpect(count).toBe(3)\n\t\t})\n\n\t\tit('supports private methods', () => {\n\t\t\tclass Example {\n\t\t\t\t@signal a = 1\n\t\t\t\t@signal b = 2\n\n\t\t\t\t@memo #sumPrivate(_val?: number) {\n\t\t\t\t\treturn this.a + this.b\n\t\t\t\t}\n\n\t\t\t\tget sum() {\n\t\t\t\t\treturn this.#sumPrivate()\n\t\t\t\t}\n\t\t\t\tset sum(val) {\n\t\t\t\t\tthis.#sumPrivate(val)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst ex = new Example()\n\t\t\tlet count = 0\n\t\t\tlet lastSum = 0\n\n\t\t\tcreateEffect(() => {\n\t\t\t\tlastSum = ex.sum\n\t\t\t\tcount++\n\t\t\t})\n\n\t\t\texpect(lastSum).toBe(1 + 2)\n\t\t\texpect(count).toBe(1)\n\n\t\t\tex.a = 5\n\t\t\texpect(lastSum).toBe(5 + 2)\n\t\t\texpect(count).toBe(2)\n\n\t\t\tbatch(() => {\n\t\t\t\tex.a = 3\n\t\t\t\tex.b = 4\n\t\t\t})\n\n\t\t\texpect(lastSum).toBe(7)\n\t\t\texpect(count).toBe(2) // should not run because sum didn't change\n\n\t\t\t// CONTINUE writing not working yet for private method memos\n\t\t\t// Uncomment when fixed\n\t\t\tdebugger\n\t\t\tex.sum = 20\n\t\t\tconsole.log('sum?', ex.sum)\n\t\t\texpect(lastSum).toBe(20)\n\t\t\texpect(count).toBe(3)\n\t\t})\n\n\t\tdescribe('subclass memo overriding/extending', () => {\n\t\t\tit('supports subclass memo extending base memo (getter)', () => {\n\t\t\t\tclass Base {\n\t\t\t\t\t@signal a = 1\n\t\t\t\t\t@memo get baseVal() {\n\t\t\t\t\t\treturn this.a + 1\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclass Sub extends Base {\n\t\t\t\t\t@memo override get baseVal() {\n\t\t\t\t\t\treturn super.baseVal + 1 // extend\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst s = new Sub()\n\t\t\t\tlet runs = 0\n\t\t\t\tlet last = 0\n\n\t\t\t\tcreateEffect(() => {\n\t\t\t\t\truns++\n\t\t\t\t\tlast = s.baseVal\n\t\t\t\t})\n\n\t\t\t\texpect(last).toBe(1 + 1 + 1)\n\t\t\t\texpect(runs).toBe(1)\n\n\t\t\t\ts.a = 5\n\t\t\t\texpect(last).toBe(5 + 1 + 1)\n\t\t\t\texpect(runs).toBe(2)\n\t\t\t})\n\n\t\t\tit('supports subclass memo overriding base memo (getter no super)', () => {\n\t\t\t\tclass Base {\n\t\t\t\t\t@signal a = 1\n\t\t\t\t\t@memo get val() {\n\t\t\t\t\t\treturn this.a + 1\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclass Sub extends Base {\n\t\t\t\t\t@memo override get val() {\n\t\t\t\t\t\treturn this.a * 2 // override\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst s = new Sub()\n\t\t\t\tlet runs = 0\n\t\t\t\tlet last = 0\n\n\t\t\t\tcreateEffect(() => {\n\t\t\t\t\truns++\n\t\t\t\t\tlast = s.val\n\t\t\t\t})\n\n\t\t\t\texpect(last).toBe(1 * 2)\n\t\t\t\texpect(runs).toBe(1)\n\n\t\t\t\ts.a = 5\n\t\t\t\texpect(last).toBe(5 * 2)\n\t\t\t\texpect(runs).toBe(2)\n\t\t\t})\n\n\t\t\tit('supports getter override with no super', () => {\n\t\t\t\tconst [a, setA] = createSignal(10)\n\t\t\t\tlet baseRuns = 0\n\t\t\t\tlet subRuns = 0\n\n\t\t\t\tclass Base {\n\t\t\t\t\t@memo get val() {\n\t\t\t\t\t\tbaseRuns++\n\t\t\t\t\t\treturn a() + 1\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclass Sub extends Base {\n\t\t\t\t\t@memo override get val() {\n\t\t\t\t\t\tsubRuns++\n\t\t\t\t\t\treturn a() + 10\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst o = new Sub()\n\t\t\t\tlet effectRuns = 0\n\t\t\t\tlet effectVal = 0\n\n\t\t\t\tcreateEffect(() => {\n\t\t\t\t\teffectRuns++\n\t\t\t\t\teffectVal = o.val\n\t\t\t\t})\n\n\t\t\t\texpect(effectVal).toBe(10 + 10)\n\t\t\t\texpect(baseRuns).toBe(0)\n\t\t\t\texpect(subRuns).toBe(1)\n\t\t\t\texpect(effectRuns).toBe(1)\n\n\t\t\t\tsetA(20)\n\t\t\t\texpect(effectVal).toBe(20 + 10)\n\t\t\t\texpect(baseRuns).toBe(0)\n\t\t\t\texpect(subRuns).toBe(2)\n\t\t\t\texpect(effectRuns).toBe(2)\n\t\t\t})\n\n\t\t\tit('supports multi-level getter extension with super', () => {\n\t\t\t\tconst [a, setA] = createSignal(10)\n\t\t\t\tlet baseRuns = 0\n\t\t\t\tlet midRuns = 0\n\t\t\t\tlet subRuns = 0\n\n\t\t\t\tclass Base {\n\t\t\t\t\t@memo get val() {\n\t\t\t\t\t\tbaseRuns++\n\t\t\t\t\t\treturn a() + 1\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclass Mid extends Base {\n\t\t\t\t\t@memo override get val() {\n\t\t\t\t\t\tmidRuns++\n\t\t\t\t\t\treturn super.val + 10\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclass Sub extends Mid {\n\t\t\t\t\t@memo override get val() {\n\t\t\t\t\t\tsubRuns++\n\t\t\t\t\t\treturn super.val + 100\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst o = new Sub()\n\t\t\t\tlet effectRuns = 0\n\t\t\t\tlet effectVal = 0\n\n\t\t\t\tcreateEffect(() => {\n\t\t\t\t\teffectRuns++\n\t\t\t\t\teffectVal = o.val\n\t\t\t\t})\n\n\t\t\t\texpect(effectVal).toBe(10 + 1 + 10 + 100)\n\t\t\t\texpect(baseRuns).toBe(1)\n\t\t\t\texpect(midRuns).toBe(1)\n\t\t\t\texpect(subRuns).toBe(1)\n\t\t\t\texpect(effectRuns).toBe(1)\n\n\t\t\t\tsetA(20)\n\t\t\t\texpect(effectVal).toBe(20 + 1 + 10 + 100)\n\t\t\t\texpect(baseRuns).toBe(2)\n\t\t\t\texpect(midRuns).toBe(2)\n\t\t\t\texpect(subRuns).toBe(2)\n\t\t\t\texpect(effectRuns).toBe(2)\n\t\t\t})\n\n\t\t\tit('supports subclass memo method extension with super', () => {\n\t\t\t\tlet baseRuns = 0\n\n\t\t\t\tclass BaseM {\n\t\t\t\t\t@signal a = 1\n\t\t\t\t\t@memo val() {\n\t\t\t\t\t\tbaseRuns++\n\t\t\t\t\t\treturn this.a + 1\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlet subRuns = 0\n\n\t\t\t\tclass SubM extends BaseM {\n\t\t\t\t\t@memo override val() {\n\t\t\t\t\t\tsubRuns++\n\t\t\t\t\t\treturn super.val() + 2\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst s = new SubM()\n\t\t\t\tlet effectRuns = 0\n\t\t\t\tlet last = 0\n\n\t\t\t\tcreateEffect(() => {\n\t\t\t\t\teffectRuns++\n\t\t\t\t\tlast = s.val()\n\t\t\t\t})\n\n\t\t\t\texpect(last).toBe(1 + 1 + 2)\n\t\t\t\texpect(baseRuns).toBe(1)\n\t\t\t\texpect(subRuns).toBe(1)\n\t\t\t\texpect(effectRuns).toBe(1)\n\n\t\t\t\ts.a = 5\n\t\t\t\texpect(last).toBe(5 + 1 + 2)\n\t\t\t\texpect(baseRuns).toBe(2)\n\t\t\t\texpect(subRuns).toBe(2)\n\t\t\t\texpect(effectRuns).toBe(2)\n\t\t\t})\n\n\t\t\tit('supports subclass memo method override with no super', () => {\n\t\t\t\tlet baseRuns = 0\n\t\t\t\tlet subRuns = 0\n\n\t\t\t\tclass BaseM {\n\t\t\t\t\t@signal a = 1\n\t\t\t\t\t@memo val() {\n\t\t\t\t\t\tbaseRuns++\n\t\t\t\t\t\treturn this.a + 1\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclass SubM extends BaseM {\n\t\t\t\t\t@memo override val() {\n\t\t\t\t\t\tsubRuns++\n\t\t\t\t\t\treturn this.a + 2\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst s = new SubM()\n\t\t\t\tlet effectRuns = 0\n\t\t\t\tlet last = 0\n\n\t\t\t\tcreateEffect(() => {\n\t\t\t\t\teffectRuns++\n\t\t\t\t\tlast = s.val()\n\t\t\t\t})\n\n\t\t\t\texpect(last).toBe(1 + 2)\n\t\t\t\texpect(baseRuns).toBe(0)\n\t\t\t\texpect(subRuns).toBe(1)\n\t\t\t\texpect(effectRuns).toBe(1)\n\n\t\t\t\ts.a = 5\n\t\t\t\texpect(last).toBe(5 + 2)\n\t\t\t\texpect(baseRuns).toBe(0)\n\t\t\t\texpect(subRuns).toBe(2)\n\t\t\t\texpect(effectRuns).toBe(2)\n\t\t\t})\n\n\t\t\tit('supports subclass memo auto accessor extension with super', () => {\n\t\t\t\tlet baseRuns = 0\n\t\t\t\tlet subRuns = 0\n\n\t\t\t\tclass BaseFO {\n\t\t\t\t\t@signal a = 1\n\t\t\t\t\t@memo accessor val = () => {\n\t\t\t\t\t\tbaseRuns++\n\t\t\t\t\t\treturn this.a + 1\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclass SubFO extends BaseFO {\n\t\t\t\t\t@memo override accessor val = () => {\n\t\t\t\t\t\tsubRuns++\n\t\t\t\t\t\treturn super.val() * 3\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst s = new SubFO()\n\t\t\t\tlet effectRuns = 0\n\t\t\t\tlet last = 0\n\n\t\t\t\tcreateEffect(() => {\n\t\t\t\t\teffectRuns++\n\t\t\t\t\tlast = s.val()\n\t\t\t\t})\n\n\t\t\t\texpect(last).toBe((1 + 1) * 3)\n\t\t\t\texpect(baseRuns).toBe(1)\n\t\t\t\texpect(subRuns).toBe(1)\n\t\t\t\texpect(effectRuns).toBe(1)\n\n\t\t\t\ts.a = 4\n\t\t\t\texpect(last).toBe((4 + 1) * 3)\n\t\t\t\texpect(baseRuns).toBe(2)\n\t\t\t\texpect(subRuns).toBe(2)\n\t\t\t\texpect(effectRuns).toBe(2)\n\t\t\t})\n\n\t\t\tit('supports subclass memo auto accessor override with no super', () => {\n\t\t\t\tlet baseRuns = 0\n\t\t\t\tlet subRuns = 0\n\n\t\t\t\tclass BaseFO {\n\t\t\t\t\t@signal a = 1\n\t\t\t\t\t@memo accessor val = () => {\n\t\t\t\t\t\tbaseRuns++\n\t\t\t\t\t\treturn this.a + 1\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclass SubFO extends BaseFO {\n\t\t\t\t\t@memo override accessor val = () => {\n\t\t\t\t\t\tsubRuns++\n\t\t\t\t\t\treturn this.a * 3\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst s = new SubFO()\n\t\t\t\tlet effectRuns = 0\n\t\t\t\tlet last = 0\n\n\t\t\t\tcreateEffect(() => {\n\t\t\t\t\teffectRuns++\n\t\t\t\t\tlast = s.val()\n\t\t\t\t})\n\n\t\t\t\texpect(last).toBe(1 * 3)\n\t\t\t\texpect(baseRuns).toBe(0)\n\t\t\t\texpect(subRuns).toBe(1)\n\t\t\t\texpect(effectRuns).toBe(1)\n\n\t\t\t\ts.a = 4\n\t\t\t\texpect(last).toBe(4 * 3)\n\t\t\t\texpect(baseRuns).toBe(0)\n\t\t\t\texpect(subRuns).toBe(2)\n\t\t\t\texpect(effectRuns).toBe(2)\n\t\t\t})\n\t\t})\n\n\t\tdescribe('invalid usage', () => {\n\t\t\tit('throws on non-function value', () => {\n\t\t\t\tclass Base {\n\t\t\t\t\t// @ts-expect-error non-function value\n\t\t\t\t\t@memo accessor foo = 1\n\t\t\t\t}\n\n\t\t\t\texpect(() => new Base()).toThrow('memo value for \"foo\" is not a function: 1')\n\t\t\t})\n\n\t\t\tit('throws on @memo used on class field', () => {\n\t\t\t\tconst [a] = createSignal(10)\n\n\t\t\t\texpect(() => {\n\t\t\t\t\tclass InvalidMemo {\n\t\t\t\t\t\t// @ts-expect-error @memo not usable on fields\n\t\t\t\t\t\t@memo a = () => a()\n\t\t\t\t\t}\n\t\t\t\t\tnew InvalidMemo()\n\t\t\t\t}).toThrow('@memo is not supported on class fields.')\n\t\t\t})\n\n\t\t\tit('throws on duplicate members', () => {\n\t\t\t\tconst run = () => {\n\t\t\t\t\tclass SuperDuper {\n\t\t\t\t\t\t// @ts-expect-error duplicate member\n\t\t\t\t\t\t@memo get dupe() {\n\t\t\t\t\t\t\treturn 2\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// @ts-expect-error duplicate member\n\t\t\t\t\t\t@memo get dupe() {\n\t\t\t\t\t\t\treturn 3\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tnew SuperDuper()\n\t\t\t\t}\n\n\t\t\t\t// When compiling with Babel, decorators currently throw an error when applied onto multiple members of the same name.\n\t\t\t\texpect(run).toThrow('Decorating two elements with the same name (get dupe) is not supported yet')\n\n\t\t\t\t// When compiling with TypeScript, decorating duplicate members is allowed, and the last one wins.\n\t\t\t\t// expect(run).toThrow(\n\t\t\t\t// \t'@memo decorated member \"dupe\" has already been memoified. This can happen if there are duplicated class members.',\n\t\t\t\t// )\n\n\t\t\t\t// TODO ^ update Babel to latest in @lume/cli, see if decorators on duplicate members work in classy-solid\n\t\t\t})\n\n\t\t\tit('throws due to TDZ when accessing private fields defined after regular fields', () => {\n\t\t\t\tclass Bar {\n\t\t\t\t\t@signal bar = 456\n\n\t\t\t\t\t#baz = 789\n\n\t\t\t\t\t@signal get baz() {\n\t\t\t\t\t\treturn this.#baz\n\t\t\t\t\t}\n\t\t\t\t\t@signal set baz(v) {\n\t\t\t\t\t\tthis.#baz = v\n\t\t\t\t\t}\n\n\t\t\t\t\t// This throws because #baz is used before its initialization\n\t\t\t\t\t// The ordering is:\n\t\t\t\t\t// 1. bar field initialized\n\t\t\t\t\t// 2. bar field runs finalizers because it is last in the ordering of extra initializers (so #baz is not initialized yet)\n\t\t\t\t\t// 3. During the logBar finalizer (executed in the bar extra initializer), the baz getter is accessed, which accesses #baz before it is initialized\n\t\t\t\t\t@effect logBar() {\n\t\t\t\t\t\tthis.baz\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\texpect(() => new Bar()).toThrow('Cannot read private member #baz from an object whose class did not declare it')\n\n\t\t\t\t// To work around the problem, place private fields before regular fields:\n\t\t\t\tclass Bar2 {\n\t\t\t\t\t#baz = 789\n\n\t\t\t\t\t@signal bar = 456\n\n\t\t\t\t\t@signal get baz() {\n\t\t\t\t\t\treturn this.#baz\n\t\t\t\t\t}\n\t\t\t\t\t@signal set baz(v) {\n\t\t\t\t\t\tthis.#baz = v\n\t\t\t\t\t}\n\n\t\t\t\t\t@effect logBar() {\n\t\t\t\t\t\tthis.baz\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\texpect(() => new Bar2()).not.toThrow()\n\t\t\t})\n\t\t})\n\t})\n})\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file +{"version":3,"file":"memo.test.js","names":["createEffect","batch","createSignal","signal","memo","effect","describe","it","_initProto","_init_a","_init_extra_a","_init_b","_init_extra_b","Example","_applyDecs","e","constructor","a","b","sum2","ex","count","lastSum","expect","toBe","toThrow","_initProto2","_init_a2","_init_extra_a2","_init_b2","_init_extra_b2","_val","_init_a3","_init_extra_a3","_init_b3","_init_extra_b3","_init_sum","_init_extra_sum","A","sum3","v","runs","_init_a4","_init_extra_a4","_init_b4","_init_extra_b4","_init_sum2","_init_extra_sum2","_initProto3","_init_a5","_init_extra_a5","_init_b5","_init_extra_b5","sum4","_initProto4","_init_a6","_init_extra_a6","_init_b6","_init_extra_b6","_initProto5","_init_x","_init_extra_x","_init_y","_init_extra_y","Calculator","computeCount","x","y","result","calc","_initProto6","_init_value","_init_extra_value","_init_quadruple","_init_extra_quadruple","MultiMemo","value","double","triple","quadruple","mm","doubleCount","tripleCount","quadCount","_initProto7","_init_base","_init_extra_base","ChainedMemo","base","squared","cubed","cm","_initProto8","_init_a7","_init_extra_a7","_init_b7","_init_extra_b7","WritableOverride","sum","wo","lastValue","_init_a8","_init_extra_a8","_init_b8","_init_extra_b8","_init_sum3","_init_extra_sum3","_initProto9","_init_a9","_init_extra_a9","_init_b9","_init_extra_b9","_initProto0","ConstantMemo","constant","val","_initProto1","_init_a0","_init_extra_a0","_init_b0","_init_extra_b0","_call_sumPrivate","_call_sumPrivate2","_","sumPrivate","#sumPrivate","accessorGetSet","__","_init_a1","_init_extra_a1","_init_b1","_init_extra_b1","_sumPrivateDecs","_init_sumPrivate","_get_sumPrivate","_set_sumPrivate","_init_extra_sumPrivate","o","get","set","_initProto10","_init_a10","_init_extra_a10","_init_b10","_init_extra_b10","_call_sumPrivate3","console","log","_initProto11","_init_a11","_init_extra_a11","_initProto12","Base","baseVal","Sub","args","s","last","_initProto13","_init_a12","_init_extra_a12","_initProto14","_initProto15","_initProto16","setA","baseRuns","subRuns","effectRuns","effectVal","_initProto17","_initProto18","_initProto19","midRuns","Mid","_initProto20","_init_a13","_init_extra_a13","_initProto21","BaseM","SubM","_initProto22","_init_a14","_init_extra_a14","_initProto23","_init_a15","_init_extra_a15","_init_val","_init_extra_val","_init_val2","_init_extra_val2","BaseFO","SubFO","_init_a16","_init_extra_a16","_init_val3","_init_extra_val3","_init_val4","_init_extra_val4","_init_foo","_init_extra_foo","foo","_init_a17","_init_extra_a17","InvalidMemo","run","_initProto24","SuperDuper","dupe","_initProto25","_init_bar","_init_extra_bar","_initProto26","_init_bar2","_init_extra_bar2","Bar","bar","baz","logBar","Bar2","not"],"sources":["../../src/decorators/memo.test.ts"],"sourcesContent":["import {createEffect, batch, createSignal} from 'solid-js'\nimport {signal} from './signal.js'\nimport {memo} from './memo.js'\nimport {effect} from './effect.js'\n\ndescribe('classy-solid', () => {\n\tdescribe('@memo decorator', () => {\n\t\tit('creates a readonly memo via getter', () => {\n\t\t\tclass Example {\n\t\t\t\t@signal a = 1\n\t\t\t\t@signal b = 2\n\n\t\t\t\t@memo get sum2() {\n\t\t\t\t\treturn this.a + this.b\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst ex = new Example()\n\t\t\tlet count = 0\n\t\t\tlet lastSum = 0\n\n\t\t\tcreateEffect(() => {\n\t\t\t\tlastSum = ex.sum2\n\t\t\t\tcount++\n\t\t\t})\n\n\t\t\texpect(ex.sum2).toBe(3)\n\t\t\texpect(count).toBe(1)\n\n\t\t\tex.a = 5\n\t\t\texpect(ex.sum2).toBe(7)\n\t\t\texpect(lastSum).toBe(7)\n\t\t\texpect(count).toBe(2)\n\n\t\t\t// This should not trigger the effect since the computed value doesn't change (still 7)\n\t\t\tbatch(() => {\n\t\t\t\tex.a = 3\n\t\t\t\tex.b = 4\n\t\t\t})\n\n\t\t\texpect(ex.sum2).toBe(7)\n\t\t\texpect(lastSum).toBe(7)\n\t\t\texpect(count).toBe(2) // count should still be 2, not 3\n\n\t\t\t// Readonly memo cannot be set - should throw in strict mode\n\t\t\texpect(() => {\n\t\t\t\t// @ts-expect-error - intentionally setting readonly property\n\t\t\t\tex.sum2 = 20\n\t\t\t}).toThrow()\n\t\t})\n\n\t\tit('creates a writable memo via getter+setter', () => {\n\t\t\tclass Example {\n\t\t\t\t@signal a = 1\n\t\t\t\t@signal b = 2\n\n\t\t\t\t@memo get sum2() {\n\t\t\t\t\treturn this.a + this.b\n\t\t\t\t}\n\t\t\t\t@memo set sum2(_val: number) {}\n\t\t\t}\n\n\t\t\tconst ex = new Example()\n\t\t\tlet count = 0\n\t\t\tlet lastSum = 0\n\n\t\t\tcreateEffect(() => {\n\t\t\t\tlastSum = ex.sum2\n\t\t\t\tcount++\n\t\t\t})\n\n\t\t\texpect(ex.sum2).toBe(3)\n\t\t\texpect(count).toBe(1)\n\n\t\t\tex.a = 5\n\t\t\texpect(ex.sum2).toBe(7)\n\t\t\texpect(lastSum).toBe(7)\n\t\t\texpect(count).toBe(2)\n\n\t\t\t// This should not trigger the effect since the computed value doesn't change (still 7)\n\t\t\tbatch(() => {\n\t\t\t\tex.a = 3\n\t\t\t\tex.b = 4\n\t\t\t})\n\n\t\t\texpect(ex.sum2).toBe(7)\n\t\t\texpect(lastSum).toBe(7)\n\t\t\texpect(count).toBe(2) // count should still be 2, not 3\n\n\t\t\t// Writable memo can be set directly\n\t\t\tex.sum2 = 20\n\t\t\texpect(ex.sum2).toBe(20)\n\t\t\texpect(lastSum).toBe(20)\n\t\t\texpect(count).toBe(3)\n\t\t})\n\n\t\tit('creates a readonly memo via accessor function value', () => {\n\t\t\tclass Example {\n\t\t\t\t@signal a = 1\n\t\t\t\t@signal b = 2\n\n\t\t\t\t@memo accessor sum3 = () => this.a + this.b\n\t\t\t}\n\n\t\t\tconst ex = new Example()\n\t\t\tlet runs = 0\n\t\t\tlet lastSum = 0\n\n\t\t\tcreateEffect(() => {\n\t\t\t\tlastSum = ex.sum3()\n\t\t\t\truns++\n\t\t\t})\n\n\t\t\texpect(ex.sum3()).toBe(3)\n\t\t\texpect(runs).toBe(1)\n\n\t\t\tex.a = 5\n\t\t\texpect(ex.sum3()).toBe(7)\n\t\t\texpect(lastSum).toBe(7)\n\t\t\texpect(runs).toBe(2)\n\n\t\t\t// This should not trigger the effect since the computed value doesn't change (still 7)\n\t\t\tbatch(() => {\n\t\t\t\tex.a = 3\n\t\t\t\tex.b = 4\n\t\t\t})\n\n\t\t\texpect(ex.sum3()).toBe(7)\n\t\t\texpect(lastSum).toBe(7)\n\t\t\texpect(runs).toBe(2) // count should still be 2, not 3\n\n\t\t\t// @ts-expect-error Readonly memo cannot be set - should throw\n\t\t\texpect(() => ex.sum3(20)).toThrow()\n\t\t})\n\n\t\tit('creates a writable memo via accessor function value', () => {\n\t\t\tclass Example {\n\t\t\t\t@signal a = 1\n\t\t\t\t@signal b = 2\n\n\t\t\t\t@memo accessor sum3 = (_val?: number) => this.a + this.b\n\t\t\t}\n\n\t\t\tconst ex = new Example()\n\t\t\tlet count = 0\n\t\t\tlet lastSum = 0\n\n\t\t\tcreateEffect(() => {\n\t\t\t\tlastSum = ex.sum3()\n\t\t\t\tcount++\n\t\t\t})\n\n\t\t\texpect(ex.sum3()).toBe(3)\n\t\t\texpect(count).toBe(1)\n\n\t\t\tex.a = 5\n\t\t\texpect(ex.sum3()).toBe(7)\n\t\t\texpect(lastSum).toBe(7)\n\t\t\texpect(count).toBe(2)\n\n\t\t\t// This should not trigger the effect since the computed value doesn't change (still 7)\n\t\t\tbatch(() => {\n\t\t\t\tex.a = 3\n\t\t\t\tex.b = 4\n\t\t\t})\n\n\t\t\texpect(ex.sum3()).toBe(7)\n\t\t\texpect(lastSum).toBe(7)\n\t\t\texpect(count).toBe(2) // count should still be 2, not 3\n\n\t\t\t// Writable memo can be set directly\n\t\t\tex.sum3(20)\n\t\t\texpect(ex.sum3()).toBe(20)\n\t\t\texpect(lastSum).toBe(20)\n\t\t\texpect(count).toBe(3)\n\t\t})\n\n\t\tit('creates a readonly memo via method', () => {\n\t\t\tclass Example {\n\t\t\t\t@signal a = 1\n\t\t\t\t@signal b = 2\n\n\t\t\t\t@memo sum4() {\n\t\t\t\t\treturn this.a + this.b\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst ex = new Example()\n\t\t\tlet count = 0\n\t\t\tlet lastSum = 0\n\n\t\t\tcreateEffect(() => {\n\t\t\t\tlastSum = ex.sum4()\n\t\t\t\tcount++\n\t\t\t})\n\n\t\t\texpect(ex.sum4()).toBe(3)\n\t\t\texpect(count).toBe(1)\n\n\t\t\tex.a = 5\n\t\t\texpect(ex.sum4()).toBe(7)\n\t\t\texpect(lastSum).toBe(7)\n\t\t\texpect(count).toBe(2)\n\n\t\t\t// This should not trigger the effect since the computed value doesn't change (still 7)\n\t\t\tbatch(() => {\n\t\t\t\tex.a = 3\n\t\t\t\tex.b = 4\n\t\t\t})\n\n\t\t\texpect(ex.sum4()).toBe(7)\n\t\t\texpect(lastSum).toBe(7)\n\t\t\texpect(count).toBe(2) // count should still be 2, not 3\n\n\t\t\t// Readonly memo cannot be set - should throw\n\t\t\texpect(() => {\n\t\t\t\t// @ts-expect-error - intentionally setting readonly memo\n\t\t\t\tex.sum4(20)\n\t\t\t}).toThrow()\n\t\t})\n\n\t\tit('creates a writable memo via method', () => {\n\t\t\tclass Example {\n\t\t\t\t@signal a = 1\n\t\t\t\t@signal b = 2\n\n\t\t\t\t@memo sum4(_val?: number) {\n\t\t\t\t\treturn this.a + this.b\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst ex = new Example()\n\t\t\tlet count = 0\n\t\t\tlet lastSum = 0\n\n\t\t\tcreateEffect(() => {\n\t\t\t\tlastSum = ex.sum4()\n\t\t\t\tcount++\n\t\t\t})\n\n\t\t\texpect(ex.sum4()).toBe(3)\n\t\t\texpect(count).toBe(1)\n\n\t\t\tex.a = 5\n\t\t\texpect(ex.sum4()).toBe(7)\n\t\t\texpect(lastSum).toBe(7)\n\t\t\texpect(count).toBe(2)\n\n\t\t\t// This should not trigger the effect since the computed value doesn't change (still 7)\n\t\t\tbatch(() => {\n\t\t\t\tex.a = 3\n\t\t\t\tex.b = 4\n\t\t\t})\n\n\t\t\texpect(ex.sum4()).toBe(7)\n\t\t\texpect(lastSum).toBe(7)\n\t\t\texpect(count).toBe(2) // count should still be 2, not 3\n\n\t\t\t// Writable memo can be set directly\n\t\t\tex.sum4(20)\n\t\t\texpect(ex.sum4()).toBe(20)\n\t\t\texpect(lastSum).toBe(20)\n\t\t\texpect(count).toBe(3)\n\t\t})\n\n\t\tit('memoizes complex computations and only re-runs when dependencies change', () => {\n\t\t\tclass Calculator {\n\t\t\t\tcomputeCount = 0\n\t\t\t\t@signal x = 10\n\t\t\t\t@signal y = 5\n\n\t\t\t\t@memo get result() {\n\t\t\t\t\tthis.computeCount++\n\t\t\t\t\treturn this.x * 2 + this.y\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst calc = new Calculator()\n\n\t\t\texpect(calc.result).toBe(25)\n\t\t\texpect(calc.computeCount).toBe(1)\n\n\t\t\t// Reading again should not re-compute\n\t\t\texpect(calc.result).toBe(25)\n\t\t\texpect(calc.computeCount).toBe(1)\n\n\t\t\t// Changing a dependency should trigger recomputation\n\t\t\tcalc.x = 20\n\t\t\texpect(calc.result).toBe(45)\n\t\t\texpect(calc.computeCount).toBe(2)\n\n\t\t\t// Reading again should not re-compute\n\t\t\texpect(calc.result).toBe(45)\n\t\t\texpect(calc.computeCount).toBe(2)\n\t\t})\n\n\t\tit('works with multiple memo properties', () => {\n\t\t\tclass MultiMemo {\n\t\t\t\t@signal value = 10\n\n\t\t\t\t@memo double() {\n\t\t\t\t\treturn this.value * 2\n\t\t\t\t}\n\t\t\t\t@memo get triple() {\n\t\t\t\t\treturn this.value * 3\n\t\t\t\t}\n\t\t\t\t@memo accessor quadruple = () => this.value * 4\n\t\t\t}\n\n\t\t\tconst mm = new MultiMemo()\n\t\t\tlet doubleCount = 0\n\t\t\tlet tripleCount = 0\n\t\t\tlet quadCount = 0\n\n\t\t\tcreateEffect(() => {\n\t\t\t\tmm.double()\n\t\t\t\tdoubleCount++\n\t\t\t})\n\t\t\tcreateEffect(() => {\n\t\t\t\tmm.triple\n\t\t\t\ttripleCount++\n\t\t\t})\n\t\t\tcreateEffect(() => {\n\t\t\t\tmm.quadruple()\n\t\t\t\tquadCount++\n\t\t\t})\n\n\t\t\texpect(mm.double()).toBe(20)\n\t\t\texpect(mm.triple).toBe(30)\n\t\t\texpect(mm.quadruple()).toBe(40)\n\t\t\texpect(doubleCount).toBe(1)\n\t\t\texpect(tripleCount).toBe(1)\n\t\t\texpect(quadCount).toBe(1)\n\n\t\t\tmm.value = 5\n\t\t\texpect(mm.double()).toBe(10)\n\t\t\texpect(mm.triple).toBe(15)\n\t\t\texpect(mm.quadruple()).toBe(20)\n\t\t\texpect(doubleCount).toBe(2)\n\t\t\texpect(tripleCount).toBe(2)\n\t\t\texpect(quadCount).toBe(2)\n\t\t})\n\n\t\tit('handles memo depending on other memos', () => {\n\t\t\tclass ChainedMemo {\n\t\t\t\t@signal base = 2\n\n\t\t\t\t@memo get squared() {\n\t\t\t\t\treturn this.base * this.base\n\t\t\t\t}\n\n\t\t\t\t@memo get cubed() {\n\t\t\t\t\treturn this.squared * this.base\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst cm = new ChainedMemo()\n\t\t\tlet count = 0\n\n\t\t\tcreateEffect(() => {\n\t\t\t\tcm.cubed\n\t\t\t\tcount++\n\t\t\t})\n\n\t\t\texpect(cm.squared).toBe(4)\n\t\t\texpect(cm.cubed).toBe(8)\n\t\t\texpect(count).toBe(1)\n\n\t\t\tcm.base = 3\n\t\t\texpect(cm.squared).toBe(9)\n\t\t\texpect(cm.cubed).toBe(27)\n\t\t\texpect(count).toBe(2)\n\t\t})\n\n\t\tit('correctly handles writable getter+setter memo overriding explicit value', () => {\n\t\t\tclass WritableOverride {\n\t\t\t\t@signal a = 5\n\t\t\t\t@signal b = 10\n\n\t\t\t\t@memo get sum() {\n\t\t\t\t\treturn this.a + this.b\n\t\t\t\t}\n\t\t\t\t@memo set sum(_val: number) {}\n\t\t\t}\n\n\t\t\tconst wo = new WritableOverride()\n\t\t\tlet count = 0\n\t\t\tlet lastValue = 0\n\n\t\t\tcreateEffect(() => {\n\t\t\t\tlastValue = wo.sum\n\t\t\t\tcount++\n\t\t\t})\n\n\t\t\texpect(wo.sum).toBe(15)\n\t\t\texpect(count).toBe(1)\n\t\t\texpect(lastValue).toBe(15)\n\n\t\t\t// Override with direct value\n\t\t\two.sum = 100\n\t\t\texpect(wo.sum).toBe(100)\n\t\t\texpect(count).toBe(2)\n\t\t\texpect(lastValue).toBe(100)\n\n\t\t\t// Changing dependencies should still work after override\n\t\t\two.a = 20\n\t\t\t// The memo should now compute based on signals again\n\t\t\texpect(wo.sum).toBe(30) // 20 + 10\n\t\t\texpect(count).toBe(3)\n\t\t\texpect(lastValue).toBe(30)\n\t\t})\n\n\t\tit('correctly handles writable accessor memo overriding explicit value', () => {\n\t\t\tclass WritableOverride {\n\t\t\t\t@signal a = 5\n\t\t\t\t@signal b = 10\n\n\t\t\t\t@memo accessor sum = (_val?: number) => this.a + this.b\n\t\t\t}\n\n\t\t\tconst wo = new WritableOverride()\n\t\t\tlet count = 0\n\t\t\tlet lastValue = 0\n\n\t\t\tcreateEffect(() => {\n\t\t\t\tlastValue = wo.sum()\n\t\t\t\tcount++\n\t\t\t})\n\n\t\t\texpect(wo.sum()).toBe(15)\n\t\t\texpect(count).toBe(1)\n\t\t\texpect(lastValue).toBe(15)\n\n\t\t\t// Override with direct value\n\t\t\two.sum(100)\n\t\t\texpect(wo.sum()).toBe(100)\n\t\t\texpect(count).toBe(2)\n\t\t\texpect(lastValue).toBe(100)\n\n\t\t\t// Changing dependencies should still work after override\n\t\t\two.a = 20\n\t\t\t// The memo should now compute based on signals again\n\t\t\texpect(wo.sum()).toBe(30) // 20 + 10\n\t\t\texpect(count).toBe(3)\n\t\t\texpect(lastValue).toBe(30)\n\t\t})\n\n\t\tit('correctly handles writable method memo overriding explicit value', () => {\n\t\t\tclass WritableOverride {\n\t\t\t\t@signal a = 5\n\t\t\t\t@signal b = 10\n\n\t\t\t\t@memo sum(_val?: number) {\n\t\t\t\t\treturn this.a + this.b\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst wo = new WritableOverride()\n\t\t\tlet count = 0\n\t\t\tlet lastValue = 0\n\n\t\t\tcreateEffect(() => {\n\t\t\t\tlastValue = wo.sum()\n\t\t\t\tcount++\n\t\t\t})\n\n\t\t\texpect(wo.sum()).toBe(15)\n\t\t\texpect(count).toBe(1)\n\t\t\texpect(lastValue).toBe(15)\n\n\t\t\t// Override with direct value\n\t\t\two.sum(100)\n\t\t\texpect(wo.sum()).toBe(100)\n\t\t\texpect(count).toBe(2)\n\t\t\texpect(lastValue).toBe(100)\n\n\t\t\t// Changing dependencies should still work after override\n\t\t\two.a = 20\n\t\t\t// The memo should now compute based on signals again\n\t\t\texpect(wo.sum()).toBe(30) // 20 + 10\n\t\t\texpect(count).toBe(3)\n\t\t\texpect(lastValue).toBe(30)\n\t\t})\n\n\t\tit('handles memo with no dependencies', () => {\n\t\t\tclass ConstantMemo {\n\t\t\t\t@memo get constant() {\n\t\t\t\t\treturn 42\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst cm = new ConstantMemo()\n\t\t\tlet count = 0\n\n\t\t\tcreateEffect(() => {\n\t\t\t\tcm.constant\n\t\t\t\tcount++\n\t\t\t})\n\n\t\t\texpect(cm.constant).toBe(42)\n\t\t\texpect(count).toBe(1)\n\n\t\t\t// Reading again should not trigger effect\n\t\t\tconst val = cm.constant\n\t\t\texpect(val).toBe(42)\n\t\t\texpect(count).toBe(1)\n\t\t})\n\n\t\tit('supports private getter/setters', () => {\n\t\t\tclass Example {\n\t\t\t\t@signal a = 1\n\t\t\t\t@signal b = 2\n\n\t\t\t\t@memo get #sumPrivate() {\n\t\t\t\t\treturn this.a + this.b\n\t\t\t\t}\n\t\t\t\t@memo set #sumPrivate(_val: number) {}\n\n\t\t\t\tget sum() {\n\t\t\t\t\treturn this.#sumPrivate\n\t\t\t\t}\n\t\t\t\tset sum(val) {\n\t\t\t\t\tthis.#sumPrivate = val\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst ex = new Example()\n\t\t\tlet count = 0\n\t\t\tlet lastSum = 0\n\n\t\t\tcreateEffect(() => {\n\t\t\t\tlastSum = ex.sum\n\t\t\t\tcount++\n\t\t\t})\n\n\t\t\texpect(lastSum).toBe(3)\n\t\t\texpect(count).toBe(1)\n\n\t\t\tex.a = 5\n\t\t\texpect(lastSum).toBe(7)\n\t\t\texpect(count).toBe(2)\n\n\t\t\tbatch(() => {\n\t\t\t\tex.a = 3\n\t\t\t\tex.b = 4\n\t\t\t})\n\n\t\t\texpect(lastSum).toBe(7)\n\t\t\texpect(count).toBe(2) // should not run because sum didn't change\n\n\t\t\tex.sum = 20\n\t\t\texpect(lastSum).toBe(20)\n\t\t\texpect(count).toBe(3)\n\t\t})\n\n\t\tfunction accessorGetSet(value: ClassAccessorDecoratorTarget) {\n\t\t\treturn function (_: ClassAccessorDecoratorTarget, __: ClassAccessorDecoratorContext) {\n\t\t\t\treturn value\n\t\t\t}\n\t\t}\n\n\t\t// This is undocumented, but helps us get set up for concise accessors once that syntax lands.\n\t\tit('supports private auto accessors', () => {\n\t\t\tclass Example {\n\t\t\t\t@signal a = 1\n\t\t\t\t@signal b = 2\n\n\t\t\t\t// @ts-ignore\n\t\t\t\t@memo\n\t\t\t\t@accessorGetSet({\n\t\t\t\t\tget(this: any) {\n\t\t\t\t\t\treturn this.a + this.b\n\t\t\t\t\t},\n\t\t\t\t\tset() {},\n\t\t\t\t})\n\t\t\t\taccessor #sumPrivate = 0 // initial value won't matter, memo will override initially\n\n\t\t\t\tget sum() {\n\t\t\t\t\treturn this.#sumPrivate\n\t\t\t\t}\n\t\t\t\tset sum(val) {\n\t\t\t\t\tthis.#sumPrivate = val\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst ex = new Example()\n\t\t\tlet count = 0\n\t\t\tlet lastSum = 0\n\n\t\t\tcreateEffect(() => {\n\t\t\t\tlastSum = ex.sum\n\t\t\t\tcount++\n\t\t\t})\n\n\t\t\texpect(lastSum).toBe(1 + 2)\n\t\t\texpect(count).toBe(1)\n\n\t\t\tex.a = 5\n\t\t\texpect(lastSum).toBe(5 + 2)\n\t\t\texpect(count).toBe(2)\n\n\t\t\tbatch(() => {\n\t\t\t\tex.a = 3\n\t\t\t\tex.b = 4\n\t\t\t})\n\n\t\t\texpect(lastSum).toBe(7)\n\t\t\texpect(count).toBe(2) // should not run because sum didn't change\n\n\t\t\tex.sum = 20\n\t\t\texpect(lastSum).toBe(20)\n\t\t\texpect(count).toBe(3)\n\t\t})\n\n\t\tit('supports private methods', () => {\n\t\t\tclass Example {\n\t\t\t\t@signal a = 1\n\t\t\t\t@signal b = 2\n\n\t\t\t\t@memo #sumPrivate(_val?: number) {\n\t\t\t\t\treturn this.a + this.b\n\t\t\t\t}\n\n\t\t\t\tget sum() {\n\t\t\t\t\treturn this.#sumPrivate()\n\t\t\t\t}\n\t\t\t\tset sum(val) {\n\t\t\t\t\tthis.#sumPrivate(val)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst ex = new Example()\n\t\t\tlet count = 0\n\t\t\tlet lastSum = 0\n\n\t\t\tcreateEffect(() => {\n\t\t\t\tlastSum = ex.sum\n\t\t\t\tcount++\n\t\t\t})\n\n\t\t\texpect(lastSum).toBe(1 + 2)\n\t\t\texpect(count).toBe(1)\n\n\t\t\tex.a = 5\n\t\t\texpect(lastSum).toBe(5 + 2)\n\t\t\texpect(count).toBe(2)\n\n\t\t\tbatch(() => {\n\t\t\t\tex.a = 3\n\t\t\t\tex.b = 4\n\t\t\t})\n\n\t\t\texpect(lastSum).toBe(7)\n\t\t\texpect(count).toBe(2) // should not run because sum didn't change\n\n\t\t\tex.sum = 20\n\t\t\tconsole.log('sum?', ex.sum)\n\t\t\texpect(lastSum).toBe(20)\n\t\t\texpect(count).toBe(3)\n\t\t})\n\n\t\tdescribe('subclass memo overriding/extending', () => {\n\t\t\tit('supports subclass memo extending base memo (getter)', () => {\n\t\t\t\tclass Base {\n\t\t\t\t\t@signal a = 1\n\t\t\t\t\t@memo get baseVal() {\n\t\t\t\t\t\treturn this.a + 1\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclass Sub extends Base {\n\t\t\t\t\t@memo override get baseVal() {\n\t\t\t\t\t\treturn super.baseVal + 1 // extend\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst s = new Sub()\n\t\t\t\tlet runs = 0\n\t\t\t\tlet last = 0\n\n\t\t\t\tcreateEffect(() => {\n\t\t\t\t\truns++\n\t\t\t\t\tlast = s.baseVal\n\t\t\t\t})\n\n\t\t\t\texpect(last).toBe(1 + 1 + 1)\n\t\t\t\texpect(runs).toBe(1)\n\n\t\t\t\ts.a = 5\n\t\t\t\texpect(last).toBe(5 + 1 + 1)\n\t\t\t\texpect(runs).toBe(2)\n\t\t\t})\n\n\t\t\tit('supports subclass memo overriding base memo (getter no super)', () => {\n\t\t\t\tclass Base {\n\t\t\t\t\t@signal a = 1\n\t\t\t\t\t@memo get val() {\n\t\t\t\t\t\treturn this.a + 1\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclass Sub extends Base {\n\t\t\t\t\t@memo override get val() {\n\t\t\t\t\t\treturn this.a * 2 // override\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst s = new Sub()\n\t\t\t\tlet runs = 0\n\t\t\t\tlet last = 0\n\n\t\t\t\tcreateEffect(() => {\n\t\t\t\t\truns++\n\t\t\t\t\tlast = s.val\n\t\t\t\t})\n\n\t\t\t\texpect(last).toBe(1 * 2)\n\t\t\t\texpect(runs).toBe(1)\n\n\t\t\t\ts.a = 5\n\t\t\t\texpect(last).toBe(5 * 2)\n\t\t\t\texpect(runs).toBe(2)\n\t\t\t})\n\n\t\t\tit('supports getter override with no super', () => {\n\t\t\t\tconst [a, setA] = createSignal(10)\n\t\t\t\tlet baseRuns = 0\n\t\t\t\tlet subRuns = 0\n\n\t\t\t\tclass Base {\n\t\t\t\t\t@memo get val() {\n\t\t\t\t\t\tbaseRuns++\n\t\t\t\t\t\treturn a() + 1\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclass Sub extends Base {\n\t\t\t\t\t@memo override get val() {\n\t\t\t\t\t\tsubRuns++\n\t\t\t\t\t\treturn a() + 10\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst o = new Sub()\n\t\t\t\tlet effectRuns = 0\n\t\t\t\tlet effectVal = 0\n\n\t\t\t\tcreateEffect(() => {\n\t\t\t\t\teffectRuns++\n\t\t\t\t\teffectVal = o.val\n\t\t\t\t})\n\n\t\t\t\texpect(effectVal).toBe(10 + 10)\n\t\t\t\texpect(baseRuns).toBe(0)\n\t\t\t\texpect(subRuns).toBe(1)\n\t\t\t\texpect(effectRuns).toBe(1)\n\n\t\t\t\tsetA(20)\n\t\t\t\texpect(effectVal).toBe(20 + 10)\n\t\t\t\texpect(baseRuns).toBe(0)\n\t\t\t\texpect(subRuns).toBe(2)\n\t\t\t\texpect(effectRuns).toBe(2)\n\t\t\t})\n\n\t\t\tit('supports multi-level getter extension with super', () => {\n\t\t\t\tconst [a, setA] = createSignal(10)\n\t\t\t\tlet baseRuns = 0\n\t\t\t\tlet midRuns = 0\n\t\t\t\tlet subRuns = 0\n\n\t\t\t\tclass Base {\n\t\t\t\t\t@memo get val() {\n\t\t\t\t\t\tbaseRuns++\n\t\t\t\t\t\treturn a() + 1\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclass Mid extends Base {\n\t\t\t\t\t@memo override get val() {\n\t\t\t\t\t\tmidRuns++\n\t\t\t\t\t\treturn super.val + 10\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclass Sub extends Mid {\n\t\t\t\t\t@memo override get val() {\n\t\t\t\t\t\tsubRuns++\n\t\t\t\t\t\treturn super.val + 100\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst o = new Sub()\n\t\t\t\tlet effectRuns = 0\n\t\t\t\tlet effectVal = 0\n\n\t\t\t\tcreateEffect(() => {\n\t\t\t\t\teffectRuns++\n\t\t\t\t\teffectVal = o.val\n\t\t\t\t})\n\n\t\t\t\texpect(effectVal).toBe(10 + 1 + 10 + 100)\n\t\t\t\texpect(baseRuns).toBe(1)\n\t\t\t\texpect(midRuns).toBe(1)\n\t\t\t\texpect(subRuns).toBe(1)\n\t\t\t\texpect(effectRuns).toBe(1)\n\n\t\t\t\tsetA(20)\n\t\t\t\texpect(effectVal).toBe(20 + 1 + 10 + 100)\n\t\t\t\texpect(baseRuns).toBe(2)\n\t\t\t\texpect(midRuns).toBe(2)\n\t\t\t\texpect(subRuns).toBe(2)\n\t\t\t\texpect(effectRuns).toBe(2)\n\t\t\t})\n\n\t\t\tit('supports subclass memo method extension with super', () => {\n\t\t\t\tlet baseRuns = 0\n\n\t\t\t\tclass BaseM {\n\t\t\t\t\t@signal a = 1\n\t\t\t\t\t@memo val() {\n\t\t\t\t\t\tbaseRuns++\n\t\t\t\t\t\treturn this.a + 1\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlet subRuns = 0\n\n\t\t\t\tclass SubM extends BaseM {\n\t\t\t\t\t@memo override val() {\n\t\t\t\t\t\tsubRuns++\n\t\t\t\t\t\treturn super.val() + 2\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst s = new SubM()\n\t\t\t\tlet effectRuns = 0\n\t\t\t\tlet last = 0\n\n\t\t\t\tcreateEffect(() => {\n\t\t\t\t\teffectRuns++\n\t\t\t\t\tlast = s.val()\n\t\t\t\t})\n\n\t\t\t\texpect(last).toBe(1 + 1 + 2)\n\t\t\t\texpect(baseRuns).toBe(1)\n\t\t\t\texpect(subRuns).toBe(1)\n\t\t\t\texpect(effectRuns).toBe(1)\n\n\t\t\t\ts.a = 5\n\t\t\t\texpect(last).toBe(5 + 1 + 2)\n\t\t\t\texpect(baseRuns).toBe(2)\n\t\t\t\texpect(subRuns).toBe(2)\n\t\t\t\texpect(effectRuns).toBe(2)\n\t\t\t})\n\n\t\t\tit('supports subclass memo method override with no super', () => {\n\t\t\t\tlet baseRuns = 0\n\t\t\t\tlet subRuns = 0\n\n\t\t\t\tclass BaseM {\n\t\t\t\t\t@signal a = 1\n\t\t\t\t\t@memo val() {\n\t\t\t\t\t\tbaseRuns++\n\t\t\t\t\t\treturn this.a + 1\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclass SubM extends BaseM {\n\t\t\t\t\t@memo override val() {\n\t\t\t\t\t\tsubRuns++\n\t\t\t\t\t\treturn this.a + 2\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst s = new SubM()\n\t\t\t\tlet effectRuns = 0\n\t\t\t\tlet last = 0\n\n\t\t\t\tcreateEffect(() => {\n\t\t\t\t\teffectRuns++\n\t\t\t\t\tlast = s.val()\n\t\t\t\t})\n\n\t\t\t\texpect(last).toBe(1 + 2)\n\t\t\t\texpect(baseRuns).toBe(0)\n\t\t\t\texpect(subRuns).toBe(1)\n\t\t\t\texpect(effectRuns).toBe(1)\n\n\t\t\t\ts.a = 5\n\t\t\t\texpect(last).toBe(5 + 2)\n\t\t\t\texpect(baseRuns).toBe(0)\n\t\t\t\texpect(subRuns).toBe(2)\n\t\t\t\texpect(effectRuns).toBe(2)\n\t\t\t})\n\n\t\t\tit('supports subclass memo auto accessor extension with super', () => {\n\t\t\t\tlet baseRuns = 0\n\t\t\t\tlet subRuns = 0\n\n\t\t\t\tclass BaseFO {\n\t\t\t\t\t@signal a = 1\n\t\t\t\t\t@memo accessor val = () => {\n\t\t\t\t\t\tbaseRuns++\n\t\t\t\t\t\treturn this.a + 1\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclass SubFO extends BaseFO {\n\t\t\t\t\t@memo override accessor val = () => {\n\t\t\t\t\t\tsubRuns++\n\t\t\t\t\t\treturn super.val() * 3\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst s = new SubFO()\n\t\t\t\tlet effectRuns = 0\n\t\t\t\tlet last = 0\n\n\t\t\t\tcreateEffect(() => {\n\t\t\t\t\teffectRuns++\n\t\t\t\t\tlast = s.val()\n\t\t\t\t})\n\n\t\t\t\texpect(last).toBe((1 + 1) * 3)\n\t\t\t\texpect(baseRuns).toBe(1)\n\t\t\t\texpect(subRuns).toBe(1)\n\t\t\t\texpect(effectRuns).toBe(1)\n\n\t\t\t\ts.a = 4\n\t\t\t\texpect(last).toBe((4 + 1) * 3)\n\t\t\t\texpect(baseRuns).toBe(2)\n\t\t\t\texpect(subRuns).toBe(2)\n\t\t\t\texpect(effectRuns).toBe(2)\n\t\t\t})\n\n\t\t\tit('supports subclass memo auto accessor override with no super', () => {\n\t\t\t\tlet baseRuns = 0\n\t\t\t\tlet subRuns = 0\n\n\t\t\t\tclass BaseFO {\n\t\t\t\t\t@signal a = 1\n\t\t\t\t\t@memo accessor val = () => {\n\t\t\t\t\t\tbaseRuns++\n\t\t\t\t\t\treturn this.a + 1\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclass SubFO extends BaseFO {\n\t\t\t\t\t@memo override accessor val = () => {\n\t\t\t\t\t\tsubRuns++\n\t\t\t\t\t\treturn this.a * 3\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst s = new SubFO()\n\t\t\t\tlet effectRuns = 0\n\t\t\t\tlet last = 0\n\n\t\t\t\tcreateEffect(() => {\n\t\t\t\t\teffectRuns++\n\t\t\t\t\tlast = s.val()\n\t\t\t\t})\n\n\t\t\t\texpect(last).toBe(1 * 3)\n\t\t\t\texpect(baseRuns).toBe(0)\n\t\t\t\texpect(subRuns).toBe(1)\n\t\t\t\texpect(effectRuns).toBe(1)\n\n\t\t\t\ts.a = 4\n\t\t\t\texpect(last).toBe(4 * 3)\n\t\t\t\texpect(baseRuns).toBe(0)\n\t\t\t\texpect(subRuns).toBe(2)\n\t\t\t\texpect(effectRuns).toBe(2)\n\t\t\t})\n\t\t})\n\n\t\tdescribe('invalid usage', () => {\n\t\t\tit('throws on non-function value', () => {\n\t\t\t\tclass Base {\n\t\t\t\t\t// @ts-expect-error non-function value\n\t\t\t\t\t@memo accessor foo = 1\n\t\t\t\t}\n\n\t\t\t\texpect(() => new Base()).toThrow('memo value for \"foo\" is not a function: 1')\n\t\t\t})\n\n\t\t\tit('throws on @memo used on class field', () => {\n\t\t\t\tconst [a] = createSignal(10)\n\n\t\t\t\texpect(() => {\n\t\t\t\t\tclass InvalidMemo {\n\t\t\t\t\t\t// @ts-expect-error @memo not usable on fields\n\t\t\t\t\t\t@memo a = () => a()\n\t\t\t\t\t}\n\t\t\t\t\tnew InvalidMemo()\n\t\t\t\t}).toThrow('@memo is not supported on class fields.')\n\t\t\t})\n\n\t\t\tit('throws on duplicate members', () => {\n\t\t\t\tconst run = () => {\n\t\t\t\t\tclass SuperDuper {\n\t\t\t\t\t\t// @ts-expect-error duplicate member\n\t\t\t\t\t\t@memo get dupe() {\n\t\t\t\t\t\t\treturn 2\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// @ts-expect-error duplicate member\n\t\t\t\t\t\t@memo get dupe() {\n\t\t\t\t\t\t\treturn 3\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tnew SuperDuper()\n\t\t\t\t}\n\n\t\t\t\t// When compiling with Babel, decorators currently throw an error when applied onto multiple members of the same name.\n\t\t\t\texpect(run).toThrow('Decorating two elements with the same name (get dupe) is not supported yet')\n\n\t\t\t\t// When compiling with TypeScript, decorating duplicate members is allowed, and the last one wins.\n\t\t\t\t// expect(run).toThrow(\n\t\t\t\t// \t'@memo decorated member \"dupe\" has already been memoified. This can happen if there are duplicated class members.',\n\t\t\t\t// )\n\n\t\t\t\t// TODO ^ update Babel to latest in @lume/cli, see if decorators on duplicate members work in classy-solid\n\t\t\t})\n\n\t\t\tit('throws due to TDZ when accessing private fields defined after regular fields', () => {\n\t\t\t\tclass Bar {\n\t\t\t\t\t@signal bar = 456\n\n\t\t\t\t\t#baz = 789\n\n\t\t\t\t\t@signal get baz() {\n\t\t\t\t\t\treturn this.#baz\n\t\t\t\t\t}\n\t\t\t\t\t@signal set baz(v) {\n\t\t\t\t\t\tthis.#baz = v\n\t\t\t\t\t}\n\n\t\t\t\t\t// This throws because #baz is used before its initialization\n\t\t\t\t\t// The ordering is:\n\t\t\t\t\t// 1. bar field initialized\n\t\t\t\t\t// 2. bar field runs finalizers because it is last in the ordering of extra initializers (so #baz is not initialized yet)\n\t\t\t\t\t// 3. During the logBar finalizer (executed in the bar extra initializer), the baz getter is accessed, which accesses #baz before it is initialized\n\t\t\t\t\t@effect logBar() {\n\t\t\t\t\t\tthis.baz\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\texpect(() => new Bar()).toThrow('Cannot read private member #baz from an object whose class did not declare it')\n\n\t\t\t\t// To work around the problem, place private fields before regular fields:\n\t\t\t\tclass Bar2 {\n\t\t\t\t\t#baz = 789\n\n\t\t\t\t\t@signal bar = 456\n\n\t\t\t\t\t@signal get baz() {\n\t\t\t\t\t\treturn this.#baz\n\t\t\t\t\t}\n\t\t\t\t\t@signal set baz(v) {\n\t\t\t\t\t\tthis.#baz = v\n\t\t\t\t\t}\n\n\t\t\t\t\t@effect logBar() {\n\t\t\t\t\t\tthis.baz\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\texpect(() => new Bar2()).not.toThrow()\n\t\t\t})\n\t\t})\n\t})\n})\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/dist/decorators/signal.d.ts b/dist/decorators/signal.d.ts index b4b8cee..4a93dc7 100644 --- a/dist/decorators/signal.d.ts +++ b/dist/decorators/signal.d.ts @@ -1,5 +1,5 @@ import './metadata-shim.js'; -interface SignalOptions { +export interface SignalOptions { /** * Whether to extend an existing base class signal instead of creating a new * one. When true, the existing signal is reused, otherwise a new signal diff --git a/dist/decorators/signal.d.ts.map b/dist/decorators/signal.d.ts.map index 73099f8..e4a751a 100644 --- a/dist/decorators/signal.d.ts.map +++ b/dist/decorators/signal.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"signal.d.ts","sourceRoot":"","sources":["../../src/decorators/signal.ts"],"names":[],"mappings":"AAKA,OAAO,oBAAoB,CAAA;AAK3B,UAAU,aAAa;IACtB;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;CAChB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,MAAM,CACrB,KAAK,EAAE,OAAO,EACd,OAAO,EACJ,0BAA0B,GAC1B,2BAA2B,GAC3B,2BAA2B,GAC3B,6BAA6B,GAC9B,GAAG,CAAA;AACN,wBAAgB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,oBAAoB,CAAA;AA4B3E,iBAAS,oBAAoB,CAC5B,KAAK,EAAE,OAAO,EACd,OAAO,EACJ,0BAA0B,GAC1B,2BAA2B,GAC3B,2BAA2B,GAC3B,6BAA6B,EAChC,OAAO,GAAE,aAA8B,GACrC,GAAG,CA0KL"} \ No newline at end of file +{"version":3,"file":"signal.d.ts","sourceRoot":"","sources":["../../src/decorators/signal.ts"],"names":[],"mappings":"AAWA,OAAO,oBAAoB,CAAA;AAK3B,MAAM,WAAW,aAAa;IAC7B;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;CAChB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,MAAM,CACrB,KAAK,EAAE,OAAO,EACd,OAAO,EACJ,0BAA0B,GAC1B,2BAA2B,GAC3B,2BAA2B,GAC3B,6BAA6B,GAC9B,GAAG,CAAA;AACN,wBAAgB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,oBAAoB,CAAA;AA4B3E,iBAAS,oBAAoB,CAC5B,KAAK,EAAE,OAAO,EACd,OAAO,EACJ,0BAA0B,GAC1B,2BAA2B,GAC3B,2BAA2B,GAC3B,6BAA6B,EAChC,OAAO,GAAE,aAA8B,GACrC,GAAG,CAuKL"} \ No newline at end of file diff --git a/dist/decorators/signal.js b/dist/decorators/signal.js index f9c0e8c..d059912 100644 --- a/dist/decorators/signal.js +++ b/dist/decorators/signal.js @@ -1,6 +1,6 @@ import { batch } from 'solid-js'; import { getSignal__, trackPropSetAtLeastOnce__ } from '../signals/signalify.js'; -import { isSignalGetter, getMemberStat, finalizeMembersIfLast, getMembers, signalifyIfNeeded } from '../_state.js'; +import { isSignalGetter__, getMemberStat__, finalizeMembersIfLast__, getMembers__, signalifyIfNeeded__ } from '../_state.js'; import './metadata-shim.js'; const Undefined = Symbol(); const isExtending = new WeakSet(); @@ -61,13 +61,13 @@ function signalImplementation(value, context, options = { name } = context; const metadata = context.metadata; - const members = getMembers(metadata); + const members = getMembers__(metadata); if (!(kind === 'field' || kind === 'accessor' || kind === 'getter' || kind === 'setter')) throw new InvalidSignalDecoratorError(); if (kind === 'field') { if (context.private) throw new Error('@signal cannot signalify #private fields. Use a #private getter/setter or auto accessor instead. F.e. convert `@signal #foo = 0` to `@signal accessor #foo = 0`.'); - const stat = getMemberStat(name, 'signal-field', members, context); + const stat = getMemberStat__(name, 'signal-field', members, context); stat.finalize = function () { - signalifyIfNeeded(this, stat); + signalifyIfNeeded__(this, stat); }; context.addInitializer(function () { if (stat.reuseExistingSignal) { @@ -78,7 +78,7 @@ function signalImplementation(value, context, options = { Object.defineProperty(this, name, stat.existingSignalDescriptor); this[name] = stat.newInitialValue; } - finalizeMembersIfLast(this, members); + finalizeMembersIfLast__(this, members); }); return function (initialVal) { // Detect if we already have a signal for this instance, and if so @@ -89,7 +89,7 @@ function signalImplementation(value, context, options = { // If we already have a signal descriptor, we will re-use it, so // that any effects depending on it will continue to work. - if (isSignalGetter.has(descriptor?.get)) { + if (isSignalGetter__.has(descriptor?.get)) { stat.reuseExistingSignal = true; stat.newInitialValue = initialVal; stat.existingSignalDescriptor = descriptor; @@ -113,10 +113,7 @@ function signalImplementation(value, context, options = { } = value; const signalStorage = new WeakMap(); let initialValue = Undefined; - function init(initialVal) { - initialValue = initialVal; - return initialVal; - } + const init = initialVal => initialValue = initialVal; context.addInitializer(function () { // Locate the prototype of this auto accessor. const proto = getPrototypeOfMethodOrAccessor(this, name, newGet); @@ -158,7 +155,7 @@ function signalImplementation(value, context, options = { get: newGet, set: newSet }; - isSignalGetter.add(newValue.get); + isSignalGetter__.add(newValue.get); return newValue; } else if (kind === 'getter' || kind === 'setter') { const getOrSet = value; @@ -183,7 +180,7 @@ function signalImplementation(value, context, options = { getSignal__(this, signalStorage, initialValue)(); return getOrSet.call(this); }; - isSignalGetter.add(newGetter); + isSignalGetter__.add(newGetter); return newGetter; } else { pairs[name] ??= 0; diff --git a/dist/decorators/signal.js.map b/dist/decorators/signal.js.map index af62845..2cb80fc 100644 --- a/dist/decorators/signal.js.map +++ b/dist/decorators/signal.js.map @@ -1 +1 @@ -{"version":3,"file":"signal.js","names":["batch","getSignal__","trackPropSetAtLeastOnce__","isSignalGetter","getMemberStat","finalizeMembersIfLast","getMembers","signalifyIfNeeded","Undefined","Symbol","isExtending","WeakSet","signal","valueOrOptions","context","signalImplementation","options","value","extend","static","Error","kind","name","metadata","members","InvalidSignalDecoratorError","private","stat","finalize","addInitializer","reuseExistingSignal","newInitialValue","Object","defineProperty","existingSignalDescriptor","initialVal","descriptor","getOwnPropertyDescriptor","has","get","set","signalStorage","WeakMap","initialValue","init","proto","getPrototypeOfMethodOrAccessor","newGet","currentProto","fn","__proto__","Reflect","call","add","newSet","newValue","s","getOrSet","hasOwn","classySolid_getterSetterSignals","signalsStorages","classySolid_getterSetterPairCounts","pairs","queueMicrotask","missing","MissingSignalDecoratorError","newGetter","newSetter","constructor","prop","String","obj","getPrototypeOf"],"sources":["../../src/decorators/signal.ts"],"sourcesContent":["import {batch} from 'solid-js'\nimport {getSignal__, trackPropSetAtLeastOnce__} from '../signals/signalify.js'\nimport type {AnyObject, ClassySolidMetadata, PropKey} from './types.js'\nimport type {SignalFunction} from '../signals/createSignalFunction.js'\nimport {isSignalGetter, getMemberStat, finalizeMembersIfLast, getMembers, signalifyIfNeeded} from '../_state.js'\nimport './metadata-shim.js'\n\nconst Undefined = Symbol()\nconst isExtending = new WeakSet()\n\ninterface SignalOptions {\n\t/**\n\t * Whether to extend an existing base class signal instead of creating a new\n\t * one. When true, the existing signal is reused, otherwise a new signal\n\t * overrides the existing one from the base class.\n\t *\n\t * Defaults to true, as typically we want base class effects and memos to\n\t * keep working when a subclass overrides a signal property.\n\t */\n\textend?: boolean\n}\n\n/**\n * @decorator\n * Decorate properties of a class with `@signal` to back them with Solid\n * signals, making them reactive.\n *\n * Related: See the Solid.js `createSignal` API for creating standalone signals.\n *\n * Example:\n *\n * ```js\n * import {signal} from 'classy-solid'\n * import {createEffect} from 'solid-js'\n *\n * class Counter {\n * ⁣@signal count = 0\n *\n * constructor() {\n * setInterval(() => this.count++, 1000)\n *\n * createEffect(() => {\n * console.log('count:', this.count)\n * })\n * }\n * }\n *\n * const counter = new Counter()\n *\n * // When extending a class with a signal field, the subclass can override\n * // the initial value while keeping base class effects and memos working:\n * class SubCounter extends Counter {\n * ⁣@signal override count = 10 // starts at 10 instead of 0\n * }\n * ```\n */\nexport function signal(\n\tvalue: unknown,\n\tcontext:\n\t\t| ClassFieldDecoratorContext\n\t\t| ClassGetterDecoratorContext\n\t\t| ClassSetterDecoratorContext\n\t\t| ClassAccessorDecoratorContext,\n): any\nexport function signal(options: SignalOptions): typeof signalImplementation\nexport function signal(\n\tvalueOrOptions: unknown | SignalOptions,\n\tcontext?:\n\t\t| ClassFieldDecoratorContext\n\t\t| ClassGetterDecoratorContext\n\t\t| ClassSetterDecoratorContext\n\t\t| ClassAccessorDecoratorContext,\n): any {\n\t// Used as `@signal` without options\n\tif (context) return signalImplementation(valueOrOptions, context)\n\n\t// Used as `@signal({...})` with options\n\n\tconst options = valueOrOptions as SignalOptions\n\n\treturn function (\n\t\tvalue: unknown,\n\t\tcontext:\n\t\t\t| ClassFieldDecoratorContext\n\t\t\t| ClassGetterDecoratorContext\n\t\t\t| ClassSetterDecoratorContext\n\t\t\t| ClassAccessorDecoratorContext,\n\t) {\n\t\treturn signalImplementation(value, context, options)\n\t}\n}\n\nfunction signalImplementation(\n\tvalue: unknown,\n\tcontext:\n\t\t| ClassFieldDecoratorContext\n\t\t| ClassGetterDecoratorContext\n\t\t| ClassSetterDecoratorContext\n\t\t| ClassAccessorDecoratorContext,\n\toptions: SignalOptions = {extend: true},\n): any {\n\tif (context.static) throw new Error('@signal is not supported on static fields yet.')\n\n\toptions.extend ??= true\n\n\tconst {kind, name} = context\n\tconst metadata = context.metadata as ClassySolidMetadata\n\tconst members = getMembers(metadata)\n\n\tif (!(kind === 'field' || kind === 'accessor' || kind === 'getter' || kind === 'setter'))\n\t\tthrow new InvalidSignalDecoratorError()\n\n\tif (kind === 'field') {\n\t\tif (context.private)\n\t\t\tthrow new Error(\n\t\t\t\t'@signal cannot signalify #private fields. Use a #private getter/setter or auto accessor instead. F.e. convert `@signal #foo = 0` to `@signal accessor #foo = 0`.',\n\t\t\t)\n\n\t\tconst stat = getMemberStat(name, 'signal-field', members, context)\n\n\t\tstat.finalize = function () {\n\t\t\tsignalifyIfNeeded(this as AnyObject, stat)\n\t\t}\n\n\t\tcontext.addInitializer(function () {\n\t\t\tif (stat.reuseExistingSignal) {\n\t\t\t\t// Delete the value descriptor, put back the signal descriptor,\n\t\t\t\t// and set the new initial value.\n\t\t\t\tstat.newInitialValue = (this as AnyObject)[name]\n\t\t\t\tdelete (this as AnyObject)[name]\n\t\t\t\tObject.defineProperty(this as AnyObject, name, stat.existingSignalDescriptor!)\n\t\t\t\t;(this as AnyObject)[name] = stat.newInitialValue\n\t\t\t}\n\t\t\tfinalizeMembersIfLast(this as AnyObject, members)\n\t\t})\n\n\t\treturn function (this: unknown, initialVal: unknown) {\n\t\t\t// Detect if we already have a signal for this instance, and if so\n\t\t\t// re-use it. This allows base class effects to stay operational\n\t\t\t// instead of a new signal being created that the base class effect\n\t\t\t// won't track.\n\t\t\tconst descriptor = Object.getOwnPropertyDescriptor(this as AnyObject, name)\n\n\t\t\t// If we already have a signal descriptor, we will re-use it, so\n\t\t\t// that any effects depending on it will continue to work.\n\t\t\tif (isSignalGetter.has(descriptor?.get!)) {\n\t\t\t\tstat.reuseExistingSignal = true\n\t\t\t\tstat.newInitialValue = initialVal\n\t\t\t\tstat.existingSignalDescriptor = descriptor\n\t\t\t}\n\n\t\t\t// The engine will define the property with this value in a value\n\t\t\t// descriptor, which we need to convert to a signal accessor\n\t\t\t// descriptor again (or for first time).\n\t\t\treturn initialVal\n\t\t}\n\t}\n\n\t// It's ok that getters/setters/auto-accessors are not finalized the same\n\t// way as with fields above and as with memos/effects, because we do the set\n\t// up during decoration which happens well before any initializers (before\n\t// any memos and effects, so these will be tracked).\n\telse if (kind === 'accessor') {\n\t\tconst {get, set} = value as {get: () => unknown; set: (v: unknown) => void}\n\t\tconst signalStorage = new WeakMap>()\n\t\tlet initialValue: unknown = Undefined\n\n\t\tfunction init(this: object, initialVal: unknown) {\n\t\t\tinitialValue = initialVal\n\t\t\treturn initialVal\n\t\t}\n\n\t\tcontext.addInitializer(function () {\n\t\t\t// Locate the prototype of this auto accessor.\n\t\t\tconst proto = getPrototypeOfMethodOrAccessor(this as AnyObject, name, newGet)\n\n\t\t\t// If not already deleted to unshadow base class accessor\n\t\t\tif (proto) {\n\t\t\t\t// While not on the current prototype, delete subclass descriptors if they are marked as extending.\n\t\t\t\tlet currentProto: AnyObject = this as AnyObject\n\t\t\t\twhile (currentProto && currentProto !== proto) {\n\t\t\t\t\tconst descriptor = Object.getOwnPropertyDescriptor(currentProto, name)\n\t\t\t\t\tconst fn = descriptor?.get\n\n\t\t\t\t\t// Delete the subclass descriptor to unshadow the base class\n\t\t\t\t\t// descriptor.\n\t\t\t\t\tif (fn && isExtending.has(fn)) delete currentProto[name]\n\n\t\t\t\t\tcurrentProto = currentProto.__proto__ as AnyObject\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tReflect.set(proto ?? (this as AnyObject), name, initialValue, this)\n\t\t})\n\n\t\tfunction newGet(this: object): unknown {\n\t\t\tgetSignal__(this, signalStorage, initialValue)()\n\t\t\treturn get.call(this)\n\t\t}\n\n\t\tif (options.extend) isExtending.add(newGet)\n\n\t\tfunction newSet(this: object, newValue: unknown) {\n\t\t\t// batch, for example in case setter calls super setter, to\n\t\t\t// avoid multiple effect runs on a single property set.\n\t\t\tbatch(() => {\n\t\t\t\tset.call(this, newValue)\n\t\t\t\ttrackPropSetAtLeastOnce__(this, name) // TODO still needed? test it. I think it is still needed for @lume/element.\n\n\t\t\t\tconst s = getSignal__(this, signalStorage, initialValue)\n\t\t\t\ts(typeof newValue === 'function' ? () => newValue : newValue)\n\t\t\t})\n\t\t}\n\n\t\tconst newValue = {init, get: newGet, set: newSet}\n\n\t\tisSignalGetter.add(newValue.get)\n\n\t\treturn newValue\n\t} else if (kind === 'getter' || kind === 'setter') {\n\t\tconst getOrSet = value as Function\n\t\tconst initialValue = Undefined\n\n\t\tif (!Object.hasOwn(metadata, 'classySolid_getterSetterSignals')) metadata.classySolid_getterSetterSignals = {}\n\t\tconst signalsStorages = metadata.classySolid_getterSetterSignals!\n\n\t\tlet signalStorage = signalsStorages[name]\n\t\tif (!signalStorage) signalsStorages[name] = signalStorage = new WeakMap>()\n\n\t\tif (!Object.hasOwn(metadata, 'classySolid_getterSetterPairCounts')) metadata.classySolid_getterSetterPairCounts = {}\n\t\tconst pairs = metadata.classySolid_getterSetterPairCounts!\n\n\t\t// Show a helpful error in case someone forgets to decorate both a getter and setter.\n\t\tqueueMicrotask(() => {\n\t\t\tqueueMicrotask(() => delete metadata.classySolid_getterSetterPairCounts)\n\t\t\tconst missing = pairs[name] !== 2\n\t\t\tif (missing) throw new MissingSignalDecoratorError(name)\n\t\t})\n\n\t\tif (kind === 'getter') {\n\t\t\tpairs[name] ??= 0\n\t\t\tpairs[name]++\n\n\t\t\tconst newGetter = function (this: object): unknown {\n\t\t\t\tgetSignal__(this, signalStorage, initialValue)()\n\t\t\t\treturn getOrSet.call(this)\n\t\t\t}\n\n\t\t\tisSignalGetter.add(newGetter)\n\n\t\t\treturn newGetter\n\t\t} else {\n\t\t\tpairs[name] ??= 0\n\t\t\tpairs[name]++\n\n\t\t\tconst newSetter = function (this: object, newValue: unknown) {\n\t\t\t\t// batch, for example in case setter calls super setter, to\n\t\t\t\t// avoid multiple effect runs on a single property set.\n\t\t\t\tbatch(() => {\n\t\t\t\t\tgetOrSet.call(this, newValue)\n\t\t\t\t\ttrackPropSetAtLeastOnce__(this, name)\n\n\t\t\t\t\tconst s = getSignal__(this, signalStorage, initialValue)\n\t\t\t\t\ts(typeof newValue === 'function' ? () => newValue : newValue)\n\t\t\t\t})\n\t\t\t}\n\n\t\t\treturn newSetter\n\t\t}\n\t}\n}\n\nclass MissingSignalDecoratorError extends Error {\n\tconstructor(prop: PropertyKey) {\n\t\tsuper(\n\t\t\t`Missing @signal decorator on setter or getter for property \"${String(\n\t\t\t\tprop,\n\t\t\t)}\". The @signal decorator will only work on a getter/setter pair with *both* getter and setter decorated with @signal.`,\n\t\t)\n\t}\n}\n\nclass InvalidSignalDecoratorError extends Error {\n\tconstructor() {\n\t\tsuper('The @signal decorator is only for use on fields, getters, setters, and auto accessors.')\n\t}\n}\n\n// TODO move this to lowclass\nfunction getPrototypeOfMethodOrAccessor(obj: AnyObject, name: PropKey, fn: Function): AnyObject | null {\n\tlet proto = Object.getPrototypeOf(obj)\n\twhile (proto) {\n\t\tconst descriptor = Object.getOwnPropertyDescriptor(proto, name)\n\t\tif (descriptor && (descriptor.get === fn || descriptor.set === fn || descriptor.value === fn)) return proto\n\t\tproto = Object.getPrototypeOf(proto)\n\t}\n\treturn null\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file +{"version":3,"file":"signal.js","names":["batch","getSignal__","trackPropSetAtLeastOnce__","isSignalGetter__","getMemberStat__","finalizeMembersIfLast__","getMembers__","signalifyIfNeeded__","Undefined","Symbol","isExtending","WeakSet","signal","valueOrOptions","context","signalImplementation","options","value","extend","static","Error","kind","name","metadata","members","InvalidSignalDecoratorError","private","stat","finalize","addInitializer","reuseExistingSignal","newInitialValue","Object","defineProperty","existingSignalDescriptor","initialVal","descriptor","getOwnPropertyDescriptor","has","get","set","signalStorage","WeakMap","initialValue","init","proto","getPrototypeOfMethodOrAccessor","newGet","currentProto","fn","__proto__","Reflect","call","add","newSet","newValue","s","getOrSet","hasOwn","classySolid_getterSetterSignals","signalsStorages","classySolid_getterSetterPairCounts","pairs","queueMicrotask","missing","MissingSignalDecoratorError","newGetter","newSetter","constructor","prop","String","obj","getPrototypeOf"],"sources":["../../src/decorators/signal.ts"],"sourcesContent":["import {batch} from 'solid-js'\nimport {getSignal__, trackPropSetAtLeastOnce__} from '../signals/signalify.js'\nimport type {AnyObject, ClassySolidMetadata, PropKey} from './types.js'\nimport type {SignalFunction} from '../signals/createSignalFunction.js'\nimport {\n\tisSignalGetter__,\n\tgetMemberStat__,\n\tfinalizeMembersIfLast__,\n\tgetMembers__,\n\tsignalifyIfNeeded__,\n} from '../_state.js'\nimport './metadata-shim.js'\n\nconst Undefined = Symbol()\nconst isExtending = new WeakSet()\n\nexport interface SignalOptions {\n\t/**\n\t * Whether to extend an existing base class signal instead of creating a new\n\t * one. When true, the existing signal is reused, otherwise a new signal\n\t * overrides the existing one from the base class.\n\t *\n\t * Defaults to true, as typically we want base class effects and memos to\n\t * keep working when a subclass overrides a signal property.\n\t */\n\textend?: boolean\n}\n\n/**\n * @decorator\n * Decorate properties of a class with `@signal` to back them with Solid\n * signals, making them reactive.\n *\n * Related: See the Solid.js `createSignal` API for creating standalone signals.\n *\n * Example:\n *\n * ```js\n * import {signal} from 'classy-solid'\n * import {createEffect} from 'solid-js'\n *\n * class Counter {\n * ⁣@signal count = 0\n *\n * constructor() {\n * setInterval(() => this.count++, 1000)\n *\n * createEffect(() => {\n * console.log('count:', this.count)\n * })\n * }\n * }\n *\n * const counter = new Counter()\n *\n * // When extending a class with a signal field, the subclass can override\n * // the initial value while keeping base class effects and memos working:\n * class SubCounter extends Counter {\n * ⁣@signal override count = 10 // starts at 10 instead of 0\n * }\n * ```\n */\nexport function signal(\n\tvalue: unknown,\n\tcontext:\n\t\t| ClassFieldDecoratorContext\n\t\t| ClassGetterDecoratorContext\n\t\t| ClassSetterDecoratorContext\n\t\t| ClassAccessorDecoratorContext,\n): any\nexport function signal(options: SignalOptions): typeof signalImplementation\nexport function signal(\n\tvalueOrOptions: unknown | SignalOptions,\n\tcontext?:\n\t\t| ClassFieldDecoratorContext\n\t\t| ClassGetterDecoratorContext\n\t\t| ClassSetterDecoratorContext\n\t\t| ClassAccessorDecoratorContext,\n): any {\n\t// Used as `@signal` without options\n\tif (context) return signalImplementation(valueOrOptions, context)\n\n\t// Used as `@signal({...})` with options\n\n\tconst options = valueOrOptions as SignalOptions\n\n\treturn function (\n\t\tvalue: unknown,\n\t\tcontext:\n\t\t\t| ClassFieldDecoratorContext\n\t\t\t| ClassGetterDecoratorContext\n\t\t\t| ClassSetterDecoratorContext\n\t\t\t| ClassAccessorDecoratorContext,\n\t) {\n\t\treturn signalImplementation(value, context, options)\n\t}\n}\n\nfunction signalImplementation(\n\tvalue: unknown,\n\tcontext:\n\t\t| ClassFieldDecoratorContext\n\t\t| ClassGetterDecoratorContext\n\t\t| ClassSetterDecoratorContext\n\t\t| ClassAccessorDecoratorContext,\n\toptions: SignalOptions = {extend: true},\n): any {\n\tif (context.static) throw new Error('@signal is not supported on static fields yet.')\n\n\toptions.extend ??= true\n\n\tconst {kind, name} = context\n\tconst metadata = context.metadata as ClassySolidMetadata\n\tconst members = getMembers__(metadata)\n\n\tif (!(kind === 'field' || kind === 'accessor' || kind === 'getter' || kind === 'setter'))\n\t\tthrow new InvalidSignalDecoratorError()\n\n\tif (kind === 'field') {\n\t\tif (context.private)\n\t\t\tthrow new Error(\n\t\t\t\t'@signal cannot signalify #private fields. Use a #private getter/setter or auto accessor instead. F.e. convert `@signal #foo = 0` to `@signal accessor #foo = 0`.',\n\t\t\t)\n\n\t\tconst stat = getMemberStat__(name, 'signal-field', members, context)\n\n\t\tstat.finalize = function () {\n\t\t\tsignalifyIfNeeded__(this as AnyObject, stat)\n\t\t}\n\n\t\tcontext.addInitializer(function () {\n\t\t\tif (stat.reuseExistingSignal) {\n\t\t\t\t// Delete the value descriptor, put back the signal descriptor,\n\t\t\t\t// and set the new initial value.\n\t\t\t\tstat.newInitialValue = (this as AnyObject)[name]\n\t\t\t\tdelete (this as AnyObject)[name]\n\t\t\t\tObject.defineProperty(this as AnyObject, name, stat.existingSignalDescriptor!)\n\t\t\t\t;(this as AnyObject)[name] = stat.newInitialValue\n\t\t\t}\n\t\t\tfinalizeMembersIfLast__(this as AnyObject, members)\n\t\t})\n\n\t\treturn function (this: unknown, initialVal: unknown) {\n\t\t\t// Detect if we already have a signal for this instance, and if so\n\t\t\t// re-use it. This allows base class effects to stay operational\n\t\t\t// instead of a new signal being created that the base class effect\n\t\t\t// won't track.\n\t\t\tconst descriptor = Object.getOwnPropertyDescriptor(this as AnyObject, name)\n\n\t\t\t// If we already have a signal descriptor, we will re-use it, so\n\t\t\t// that any effects depending on it will continue to work.\n\t\t\tif (isSignalGetter__.has(descriptor?.get!)) {\n\t\t\t\tstat.reuseExistingSignal = true\n\t\t\t\tstat.newInitialValue = initialVal\n\t\t\t\tstat.existingSignalDescriptor = descriptor\n\t\t\t}\n\n\t\t\t// The engine will define the property with this value in a value\n\t\t\t// descriptor, which we need to convert to a signal accessor\n\t\t\t// descriptor again (or for first time).\n\t\t\treturn initialVal\n\t\t}\n\t}\n\n\t// It's ok that getters/setters/auto-accessors are not finalized the same\n\t// way as with fields above and as with memos/effects, because we do the set\n\t// up during decoration which happens well before any initializers (before\n\t// any memos and effects, so these will be tracked).\n\telse if (kind === 'accessor') {\n\t\tconst {get, set} = value as {get: () => unknown; set: (v: unknown) => void}\n\t\tconst signalStorage = new WeakMap>()\n\t\tlet initialValue: unknown = Undefined\n\n\t\tconst init = (initialVal: unknown) => (initialValue = initialVal)\n\n\t\tcontext.addInitializer(function () {\n\t\t\t// Locate the prototype of this auto accessor.\n\t\t\tconst proto = getPrototypeOfMethodOrAccessor(this as AnyObject, name, newGet)\n\n\t\t\t// If not already deleted to unshadow base class accessor\n\t\t\tif (proto) {\n\t\t\t\t// While not on the current prototype, delete subclass descriptors if they are marked as extending.\n\t\t\t\tlet currentProto: AnyObject = this as AnyObject\n\t\t\t\twhile (currentProto && currentProto !== proto) {\n\t\t\t\t\tconst descriptor = Object.getOwnPropertyDescriptor(currentProto, name)\n\t\t\t\t\tconst fn = descriptor?.get\n\n\t\t\t\t\t// Delete the subclass descriptor to unshadow the base class\n\t\t\t\t\t// descriptor.\n\t\t\t\t\tif (fn && isExtending.has(fn)) delete currentProto[name]\n\n\t\t\t\t\tcurrentProto = currentProto.__proto__ as AnyObject\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tReflect.set(proto ?? (this as AnyObject), name, initialValue, this)\n\t\t})\n\n\t\tfunction newGet(this: object): unknown {\n\t\t\tgetSignal__(this, signalStorage, initialValue)()\n\t\t\treturn get.call(this)\n\t\t}\n\n\t\tif (options.extend) isExtending.add(newGet)\n\n\t\tfunction newSet(this: object, newValue: unknown) {\n\t\t\t// batch, for example in case setter calls super setter, to\n\t\t\t// avoid multiple effect runs on a single property set.\n\t\t\tbatch(() => {\n\t\t\t\tset.call(this, newValue)\n\t\t\t\ttrackPropSetAtLeastOnce__(this, name) // TODO still needed? test it. I think it is still needed for @lume/element.\n\n\t\t\t\tconst s = getSignal__(this, signalStorage, initialValue)\n\t\t\t\ts(typeof newValue === 'function' ? () => newValue : newValue)\n\t\t\t})\n\t\t}\n\n\t\tconst newValue = {init, get: newGet, set: newSet}\n\n\t\tisSignalGetter__.add(newValue.get)\n\n\t\treturn newValue\n\t} else if (kind === 'getter' || kind === 'setter') {\n\t\tconst getOrSet = value as Function\n\t\tconst initialValue = Undefined\n\n\t\tif (!Object.hasOwn(metadata, 'classySolid_getterSetterSignals')) metadata.classySolid_getterSetterSignals = {}\n\t\tconst signalsStorages = metadata.classySolid_getterSetterSignals!\n\n\t\tlet signalStorage = signalsStorages[name]\n\t\tif (!signalStorage) signalsStorages[name] = signalStorage = new WeakMap>()\n\n\t\tif (!Object.hasOwn(metadata, 'classySolid_getterSetterPairCounts')) metadata.classySolid_getterSetterPairCounts = {}\n\t\tconst pairs = metadata.classySolid_getterSetterPairCounts!\n\n\t\t// Show a helpful error in case someone forgets to decorate both a getter and setter.\n\t\tqueueMicrotask(() => {\n\t\t\tqueueMicrotask(() => delete metadata.classySolid_getterSetterPairCounts)\n\t\t\tconst missing = pairs[name] !== 2\n\t\t\tif (missing) throw new MissingSignalDecoratorError(name)\n\t\t})\n\n\t\tif (kind === 'getter') {\n\t\t\tpairs[name] ??= 0\n\t\t\tpairs[name]++\n\n\t\t\tconst newGetter = function (this: object): unknown {\n\t\t\t\tgetSignal__(this, signalStorage, initialValue)()\n\t\t\t\treturn getOrSet.call(this)\n\t\t\t}\n\n\t\t\tisSignalGetter__.add(newGetter)\n\n\t\t\treturn newGetter\n\t\t} else {\n\t\t\tpairs[name] ??= 0\n\t\t\tpairs[name]++\n\n\t\t\tconst newSetter = function (this: object, newValue: unknown) {\n\t\t\t\t// batch, for example in case setter calls super setter, to\n\t\t\t\t// avoid multiple effect runs on a single property set.\n\t\t\t\tbatch(() => {\n\t\t\t\t\tgetOrSet.call(this, newValue)\n\t\t\t\t\ttrackPropSetAtLeastOnce__(this, name)\n\n\t\t\t\t\tconst s = getSignal__(this, signalStorage, initialValue)\n\t\t\t\t\ts(typeof newValue === 'function' ? () => newValue : newValue)\n\t\t\t\t})\n\t\t\t}\n\n\t\t\treturn newSetter\n\t\t}\n\t}\n}\n\nclass MissingSignalDecoratorError extends Error {\n\tconstructor(prop: PropertyKey) {\n\t\tsuper(\n\t\t\t`Missing @signal decorator on setter or getter for property \"${String(\n\t\t\t\tprop,\n\t\t\t)}\". The @signal decorator will only work on a getter/setter pair with *both* getter and setter decorated with @signal.`,\n\t\t)\n\t}\n}\n\nclass InvalidSignalDecoratorError extends Error {\n\tconstructor() {\n\t\tsuper('The @signal decorator is only for use on fields, getters, setters, and auto accessors.')\n\t}\n}\n\n// TODO move this to lowclass\nfunction getPrototypeOfMethodOrAccessor(obj: AnyObject, name: PropKey, fn: Function): AnyObject | null {\n\tlet proto = Object.getPrototypeOf(obj)\n\twhile (proto) {\n\t\tconst descriptor = Object.getOwnPropertyDescriptor(proto, name)\n\t\tif (descriptor && (descriptor.get === fn || descriptor.set === fn || descriptor.value === fn)) return proto\n\t\tproto = Object.getPrototypeOf(proto)\n\t}\n\treturn null\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/dist/decorators/signal.test.js b/dist/decorators/signal.test.js index 15b9667..740e3cb 100644 --- a/dist/decorators/signal.test.js +++ b/dist/decorators/signal.test.js @@ -8,7 +8,7 @@ import { createMutable } from 'solid-js/store'; import { testButterflyProps } from '../index.test.js'; import { signal } from './signal.js'; import { signalify } from '../signals/signalify.js'; -import { isSignalGetter } from '../_state.js'; +import { isSignalGetter__ } from '../_state.js'; import { memo } from './memo.js'; describe('classy-solid', () => { describe('@signal decorator', () => { @@ -388,7 +388,7 @@ describe('classy-solid', () => { // implementation goes). const descriptor = Object.getOwnPropertyDescriptor(kid, 'age'); const getter = descriptor.get; - expect(isSignalGetter.has(getter)).toBe(false); + expect(isSignalGetter__.has(getter)).toBe(false); let count = 0; createEffect(() => { count++; diff --git a/dist/decorators/signal.test.js.map b/dist/decorators/signal.test.js.map index a8a3a5c..048294c 100644 --- a/dist/decorators/signal.test.js.map +++ b/dist/decorators/signal.test.js.map @@ -1 +1 @@ -{"version":3,"file":"signal.test.js","names":["$PROXY","createEffect","createMutable","testButterflyProps","signal","signalify","isSignalGetter","memo","describe","_initProto","_init_colors","_init_extra_colors","_init_colors2","_init_extra_colors2","_init_wingSize","_init_extra_wingSize","_initProto2","_init_colors3","_init_extra_colors3","_init_colors4","_init_extra_colors4","_init_wingSize2","_init_extra_wingSize2","_init_colors5","_init_extra_colors5","_init_wingSize3","_init_extra_wingSize3","_init_colors6","_get_colors","_set_colors","_init_extra_colors6","_initProto3","_call_colors","_call_colors2","_initProto4","_initProto5","Butterfly","_applyDecs","e","colors","wingSize","child","constructor","s","it","b","Butterfly2","Butterfly3","Butterfly4","A","v","Butterfly5","Butterfly6","o","_","#colors","getColors","setColors","testPrivate","Butterfly7","_colors","Base","Butterfly8","count","expect","toBe","_init_colors7","_init_extra_colors7","Mid","b0","testProp","Object","getOwnPropertyDescriptor","get","call","SubButterfly","args","m","value","SubSubButterfly","b2","k","startVal","newVal","reactive","_initProto6","_init_colors8","_init_extra_colors8","Insect","double","arg","_init_do","_init_extra_do","Doer","do","doer","newFunc","_initProto7","_init_venomous","_init_extra_venomous","_init_legs","_init_extra_legs","venomous","legs","eyes","n","antennas","i","testNoDuplicateSignal","prop","_initProto8","_init_age","_init_extra_age","plain","proxy","Human","metadata","_signal","context","memoRuns","CoolKid","age","ageInDogYears","kid","classySolid_members","find","name","applied","descriptor","getter","has","_init_secret","_init_extra_secret","Secretive","secret","getSecret","setSecret","toThrow","_init_secret2","_get_secret","_set_secret","_init_extra_secret2","#secret","_initProto9","_call_secret","_call_secret2","secret_","_init_val","_init_extra_val","_init_val2","_init_extra_val2","val","Sub","_init_n","_init_extra_n","_init_n2","_init_extra_n2","_initProto0","_initProto1","last","_initProto10","_initProto11","_initProto12","runs","_val","_initProto13","_initProto14","x","y","_init_val3","_init_extra_val3","_init_val4","_init_extra_val4","effectRuns","_init_val5","_init_extra_val5","_init_val6","_init_extra_val6","someDeco","_context","initialVal","_init_val7","_init_extra_val7","_init_val8","_init_extra_val8","_initProto15","_initProto16","__foo","_init_val9","_init_extra_val9","InvalidStatic","_initProto17","InvalidMethod","method","run","_init_dupe","_init_extra_dupe","_init_dupe2","_init_extra_dupe2","SuperDuper","dupe"],"sources":["../../src/decorators/signal.test.ts"],"sourcesContent":["import {$PROXY, createEffect} from 'solid-js'\nimport {createMutable} from 'solid-js/store'\nimport {testButterflyProps} from '../index.test.js'\nimport {signal} from './signal.js'\nimport {signalify} from '../signals/signalify.js'\nimport type {ClassySolidMetadata} from './types.js'\nimport {isSignalGetter} from '../_state.js'\nimport {memo} from './memo.js'\n\ndescribe('classy-solid', () => {\n\tdescribe('@signal decorator', () => {\n\t\tclass Butterfly {\n\t\t\t@signal colors = 3\n\n\t\t\t#wingSize = 2\n\n\t\t\t// Stick this here to ensure that nested constructor doesn't\n\t\t\t// interfere with decorator behavior mid-way through initialization\n\t\t\t// of the wrapper parent class (tested with a subclass)\n\t\t\tchild: Butterfly | null = this.constructor !== Butterfly ? new Butterfly() : null\n\n\t\t\t@signal get wingSize() {\n\t\t\t\treturn this.#wingSize\n\t\t\t}\n\t\t\t@signal set wingSize(s: number) {\n\t\t\t\tthis.#wingSize = s\n\t\t\t}\n\t\t}\n\n\t\tit('makes class fields reactive, using class and field/getter/setter decorators', () => {\n\t\t\tconst b = new Butterfly()\n\n\t\t\ttestButterflyProps(b)\n\t\t})\n\n\t\tclass Butterfly2 {\n\t\t\t@signal colors = 3\n\t\t\t@signal wingSize = 2\n\t\t}\n\n\t\tit('makes class fields reactive, using field decorators without class decorator', () => {\n\t\t\tconst b = new Butterfly2()\n\n\t\t\ttestButterflyProps(b)\n\t\t})\n\n\t\tclass Butterfly3 {\n\t\t\t@signal colors = 3\n\n\t\t\t#wingSize = 2\n\n\t\t\t@signal get wingSize() {\n\t\t\t\treturn this.#wingSize\n\t\t\t}\n\t\t\t@signal set wingSize(s: number) {\n\t\t\t\tthis.#wingSize = s\n\t\t\t}\n\t\t}\n\n\t\tit('makes class fields reactive, using field/getter/setter decorators without class decorator', () => {\n\t\t\tconst b = new Butterfly3()\n\n\t\t\ttestButterflyProps(b)\n\t\t})\n\n\t\tclass Butterfly4 {\n\t\t\t@signal colors = 3\n\t\t\t@signal accessor wingSize = 2\n\t\t}\n\n\t\tit('makes class fields reactive, using field/accessor decorators without class decorator', () => {\n\t\t\tconst b = new Butterfly4()\n\n\t\t\ttestButterflyProps(b)\n\t\t})\n\n\t\tclass Butterfly5 {\n\t\t\t@signal colors = 3\n\t\t\t@signal accessor wingSize = 2\n\t\t}\n\n\t\tit('makes class fields reactive, using field/accessor decorators with class decorator', () => {\n\t\t\tconst b = new Butterfly5()\n\n\t\t\ttestButterflyProps(b)\n\t\t})\n\n\t\tclass Butterfly6 {\n\t\t\t@signal accessor #colors = 3\n\n\t\t\tgetColors() {\n\t\t\t\treturn this.#colors\n\t\t\t}\n\t\t\tsetColors(v: number) {\n\t\t\t\treturn (this.#colors = v)\n\t\t\t}\n\t\t}\n\n\t\tit('makes private class auto accessor reactive', () => {\n\t\t\tconst b = new Butterfly6()\n\t\t\ttestPrivate(b)\n\t\t})\n\n\t\tclass Butterfly7 {\n\t\t\t#_colors = 3\n\n\t\t\t@signal get #colors() {\n\t\t\t\treturn this.#_colors\n\t\t\t}\n\t\t\t@signal set #colors(v: number) {\n\t\t\t\tthis.#_colors = v\n\t\t\t}\n\n\t\t\tgetColors() {\n\t\t\t\treturn this.#colors\n\t\t\t}\n\t\t\tsetColors(v: number) {\n\t\t\t\treturn (this.#colors = v)\n\t\t\t}\n\t\t}\n\n\t\tit('makes private class getter/setter accessors reactive', () => {\n\t\t\tconst b = new Butterfly7()\n\t\t\ttestPrivate(b)\n\t\t})\n\n\t\tclass Base {\n\t\t\t#colors = 3\n\n\t\t\t@signal get colors() {\n\t\t\t\treturn this.#colors\n\t\t\t}\n\t\t\t@signal set colors(v: number) {\n\t\t\t\tthis.#colors = v\n\t\t\t}\n\t\t}\n\n\t\tclass Butterfly8 extends Base {\n\t\t\t#colors = 3\n\n\t\t\t@signal override get colors() {\n\t\t\t\treturn this.#colors\n\t\t\t}\n\t\t\t@signal override set colors(v: number) {\n\t\t\t\tthis.#colors = v\n\t\t\t}\n\n\t\t\tgetColors() {\n\t\t\t\treturn this.colors\n\t\t\t}\n\t\t\tsetColors(v: number) {\n\t\t\t\treturn (this.colors = v)\n\t\t\t}\n\t\t}\n\n\t\tit('makes overridden class getter/setter accessors reactive', () => {\n\t\t\tconst b = new Butterfly8()\n\t\t\ttestPrivate(b)\n\t\t})\n\n\t\tfunction testPrivate(b: Pick) {\n\t\t\tlet count = 0\n\n\t\t\tcreateEffect(() => {\n\t\t\t\tb.getColors()\n\t\t\t\tcount++\n\t\t\t})\n\n\t\t\texpect(b.getColors()).toBe(3)\n\t\t\texpect(count).toBe(1)\n\n\t\t\tb.setColors(5)\n\t\t\texpect(b.getColors()).toBe(5)\n\t\t\texpect(count).toBe(2)\n\t\t}\n\n\t\tit('allows overridden fields to work as expected', async () => {\n\t\t\tclass Mid extends Butterfly {\n\t\t\t\toverride colors = 0\n\t\t\t}\n\n\t\t\t// ensure subclass did not interfere with functionality of base class\n\t\t\tnew Butterfly() // ensure first instantiation doesn't affect later ones\n\t\t\tconst b0 = new Butterfly()\n\t\t\ttestProp(b0, 'colors', 3, 4, true)\n\t\t\texpect(Object.getOwnPropertyDescriptor(b0, 'colors')?.get?.call(b0) === 4).toBe(true) // accessor descriptor\n\n\t\t\tclass SubButterfly extends Mid {\n\t\t\t\t@signal override colors = 123\n\t\t\t}\n\n\t\t\t// ensure subclass did not interfere with functionality of base class\n\t\t\tconst m = new Mid()\n\t\t\ttestProp(m, 'colors', 0, 1, false)\n\t\t\texpect(Object.getOwnPropertyDescriptor(m, 'colors')?.value === 1).toBe(true) // value descriptor\n\n\t\t\tclass SubSubButterfly extends SubButterfly {\n\t\t\t\toverride colors = 456\n\t\t\t}\n\n\t\t\tconst b = new SubButterfly()\n\t\t\ttestButterflyProps(b, 123)\n\n\t\t\tconst b2 = new SubSubButterfly()\n\n\t\t\ttestProp(b2, 'colors', 456, 654, false)\n\t\t})\n\n\t\tfunction testProp(o: T, k: keyof T, startVal: any, newVal: any, reactive = true) {\n\t\t\tlet count = 0\n\n\t\t\tcreateEffect(() => {\n\t\t\t\to[k]\n\t\t\t\tcount++\n\t\t\t})\n\n\t\t\texpect(o[k]).toBe(startVal)\n\t\t\texpect(count).toBe(1)\n\n\t\t\to[k] = newVal // should not be a signal, should not trigger\n\n\t\t\texpect(o[k]).toBe(newVal)\n\t\t\texpect(count).toBe(reactive ? 2 : 1)\n\t\t}\n\n\t\tit('does not prevent superclass constructor from receiving subclass constructor args', () => {\n\t\t\tclass Insect {\n\t\t\t\tconstructor(public double: number) {}\n\t\t\t}\n\n\t\t\tclass Butterfly extends Insect {\n\t\t\t\t@signal colors = 3\n\n\t\t\t\t#wingSize = 2\n\n\t\t\t\t@signal get wingSize() {\n\t\t\t\t\treturn this.#wingSize\n\t\t\t\t}\n\t\t\t\t@signal set wingSize(s: number) {\n\t\t\t\t\tthis.#wingSize = s\n\t\t\t\t}\n\n\t\t\t\tconstructor(arg: number) {\n\t\t\t\t\tsuper(arg * 2)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst b = new Butterfly(4)\n\n\t\t\texpect(b.double).toBe(8)\n\t\t\ttestButterflyProps(b)\n\t\t})\n\n\t\tit('works with function values', () => {\n\t\t\t// This test ensures that functions are handled propertly, because\n\t\t\t// if passed without being wrapped to a signal setter it will be\n\t\t\t// called immediately with the previous value and be expected to\n\t\t\t// return a new value, instead of being set as the actual new value.\n\n\t\t\tclass Doer {\n\t\t\t\t@signal do: (() => unknown) | null = null\n\t\t\t}\n\n\t\t\tconst doer = new Doer()\n\n\t\t\texpect(doer.do).toBe(null)\n\n\t\t\tconst newFunc = () => 123\n\t\t\tdoer.do = newFunc\n\n\t\t\texpect(doer.do).toBe(newFunc)\n\t\t\texpect(doer.do()).toBe(123)\n\t\t})\n\n\t\tit('prevents duplicate signals for any property', () => {\n\t\t\tclass Insect {\n\t\t\t\t@signal venomous = 0\n\n\t\t\t\t@signal accessor legs = 6\n\n\t\t\t\t#eyes = 10\n\t\t\t\t@signal get eyes() {\n\t\t\t\t\treturn this.#eyes\n\t\t\t\t}\n\t\t\t\t@signal set eyes(n) {\n\t\t\t\t\tthis.#eyes = n\n\t\t\t\t}\n\n\t\t\t\tantennas = 0\n\n\t\t\t\tconstructor() {\n\t\t\t\t\t// This should not add any extra signals for properties that\n\t\t\t\t\t// are already signalified by the @signal decorator\n\t\t\t\t\tsignalify(this, 'venomous', 'legs', 'eyes', 'antennas')\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst i = new Insect()\n\n\t\t\ttestNoDuplicateSignal(i, 'venomous')\n\t\t\ttestNoDuplicateSignal(i, 'legs')\n\t\t\ttestNoDuplicateSignal(i, 'eyes')\n\t\t\ttestNoDuplicateSignal(i, 'antennas')\n\n\t\t\tfunction testNoDuplicateSignal(o: Insect, prop: keyof Insect) {\n\t\t\t\tlet count = 0\n\t\t\t\tcreateEffect(() => {\n\t\t\t\t\tcount++\n\t\t\t\t\to[prop]\n\t\t\t\t})\n\t\t\t\texpect(count).toBe(1)\n\t\t\t\to[prop]++\n\t\t\t\texpect(count).toBe(2) // it would be 3 if there were an extra signal\n\t\t\t}\n\t\t})\n\n\t\tit('no-ops with Solid proxies to avoid an unnecessary extra signal', () => {\n\t\t\tlet plain!: Human\n\t\t\tlet proxy!: Human\n\n\t\t\tclass Human {\n\t\t\t\tconstructor() {\n\t\t\t\t\tplain = this\n\t\t\t\t\treturn (proxy = createMutable(this))\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet metadata!: ClassySolidMetadata\n\n\t\t\tconst _signal = (_: unknown, context: ClassFieldDecoratorContext) => {\n\t\t\t\tmetadata = context.metadata as ClassySolidMetadata\n\t\t\t\treturn signal(_, context)\n\t\t\t}\n\n\t\t\tlet memoRuns = 0\n\n\t\t\tclass CoolKid extends Human {\n\t\t\t\t@_signal age = 3\n\n\t\t\t\t@memo get ageInDogYears() {\n\t\t\t\t\tmemoRuns++\n\t\t\t\t\treturn this.age * 7\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst kid = new CoolKid()\n\n\t\t\t// Verify we got a Solid Proxy.\n\t\t\texpect(plain === proxy).toBe(false)\n\t\t\texpect((plain as any)[$PROXY] === proxy).toBe(true)\n\n\t\t\texpect(metadata.classySolid_members!.find(m => m.name === 'age')!.applied.get(kid)).toBe(true)\n\n\t\t\t// Verify it there is not our own signal getter applied (it may be\n\t\t\t// the Solid Proxy's, or none, depending on how the Solid Proxy\n\t\t\t// implementation goes).\n\t\t\tconst descriptor = Object.getOwnPropertyDescriptor(kid, 'age')\n\t\t\tconst getter = descriptor!.get!\n\t\t\texpect(isSignalGetter.has(getter)).toBe(false)\n\n\t\t\tlet count = 0\n\t\t\tcreateEffect(() => {\n\t\t\t\tcount++\n\t\t\t\tkid.age\n\t\t\t})\n\n\t\t\texpect(count).toBe(1)\n\t\t\texpect(kid.age).toBe(3)\n\t\t\t// check that @memo still works with the Proxy\n\t\t\texpect(memoRuns).toBe(1)\n\t\t\texpect(kid.ageInDogYears).toBe(21)\n\n\t\t\tkid.age = 4\n\n\t\t\texpect(count).toBe(2)\n\t\t\texpect(kid.age).toBe(4)\n\t\t\t// check that @memo still works with the Proxy\n\t\t\texpect(memoRuns).toBe(2)\n\t\t\texpect(kid.ageInDogYears).toBe(28)\n\t\t})\n\n\t\tit('cannot support private fields', () => {\n\t\t\texpect(() => {\n\t\t\t\tclass Secretive {\n\t\t\t\t\t@signal #secret = 42\n\n\t\t\t\t\tgetSecret() {\n\t\t\t\t\t\treturn this.#secret\n\t\t\t\t\t}\n\n\t\t\t\t\tsetSecret(v: number) {\n\t\t\t\t\t\tthis.#secret = v\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tSecretive\n\t\t\t}).toThrow(\n\t\t\t\t'@signal cannot signalify #private fields. Use a #private getter/setter or auto accessor instead. F.e. convert `@signal #foo = 0` to `@signal accessor #foo = 0`.',\n\t\t\t)\n\t\t})\n\n\t\tit('supports private auto accessors', () => {\n\t\t\tclass Secretive {\n\t\t\t\t@signal accessor #secret = 42\n\n\t\t\t\tgetSecret() {\n\t\t\t\t\treturn this.#secret\n\t\t\t\t}\n\n\t\t\t\tsetSecret(v: number) {\n\t\t\t\t\tthis.#secret = v\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst s = new Secretive()\n\n\t\t\tlet count = 0\n\t\t\tcreateEffect(() => {\n\t\t\t\tcount++\n\t\t\t\ts.getSecret()\n\t\t\t})\n\n\t\t\texpect(s.getSecret()).toBe(42)\n\t\t\texpect(count).toBe(1)\n\n\t\t\ts.setSecret(100)\n\t\t\texpect(s.getSecret()).toBe(100)\n\t\t\texpect(count).toBe(2)\n\t\t})\n\n\t\tit('supports private getter/setters', () => {\n\t\t\tclass Secretive {\n\t\t\t\t#secret_ = 42\n\n\t\t\t\t@signal get #secret() {\n\t\t\t\t\treturn this.#secret_\n\t\t\t\t}\n\t\t\t\t@signal set #secret(v: number) {\n\t\t\t\t\tthis.#secret_ = v\n\t\t\t\t}\n\n\t\t\t\tgetSecret() {\n\t\t\t\t\treturn this.#secret\n\t\t\t\t}\n\n\t\t\t\tsetSecret(v: number) {\n\t\t\t\t\tthis.#secret = v\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst s = new Secretive()\n\n\t\t\tlet count = 0\n\t\t\tcreateEffect(() => {\n\t\t\t\tcount++\n\t\t\t\ts.getSecret()\n\t\t\t})\n\n\t\t\texpect(s.getSecret()).toBe(42)\n\t\t\texpect(count).toBe(1)\n\n\t\t\ts.setSecret(100)\n\t\t\texpect(s.getSecret()).toBe(100)\n\t\t\texpect(count).toBe(2)\n\t\t})\n\n\t\tdescribe('subclass signal overriding/extending', () => {\n\t\t\tit('supports subclass signal field extending base signal field', () => {\n\t\t\t\tclass Base {\n\t\t\t\t\t@signal val = 1\n\t\t\t\t}\n\n\t\t\t\tclass Sub extends Base {\n\t\t\t\t\t// @ts-ignore this is valid in plain JS, TS complains about using field before initialization\n\t\t\t\t\t@signal override val = this.val + 1 // override field with initial value from base class\n\t\t\t\t}\n\n\t\t\t\tconst s = new Sub()\n\t\t\t\tlet count = 0\n\t\t\t\tlet val = 0\n\t\t\t\tcreateEffect(() => {\n\t\t\t\t\tcount++\n\t\t\t\t\tval = s.val\n\t\t\t\t})\n\n\t\t\t\texpect(val).toBe(2)\n\t\t\t\texpect(count).toBe(1)\n\n\t\t\t\ts.val = 5\n\t\t\t\texpect(val).toBe(5)\n\t\t\t\texpect(count).toBe(2)\n\t\t\t})\n\n\t\t\tit('supports subclass signal auto accessor extending base signal auto accessor with super', () => {\n\t\t\t\tclass Base {\n\t\t\t\t\t@signal accessor n = 1\n\t\t\t\t}\n\n\t\t\t\tclass Sub extends Base {\n\t\t\t\t\t@signal override accessor n = super.n + 1 // initialize with initial super value\n\t\t\t\t}\n\n\t\t\t\tconst s = new Sub()\n\t\t\t\tlet count = 0\n\t\t\t\tcreateEffect(() => {\n\t\t\t\t\tcount++\n\t\t\t\t\ts.n\n\t\t\t\t})\n\n\t\t\t\texpect(s.n).toBe(2)\n\t\t\t\texpect(count).toBe(1)\n\n\t\t\t\ts.n = 7\n\t\t\t\texpect(s.n).toBe(7)\n\t\t\t\texpect(count).toBe(2)\n\t\t\t})\n\n\t\t\tit('supports subclass signal getter/setter extending base signal getter/setter with super', () => {\n\t\t\t\tclass Base {\n\t\t\t\t\t#n = 1\n\t\t\t\t\t@signal get n() {\n\t\t\t\t\t\treturn this.#n\n\t\t\t\t\t}\n\t\t\t\t\t@signal set n(v: number) {\n\t\t\t\t\t\tthis.#n = v\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclass Sub extends Base {\n\t\t\t\t\t@signal override get n() {\n\t\t\t\t\t\treturn super.n + 1 // extend read\n\t\t\t\t\t}\n\t\t\t\t\t@signal override set n(v: number) {\n\t\t\t\t\t\tsuper.n = v + 1 // extend write\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst s = new Sub()\n\t\t\t\tlet count = 0\n\t\t\t\tlet last = 0\n\t\t\t\tcreateEffect(() => {\n\t\t\t\t\tcount++\n\t\t\t\t\tlast = s.n\n\t\t\t\t})\n\n\t\t\t\texpect(last).toBe(1 + 1)\n\t\t\t\texpect(count).toBe(1)\n\n\t\t\t\ts.n = 10\n\t\t\t\texpect(last).toBe(10 + 1 + 1)\n\t\t\t\texpect(count).toBe(2)\n\t\t\t})\n\n\t\t\tit('supports multi-level signal getter/setter extension with super', () => {\n\t\t\t\tlet runs = 0\n\t\t\t\tclass Base {\n\t\t\t\t\t_val = 1\n\t\t\t\t\t@signal get val() {\n\t\t\t\t\t\treturn this._val\n\t\t\t\t\t}\n\t\t\t\t\t@signal set val(v) {\n\t\t\t\t\t\tthis._val = v\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tclass Mid extends Base {\n\t\t\t\t\t@signal override get val() {\n\t\t\t\t\t\treturn super.val + 10\n\t\t\t\t\t}\n\t\t\t\t\t@signal override set val(v) {\n\t\t\t\t\t\tsuper.val = v - 10\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tclass Sub extends Mid {\n\t\t\t\t\t@signal override get val() {\n\t\t\t\t\t\treturn super.val + 100\n\t\t\t\t\t}\n\t\t\t\t\t@signal override set val(v) {\n\t\t\t\t\t\tsuper.val = v - 100\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst o = new Sub()\n\n\t\t\t\tcreateEffect(() => {\n\t\t\t\t\truns++\n\t\t\t\t\to.val\n\t\t\t\t})\n\n\t\t\t\texpect(o._val).toBe(1)\n\t\t\t\texpect(o.val).toBe(1 + 10 + 100)\n\t\t\t\texpect(runs).toBe(1)\n\n\t\t\t\to.val = 200\n\t\t\t\texpect(runs).toBe(2)\n\t\t\t\texpect(o._val).toBe(200 - 100 - 10)\n\t\t\t\texpect(o.val).toBe(90 + 10 + 100)\n\t\t\t})\n\n\t\t\tit('supports subclass signal getter/setter overriding base signal getter/setter without super', () => {\n\t\t\t\tclass Base {\n\t\t\t\t\t#v = 1\n\t\t\t\t\t@signal get v() {\n\t\t\t\t\t\treturn this.#v\n\t\t\t\t\t}\n\t\t\t\t\t@signal set v(x: number) {\n\t\t\t\t\t\tthis.#v = x\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclass Sub extends Base {\n\t\t\t\t\t#y = 100\n\t\t\t\t\t@signal override get v() {\n\t\t\t\t\t\treturn this.#y\n\t\t\t\t\t}\n\t\t\t\t\t@signal override set v(x: number) {\n\t\t\t\t\t\tthis.#y = x\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst s = new Sub()\n\t\t\t\tlet count = 0\n\t\t\t\tcreateEffect(() => {\n\t\t\t\t\ts.v\n\t\t\t\t\tcount++\n\t\t\t\t})\n\n\t\t\t\texpect(s.v).toBe(100)\n\t\t\t\texpect(count).toBe(1)\n\n\t\t\t\ts.v = 50\n\t\t\t\texpect(s.v).toBe(50)\n\t\t\t\texpect(count).toBe(2)\n\t\t\t})\n\n\t\t\tit('keeps base class effects operational when subclass overrides signal field', () => {\n\t\t\t\tlet effectRuns = 0\n\t\t\t\tlet val = 0\n\n\t\t\t\tclass Base {\n\t\t\t\t\t@signal val = 1\n\n\t\t\t\t\tconstructor() {\n\t\t\t\t\t\tcreateEffect(() => {\n\t\t\t\t\t\t\teffectRuns++\n\t\t\t\t\t\t\tval = this.val\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\texpect(val).toBe(1)\n\t\t\t\t\t\texpect(effectRuns).toBe(1)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclass Sub extends Base {\n\t\t\t\t\t@signal override val = 10\n\t\t\t\t}\n\n\t\t\t\tconst s = new Sub()\n\n\t\t\t\texpect(val).toBe(10)\n\t\t\t\t// 2 because the subclass signal override sets the original\n\t\t\t\t// signal and triggers the base class effect again, otherwise\n\t\t\t\t// the effect would be out of sync with the latest value.\n\t\t\t\texpect(effectRuns).toBe(2)\n\n\t\t\t\ts.val = 20\n\t\t\t\texpect(val).toBe(20)\n\t\t\t\texpect(effectRuns).toBe(3)\n\t\t\t})\n\n\t\t\tit('keeps base class effects operational when subclass overrides signal field, with intermediate decorator', () => {\n\t\t\t\tlet effectRuns = 0\n\t\t\t\tlet val = 0\n\n\t\t\t\tclass Base {\n\t\t\t\t\t@signal val = 1\n\n\t\t\t\t\tconstructor() {\n\t\t\t\t\t\tcreateEffect(() => {\n\t\t\t\t\t\t\teffectRuns++\n\t\t\t\t\t\t\tval = this.val\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\texpect(val).toBe(1)\n\t\t\t\t\t\texpect(effectRuns).toBe(1)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfunction someDeco(_: undefined, _context: ClassFieldDecoratorContext) {\n\t\t\t\t\t// no-op\n\t\t\t\t\treturn function (this: any, initialVal: any) {\n\t\t\t\t\t\treturn initialVal - 1\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclass Sub extends Base {\n\t\t\t\t\t@signal\n\t\t\t\t\t@someDeco\n\t\t\t\t\toverride val = 11 // final initial value will be 10\n\t\t\t\t}\n\n\t\t\t\tconst s = new Sub()\n\n\t\t\t\texpect(val).toBe(10)\n\t\t\t\t// 2 because the subclass signal override sets the original\n\t\t\t\t// signal and triggers the base class effect again, otherwise\n\t\t\t\t// the effect would be out of sync with the latest value.\n\t\t\t\texpect(effectRuns).toBe(2)\n\n\t\t\t\ts.val = 20\n\t\t\t\texpect(val).toBe(20)\n\t\t\t\texpect(effectRuns).toBe(3)\n\t\t\t})\n\n\t\t\tit('keeps base class effects operational when subclass overrides signal auto accessor', () => {\n\t\t\t\tlet effectRuns = 0\n\t\t\t\tlet val = 0\n\n\t\t\t\tclass Base {\n\t\t\t\t\t@signal accessor val = 1\n\n\t\t\t\t\tconstructor() {\n\t\t\t\t\t\tcreateEffect(() => {\n\t\t\t\t\t\t\teffectRuns++\n\t\t\t\t\t\t\tval = this.val\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\texpect(val).toBe(1)\n\t\t\t\t\t\texpect(effectRuns).toBe(1)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclass Sub extends Base {\n\t\t\t\t\t@signal override accessor val = 10\n\t\t\t\t}\n\n\t\t\t\tconst s = new Sub()\n\n\t\t\t\t// 2 because the subclass signal override sets the original\n\t\t\t\t// signal and triggers the base class effect again, otherwise\n\t\t\t\t// the effect would be out of sync with the latest value.\n\t\t\t\texpect(effectRuns).toBe(2)\n\t\t\t\texpect(val).toBe(10)\n\n\t\t\t\ts.val = 20\n\t\t\t\texpect(val).toBe(20)\n\t\t\t\texpect(effectRuns).toBe(3)\n\t\t\t})\n\n\t\t\tit('keeps base class effects operational when subclass overrides signal getter/setter', () => {\n\t\t\t\tlet effectRuns = 0\n\t\t\t\tlet val = 0\n\n\t\t\t\tclass Base {\n\t\t\t\t\t__foo = 1\n\n\t\t\t\t\t@signal get val() {\n\t\t\t\t\t\treturn this.__foo\n\t\t\t\t\t}\n\t\t\t\t\t@signal set val(v: number) {\n\t\t\t\t\t\tthis.__foo = v\n\t\t\t\t\t}\n\n\t\t\t\t\tconstructor() {\n\t\t\t\t\t\tcreateEffect(() => {\n\t\t\t\t\t\t\teffectRuns++\n\t\t\t\t\t\t\tval = this.val\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\texpect(val).toBe(1)\n\t\t\t\t\t\texpect(effectRuns).toBe(1)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclass Sub extends Base {\n\t\t\t\t\t@signal override get val() {\n\t\t\t\t\t\treturn super.val\n\t\t\t\t\t}\n\t\t\t\t\t@signal override set val(v: number) {\n\t\t\t\t\t\tsuper.val = v\n\t\t\t\t\t}\n\n\t\t\t\t\tconstructor() {\n\t\t\t\t\t\tsuper()\n\t\t\t\t\t\tthis.val = 10\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst s = new Sub()\n\n\t\t\t\t// 2 because the subclass sets the new value in its constructor,\n\t\t\t\t// triggering the base class effect again.\n\t\t\t\texpect(effectRuns).toBe(2)\n\t\t\t\texpect(val).toBe(10)\n\n\t\t\t\ts.val = 20\n\t\t\t\texpect(val).toBe(20)\n\t\t\t\texpect(effectRuns).toBe(3)\n\t\t\t})\n\t\t})\n\n\t\tdescribe('invalid usage', () => {\n\t\t\tit('throws on static fields', () => {\n\t\t\t\texpect(() => {\n\t\t\t\t\tclass InvalidStatic {\n\t\t\t\t\t\t@signal static val = 1\n\t\t\t\t\t}\n\t\t\t\t\tnew InvalidStatic()\n\t\t\t\t}).toThrow('@signal is not supported on static fields yet.')\n\t\t\t})\n\n\t\t\tit('throws on methods', () => {\n\t\t\t\texpect(() => {\n\t\t\t\t\tclass InvalidMethod {\n\t\t\t\t\t\t// @ts-expect-error type error because method is invalid\n\t\t\t\t\t\t@signal method() {\n\t\t\t\t\t\t\treturn 1\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tnew InvalidMethod()\n\t\t\t\t}).toThrow('The @signal decorator is only for use on fields, getters, setters, and auto accessors.')\n\t\t\t})\n\n\t\t\tit('throws on duplicate members', () => {\n\t\t\t\tconst run = () => {\n\t\t\t\t\tclass SuperDuper {\n\t\t\t\t\t\t@signal dupe = 0\n\t\t\t\t\t\t// @ts-expect-error duplicate member\n\t\t\t\t\t\t@signal dupe = 0\n\t\t\t\t\t}\n\n\t\t\t\t\tnew SuperDuper()\n\t\t\t\t}\n\n\t\t\t\t// This one works the same way whether compiling with Babel or\n\t\t\t\t// TypeScript. See the same tests for @memo and @effect.\n\t\t\t\texpect(run).toThrow(\n\t\t\t\t\t'@signal decorated member \"dupe\" has already been signalified. This can happen if there are duplicated class members.',\n\t\t\t\t)\n\t\t\t})\n\t\t})\n\t})\n})\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file +{"version":3,"file":"signal.test.js","names":["$PROXY","createEffect","createMutable","testButterflyProps","signal","signalify","isSignalGetter__","memo","describe","_initProto","_init_colors","_init_extra_colors","_init_colors2","_init_extra_colors2","_init_wingSize","_init_extra_wingSize","_initProto2","_init_colors3","_init_extra_colors3","_init_colors4","_init_extra_colors4","_init_wingSize2","_init_extra_wingSize2","_init_colors5","_init_extra_colors5","_init_wingSize3","_init_extra_wingSize3","_init_colors6","_get_colors","_set_colors","_init_extra_colors6","_initProto3","_call_colors","_call_colors2","_initProto4","_initProto5","Butterfly","_applyDecs","e","colors","wingSize","child","constructor","s","it","b","Butterfly2","Butterfly3","Butterfly4","A","v","Butterfly5","Butterfly6","o","_","#colors","getColors","setColors","testPrivate","Butterfly7","_colors","Base","Butterfly8","count","expect","toBe","_init_colors7","_init_extra_colors7","Mid","b0","testProp","Object","getOwnPropertyDescriptor","get","call","SubButterfly","args","m","value","SubSubButterfly","b2","k","startVal","newVal","reactive","_initProto6","_init_colors8","_init_extra_colors8","Insect","double","arg","_init_do","_init_extra_do","Doer","do","doer","newFunc","_initProto7","_init_venomous","_init_extra_venomous","_init_legs","_init_extra_legs","venomous","legs","eyes","n","antennas","i","testNoDuplicateSignal","prop","_initProto8","_init_age","_init_extra_age","plain","proxy","Human","metadata","_signal","context","memoRuns","CoolKid","age","ageInDogYears","kid","classySolid_members","find","name","applied","descriptor","getter","has","_init_secret","_init_extra_secret","Secretive","secret","getSecret","setSecret","toThrow","_init_secret2","_get_secret","_set_secret","_init_extra_secret2","#secret","_initProto9","_call_secret","_call_secret2","secret_","_init_val","_init_extra_val","_init_val2","_init_extra_val2","val","Sub","_init_n","_init_extra_n","_init_n2","_init_extra_n2","_initProto0","_initProto1","last","_initProto10","_initProto11","_initProto12","runs","_val","_initProto13","_initProto14","x","y","_init_val3","_init_extra_val3","_init_val4","_init_extra_val4","effectRuns","_init_val5","_init_extra_val5","_init_val6","_init_extra_val6","someDeco","_context","initialVal","_init_val7","_init_extra_val7","_init_val8","_init_extra_val8","_initProto15","_initProto16","__foo","_init_val9","_init_extra_val9","InvalidStatic","_initProto17","InvalidMethod","method","run","_init_dupe","_init_extra_dupe","_init_dupe2","_init_extra_dupe2","SuperDuper","dupe"],"sources":["../../src/decorators/signal.test.ts"],"sourcesContent":["import {$PROXY, createEffect} from 'solid-js'\nimport {createMutable} from 'solid-js/store'\nimport {testButterflyProps} from '../index.test.js'\nimport {signal} from './signal.js'\nimport {signalify} from '../signals/signalify.js'\nimport type {ClassySolidMetadata} from './types.js'\nimport {isSignalGetter__} from '../_state.js'\nimport {memo} from './memo.js'\n\ndescribe('classy-solid', () => {\n\tdescribe('@signal decorator', () => {\n\t\tclass Butterfly {\n\t\t\t@signal colors = 3\n\n\t\t\t#wingSize = 2\n\n\t\t\t// Stick this here to ensure that nested constructor doesn't\n\t\t\t// interfere with decorator behavior mid-way through initialization\n\t\t\t// of the wrapper parent class (tested with a subclass)\n\t\t\tchild: Butterfly | null = this.constructor !== Butterfly ? new Butterfly() : null\n\n\t\t\t@signal get wingSize() {\n\t\t\t\treturn this.#wingSize\n\t\t\t}\n\t\t\t@signal set wingSize(s: number) {\n\t\t\t\tthis.#wingSize = s\n\t\t\t}\n\t\t}\n\n\t\tit('makes class fields reactive, using class and field/getter/setter decorators', () => {\n\t\t\tconst b = new Butterfly()\n\n\t\t\ttestButterflyProps(b)\n\t\t})\n\n\t\tclass Butterfly2 {\n\t\t\t@signal colors = 3\n\t\t\t@signal wingSize = 2\n\t\t}\n\n\t\tit('makes class fields reactive, using field decorators without class decorator', () => {\n\t\t\tconst b = new Butterfly2()\n\n\t\t\ttestButterflyProps(b)\n\t\t})\n\n\t\tclass Butterfly3 {\n\t\t\t@signal colors = 3\n\n\t\t\t#wingSize = 2\n\n\t\t\t@signal get wingSize() {\n\t\t\t\treturn this.#wingSize\n\t\t\t}\n\t\t\t@signal set wingSize(s: number) {\n\t\t\t\tthis.#wingSize = s\n\t\t\t}\n\t\t}\n\n\t\tit('makes class fields reactive, using field/getter/setter decorators without class decorator', () => {\n\t\t\tconst b = new Butterfly3()\n\n\t\t\ttestButterflyProps(b)\n\t\t})\n\n\t\tclass Butterfly4 {\n\t\t\t@signal colors = 3\n\t\t\t@signal accessor wingSize = 2\n\t\t}\n\n\t\tit('makes class fields reactive, using field/accessor decorators without class decorator', () => {\n\t\t\tconst b = new Butterfly4()\n\n\t\t\ttestButterflyProps(b)\n\t\t})\n\n\t\tclass Butterfly5 {\n\t\t\t@signal colors = 3\n\t\t\t@signal accessor wingSize = 2\n\t\t}\n\n\t\tit('makes class fields reactive, using field/accessor decorators with class decorator', () => {\n\t\t\tconst b = new Butterfly5()\n\n\t\t\ttestButterflyProps(b)\n\t\t})\n\n\t\tclass Butterfly6 {\n\t\t\t@signal accessor #colors = 3\n\n\t\t\tgetColors() {\n\t\t\t\treturn this.#colors\n\t\t\t}\n\t\t\tsetColors(v: number) {\n\t\t\t\treturn (this.#colors = v)\n\t\t\t}\n\t\t}\n\n\t\tit('makes private class auto accessor reactive', () => {\n\t\t\tconst b = new Butterfly6()\n\t\t\ttestPrivate(b)\n\t\t})\n\n\t\tclass Butterfly7 {\n\t\t\t#_colors = 3\n\n\t\t\t@signal get #colors() {\n\t\t\t\treturn this.#_colors\n\t\t\t}\n\t\t\t@signal set #colors(v: number) {\n\t\t\t\tthis.#_colors = v\n\t\t\t}\n\n\t\t\tgetColors() {\n\t\t\t\treturn this.#colors\n\t\t\t}\n\t\t\tsetColors(v: number) {\n\t\t\t\treturn (this.#colors = v)\n\t\t\t}\n\t\t}\n\n\t\tit('makes private class getter/setter accessors reactive', () => {\n\t\t\tconst b = new Butterfly7()\n\t\t\ttestPrivate(b)\n\t\t})\n\n\t\tclass Base {\n\t\t\t#colors = 3\n\n\t\t\t@signal get colors() {\n\t\t\t\treturn this.#colors\n\t\t\t}\n\t\t\t@signal set colors(v: number) {\n\t\t\t\tthis.#colors = v\n\t\t\t}\n\t\t}\n\n\t\tclass Butterfly8 extends Base {\n\t\t\t#colors = 3\n\n\t\t\t@signal override get colors() {\n\t\t\t\treturn this.#colors\n\t\t\t}\n\t\t\t@signal override set colors(v: number) {\n\t\t\t\tthis.#colors = v\n\t\t\t}\n\n\t\t\tgetColors() {\n\t\t\t\treturn this.colors\n\t\t\t}\n\t\t\tsetColors(v: number) {\n\t\t\t\treturn (this.colors = v)\n\t\t\t}\n\t\t}\n\n\t\tit('makes overridden class getter/setter accessors reactive', () => {\n\t\t\tconst b = new Butterfly8()\n\t\t\ttestPrivate(b)\n\t\t})\n\n\t\tfunction testPrivate(b: Pick) {\n\t\t\tlet count = 0\n\n\t\t\tcreateEffect(() => {\n\t\t\t\tb.getColors()\n\t\t\t\tcount++\n\t\t\t})\n\n\t\t\texpect(b.getColors()).toBe(3)\n\t\t\texpect(count).toBe(1)\n\n\t\t\tb.setColors(5)\n\t\t\texpect(b.getColors()).toBe(5)\n\t\t\texpect(count).toBe(2)\n\t\t}\n\n\t\tit('allows overridden fields to work as expected', async () => {\n\t\t\tclass Mid extends Butterfly {\n\t\t\t\toverride colors = 0\n\t\t\t}\n\n\t\t\t// ensure subclass did not interfere with functionality of base class\n\t\t\tnew Butterfly() // ensure first instantiation doesn't affect later ones\n\t\t\tconst b0 = new Butterfly()\n\t\t\ttestProp(b0, 'colors', 3, 4, true)\n\t\t\texpect(Object.getOwnPropertyDescriptor(b0, 'colors')?.get?.call(b0) === 4).toBe(true) // accessor descriptor\n\n\t\t\tclass SubButterfly extends Mid {\n\t\t\t\t@signal override colors = 123\n\t\t\t}\n\n\t\t\t// ensure subclass did not interfere with functionality of base class\n\t\t\tconst m = new Mid()\n\t\t\ttestProp(m, 'colors', 0, 1, false)\n\t\t\texpect(Object.getOwnPropertyDescriptor(m, 'colors')?.value === 1).toBe(true) // value descriptor\n\n\t\t\tclass SubSubButterfly extends SubButterfly {\n\t\t\t\toverride colors = 456\n\t\t\t}\n\n\t\t\tconst b = new SubButterfly()\n\t\t\ttestButterflyProps(b, 123)\n\n\t\t\tconst b2 = new SubSubButterfly()\n\n\t\t\ttestProp(b2, 'colors', 456, 654, false)\n\t\t})\n\n\t\tfunction testProp(o: T, k: keyof T, startVal: any, newVal: any, reactive = true) {\n\t\t\tlet count = 0\n\n\t\t\tcreateEffect(() => {\n\t\t\t\to[k]\n\t\t\t\tcount++\n\t\t\t})\n\n\t\t\texpect(o[k]).toBe(startVal)\n\t\t\texpect(count).toBe(1)\n\n\t\t\to[k] = newVal // should not be a signal, should not trigger\n\n\t\t\texpect(o[k]).toBe(newVal)\n\t\t\texpect(count).toBe(reactive ? 2 : 1)\n\t\t}\n\n\t\tit('does not prevent superclass constructor from receiving subclass constructor args', () => {\n\t\t\tclass Insect {\n\t\t\t\tconstructor(public double: number) {}\n\t\t\t}\n\n\t\t\tclass Butterfly extends Insect {\n\t\t\t\t@signal colors = 3\n\n\t\t\t\t#wingSize = 2\n\n\t\t\t\t@signal get wingSize() {\n\t\t\t\t\treturn this.#wingSize\n\t\t\t\t}\n\t\t\t\t@signal set wingSize(s: number) {\n\t\t\t\t\tthis.#wingSize = s\n\t\t\t\t}\n\n\t\t\t\tconstructor(arg: number) {\n\t\t\t\t\tsuper(arg * 2)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst b = new Butterfly(4)\n\n\t\t\texpect(b.double).toBe(8)\n\t\t\ttestButterflyProps(b)\n\t\t})\n\n\t\tit('works with function values', () => {\n\t\t\t// This test ensures that functions are handled propertly, because\n\t\t\t// if passed without being wrapped to a signal setter it will be\n\t\t\t// called immediately with the previous value and be expected to\n\t\t\t// return a new value, instead of being set as the actual new value.\n\n\t\t\tclass Doer {\n\t\t\t\t@signal do: (() => unknown) | null = null\n\t\t\t}\n\n\t\t\tconst doer = new Doer()\n\n\t\t\texpect(doer.do).toBe(null)\n\n\t\t\tconst newFunc = () => 123\n\t\t\tdoer.do = newFunc\n\n\t\t\texpect(doer.do).toBe(newFunc)\n\t\t\texpect(doer.do()).toBe(123)\n\t\t})\n\n\t\tit('prevents duplicate signals for any property', () => {\n\t\t\tclass Insect {\n\t\t\t\t@signal venomous = 0\n\n\t\t\t\t@signal accessor legs = 6\n\n\t\t\t\t#eyes = 10\n\t\t\t\t@signal get eyes() {\n\t\t\t\t\treturn this.#eyes\n\t\t\t\t}\n\t\t\t\t@signal set eyes(n) {\n\t\t\t\t\tthis.#eyes = n\n\t\t\t\t}\n\n\t\t\t\tantennas = 0\n\n\t\t\t\tconstructor() {\n\t\t\t\t\t// This should not add any extra signals for properties that\n\t\t\t\t\t// are already signalified by the @signal decorator\n\t\t\t\t\tsignalify(this, 'venomous', 'legs', 'eyes', 'antennas')\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst i = new Insect()\n\n\t\t\ttestNoDuplicateSignal(i, 'venomous')\n\t\t\ttestNoDuplicateSignal(i, 'legs')\n\t\t\ttestNoDuplicateSignal(i, 'eyes')\n\t\t\ttestNoDuplicateSignal(i, 'antennas')\n\n\t\t\tfunction testNoDuplicateSignal(o: Insect, prop: keyof Insect) {\n\t\t\t\tlet count = 0\n\t\t\t\tcreateEffect(() => {\n\t\t\t\t\tcount++\n\t\t\t\t\to[prop]\n\t\t\t\t})\n\t\t\t\texpect(count).toBe(1)\n\t\t\t\to[prop]++\n\t\t\t\texpect(count).toBe(2) // it would be 3 if there were an extra signal\n\t\t\t}\n\t\t})\n\n\t\tit('no-ops with Solid proxies to avoid an unnecessary extra signal', () => {\n\t\t\tlet plain!: Human\n\t\t\tlet proxy!: Human\n\n\t\t\tclass Human {\n\t\t\t\tconstructor() {\n\t\t\t\t\tplain = this\n\t\t\t\t\treturn (proxy = createMutable(this))\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet metadata!: ClassySolidMetadata\n\n\t\t\tconst _signal = (_: unknown, context: ClassFieldDecoratorContext) => {\n\t\t\t\tmetadata = context.metadata as ClassySolidMetadata\n\t\t\t\treturn signal(_, context)\n\t\t\t}\n\n\t\t\tlet memoRuns = 0\n\n\t\t\tclass CoolKid extends Human {\n\t\t\t\t@_signal age = 3\n\n\t\t\t\t@memo get ageInDogYears() {\n\t\t\t\t\tmemoRuns++\n\t\t\t\t\treturn this.age * 7\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst kid = new CoolKid()\n\n\t\t\t// Verify we got a Solid Proxy.\n\t\t\texpect(plain === proxy).toBe(false)\n\t\t\texpect((plain as any)[$PROXY] === proxy).toBe(true)\n\n\t\t\texpect(metadata.classySolid_members!.find(m => m.name === 'age')!.applied.get(kid)).toBe(true)\n\n\t\t\t// Verify it there is not our own signal getter applied (it may be\n\t\t\t// the Solid Proxy's, or none, depending on how the Solid Proxy\n\t\t\t// implementation goes).\n\t\t\tconst descriptor = Object.getOwnPropertyDescriptor(kid, 'age')\n\t\t\tconst getter = descriptor!.get!\n\t\t\texpect(isSignalGetter__.has(getter)).toBe(false)\n\n\t\t\tlet count = 0\n\t\t\tcreateEffect(() => {\n\t\t\t\tcount++\n\t\t\t\tkid.age\n\t\t\t})\n\n\t\t\texpect(count).toBe(1)\n\t\t\texpect(kid.age).toBe(3)\n\t\t\t// check that @memo still works with the Proxy\n\t\t\texpect(memoRuns).toBe(1)\n\t\t\texpect(kid.ageInDogYears).toBe(21)\n\n\t\t\tkid.age = 4\n\n\t\t\texpect(count).toBe(2)\n\t\t\texpect(kid.age).toBe(4)\n\t\t\t// check that @memo still works with the Proxy\n\t\t\texpect(memoRuns).toBe(2)\n\t\t\texpect(kid.ageInDogYears).toBe(28)\n\t\t})\n\n\t\tit('cannot support private fields', () => {\n\t\t\texpect(() => {\n\t\t\t\tclass Secretive {\n\t\t\t\t\t@signal #secret = 42\n\n\t\t\t\t\tgetSecret() {\n\t\t\t\t\t\treturn this.#secret\n\t\t\t\t\t}\n\n\t\t\t\t\tsetSecret(v: number) {\n\t\t\t\t\t\tthis.#secret = v\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tSecretive\n\t\t\t}).toThrow(\n\t\t\t\t'@signal cannot signalify #private fields. Use a #private getter/setter or auto accessor instead. F.e. convert `@signal #foo = 0` to `@signal accessor #foo = 0`.',\n\t\t\t)\n\t\t})\n\n\t\tit('supports private auto accessors', () => {\n\t\t\tclass Secretive {\n\t\t\t\t@signal accessor #secret = 42\n\n\t\t\t\tgetSecret() {\n\t\t\t\t\treturn this.#secret\n\t\t\t\t}\n\n\t\t\t\tsetSecret(v: number) {\n\t\t\t\t\tthis.#secret = v\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst s = new Secretive()\n\n\t\t\tlet count = 0\n\t\t\tcreateEffect(() => {\n\t\t\t\tcount++\n\t\t\t\ts.getSecret()\n\t\t\t})\n\n\t\t\texpect(s.getSecret()).toBe(42)\n\t\t\texpect(count).toBe(1)\n\n\t\t\ts.setSecret(100)\n\t\t\texpect(s.getSecret()).toBe(100)\n\t\t\texpect(count).toBe(2)\n\t\t})\n\n\t\tit('supports private getter/setters', () => {\n\t\t\tclass Secretive {\n\t\t\t\t#secret_ = 42\n\n\t\t\t\t@signal get #secret() {\n\t\t\t\t\treturn this.#secret_\n\t\t\t\t}\n\t\t\t\t@signal set #secret(v: number) {\n\t\t\t\t\tthis.#secret_ = v\n\t\t\t\t}\n\n\t\t\t\tgetSecret() {\n\t\t\t\t\treturn this.#secret\n\t\t\t\t}\n\n\t\t\t\tsetSecret(v: number) {\n\t\t\t\t\tthis.#secret = v\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst s = new Secretive()\n\n\t\t\tlet count = 0\n\t\t\tcreateEffect(() => {\n\t\t\t\tcount++\n\t\t\t\ts.getSecret()\n\t\t\t})\n\n\t\t\texpect(s.getSecret()).toBe(42)\n\t\t\texpect(count).toBe(1)\n\n\t\t\ts.setSecret(100)\n\t\t\texpect(s.getSecret()).toBe(100)\n\t\t\texpect(count).toBe(2)\n\t\t})\n\n\t\tdescribe('subclass signal overriding/extending', () => {\n\t\t\tit('supports subclass signal field extending base signal field', () => {\n\t\t\t\tclass Base {\n\t\t\t\t\t@signal val = 1\n\t\t\t\t}\n\n\t\t\t\tclass Sub extends Base {\n\t\t\t\t\t// @ts-ignore this is valid in plain JS, TS complains about using field before initialization\n\t\t\t\t\t@signal override val = this.val + 1 // override field with initial value from base class\n\t\t\t\t}\n\n\t\t\t\tconst s = new Sub()\n\t\t\t\tlet count = 0\n\t\t\t\tlet val = 0\n\t\t\t\tcreateEffect(() => {\n\t\t\t\t\tcount++\n\t\t\t\t\tval = s.val\n\t\t\t\t})\n\n\t\t\t\texpect(val).toBe(2)\n\t\t\t\texpect(count).toBe(1)\n\n\t\t\t\ts.val = 5\n\t\t\t\texpect(val).toBe(5)\n\t\t\t\texpect(count).toBe(2)\n\t\t\t})\n\n\t\t\tit('supports subclass signal auto accessor extending base signal auto accessor with super', () => {\n\t\t\t\tclass Base {\n\t\t\t\t\t@signal accessor n = 1\n\t\t\t\t}\n\n\t\t\t\tclass Sub extends Base {\n\t\t\t\t\t@signal override accessor n = super.n + 1 // initialize with initial super value\n\t\t\t\t}\n\n\t\t\t\tconst s = new Sub()\n\t\t\t\tlet count = 0\n\t\t\t\tcreateEffect(() => {\n\t\t\t\t\tcount++\n\t\t\t\t\ts.n\n\t\t\t\t})\n\n\t\t\t\texpect(s.n).toBe(2)\n\t\t\t\texpect(count).toBe(1)\n\n\t\t\t\ts.n = 7\n\t\t\t\texpect(s.n).toBe(7)\n\t\t\t\texpect(count).toBe(2)\n\t\t\t})\n\n\t\t\tit('supports subclass signal getter/setter extending base signal getter/setter with super', () => {\n\t\t\t\tclass Base {\n\t\t\t\t\t#n = 1\n\t\t\t\t\t@signal get n() {\n\t\t\t\t\t\treturn this.#n\n\t\t\t\t\t}\n\t\t\t\t\t@signal set n(v: number) {\n\t\t\t\t\t\tthis.#n = v\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclass Sub extends Base {\n\t\t\t\t\t@signal override get n() {\n\t\t\t\t\t\treturn super.n + 1 // extend read\n\t\t\t\t\t}\n\t\t\t\t\t@signal override set n(v: number) {\n\t\t\t\t\t\tsuper.n = v + 1 // extend write\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst s = new Sub()\n\t\t\t\tlet count = 0\n\t\t\t\tlet last = 0\n\t\t\t\tcreateEffect(() => {\n\t\t\t\t\tcount++\n\t\t\t\t\tlast = s.n\n\t\t\t\t})\n\n\t\t\t\texpect(last).toBe(1 + 1)\n\t\t\t\texpect(count).toBe(1)\n\n\t\t\t\ts.n = 10\n\t\t\t\texpect(last).toBe(10 + 1 + 1)\n\t\t\t\texpect(count).toBe(2)\n\t\t\t})\n\n\t\t\tit('supports multi-level signal getter/setter extension with super', () => {\n\t\t\t\tlet runs = 0\n\t\t\t\tclass Base {\n\t\t\t\t\t_val = 1\n\t\t\t\t\t@signal get val() {\n\t\t\t\t\t\treturn this._val\n\t\t\t\t\t}\n\t\t\t\t\t@signal set val(v) {\n\t\t\t\t\t\tthis._val = v\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tclass Mid extends Base {\n\t\t\t\t\t@signal override get val() {\n\t\t\t\t\t\treturn super.val + 10\n\t\t\t\t\t}\n\t\t\t\t\t@signal override set val(v) {\n\t\t\t\t\t\tsuper.val = v - 10\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tclass Sub extends Mid {\n\t\t\t\t\t@signal override get val() {\n\t\t\t\t\t\treturn super.val + 100\n\t\t\t\t\t}\n\t\t\t\t\t@signal override set val(v) {\n\t\t\t\t\t\tsuper.val = v - 100\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst o = new Sub()\n\n\t\t\t\tcreateEffect(() => {\n\t\t\t\t\truns++\n\t\t\t\t\to.val\n\t\t\t\t})\n\n\t\t\t\texpect(o._val).toBe(1)\n\t\t\t\texpect(o.val).toBe(1 + 10 + 100)\n\t\t\t\texpect(runs).toBe(1)\n\n\t\t\t\to.val = 200\n\t\t\t\texpect(runs).toBe(2)\n\t\t\t\texpect(o._val).toBe(200 - 100 - 10)\n\t\t\t\texpect(o.val).toBe(90 + 10 + 100)\n\t\t\t})\n\n\t\t\tit('supports subclass signal getter/setter overriding base signal getter/setter without super', () => {\n\t\t\t\tclass Base {\n\t\t\t\t\t#v = 1\n\t\t\t\t\t@signal get v() {\n\t\t\t\t\t\treturn this.#v\n\t\t\t\t\t}\n\t\t\t\t\t@signal set v(x: number) {\n\t\t\t\t\t\tthis.#v = x\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclass Sub extends Base {\n\t\t\t\t\t#y = 100\n\t\t\t\t\t@signal override get v() {\n\t\t\t\t\t\treturn this.#y\n\t\t\t\t\t}\n\t\t\t\t\t@signal override set v(x: number) {\n\t\t\t\t\t\tthis.#y = x\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst s = new Sub()\n\t\t\t\tlet count = 0\n\t\t\t\tcreateEffect(() => {\n\t\t\t\t\ts.v\n\t\t\t\t\tcount++\n\t\t\t\t})\n\n\t\t\t\texpect(s.v).toBe(100)\n\t\t\t\texpect(count).toBe(1)\n\n\t\t\t\ts.v = 50\n\t\t\t\texpect(s.v).toBe(50)\n\t\t\t\texpect(count).toBe(2)\n\t\t\t})\n\n\t\t\tit('keeps base class effects operational when subclass overrides signal field', () => {\n\t\t\t\tlet effectRuns = 0\n\t\t\t\tlet val = 0\n\n\t\t\t\tclass Base {\n\t\t\t\t\t@signal val = 1\n\n\t\t\t\t\tconstructor() {\n\t\t\t\t\t\tcreateEffect(() => {\n\t\t\t\t\t\t\teffectRuns++\n\t\t\t\t\t\t\tval = this.val\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\texpect(val).toBe(1)\n\t\t\t\t\t\texpect(effectRuns).toBe(1)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclass Sub extends Base {\n\t\t\t\t\t@signal override val = 10\n\t\t\t\t}\n\n\t\t\t\tconst s = new Sub()\n\n\t\t\t\texpect(val).toBe(10)\n\t\t\t\t// 2 because the subclass signal override sets the original\n\t\t\t\t// signal and triggers the base class effect again, otherwise\n\t\t\t\t// the effect would be out of sync with the latest value.\n\t\t\t\texpect(effectRuns).toBe(2)\n\n\t\t\t\ts.val = 20\n\t\t\t\texpect(val).toBe(20)\n\t\t\t\texpect(effectRuns).toBe(3)\n\t\t\t})\n\n\t\t\tit('keeps base class effects operational when subclass overrides signal field, with intermediate decorator', () => {\n\t\t\t\tlet effectRuns = 0\n\t\t\t\tlet val = 0\n\n\t\t\t\tclass Base {\n\t\t\t\t\t@signal val = 1\n\n\t\t\t\t\tconstructor() {\n\t\t\t\t\t\tcreateEffect(() => {\n\t\t\t\t\t\t\teffectRuns++\n\t\t\t\t\t\t\tval = this.val\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\texpect(val).toBe(1)\n\t\t\t\t\t\texpect(effectRuns).toBe(1)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfunction someDeco(_: undefined, _context: ClassFieldDecoratorContext) {\n\t\t\t\t\t// no-op\n\t\t\t\t\treturn function (this: any, initialVal: any) {\n\t\t\t\t\t\treturn initialVal - 1\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclass Sub extends Base {\n\t\t\t\t\t@signal\n\t\t\t\t\t@someDeco\n\t\t\t\t\toverride val = 11 // final initial value will be 10\n\t\t\t\t}\n\n\t\t\t\tconst s = new Sub()\n\n\t\t\t\texpect(val).toBe(10)\n\t\t\t\t// 2 because the subclass signal override sets the original\n\t\t\t\t// signal and triggers the base class effect again, otherwise\n\t\t\t\t// the effect would be out of sync with the latest value.\n\t\t\t\texpect(effectRuns).toBe(2)\n\n\t\t\t\ts.val = 20\n\t\t\t\texpect(val).toBe(20)\n\t\t\t\texpect(effectRuns).toBe(3)\n\t\t\t})\n\n\t\t\tit('keeps base class effects operational when subclass overrides signal auto accessor', () => {\n\t\t\t\tlet effectRuns = 0\n\t\t\t\tlet val = 0\n\n\t\t\t\tclass Base {\n\t\t\t\t\t@signal accessor val = 1\n\n\t\t\t\t\tconstructor() {\n\t\t\t\t\t\tcreateEffect(() => {\n\t\t\t\t\t\t\teffectRuns++\n\t\t\t\t\t\t\tval = this.val\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\texpect(val).toBe(1)\n\t\t\t\t\t\texpect(effectRuns).toBe(1)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclass Sub extends Base {\n\t\t\t\t\t@signal override accessor val = 10\n\t\t\t\t}\n\n\t\t\t\tconst s = new Sub()\n\n\t\t\t\t// 2 because the subclass signal override sets the original\n\t\t\t\t// signal and triggers the base class effect again, otherwise\n\t\t\t\t// the effect would be out of sync with the latest value.\n\t\t\t\texpect(effectRuns).toBe(2)\n\t\t\t\texpect(val).toBe(10)\n\n\t\t\t\ts.val = 20\n\t\t\t\texpect(val).toBe(20)\n\t\t\t\texpect(effectRuns).toBe(3)\n\t\t\t})\n\n\t\t\tit('keeps base class effects operational when subclass overrides signal getter/setter', () => {\n\t\t\t\tlet effectRuns = 0\n\t\t\t\tlet val = 0\n\n\t\t\t\tclass Base {\n\t\t\t\t\t__foo = 1\n\n\t\t\t\t\t@signal get val() {\n\t\t\t\t\t\treturn this.__foo\n\t\t\t\t\t}\n\t\t\t\t\t@signal set val(v: number) {\n\t\t\t\t\t\tthis.__foo = v\n\t\t\t\t\t}\n\n\t\t\t\t\tconstructor() {\n\t\t\t\t\t\tcreateEffect(() => {\n\t\t\t\t\t\t\teffectRuns++\n\t\t\t\t\t\t\tval = this.val\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\texpect(val).toBe(1)\n\t\t\t\t\t\texpect(effectRuns).toBe(1)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclass Sub extends Base {\n\t\t\t\t\t@signal override get val() {\n\t\t\t\t\t\treturn super.val\n\t\t\t\t\t}\n\t\t\t\t\t@signal override set val(v: number) {\n\t\t\t\t\t\tsuper.val = v\n\t\t\t\t\t}\n\n\t\t\t\t\tconstructor() {\n\t\t\t\t\t\tsuper()\n\t\t\t\t\t\tthis.val = 10\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst s = new Sub()\n\n\t\t\t\t// 2 because the subclass sets the new value in its constructor,\n\t\t\t\t// triggering the base class effect again.\n\t\t\t\texpect(effectRuns).toBe(2)\n\t\t\t\texpect(val).toBe(10)\n\n\t\t\t\ts.val = 20\n\t\t\t\texpect(val).toBe(20)\n\t\t\t\texpect(effectRuns).toBe(3)\n\t\t\t})\n\t\t})\n\n\t\tdescribe('invalid usage', () => {\n\t\t\tit('throws on static fields', () => {\n\t\t\t\texpect(() => {\n\t\t\t\t\tclass InvalidStatic {\n\t\t\t\t\t\t@signal static val = 1\n\t\t\t\t\t}\n\t\t\t\t\tnew InvalidStatic()\n\t\t\t\t}).toThrow('@signal is not supported on static fields yet.')\n\t\t\t})\n\n\t\t\tit('throws on methods', () => {\n\t\t\t\texpect(() => {\n\t\t\t\t\tclass InvalidMethod {\n\t\t\t\t\t\t// @ts-expect-error type error because method is invalid\n\t\t\t\t\t\t@signal method() {\n\t\t\t\t\t\t\treturn 1\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tnew InvalidMethod()\n\t\t\t\t}).toThrow('The @signal decorator is only for use on fields, getters, setters, and auto accessors.')\n\t\t\t})\n\n\t\t\tit('throws on duplicate members', () => {\n\t\t\t\tconst run = () => {\n\t\t\t\t\tclass SuperDuper {\n\t\t\t\t\t\t@signal dupe = 0\n\t\t\t\t\t\t// @ts-expect-error duplicate member\n\t\t\t\t\t\t@signal dupe = 0\n\t\t\t\t\t}\n\n\t\t\t\t\tnew SuperDuper()\n\t\t\t\t}\n\n\t\t\t\t// This one works the same way whether compiling with Babel or\n\t\t\t\t// TypeScript. See the same tests for @memo and @effect.\n\t\t\t\texpect(run).toThrow(\n\t\t\t\t\t'@signal decorated member \"dupe\" has already been signalified. This can happen if there are duplicated class members.',\n\t\t\t\t)\n\t\t\t})\n\t\t})\n\t})\n})\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/dist/decorators/untracked.d.ts.map b/dist/decorators/untracked.d.ts.map index ae377fa..4ea46f9 100644 --- a/dist/decorators/untracked.d.ts.map +++ b/dist/decorators/untracked.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"untracked.d.ts","sourceRoot":"","sources":["../../src/decorators/untracked.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,8BAA8B,CAAA;AAEhE,OAAO,oBAAoB,CAAA;AAE3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,qBAAqB,GAAG,SAAS,GAAG,GAAG,CAwBhG"} \ No newline at end of file +{"version":3,"file":"untracked.d.ts","sourceRoot":"","sources":["../../src/decorators/untracked.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,8BAA8B,CAAA;AAEhE,OAAO,oBAAoB,CAAA;AAE3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,qBAAqB,GAAG,SAAS,GAAG,GAAG,CAoBhG"} \ No newline at end of file diff --git a/dist/decorators/untracked.js b/dist/decorators/untracked.js index 44245e5..d9c9159 100644 --- a/dist/decorators/untracked.js +++ b/dist/decorators/untracked.js @@ -63,20 +63,17 @@ export function untracked(value, context) { // context may be undefined when unsing untracked() without decorators if (typeof value !== 'function' || context && context.kind !== 'class') throw new TypeError('The @untracked decorator is only for use on classes.'); const Class = value; - class ReactiveDecorator extends Class { + class UntrackedDecorator extends Class { constructor(...args) { - let instance; - // Ensure that if we're in an effect that `new`ing a class does not // track signal reads, otherwise we'll get into an infinite loop. If // someone want to trigger an effect based on properties of the // `new`ed instance, they can explicitly read the properties // themselves in the effect, making their intent clear. - if (getListener()) untrack(() => instance = Reflect.construct(Class, args, new.target)); // super() - else super(...args), instance = this; - return instance; + if (getListener()) return untrack(() => Reflect.construct(Class, args, new.target)); // super() + else super(...args); } } - return ReactiveDecorator; + return UntrackedDecorator; } //# sourceMappingURL=untracked.js.map \ No newline at end of file diff --git a/dist/decorators/untracked.js.map b/dist/decorators/untracked.js.map index e9bb3e5..8750284 100644 --- a/dist/decorators/untracked.js.map +++ b/dist/decorators/untracked.js.map @@ -1 +1 @@ -{"version":3,"file":"untracked.js","names":["getListener","untrack","untracked","value","context","kind","TypeError","Class","ReactiveDecorator","constructor","args","instance","Reflect","construct","new","target"],"sources":["../../src/decorators/untracked.ts"],"sourcesContent":["import type {AnyConstructor} from 'lowclass/dist/Constructor.js'\nimport {getListener, untrack} from 'solid-js'\nimport './metadata-shim.js'\n\n/**\n * A decorator that makes a class's contructor untracked.\n *\n * Sometimes, not typically, you may want to ensure that when a class is\n * instantiated, any signal reads that happen during the constructor do not\n * track those reads.\n *\n * Normally you do not need to read signals during construction, but if you do,\n * you should use `@untracked` to avoid accidentally creating dependencies on\n * those signals for any effects that instantiate the class (therefore avoiding\n * infinite loops).\n *\n * Example:\n *\n * ```ts\n * import {untracked, signal} from \"classy-solid\";\n * import {createEffect} from \"solid-js\";\n *\n * ⁣@untracked\n * class Example {\n * ⁣@signal count = 0;\n *\n * constructor() {\n * this.count = this.count + 1; // does not track .count signal read in any outer effect.\n * }\n * }\n *\n * createEffect(() => {\n * // This does not track .count, so this effect will not re-run when .count changes.\n * // If this did track .count, an infinite loop would happen.\n * const example = new Example();\n *\n * createEffect(() => {\n * // This inner effect tracks .count, so it will re-run (independent of the\n * // outer effect) when .count changes.\n * console.log(example.count);\n * });\n * });\n * ```\n *\n * This can also be called manually without decorators:\n *\n * ```ts\n * import {untracked} from \"classy-solid\";\n *\n * const Example = untracked(\n * class {\n * count = 0;\n *\n * constructor() {\n * this.count = this.count + 1; // does not track .count signal read in any outer effect.\n * }\n * }\n * )\n *\n * // ...same usage as above...\n * ```\n */\nexport function untracked(value: AnyConstructor, context: ClassDecoratorContext | undefined): any {\n\t// context may be undefined when unsing untracked() without decorators\n\tif (typeof value !== 'function' || (context && context.kind !== 'class'))\n\t\tthrow new TypeError('The @untracked decorator is only for use on classes.')\n\n\tconst Class = value\n\n\tclass ReactiveDecorator extends Class {\n\t\tconstructor(...args: any[]) {\n\t\t\tlet instance!: ReactiveDecorator\n\n\t\t\t// Ensure that if we're in an effect that `new`ing a class does not\n\t\t\t// track signal reads, otherwise we'll get into an infinite loop. If\n\t\t\t// someone want to trigger an effect based on properties of the\n\t\t\t// `new`ed instance, they can explicitly read the properties\n\t\t\t// themselves in the effect, making their intent clear.\n\t\t\tif (getListener()) untrack(() => (instance = Reflect.construct(Class, args, new.target))) // super()\n\t\t\telse super(...args), (instance = this)\n\n\t\t\treturn instance\n\t\t}\n\t}\n\n\treturn ReactiveDecorator\n}\n"],"mappings":"AACA,SAAQA,WAAW,EAAEC,OAAO,QAAO,UAAU;AAC7C,OAAO,oBAAoB;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,SAASA,CAACC,KAAqB,EAAEC,OAA0C,EAAO;EACjG;EACA,IAAI,OAAOD,KAAK,KAAK,UAAU,IAAKC,OAAO,IAAIA,OAAO,CAACC,IAAI,KAAK,OAAQ,EACvE,MAAM,IAAIC,SAAS,CAAC,sDAAsD,CAAC;EAE5E,MAAMC,KAAK,GAAGJ,KAAK;EAEnB,MAAMK,iBAAiB,SAASD,KAAK,CAAC;IACrCE,WAAWA,CAAC,GAAGC,IAAW,EAAE;MAC3B,IAAIC,QAA4B;;MAEhC;MACA;MACA;MACA;MACA;MACA,IAAIX,WAAW,CAAC,CAAC,EAAEC,OAAO,CAAC,MAAOU,QAAQ,GAAGC,OAAO,CAACC,SAAS,CAACN,KAAK,EAAEG,IAAI,EAAEI,GAAG,CAACC,MAAM,CAAE,CAAC,EAAC;MAAA,KACrF,KAAK,CAAC,GAAGL,IAAI,CAAC,EAAGC,QAAQ,GAAG,IAAK;MAEtC,OAAOA,QAAQ;IAChB;EACD;EAEA,OAAOH,iBAAiB;AACzB","ignoreList":[]} \ No newline at end of file +{"version":3,"file":"untracked.js","names":["getListener","untrack","untracked","value","context","kind","TypeError","Class","UntrackedDecorator","constructor","args","Reflect","construct","new","target"],"sources":["../../src/decorators/untracked.ts"],"sourcesContent":["import type {AnyConstructor} from 'lowclass/dist/Constructor.js'\nimport {getListener, untrack} from 'solid-js'\nimport './metadata-shim.js'\n\n/**\n * A decorator that makes a class's contructor untracked.\n *\n * Sometimes, not typically, you may want to ensure that when a class is\n * instantiated, any signal reads that happen during the constructor do not\n * track those reads.\n *\n * Normally you do not need to read signals during construction, but if you do,\n * you should use `@untracked` to avoid accidentally creating dependencies on\n * those signals for any effects that instantiate the class (therefore avoiding\n * infinite loops).\n *\n * Example:\n *\n * ```ts\n * import {untracked, signal} from \"classy-solid\";\n * import {createEffect} from \"solid-js\";\n *\n * ⁣@untracked\n * class Example {\n * ⁣@signal count = 0;\n *\n * constructor() {\n * this.count = this.count + 1; // does not track .count signal read in any outer effect.\n * }\n * }\n *\n * createEffect(() => {\n * // This does not track .count, so this effect will not re-run when .count changes.\n * // If this did track .count, an infinite loop would happen.\n * const example = new Example();\n *\n * createEffect(() => {\n * // This inner effect tracks .count, so it will re-run (independent of the\n * // outer effect) when .count changes.\n * console.log(example.count);\n * });\n * });\n * ```\n *\n * This can also be called manually without decorators:\n *\n * ```ts\n * import {untracked} from \"classy-solid\";\n *\n * const Example = untracked(\n * class {\n * count = 0;\n *\n * constructor() {\n * this.count = this.count + 1; // does not track .count signal read in any outer effect.\n * }\n * }\n * )\n *\n * // ...same usage as above...\n * ```\n */\nexport function untracked(value: AnyConstructor, context: ClassDecoratorContext | undefined): any {\n\t// context may be undefined when unsing untracked() without decorators\n\tif (typeof value !== 'function' || (context && context.kind !== 'class'))\n\t\tthrow new TypeError('The @untracked decorator is only for use on classes.')\n\n\tconst Class = value\n\n\tclass UntrackedDecorator extends Class {\n\t\tconstructor(...args: any[]) {\n\t\t\t// Ensure that if we're in an effect that `new`ing a class does not\n\t\t\t// track signal reads, otherwise we'll get into an infinite loop. If\n\t\t\t// someone want to trigger an effect based on properties of the\n\t\t\t// `new`ed instance, they can explicitly read the properties\n\t\t\t// themselves in the effect, making their intent clear.\n\t\t\tif (getListener()) return untrack(() => Reflect.construct(Class, args, new.target)) // super()\n\t\t\telse super(...args)\n\t\t}\n\t}\n\n\treturn UntrackedDecorator\n}\n"],"mappings":"AACA,SAAQA,WAAW,EAAEC,OAAO,QAAO,UAAU;AAC7C,OAAO,oBAAoB;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,SAASA,CAACC,KAAqB,EAAEC,OAA0C,EAAO;EACjG;EACA,IAAI,OAAOD,KAAK,KAAK,UAAU,IAAKC,OAAO,IAAIA,OAAO,CAACC,IAAI,KAAK,OAAQ,EACvE,MAAM,IAAIC,SAAS,CAAC,sDAAsD,CAAC;EAE5E,MAAMC,KAAK,GAAGJ,KAAK;EAEnB,MAAMK,kBAAkB,SAASD,KAAK,CAAC;IACtCE,WAAWA,CAAC,GAAGC,IAAW,EAAE;MAC3B;MACA;MACA;MACA;MACA;MACA,IAAIV,WAAW,CAAC,CAAC,EAAE,OAAOC,OAAO,CAAC,MAAMU,OAAO,CAACC,SAAS,CAACL,KAAK,EAAEG,IAAI,EAAEG,GAAG,CAACC,MAAM,CAAC,CAAC,EAAC;MAAA,KAC/E,KAAK,CAAC,GAAGJ,IAAI,CAAC;IACpB;EACD;EAEA,OAAOF,kBAAkB;AAC1B","ignoreList":[]} \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts index 5ee0b44..bd3fb1b 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -2,5 +2,6 @@ export * from './decorators/index.js'; export * from './effects/index.js'; export * from './mixins/index.js'; export * from './signals/index.js'; +export * from './_state.js'; export declare const version = "0.5.1"; //# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/dist/index.d.ts.map b/dist/index.d.ts.map index e6d4cdf..63af8c1 100644 --- a/dist/index.d.ts.map +++ b/dist/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA;AAElC,eAAO,MAAM,OAAO,UAAU,CAAA"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA;AAClC,cAAc,aAAa,CAAA;AAE3B,eAAO,MAAM,OAAO,UAAU,CAAA"} \ No newline at end of file diff --git a/dist/index.js b/dist/index.js index 52ff478..85ec1a0 100644 --- a/dist/index.js +++ b/dist/index.js @@ -2,5 +2,6 @@ export * from './decorators/index.js'; export * from './effects/index.js'; export * from './mixins/index.js'; export * from './signals/index.js'; +export * from './_state.js'; export const version = '0.5.1'; //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dist/index.js.map b/dist/index.js.map index ac21a89..782f75f 100644 --- a/dist/index.js.map +++ b/dist/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","names":["version"],"sources":["../src/index.ts"],"sourcesContent":["export * from './decorators/index.js'\nexport * from './effects/index.js'\nexport * from './mixins/index.js'\nexport * from './signals/index.js'\n\nexport const version = '0.5.1'\n"],"mappings":"AAAA,cAAc,uBAAuB;AACrC,cAAc,oBAAoB;AAClC,cAAc,mBAAmB;AACjC,cAAc,oBAAoB;AAElC,OAAO,MAAMA,OAAO,GAAG,OAAO","ignoreList":[]} \ No newline at end of file +{"version":3,"file":"index.js","names":["version"],"sources":["../src/index.ts"],"sourcesContent":["export * from './decorators/index.js'\nexport * from './effects/index.js'\nexport * from './mixins/index.js'\nexport * from './signals/index.js'\nexport * from './_state.js'\n\nexport const version = '0.5.1'\n"],"mappings":"AAAA,cAAc,uBAAuB;AACrC,cAAc,oBAAoB;AAClC,cAAc,mBAAmB;AACjC,cAAc,oBAAoB;AAClC,cAAc,aAAa;AAE3B,OAAO,MAAMA,OAAO,GAAG,OAAO","ignoreList":[]} \ No newline at end of file diff --git a/dist/index.test.d.ts b/dist/index.test.d.ts index 1794af0..e404c99 100644 --- a/dist/index.test.d.ts +++ b/dist/index.test.d.ts @@ -10,6 +10,7 @@ declare const MyElement_base: { "__#1@#effectFunctions": (() => void)[]; "__#1@#started": boolean; createEffect(fn: () => void): void; + addEffectFn(fn: () => void): void; "__#1@#isRestarting": boolean; startEffects(): void; stopEffects(): void; @@ -35,6 +36,7 @@ declare const MyElement2_base: { "__#1@#effectFunctions": (() => void)[]; "__#1@#started": boolean; createEffect(fn: () => void): void; + addEffectFn(fn: () => void): void; "__#1@#isRestarting": boolean; startEffects(): void; stopEffects(): void; @@ -61,6 +63,7 @@ declare const MyElement3_base: { "__#1@#effectFunctions": (() => void)[]; "__#1@#started": boolean; createEffect(fn: () => void): void; + addEffectFn(fn: () => void): void; "__#1@#isRestarting": boolean; startEffects(): void; stopEffects(): void; diff --git a/dist/index.test.d.ts.map b/dist/index.test.d.ts.map index d9e5760..f43dd2a 100644 --- a/dist/index.test.d.ts.map +++ b/dist/index.test.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"AAMA,OAAO,CAAC,MAAM,CAAC;IACd,SAAS,MAAM,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,CAAA;CACpC;AAGD,wBAAgB,kBAAkB,CAAC,CAAC,EAAE;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAC,EAAE,aAAa,SAAI,QAwB1F;;;;;;;;;;;;;;;;;;AAED,qBAAa,SAAU,SAAQ,cAAsB;IAK5C,CAAC,SAAI;IACL,CAAC,SAAI;IAEb,IAAI,SAAI;IACR,MAAM,SAAI;IAEV,iBAAiB;IAOjB,oBAAoB;CAGpB;;;;;;;;;;;;;;;;;;AAED,qBAAa,UAAW,SAAQ,eAAsB;IAK7C,CAAC,SAAI;IACL,CAAC,SAAI;IAEb,IAAI,SAAI;IACR,MAAM,SAAI;;IAUV,iBAAiB;IAIjB,oBAAoB;CAGpB;;;;;;;;;;;;;;;;;;AAED,qBAAa,UAAW,SAAQ,eAAsB;IAKrD,IAAI,SAAI;IACR,MAAM,SAAI;IAEF,CAAC,SAAI;IACL,CAAC,SAAI;IAEb,IAAU,GAAG,WAEZ;IAEO,GAAG;IAKX,iBAAiB;IAIjB,oBAAoB;CAGpB;AACD,qBAAa,UAAW,SAAQ,WAAW;IAK1C,IAAI,SAAI;IACR,MAAM,SAAI;IAEF,CAAC,SAAI;IACL,CAAC,SAAI;IAEb,IAAU,GAAG,WAEZ;IAEO,GAAG;IAKX,iBAAiB;IAIjB,oBAAoB;CAGpB;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,OAAO,GAAG;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAC,QAoCpG"} \ No newline at end of file +{"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"AAMA,OAAO,CAAC,MAAM,CAAC;IACd,SAAS,MAAM,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,CAAA;CACpC;AAGD,wBAAgB,kBAAkB,CAAC,CAAC,EAAE;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAC,EAAE,aAAa,SAAI,QAwB1F;;;;;;;;;;;;;;;;;;;AAED,qBAAa,SAAU,SAAQ,cAAsB;IAK5C,CAAC,SAAI;IACL,CAAC,SAAI;IAEb,IAAI,SAAI;IACR,MAAM,SAAI;IAEV,iBAAiB;IAOjB,oBAAoB;CAGpB;;;;;;;;;;;;;;;;;;;AAED,qBAAa,UAAW,SAAQ,eAAsB;IAK7C,CAAC,SAAI;IACL,CAAC,SAAI;IAEb,IAAI,SAAI;IACR,MAAM,SAAI;;IAUV,iBAAiB;IAIjB,oBAAoB;CAGpB;;;;;;;;;;;;;;;;;;;AAED,qBAAa,UAAW,SAAQ,eAAsB;IAKrD,IAAI,SAAI;IACR,MAAM,SAAI;IAEF,CAAC,SAAI;IACL,CAAC,SAAI;IAEb,IAAU,GAAG,WAEZ;IAEO,GAAG;IAKX,iBAAiB;IAIjB,oBAAoB;CAGpB;AACD,qBAAa,UAAW,SAAQ,WAAW;IAK1C,IAAI,SAAI;IACR,MAAM,SAAI;IAEF,CAAC,SAAI;IACL,CAAC,SAAI;IAEb,IAAU,GAAG,WAEZ;IAEO,GAAG;IAKX,iBAAiB;IAIjB,oBAAoB;CAGpB;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,OAAO,GAAG;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAC,QAoCpG"} \ No newline at end of file diff --git a/dist/mixins/Effectful.d.ts b/dist/mixins/Effectful.d.ts index 7ed730c..dcb993e 100644 --- a/dist/mixins/Effectful.d.ts +++ b/dist/mixins/Effectful.d.ts @@ -75,6 +75,15 @@ export declare function Effectful(Base: T): { * they can all be stopped with `this.stopEffects()`. */ createEffect(fn: () => void): void; + /** + * Adds an effect function to the list of tracked effects without + * starting it. This is useful for adding an effect, then using + * `startEffects()` later to start all effects at once. + * + * The `@effect` decorator uses this internally when its `autoStart` + * option is set to `false`. + */ + addEffectFn(fn: () => void): void; "__#1@#isRestarting": boolean; /** * Start all effects again. This will recreate all effects that were @@ -150,6 +159,15 @@ declare const Effects_base: { * they can all be stopped with `this.stopEffects()`. */ createEffect(fn: () => void): void; + /** + * Adds an effect function to the list of tracked effects without + * starting it. This is useful for adding an effect, then using + * `startEffects()` later to start all effects at once. + * + * The `@effect` decorator uses this internally when its `autoStart` + * option is set to `false`. + */ + addEffectFn(fn: () => void): void; "__#1@#isRestarting": boolean; /** * Start all effects again. This will recreate all effects that were diff --git a/dist/mixins/Effectful.d.ts.map b/dist/mixins/Effectful.d.ts.map index 4fb0659..4f993da 100644 --- a/dist/mixins/Effectful.d.ts.map +++ b/dist/mixins/Effectful.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Effectful.d.ts","sourceRoot":"","sources":["../../src/mixins/Effectful.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,KAAK,EAAmD,MAAM,UAAU,CAAA;AACrF,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,8BAA8B,CAAA;AAIhE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgEG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,cAAc,EAAE,IAAI,EAAE,CAAC;;iCAKvC,KAAK,CAAC,MAAM,IAAI,CAAC;;QAGnC;;;;WAIG;yBACc,MAAM,IAAI;;QAO3B;;;;;;;;;;;;;;;;;;;;;;;;;;;WA2BG;;QAcH;;WAEG;;QAQH;;;;;;;;;;;;;;;;;;;;;;;;WAwBG;;uBAMK,KAAK,GAAG,IAAI;yBACV,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI;iCAEX,MAAM,IAAI;;MAgC7B;;;wCAnI+B,IAAI;;QAGlC;;;;WAIG;+BACoB,IAAI;;QAO3B;;;;;;;;;;;;;;;;;;;;;;;;;;;WA2BG;;QAcH;;WAEG;;QAQH;;;;;;;;;;;;;;;;;;;;;;;;WAwBG;;uBAMK,KAAK,GAAG,IAAI;gCACH,IAAI;uCAEG,IAAI;;;;;AAyC9B;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,OAAQ,SAAQ,YAAmB;CAAG"} \ No newline at end of file +{"version":3,"file":"Effectful.d.ts","sourceRoot":"","sources":["../../src/mixins/Effectful.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,KAAK,EAAmD,MAAM,UAAU,CAAA;AACrF,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,8BAA8B,CAAA;AAIhE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgEG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,cAAc,EAAE,IAAI,EAAE,CAAC;;iCAKvC,KAAK,CAAC,MAAM,IAAI,CAAC;;QAGnC;;;;WAIG;yBACc,MAAM,IAAI;QAK3B;;;;;;;WAOG;wBACa,MAAM,IAAI;;QAM1B;;;;;;;;;;;;;;;;;;;;;;;;;;;WA2BG;;QAcH;;WAEG;;QAQH;;;;;;;;;;;;;;;;;;;;;;;;WAwBG;;uBAMK,KAAK,GAAG,IAAI;yBACV,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI;iCAEX,MAAM,IAAI;;MAgC7B;;;wCA/I+B,IAAI;;QAGlC;;;;WAIG;+BACoB,IAAI;QAK3B;;;;;;;WAOG;8BACmB,IAAI;;QAM1B;;;;;;;;;;;;;;;;;;;;;;;;;;;WA2BG;;QAcH;;WAEG;;QAQH;;;;;;;;;;;;;;;;;;;;;;;;WAwBG;;uBAMK,KAAK,GAAG,IAAI;gCACH,IAAI;uCAEG,IAAI;;;;;AAyC9B;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,OAAQ,SAAQ,YAAmB;CAAG"} \ No newline at end of file diff --git a/dist/mixins/Effectful.js b/dist/mixins/Effectful.js index 0e6f267..f65f654 100644 --- a/dist/mixins/Effectful.js +++ b/dist/mixins/Effectful.js @@ -81,6 +81,18 @@ export function Effectful(Base) { this.startEffects(); this.#createEffect(fn); } + + /** + * Adds an effect function to the list of tracked effects without + * starting it. This is useful for adding an effect, then using + * `startEffects()` later to start all effects at once. + * + * The `@effect` decorator uses this internally when its `autoStart` + * option is set to `false`. + */ + addEffectFn(fn) { + this.#effectFunctions.push(fn); + } #isRestarting = false; /** diff --git a/dist/mixins/Effectful.js.map b/dist/mixins/Effectful.js.map index 4a5a1f1..c1ef869 100644 --- a/dist/mixins/Effectful.js.map +++ b/dist/mixins/Effectful.js.map @@ -1 +1 @@ -{"version":3,"file":"Effectful.js","names":["createEffect","createRoot","getOwner","runWithOwner","isInstance","Symbol","Effectful","Base","prototype","Error","EffectfulClass","effectFunctions","started","fn","startEffects","isRestarting","stopEffects","dispose","clearEffects","owner","#createEffect","push","Object","defineProperty","hasInstance","value","instanceCheck","obj","Effects"],"sources":["../../src/mixins/Effectful.ts"],"sourcesContent":["import {type Owner, createEffect, createRoot, getOwner, runWithOwner} from 'solid-js'\nimport type {AnyConstructor} from 'lowclass/dist/Constructor.js'\n\nconst isInstance = Symbol()\n\n/**\n * @class Effectful -\n *\n * `mixin`\n *\n * Create Solid.js effects using `this.createEffect(fn)` and easily stop them\n * all by calling `this.stopEffects()`.\n *\n * Example:\n *\n * ```js\n * import {signal} from 'classy-solid'\n * import {foo} from 'somewhere'\n * import {BaseClass} from 'some-lib'\n *\n * class MyClass extends Effectful(BaseClass) {\n * @signal bar = 0\n *\n * constructor() {\n * super()\n *\n * // Log `foo` and `bar` any time either of them change.\n * this.createEffect(() => {\n * console.log('foo, bar:', foo(), this.bar)\n * })\n *\n * // Log only `bar` any time it changes.\n * this.createEffect(() => {\n * console.log('bar:', this.bar)\n * })\n * }\n *\n * dispose() {\n * // Later, stop both of the effects.\n * this.stopEffects()\n * }\n * }\n * ```\n *\n * This pairs nicely with the `@effect` decorator. The previous example could be\n * rewritten as:\n *\n * ```js\n * import {signal, effect} from 'classy-solid'\n * import {foo} from 'somewhere'\n * import {BaseClass} from 'some-lib'\n *\n * class MyClass extends Effectful(BaseClass) {\n * @signal bar = 0\n *\n * @effect logFooBar() {\n * console.log('foo, bar:', foo(), this.bar)\n * }\n *\n * @effect logBar() {\n * console.log('bar:', this.bar)\n * }\n *\n * dispose() {\n * // Later, stop both of the effects.\n * this.stopEffects()\n * }\n * }\n * ```\n */\nexport function Effectful(Base: T) {\n\tif (Base.prototype instanceof Effectful)\n\t\tthrow new Error('Class already extends Effectful, no need to apply the mixin again.')\n\n\tclass EffectfulClass extends Base {\n\t\t#effectFunctions: Array<() => void> = []\n\t\t#started = true\n\n\t\t/**\n\t\t * Create a Solid.js effect. The difference from regular\n\t\t * `createEffect()` is that `this` tracks the effects created, so that\n\t\t * they can all be stopped with `this.stopEffects()`.\n\t\t */\n\t\tcreateEffect(fn: () => void) {\n\t\t\tthis.startEffects()\n\t\t\tthis.#createEffect(fn)\n\t\t}\n\n\t\t#isRestarting = false\n\n\t\t/**\n\t\t * Start all effects again. This will recreate all effects that were\n\t\t * previously created with `createEffect()` and stopped with `stopEffects()`.\n\t\t *\n\t\t * Example with a custom element class using the @effect decorator:\n\t\t *\n\t\t * ```ts\n\t\t * const [someSignal, setSomeSignal] = createSignal(0)\n\t\t *\n\t\t * class MyElement extends Effectful(HTMLElement) {\n\t\t * @effect logSignal() {\n\t\t * console.log('someSignal:', someSignal())\n\t\t * }\n\t\t *\n\t\t * connectedCallback() {\n\t\t * this.startEffects()\n\t\t * }\n\t\t *\n\t\t * disconnectedCallback() {\n\t\t * this.stopEffects()\n\t\t * }\n\t\t * }\n\t\t * ```\n\t\t *\n\t\t * The logging of `someSignal` will happen any time `someSignal` changes\n\t\t * only while the element is connected, and but not when it is\n\t\t * disconnected.\n\t\t */\n\t\tstartEffects() {\n\t\t\tif (this.#started) return\n\t\t\tthis.#started = true\n\n\t\t\t// Restart all stored effect functions\n\t\t\tthis.#isRestarting = true\n\t\t\ttry {\n\t\t\t\tfor (const fn of this.#effectFunctions) this.#createEffect(fn)\n\t\t\t} finally {\n\t\t\t\tthis.#isRestarting = false\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Stop all of the effects that were created.\n\t\t */\n\t\tstopEffects() {\n\t\t\tif (!this.#started) return\n\t\t\tthis.#started = false\n\n\t\t\tthis.#dispose?.()\n\t\t}\n\n\t\t/**\n\t\t * Stop all effects and clear the stored effect functions. After calling\n\t\t * this, `startEffects()` will not restart any effects because there are\n\t\t * none stored. This is useful for cleanup scenarios where you'll make\n\t\t * new effects using `this.createEffect()` instead of restarting old\n\t\t * ones, namely for backwards compatibility for example with custom\n\t\t * elements that may be disconnected and reconnected to the DOM and\n\t\t * currently call `this.createEffect()` in connectedCallback. Example:\n\t\t *\n\t\t * ```ts\n\t\t * class MyElement extends Effectful(HTMLElement) {\n\t\t * connectedCallback() {\n\t\t * // Create any number of effects on connect.\n\t\t * this.createEffect(() => {...})\n\t\t * this.createEffect(() => {...})\n\t\t * this.createEffect(() => {...})\n\t\t * }\n\t\t *\n\t\t * disconnectedCallback() {\n\t\t * // Clean up all effects on disconnect.\n\t\t * this.clearEffects()\n\t\t * }\n\t\t * }\n\t\t * ```\n\t\t */\n\t\tclearEffects() {\n\t\t\tthis.stopEffects()\n\t\t\tthis.#effectFunctions = []\n\t\t}\n\n\t\t#owner: Owner | null = null\n\t\t#dispose: (() => void) | null = null\n\n\t\t#createEffect(fn: () => void) {\n\t\t\tconst owner = getOwner()\n\n\t\t\t// If nested in an existing owner (f.e. nested effect), delegate to\n\t\t\t// regular createEffect.\n\t\t\tif (owner) return createEffect(fn)\n\n\t\t\t// Store top-level effect functions so they can be replayed when\n\t\t\t// startEffects() is called\n\t\t\tif (!this.#isRestarting) this.#effectFunctions.push(fn)\n\n\t\t\t// If top-level call either attach to an existing root, or make a\n\t\t\t// new one if we don't have one yet.\n\t\t\tif (this.#owner) runWithOwner(this.#owner, () => createEffect(fn))\n\t\t\telse {\n\t\t\t\tcreateRoot(dispose => {\n\t\t\t\t\tthis.#owner = getOwner()\n\t\t\t\t\tthis.#dispose = () => {\n\t\t\t\t\t\tdispose()\n\t\t\t\t\t\tthis.#owner = null\n\t\t\t\t\t}\n\t\t\t\t\tcreateEffect(fn)\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n\n\t;(EffectfulClass.prototype as any)[isInstance] = true\n\n\tObject.defineProperty(EffectfulClass, Symbol.hasInstance, {value: instanceCheck})\n\n\treturn EffectfulClass\n}\n\nObject.defineProperty(Effectful, Symbol.hasInstance, {value: instanceCheck})\n\nfunction instanceCheck(obj: any): boolean {\n\tif (!obj || typeof obj !== 'object') return false\n\treturn isInstance in obj\n}\n\n/**\n * Shortcut for instantiating or extending directly instead of using the mixin.\n * F.e.\n *\n * ```js\n * class Car extends Effects {\n * start() {\n * this.createEffect(() => {...})\n * this.createEffect(() => {...})\n * }\n * stop() {\n * this.stopEffects()\n * }\n * }\n *\n * const specialEffects = new Effects()\n * specialEffects.createEffect(() => {})\n * // ...later\n * specialEffects.stopEffects()\n * ```\n */\nexport class Effects extends Effectful(class {}) {}\n"],"mappings":"AAAA,SAAoBA,YAAY,EAAEC,UAAU,EAAEC,QAAQ,EAAEC,YAAY,QAAO,UAAU;AAGrF,MAAMC,UAAU,GAAGC,MAAM,CAAC,CAAC;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,SAASA,CAA2BC,IAAO,EAAE;EAC5D,IAAIA,IAAI,CAACC,SAAS,YAAYF,SAAS,EACtC,MAAM,IAAIG,KAAK,CAAC,oEAAoE,CAAC;EAEtF,MAAMC,cAAc,SAASH,IAAI,CAAC;IACjC,CAACI,eAAe,GAAsB,EAAE;IACxC,CAACC,OAAO,GAAG,IAAI;;IAEf;AACF;AACA;AACA;AACA;IACEZ,YAAYA,CAACa,EAAc,EAAE;MAC5B,IAAI,CAACC,YAAY,CAAC,CAAC;MACnB,IAAI,CAAC,CAACd,YAAY,CAACa,EAAE,CAAC;IACvB;IAEA,CAACE,YAAY,GAAG,KAAK;;IAErB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACED,YAAYA,CAAA,EAAG;MACd,IAAI,IAAI,CAAC,CAACF,OAAO,EAAE;MACnB,IAAI,CAAC,CAACA,OAAO,GAAG,IAAI;;MAEpB;MACA,IAAI,CAAC,CAACG,YAAY,GAAG,IAAI;MACzB,IAAI;QACH,KAAK,MAAMF,EAAE,IAAI,IAAI,CAAC,CAACF,eAAe,EAAE,IAAI,CAAC,CAACX,YAAY,CAACa,EAAE,CAAC;MAC/D,CAAC,SAAS;QACT,IAAI,CAAC,CAACE,YAAY,GAAG,KAAK;MAC3B;IACD;;IAEA;AACF;AACA;IACEC,WAAWA,CAAA,EAAG;MACb,IAAI,CAAC,IAAI,CAAC,CAACJ,OAAO,EAAE;MACpB,IAAI,CAAC,CAACA,OAAO,GAAG,KAAK;MAErB,IAAI,CAAC,CAACK,OAAO,GAAG,CAAC;IAClB;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACEC,YAAYA,CAAA,EAAG;MACd,IAAI,CAACF,WAAW,CAAC,CAAC;MAClB,IAAI,CAAC,CAACL,eAAe,GAAG,EAAE;IAC3B;IAEA,CAACQ,KAAK,GAAiB,IAAI;IAC3B,CAACF,OAAO,GAAwB,IAAI;IAEpC,CAACjB,YAAYoB,CAACP,EAAc,EAAE;MAC7B,MAAMM,KAAK,GAAGjB,QAAQ,CAAC,CAAC;;MAExB;MACA;MACA,IAAIiB,KAAK,EAAE,OAAOnB,YAAY,CAACa,EAAE,CAAC;;MAElC;MACA;MACA,IAAI,CAAC,IAAI,CAAC,CAACE,YAAY,EAAE,IAAI,CAAC,CAACJ,eAAe,CAACU,IAAI,CAACR,EAAE,CAAC;;MAEvD;MACA;MACA,IAAI,IAAI,CAAC,CAACM,KAAK,EAAEhB,YAAY,CAAC,IAAI,CAAC,CAACgB,KAAK,EAAE,MAAMnB,YAAY,CAACa,EAAE,CAAC,CAAC,MAC7D;QACJZ,UAAU,CAACgB,OAAO,IAAI;UACrB,IAAI,CAAC,CAACE,KAAK,GAAGjB,QAAQ,CAAC,CAAC;UACxB,IAAI,CAAC,CAACe,OAAO,GAAG,MAAM;YACrBA,OAAO,CAAC,CAAC;YACT,IAAI,CAAC,CAACE,KAAK,GAAG,IAAI;UACnB,CAAC;UACDnB,YAAY,CAACa,EAAE,CAAC;QACjB,CAAC,CAAC;MACH;IACD;EACD;EAEA;EAAEH,cAAc,CAACF,SAAS,CAASJ,UAAU,CAAC,GAAG,IAAI;EAErDkB,MAAM,CAACC,cAAc,CAACb,cAAc,EAAEL,MAAM,CAACmB,WAAW,EAAE;IAACC,KAAK,EAAEC;EAAa,CAAC,CAAC;EAEjF,OAAOhB,cAAc;AACtB;AAEAY,MAAM,CAACC,cAAc,CAACjB,SAAS,EAAED,MAAM,CAACmB,WAAW,EAAE;EAACC,KAAK,EAAEC;AAAa,CAAC,CAAC;AAE5E,SAASA,aAAaA,CAACC,GAAQ,EAAW;EACzC,IAAI,CAACA,GAAG,IAAI,OAAOA,GAAG,KAAK,QAAQ,EAAE,OAAO,KAAK;EACjD,OAAOvB,UAAU,IAAIuB,GAAG;AACzB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,OAAO,SAAStB,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC","ignoreList":[]} \ No newline at end of file +{"version":3,"file":"Effectful.js","names":["createEffect","createRoot","getOwner","runWithOwner","isInstance","Symbol","Effectful","Base","prototype","Error","EffectfulClass","effectFunctions","started","fn","startEffects","addEffectFn","push","isRestarting","stopEffects","dispose","clearEffects","owner","#createEffect","Object","defineProperty","hasInstance","value","instanceCheck","obj","Effects"],"sources":["../../src/mixins/Effectful.ts"],"sourcesContent":["import {type Owner, createEffect, createRoot, getOwner, runWithOwner} from 'solid-js'\nimport type {AnyConstructor} from 'lowclass/dist/Constructor.js'\n\nconst isInstance = Symbol()\n\n/**\n * @class Effectful -\n *\n * `mixin`\n *\n * Create Solid.js effects using `this.createEffect(fn)` and easily stop them\n * all by calling `this.stopEffects()`.\n *\n * Example:\n *\n * ```js\n * import {signal} from 'classy-solid'\n * import {foo} from 'somewhere'\n * import {BaseClass} from 'some-lib'\n *\n * class MyClass extends Effectful(BaseClass) {\n * @signal bar = 0\n *\n * constructor() {\n * super()\n *\n * // Log `foo` and `bar` any time either of them change.\n * this.createEffect(() => {\n * console.log('foo, bar:', foo(), this.bar)\n * })\n *\n * // Log only `bar` any time it changes.\n * this.createEffect(() => {\n * console.log('bar:', this.bar)\n * })\n * }\n *\n * dispose() {\n * // Later, stop both of the effects.\n * this.stopEffects()\n * }\n * }\n * ```\n *\n * This pairs nicely with the `@effect` decorator. The previous example could be\n * rewritten as:\n *\n * ```js\n * import {signal, effect} from 'classy-solid'\n * import {foo} from 'somewhere'\n * import {BaseClass} from 'some-lib'\n *\n * class MyClass extends Effectful(BaseClass) {\n * @signal bar = 0\n *\n * @effect logFooBar() {\n * console.log('foo, bar:', foo(), this.bar)\n * }\n *\n * @effect logBar() {\n * console.log('bar:', this.bar)\n * }\n *\n * dispose() {\n * // Later, stop both of the effects.\n * this.stopEffects()\n * }\n * }\n * ```\n */\nexport function Effectful(Base: T) {\n\tif (Base.prototype instanceof Effectful)\n\t\tthrow new Error('Class already extends Effectful, no need to apply the mixin again.')\n\n\tclass EffectfulClass extends Base {\n\t\t#effectFunctions: Array<() => void> = []\n\t\t#started = true\n\n\t\t/**\n\t\t * Create a Solid.js effect. The difference from regular\n\t\t * `createEffect()` is that `this` tracks the effects created, so that\n\t\t * they can all be stopped with `this.stopEffects()`.\n\t\t */\n\t\tcreateEffect(fn: () => void) {\n\t\t\tthis.startEffects()\n\t\t\tthis.#createEffect(fn)\n\t\t}\n\n\t\t/**\n\t\t * Adds an effect function to the list of tracked effects without\n\t\t * starting it. This is useful for adding an effect, then using\n\t\t * `startEffects()` later to start all effects at once.\n\t\t *\n\t\t * The `@effect` decorator uses this internally when its `autoStart`\n\t\t * option is set to `false`.\n\t\t */\n\t\taddEffectFn(fn: () => void) {\n\t\t\tthis.#effectFunctions.push(fn)\n\t\t}\n\n\t\t#isRestarting = false\n\n\t\t/**\n\t\t * Start all effects again. This will recreate all effects that were\n\t\t * previously created with `createEffect()` and stopped with `stopEffects()`.\n\t\t *\n\t\t * Example with a custom element class using the @effect decorator:\n\t\t *\n\t\t * ```ts\n\t\t * const [someSignal, setSomeSignal] = createSignal(0)\n\t\t *\n\t\t * class MyElement extends Effectful(HTMLElement) {\n\t\t * @effect logSignal() {\n\t\t * console.log('someSignal:', someSignal())\n\t\t * }\n\t\t *\n\t\t * connectedCallback() {\n\t\t * this.startEffects()\n\t\t * }\n\t\t *\n\t\t * disconnectedCallback() {\n\t\t * this.stopEffects()\n\t\t * }\n\t\t * }\n\t\t * ```\n\t\t *\n\t\t * The logging of `someSignal` will happen any time `someSignal` changes\n\t\t * only while the element is connected, and but not when it is\n\t\t * disconnected.\n\t\t */\n\t\tstartEffects() {\n\t\t\tif (this.#started) return\n\t\t\tthis.#started = true\n\n\t\t\t// Restart all stored effect functions\n\t\t\tthis.#isRestarting = true\n\t\t\ttry {\n\t\t\t\tfor (const fn of this.#effectFunctions) this.#createEffect(fn)\n\t\t\t} finally {\n\t\t\t\tthis.#isRestarting = false\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Stop all of the effects that were created.\n\t\t */\n\t\tstopEffects() {\n\t\t\tif (!this.#started) return\n\t\t\tthis.#started = false\n\n\t\t\tthis.#dispose?.()\n\t\t}\n\n\t\t/**\n\t\t * Stop all effects and clear the stored effect functions. After calling\n\t\t * this, `startEffects()` will not restart any effects because there are\n\t\t * none stored. This is useful for cleanup scenarios where you'll make\n\t\t * new effects using `this.createEffect()` instead of restarting old\n\t\t * ones, namely for backwards compatibility for example with custom\n\t\t * elements that may be disconnected and reconnected to the DOM and\n\t\t * currently call `this.createEffect()` in connectedCallback. Example:\n\t\t *\n\t\t * ```ts\n\t\t * class MyElement extends Effectful(HTMLElement) {\n\t\t * connectedCallback() {\n\t\t * // Create any number of effects on connect.\n\t\t * this.createEffect(() => {...})\n\t\t * this.createEffect(() => {...})\n\t\t * this.createEffect(() => {...})\n\t\t * }\n\t\t *\n\t\t * disconnectedCallback() {\n\t\t * // Clean up all effects on disconnect.\n\t\t * this.clearEffects()\n\t\t * }\n\t\t * }\n\t\t * ```\n\t\t */\n\t\tclearEffects() {\n\t\t\tthis.stopEffects()\n\t\t\tthis.#effectFunctions = []\n\t\t}\n\n\t\t#owner: Owner | null = null\n\t\t#dispose: (() => void) | null = null\n\n\t\t#createEffect(fn: () => void) {\n\t\t\tconst owner = getOwner()\n\n\t\t\t// If nested in an existing owner (f.e. nested effect), delegate to\n\t\t\t// regular createEffect.\n\t\t\tif (owner) return createEffect(fn)\n\n\t\t\t// Store top-level effect functions so they can be replayed when\n\t\t\t// startEffects() is called\n\t\t\tif (!this.#isRestarting) this.#effectFunctions.push(fn)\n\n\t\t\t// If top-level call either attach to an existing root, or make a\n\t\t\t// new one if we don't have one yet.\n\t\t\tif (this.#owner) runWithOwner(this.#owner, () => createEffect(fn))\n\t\t\telse {\n\t\t\t\tcreateRoot(dispose => {\n\t\t\t\t\tthis.#owner = getOwner()\n\t\t\t\t\tthis.#dispose = () => {\n\t\t\t\t\t\tdispose()\n\t\t\t\t\t\tthis.#owner = null\n\t\t\t\t\t}\n\t\t\t\t\tcreateEffect(fn)\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n\n\t;(EffectfulClass.prototype as any)[isInstance] = true\n\n\tObject.defineProperty(EffectfulClass, Symbol.hasInstance, {value: instanceCheck})\n\n\treturn EffectfulClass\n}\n\nObject.defineProperty(Effectful, Symbol.hasInstance, {value: instanceCheck})\n\nfunction instanceCheck(obj: any): boolean {\n\tif (!obj || typeof obj !== 'object') return false\n\treturn isInstance in obj\n}\n\n/**\n * Shortcut for instantiating or extending directly instead of using the mixin.\n * F.e.\n *\n * ```js\n * class Car extends Effects {\n * start() {\n * this.createEffect(() => {...})\n * this.createEffect(() => {...})\n * }\n * stop() {\n * this.stopEffects()\n * }\n * }\n *\n * const specialEffects = new Effects()\n * specialEffects.createEffect(() => {})\n * // ...later\n * specialEffects.stopEffects()\n * ```\n */\nexport class Effects extends Effectful(class {}) {}\n"],"mappings":"AAAA,SAAoBA,YAAY,EAAEC,UAAU,EAAEC,QAAQ,EAAEC,YAAY,QAAO,UAAU;AAGrF,MAAMC,UAAU,GAAGC,MAAM,CAAC,CAAC;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,SAASA,CAA2BC,IAAO,EAAE;EAC5D,IAAIA,IAAI,CAACC,SAAS,YAAYF,SAAS,EACtC,MAAM,IAAIG,KAAK,CAAC,oEAAoE,CAAC;EAEtF,MAAMC,cAAc,SAASH,IAAI,CAAC;IACjC,CAACI,eAAe,GAAsB,EAAE;IACxC,CAACC,OAAO,GAAG,IAAI;;IAEf;AACF;AACA;AACA;AACA;IACEZ,YAAYA,CAACa,EAAc,EAAE;MAC5B,IAAI,CAACC,YAAY,CAAC,CAAC;MACnB,IAAI,CAAC,CAACd,YAAY,CAACa,EAAE,CAAC;IACvB;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;IACEE,WAAWA,CAACF,EAAc,EAAE;MAC3B,IAAI,CAAC,CAACF,eAAe,CAACK,IAAI,CAACH,EAAE,CAAC;IAC/B;IAEA,CAACI,YAAY,GAAG,KAAK;;IAErB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACEH,YAAYA,CAAA,EAAG;MACd,IAAI,IAAI,CAAC,CAACF,OAAO,EAAE;MACnB,IAAI,CAAC,CAACA,OAAO,GAAG,IAAI;;MAEpB;MACA,IAAI,CAAC,CAACK,YAAY,GAAG,IAAI;MACzB,IAAI;QACH,KAAK,MAAMJ,EAAE,IAAI,IAAI,CAAC,CAACF,eAAe,EAAE,IAAI,CAAC,CAACX,YAAY,CAACa,EAAE,CAAC;MAC/D,CAAC,SAAS;QACT,IAAI,CAAC,CAACI,YAAY,GAAG,KAAK;MAC3B;IACD;;IAEA;AACF;AACA;IACEC,WAAWA,CAAA,EAAG;MACb,IAAI,CAAC,IAAI,CAAC,CAACN,OAAO,EAAE;MACpB,IAAI,CAAC,CAACA,OAAO,GAAG,KAAK;MAErB,IAAI,CAAC,CAACO,OAAO,GAAG,CAAC;IAClB;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACEC,YAAYA,CAAA,EAAG;MACd,IAAI,CAACF,WAAW,CAAC,CAAC;MAClB,IAAI,CAAC,CAACP,eAAe,GAAG,EAAE;IAC3B;IAEA,CAACU,KAAK,GAAiB,IAAI;IAC3B,CAACF,OAAO,GAAwB,IAAI;IAEpC,CAACnB,YAAYsB,CAACT,EAAc,EAAE;MAC7B,MAAMQ,KAAK,GAAGnB,QAAQ,CAAC,CAAC;;MAExB;MACA;MACA,IAAImB,KAAK,EAAE,OAAOrB,YAAY,CAACa,EAAE,CAAC;;MAElC;MACA;MACA,IAAI,CAAC,IAAI,CAAC,CAACI,YAAY,EAAE,IAAI,CAAC,CAACN,eAAe,CAACK,IAAI,CAACH,EAAE,CAAC;;MAEvD;MACA;MACA,IAAI,IAAI,CAAC,CAACQ,KAAK,EAAElB,YAAY,CAAC,IAAI,CAAC,CAACkB,KAAK,EAAE,MAAMrB,YAAY,CAACa,EAAE,CAAC,CAAC,MAC7D;QACJZ,UAAU,CAACkB,OAAO,IAAI;UACrB,IAAI,CAAC,CAACE,KAAK,GAAGnB,QAAQ,CAAC,CAAC;UACxB,IAAI,CAAC,CAACiB,OAAO,GAAG,MAAM;YACrBA,OAAO,CAAC,CAAC;YACT,IAAI,CAAC,CAACE,KAAK,GAAG,IAAI;UACnB,CAAC;UACDrB,YAAY,CAACa,EAAE,CAAC;QACjB,CAAC,CAAC;MACH;IACD;EACD;EAEA;EAAEH,cAAc,CAACF,SAAS,CAASJ,UAAU,CAAC,GAAG,IAAI;EAErDmB,MAAM,CAACC,cAAc,CAACd,cAAc,EAAEL,MAAM,CAACoB,WAAW,EAAE;IAACC,KAAK,EAAEC;EAAa,CAAC,CAAC;EAEjF,OAAOjB,cAAc;AACtB;AAEAa,MAAM,CAACC,cAAc,CAAClB,SAAS,EAAED,MAAM,CAACoB,WAAW,EAAE;EAACC,KAAK,EAAEC;AAAa,CAAC,CAAC;AAE5E,SAASA,aAAaA,CAACC,GAAQ,EAAW;EACzC,IAAI,CAACA,GAAG,IAAI,OAAOA,GAAG,KAAK,QAAQ,EAAE,OAAO,KAAK;EACjD,OAAOxB,UAAU,IAAIwB,GAAG;AACzB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,OAAO,SAASvB,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC","ignoreList":[]} \ No newline at end of file diff --git a/dist/mixins/Effectful.test.js b/dist/mixins/Effectful.test.js index a3be9b5..136ed5a 100644 --- a/dist/mixins/Effectful.test.js +++ b/dist/mixins/Effectful.test.js @@ -7,17 +7,68 @@ import { createSignal } from 'solid-js'; import { Effectful, Effects } from './Effectful.js'; import { signal } from '../decorators/signal.js'; import { testElementEffects } from '../index.test.js'; +import { effect } from '../decorators/effect.js'; describe('classy-solid', () => { describe('Effectful mixin / Effects', () => { + let last = null; + let runs = 0; it('createEffect runs immediately, stopEffects stops further runs, startEffects runs effects again', () => { + last = null; + runs = 0; const [s, setS] = createSignal(1); const e = new Effects(); - let last = null; - let runs = 0; e.createEffect(() => { runs++; last = s(); }); + testEffects(e, s, setS); + }); + it('effects stopped initially with .stopEffects()', () => { + last = null; + runs = 0; + const [s, setS] = createSignal(1); + const e = new Effects(); + e.stopEffects(); // stop immediately after creation + + // does not auto start + e.addEffectFn(() => { + runs++; + last = s(); + }); + expect(last).toBe(null); + expect(runs).toBe(0); + e.startEffects(); // now start effects + + testEffects(e, s, setS); + }); + it('effects stopped initially with static autoStartEffects = false', () => { + let _initProto; + last = null; + runs = 0; + class TestEffects extends Effects { + static { + [_initProto] = _applyDecs(this, [], [[effect, 2, "testEffect"]], 0, void 0, Effects).e; + } + constructor(...args) { + super(...args); + _initProto(this); + } + static autoStartEffects = false; + testEffect() { + runs++; + last = s(); + } + } + const [s, setS] = createSignal(1); + const e = new TestEffects(); // effects stopped initially + + expect(last).toBe(null); + expect(runs).toBe(0); + e.startEffects(); // now start effects + + testEffects(e, s, setS); + }); + function testEffects(e, s, setS) { expect(last).toBe(1); expect(runs).toBe(1); setS(2); @@ -54,6 +105,7 @@ describe('classy-solid', () => { // Add a new effect after clearing previous ones + // auto starts e.createEffect(() => { runs++; last = s(); @@ -63,7 +115,7 @@ describe('classy-solid', () => { setS(7); expect(last).toBe(7); expect(runs).toBe(6); - }); + } it('startEffects does not duplicate effects', () => { const [s, setS] = createSignal(1); const e = new Effects(); diff --git a/dist/mixins/Effectful.test.js.map b/dist/mixins/Effectful.test.js.map index fad5254..d8417f1 100644 --- a/dist/mixins/Effectful.test.js.map +++ b/dist/mixins/Effectful.test.js.map @@ -1 +1 @@ -{"version":3,"file":"Effectful.test.js","names":["createSignal","Effectful","Effects","signal","testElementEffects","describe","it","s","setS","e","last","runs","createEffect","expect","toBe","stopEffects","startEffects","clearEffects","_init_a","_init_extra_a","MyEffects","_applyDecs","double","constructor","a","me","_Effectful","_init_baseSignal","_init_extra_baseSignal","_init_derivedSignal","_init_extra_derivedSignal","Base","Object","baseSignal","baseValue","Derived","derivedSignal","derivedValue","d","MyEffectful","setA","b","setB","outerRuns","innerRuns","outer","inner","toThrow","el","document","createElement","result"],"sources":["../../src/mixins/Effectful.test.ts"],"sourcesContent":["import {createSignal} from 'solid-js'\nimport {Effectful, Effects} from './Effectful.js'\nimport {signal} from '../decorators/signal.js'\nimport {MyElement, MyElement2, MyElement3, testElementEffects} from '../index.test.js'\n\ndescribe('classy-solid', () => {\n\tdescribe('Effectful mixin / Effects', () => {\n\t\tit('createEffect runs immediately, stopEffects stops further runs, startEffects runs effects again', () => {\n\t\t\tconst [s, setS] = createSignal(1)\n\t\t\tconst e = new Effects()\n\n\t\t\tlet last = null\n\t\t\tlet runs = 0\n\t\t\te.createEffect(() => {\n\t\t\t\truns++\n\t\t\t\tlast = s()\n\t\t\t})\n\n\t\t\texpect(last).toBe(1)\n\t\t\texpect(runs).toBe(1)\n\n\t\t\tsetS(2)\n\t\t\texpect(last).toBe(2)\n\t\t\texpect(runs).toBe(2)\n\n\t\t\t// later, stop effects when done (f.e. when custom element disconnected from DOM)...\n\n\t\t\te.stopEffects()\n\t\t\tsetS(3)\n\t\t\texpect(last).toBe(2)\n\t\t\texpect(runs).toBe(2)\n\n\t\t\t// later, start effects again (f.e. when custom element reconnected to DOM)...\n\n\t\t\te.startEffects()\n\t\t\texpect(last).toBe(3)\n\t\t\texpect(runs).toBe(3)\n\n\t\t\tsetS(4)\n\t\t\texpect(last).toBe(4)\n\t\t\texpect(runs).toBe(4)\n\n\t\t\t// Clear all effects.\n\t\t\te.clearEffects()\n\t\t\tsetS(5)\n\t\t\texpect(last).toBe(4)\n\t\t\texpect(runs).toBe(4)\n\n\t\t\te.startEffects() // no effects to start\n\t\t\texpect(last).toBe(4)\n\t\t\texpect(runs).toBe(4)\n\t\t\tsetS(6)\n\t\t\texpect(last).toBe(4)\n\t\t\texpect(runs).toBe(4)\n\n\t\t\t// Add a new effect after clearing previous ones\n\n\t\t\te.createEffect(() => {\n\t\t\t\truns++\n\t\t\t\tlast = s()\n\t\t\t})\n\t\t\texpect(last).toBe(6)\n\t\t\texpect(runs).toBe(5)\n\n\t\t\tsetS(7)\n\t\t\texpect(last).toBe(7)\n\t\t\texpect(runs).toBe(6)\n\t\t})\n\n\t\tit('startEffects does not duplicate effects', () => {\n\t\t\tconst [s, setS] = createSignal(1)\n\t\t\tconst e = new Effects()\n\n\t\t\tlet runs = 0\n\t\t\te.createEffect(() => {\n\t\t\t\truns++\n\t\t\t\ts()\n\t\t\t})\n\n\t\t\texpect(runs).toBe(1)\n\n\t\t\te.startEffects() // should not duplicate effects\n\n\t\t\tsetS(2)\n\t\t\texpect(runs).toBe(2)\n\t\t})\n\n\t\tit('clearEffects prevents effects from restarting', () => {\n\t\t\tconst [s, setS] = createSignal(1)\n\t\t\tconst e = new Effects()\n\n\t\t\tlet runs = 0\n\t\t\te.createEffect(() => {\n\t\t\t\truns++\n\t\t\t\ts()\n\t\t\t})\n\n\t\t\texpect(runs).toBe(1)\n\n\t\t\te.clearEffects()\n\n\t\t\tsetS(2)\n\t\t\texpect(runs).toBe(1)\n\n\t\t\te.startEffects() // should not restart any effects\n\n\t\t\tsetS(3)\n\t\t\texpect(runs).toBe(1)\n\t\t})\n\n\t\tit('can be extended from', () => {\n\t\t\tclass MyEffects extends Effects {\n\t\t\t\tdouble = 0\n\n\t\t\t\tconstructor() {\n\t\t\t\t\tsuper()\n\t\t\t\t\tthis.createEffect(() => {\n\t\t\t\t\t\tthis.double = this.a * 2\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\t@signal a = 1\n\t\t\t}\n\n\t\t\tconst me = new MyEffects()\n\t\t\texpect(me.double).toBe(2)\n\n\t\t\tme.a = 5\n\t\t\texpect(me.double).toBe(10)\n\n\t\t\tme.stopEffects()\n\t\t\tme.a = 10\n\t\t\texpect(me.double).toBe(10)\n\n\t\t\tme.startEffects()\n\t\t\texpect(me.double).toBe(20)\n\t\t})\n\n\t\tit('works with multiple Effectful-derived classes', () => {\n\t\t\tclass Base extends Effectful(Object) {\n\t\t\t\t@signal baseSignal = 1\n\t\t\t\tbaseValue = 0\n\n\t\t\t\tconstructor() {\n\t\t\t\t\tsuper()\n\t\t\t\t\tthis.createEffect(() => {\n\t\t\t\t\t\tthis.baseValue = this.baseSignal * 10\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tclass Derived extends Base {\n\t\t\t\t@signal derivedSignal = 2\n\t\t\t\tderivedValue = 0\n\n\t\t\t\tconstructor() {\n\t\t\t\t\tsuper()\n\t\t\t\t\tthis.createEffect(() => {\n\t\t\t\t\t\tthis.derivedValue = this.derivedSignal * 100\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst d = new Derived()\n\t\t\texpect(d.baseValue).toBe(10)\n\t\t\texpect(d.derivedValue).toBe(200)\n\n\t\t\td.baseSignal = 3\n\t\t\texpect(d.baseValue).toBe(30)\n\n\t\t\td.derivedSignal = 4\n\t\t\texpect(d.derivedValue).toBe(400)\n\n\t\t\td.stopEffects()\n\t\t\td.baseSignal = 5\n\t\t\td.derivedSignal = 6\n\t\t\texpect(d.baseValue).toBe(30)\n\t\t\texpect(d.derivedValue).toBe(400)\n\n\t\t\td.startEffects()\n\t\t\texpect(d.baseValue).toBe(50)\n\t\t\texpect(d.derivedValue).toBe(600)\n\t\t})\n\n\t\tit('supports instanceof checks', () => {\n\t\t\tclass MyEffectful extends Effectful(Object) {}\n\n\t\t\tconst me = new MyEffectful()\n\t\t\texpect(me instanceof Effectful).toBe(true)\n\t\t\texpect(me instanceof MyEffectful).toBe(true)\n\n\t\t\tconst e = new Effects()\n\t\t\texpect(e instanceof Effects).toBe(true)\n\t\t\texpect(e instanceof Effectful).toBe(true)\n\t\t})\n\n\t\tit('allows nested createEffect calls', () => {\n\t\t\tconst [a, setA] = createSignal(0)\n\t\t\tconst [b, setB] = createSignal(0)\n\t\t\tconst e = new Effects()\n\n\t\t\tlet outerRuns = 0\n\t\t\tlet innerRuns = 0\n\n\t\t\te.createEffect(function outer() {\n\t\t\t\touterRuns++\n\t\t\t\ta()\n\n\t\t\t\te.createEffect(function inner() {\n\t\t\t\t\tinnerRuns++\n\t\t\t\t\tb()\n\t\t\t\t})\n\t\t\t})\n\n\t\t\texpect(outerRuns).toBe(1)\n\t\t\texpect(innerRuns).toBe(1)\n\n\t\t\te.startEffects() // should not duplicate effects (already started)\n\n\t\t\texpect(outerRuns).toBe(1)\n\t\t\texpect(innerRuns).toBe(1)\n\n\t\t\tsetA(1)\n\t\t\texpect(outerRuns).toBe(2)\n\t\t\texpect(innerRuns).toBe(2) // inner effect runs because outer effect re-ran\n\n\t\t\tsetB(1)\n\t\t\texpect(outerRuns).toBe(2)\n\t\t\texpect(innerRuns).toBe(3) // inner effect runs independently\n\n\t\t\te.stopEffects()\n\n\t\t\texpect(outerRuns).toBe(2)\n\t\t\texpect(innerRuns).toBe(3)\n\n\t\t\te.startEffects()\n\n\t\t\texpect(outerRuns).toBe(3)\n\t\t\texpect(innerRuns).toBe(4) // inner effect runs because outer effect re-ran\n\n\t\t\tsetB(2)\n\t\t\texpect(outerRuns).toBe(3)\n\t\t\texpect(innerRuns).toBe(5) // inner effect runs independently\n\t\t})\n\n\t\tdescribe('invalid usages', () => {\n\t\t\tit('prevents multiple Effectful mixin applications', () => {\n\t\t\t\texpect(() => {\n\t\t\t\t\tclass Base extends Effectful(Object) {}\n\t\t\t\t\tclass Derived extends Effectful(Base) {}\n\t\t\t\t\tDerived\n\t\t\t\t}).toThrow('Class already extends Effectful, no need to apply the mixin again.')\n\t\t\t})\n\t\t})\n\n\t\tdescribe('usage with custom elements', () => {\n\t\t\tit('createEffect in connectedCallback, clearEffects in disconnectedCallback', () => {\n\t\t\t\tconst el = document.createElement('my-element') as MyElement\n\t\t\t\texpect(el.result).toBe(0)\n\t\t\t\texpect(el.runs).toBe(0)\n\n\t\t\t\ttestElementEffects(el)\n\t\t\t})\n\n\t\t\tit('createEffect in constructor, startEffects in connectedCallback, stopEffects in disconnectedCallback', () => {\n\t\t\t\tconst el = document.createElement('my-element2') as MyElement2\n\t\t\t\texpect(el.result).toBe(1 + 2)\n\t\t\t\texpect(el.runs).toBe(1) // already ran in constructor\n\n\t\t\t\ttestElementEffects(el)\n\t\t\t})\n\n\t\t\tit('@effect methods, startEffects in connectedCallback, stopEffects in disconnectedCallback', () => {\n\t\t\t\tconst el = document.createElement('my-element3') as MyElement3\n\t\t\t\texpect(el.result).toBe(1 + 2)\n\t\t\t\texpect(el.runs).toBe(1) // already ran in constructor\n\n\t\t\t\ttestElementEffects(el)\n\t\t\t})\n\t\t})\n\t})\n})\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file +{"version":3,"file":"Effectful.test.js","names":["createSignal","Effectful","Effects","signal","testElementEffects","effect","describe","last","runs","it","s","setS","e","createEffect","testEffects","stopEffects","addEffectFn","expect","toBe","startEffects","_initProto","TestEffects","_applyDecs","constructor","args","autoStartEffects","testEffect","clearEffects","_init_a","_init_extra_a","MyEffects","double","a","me","_Effectful","_init_baseSignal","_init_extra_baseSignal","_init_derivedSignal","_init_extra_derivedSignal","Base","Object","baseSignal","baseValue","Derived","derivedSignal","derivedValue","d","MyEffectful","setA","b","setB","outerRuns","innerRuns","outer","inner","toThrow","el","document","createElement","result"],"sources":["../../src/mixins/Effectful.test.ts"],"sourcesContent":["import {createSignal, type Accessor, type Setter} from 'solid-js'\nimport {Effectful, Effects} from './Effectful.js'\nimport {signal} from '../decorators/signal.js'\nimport {MyElement, MyElement2, MyElement3, testElementEffects} from '../index.test.js'\nimport {effect} from '../decorators/effect.js'\n\ndescribe('classy-solid', () => {\n\tdescribe('Effectful mixin / Effects', () => {\n\t\tlet last: number | null = null\n\t\tlet runs = 0\n\n\t\tit('createEffect runs immediately, stopEffects stops further runs, startEffects runs effects again', () => {\n\t\t\tlast = null\n\t\t\truns = 0\n\n\t\t\tconst [s, setS] = createSignal(1)\n\t\t\tconst e = new Effects()\n\n\t\t\te.createEffect(() => {\n\t\t\t\truns++\n\t\t\t\tlast = s()\n\t\t\t})\n\n\t\t\ttestEffects(e, s, setS)\n\t\t})\n\n\t\tit('effects stopped initially with .stopEffects()', () => {\n\t\t\tlast = null\n\t\t\truns = 0\n\n\t\t\tconst [s, setS] = createSignal(1)\n\t\t\tconst e = new Effects()\n\t\t\te.stopEffects() // stop immediately after creation\n\n\t\t\t// does not auto start\n\t\t\te.addEffectFn(() => {\n\t\t\t\truns++\n\t\t\t\tlast = s()\n\t\t\t})\n\n\t\t\texpect(last).toBe(null)\n\t\t\texpect(runs).toBe(0)\n\n\t\t\te.startEffects() // now start effects\n\n\t\t\ttestEffects(e, s, setS)\n\t\t})\n\n\t\tit('effects stopped initially with static autoStartEffects = false', () => {\n\t\t\tlast = null\n\t\t\truns = 0\n\n\t\t\tclass TestEffects extends Effects {\n\t\t\t\tstatic autoStartEffects = false\n\n\t\t\t\t@effect testEffect() {\n\t\t\t\t\truns++\n\t\t\t\t\tlast = s()\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst [s, setS] = createSignal(1)\n\t\t\tconst e = new TestEffects() // effects stopped initially\n\n\t\t\texpect(last).toBe(null)\n\t\t\texpect(runs).toBe(0)\n\n\t\t\te.startEffects() // now start effects\n\n\t\t\ttestEffects(e, s, setS)\n\t\t})\n\n\t\tfunction testEffects(e: Effects, s: Accessor, setS: Setter) {\n\t\t\texpect(last).toBe(1)\n\t\t\texpect(runs).toBe(1)\n\n\t\t\tsetS(2)\n\t\t\texpect(last).toBe(2)\n\t\t\texpect(runs).toBe(2)\n\n\t\t\t// later, stop effects when done (f.e. when custom element disconnected from DOM)...\n\n\t\t\te.stopEffects()\n\t\t\tsetS(3)\n\t\t\texpect(last).toBe(2)\n\t\t\texpect(runs).toBe(2)\n\n\t\t\t// later, start effects again (f.e. when custom element reconnected to DOM)...\n\n\t\t\te.startEffects()\n\t\t\texpect(last).toBe(3)\n\t\t\texpect(runs).toBe(3)\n\n\t\t\tsetS(4)\n\t\t\texpect(last).toBe(4)\n\t\t\texpect(runs).toBe(4)\n\n\t\t\t// Clear all effects.\n\t\t\te.clearEffects()\n\t\t\tsetS(5)\n\t\t\texpect(last).toBe(4)\n\t\t\texpect(runs).toBe(4)\n\n\t\t\te.startEffects() // no effects to start\n\t\t\texpect(last).toBe(4)\n\t\t\texpect(runs).toBe(4)\n\t\t\tsetS(6)\n\t\t\texpect(last).toBe(4)\n\t\t\texpect(runs).toBe(4)\n\n\t\t\t// Add a new effect after clearing previous ones\n\n\t\t\t// auto starts\n\t\t\te.createEffect(() => {\n\t\t\t\truns++\n\t\t\t\tlast = s()\n\t\t\t})\n\t\t\texpect(last).toBe(6)\n\t\t\texpect(runs).toBe(5)\n\n\t\t\tsetS(7)\n\t\t\texpect(last).toBe(7)\n\t\t\texpect(runs).toBe(6)\n\t\t}\n\n\t\tit('startEffects does not duplicate effects', () => {\n\t\t\tconst [s, setS] = createSignal(1)\n\t\t\tconst e = new Effects()\n\n\t\t\tlet runs = 0\n\t\t\te.createEffect(() => {\n\t\t\t\truns++\n\t\t\t\ts()\n\t\t\t})\n\n\t\t\texpect(runs).toBe(1)\n\n\t\t\te.startEffects() // should not duplicate effects\n\n\t\t\tsetS(2)\n\t\t\texpect(runs).toBe(2)\n\t\t})\n\n\t\tit('clearEffects prevents effects from restarting', () => {\n\t\t\tconst [s, setS] = createSignal(1)\n\t\t\tconst e = new Effects()\n\n\t\t\tlet runs = 0\n\t\t\te.createEffect(() => {\n\t\t\t\truns++\n\t\t\t\ts()\n\t\t\t})\n\n\t\t\texpect(runs).toBe(1)\n\n\t\t\te.clearEffects()\n\n\t\t\tsetS(2)\n\t\t\texpect(runs).toBe(1)\n\n\t\t\te.startEffects() // should not restart any effects\n\n\t\t\tsetS(3)\n\t\t\texpect(runs).toBe(1)\n\t\t})\n\n\t\tit('can be extended from', () => {\n\t\t\tclass MyEffects extends Effects {\n\t\t\t\tdouble = 0\n\n\t\t\t\tconstructor() {\n\t\t\t\t\tsuper()\n\t\t\t\t\tthis.createEffect(() => {\n\t\t\t\t\t\tthis.double = this.a * 2\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\t@signal a = 1\n\t\t\t}\n\n\t\t\tconst me = new MyEffects()\n\t\t\texpect(me.double).toBe(2)\n\n\t\t\tme.a = 5\n\t\t\texpect(me.double).toBe(10)\n\n\t\t\tme.stopEffects()\n\t\t\tme.a = 10\n\t\t\texpect(me.double).toBe(10)\n\n\t\t\tme.startEffects()\n\t\t\texpect(me.double).toBe(20)\n\t\t})\n\n\t\tit('works with multiple Effectful-derived classes', () => {\n\t\t\tclass Base extends Effectful(Object) {\n\t\t\t\t@signal baseSignal = 1\n\t\t\t\tbaseValue = 0\n\n\t\t\t\tconstructor() {\n\t\t\t\t\tsuper()\n\t\t\t\t\tthis.createEffect(() => {\n\t\t\t\t\t\tthis.baseValue = this.baseSignal * 10\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tclass Derived extends Base {\n\t\t\t\t@signal derivedSignal = 2\n\t\t\t\tderivedValue = 0\n\n\t\t\t\tconstructor() {\n\t\t\t\t\tsuper()\n\t\t\t\t\tthis.createEffect(() => {\n\t\t\t\t\t\tthis.derivedValue = this.derivedSignal * 100\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst d = new Derived()\n\t\t\texpect(d.baseValue).toBe(10)\n\t\t\texpect(d.derivedValue).toBe(200)\n\n\t\t\td.baseSignal = 3\n\t\t\texpect(d.baseValue).toBe(30)\n\n\t\t\td.derivedSignal = 4\n\t\t\texpect(d.derivedValue).toBe(400)\n\n\t\t\td.stopEffects()\n\t\t\td.baseSignal = 5\n\t\t\td.derivedSignal = 6\n\t\t\texpect(d.baseValue).toBe(30)\n\t\t\texpect(d.derivedValue).toBe(400)\n\n\t\t\td.startEffects()\n\t\t\texpect(d.baseValue).toBe(50)\n\t\t\texpect(d.derivedValue).toBe(600)\n\t\t})\n\n\t\tit('supports instanceof checks', () => {\n\t\t\tclass MyEffectful extends Effectful(Object) {}\n\n\t\t\tconst me = new MyEffectful()\n\t\t\texpect(me instanceof Effectful).toBe(true)\n\t\t\texpect(me instanceof MyEffectful).toBe(true)\n\n\t\t\tconst e = new Effects()\n\t\t\texpect(e instanceof Effects).toBe(true)\n\t\t\texpect(e instanceof Effectful).toBe(true)\n\t\t})\n\n\t\tit('allows nested createEffect calls', () => {\n\t\t\tconst [a, setA] = createSignal(0)\n\t\t\tconst [b, setB] = createSignal(0)\n\t\t\tconst e = new Effects()\n\n\t\t\tlet outerRuns = 0\n\t\t\tlet innerRuns = 0\n\n\t\t\te.createEffect(function outer() {\n\t\t\t\touterRuns++\n\t\t\t\ta()\n\n\t\t\t\te.createEffect(function inner() {\n\t\t\t\t\tinnerRuns++\n\t\t\t\t\tb()\n\t\t\t\t})\n\t\t\t})\n\n\t\t\texpect(outerRuns).toBe(1)\n\t\t\texpect(innerRuns).toBe(1)\n\n\t\t\te.startEffects() // should not duplicate effects (already started)\n\n\t\t\texpect(outerRuns).toBe(1)\n\t\t\texpect(innerRuns).toBe(1)\n\n\t\t\tsetA(1)\n\t\t\texpect(outerRuns).toBe(2)\n\t\t\texpect(innerRuns).toBe(2) // inner effect runs because outer effect re-ran\n\n\t\t\tsetB(1)\n\t\t\texpect(outerRuns).toBe(2)\n\t\t\texpect(innerRuns).toBe(3) // inner effect runs independently\n\n\t\t\te.stopEffects()\n\n\t\t\texpect(outerRuns).toBe(2)\n\t\t\texpect(innerRuns).toBe(3)\n\n\t\t\te.startEffects()\n\n\t\t\texpect(outerRuns).toBe(3)\n\t\t\texpect(innerRuns).toBe(4) // inner effect runs because outer effect re-ran\n\n\t\t\tsetB(2)\n\t\t\texpect(outerRuns).toBe(3)\n\t\t\texpect(innerRuns).toBe(5) // inner effect runs independently\n\t\t})\n\n\t\tdescribe('invalid usages', () => {\n\t\t\tit('prevents multiple Effectful mixin applications', () => {\n\t\t\t\texpect(() => {\n\t\t\t\t\tclass Base extends Effectful(Object) {}\n\t\t\t\t\tclass Derived extends Effectful(Base) {}\n\t\t\t\t\tDerived\n\t\t\t\t}).toThrow('Class already extends Effectful, no need to apply the mixin again.')\n\t\t\t})\n\t\t})\n\n\t\tdescribe('usage with custom elements', () => {\n\t\t\tit('createEffect in connectedCallback, clearEffects in disconnectedCallback', () => {\n\t\t\t\tconst el = document.createElement('my-element') as MyElement\n\t\t\t\texpect(el.result).toBe(0)\n\t\t\t\texpect(el.runs).toBe(0)\n\n\t\t\t\ttestElementEffects(el)\n\t\t\t})\n\n\t\t\tit('createEffect in constructor, startEffects in connectedCallback, stopEffects in disconnectedCallback', () => {\n\t\t\t\tconst el = document.createElement('my-element2') as MyElement2\n\t\t\t\texpect(el.result).toBe(1 + 2)\n\t\t\t\texpect(el.runs).toBe(1) // already ran in constructor\n\n\t\t\t\ttestElementEffects(el)\n\t\t\t})\n\n\t\t\tit('@effect methods, startEffects in connectedCallback, stopEffects in disconnectedCallback', () => {\n\t\t\t\tconst el = document.createElement('my-element3') as MyElement3\n\t\t\t\texpect(el.result).toBe(1 + 2)\n\t\t\t\texpect(el.runs).toBe(1) // already ran in constructor\n\n\t\t\t\ttestElementEffects(el)\n\t\t\t})\n\t\t})\n\t})\n})\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/dist/signals/memoify.js b/dist/signals/memoify.js index c01ef53..ad78ef3 100644 --- a/dist/signals/memoify.js +++ b/dist/signals/memoify.js @@ -1,7 +1,7 @@ import { createMemo } from 'solid-js'; import { createWritableMemo } from '@solid-primitives/memo'; import { getInheritedDescriptor } from 'lowclass/dist/getInheritedDescriptor.js'; -import { isMemoGetter, isSignalGetter } from '../_state.js'; +import { isMemoGetter__, isSignalGetter__ } from '../_state.js'; const Undefined = Symbol(); let memberStat = null; @@ -91,7 +91,7 @@ export function memoify(obj, ...props) { } // Skip if already memoified or signalified - if (descriptor.get && (isMemoGetter.has(descriptor.get) || isSignalGetter.has(descriptor.get))) { + if (descriptor.get && (isMemoGetter__.has(descriptor.get) || isSignalGetter__.has(descriptor.get))) { memberStat = null; continue; } @@ -142,7 +142,7 @@ export function memoify(obj, ...props) { configurable: true, enumerable: descriptor.enumerable }); - isMemoGetter.add(value); + isMemoGetter__.add(value); } // Handle accessors @@ -172,7 +172,7 @@ export function memoify(obj, ...props) { configurable: true, enumerable: descriptor.enumerable }); - isMemoGetter.add(get); + isMemoGetter__.add(get); } else { // Throw in decorator mode only. if (memberStat) { diff --git a/dist/signals/memoify.js.map b/dist/signals/memoify.js.map index ab76793..f912ac4 100644 --- a/dist/signals/memoify.js.map +++ b/dist/signals/memoify.js.map @@ -1 +1 @@ -{"version":3,"file":"memoify.js","names":["createMemo","createWritableMemo","getInheritedDescriptor","isMemoGetter","isSignalGetter","Undefined","Symbol","memberStat","setMemoifyMemberStat","stat","memoify","obj","props","keys","length","Object","getOwnPropertySymbols","isAutoAccessor","type","key","descriptor","get","has","value","leafmostMemberValue","fn","call","Error","String","name","val","set","defineProperty","configurable","enumerable","add"],"sources":["../../src/signals/memoify.ts"],"sourcesContent":["import {createMemo} from 'solid-js'\nimport {createWritableMemo} from '@solid-primitives/memo'\nimport {getInheritedDescriptor} from 'lowclass/dist/getInheritedDescriptor.js'\nimport {isMemoGetter, isSignalGetter} from '../_state.js'\nimport type {AnyObject, MemberStat} from '../decorators/types.js'\n\nconst Undefined = Symbol()\n\nlet memberStat: MemberStat | null = null\n\n/** @private internal only */\nexport function setMemoifyMemberStat(stat: MemberStat) {\n\tmemberStat = stat\n}\n\n/**\n * Convert properties on an object into Solid.js memoized properties.\n *\n * There are two ways to use this:\n *\n * 1. Define which properties to convert to memoized properties by providing\n * property names as trailing arguments. Properties that are not function-valued\n * or accessors will be ignored.\n * 2. If no property names are provided, all function-valued properties and\n * accessors on the object will be automatically converted to memoized\n * properties.\n *\n * If any property is already memoified with `memoify()`, or already signalified\n * with `signalify()`, it will be skipped.\n *\n * Example with a plain object:\n *\n * ```js\n * import {memoify, signalify} from 'classy-solid'\n * import {createEffect} from 'solid-js'\n *\n * const obj = {\n * a: 1,\n * b: 2,\n * get sum() {\n * return this.a + this.b\n * }\n * }\n *\n * signalify(obj, 'a', 'b')\n * memoify(obj, 'sum')\n *\n * createEffect(() => {\n * console.log('sum:', obj.sum)\n * })\n *\n * obj.a = 3 // updates sum to 5\n * ```\n *\n * Example with a class:\n *\n * ```js\n * import {memoify, signalify} from 'classy-solid'\n * import {createEffect} from 'solid-js'\n *\n * class Example {\n * a = 1\n * b = 2\n *\n * get sum() {\n * return this.a + this.b\n * }\n *\n * constructor() {\n * signalify(this, 'a', 'b')\n * memoify(this, 'sum')\n * }\n * }\n *\n * const ex = new Example()\n *\n * createEffect(() => {\n * console.log('sum:', ex.sum)\n * })\n *\n * ex.a = 3 // updates sum to 5\n * ```\n */\nexport function memoify(obj: T): T\nexport function memoify(obj: T, ...props: (keyof T)[]): T\nexport function memoify(obj: AnyObject, ...props: PropertyKey[]) {\n\t// If no props specified, use all keys (including symbols)\n\tconst keys: PropertyKey[] = props.length ? props : [...Object.keys(obj), ...Object.getOwnPropertySymbols(obj)]\n\n\tconst isAutoAccessor = memberStat?.type === 'memo-auto-accessor'\n\n\tfor (const key of keys) {\n\t\tconst descriptor = getInheritedDescriptor(obj, key)\n\n\t\tif (!descriptor) {\n\t\t\tmemberStat = null\n\t\t\tcontinue\n\t\t}\n\n\t\t// Skip if already memoified or signalified\n\t\tif (descriptor.get && (isMemoGetter.has(descriptor.get) || isSignalGetter.has(descriptor.get))) {\n\t\t\tmemberStat = null\n\t\t\tcontinue\n\t\t}\n\n\t\t// Handle methods (function-valued properties)\n\t\tif (typeof descriptor.value === 'function' || isAutoAccessor) {\n\t\t\t// Skip base class memoify if a subclass is overriding an auto-accessor memo.\n\t\t\tconst leafmostMemberValue = isAutoAccessor ? descriptor.get : descriptor.value\n\t\t\tif (memberStat && leafmostMemberValue !== memberStat!.value) {\n\t\t\t\tmemberStat = null\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tconst fn = isAutoAccessor ? descriptor.get?.call(obj) : descriptor.value\n\n\t\t\tif (typeof fn !== 'function') {\n\t\t\t\t// Throw in decorator mode only.\n\t\t\t\tif (memberStat) {\n\t\t\t\t\tmemberStat = null\n\t\t\t\t\tthrow new Error(`memo value for \"${String(key)}\" is not a function: ${fn}`)\n\t\t\t\t}\n\t\t\t\t// Otherwise just skip non-function properties (f.e. using memoify(obj) directly on a plain object, without decorators).\n\t\t\t\telse continue\n\t\t\t}\n\n\t\t\tconst name = fn.name || String(key)\n\t\t\tlet value\n\n\t\t\t// Readonly memo: arity 0\n\t\t\tif (fn.length === 0) {\n\t\t\t\tconst get = createMemo(() => fn.call(obj))\n\n\t\t\t\tvalue = (val = Undefined) => {\n\t\t\t\t\tif (val === Undefined) return get()\n\t\t\t\t\tthrow new Error(`Cannot set readonly memoized method \"${String(key)}\".`)\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Writable memo: arity > 0\n\t\t\telse {\n\t\t\t\tconst [get, set] = createWritableMemo(() => fn.call(obj))\n\n\t\t\t\tvalue = (val: unknown = Undefined) => {\n\t\t\t\t\tif (val === Undefined) return get()\n\t\t\t\t\tset(typeof val === 'function' ? () => val : val)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tObject.defineProperty(value, 'name', {value: name, configurable: true})\n\t\t\tObject.defineProperty(obj, key, {value, configurable: true, enumerable: descriptor.enumerable})\n\t\t\tisMemoGetter.add(value)\n\t\t}\n\n\t\t// Handle accessors\n\t\telse if (descriptor.get || descriptor.set) {\n\t\t\tif (!descriptor.get) {\n\t\t\t\tmemberStat = null\n\t\t\t\tthrow new Error(`Cannot memoify accessor \"${String(key)}\" without a getter.`)\n\t\t\t}\n\t\t\tlet get\n\t\t\tlet set: ((val: unknown) => void) | undefined\n\n\t\t\t// Readonly memo: getter only\n\t\t\tif (!descriptor.set) get = createMemo(() => descriptor.get!.call(obj))\n\t\t\t// Writable memo: getter and setter\n\t\t\telse [get, set] = createWritableMemo(() => descriptor.get!.call(obj))\n\n\t\t\tObject.defineProperty(get, 'name', {value: String(key), configurable: true})\n\t\t\tif (set) Object.defineProperty(set, 'name', {value: String(key), configurable: true})\n\t\t\tObject.defineProperty(obj, key, {\n\t\t\t\tget,\n\t\t\t\tset: set && (val => (typeof val === 'function' ? set(() => val) : set(val))),\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: descriptor.enumerable,\n\t\t\t})\n\t\t\tisMemoGetter.add(get)\n\t\t} else {\n\t\t\t// Throw in decorator mode only.\n\t\t\tif (memberStat) {\n\t\t\t\tmemberStat = null\n\t\t\t\tthrow new Error(`memo value for \"${String(key)}\" is not a function: ${descriptor.value}`)\n\t\t\t}\n\t\t}\n\t}\n\n\tmemberStat = null\n\n\treturn obj\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file +{"version":3,"file":"memoify.js","names":["createMemo","createWritableMemo","getInheritedDescriptor","isMemoGetter__","isSignalGetter__","Undefined","Symbol","memberStat","setMemoifyMemberStat","stat","memoify","obj","props","keys","length","Object","getOwnPropertySymbols","isAutoAccessor","type","key","descriptor","get","has","value","leafmostMemberValue","fn","call","Error","String","name","val","set","defineProperty","configurable","enumerable","add"],"sources":["../../src/signals/memoify.ts"],"sourcesContent":["import {createMemo} from 'solid-js'\nimport {createWritableMemo} from '@solid-primitives/memo'\nimport {getInheritedDescriptor} from 'lowclass/dist/getInheritedDescriptor.js'\nimport {isMemoGetter__, isSignalGetter__} from '../_state.js'\nimport type {AnyObject, MemberStat} from '../decorators/types.js'\n\nconst Undefined = Symbol()\n\nlet memberStat: MemberStat | null = null\n\n/** @private internal only */\nexport function setMemoifyMemberStat(stat: MemberStat) {\n\tmemberStat = stat\n}\n\n/**\n * Convert properties on an object into Solid.js memoized properties.\n *\n * There are two ways to use this:\n *\n * 1. Define which properties to convert to memoized properties by providing\n * property names as trailing arguments. Properties that are not function-valued\n * or accessors will be ignored.\n * 2. If no property names are provided, all function-valued properties and\n * accessors on the object will be automatically converted to memoized\n * properties.\n *\n * If any property is already memoified with `memoify()`, or already signalified\n * with `signalify()`, it will be skipped.\n *\n * Example with a plain object:\n *\n * ```js\n * import {memoify, signalify} from 'classy-solid'\n * import {createEffect} from 'solid-js'\n *\n * const obj = {\n * a: 1,\n * b: 2,\n * get sum() {\n * return this.a + this.b\n * }\n * }\n *\n * signalify(obj, 'a', 'b')\n * memoify(obj, 'sum')\n *\n * createEffect(() => {\n * console.log('sum:', obj.sum)\n * })\n *\n * obj.a = 3 // updates sum to 5\n * ```\n *\n * Example with a class:\n *\n * ```js\n * import {memoify, signalify} from 'classy-solid'\n * import {createEffect} from 'solid-js'\n *\n * class Example {\n * a = 1\n * b = 2\n *\n * get sum() {\n * return this.a + this.b\n * }\n *\n * constructor() {\n * signalify(this, 'a', 'b')\n * memoify(this, 'sum')\n * }\n * }\n *\n * const ex = new Example()\n *\n * createEffect(() => {\n * console.log('sum:', ex.sum)\n * })\n *\n * ex.a = 3 // updates sum to 5\n * ```\n */\nexport function memoify(obj: T): T\nexport function memoify(obj: T, ...props: (keyof T)[]): T\nexport function memoify(obj: AnyObject, ...props: PropertyKey[]) {\n\t// If no props specified, use all keys (including symbols)\n\tconst keys: PropertyKey[] = props.length ? props : [...Object.keys(obj), ...Object.getOwnPropertySymbols(obj)]\n\n\tconst isAutoAccessor = memberStat?.type === 'memo-auto-accessor'\n\n\tfor (const key of keys) {\n\t\tconst descriptor = getInheritedDescriptor(obj, key)\n\n\t\tif (!descriptor) {\n\t\t\tmemberStat = null\n\t\t\tcontinue\n\t\t}\n\n\t\t// Skip if already memoified or signalified\n\t\tif (descriptor.get && (isMemoGetter__.has(descriptor.get) || isSignalGetter__.has(descriptor.get))) {\n\t\t\tmemberStat = null\n\t\t\tcontinue\n\t\t}\n\n\t\t// Handle methods (function-valued properties)\n\t\tif (typeof descriptor.value === 'function' || isAutoAccessor) {\n\t\t\t// Skip base class memoify if a subclass is overriding an auto-accessor memo.\n\t\t\tconst leafmostMemberValue = isAutoAccessor ? descriptor.get : descriptor.value\n\t\t\tif (memberStat && leafmostMemberValue !== memberStat!.value) {\n\t\t\t\tmemberStat = null\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tconst fn = isAutoAccessor ? descriptor.get?.call(obj) : descriptor.value\n\n\t\t\tif (typeof fn !== 'function') {\n\t\t\t\t// Throw in decorator mode only.\n\t\t\t\tif (memberStat) {\n\t\t\t\t\tmemberStat = null\n\t\t\t\t\tthrow new Error(`memo value for \"${String(key)}\" is not a function: ${fn}`)\n\t\t\t\t}\n\t\t\t\t// Otherwise just skip non-function properties (f.e. using memoify(obj) directly on a plain object, without decorators).\n\t\t\t\telse continue\n\t\t\t}\n\n\t\t\tconst name = fn.name || String(key)\n\t\t\tlet value\n\n\t\t\t// Readonly memo: arity 0\n\t\t\tif (fn.length === 0) {\n\t\t\t\tconst get = createMemo(() => fn.call(obj))\n\n\t\t\t\tvalue = (val = Undefined) => {\n\t\t\t\t\tif (val === Undefined) return get()\n\t\t\t\t\tthrow new Error(`Cannot set readonly memoized method \"${String(key)}\".`)\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Writable memo: arity > 0\n\t\t\telse {\n\t\t\t\tconst [get, set] = createWritableMemo(() => fn.call(obj))\n\n\t\t\t\tvalue = (val: unknown = Undefined) => {\n\t\t\t\t\tif (val === Undefined) return get()\n\t\t\t\t\tset(typeof val === 'function' ? () => val : val)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tObject.defineProperty(value, 'name', {value: name, configurable: true})\n\t\t\tObject.defineProperty(obj, key, {value, configurable: true, enumerable: descriptor.enumerable})\n\t\t\tisMemoGetter__.add(value)\n\t\t}\n\n\t\t// Handle accessors\n\t\telse if (descriptor.get || descriptor.set) {\n\t\t\tif (!descriptor.get) {\n\t\t\t\tmemberStat = null\n\t\t\t\tthrow new Error(`Cannot memoify accessor \"${String(key)}\" without a getter.`)\n\t\t\t}\n\t\t\tlet get\n\t\t\tlet set: ((val: unknown) => void) | undefined\n\n\t\t\t// Readonly memo: getter only\n\t\t\tif (!descriptor.set) get = createMemo(() => descriptor.get!.call(obj))\n\t\t\t// Writable memo: getter and setter\n\t\t\telse [get, set] = createWritableMemo(() => descriptor.get!.call(obj))\n\n\t\t\tObject.defineProperty(get, 'name', {value: String(key), configurable: true})\n\t\t\tif (set) Object.defineProperty(set, 'name', {value: String(key), configurable: true})\n\t\t\tObject.defineProperty(obj, key, {\n\t\t\t\tget,\n\t\t\t\tset: set && (val => (typeof val === 'function' ? set(() => val) : set(val))),\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: descriptor.enumerable,\n\t\t\t})\n\t\t\tisMemoGetter__.add(get)\n\t\t} else {\n\t\t\t// Throw in decorator mode only.\n\t\t\tif (memberStat) {\n\t\t\t\tmemberStat = null\n\t\t\t\tthrow new Error(`memo value for \"${String(key)}\" is not a function: ${descriptor.value}`)\n\t\t\t}\n\t\t}\n\t}\n\n\tmemberStat = null\n\n\treturn obj\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/dist/signals/signalify.js b/dist/signals/signalify.js index 9f66cba..e1a4272 100644 --- a/dist/signals/signalify.js +++ b/dist/signals/signalify.js @@ -1,7 +1,7 @@ import { getInheritedDescriptor } from 'lowclass/dist/getInheritedDescriptor.js'; import { $PROXY, batch, untrack } from 'solid-js'; import { createSignalFunction } from './createSignalFunction.js'; -import { isMemoGetter, isSignalGetter } from '../_state.js'; +import { isMemoGetter__, isSignalGetter__ } from '../_state.js'; /** * Convert properties on an object into Solid signal-backed properties. @@ -107,10 +107,10 @@ export function createSignalAccessor__(obj, prop, initialVal = Undefined, skipFu originalSet = descriptor.set; // If the original getter is already a signal getter, skip re-signalifying. - if (originalGet && isSignalGetter.has(originalGet)) return; + if (originalGet && isSignalGetter__.has(originalGet)) return; // If the original getter is already a memo getter, skip signalifying. - if (originalGet && isMemoGetter.has(originalGet)) return; + if (originalGet && isMemoGetter__.has(originalGet)) return; // Signals require both getter and setter to work properly. if (isAccessor && !(originalGet && originalSet)) return; @@ -150,7 +150,7 @@ export function createSignalAccessor__(obj, prop, initialVal = Undefined, skipFu s(typeof newValue === 'function' ? () => newValue : newValue); } }; - isSignalGetter.add(newDescriptor.get); + isSignalGetter__.add(newDescriptor.get); Object.defineProperty(obj, prop, newDescriptor); } export function getSignal__(obj, storage, initialVal) { diff --git a/dist/signals/signalify.js.map b/dist/signals/signalify.js.map index be05a55..848b97a 100644 --- a/dist/signals/signalify.js.map +++ b/dist/signals/signalify.js.map @@ -1 +1 @@ -{"version":3,"file":"signalify.js","names":["getInheritedDescriptor","$PROXY","batch","untrack","createSignalFunction","isMemoGetter","isSignalGetter","signalify","obj","props","proxy","skipFunctionProperties","length","_props","Object","keys","concat","getOwnPropertySymbols","prop","isTuple","Array","isArray","_prop","initialValue","createSignalAccessor__","propsSetAtLeastOnce","WeakMap","isPropSetAtLeastOnce__","instance","get","has","trackPropSetAtLeastOnce__","set","Set","add","Undefined","Symbol","initialVal","descriptor","originalGet","originalSet","isAccessor","value","writable","warnNotWritable","signalStorage","newDescriptor","configurable","enumerable","getSignal__","call","newValue","s","defineProperty","storage","equals","console","warn","String"],"sources":["../../src/signals/signalify.ts"],"sourcesContent":["import {getInheritedDescriptor} from 'lowclass/dist/getInheritedDescriptor.js'\nimport {$PROXY, batch, untrack} from 'solid-js'\nimport type {PropKey} from '../decorators/types.js'\nimport {createSignalFunction, type SignalFunction} from './createSignalFunction.js'\nimport {isMemoGetter, isSignalGetter} from '../_state.js'\n\ntype AnyObject = Record\n\n/**\n * Convert properties on an object into Solid signal-backed properties.\n *\n * There are two ways to use this:\n *\n * 1. Define which properties to convert to signal-backed properties by\n * providing property names as trailing arguments. Properties that are\n * function-valued (methods) are included as values of the signal properties.\n * 2. If no property names are provided, all non-function-valued properties on\n * the object will be automatically converted to signal-backed properties.\n *\n * If any property is already memoified with `memoify()`, or already signalified\n * with `signalify()`, it will be skipped.\n *\n * Example with a class:\n *\n * ```js\n * import {signalify} from 'classy-solid'\n * import {createEffect} from 'solid-js'\n *\n * class Counter {\n * count = 0\n *\n * constructor() {\n * signalify(this, 'count')\n * setInterval(() => this.count++, 1000)\n * }\n * }\n *\n * const counter = new Counter\n *\n * createEffect(() => {\n * console.log('count:', counter.count)\n * })\n * ```\n *\n * Example with a plain object:\n *\n * ```js\n * import {signalify} from 'classy-solid'\n * import {createEffect} from 'solid-js'\n *\n * const counter = {\n * count: 0\n * }\n *\n * signalify(counter, 'count')\n * setInterval(() => counter.count++, 1000)\n *\n * createEffect(() => {\n * console.log('count:', counter.count)\n * })\n * ```\n */\nexport function signalify(obj: T): T\nexport function signalify(obj: T, ...props: (keyof T)[]): T\n/** This overload is for initial value support for downstream use cases. */\nexport function signalify(obj: T, ...props: [key: keyof T, initialValue: unknown][]): T\nexport function signalify(obj: AnyObject, ...props: [key: PropertyKey, initialValue: unknown][] | PropertyKey[]) {\n\t// Special case for Solid proxies: if the object is already a solid proxy,\n\t// all properties are already reactive, no need to signalify.\n\t// @ts-expect-error special indexed access\n\tconst proxy = obj[$PROXY] as T\n\tif (proxy) return obj\n\n\tconst skipFunctionProperties = props.length === 0\n\n\tconst _props = props.length ? props : (Object.keys(obj) as PropKey[]).concat(Object.getOwnPropertySymbols(obj))\n\n\t// Use `untrack` here to be extra safe the initial value doesn't count as a\n\t// dependency and cause a reactivity loop.\n\tfor (const prop of _props) {\n\t\tconst isTuple = Array.isArray(prop)\n\t\t// We cast from PropertyKey to PropKey because keys can't actually be number, only string | symbol.\n\t\tconst _prop = (isTuple ? prop[0] : prop) as PropKey\n\t\tconst initialValue = isTuple ? prop[1] : untrack(() => obj[_prop])\n\n\t\tcreateSignalAccessor__(obj, _prop, initialValue, skipFunctionProperties)\n\t}\n\n\treturn obj\n}\n\n// propsSetAtLeastOnce is a Set that tracks which reactive properties have been\n// set at least once.\nconst propsSetAtLeastOnce = new WeakMap>()\n\n// @lume/element uses this to detect if a reactive prop has been set, and if so\n// will not overwrite the value with any pre-existing value from custom element\n// pre-upgrade.\nexport function isPropSetAtLeastOnce__(instance: object, prop: string | symbol) {\n\treturn !!propsSetAtLeastOnce.get(instance)?.has(prop)\n}\n\nexport function trackPropSetAtLeastOnce__(instance: object, prop: string | symbol) {\n\tif (!propsSetAtLeastOnce.has(instance)) propsSetAtLeastOnce.set(instance, new Set())\n\tpropsSetAtLeastOnce.get(instance)!.add(prop)\n}\n\nconst Undefined = Symbol()\n\nexport function createSignalAccessor__(\n\tobj: T,\n\tprop: Exclude,\n\tinitialVal: unknown = Undefined,\n\tskipFunctionProperties = false,\n): void {\n\tlet descriptor: PropertyDescriptor | undefined = getInheritedDescriptor(obj, prop)\n\n\tlet originalGet: (() => any) | undefined\n\tlet originalSet: ((v: any) => void) | undefined\n\tconst isAccessor = !!(descriptor?.get || descriptor?.set)\n\n\tif (descriptor) {\n\t\tif (skipFunctionProperties && typeof descriptor.value === 'function') return\n\n\t\toriginalGet = descriptor.get\n\t\toriginalSet = descriptor.set\n\n\t\t// If the original getter is already a signal getter, skip re-signalifying.\n\t\tif (originalGet && isSignalGetter.has(originalGet)) return\n\n\t\t// If the original getter is already a memo getter, skip signalifying.\n\t\tif (originalGet && isMemoGetter.has(originalGet)) return\n\n\t\t// Signals require both getter and setter to work properly.\n\t\tif (isAccessor && !(originalGet && originalSet)) return\n\n\t\tif (!isAccessor) {\n\t\t\t// No need to make a signal that can't be written to.\n\t\t\tif (!descriptor.writable) return warnNotWritable(prop)\n\n\t\t\t// If there was a value descriptor, trust it as the source of truth\n\t\t\t// for initialVal. For example, if the user class modifies the value\n\t\t\t// after the initializer, it will have a different value than what\n\t\t\t// we tracked from the initializer.\n\t\t\tinitialVal = initialVal === Undefined ? descriptor.value : initialVal\n\t\t}\n\t}\n\n\tconst signalStorage = new WeakMap>()\n\n\tconst newDescriptor = {\n\t\tconfigurable: true,\n\t\tenumerable: descriptor?.enumerable,\n\t\tget: isAccessor\n\t\t\t? function (this: object): unknown {\n\t\t\t\t\tgetSignal__(this, signalStorage, initialVal)()\n\t\t\t\t\treturn originalGet!.call(this)\n\t\t\t }\n\t\t\t: function (this: object): unknown {\n\t\t\t\t\treturn getSignal__(this, signalStorage, initialVal)()\n\t\t\t },\n\t\tset: isAccessor\n\t\t\t? function (this: object, newValue: unknown) {\n\t\t\t\t\t// batch, for example in case setter calls super setter, to\n\t\t\t\t\t// avoid multiple effect runs on a single property set.\n\t\t\t\t\tbatch(() => {\n\t\t\t\t\t\toriginalSet!.call(this, newValue)\n\t\t\t\t\t\ttrackPropSetAtLeastOnce__(this, prop)\n\n\t\t\t\t\t\tconst s = getSignal__(this, signalStorage, initialVal)\n\t\t\t\t\t\ts(typeof newValue === 'function' ? () => newValue : newValue)\n\t\t\t\t\t})\n\t\t\t }\n\t\t\t: function (this: object, newValue: unknown) {\n\t\t\t\t\ttrackPropSetAtLeastOnce__(this, prop)\n\n\t\t\t\t\tconst s = getSignal__(this, signalStorage, initialVal)\n\t\t\t\t\ts(typeof newValue === 'function' ? () => newValue : newValue)\n\t\t\t },\n\t}\n\n\tisSignalGetter.add(newDescriptor.get!)\n\n\tObject.defineProperty(obj, prop, newDescriptor)\n}\n\nexport function getSignal__(obj: object, storage: WeakMap>, initialVal: unknown) {\n\tlet s = storage.get(obj)\n\tif (!s) storage.set(obj, (s = createSignalFunction(initialVal, {equals: false})))\n\treturn s\n}\n\nfunction warnNotWritable(prop: PropertyKey) {\n\tconsole.warn(\n\t\t`The \\`@signal\\` decorator was used on a property named \"${String(\n\t\t\tprop,\n\t\t)}\" that is not writable. Reactivity is not enabled for non-writable properties.`,\n\t)\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file +{"version":3,"file":"signalify.js","names":["getInheritedDescriptor","$PROXY","batch","untrack","createSignalFunction","isMemoGetter__","isSignalGetter__","signalify","obj","props","proxy","skipFunctionProperties","length","_props","Object","keys","concat","getOwnPropertySymbols","prop","isTuple","Array","isArray","_prop","initialValue","createSignalAccessor__","propsSetAtLeastOnce","WeakMap","isPropSetAtLeastOnce__","instance","get","has","trackPropSetAtLeastOnce__","set","Set","add","Undefined","Symbol","initialVal","descriptor","originalGet","originalSet","isAccessor","value","writable","warnNotWritable","signalStorage","newDescriptor","configurable","enumerable","getSignal__","call","newValue","s","defineProperty","storage","equals","console","warn","String"],"sources":["../../src/signals/signalify.ts"],"sourcesContent":["import {getInheritedDescriptor} from 'lowclass/dist/getInheritedDescriptor.js'\nimport {$PROXY, batch, untrack} from 'solid-js'\nimport type {PropKey} from '../decorators/types.js'\nimport {createSignalFunction, type SignalFunction} from './createSignalFunction.js'\nimport {isMemoGetter__, isSignalGetter__} from '../_state.js'\n\ntype AnyObject = Record\n\n/**\n * Convert properties on an object into Solid signal-backed properties.\n *\n * There are two ways to use this:\n *\n * 1. Define which properties to convert to signal-backed properties by\n * providing property names as trailing arguments. Properties that are\n * function-valued (methods) are included as values of the signal properties.\n * 2. If no property names are provided, all non-function-valued properties on\n * the object will be automatically converted to signal-backed properties.\n *\n * If any property is already memoified with `memoify()`, or already signalified\n * with `signalify()`, it will be skipped.\n *\n * Example with a class:\n *\n * ```js\n * import {signalify} from 'classy-solid'\n * import {createEffect} from 'solid-js'\n *\n * class Counter {\n * count = 0\n *\n * constructor() {\n * signalify(this, 'count')\n * setInterval(() => this.count++, 1000)\n * }\n * }\n *\n * const counter = new Counter\n *\n * createEffect(() => {\n * console.log('count:', counter.count)\n * })\n * ```\n *\n * Example with a plain object:\n *\n * ```js\n * import {signalify} from 'classy-solid'\n * import {createEffect} from 'solid-js'\n *\n * const counter = {\n * count: 0\n * }\n *\n * signalify(counter, 'count')\n * setInterval(() => counter.count++, 1000)\n *\n * createEffect(() => {\n * console.log('count:', counter.count)\n * })\n * ```\n */\nexport function signalify(obj: T): T\nexport function signalify(obj: T, ...props: (keyof T)[]): T\n/** This overload is for initial value support for downstream use cases. */\nexport function signalify(obj: T, ...props: [key: keyof T, initialValue: unknown][]): T\nexport function signalify(obj: AnyObject, ...props: [key: PropertyKey, initialValue: unknown][] | PropertyKey[]) {\n\t// Special case for Solid proxies: if the object is already a solid proxy,\n\t// all properties are already reactive, no need to signalify.\n\t// @ts-expect-error special indexed access\n\tconst proxy = obj[$PROXY] as T\n\tif (proxy) return obj\n\n\tconst skipFunctionProperties = props.length === 0\n\n\tconst _props = props.length ? props : (Object.keys(obj) as PropKey[]).concat(Object.getOwnPropertySymbols(obj))\n\n\t// Use `untrack` here to be extra safe the initial value doesn't count as a\n\t// dependency and cause a reactivity loop.\n\tfor (const prop of _props) {\n\t\tconst isTuple = Array.isArray(prop)\n\t\t// We cast from PropertyKey to PropKey because keys can't actually be number, only string | symbol.\n\t\tconst _prop = (isTuple ? prop[0] : prop) as PropKey\n\t\tconst initialValue = isTuple ? prop[1] : untrack(() => obj[_prop])\n\n\t\tcreateSignalAccessor__(obj, _prop, initialValue, skipFunctionProperties)\n\t}\n\n\treturn obj\n}\n\n// propsSetAtLeastOnce is a Set that tracks which reactive properties have been\n// set at least once.\nconst propsSetAtLeastOnce = new WeakMap>()\n\n// @lume/element uses this to detect if a reactive prop has been set, and if so\n// will not overwrite the value with any pre-existing value from custom element\n// pre-upgrade.\nexport function isPropSetAtLeastOnce__(instance: object, prop: string | symbol) {\n\treturn !!propsSetAtLeastOnce.get(instance)?.has(prop)\n}\n\nexport function trackPropSetAtLeastOnce__(instance: object, prop: string | symbol) {\n\tif (!propsSetAtLeastOnce.has(instance)) propsSetAtLeastOnce.set(instance, new Set())\n\tpropsSetAtLeastOnce.get(instance)!.add(prop)\n}\n\nconst Undefined = Symbol()\n\nexport function createSignalAccessor__(\n\tobj: T,\n\tprop: Exclude,\n\tinitialVal: unknown = Undefined,\n\tskipFunctionProperties = false,\n): void {\n\tlet descriptor: PropertyDescriptor | undefined = getInheritedDescriptor(obj, prop)\n\n\tlet originalGet: (() => any) | undefined\n\tlet originalSet: ((v: any) => void) | undefined\n\tconst isAccessor = !!(descriptor?.get || descriptor?.set)\n\n\tif (descriptor) {\n\t\tif (skipFunctionProperties && typeof descriptor.value === 'function') return\n\n\t\toriginalGet = descriptor.get\n\t\toriginalSet = descriptor.set\n\n\t\t// If the original getter is already a signal getter, skip re-signalifying.\n\t\tif (originalGet && isSignalGetter__.has(originalGet)) return\n\n\t\t// If the original getter is already a memo getter, skip signalifying.\n\t\tif (originalGet && isMemoGetter__.has(originalGet)) return\n\n\t\t// Signals require both getter and setter to work properly.\n\t\tif (isAccessor && !(originalGet && originalSet)) return\n\n\t\tif (!isAccessor) {\n\t\t\t// No need to make a signal that can't be written to.\n\t\t\tif (!descriptor.writable) return warnNotWritable(prop)\n\n\t\t\t// If there was a value descriptor, trust it as the source of truth\n\t\t\t// for initialVal. For example, if the user class modifies the value\n\t\t\t// after the initializer, it will have a different value than what\n\t\t\t// we tracked from the initializer.\n\t\t\tinitialVal = initialVal === Undefined ? descriptor.value : initialVal\n\t\t}\n\t}\n\n\tconst signalStorage = new WeakMap>()\n\n\tconst newDescriptor = {\n\t\tconfigurable: true,\n\t\tenumerable: descriptor?.enumerable,\n\t\tget: isAccessor\n\t\t\t? function (this: object): unknown {\n\t\t\t\t\tgetSignal__(this, signalStorage, initialVal)()\n\t\t\t\t\treturn originalGet!.call(this)\n\t\t\t }\n\t\t\t: function (this: object): unknown {\n\t\t\t\t\treturn getSignal__(this, signalStorage, initialVal)()\n\t\t\t },\n\t\tset: isAccessor\n\t\t\t? function (this: object, newValue: unknown) {\n\t\t\t\t\t// batch, for example in case setter calls super setter, to\n\t\t\t\t\t// avoid multiple effect runs on a single property set.\n\t\t\t\t\tbatch(() => {\n\t\t\t\t\t\toriginalSet!.call(this, newValue)\n\t\t\t\t\t\ttrackPropSetAtLeastOnce__(this, prop)\n\n\t\t\t\t\t\tconst s = getSignal__(this, signalStorage, initialVal)\n\t\t\t\t\t\ts(typeof newValue === 'function' ? () => newValue : newValue)\n\t\t\t\t\t})\n\t\t\t }\n\t\t\t: function (this: object, newValue: unknown) {\n\t\t\t\t\ttrackPropSetAtLeastOnce__(this, prop)\n\n\t\t\t\t\tconst s = getSignal__(this, signalStorage, initialVal)\n\t\t\t\t\ts(typeof newValue === 'function' ? () => newValue : newValue)\n\t\t\t },\n\t}\n\n\tisSignalGetter__.add(newDescriptor.get!)\n\n\tObject.defineProperty(obj, prop, newDescriptor)\n}\n\nexport function getSignal__(obj: object, storage: WeakMap>, initialVal: unknown) {\n\tlet s = storage.get(obj)\n\tif (!s) storage.set(obj, (s = createSignalFunction(initialVal, {equals: false})))\n\treturn s\n}\n\nfunction warnNotWritable(prop: PropertyKey) {\n\tconsole.warn(\n\t\t`The \\`@signal\\` decorator was used on a property named \"${String(\n\t\t\tprop,\n\t\t)}\" that is not writable. Reactivity is not enabled for non-writable properties.`,\n\t)\n}\n"],"mappings":"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","ignoreList":[]} \ No newline at end of file diff --git a/src/_state.ts b/src/_state.ts index 23c31fc..6724268 100644 --- a/src/_state.ts +++ b/src/_state.ts @@ -13,16 +13,16 @@ import {Effects} from './mixins/Effectful.js' import {untrack} from 'solid-js' /** Libraries that wrap classy-solid signal accessors should add their overriding getters to this set. */ -export const isSignalGetter = new WeakSet() +export const isSignalGetter__ = new WeakSet() /** Libraries that wrap classy-solid memo accessors should add their overriding getters to this set. */ -export const isMemoGetter = new WeakSet() +export const isMemoGetter__ = new WeakSet() -export function getMembers(metadata: ClassySolidMetadata) { +export function getMembers__(metadata: ClassySolidMetadata) { if (!Object.hasOwn(metadata, 'classySolid_members')) metadata.classySolid_members = [] // we don't extend the array from parent classes return metadata.classySolid_members! } -export function getMemberStat( +export function getMemberStat__( name: PropKey, type: MemberType, members: MetadataMembers, @@ -85,7 +85,7 @@ function sortMetadataMembersCustomOrder(members: MetadataMembers) { members.sort((a, b) => customSortOrder[a.type] - customSortOrder[b.type]) } -export function signalifyIfNeeded(obj: AnyObject, stat: MemberStat) { +export function signalifyIfNeeded__(obj: AnyObject, stat: MemberStat) { const {name} = stat if (stat.applied.get(obj)) @@ -100,7 +100,7 @@ export function signalifyIfNeeded(obj: AnyObject, stat: MemberStat) { stat.applied.set(obj, true) } -export function memoifyIfNeeded(obj: AnyObject, stat: MemberStat) { +export function memoifyIfNeeded__(obj: AnyObject, stat: MemberStat) { const {name, context} = stat if (stat.applied.get(obj)) @@ -123,7 +123,11 @@ export function memoifyIfNeeded(obj: AnyObject, stat: MemberStat) { /** @private internal state */ export const effects__ = new WeakMap() -export function effectifyIfNeeded(obj: AnyObject, stat: MemberStat) { +export type AutoStartable = { + autoStartEffects?: boolean +} + +export function effectifyIfNeeded__(obj: AnyObject, stat: MemberStat) { const {name, context} = stat if (stat.applied.get(obj)) @@ -164,7 +168,15 @@ export function effectifyIfNeeded(obj: AnyObject, stat: MemberStat) { else effects__.set(obj, (effects = new Effects())) } - effects.createEffect(() => effectFn.call(obj)) + const ctor = obj.constructor as AutoStartable + const autoStart = ctor.autoStartEffects === undefined || ctor.autoStartEffects + + if (autoStart) effects.createEffect(() => effectFn.call(obj)) + else { + // start stopped; effects will be added but not started yet if autoStart is false + effects.stopEffects() + effects.addEffectFn(() => effectFn.call(obj)) + } stat.applied.set(obj, true) } @@ -188,7 +200,7 @@ const extraInitializersCount = new WeakMap() * * See: https://github.com/tc39/proposal-decorators/issues/566 */ -export function finalizeMembersIfLast(obj: AnyObject, members: MetadataMembers) { +export function finalizeMembersIfLast__(obj: AnyObject, members: MetadataMembers) { let count = extraInitializersCount.get(obj) ?? 0 extraInitializersCount.set(obj, ++count) diff --git a/src/decorators/effect.test.ts b/src/decorators/effect.test.ts index 6fb59e9..7a55802 100644 --- a/src/decorators/effect.test.ts +++ b/src/decorators/effect.test.ts @@ -26,6 +26,62 @@ describe('classy-solid', () => { basicTest(fun, setA) }) + it('runs a basic public method effect, using stopEffects, with autoStart false', () => { + const [a, setA] = createSignal(1) + + class Funkalicious { + last: number | null = null + runs = 0 + + @signal b = 2 + + static autoStartEffects = false + + @effect logSum() { + this.runs++ + this.last = a() + this.b + } + } + + const fun = new Funkalicious() + + // Ensure effects didn't start yet. + expect(fun.last === null).toBe(true) + expect(fun.runs).toBe(0) + + startEffects(fun) // manually start first + + basicTest(fun, setA) + }) + + it('works with both static autoStartEffects = false and Effects class without calling start/stopEffects methods', () => { + const [a, setA] = createSignal(1) + + class Funkalicious extends Effects { + last: number | null = null + runs = 0 + + @signal b = 2 + + static autoStartEffects = false + + @effect logSum() { + this.runs++ + this.last = a() + this.b + } + } + + const fun = new Funkalicious() + + // Ensure effects didn't start yet. + expect(fun.last === null).toBe(true) + expect(fun.runs).toBe(0) + + startEffects(fun) // manually start first + + basicTest(fun, setA, true) + }) + it('runs a basic private method effect, using stopEffects', () => { const [a, setA] = createSignal(1) @@ -125,7 +181,11 @@ describe('classy-solid', () => { basicTest(fun, setA) }) - function basicTest(fun: {b: number; last: number | null; runs: number}, setA: (v: number) => void) { + function basicTest( + fun: {b: number; last: number | null; runs: number}, + setA: (v: number) => void, + useFunctions = false, + ) { expect(fun.last).toBe(1 + 2) expect(fun.runs).toBe(1) @@ -136,18 +196,18 @@ describe('classy-solid', () => { fun.b = 10 expect(fun.last).toBe(5 + 10) expect(fun.runs).toBe(3) - fun instanceof Effects ? fun.stopEffects() : stopEffects(fun) + fun instanceof Effects && !useFunctions ? fun.stopEffects() : stopEffects(fun) setA(1) fun.b = 1 expect(fun.last).toBe(5 + 10) expect(fun.runs).toBe(3) - fun instanceof Effects ? fun.startEffects() : startEffects(fun) + fun instanceof Effects && !useFunctions ? fun.startEffects() : startEffects(fun) expect(fun.last).toBe(1 + 1) expect(fun.runs).toBe(4) // Ensure no duplicate effects - fun instanceof Effects ? fun.startEffects() : startEffects(fun) + fun instanceof Effects && !useFunctions ? fun.startEffects() : startEffects(fun) expect(fun.last).toBe(1 + 1) expect(fun.runs).toBe(4) @@ -155,7 +215,7 @@ describe('classy-solid', () => { expect(fun.last).toBe(3 + 1) expect(fun.runs).toBe(5) - fun instanceof Effects ? fun.stopEffects() : stopEffects(fun) + fun instanceof Effects && !useFunctions ? fun.stopEffects() : stopEffects(fun) setA(10) fun.b = 20 expect(fun.last).toBe(3 + 1) diff --git a/src/decorators/effect.ts b/src/decorators/effect.ts index 628de61..276aee2 100644 --- a/src/decorators/effect.ts +++ b/src/decorators/effect.ts @@ -1,4 +1,4 @@ -import {effectifyIfNeeded, finalizeMembersIfLast, getMemberStat, getMembers, effects__} from '../_state.js' +import {effectifyIfNeeded__, finalizeMembersIfLast__, getMemberStat__, getMembers__, effects__} from '../_state.js' import type {AnyObject, ClassySolidMetadata} from './types.js' import './metadata-shim.js' @@ -69,7 +69,6 @@ import './metadata-shim.js' * fun.stopEffects() * ``` */ - export function effect( value: Function | ClassAccessorDecoratorTarget void>, context: ClassMethodDecoratorContext | ClassAccessorDecoratorContext, @@ -78,22 +77,22 @@ export function effect( const {kind, name} = context const metadata = context.metadata as ClassySolidMetadata - const members = getMembers(metadata) + const members = getMembers__(metadata) if (!(kind === 'method' || kind === 'accessor')) throw new Error('@effect can only be used on methods or function-valued auto accessors') const stat = kind === 'accessor' - ? getMemberStat(name, 'effect-auto-accessor', members, context) - : getMemberStat(name, 'effect-method', members, context) + ? getMemberStat__(name, 'effect-auto-accessor', members, context) + : getMemberStat__(name, 'effect-method', members, context) stat.finalize = function () { - effectifyIfNeeded(this as AnyObject, stat) + effectifyIfNeeded__(this as AnyObject, stat) } context.addInitializer(function () { - finalizeMembersIfLast(this as AnyObject, members) + finalizeMembersIfLast__(this as AnyObject, members) }) if (kind === 'method') stat.value = value diff --git a/src/decorators/memo.test.ts b/src/decorators/memo.test.ts index cf9145e..6501169 100644 --- a/src/decorators/memo.test.ts +++ b/src/decorators/memo.test.ts @@ -653,9 +653,6 @@ describe('classy-solid', () => { expect(lastSum).toBe(7) expect(count).toBe(2) // should not run because sum didn't change - // CONTINUE writing not working yet for private method memos - // Uncomment when fixed - debugger ex.sum = 20 console.log('sum?', ex.sum) expect(lastSum).toBe(20) diff --git a/src/decorators/memo.ts b/src/decorators/memo.ts index e9b646f..a67bb12 100644 --- a/src/decorators/memo.ts +++ b/src/decorators/memo.ts @@ -1,7 +1,7 @@ import {createMemo, createRoot, type Setter, type Signal} from 'solid-js' import {createWritableMemo} from '@solid-primitives/memo' import type {AnyObject, ClassySolidMetadata, PropKey} from './types.js' -import {finalizeMembersIfLast, getMemberStat, getMembers, memoifyIfNeeded} from '../_state.js' +import {finalizeMembersIfLast__, getMemberStat__, getMembers__, memoifyIfNeeded__} from '../_state.js' import './metadata-shim.js' /** @@ -119,7 +119,7 @@ export function memo( const {kind, name} = context const metadata = context.metadata as ClassySolidMetadata - const members = getMembers(metadata) + const members = getMembers__(metadata) // Apply finalization logic to all except setters (setters are finalized // together with their getters). @@ -221,14 +221,14 @@ export function memo( const memberType = kind === 'accessor' ? 'memo-auto-accessor' : kind === 'method' ? 'memo-method' : 'memo-accessor' - const stat = getMemberStat(name, memberType, members, context) + const stat = getMemberStat__(name, memberType, members, context) stat.finalize = function () { - memoifyIfNeeded(this as AnyObject, stat) + memoifyIfNeeded__(this as AnyObject, stat) } context.addInitializer(function () { - finalizeMembersIfLast(this as AnyObject, members) + finalizeMembersIfLast__(this as AnyObject, members) }) if (kind === 'method' || kind === 'getter') stat.value = value diff --git a/src/decorators/signal.test.ts b/src/decorators/signal.test.ts index 26532de..0f72c9e 100644 --- a/src/decorators/signal.test.ts +++ b/src/decorators/signal.test.ts @@ -4,7 +4,7 @@ import {testButterflyProps} from '../index.test.js' import {signal} from './signal.js' import {signalify} from '../signals/signalify.js' import type {ClassySolidMetadata} from './types.js' -import {isSignalGetter} from '../_state.js' +import {isSignalGetter__} from '../_state.js' import {memo} from './memo.js' describe('classy-solid', () => { @@ -355,7 +355,7 @@ describe('classy-solid', () => { // implementation goes). const descriptor = Object.getOwnPropertyDescriptor(kid, 'age') const getter = descriptor!.get! - expect(isSignalGetter.has(getter)).toBe(false) + expect(isSignalGetter__.has(getter)).toBe(false) let count = 0 createEffect(() => { diff --git a/src/decorators/signal.ts b/src/decorators/signal.ts index 6bb3d6c..807351b 100644 --- a/src/decorators/signal.ts +++ b/src/decorators/signal.ts @@ -2,13 +2,19 @@ import {batch} from 'solid-js' import {getSignal__, trackPropSetAtLeastOnce__} from '../signals/signalify.js' import type {AnyObject, ClassySolidMetadata, PropKey} from './types.js' import type {SignalFunction} from '../signals/createSignalFunction.js' -import {isSignalGetter, getMemberStat, finalizeMembersIfLast, getMembers, signalifyIfNeeded} from '../_state.js' +import { + isSignalGetter__, + getMemberStat__, + finalizeMembersIfLast__, + getMembers__, + signalifyIfNeeded__, +} from '../_state.js' import './metadata-shim.js' const Undefined = Symbol() const isExtending = new WeakSet() -interface SignalOptions { +export interface SignalOptions { /** * Whether to extend an existing base class signal instead of creating a new * one. When true, the existing signal is reused, otherwise a new signal @@ -105,7 +111,7 @@ function signalImplementation( const {kind, name} = context const metadata = context.metadata as ClassySolidMetadata - const members = getMembers(metadata) + const members = getMembers__(metadata) if (!(kind === 'field' || kind === 'accessor' || kind === 'getter' || kind === 'setter')) throw new InvalidSignalDecoratorError() @@ -116,10 +122,10 @@ function signalImplementation( '@signal cannot signalify #private fields. Use a #private getter/setter or auto accessor instead. F.e. convert `@signal #foo = 0` to `@signal accessor #foo = 0`.', ) - const stat = getMemberStat(name, 'signal-field', members, context) + const stat = getMemberStat__(name, 'signal-field', members, context) stat.finalize = function () { - signalifyIfNeeded(this as AnyObject, stat) + signalifyIfNeeded__(this as AnyObject, stat) } context.addInitializer(function () { @@ -131,7 +137,7 @@ function signalImplementation( Object.defineProperty(this as AnyObject, name, stat.existingSignalDescriptor!) ;(this as AnyObject)[name] = stat.newInitialValue } - finalizeMembersIfLast(this as AnyObject, members) + finalizeMembersIfLast__(this as AnyObject, members) }) return function (this: unknown, initialVal: unknown) { @@ -143,7 +149,7 @@ function signalImplementation( // If we already have a signal descriptor, we will re-use it, so // that any effects depending on it will continue to work. - if (isSignalGetter.has(descriptor?.get!)) { + if (isSignalGetter__.has(descriptor?.get!)) { stat.reuseExistingSignal = true stat.newInitialValue = initialVal stat.existingSignalDescriptor = descriptor @@ -165,10 +171,7 @@ function signalImplementation( const signalStorage = new WeakMap>() let initialValue: unknown = Undefined - function init(this: object, initialVal: unknown) { - initialValue = initialVal - return initialVal - } + const init = (initialVal: unknown) => (initialValue = initialVal) context.addInitializer(function () { // Locate the prototype of this auto accessor. @@ -214,7 +217,7 @@ function signalImplementation( const newValue = {init, get: newGet, set: newSet} - isSignalGetter.add(newValue.get) + isSignalGetter__.add(newValue.get) return newValue } else if (kind === 'getter' || kind === 'setter') { @@ -246,7 +249,7 @@ function signalImplementation( return getOrSet.call(this) } - isSignalGetter.add(newGetter) + isSignalGetter__.add(newGetter) return newGetter } else { diff --git a/src/decorators/untracked.ts b/src/decorators/untracked.ts index eead566..e68f31f 100644 --- a/src/decorators/untracked.ts +++ b/src/decorators/untracked.ts @@ -67,21 +67,17 @@ export function untracked(value: AnyConstructor, context: ClassDecoratorContext const Class = value - class ReactiveDecorator extends Class { + class UntrackedDecorator extends Class { constructor(...args: any[]) { - let instance!: ReactiveDecorator - // Ensure that if we're in an effect that `new`ing a class does not // track signal reads, otherwise we'll get into an infinite loop. If // someone want to trigger an effect based on properties of the // `new`ed instance, they can explicitly read the properties // themselves in the effect, making their intent clear. - if (getListener()) untrack(() => (instance = Reflect.construct(Class, args, new.target))) // super() - else super(...args), (instance = this) - - return instance + if (getListener()) return untrack(() => Reflect.construct(Class, args, new.target)) // super() + else super(...args) } } - return ReactiveDecorator + return UntrackedDecorator } diff --git a/src/index.ts b/src/index.ts index 914261f..1bf0bf3 100644 --- a/src/index.ts +++ b/src/index.ts @@ -2,5 +2,6 @@ export * from './decorators/index.js' export * from './effects/index.js' export * from './mixins/index.js' export * from './signals/index.js' +export * from './_state.js' export const version = '0.5.1' diff --git a/src/mixins/Effectful.test.ts b/src/mixins/Effectful.test.ts index 79cc080..a0fe973 100644 --- a/src/mixins/Effectful.test.ts +++ b/src/mixins/Effectful.test.ts @@ -1,21 +1,76 @@ -import {createSignal} from 'solid-js' +import {createSignal, type Accessor, type Setter} from 'solid-js' import {Effectful, Effects} from './Effectful.js' import {signal} from '../decorators/signal.js' import {MyElement, MyElement2, MyElement3, testElementEffects} from '../index.test.js' +import {effect} from '../decorators/effect.js' describe('classy-solid', () => { describe('Effectful mixin / Effects', () => { + let last: number | null = null + let runs = 0 + it('createEffect runs immediately, stopEffects stops further runs, startEffects runs effects again', () => { + last = null + runs = 0 + const [s, setS] = createSignal(1) const e = new Effects() - let last = null - let runs = 0 e.createEffect(() => { runs++ last = s() }) + testEffects(e, s, setS) + }) + + it('effects stopped initially with .stopEffects()', () => { + last = null + runs = 0 + + const [s, setS] = createSignal(1) + const e = new Effects() + e.stopEffects() // stop immediately after creation + + // does not auto start + e.addEffectFn(() => { + runs++ + last = s() + }) + + expect(last).toBe(null) + expect(runs).toBe(0) + + e.startEffects() // now start effects + + testEffects(e, s, setS) + }) + + it('effects stopped initially with static autoStartEffects = false', () => { + last = null + runs = 0 + + class TestEffects extends Effects { + static autoStartEffects = false + + @effect testEffect() { + runs++ + last = s() + } + } + + const [s, setS] = createSignal(1) + const e = new TestEffects() // effects stopped initially + + expect(last).toBe(null) + expect(runs).toBe(0) + + e.startEffects() // now start effects + + testEffects(e, s, setS) + }) + + function testEffects(e: Effects, s: Accessor, setS: Setter) { expect(last).toBe(1) expect(runs).toBe(1) @@ -55,6 +110,7 @@ describe('classy-solid', () => { // Add a new effect after clearing previous ones + // auto starts e.createEffect(() => { runs++ last = s() @@ -65,7 +121,7 @@ describe('classy-solid', () => { setS(7) expect(last).toBe(7) expect(runs).toBe(6) - }) + } it('startEffects does not duplicate effects', () => { const [s, setS] = createSignal(1) diff --git a/src/mixins/Effectful.ts b/src/mixins/Effectful.ts index a73eed0..ea60baa 100644 --- a/src/mixins/Effectful.ts +++ b/src/mixins/Effectful.ts @@ -86,6 +86,18 @@ export function Effectful(Base: T) { this.#createEffect(fn) } + /** + * Adds an effect function to the list of tracked effects without + * starting it. This is useful for adding an effect, then using + * `startEffects()` later to start all effects at once. + * + * The `@effect` decorator uses this internally when its `autoStart` + * option is set to `false`. + */ + addEffectFn(fn: () => void) { + this.#effectFunctions.push(fn) + } + #isRestarting = false /** diff --git a/src/signals/memoify.ts b/src/signals/memoify.ts index d84bb13..d75b122 100644 --- a/src/signals/memoify.ts +++ b/src/signals/memoify.ts @@ -1,7 +1,7 @@ import {createMemo} from 'solid-js' import {createWritableMemo} from '@solid-primitives/memo' import {getInheritedDescriptor} from 'lowclass/dist/getInheritedDescriptor.js' -import {isMemoGetter, isSignalGetter} from '../_state.js' +import {isMemoGetter__, isSignalGetter__} from '../_state.js' import type {AnyObject, MemberStat} from '../decorators/types.js' const Undefined = Symbol() @@ -98,7 +98,7 @@ export function memoify(obj: AnyObject, ...props: PropertyKey[]) { } // Skip if already memoified or signalified - if (descriptor.get && (isMemoGetter.has(descriptor.get) || isSignalGetter.has(descriptor.get))) { + if (descriptor.get && (isMemoGetter__.has(descriptor.get) || isSignalGetter__.has(descriptor.get))) { memberStat = null continue } @@ -148,7 +148,7 @@ export function memoify(obj: AnyObject, ...props: PropertyKey[]) { Object.defineProperty(value, 'name', {value: name, configurable: true}) Object.defineProperty(obj, key, {value, configurable: true, enumerable: descriptor.enumerable}) - isMemoGetter.add(value) + isMemoGetter__.add(value) } // Handle accessors @@ -173,7 +173,7 @@ export function memoify(obj: AnyObject, ...props: PropertyKey[]) { configurable: true, enumerable: descriptor.enumerable, }) - isMemoGetter.add(get) + isMemoGetter__.add(get) } else { // Throw in decorator mode only. if (memberStat) { diff --git a/src/signals/signalify.ts b/src/signals/signalify.ts index dbfd343..4989750 100644 --- a/src/signals/signalify.ts +++ b/src/signals/signalify.ts @@ -2,7 +2,7 @@ import {getInheritedDescriptor} from 'lowclass/dist/getInheritedDescriptor.js' import {$PROXY, batch, untrack} from 'solid-js' import type {PropKey} from '../decorators/types.js' import {createSignalFunction, type SignalFunction} from './createSignalFunction.js' -import {isMemoGetter, isSignalGetter} from '../_state.js' +import {isMemoGetter__, isSignalGetter__} from '../_state.js' type AnyObject = Record @@ -126,10 +126,10 @@ export function createSignalAccessor__( originalSet = descriptor.set // If the original getter is already a signal getter, skip re-signalifying. - if (originalGet && isSignalGetter.has(originalGet)) return + if (originalGet && isSignalGetter__.has(originalGet)) return // If the original getter is already a memo getter, skip signalifying. - if (originalGet && isMemoGetter.has(originalGet)) return + if (originalGet && isMemoGetter__.has(originalGet)) return // Signals require both getter and setter to work properly. if (isAccessor && !(originalGet && originalSet)) return @@ -179,7 +179,7 @@ export function createSignalAccessor__( }, } - isSignalGetter.add(newDescriptor.get!) + isSignalGetter__.add(newDescriptor.get!) Object.defineProperty(obj, prop, newDescriptor) }