@toyz/loom 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app.d.ts +4 -1
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +9 -9
- package/dist/app.js.map +1 -1
- package/dist/decorators/create.d.ts +16 -25
- package/dist/decorators/create.d.ts.map +1 -1
- package/dist/decorators/create.js +25 -34
- package/dist/decorators/create.js.map +1 -1
- package/dist/decorators/events.d.ts +10 -8
- package/dist/decorators/events.d.ts.map +1 -1
- package/dist/decorators/events.js +53 -43
- package/dist/decorators/events.js.map +1 -1
- package/dist/decorators/symbols.d.ts +2 -0
- package/dist/decorators/symbols.d.ts.map +1 -1
- package/dist/decorators/symbols.js +2 -0
- package/dist/decorators/symbols.js.map +1 -1
- package/dist/di/decorators.d.ts +15 -15
- package/dist/di/decorators.d.ts.map +1 -1
- package/dist/di/decorators.js +23 -33
- package/dist/di/decorators.js.map +1 -1
- package/dist/di/watch.d.ts +1 -7
- package/dist/di/watch.d.ts.map +1 -1
- package/dist/di/watch.js +17 -20
- package/dist/di/watch.js.map +1 -1
- package/dist/element/decorators.d.ts +26 -10
- package/dist/element/decorators.d.ts.map +1 -1
- package/dist/element/decorators.js +75 -31
- package/dist/element/decorators.js.map +1 -1
- package/dist/element/element.d.ts.map +1 -1
- package/dist/element/element.js +15 -3
- package/dist/element/element.js.map +1 -1
- package/dist/element/form.d.ts +63 -0
- package/dist/element/form.d.ts.map +1 -0
- package/dist/element/form.js +167 -0
- package/dist/element/form.js.map +1 -0
- package/dist/element/icon.d.ts +3 -3
- package/dist/element/icon.d.ts.map +1 -1
- package/dist/element/icon.js +131 -74
- package/dist/element/icon.js.map +1 -1
- package/dist/element/index.d.ts +8 -1
- package/dist/element/index.d.ts.map +1 -1
- package/dist/element/index.js +9 -1
- package/dist/element/index.js.map +1 -1
- package/dist/element/lazy.d.ts +31 -0
- package/dist/element/lazy.d.ts.map +1 -0
- package/dist/element/lazy.js +71 -0
- package/dist/element/lazy.js.map +1 -0
- package/dist/element/lifecycle.d.ts +27 -29
- package/dist/element/lifecycle.d.ts.map +1 -1
- package/dist/element/lifecycle.js +60 -79
- package/dist/element/lifecycle.js.map +1 -1
- package/dist/element/slots.d.ts +23 -0
- package/dist/element/slots.d.ts.map +1 -0
- package/dist/element/slots.js +54 -0
- package/dist/element/slots.js.map +1 -0
- package/dist/element/timing.d.ts +10 -7
- package/dist/element/timing.d.ts.map +1 -1
- package/dist/element/timing.js +67 -52
- package/dist/element/timing.js.map +1 -1
- package/dist/element/transition.d.ts +32 -0
- package/dist/element/transition.d.ts.map +1 -0
- package/dist/element/transition.js +70 -0
- package/dist/element/transition.js.map +1 -0
- package/dist/element/virtual.js +235 -194
- package/dist/element/virtual.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/router/decorators.d.ts +9 -38
- package/dist/router/decorators.d.ts.map +1 -1
- package/dist/router/decorators.js +7 -52
- package/dist/router/decorators.js.map +1 -1
- package/dist/router/link.d.ts +4 -4
- package/dist/router/link.d.ts.map +1 -1
- package/dist/router/link.js +134 -72
- package/dist/router/link.js.map +1 -1
- package/dist/router/outlet.d.ts +2 -2
- package/dist/router/outlet.d.ts.map +1 -1
- package/dist/router/outlet.js +188 -138
- package/dist/router/outlet.js.map +1 -1
- package/dist/router/route-lifecycle.d.ts +2 -2
- package/dist/router/route-lifecycle.d.ts.map +1 -1
- package/dist/router/route-lifecycle.js +18 -8
- package/dist/router/route-lifecycle.js.map +1 -1
- package/dist/router/route.d.ts +1 -1
- package/dist/router/route.d.ts.map +1 -1
- package/dist/router/router.js +2 -2
- package/dist/router/router.js.map +1 -1
- package/dist/store/decorators.d.ts +32 -24
- package/dist/store/decorators.d.ts.map +1 -1
- package/dist/store/decorators.js +98 -117
- package/dist/store/decorators.js.map +1 -1
- package/dist/store/watch.d.ts +12 -11
- package/dist/store/watch.d.ts.map +1 -1
- package/dist/store/watch.js +20 -15
- package/dist/store/watch.js.map +1 -1
- package/dist/testing.d.ts +55 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +99 -0
- package/dist/testing.js.map +1 -0
- package/dist/transform/transform.d.ts +7 -3
- package/dist/transform/transform.d.ts.map +1 -1
- package/dist/transform/transform.js +17 -9
- package/dist/transform/transform.js.map +1 -1
- package/dist/transform/typed.d.ts +1 -1
- package/dist/transform/typed.d.ts.map +1 -1
- package/dist/transform/typed.js.map +1 -1
- package/package.json +5 -1
package/dist/app.d.ts
CHANGED
|
@@ -42,7 +42,10 @@ declare class LoomApp {
|
|
|
42
42
|
/** Queue a @service class for auto-instantiation on start() */
|
|
43
43
|
registerService(ctor: any): void;
|
|
44
44
|
/** Queue a @factory method for invocation on start() */
|
|
45
|
-
registerFactory(key: any,
|
|
45
|
+
registerFactory(key: any, info: {
|
|
46
|
+
method: string;
|
|
47
|
+
fn: Function;
|
|
48
|
+
}): void;
|
|
46
49
|
/** Queue a @component for customElements.define() on start() */
|
|
47
50
|
register(tag: string, ctor: CustomElementConstructor): void;
|
|
48
51
|
/** Retrieve a provider/service by key. Throws if missing. */
|
package/dist/app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAAO,KAAK,WAAW,EAAE,KAAK,OAAO,EAAE,MAAM,OAAO,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAQzC,cAAM,OAAO;IACX,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,UAAU,CAAyD;IAC3E,OAAO,CAAC,QAAQ,CAAS;IAIzB,gEAAgE;IAChE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IAE5D,2CAA2C;IAC3C,IAAI,CAAC,CAAC,SAAS,SAAS,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAEzC,uCAAuC;IACvC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI;IAIvD;;;;;;;;;OASG;IACH,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAC5B,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI;IAuBzC,+DAA+D;IAC/D,eAAe,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IAIhC,wDAAwD;IACxD,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAAO,KAAK,WAAW,EAAE,KAAK,OAAO,EAAE,MAAM,OAAO,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAQzC,cAAM,OAAO;IACX,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,UAAU,CAAyD;IAC3E,OAAO,CAAC,QAAQ,CAAS;IAIzB,gEAAgE;IAChE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IAE5D,2CAA2C;IAC3C,IAAI,CAAC,CAAC,SAAS,SAAS,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAEzC,uCAAuC;IACvC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI;IAIvD;;;;;;;;;OASG;IACH,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAC5B,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI;IAuBzC,+DAA+D;IAC/D,eAAe,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IAIhC,wDAAwD;IACxD,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,QAAQ,CAAA;KAAE,GAAG,IAAI;IAIvE,gEAAgE;IAChE,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,wBAAwB,GAAG,IAAI;IAW3D,6DAA6D;IAC7D,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;IAQzB,mEAAmE;IACnE,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,GAAG,SAAS;IAIvC,sEAAsE;IACtE,OAAO,CAAC,aAAa;IAWrB;;;;;;OAMG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA2C5B,mCAAmC;IACnC,IAAI,IAAI,IAAI;IAKZ,uCAAuC;IACvC,IAAI,OAAO,IAAI,OAAO,CAErB;CACF;AAED,qDAAqD;AACrD,eAAO,MAAM,GAAG,SAAgB,CAAC;AACjC,YAAY,EAAE,OAAO,EAAE,CAAC"}
|
package/dist/app.js
CHANGED
|
@@ -57,12 +57,17 @@ class LoomApp {
|
|
|
57
57
|
this.services.push(ctor);
|
|
58
58
|
}
|
|
59
59
|
/** Queue a @factory method for invocation on start() */
|
|
60
|
-
registerFactory(key,
|
|
61
|
-
this.factories.push({
|
|
60
|
+
registerFactory(key, info) {
|
|
61
|
+
this.factories.push({ key, ...info });
|
|
62
62
|
}
|
|
63
63
|
/** Queue a @component for customElements.define() on start() */
|
|
64
64
|
register(tag, ctor) {
|
|
65
65
|
this.components.push({ tag, ctor });
|
|
66
|
+
// Late registration (after start): define immediately so lazy-loaded
|
|
67
|
+
// components get upgraded by the browser's custom element registry.
|
|
68
|
+
if (this._started && !customElements.get(tag)) {
|
|
69
|
+
customElements.define(tag, ctor);
|
|
70
|
+
}
|
|
66
71
|
}
|
|
67
72
|
// ── Resolution ──
|
|
68
73
|
/** Retrieve a provider/service by key. Throws if missing. */
|
|
@@ -116,13 +121,8 @@ class LoomApp {
|
|
|
116
121
|
}
|
|
117
122
|
}
|
|
118
123
|
// 2. Run @factory methods on instantiated services
|
|
119
|
-
for (const {
|
|
120
|
-
|
|
121
|
-
const svc = this.providers.get(proto.constructor);
|
|
122
|
-
if (!svc)
|
|
123
|
-
continue;
|
|
124
|
-
const args = this.resolveParams(proto, method);
|
|
125
|
-
const result = await svc[method](...args);
|
|
124
|
+
for (const { fn, method, key } of this.factories) {
|
|
125
|
+
const result = await fn();
|
|
126
126
|
if (result != null) {
|
|
127
127
|
this.providers.set(key ?? result.constructor, result);
|
|
128
128
|
}
|
package/dist/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,GAAG,EAAkC,MAAM,OAAO,CAAC;AAS5D,MAAM,OAAO;IACH,SAAS,GAAG,IAAI,GAAG,EAAY,CAAC;IAChC,QAAQ,GAAU,EAAE,CAAC;IACrB,SAAS,GAAkB,EAAE,CAAC;IAC9B,UAAU,GAAsD,EAAE,CAAC;IACnE,QAAQ,GAAG,KAAK,CAAC;IAEzB,gEAAgE;IAEhE,gEAAgE;IAChE,EAAE,CAAI,IAAoB,EAAE,OAAmB,IAAgB,OAAO,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAE9F,2CAA2C;IAC3C,IAAI,CAAsB,KAAQ,IAAU,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE9D,uCAAuC;IACvC,GAAG,CAAI,IAAoB,EAAE,OAAmB,IAAU,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAgBnF,GAAG,CAAC,UAAe,EAAE,QAAc;QACjC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,oCAAoC;YACpC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC3C,CAAC;aAAM,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE,CAAC;YAC5C,IAAI,UAAU,CAAC,SAAS,EAAE,WAAW,KAAK,UAAU,EAAE,CAAC;gBACrD,kCAAkC;gBAClC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,UAAU,EAAE,CAAC,CAAC;YACnD,CAAC;iBAAM,CAAC;gBACN,6BAA6B;gBAC7B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;gBAC5B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,kCAAkC;YAClC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,4CAA4C;IAE5C,+DAA+D;IAC/D,eAAe,CAAC,IAAS;QACvB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,wDAAwD;IACxD,eAAe,CAAC,GAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,56 +1,47 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* createDecorator — Universal decorator factory.
|
|
2
|
+
* createDecorator — Universal decorator factory (TC39 Stage 3).
|
|
3
3
|
*
|
|
4
4
|
* The foundation every Loom decorator is built on.
|
|
5
5
|
*
|
|
6
|
-
* Setup runs at **define-time** (on the
|
|
6
|
+
* Setup runs at **define-time** (on the method or constructor).
|
|
7
7
|
* If setup returns a function, it runs **per-instance on connect**.
|
|
8
8
|
* If the connect function returns a function, it runs **on disconnect**.
|
|
9
9
|
*
|
|
10
10
|
* Flow: define → connect → disconnect
|
|
11
11
|
*
|
|
12
12
|
* @typeParam Args — Tuple of decorator argument types
|
|
13
|
-
* @typeParam T — Element type (default: any)
|
|
14
13
|
*
|
|
15
14
|
* ```ts
|
|
16
|
-
* //
|
|
17
|
-
* const
|
|
18
|
-
* Object.defineProperty(proto, key, {
|
|
19
|
-
* get() { return this.shadow.querySelector(sel); }
|
|
20
|
-
* });
|
|
21
|
-
* });
|
|
22
|
-
*
|
|
23
|
-
* // Lifecycle only — setup on connect, cleanup on disconnect
|
|
24
|
-
* const interval = createDecorator<[ms: number]>((proto, key, ms) => {
|
|
15
|
+
* // Method decorator with lifecycle
|
|
16
|
+
* const interval = createDecorator<[ms: number]>((method, key, ms) => {
|
|
25
17
|
* return (el) => {
|
|
26
|
-
* const id = setInterval(() => el
|
|
18
|
+
* const id = setInterval(() => method.call(el), ms);
|
|
27
19
|
* return () => clearInterval(id);
|
|
28
20
|
* };
|
|
29
21
|
* });
|
|
30
22
|
*
|
|
31
|
-
* //
|
|
32
|
-
* const
|
|
33
|
-
*
|
|
34
|
-
* return (el) => bus.on(Type, (e) => el[key](e));
|
|
23
|
+
* // Method decorator, define-time only
|
|
24
|
+
* const guard = createDecorator<[name?: string]>((method, key, name) => {
|
|
25
|
+
* guardRegistry.set(name ?? key, method);
|
|
35
26
|
* });
|
|
36
27
|
*
|
|
37
28
|
* // Class decorator
|
|
38
29
|
* const component = createDecorator<[tag: string]>((ctor, tag) => {
|
|
39
|
-
*
|
|
30
|
+
* customElements.define(tag, ctor as any);
|
|
40
31
|
* }, { class: true });
|
|
41
32
|
* ```
|
|
42
33
|
*/
|
|
43
|
-
type ConnectFn = (element:
|
|
44
|
-
type
|
|
45
|
-
type ClassSetup<Args extends
|
|
34
|
+
type ConnectFn = (element: HTMLElement) => void | (() => void);
|
|
35
|
+
type MethodSetup<Args extends unknown[]> = (method: Function, key: string, ...args: Args) => void | ConnectFn;
|
|
36
|
+
type ClassSetup<Args extends unknown[]> = (ctor: Function, ...args: Args) => void;
|
|
46
37
|
export interface DecoratorOptions {
|
|
47
38
|
class?: boolean;
|
|
48
39
|
}
|
|
49
|
-
export declare function createDecorator<Args extends
|
|
40
|
+
export declare function createDecorator<Args extends unknown[] = []>(setup: ClassSetup<Args>, options: {
|
|
50
41
|
class: true;
|
|
51
|
-
}): (...args: Args) => (
|
|
52
|
-
export declare function createDecorator<Args extends
|
|
42
|
+
}): (...args: Args) => (value: Function, context: ClassDecoratorContext) => void;
|
|
43
|
+
export declare function createDecorator<Args extends unknown[] = []>(setup: MethodSetup<Args>, options?: {
|
|
53
44
|
class?: false;
|
|
54
|
-
}): (...args: Args) => (
|
|
45
|
+
}): (...args: Args) => (method: Function, context: ClassMethodDecoratorContext) => void;
|
|
55
46
|
export {};
|
|
56
47
|
//# sourceMappingURL=create.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/decorators/create.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/decorators/create.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAIH,KAAK,SAAS,GAAG,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;AAC/D,KAAK,WAAW,CAAC,IAAI,SAAS,OAAO,EAAE,IAAI,CACzC,MAAM,EAAE,QAAQ,EAChB,GAAG,EAAE,MAAM,EACX,GAAG,IAAI,EAAE,IAAI,KACV,IAAI,GAAG,SAAS,CAAC;AACtB,KAAK,UAAU,CAAC,IAAI,SAAS,OAAO,EAAE,IAAI,CACxC,IAAI,EAAE,QAAQ,EACd,GAAG,IAAI,EAAE,IAAI,KACV,IAAI,CAAC;AAEV,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAGD,wBAAgB,eAAe,CAAC,IAAI,SAAS,OAAO,EAAE,GAAG,EAAE,EACzD,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,EACvB,OAAO,EAAE;IAAE,KAAK,EAAE,IAAI,CAAA;CAAE,GACvB,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,qBAAqB,KAAK,IAAI,CAAC;AAGhF,wBAAgB,eAAe,CAAC,IAAI,SAAS,OAAO,EAAE,GAAG,EAAE,EACzD,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,EACxB,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,GAC1B,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,2BAA2B,KAAK,IAAI,CAAC"}
|
|
@@ -1,70 +1,61 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* createDecorator — Universal decorator factory.
|
|
2
|
+
* createDecorator — Universal decorator factory (TC39 Stage 3).
|
|
3
3
|
*
|
|
4
4
|
* The foundation every Loom decorator is built on.
|
|
5
5
|
*
|
|
6
|
-
* Setup runs at **define-time** (on the
|
|
6
|
+
* Setup runs at **define-time** (on the method or constructor).
|
|
7
7
|
* If setup returns a function, it runs **per-instance on connect**.
|
|
8
8
|
* If the connect function returns a function, it runs **on disconnect**.
|
|
9
9
|
*
|
|
10
10
|
* Flow: define → connect → disconnect
|
|
11
11
|
*
|
|
12
12
|
* @typeParam Args — Tuple of decorator argument types
|
|
13
|
-
* @typeParam T — Element type (default: any)
|
|
14
13
|
*
|
|
15
14
|
* ```ts
|
|
16
|
-
* //
|
|
17
|
-
* const
|
|
18
|
-
* Object.defineProperty(proto, key, {
|
|
19
|
-
* get() { return this.shadow.querySelector(sel); }
|
|
20
|
-
* });
|
|
21
|
-
* });
|
|
22
|
-
*
|
|
23
|
-
* // Lifecycle only — setup on connect, cleanup on disconnect
|
|
24
|
-
* const interval = createDecorator<[ms: number]>((proto, key, ms) => {
|
|
15
|
+
* // Method decorator with lifecycle
|
|
16
|
+
* const interval = createDecorator<[ms: number]>((method, key, ms) => {
|
|
25
17
|
* return (el) => {
|
|
26
|
-
* const id = setInterval(() => el
|
|
18
|
+
* const id = setInterval(() => method.call(el), ms);
|
|
27
19
|
* return () => clearInterval(id);
|
|
28
20
|
* };
|
|
29
21
|
* });
|
|
30
22
|
*
|
|
31
|
-
* //
|
|
32
|
-
* const
|
|
33
|
-
*
|
|
34
|
-
* return (el) => bus.on(Type, (e) => el[key](e));
|
|
23
|
+
* // Method decorator, define-time only
|
|
24
|
+
* const guard = createDecorator<[name?: string]>((method, key, name) => {
|
|
25
|
+
* guardRegistry.set(name ?? key, method);
|
|
35
26
|
* });
|
|
36
27
|
*
|
|
37
28
|
* // Class decorator
|
|
38
29
|
* const component = createDecorator<[tag: string]>((ctor, tag) => {
|
|
39
|
-
*
|
|
30
|
+
* customElements.define(tag, ctor as any);
|
|
40
31
|
* }, { class: true });
|
|
41
32
|
* ```
|
|
42
33
|
*/
|
|
34
|
+
import { CONNECT_HOOKS } from "./symbols";
|
|
43
35
|
// Implementation
|
|
44
36
|
export function createDecorator(setup, options = { class: false }) {
|
|
45
37
|
if (options.class) {
|
|
46
|
-
// Class decorator: (...args) => (
|
|
38
|
+
// Class decorator: (...args) => (value, context) => void
|
|
47
39
|
return (...args) => {
|
|
48
|
-
return (
|
|
49
|
-
setup(
|
|
40
|
+
return (value, _context) => {
|
|
41
|
+
setup(value, ...args);
|
|
50
42
|
};
|
|
51
43
|
};
|
|
52
44
|
}
|
|
53
|
-
//
|
|
45
|
+
// Method decorator: (...args) => (method, context) => void
|
|
46
|
+
// Setup receives (method, key, ...args).
|
|
47
|
+
// If a ConnectFn is returned, push it to CONNECT_HOOKS for LoomElement to consume.
|
|
54
48
|
return (...args) => {
|
|
55
|
-
return (
|
|
56
|
-
const
|
|
57
|
-
|
|
58
|
-
: setup(target, key, ...args);
|
|
49
|
+
return (method, context) => {
|
|
50
|
+
const key = String(context.name);
|
|
51
|
+
const connectFn = setup(method, key, ...args);
|
|
59
52
|
if (typeof connectFn === "function") {
|
|
60
|
-
// Has lifecycle —
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
this.track(cleanup);
|
|
67
|
-
};
|
|
53
|
+
// Has lifecycle — register as connect hook
|
|
54
|
+
context.addInitializer(function () {
|
|
55
|
+
if (!this[CONNECT_HOOKS])
|
|
56
|
+
this[CONNECT_HOOKS] = [];
|
|
57
|
+
this[CONNECT_HOOKS].push(connectFn);
|
|
58
|
+
});
|
|
68
59
|
}
|
|
69
60
|
};
|
|
70
61
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/decorators/create.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/decorators/create.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AA6B1C,iBAAiB;AACjB,MAAM,UAAU,eAAe,CAC7B,KAA2C,EAC3C,UAA4B,EAAE,KAAK,EAAE,KAAK,EAAE;IAE5C,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,yDAAyD;QACzD,OAAO,CAAC,GAAG,IAAU,EAAE,EAAE;YACvB,OAAO,CAAC,KAAe,EAAE,QAA+B,EAAE,EAAE;gBACzD,KAA0B,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;YAC9C,CAAC,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC;IAED,2DAA2D;IAC3D,yCAAyC;IACzC,mFAAmF;IACnF,OAAO,CAAC,GAAG,IAAU,EAAE,EAAE;QACvB,OAAO,CAAC,MAAgB,EAAE,OAAoC,EAAE,EAAE;YAChE,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACjC,MAAM,SAAS,GAAI,KAA2B,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;YAErE,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE,CAAC;gBACpC,2CAA2C;gBAC3C,OAAO,CAAC,cAAc,CAAC;oBACrB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;wBAAE,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC;oBACnD,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACtC,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Loom — Event decorators
|
|
2
|
+
* Loom — Event decorators (TC39 Stage 3)
|
|
3
3
|
*
|
|
4
4
|
* @on — Declarative event subscription (bus events or DOM events)
|
|
5
5
|
* @emit — Auto-broadcast to the bus (field or method form)
|
|
@@ -21,23 +21,25 @@ import { type Constructor } from "../bus";
|
|
|
21
21
|
* onResize(e: Event) { ... }
|
|
22
22
|
* ```
|
|
23
23
|
*/
|
|
24
|
-
export declare function on<T extends LoomEvent>(type: Constructor<T>): (
|
|
25
|
-
export declare function on(target: EventTarget, event: string): (
|
|
24
|
+
export declare function on<T extends LoomEvent>(type: Constructor<T>): (method: Function, context: ClassMethodDecoratorContext) => void;
|
|
25
|
+
export declare function on(target: EventTarget, event: string): (method: Function, context: ClassMethodDecoratorContext) => void;
|
|
26
26
|
/**
|
|
27
27
|
* Auto-broadcast to the bus.
|
|
28
28
|
*
|
|
29
|
-
* On a field: fires an event via factory whenever value changes.
|
|
30
29
|
* On a method: return value is auto-emitted (must be LoomEvent subclass).
|
|
31
30
|
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
* selectedIndex = 0;
|
|
31
|
+
* On a field (with @reactive): fires event via factory whenever value changes.
|
|
32
|
+
* Field form stores metadata consumed by @reactive's subscriber wiring.
|
|
35
33
|
*
|
|
34
|
+
* ```ts
|
|
36
35
|
* @emit()
|
|
37
36
|
* placePixel(x: bigint, y: bigint): PixelPlaced {
|
|
38
37
|
* return new PixelPlaced(x, y, this.selectedColor);
|
|
39
38
|
* }
|
|
39
|
+
*
|
|
40
|
+
* @reactive @emit(ColorSelect, idx => new ColorSelect(idx, 0))
|
|
41
|
+
* accessor selectedIndex = 0;
|
|
40
42
|
* ```
|
|
41
43
|
*/
|
|
42
|
-
export declare function emit<T extends LoomEvent>(_type?: Constructor<T>, factory?: (val:
|
|
44
|
+
export declare function emit<T extends LoomEvent>(_type?: Constructor<T>, factory?: (val: unknown) => T): (value: Function | ClassAccessorDecoratorTarget<any, any>, context: ClassMethodDecoratorContext | ClassAccessorDecoratorContext) => void | ((this: unknown, ...args: unknown[]) => unknown);
|
|
43
45
|
//# sourceMappingURL=events.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/decorators/events.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAO,KAAK,WAAW,EAAE,MAAM,QAAQ,CAAC;AAE/C;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,EAAE,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/decorators/events.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAO,KAAK,WAAW,EAAE,MAAM,QAAQ,CAAC;AAE/C;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,EAAE,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,2BAA2B,KAAK,IAAI,CAAC;AAChI,wBAAgB,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,2BAA2B,KAAK,IAAI,CAAC;AA6BzH;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,SAAS,EACtC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EACtB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,CAAC,IAwBrB,OAAO,QAAQ,GAAG,4BAA4B,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,SAAS,2BAA2B,GAAG,6BAA6B,oBApB7G,OAAO,WAAW,OAAO,EAAE,cA0BrD"}
|
|
@@ -1,74 +1,84 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Loom — Event decorators
|
|
2
|
+
* Loom — Event decorators (TC39 Stage 3)
|
|
3
3
|
*
|
|
4
4
|
* @on — Declarative event subscription (bus events or DOM events)
|
|
5
5
|
* @emit — Auto-broadcast to the bus (field or method form)
|
|
6
6
|
*/
|
|
7
|
-
import { EMITTERS, ON_HANDLERS } from "./symbols";
|
|
7
|
+
import { EMITTERS, ON_HANDLERS, CONNECT_HOOKS } from "./symbols";
|
|
8
8
|
import { LoomEvent } from "../event";
|
|
9
9
|
import { bus } from "../bus";
|
|
10
10
|
export function on(typeOrTarget, event) {
|
|
11
|
-
return (
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
}
|
|
18
|
-
else {
|
|
19
|
-
target[ON_HANDLERS].push({ key, type: typeOrTarget });
|
|
20
|
-
}
|
|
21
|
-
// Patch connectedCallback for LoomElement self-wiring
|
|
22
|
-
const orig = target.connectedCallback;
|
|
23
|
-
target.connectedCallback = function () {
|
|
24
|
-
orig?.call(this);
|
|
11
|
+
return (method, context) => {
|
|
12
|
+
const key = String(context.name);
|
|
13
|
+
context.addInitializer(function () {
|
|
14
|
+
// Store metadata for service wiring by app.start()
|
|
15
|
+
if (!this[ON_HANDLERS])
|
|
16
|
+
this[ON_HANDLERS] = [];
|
|
25
17
|
if (event !== undefined) {
|
|
26
|
-
|
|
27
|
-
const fn = (e) => this[key](e);
|
|
28
|
-
typeOrTarget.addEventListener(event, fn);
|
|
29
|
-
this.track(() => typeOrTarget.removeEventListener(event, fn));
|
|
18
|
+
this[ON_HANDLERS].push({ key, domTarget: typeOrTarget, event });
|
|
30
19
|
}
|
|
31
20
|
else {
|
|
32
|
-
|
|
33
|
-
this.track(bus.on(typeOrTarget, (e) => this[key](e)));
|
|
21
|
+
this[ON_HANDLERS].push({ key, type: typeOrTarget });
|
|
34
22
|
}
|
|
35
|
-
|
|
23
|
+
// Wire lifecycle via CONNECT_HOOKS
|
|
24
|
+
if (!this[CONNECT_HOOKS])
|
|
25
|
+
this[CONNECT_HOOKS] = [];
|
|
26
|
+
this[CONNECT_HOOKS].push((el) => {
|
|
27
|
+
if (event !== undefined) {
|
|
28
|
+
const fn = (e) => method.call(el, e);
|
|
29
|
+
typeOrTarget.addEventListener(event, fn);
|
|
30
|
+
return () => typeOrTarget.removeEventListener(event, fn);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
return bus.on(typeOrTarget, (e) => method.call(el, e));
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
});
|
|
36
37
|
};
|
|
37
38
|
}
|
|
38
39
|
/**
|
|
39
40
|
* Auto-broadcast to the bus.
|
|
40
41
|
*
|
|
41
|
-
* On a field: fires an event via factory whenever value changes.
|
|
42
42
|
* On a method: return value is auto-emitted (must be LoomEvent subclass).
|
|
43
43
|
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
* selectedIndex = 0;
|
|
44
|
+
* On a field (with @reactive): fires event via factory whenever value changes.
|
|
45
|
+
* Field form stores metadata consumed by @reactive's subscriber wiring.
|
|
47
46
|
*
|
|
47
|
+
* ```ts
|
|
48
48
|
* @emit()
|
|
49
49
|
* placePixel(x: bigint, y: bigint): PixelPlaced {
|
|
50
50
|
* return new PixelPlaced(x, y, this.selectedColor);
|
|
51
51
|
* }
|
|
52
|
+
*
|
|
53
|
+
* @reactive @emit(ColorSelect, idx => new ColorSelect(idx, 0))
|
|
54
|
+
* accessor selectedIndex = 0;
|
|
52
55
|
* ```
|
|
53
56
|
*/
|
|
54
57
|
export function emit(_type, factory) {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
const
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
if (!
|
|
69
|
-
|
|
70
|
-
|
|
58
|
+
// Method decorator form
|
|
59
|
+
function methodDecorator(method, context) {
|
|
60
|
+
return function (...args) {
|
|
61
|
+
const result = method.apply(this, args);
|
|
62
|
+
if (result instanceof LoomEvent)
|
|
63
|
+
bus.emit(result);
|
|
64
|
+
return result;
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
// Auto-accessor decorator form (field with @reactive)
|
|
68
|
+
function accessorDecorator(_target, context) {
|
|
69
|
+
const field = String(context.name);
|
|
70
|
+
context.addInitializer(function () {
|
|
71
|
+
if (!this[EMITTERS])
|
|
72
|
+
this[EMITTERS] = [];
|
|
73
|
+
this[EMITTERS].push({ field, factory });
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
// Return a unified decorator that handles both method and accessor
|
|
77
|
+
return (value, context) => {
|
|
78
|
+
if (context.kind === "method") {
|
|
79
|
+
return methodDecorator(value, context);
|
|
71
80
|
}
|
|
81
|
+
return accessorDecorator(value, context);
|
|
72
82
|
};
|
|
73
83
|
}
|
|
74
84
|
//# sourceMappingURL=events.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/decorators/events.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/decorators/events.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,4 +12,6 @@ export declare const ROUTE_PROPS: unique symbol;
|
|
|
12
12
|
export declare const TRANSFORMS: unique symbol;
|
|
13
13
|
export declare const ROUTE_ENTER: unique symbol;
|
|
14
14
|
export declare const ROUTE_LEAVE: unique symbol;
|
|
15
|
+
export declare const CONNECT_HOOKS: unique symbol;
|
|
16
|
+
export declare const FIRST_UPDATED_HOOKS: unique symbol;
|
|
15
17
|
//# sourceMappingURL=symbols.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"symbols.d.ts","sourceRoot":"","sources":["../../src/decorators/symbols.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,SAAS,eAA2B,CAAC;AAClD,eAAO,MAAM,KAAK,eAAuB,CAAC;AAC1C,eAAO,MAAM,WAAW,eAAoB,CAAC;AAC7C,eAAO,MAAM,QAAQ,eAAuB,CAAC;AAC7C,eAAO,MAAM,QAAQ,eAAsB,CAAC;AAC5C,eAAO,MAAM,cAAc,eAAgC,CAAC;AAC5D,eAAO,MAAM,aAAa,eAAuB,CAAC;AAClD,eAAO,MAAM,cAAc,eAAuB,CAAC;AACnD,eAAO,MAAM,gBAAgB,eAAyB,CAAC;AACvD,eAAO,MAAM,aAAa,eAA+B,CAAC;AAC1D,eAAO,MAAM,WAAW,eAA6B,CAAC;AACtD,eAAO,MAAM,UAAU,eAA4B,CAAC;AACpD,eAAO,MAAM,WAAW,eAA6B,CAAC;AACtD,eAAO,MAAM,WAAW,eAA6B,CAAC"}
|
|
1
|
+
{"version":3,"file":"symbols.d.ts","sourceRoot":"","sources":["../../src/decorators/symbols.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,SAAS,eAA2B,CAAC;AAClD,eAAO,MAAM,KAAK,eAAuB,CAAC;AAC1C,eAAO,MAAM,WAAW,eAAoB,CAAC;AAC7C,eAAO,MAAM,QAAQ,eAAuB,CAAC;AAC7C,eAAO,MAAM,QAAQ,eAAsB,CAAC;AAC5C,eAAO,MAAM,cAAc,eAAgC,CAAC;AAC5D,eAAO,MAAM,aAAa,eAAuB,CAAC;AAClD,eAAO,MAAM,cAAc,eAAuB,CAAC;AACnD,eAAO,MAAM,gBAAgB,eAAyB,CAAC;AACvD,eAAO,MAAM,aAAa,eAA+B,CAAC;AAC1D,eAAO,MAAM,WAAW,eAA6B,CAAC;AACtD,eAAO,MAAM,UAAU,eAA4B,CAAC;AACpD,eAAO,MAAM,WAAW,eAA6B,CAAC;AACtD,eAAO,MAAM,WAAW,eAA6B,CAAC;AACtD,eAAO,MAAM,aAAa,eAA+B,CAAC;AAC1D,eAAO,MAAM,mBAAmB,eAAqC,CAAC"}
|
|
@@ -14,4 +14,6 @@ export const ROUTE_PROPS = Symbol("loom:route:props");
|
|
|
14
14
|
export const TRANSFORMS = Symbol("loom:transforms");
|
|
15
15
|
export const ROUTE_ENTER = Symbol("loom:route:enter");
|
|
16
16
|
export const ROUTE_LEAVE = Symbol("loom:route:leave");
|
|
17
|
+
export const CONNECT_HOOKS = Symbol("loom:connect:hooks");
|
|
18
|
+
export const FIRST_UPDATED_HOOKS = Symbol("loom:first-updated:hooks");
|
|
17
19
|
//# sourceMappingURL=symbols.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"symbols.js","sourceRoot":"","sources":["../../src/decorators/symbols.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,sDAAsD;AAEtD,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAClD,MAAM,CAAC,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AAC1C,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;AAC7C,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AAC7C,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAC5C,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;AAC5D,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AAClD,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AACnD,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AACvD,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;AAC1D,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;AACtD,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;AACpD,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;AACtD,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"symbols.js","sourceRoot":"","sources":["../../src/decorators/symbols.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,sDAAsD;AAEtD,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAClD,MAAM,CAAC,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AAC1C,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;AAC7C,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AAC7C,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAC5C,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;AAC5D,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AAClD,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AACnD,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AACvD,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;AAC1D,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;AACtD,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;AACpD,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;AACtD,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;AACtD,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;AAC1D,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC,0BAA0B,CAAC,CAAC"}
|
package/dist/di/decorators.d.ts
CHANGED
|
@@ -1,44 +1,44 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Loom — DI decorators
|
|
2
|
+
* Loom — DI decorators (TC39 Stage 3)
|
|
3
3
|
*
|
|
4
4
|
* @service — Auto-instantiated singleton, registered on app.start()
|
|
5
|
-
* @inject —
|
|
5
|
+
* @inject — Auto-accessor dependency injection (property mode only)
|
|
6
6
|
* @factory — Method decorator, return value registered as a provider
|
|
7
|
+
*
|
|
8
|
+
* Note: TC39 does not support parameter decorators.
|
|
9
|
+
* Use @inject as a property accessor: `@inject(Foo) accessor foo!: Foo;`
|
|
7
10
|
*/
|
|
8
11
|
/**
|
|
9
12
|
* Auto-instantiated singleton. Registered on app.start().
|
|
10
|
-
* Constructor @inject params are resolved automatically.
|
|
11
13
|
*
|
|
12
14
|
* ```ts
|
|
13
15
|
* @service
|
|
14
16
|
* class BookmarkStore extends CollectionStore<Bookmark> { ... }
|
|
15
17
|
* ```
|
|
16
18
|
*/
|
|
17
|
-
export declare const service: () => (
|
|
19
|
+
export declare const service: () => (value: Function, context: ClassDecoratorContext) => void;
|
|
18
20
|
/**
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* Property: @inject(Foo) foo!: Foo;
|
|
22
|
-
* Constructor: constructor(@inject(Config) config: Config)
|
|
23
|
-
* Factory arg: createChat(@inject(NatsConn) nc: NatsConn)
|
|
21
|
+
* Property-mode dependency injection via auto-accessor.
|
|
22
|
+
* Resolves lazily from the DI container on first access.
|
|
24
23
|
*
|
|
25
|
-
*
|
|
24
|
+
* ```ts
|
|
25
|
+
* @inject(AuthService) accessor auth!: AuthService;
|
|
26
|
+
* ```
|
|
26
27
|
*/
|
|
27
|
-
export declare function inject<T =
|
|
28
|
+
export declare function inject<T = unknown>(key: new (...args: unknown[]) => T): <This extends object>(_target: ClassAccessorDecoratorTarget<This, T>, _context: ClassAccessorDecoratorContext<This, T>) => ClassAccessorDecoratorResult<This, T>;
|
|
28
29
|
/**
|
|
29
30
|
* Method decorator on @service classes.
|
|
30
31
|
* Return value is registered as a provider on app.start().
|
|
31
|
-
* Supports @inject on parameters. Async methods are awaited.
|
|
32
32
|
*
|
|
33
33
|
* ```ts
|
|
34
34
|
* @service
|
|
35
35
|
* class Boot {
|
|
36
36
|
* @factory(ChatServiceNatsClient)
|
|
37
|
-
* createChat(
|
|
38
|
-
* return new ChatServiceNatsClient(
|
|
37
|
+
* createChat() {
|
|
38
|
+
* return new ChatServiceNatsClient(app.get(NatsConnection));
|
|
39
39
|
* }
|
|
40
40
|
* }
|
|
41
41
|
* ```
|
|
42
42
|
*/
|
|
43
|
-
export declare const factory: (key?:
|
|
43
|
+
export declare const factory: (key?: unknown) => (method: Function, context: ClassMethodDecoratorContext) => void;
|
|
44
44
|
//# sourceMappingURL=decorators.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/di/decorators.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/di/decorators.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH;;;;;;;GAOG;AACH,eAAO,MAAM,OAAO,iEAED,CAAC;AAEpB;;;;;;;GAOG;AACH,wBAAgB,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,IAC5D,IAAI,SAAS,MAAM,EACzB,SAAS,4BAA4B,CAAC,IAAI,EAAE,CAAC,CAAC,EAC9C,UAAU,6BAA6B,CAAC,IAAI,EAAE,CAAC,CAAC,KAC/C,4BAA4B,CAAC,IAAI,EAAE,CAAC,CAAC,CAUzC;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,OAAO,qFAElB,CAAC"}
|