From 0c2d9c3d11f491e71db98009f56afae000875e14 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 27 Nov 2025 14:34:42 +0000 Subject: [PATCH 1/3] Initial plan From d737437fe1ae62d200e12a64adc66c4f50ba50a7 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 27 Nov 2025 14:38:29 +0000 Subject: [PATCH 2/3] Rename useResource() to createResource() in ShadowObjectParams API Co-authored-by: spearwolf <12805+spearwolf@users.noreply.github.com> --- packages/shadow-objects/CHANGELOG.md | 6 +++++- packages/shadow-objects/README.md | 2 +- packages/shadow-objects/src/in-the-dark/Kernel.spec.ts | 10 +++++----- packages/shadow-objects/src/in-the-dark/Kernel.ts | 2 +- packages/shadow-objects/src/types.ts | 2 +- 5 files changed, 13 insertions(+), 9 deletions(-) diff --git a/packages/shadow-objects/CHANGELOG.md b/packages/shadow-objects/CHANGELOG.md index 1dd4617..8e8e433 100644 --- a/packages/shadow-objects/CHANGELOG.md +++ b/packages/shadow-objects/CHANGELOG.md @@ -5,10 +5,14 @@ All notable changes to [@spearwolf/shadow-objects](https://github.com/spearwolf/ The format is loosely based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [Unreleased] + +- renamed `useResource()` to `createResource()` in `ShadowObjectParams` interface + ## [0.23.0] - 2025-11-26 - enhance the shadow-objects creation api _aka_ `ShadowObjectParams` - added the `useProperties()` function - - added the `useResource()` function + - added the `createResource()` function - added lots of new tests and improved code coverage diff --git a/packages/shadow-objects/README.md b/packages/shadow-objects/README.md index 7ab85b8..cccfbad 100644 --- a/packages/shadow-objects/README.md +++ b/packages/shadow-objects/README.md @@ -106,7 +106,7 @@ The `ShadowObjectParams` object provides all necessary tools to interact with th | **`useParentContext(name)`** | Skips the current Entity and consumes context directly from the parent. | | **`provideContext(name, value)`** | Provides a context value (or signal) to descendant Entities. | | **`provideGlobalContext(name, value)`** | Provides a context value globally to all Entities. | -| **`useResource(factory, cleanup)`** | Manages an external resource (e.g., a Three.js object) with automatic cleanup when dependencies change. | +| **`createResource(factory, cleanup)`** | Manages an external resource (e.g., a Three.js object) with automatic cleanup when dependencies change. | | **`createEffect(callback)`** | Runs a side effect whenever accessed signals change. | | **`createSignal(initialValue)`** | Creates a local reactive state signal. | | **`createMemo(factory)`** | Creates a derived signal that updates only when dependencies change. | diff --git a/packages/shadow-objects/src/in-the-dark/Kernel.spec.ts b/packages/shadow-objects/src/in-the-dark/Kernel.spec.ts index 413f06d..4ecf272 100644 --- a/packages/shadow-objects/src/in-the-dark/Kernel.spec.ts +++ b/packages/shadow-objects/src/in-the-dark/Kernel.spec.ts @@ -547,7 +547,7 @@ describe('Kernel', () => { }); }); - describe('useResource', () => { + describe('createResource', () => { it('should create a resource and call cleanup on entity destruction', () => { const registry = new Registry(); const kernel = new Kernel(registry); @@ -559,8 +559,8 @@ describe('Kernel', () => { @ShadowObject({registry, token: 'testResource'}) class TestResource { - constructor({useResource}: ShadowObjectParams) { - resourceSignal = useResource(createFn, cleanupFn); + constructor({createResource}: ShadowObjectParams) { + resourceSignal = createResource(createFn, cleanupFn); } } expect(TestResource).toBeDefined(); @@ -587,8 +587,8 @@ describe('Kernel', () => { @ShadowObject({registry, token: 'testUndefinedResource'}) class TestUndefinedResource { - constructor({useResource}: ShadowObjectParams) { - useResource(createFn, cleanupFn); + constructor({createResource}: ShadowObjectParams) { + createResource(createFn, cleanupFn); } } expect(TestUndefinedResource).toBeDefined(); diff --git a/packages/shadow-objects/src/in-the-dark/Kernel.ts b/packages/shadow-objects/src/in-the-dark/Kernel.ts index 158b3cb..c8e1e25 100644 --- a/packages/shadow-objects/src/in-the-dark/Kernel.ts +++ b/packages/shadow-objects/src/in-the-dark/Kernel.ts @@ -442,7 +442,7 @@ export class Kernel { return result; }, - useResource(factory: () => T | undefined, cleanup?: (resource: T) => void): Signal { + createResource(factory: () => T | undefined, cleanup?: (resource: T) => void): Signal { const resourceSignal = createSignal(undefined); unsubscribeSecondary.add(() => destroySignal(resourceSignal)); diff --git a/packages/shadow-objects/src/types.ts b/packages/shadow-objects/src/types.ts index 8315f3c..61d0e89 100644 --- a/packages/shadow-objects/src/types.ts +++ b/packages/shadow-objects/src/types.ts @@ -112,7 +112,7 @@ export interface ShadowObjectParams { useProperty(name: string, isEqual?: CompareFunc): SignalReader; useProperties(props: Record): Record>; - useResource(factory: () => T | undefined, cleanup?: (resource: T) => void): Signal; + createResource(factory: () => T | undefined, cleanup?: (resource: T) => void): Signal; createEffect(...args: Parameters): ReturnType; createSignal(...args: Parameters>): ReturnType>; From a7997d9006532b42ba87ef5a5d3702d17d714f16 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 27 Nov 2025 14:47:40 +0000 Subject: [PATCH 3/3] Keep useResource() in 0.23.0 CHANGELOG entry to preserve history Co-authored-by: spearwolf <12805+spearwolf@users.noreply.github.com> --- packages/shadow-objects/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/shadow-objects/CHANGELOG.md b/packages/shadow-objects/CHANGELOG.md index 8e8e433..499dbfc 100644 --- a/packages/shadow-objects/CHANGELOG.md +++ b/packages/shadow-objects/CHANGELOG.md @@ -13,6 +13,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - enhance the shadow-objects creation api _aka_ `ShadowObjectParams` - added the `useProperties()` function - - added the `createResource()` function + - added the `useResource()` function - added lots of new tests and improved code coverage