apprun 4.0.0 → 6.0.0-rc.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 (135) hide show
  1. package/CHANGELOG.md +235 -12
  2. package/LICENSE +1 -1
  3. package/README.md +225 -110
  4. package/apprun.d.ts +240 -34
  5. package/cli/app.js +29 -0
  6. package/cli/colors.js +69 -0
  7. package/cli/index.html +13 -0
  8. package/cli/index.js +96 -0
  9. package/dist/apprun-code.js +2 -0
  10. package/dist/apprun-code.js.map +1 -0
  11. package/dist/apprun-dev-tools.js +1 -1
  12. package/dist/apprun-dev-tools.js.map +1 -1
  13. package/dist/apprun-html.esm.js +34 -0
  14. package/dist/apprun-html.esm.js.map +1 -0
  15. package/dist/apprun-html.js +2 -1
  16. package/dist/apprun-html.js.LICENSE.txt +11 -0
  17. package/dist/apprun-html.js.map +1 -1
  18. package/dist/apprun-play.js +2 -0
  19. package/dist/apprun-play.js.map +1 -0
  20. package/dist/apprun.esm.js +2 -0
  21. package/dist/apprun.esm.js.map +1 -0
  22. package/dist/apprun.js +1 -1
  23. package/dist/apprun.js.map +1 -1
  24. package/dist/createState.js +2 -0
  25. package/dist/createState.js.map +1 -0
  26. package/esm/add-components.js +90 -0
  27. package/esm/add-components.js.map +1 -0
  28. package/esm/app.js +209 -0
  29. package/esm/app.js.map +1 -0
  30. package/esm/apprun-code.js +170 -0
  31. package/esm/apprun-code.js.map +1 -0
  32. package/esm/apprun-dev-tools-tests.js +95 -0
  33. package/esm/apprun-dev-tools-tests.js.map +1 -0
  34. package/esm/apprun-dev-tools.js +281 -0
  35. package/esm/apprun-dev-tools.js.map +1 -0
  36. package/esm/apprun-html.js +24 -0
  37. package/esm/apprun-html.js.map +1 -0
  38. package/esm/apprun-play.js +248 -0
  39. package/esm/apprun-play.js.map +1 -0
  40. package/esm/apprun.js +220 -0
  41. package/esm/apprun.js.map +1 -0
  42. package/esm/component.js +413 -0
  43. package/esm/component.js.map +1 -0
  44. package/esm/createState.js +9 -0
  45. package/esm/createState.js.map +1 -0
  46. package/esm/decorator.js +88 -0
  47. package/esm/decorator.js.map +1 -0
  48. package/esm/directive.js +306 -0
  49. package/esm/directive.js.map +1 -0
  50. package/esm/router.js +345 -0
  51. package/esm/router.js.map +1 -0
  52. package/esm/type-utils.js +90 -0
  53. package/esm/type-utils.js.map +1 -0
  54. package/esm/types.js +58 -0
  55. package/esm/types.js.map +1 -0
  56. package/esm/vdom-lit-html.js +65 -0
  57. package/esm/vdom-lit-html.js.map +1 -0
  58. package/esm/vdom-my-prop-attr.js +227 -0
  59. package/esm/vdom-my-prop-attr.js.map +1 -0
  60. package/esm/vdom-my.js +293 -0
  61. package/esm/vdom-my.js.map +1 -0
  62. package/esm/vdom-to-html.js +54 -0
  63. package/esm/vdom-to-html.js.map +1 -0
  64. package/esm/vdom.js +28 -0
  65. package/esm/vdom.js.map +1 -0
  66. package/esm/version.js +15 -0
  67. package/esm/version.js.map +1 -0
  68. package/esm/web-component.js +155 -0
  69. package/esm/web-component.js.map +1 -0
  70. package/jsx-runtime.js +2 -0
  71. package/jsx-runtime.js.map +1 -0
  72. package/package.json +90 -41
  73. package/.travis.yml +0 -10
  74. package/.vscode/launch.json +0 -19
  75. package/BACKERS.md +0 -3
  76. package/apprun-cli.js +0 -177
  77. package/cli-templates/_gitignore +0 -6
  78. package/cli-templates/component.ts_ +0 -16
  79. package/cli-templates/index.html +0 -11
  80. package/cli-templates/karma.conf.js +0 -24
  81. package/cli-templates/main.ts_ +0 -13
  82. package/cli-templates/readme.md +0 -7
  83. package/cli-templates/spa_index.html +0 -14
  84. package/cli-templates/spa_main.ts_ +0 -47
  85. package/cli-templates/spec.ts_ +0 -11
  86. package/cli-templates/tsconfig.json +0 -12
  87. package/cli-templates/webpack.config.js +0 -23
  88. package/demo-html/app.js +0 -2
  89. package/demo-html/app.js.map +0 -1
  90. package/demo-html/counter-c.html +0 -29
  91. package/demo-html/counter-wc-event.html +0 -29
  92. package/demo-html/counter-wc.html +0 -29
  93. package/demo-html/counter.html +0 -26
  94. package/demo-html/index.html +0 -14
  95. package/demo-html/main.tsx +0 -31
  96. package/docs/README.md +0 -326
  97. package/docs/index.html +0 -23
  98. package/index.html +0 -85
  99. package/logo.png +0 -0
  100. package/src/app.ts +0 -69
  101. package/src/apprun-dev-tools.tsx +0 -67
  102. package/src/apprun-html.ts +0 -13
  103. package/src/apprun.ts +0 -53
  104. package/src/component.ts +0 -189
  105. package/src/createComponent.tsx +0 -38
  106. package/src/decorator.ts +0 -36
  107. package/src/router.ts +0 -19
  108. package/src/types.ts +0 -9
  109. package/src/vdom-html.ts +0 -17
  110. package/src/vdom-my.ts +0 -191
  111. package/src/vdom-to-html.tsx +0 -45
  112. package/src/vdom.ts +0 -7
  113. package/src/web-component.ts +0 -29
  114. package/tests/app-rx.spec_ +0 -41
  115. package/tests/app.spec.ts +0 -122
  116. package/tests/application.spec.tsx +0 -23
  117. package/tests/component.spec.tsx +0 -296
  118. package/tests/custom-element.spec.tsx +0 -19
  119. package/tests/data-attr.spec.tsx +0 -42
  120. package/tests/decorator.spec.tsx +0 -104
  121. package/tests/fragment.spec.tsx +0 -79
  122. package/tests/hyperscript.spec.ts +0 -43
  123. package/tests/node-test.js +0 -7
  124. package/tests/router.spec.ts +0 -69
  125. package/tests/stateful-component.spec.tsx +0 -248
  126. package/tests/typed.spec.tsx +0 -63
  127. package/tests/vdom-html.spec.ts +0 -35
  128. package/tests/vdom-jsx.spec.tsx +0 -131
  129. package/tests/vdom-my.spec.tsx +0 -195
  130. package/tests/view-engine.spec.js +0 -59
  131. package/tsconfig.json +0 -11
  132. package/tslint.json +0 -124
  133. package/typescriptreact.json +0 -87
  134. package/viewEngine.js +0 -54
  135. package/webpack.config.js +0 -30
@@ -0,0 +1,413 @@
1
+ /**
2
+ * AppRun Component System Implementation
3
+ *
4
+ * This file provides the Component class which is the foundation for:
5
+ * 1. State Management
6
+ * - Maintains component state with history support
7
+ * - Handles state updates with async/iterator support
8
+ * - Supports state history navigation (prev/next)
9
+ * - Promise and async iterator state handling
10
+ *
11
+ * 2. View Rendering
12
+ * - Renders virtual DOM to real DOM with directives
13
+ * - Handles component lifecycle (mounted, rendered, unload)
14
+ * - Supports shadow DOM and web components
15
+ * - DOM removal tracking with a shared MutationObserver registry
16
+ * - View transition API support
17
+ *
18
+ * 3. Event Handling
19
+ * - Local and global event subscription management
20
+ * - Event handler registration via decorators
21
+ * - Action to state updates with error handling
22
+ * - Support for event options (delay, once, global)
23
+ *
24
+ * Features:
25
+ * - Component caching for debugging
26
+ * - Element tracking for cleanup
27
+ * - History navigation support
28
+ * - Global vs local event routing
29
+ * - Async state handling with latest-pending-promise protection
30
+ * - Memory leak prevention with shared unload tracking
31
+ * - Component unmounting with cleanup
32
+ * - Phase 3 concrete component field and history option typing
33
+ *
34
+ * Type Safety Improvements (v3.35.1):
35
+ * - Enhanced element access with null checks and warnings
36
+ * - Improved action validation and error handling
37
+ * - Better error reporting in component actions
38
+ * - Safer DOM element queries with fallback warnings
39
+ *
40
+ * Usage:
41
+ * ```ts
42
+ * class MyComponent extends Component {
43
+ * state = // Initial state
44
+ * view = state => // Return virtual DOM
45
+ * update = {
46
+ * 'event': (state, ...args) => // Return new state
47
+ * }
48
+ * }
49
+ *
50
+ * // Mount component
51
+ * new MyComponent().mount('element-id');
52
+ * ```
53
+ */
54
+ import _app, { App } from './app';
55
+ import { Reflect } from './decorator';
56
+ import directive from './directive';
57
+ import { safeQuerySelector, safeGetElementById } from './type-utils';
58
+ // const componentCache = new Map();
59
+ // if (!app.find('get-components')) app.on('get-components', o => o.components = componentCache);
60
+ export const REFRESH = state => state;
61
+ const app = _app;
62
+ let tracking_id_counter = 0;
63
+ const tracking_attr = '_c';
64
+ const tracked_elements = new Map();
65
+ let shared_observer = null;
66
+ function getHistoryOptions(history) {
67
+ return typeof history === 'object' && history !== null ? history : {};
68
+ }
69
+ function disconnectSharedObserverIfIdle() {
70
+ if (tracked_elements.size === 0 && shared_observer) {
71
+ shared_observer.disconnect();
72
+ shared_observer = null;
73
+ }
74
+ }
75
+ function unloadTrackedElement(el) {
76
+ const tracked = tracked_elements.get(el);
77
+ if (!tracked)
78
+ return;
79
+ tracked_elements.delete(el);
80
+ tracked.component.unload?.(tracked.component.state);
81
+ disconnectSharedObserverIfIdle();
82
+ }
83
+ function ensureSharedObserver() {
84
+ if (shared_observer || typeof MutationObserver === 'undefined' || typeof document !== 'object' || !document.body)
85
+ return;
86
+ shared_observer = new MutationObserver(changes => {
87
+ changes.forEach(change => {
88
+ if (change.type === 'attributes') {
89
+ const el = change.target;
90
+ const tracked = tracked_elements.get(el);
91
+ if (tracked && change.oldValue === tracked.tracking_id)
92
+ unloadTrackedElement(el);
93
+ }
94
+ else if (change.type === 'childList') {
95
+ Array.from(tracked_elements.keys()).forEach(el => {
96
+ if (!document.body.contains(el))
97
+ unloadTrackedElement(el);
98
+ });
99
+ }
100
+ });
101
+ });
102
+ shared_observer.observe(document.body, {
103
+ childList: true, subtree: true,
104
+ attributes: true, attributeOldValue: true, attributeFilter: [tracking_attr]
105
+ });
106
+ }
107
+ function registerTrackedElement(component, el, tracking_id) {
108
+ const existing = tracked_elements.get(el);
109
+ if (existing && existing.component !== component)
110
+ unloadTrackedElement(el);
111
+ tracked_elements.set(el, { component, tracking_id });
112
+ ensureSharedObserver();
113
+ }
114
+ function unregisterTrackedElement(el) {
115
+ if (!el)
116
+ return;
117
+ tracked_elements.delete(el);
118
+ disconnectSharedObserverIfIdle();
119
+ }
120
+ export class Component {
121
+ renderState(state, vdom = null) {
122
+ if (!this.view)
123
+ return;
124
+ let html = vdom || this.view(state);
125
+ app['debug'] && app.run('debug', {
126
+ component: this,
127
+ _: html ? '.' : '-',
128
+ state,
129
+ vdom: html,
130
+ el: this.element
131
+ });
132
+ if (typeof document !== 'object')
133
+ return;
134
+ const el = ((typeof this.element === 'string' && this.element) ?
135
+ safeGetElementById(this.element) || safeQuerySelector(this.element) : this.element);
136
+ if (!el) {
137
+ console.warn(`Component element not found: ${this.element}`);
138
+ return;
139
+ }
140
+ if (!this.unload) {
141
+ unregisterTrackedElement(this.tracking_element);
142
+ this.tracking_element = null;
143
+ el.removeAttribute && el.removeAttribute(tracking_attr);
144
+ }
145
+ else if (el['_component'] !== this || el.getAttribute(tracking_attr) !== this.tracking_id) {
146
+ if (this.tracking_element && this.tracking_element !== el)
147
+ unregisterTrackedElement(this.tracking_element);
148
+ this.tracking_id = (++tracking_id_counter).toString(36);
149
+ el.setAttribute(tracking_attr, this.tracking_id);
150
+ this.tracking_element = el;
151
+ registerTrackedElement(this, el, this.tracking_id);
152
+ }
153
+ el['_component'] = this;
154
+ if (!vdom && html) {
155
+ html = directive(html, this);
156
+ if (this.options.transition && document && document['startViewTransition']) {
157
+ document['startViewTransition'](() => app.render(el, html, this));
158
+ }
159
+ else {
160
+ app.render(el, html, this);
161
+ }
162
+ }
163
+ this.rendered && this.rendered(this.state);
164
+ }
165
+ setState(state, options = { render: true, history: false }) {
166
+ const handleAsyncIterator = async (iterator) => {
167
+ try {
168
+ while (true) {
169
+ const { value, done } = await iterator.next();
170
+ if (done)
171
+ break;
172
+ this.setState(value, options);
173
+ }
174
+ }
175
+ catch (e) {
176
+ console.error('Error in async iterator:', e);
177
+ }
178
+ };
179
+ const result = state;
180
+ if (result?.[Symbol.asyncIterator]) {
181
+ // handleAsyncIterator(result[Symbol.asyncIterator]());
182
+ this.setState(handleAsyncIterator(result[Symbol.asyncIterator]()), options);
183
+ return;
184
+ }
185
+ else if (result?.[Symbol.iterator] && typeof result.next === "function") {
186
+ for (const value of result) {
187
+ this.setState(value, options);
188
+ }
189
+ return;
190
+ }
191
+ else if (state && state instanceof Promise) {
192
+ // Promise will not be saved or rendered
193
+ // state will be saved and rendered when promise is resolved
194
+ const pending_state = state;
195
+ this._pending_state = pending_state;
196
+ Promise.resolve(pending_state).then(v => {
197
+ if (this._pending_state === pending_state) {
198
+ this._pending_state = null;
199
+ this.setState(v, options);
200
+ }
201
+ });
202
+ }
203
+ else {
204
+ this._state = state;
205
+ if (state == null)
206
+ return;
207
+ this._pending_state = null;
208
+ this.state = state;
209
+ if (options.render !== false) {
210
+ // before render state
211
+ if (options.transition && document && document['startViewTransition']) {
212
+ document['startViewTransition'](() => this.renderState(state));
213
+ }
214
+ else {
215
+ this.renderState(state);
216
+ }
217
+ }
218
+ if (options.history !== false && this.enable_history) {
219
+ this._history = [...this._history, state];
220
+ this._history_idx = this._history.length - 1;
221
+ }
222
+ if (typeof options.callback === 'function')
223
+ options.callback(this.state);
224
+ }
225
+ }
226
+ constructor(state, view, update, options = {}) {
227
+ this.state = state;
228
+ this.view = view;
229
+ this.update = update;
230
+ this.options = options;
231
+ this._app = new App();
232
+ this._actions = [];
233
+ this._global_events = [];
234
+ this._history = [];
235
+ this._history_idx = -1;
236
+ this.enable_history = false;
237
+ this.global_event = false;
238
+ this.tracking_element = null;
239
+ this._history_prev = () => {
240
+ this._history_idx--;
241
+ if (this._history_idx >= 0) {
242
+ this.setState(this._history[this._history_idx], { render: true, history: false });
243
+ }
244
+ else {
245
+ this._history_idx = 0;
246
+ }
247
+ };
248
+ this._history_next = () => {
249
+ this._history_idx++;
250
+ if (this._history_idx < this._history.length) {
251
+ this.setState(this._history[this._history_idx], { render: true, history: false });
252
+ }
253
+ else {
254
+ this._history_idx = this._history.length - 1;
255
+ }
256
+ };
257
+ this.start = (element = null, options) => {
258
+ this.mount(element, { render: true, ...options });
259
+ if (this.mounted && typeof this.mounted === 'function') {
260
+ const new_state = this.mounted({}, [], this.state);
261
+ (typeof new_state !== 'undefined') && this.setState(new_state);
262
+ }
263
+ return this;
264
+ };
265
+ }
266
+ mount(element = null, options) {
267
+ console.assert(!this.element, 'Component already mounted.');
268
+ this.options = options = { ...this.options, ...options };
269
+ this.element = element;
270
+ this.global_event = options.global_event;
271
+ this.enable_history = !!options.history;
272
+ if (this.enable_history) {
273
+ const history = getHistoryOptions(options.history);
274
+ this.on((history.prev || 'history-prev'), this._history_prev);
275
+ this.on((history.next || 'history-next'), this._history_next);
276
+ }
277
+ if (options.route) {
278
+ this.update = this.update || {};
279
+ if (!this.update[options.route])
280
+ this.update[options.route] = REFRESH;
281
+ }
282
+ this.add_actions();
283
+ this.state = this.state ?? this['model'] ?? {};
284
+ if (typeof this.state === 'function')
285
+ this.state = this.state();
286
+ this.setState(this.state, { render: !!options.render, history: true });
287
+ if (app['debug'] && app.find('debug-create-component')?.length) {
288
+ app.run('debug-create-component', this);
289
+ }
290
+ return this;
291
+ }
292
+ is_global_event(name) {
293
+ return name && (this.global_event ||
294
+ this._global_events.indexOf(name) >= 0 ||
295
+ name.startsWith('#') || name.startsWith('/') || name.startsWith('@'));
296
+ }
297
+ add_action(name, action, options = {}) {
298
+ if (!action || typeof action !== 'function') {
299
+ console.warn(`Component action for '${name}' is not a valid function:`, action);
300
+ return;
301
+ }
302
+ if (options.global)
303
+ this._global_events.push(name);
304
+ this.on(name, (...p) => {
305
+ app['debug'] && app.run('debug', {
306
+ component: this,
307
+ _: '>',
308
+ event: name, p,
309
+ current_state: this.state,
310
+ options
311
+ });
312
+ try {
313
+ const newState = action(this.state, ...p);
314
+ app['debug'] && app.run('debug', {
315
+ component: this,
316
+ _: '<',
317
+ event: name, p,
318
+ newState,
319
+ state: this.state,
320
+ options
321
+ });
322
+ this.setState(newState, options);
323
+ }
324
+ catch (error) {
325
+ const payload = { event: name, error, component: this, state: this.state, args: p, phase: 'component' };
326
+ app.find('error')?.length ? app.run('error', payload) : console.error(`Error in component action '${name}':`, error);
327
+ app['debug'] && app.run('debug', {
328
+ component: this,
329
+ _: '!',
330
+ event: name, p,
331
+ error,
332
+ state: this.state,
333
+ options
334
+ });
335
+ }
336
+ }, options);
337
+ }
338
+ add_actions() {
339
+ const actions = this.update || {};
340
+ Reflect.getMetadataKeys(this).forEach(key => {
341
+ if (key.startsWith('apprun-update:')) {
342
+ const meta = Reflect.getMetadata(key, this);
343
+ actions[meta.name] = [this[meta.key].bind(this), meta.options];
344
+ }
345
+ });
346
+ const all = {};
347
+ if (Array.isArray(actions)) {
348
+ actions.forEach(act => {
349
+ const [name, action, opts] = act;
350
+ const names = name.toString();
351
+ names.split(',').forEach(n => all[n.trim()] = [action, opts]);
352
+ });
353
+ }
354
+ else {
355
+ Object.keys(actions).forEach(name => {
356
+ const action = actions[name];
357
+ if (typeof action === 'function' || Array.isArray(action)) {
358
+ name.split(',').forEach(n => all[n.trim()] = action);
359
+ }
360
+ });
361
+ }
362
+ if (!all['.'])
363
+ all['.'] = REFRESH;
364
+ Object.keys(all).forEach(name => {
365
+ const action = all[name];
366
+ if (typeof action === 'function') {
367
+ this.add_action(name, action);
368
+ }
369
+ else if (Array.isArray(action)) {
370
+ this.add_action(name, action[0], action[1]);
371
+ }
372
+ });
373
+ }
374
+ run(event, ...args) {
375
+ if (this.state instanceof Promise) {
376
+ return Promise.resolve(this.state).then(state => {
377
+ this.state = state;
378
+ this.run(event, ...args);
379
+ });
380
+ }
381
+ else {
382
+ const name = event.toString();
383
+ return this.is_global_event(name) ?
384
+ app.run(name, ...args) :
385
+ this._app.run(name, ...args);
386
+ }
387
+ }
388
+ on(event, fn, options) {
389
+ const name = event.toString();
390
+ this._actions.push({ name, fn });
391
+ return this.is_global_event(name) ?
392
+ app.on(name, fn, options) :
393
+ this._app.on(name, fn, options);
394
+ }
395
+ runAsync(event, ...args) {
396
+ const name = event.toString();
397
+ return this.is_global_event(name) ?
398
+ app.runAsync(name, ...args) :
399
+ this._app.runAsync(name, ...args);
400
+ }
401
+ unmount() {
402
+ unregisterTrackedElement(this.tracking_element);
403
+ this.tracking_element = null;
404
+ this._actions.forEach(action => {
405
+ const { name, fn } = action;
406
+ this.is_global_event(name) ?
407
+ app.off(name, fn) :
408
+ this._app.off(name, fn);
409
+ });
410
+ }
411
+ }
412
+ Component.__isAppRunComponent = true;
413
+ //# sourceMappingURL=component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component.js","sourceRoot":"","sources":["../src/component.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { produce } from 'immer';
2
+ export function createState(fn) {
3
+ return (state, ...args) => {
4
+ return produce(state, (draft) => {
5
+ fn(draft, ...args);
6
+ });
7
+ };
8
+ }
9
+ //# sourceMappingURL=createState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createState.js","sourceRoot":"","sources":["../src/createState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAS,MAAM,OAAO,CAAC;AAEvC,MAAM,UAAU,WAAW,CACzB,EAA6C;IAE7C,OAAO,CAAC,KAAQ,EAAE,GAAG,IAAW,EAAK,EAAE;QACrC,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;YAC9B,EAAE,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,88 @@
1
+ import webComponent from './web-component';
2
+ /**
3
+ * TypeScript Decorators for AppRun Components
4
+ *
5
+ * This file provides decorators that enable:
6
+ * 1. Event Handler Registration
7
+ * - @on(): Subscribe to events with options (global, once, delay)
8
+ * - @update(): Define state updates with metadata and options
9
+ * - Supports method and class decoration patterns
10
+ *
11
+ * 2. Web Component Integration
12
+ * - @customElement(): Register as custom element with options
13
+ * - Handles shadow DOM and attribute observation
14
+ * - Automatic lifecycle management for web components
15
+ *
16
+ * 3. Metadata Management
17
+ * - Custom Reflect implementation for decorator metadata
18
+ * - Stores event handler and update metadata for runtime use
19
+ * - Supports runtime reflection for dynamic behavior
20
+ * - Metadata keys for event bindings and updates
21
+ *
22
+ * Features:
23
+ * - Event handler decoration with options
24
+ * - State update method decoration
25
+ * - Web component registration
26
+ * - Metadata-driven event binding
27
+ * - Flexible decorator patterns
28
+ * - Runtime metadata access
29
+ *
30
+ * Type Safety Improvements (v3.35.1):
31
+ * - Enhanced decorator typing for better IDE support
32
+ * - Improved metadata key management
33
+ * - Better type inference for decorated methods
34
+ *
35
+ * Usage:
36
+ * ```ts
37
+ * @customElement('my-element')
38
+ * class MyComponent extends Component {
39
+ * @on('event', { global: true })
40
+ * handler(state, ...args) {
41
+ * // Handle event
42
+ * }
43
+ *
44
+ * @update('event', { render: true })
45
+ * updater(state, ...args) {
46
+ * // Update state
47
+ * return newState;
48
+ * }
49
+ * }
50
+ * ```
51
+ */
52
+ // tslint:disable:no-invalid-this
53
+ export const Reflect = {
54
+ meta: new WeakMap(),
55
+ defineMetadata(metadataKey, metadataValue, target) {
56
+ if (!this.meta.has(target))
57
+ this.meta.set(target, {});
58
+ this.meta.get(target)[metadataKey] = metadataValue;
59
+ },
60
+ getMetadataKeys(target) {
61
+ target = Object.getPrototypeOf(target);
62
+ return this.meta.get(target) ? Object.keys(this.meta.get(target)) : [];
63
+ },
64
+ getMetadata(metadataKey, target) {
65
+ target = Object.getPrototypeOf(target);
66
+ return this.meta.get(target) ? this.meta.get(target)[metadataKey] : null;
67
+ }
68
+ };
69
+ export function update(events, options = {}) {
70
+ return (target, key, descriptor) => {
71
+ const name = events ? events.toString() : key;
72
+ Reflect.defineMetadata(`apprun-update:${name}`, { name, key, options }, target);
73
+ return descriptor;
74
+ };
75
+ }
76
+ export function on(events, options = {}) {
77
+ return function (target, key) {
78
+ const name = events ? events.toString() : key;
79
+ Reflect.defineMetadata(`apprun-update:${name}`, { name, key, options }, target);
80
+ };
81
+ }
82
+ export function customElement(name, options) {
83
+ return function _customElement(constructor) {
84
+ webComponent(name, constructor, options);
85
+ return constructor;
86
+ };
87
+ }
88
+ //# sourceMappingURL=decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorator.js","sourceRoot":"","sources":["../src/decorator.ts"],"names":[],"mappings":"AACA,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAE3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AAEH,iCAAiC;AACjC,MAAM,CAAC,MAAM,OAAO,GAAG;IAErB,IAAI,EAAE,IAAI,OAAO,EAAE;IAEnB,cAAc,CAAC,WAAW,EAAE,aAAa,EAAE,MAAM;QAC/C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACtD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,GAAG,aAAa,CAAC;IACrD,CAAC;IAED,eAAe,CAAC,MAAM;QACpB,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACzE,CAAC;IAED,WAAW,CAAC,WAAW,EAAE,MAAM;QAC7B,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3E,CAAC;CACF,CAAA;AAED,MAAM,UAAU,MAAM,CAAa,MAAU,EAAE,UAAe,EAAE;IAC9D,OAAO,CAAC,MAAW,EAAE,GAAW,EAAE,UAAe,EAAE,EAAE;QACnD,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QAC9C,OAAO,CAAC,cAAc,CAAC,iBAAiB,IAAI,EAAE,EAC5C,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;QAClC,OAAO,UAAU,CAAC;IACpB,CAAC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,EAAE,CAAa,MAAU,EAAE,UAAe,EAAE;IAC1D,OAAO,UAAU,MAAW,EAAE,GAAW;QACvC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QAC9C,OAAO,CAAC,cAAc,CAAC,iBAAiB,IAAI,EAAE,EAC5C,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,MAAM,CAAC,CAAA;IACnC,CAAC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,OAA8B;IACxE,OAAO,SAAS,cAAc,CAAwC,WAAc;QAClF,YAAY,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;QACzC,OAAO,WAAW,CAAC;IACrB,CAAC,CAAA;AACH,CAAC"}