@toyz/loom 0.3.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.
Files changed (119) hide show
  1. package/dist/app.d.ts +4 -1
  2. package/dist/app.d.ts.map +1 -1
  3. package/dist/app.js +9 -9
  4. package/dist/app.js.map +1 -1
  5. package/dist/decorators/create.d.ts +16 -25
  6. package/dist/decorators/create.d.ts.map +1 -1
  7. package/dist/decorators/create.js +25 -34
  8. package/dist/decorators/create.js.map +1 -1
  9. package/dist/decorators/events.d.ts +10 -8
  10. package/dist/decorators/events.d.ts.map +1 -1
  11. package/dist/decorators/events.js +53 -43
  12. package/dist/decorators/events.js.map +1 -1
  13. package/dist/decorators/symbols.d.ts +4 -0
  14. package/dist/decorators/symbols.d.ts.map +1 -1
  15. package/dist/decorators/symbols.js +4 -0
  16. package/dist/decorators/symbols.js.map +1 -1
  17. package/dist/di/decorators.d.ts +15 -15
  18. package/dist/di/decorators.d.ts.map +1 -1
  19. package/dist/di/decorators.js +23 -33
  20. package/dist/di/decorators.js.map +1 -1
  21. package/dist/di/watch.d.ts +1 -7
  22. package/dist/di/watch.d.ts.map +1 -1
  23. package/dist/di/watch.js +17 -20
  24. package/dist/di/watch.js.map +1 -1
  25. package/dist/element/decorators.d.ts +26 -10
  26. package/dist/element/decorators.d.ts.map +1 -1
  27. package/dist/element/decorators.js +75 -31
  28. package/dist/element/decorators.js.map +1 -1
  29. package/dist/element/element.d.ts.map +1 -1
  30. package/dist/element/element.js +15 -3
  31. package/dist/element/element.js.map +1 -1
  32. package/dist/element/form.d.ts +63 -0
  33. package/dist/element/form.d.ts.map +1 -0
  34. package/dist/element/form.js +167 -0
  35. package/dist/element/form.js.map +1 -0
  36. package/dist/element/icon.d.ts +3 -3
  37. package/dist/element/icon.d.ts.map +1 -1
  38. package/dist/element/icon.js +131 -74
  39. package/dist/element/icon.js.map +1 -1
  40. package/dist/element/index.d.ts +8 -1
  41. package/dist/element/index.d.ts.map +1 -1
  42. package/dist/element/index.js +9 -1
  43. package/dist/element/index.js.map +1 -1
  44. package/dist/element/lazy.d.ts +31 -0
  45. package/dist/element/lazy.d.ts.map +1 -0
  46. package/dist/element/lazy.js +71 -0
  47. package/dist/element/lazy.js.map +1 -0
  48. package/dist/element/lifecycle.d.ts +27 -29
  49. package/dist/element/lifecycle.d.ts.map +1 -1
  50. package/dist/element/lifecycle.js +60 -79
  51. package/dist/element/lifecycle.js.map +1 -1
  52. package/dist/element/slots.d.ts +23 -0
  53. package/dist/element/slots.d.ts.map +1 -0
  54. package/dist/element/slots.js +54 -0
  55. package/dist/element/slots.js.map +1 -0
  56. package/dist/element/timing.d.ts +10 -7
  57. package/dist/element/timing.d.ts.map +1 -1
  58. package/dist/element/timing.js +67 -52
  59. package/dist/element/timing.js.map +1 -1
  60. package/dist/element/transition.d.ts +32 -0
  61. package/dist/element/transition.d.ts.map +1 -0
  62. package/dist/element/transition.js +70 -0
  63. package/dist/element/transition.js.map +1 -0
  64. package/dist/element/virtual.js +235 -194
  65. package/dist/element/virtual.js.map +1 -1
  66. package/dist/index.d.ts +4 -4
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +3 -3
  69. package/dist/index.js.map +1 -1
  70. package/dist/router/decorators.d.ts +9 -38
  71. package/dist/router/decorators.d.ts.map +1 -1
  72. package/dist/router/decorators.js +7 -52
  73. package/dist/router/decorators.js.map +1 -1
  74. package/dist/router/index.d.ts +1 -0
  75. package/dist/router/index.d.ts.map +1 -1
  76. package/dist/router/index.js +2 -0
  77. package/dist/router/index.js.map +1 -1
  78. package/dist/router/link.d.ts +4 -4
  79. package/dist/router/link.d.ts.map +1 -1
  80. package/dist/router/link.js +134 -72
  81. package/dist/router/link.js.map +1 -1
  82. package/dist/router/outlet.d.ts +2 -2
  83. package/dist/router/outlet.d.ts.map +1 -1
  84. package/dist/router/outlet.js +188 -138
  85. package/dist/router/outlet.js.map +1 -1
  86. package/dist/router/route-lifecycle.d.ts +28 -0
  87. package/dist/router/route-lifecycle.d.ts.map +1 -0
  88. package/dist/router/route-lifecycle.js +47 -0
  89. package/dist/router/route-lifecycle.js.map +1 -0
  90. package/dist/router/route.d.ts +1 -1
  91. package/dist/router/route.d.ts.map +1 -1
  92. package/dist/router/router.d.ts +5 -0
  93. package/dist/router/router.d.ts.map +1 -1
  94. package/dist/router/router.js +41 -4
  95. package/dist/router/router.js.map +1 -1
  96. package/dist/store/decorators.d.ts +39 -15
  97. package/dist/store/decorators.d.ts.map +1 -1
  98. package/dist/store/decorators.js +167 -79
  99. package/dist/store/decorators.js.map +1 -1
  100. package/dist/store/index.d.ts +1 -1
  101. package/dist/store/index.d.ts.map +1 -1
  102. package/dist/store/index.js +1 -1
  103. package/dist/store/index.js.map +1 -1
  104. package/dist/store/watch.d.ts +12 -11
  105. package/dist/store/watch.d.ts.map +1 -1
  106. package/dist/store/watch.js +20 -15
  107. package/dist/store/watch.js.map +1 -1
  108. package/dist/testing.d.ts +55 -0
  109. package/dist/testing.d.ts.map +1 -0
  110. package/dist/testing.js +99 -0
  111. package/dist/testing.js.map +1 -0
  112. package/dist/transform/transform.d.ts +7 -3
  113. package/dist/transform/transform.d.ts.map +1 -1
  114. package/dist/transform/transform.js +17 -9
  115. package/dist/transform/transform.js.map +1 -1
  116. package/dist/transform/typed.d.ts +1 -1
  117. package/dist/transform/typed.d.ts.map +1 -1
  118. package/dist/transform/typed.js.map +1 -1
  119. 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, proto: any, method: string): void;
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,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAI3D,gEAAgE;IAChE,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,wBAAwB,GAAG,IAAI;IAM3D,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;IA+C5B,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"}
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, proto, method) {
61
- this.factories.push({ proto, method, key });
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 { proto, method, key } of this.factories) {
120
- // Find the service instance that owns this factory method
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":"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"}
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 prototype or constructor).
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
- * // Define-time only property getter
17
- * const query = createDecorator<[sel: string]>((proto, key, sel) => {
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[key](), ms);
18
+ * const id = setInterval(() => method.call(el), ms);
27
19
  * return () => clearInterval(id);
28
20
  * };
29
21
  * });
30
22
  *
31
- * // Both define-time work + lifecycle
32
- * const on = createDecorator<[Type: any]>((proto, key, Type) => {
33
- * // define-time: store metadata, modify prototype, etc.
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
- * app.register(tag, ctor);
30
+ * customElements.define(tag, ctor as any);
40
31
  * }, { class: true });
41
32
  * ```
42
33
  */
43
- type ConnectFn = (element: any) => void | (() => void);
44
- type PropertySetup<Args extends any[]> = (proto: any, key: string, ...args: Args) => void | ConnectFn;
45
- type ClassSetup<Args extends any[]> = (ctor: any, ...args: Args) => void;
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 any[] = [], T = any>(setup: ClassSetup<Args>, options: {
40
+ export declare function createDecorator<Args extends unknown[] = []>(setup: ClassSetup<Args>, options: {
50
41
  class: true;
51
- }): (...args: Args) => (ctor: any) => void;
52
- export declare function createDecorator<Args extends any[] = [], T = any>(setup: PropertySetup<Args>, options?: {
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) => (target: any, key: string, desc?: PropertyDescriptor) => void;
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAEH,KAAK,SAAS,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;AACvD,KAAK,aAAa,CAAC,IAAI,SAAS,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,IAAI,KAAK,IAAI,GAAG,SAAS,CAAC;AAEtG,KAAK,UAAU,CAAC,IAAI,SAAS,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;AAEzE,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAGD,wBAAgB,eAAe,CAAC,IAAI,SAAS,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAC9D,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,EACvB,OAAO,EAAE;IAAE,KAAK,EAAE,IAAI,CAAA;CAAE,GACvB,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;AAG1C,wBAAgB,eAAe,CAAC,IAAI,SAAS,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAC9D,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,EAC1B,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,GAC1B,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,kBAAkB,KAAK,IAAI,CAAC"}
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 prototype or constructor).
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
- * // Define-time only property getter
17
- * const query = createDecorator<[sel: string]>((proto, key, sel) => {
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[key](), ms);
18
+ * const id = setInterval(() => method.call(el), ms);
27
19
  * return () => clearInterval(id);
28
20
  * };
29
21
  * });
30
22
  *
31
- * // Both define-time work + lifecycle
32
- * const on = createDecorator<[Type: any]>((proto, key, Type) => {
33
- * // define-time: store metadata, modify prototype, etc.
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
- * app.register(tag, ctor);
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) => (ctor) => void
38
+ // Class decorator: (...args) => (value, context) => void
47
39
  return (...args) => {
48
- return (ctor) => {
49
- setup(ctor, ...args);
40
+ return (value, _context) => {
41
+ setup(value, ...args);
50
42
  };
51
43
  };
52
44
  }
53
- // Property/method decorator: (...args) => (target, key, desc?) => void
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 (target, key, desc) => {
56
- const connectFn = desc
57
- ? setup(target, key, desc, ...args)
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 — wire into connectedCallback
61
- const orig = target.connectedCallback;
62
- target.connectedCallback = function () {
63
- orig?.call(this);
64
- const cleanup = connectFn(this);
65
- if (cleanup)
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAuBH,iBAAiB;AACjB,MAAM,UAAU,eAAe,CAC7B,KAA8B,EAC9B,UAA4B,EAAE,KAAK,EAAE,KAAK,EAAE;IAE5C,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,+CAA+C;QAC/C,OAAO,CAAC,GAAG,IAAU,EAAE,EAAE;YACvB,OAAO,CAAC,IAAS,EAAE,EAAE;gBAClB,KAA0B,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;YAC7C,CAAC,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC;IAED,uEAAuE;IACvE,OAAO,CAAC,GAAG,IAAU,EAAE,EAAE;QACvB,OAAO,CAAC,MAAW,EAAE,GAAW,EAAE,IAAyB,EAAE,EAAE;YAC7D,MAAM,SAAS,GAAG,IAAI;gBACpB,CAAC,CAAE,KAA2B,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;gBAC1D,CAAC,CAAE,KAA6B,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;YAEzD,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE,CAAC;gBACpC,8CAA8C;gBAC9C,MAAM,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;gBACtC,MAAM,CAAC,iBAAiB,GAAG;oBACzB,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;oBACjB,MAAM,OAAO,GAAI,SAAuB,CAAC,IAAI,CAAC,CAAC;oBAC/C,IAAI,OAAO;wBAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACnC,CAAC,CAAC;YACJ,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
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>): (target: any, key: string) => void;
25
- export declare function on(target: EventTarget, event: string): (target: any, key: string) => void;
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
- * ```ts
33
- * @reactive @emit(ColorSelect, idx => new ColorSelect(idx, 0))
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: any) => T): (target: any, key: string, desc?: PropertyDescriptor) => void;
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,GAAG,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;AAClG,wBAAgB,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;AA4B3F;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,SAAS,EACtC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EACtB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,IAEjB,QAAQ,GAAG,EAAE,KAAK,MAAM,EAAE,OAAO,kBAAkB,UAe5D"}
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 (target, key) => {
12
- // Store metadata for service wiring by app.start()
13
- if (!target[ON_HANDLERS])
14
- target[ON_HANDLERS] = [];
15
- if (event !== undefined) {
16
- target[ON_HANDLERS].push({ key, domTarget: typeOrTarget, event });
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
- // DOM EventTarget: @on(window, "resize")
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
- // Bus event: @on(ColorSelect)
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
- * ```ts
45
- * @reactive @emit(ColorSelect, idx => new ColorSelect(idx, 0))
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
- return (target, key, desc) => {
56
- if (desc?.value) {
57
- // Method decorator — wrap, emit return value (define-time)
58
- const orig = desc.value;
59
- desc.value = function (...args) {
60
- const result = orig.apply(this, args);
61
- if (result instanceof LoomEvent)
62
- bus.emit(result);
63
- return result;
64
- };
65
- }
66
- else {
67
- // Field decorator — store metadata for @reactive subscriber wiring (define-time)
68
- if (!target[EMITTERS])
69
- target[EMITTERS] = [];
70
- target[EMITTERS].push({ field: key, factory });
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;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,GAAG,EAAoB,MAAM,QAAQ,CAAC;AAmB/C,MAAM,UAAU,EAAE,CAAC,YAAiB,EAAE,KAAc;IAClD,OAAO,CAAC,MAAW,EAAE,GAAW,EAAE,EAAE;QAClC,mDAAmD;QACnD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;YAAE,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;QACnD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;QACpE,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,sDAAsD;QACtD,MAAM,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;QACtC,MAAM,CAAC,iBAAiB,GAAG;YACzB,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,yCAAyC;gBACzC,MAAM,EAAE,GAAG,CAAC,CAAQ,EAAE,EAAE,CAAE,IAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/C,YAAY,CAAC,gBAAgB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACzC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,mBAAmB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;YAChE,CAAC;iBAAM,CAAC;gBACN,8BAA8B;gBAC9B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,CAAM,EAAE,EAAE,CAAE,IAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACtE,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,IAAI,CAClB,KAAsB,EACtB,OAAyB;IAEzB,OAAO,CAAC,MAAW,EAAE,GAAW,EAAE,IAAyB,EAAE,EAAE;QAC7D,IAAI,IAAI,EAAE,KAAK,EAAE,CAAC;YAChB,2DAA2D;YAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;YACxB,IAAI,CAAC,KAAK,GAAG,UAAU,GAAG,IAAW;gBACnC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBACtC,IAAI,MAAM,YAAY,SAAS;oBAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAClD,OAAO,MAAM,CAAC;YAChB,CAAC,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,iFAAiF;YACjF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;gBAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;YAC7C,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/decorators/events.ts"],"names":[],"mappings":"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"}
@@ -10,4 +10,8 @@ export declare const UNMOUNT_HANDLERS: unique symbol;
10
10
  export declare const INJECT_PARAMS: unique symbol;
11
11
  export declare const ROUTE_PROPS: unique symbol;
12
12
  export declare const TRANSFORMS: unique symbol;
13
+ export declare const ROUTE_ENTER: unique symbol;
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;
13
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"}
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"}
@@ -12,4 +12,8 @@ export const UNMOUNT_HANDLERS = Symbol("loom:unmount");
12
12
  export const INJECT_PARAMS = Symbol("loom:inject:params");
13
13
  export const ROUTE_PROPS = Symbol("loom:route:props");
14
14
  export const TRANSFORMS = Symbol("loom:transforms");
15
+ export const ROUTE_ENTER = Symbol("loom:route:enter");
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");
15
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"}
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"}
@@ -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 — Dual-mode dependency injection (property or constructor param)
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: () => (ctor: any) => void;
19
+ export declare const service: () => (value: Function, context: ClassDecoratorContext) => void;
18
20
  /**
19
- * Dual-mode dependency injection.
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
- * T is optional — use for explicit typing if desired.
24
+ * ```ts
25
+ * @inject(AuthService) accessor auth!: AuthService;
26
+ * ```
26
27
  */
27
- export declare function inject<T = any>(key: any): (target: any, propOrMethod: string | undefined, index?: number) => void;
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(@inject(NatsConnection) nc: NatsConnection) {
38
- * return new ChatServiceNatsClient(nc);
37
+ * createChat() {
38
+ * return new ChatServiceNatsClient(app.get(NatsConnection));
39
39
  * }
40
40
  * }
41
41
  * ```
42
42
  */
43
- export declare const factory: (key?: any) => (target: any, key: string, desc?: PropertyDescriptor) => void;
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;;;;;;GAMG;AAMH;;;;;;;;GAQG;AACH,eAAO,MAAM,OAAO,2BAED,CAAC;AAEpB;;;;;;;;GAQG;AACH,wBAAgB,MAAM,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,IAC9B,QAAQ,GAAG,EAAE,cAAc,MAAM,GAAG,SAAS,EAAE,QAAQ,MAAM,UAiBtE;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,OAAO,gDAGc,CAAC,6BADjC,CAAC"}
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"}