@microzord/core 1.0.0-alpha.1 → 1.0.0-alpha.2

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 (81) hide show
  1. package/bundles/microzord-core-testing.umd.js +339 -0
  2. package/bundles/microzord-core-testing.umd.js.map +1 -0
  3. package/bundles/microzord-core.umd.js +121 -81
  4. package/bundles/microzord-core.umd.js.map +1 -1
  5. package/esm2015/index.js +6 -2
  6. package/esm2015/index.js.map +1 -1
  7. package/esm2015/index.metadata.json +1 -1
  8. package/esm2015/lib/helpers/bootstrap-app.js +6 -3
  9. package/esm2015/lib/helpers/bootstrap-app.js.map +1 -1
  10. package/esm2015/lib/helpers/bootstrap-app.metadata.json +1 -1
  11. package/esm2015/lib/helpers/get-app.js +5 -0
  12. package/esm2015/lib/helpers/get-app.js.map +1 -0
  13. package/esm2015/lib/helpers/get-app.metadata.json +1 -0
  14. package/esm2015/lib/helpers/get-entity.js +6 -0
  15. package/esm2015/lib/helpers/get-entity.js.map +1 -0
  16. package/esm2015/lib/helpers/get-entity.metadata.json +1 -0
  17. package/esm2015/lib/helpers/load-app.js +11 -0
  18. package/esm2015/lib/helpers/load-app.js.map +1 -0
  19. package/esm2015/lib/helpers/load-app.metadata.json +1 -0
  20. package/esm2015/lib/helpers/load-entity.js +24 -0
  21. package/esm2015/lib/helpers/load-entity.js.map +1 -0
  22. package/esm2015/lib/helpers/load-entity.metadata.json +1 -0
  23. package/esm2015/lib/helpers/register-app.js +2 -2
  24. package/esm2015/lib/helpers/register-app.js.map +1 -1
  25. package/esm2015/lib/helpers/register-entity.js +5 -0
  26. package/esm2015/lib/helpers/register-entity.js.map +1 -0
  27. package/esm2015/lib/helpers/register-entity.metadata.json +1 -0
  28. package/esm2015/lib/models/application.js +2 -0
  29. package/esm2015/lib/models/application.js.map +1 -1
  30. package/esm2015/lib/models/application.metadata.json +1 -1
  31. package/esm2015/lib/models/entity.js +2 -0
  32. package/esm2015/lib/models/entity.js.map +1 -0
  33. package/esm2015/lib/models/entity.metadata.json +1 -0
  34. package/esm2015/lib/models/registration-options.js.map +1 -1
  35. package/esm2015/lib/models/registration-options.metadata.json +1 -1
  36. package/esm2015/lib/registry.js +19 -2
  37. package/esm2015/lib/registry.js.map +1 -1
  38. package/esm2015/lib/registry.metadata.json +1 -1
  39. package/esm2015/microzord-core.js +1 -1
  40. package/esm2015/microzord-core.js.map +1 -1
  41. package/esm2015/microzord-core.metadata.json +1 -1
  42. package/esm2015/testing/application.mock.js +10 -0
  43. package/esm2015/testing/application.mock.js.map +1 -0
  44. package/esm2015/testing/application.mock.metadata.json +1 -0
  45. package/esm2015/testing/microzord-core-testing.js +5 -0
  46. package/esm2015/testing/microzord-core-testing.js.map +1 -0
  47. package/esm2015/testing/microzord-core-testing.metadata.json +1 -0
  48. package/esm2015/testing/public_api.js +2 -0
  49. package/esm2015/testing/public_api.js.map +1 -0
  50. package/esm2015/testing/public_api.metadata.json +1 -0
  51. package/fesm2015/microzord-core-testing.js +17 -0
  52. package/fesm2015/microzord-core-testing.js.map +1 -0
  53. package/fesm2015/microzord-core.js +98 -63
  54. package/fesm2015/microzord-core.js.map +1 -1
  55. package/index.d.ts +6 -2
  56. package/lib/helpers/get-app.d.ts +3 -0
  57. package/lib/helpers/get-entity.d.ts +3 -0
  58. package/lib/helpers/load-app.d.ts +3 -0
  59. package/lib/helpers/load-entity.d.ts +3 -0
  60. package/lib/helpers/register-app.d.ts +2 -2
  61. package/lib/helpers/register-entity.d.ts +2 -0
  62. package/lib/models/application.d.ts +2 -3
  63. package/lib/models/entity.d.ts +3 -0
  64. package/lib/models/registration-options.d.ts +4 -2
  65. package/lib/registry.d.ts +11 -4
  66. package/microzord-core.d.ts +1 -1
  67. package/microzord-core.metadata.json +1 -1
  68. package/package.json +1 -1
  69. package/testing/application.mock.d.ts +5 -0
  70. package/testing/microzord-core-testing.d.ts +4 -0
  71. package/testing/microzord-core-testing.metadata.json +1 -0
  72. package/testing/package.json +11 -0
  73. package/testing/public_api.d.ts +1 -0
  74. package/esm2015/lib/helpers/get-app-constructor.js +0 -6
  75. package/esm2015/lib/helpers/get-app-constructor.js.map +0 -1
  76. package/esm2015/lib/helpers/get-app-constructor.metadata.json +0 -1
  77. package/esm2015/lib/helpers/load-app-constructor.js +0 -24
  78. package/esm2015/lib/helpers/load-app-constructor.js.map +0 -1
  79. package/esm2015/lib/helpers/load-app-constructor.metadata.json +0 -1
  80. package/lib/helpers/get-app-constructor.d.ts +0 -3
  81. package/lib/helpers/load-app-constructor.d.ts +0 -3
@@ -0,0 +1,2 @@
1
+ export * from './application.mock';
2
+ //# sourceMappingURL=public_api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public_api.js","sourceRoot":"","sources":["../../../../../libs/core/testing/src/public_api.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC","sourcesContent":["export * from './application.mock';\n"]}
@@ -0,0 +1 @@
1
+ [{"__symbolic":"module","version":4,"metadata":{},"exports":[{"from":"./application.mock"}]}]
@@ -0,0 +1,17 @@
1
+ import { Application } from '@microzord/core';
2
+
3
+ class ApplicationMock extends Application {
4
+ navigate(_url, _props) {
5
+ return Promise.resolve(undefined);
6
+ }
7
+ send(_msg) {
8
+ return Promise.resolve(undefined);
9
+ }
10
+ }
11
+
12
+ /**
13
+ * Generated bundle index. Do not edit.
14
+ */
15
+
16
+ export { ApplicationMock };
17
+ //# sourceMappingURL=microzord-core-testing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"microzord-core-testing.js","sources":["../../../../libs/core/testing/src/application.mock.ts","../../../../libs/core/testing/src/microzord-core-testing.ts"],"sourcesContent":["import {\n Application,\n MicrozordLifecycleEvent,\n MicrozordMessageEvent,\n} from '@microzord/core';\n\nexport class ApplicationMock extends Application<any> {\n navigate(_url: string, _props?: unknown): Promise<void> {\n return Promise.resolve(undefined);\n }\n\n send(_msg: string | MicrozordMessageEvent): Promise<void> {\n return Promise.resolve(undefined);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;MAMa,eAAgB,SAAQ,WAAgB;IACnD,QAAQ,CAAC,IAAY,EAAE,MAAgB;QACrC,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;KACnC;IAED,IAAI,CAAC,IAAoC;QACvC,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;KACnC;;;ACbH;;;;;;"}
@@ -2,41 +2,75 @@ import { of, defer, isObservable } from 'rxjs';
2
2
  import { switchMap, tap, map, mapTo } from 'rxjs/operators';
3
3
  import { __awaiter } from 'tslib';
4
4
 
5
+ class MicrozordRegistry {
6
+ constructor() {
7
+ this._map = new Map();
8
+ }
9
+ getMap() {
10
+ return this._map;
11
+ }
12
+ clear() {
13
+ this._map.clear();
14
+ }
15
+ get(key) {
16
+ return this._map.get(key);
17
+ }
18
+ set(key, value) {
19
+ this._map.set(key, value);
20
+ }
21
+ }
5
22
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
6
- const appOptionsRegistry = new Map();
23
+ const entityOptionsRegistry = new MicrozordRegistry();
7
24
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
8
- const loadedAppRegistry = new Map();
25
+ const loadedEntityRegistry = new MicrozordRegistry();
9
26
 
10
- function getAppConstructor(appName) {
11
- return of(loadedAppRegistry.get(appName) || null);
27
+ function getEntity(entityName) {
28
+ return of(loadedEntityRegistry.get(entityName) || null);
12
29
  }
13
30
 
14
- function loadAppConstructor(appName) {
15
- return getAppConstructor(appName).pipe(switchMap(appConstructor => appConstructor
16
- ? of(appConstructor)
31
+ function getApp(appName) {
32
+ return getEntity(appName);
33
+ }
34
+
35
+ function loadEntity(entityName) {
36
+ return getEntity(entityName).pipe(switchMap(entity => entity
37
+ ? of(entity)
17
38
  : defer(() => {
18
- const appOptions = appOptionsRegistry.get(appName);
19
- if (!appOptions) {
20
- throw `Microzord appliction "${appName}" has not been registered. Check the spelling or register an app.`;
39
+ const options = entityOptionsRegistry.get(entityName);
40
+ if (!options) {
41
+ throw `Microzord entity "${entityName}" has not been registered. Check the spelling or register an app.`;
21
42
  }
22
- if (!appOptions.loadApp) {
23
- throw `Microzord appliction "${appName}" is registered but it has no "loadApp" function. Please, provide it`;
43
+ if (!options.load) {
44
+ throw `Microzord entity "${entityName}" is registered but it has no "load" function. Please, provide it`;
24
45
  }
25
- const result = appOptions.loadApp(appOptions.props);
46
+ const result = options.load();
26
47
  return result &&
27
48
  (isObservable(result) ||
28
49
  ('then' in result && typeof result['then'] === 'function'))
29
50
  ? defer(() => result)
30
51
  : of(result);
31
- })), tap(applicationConstructor => loadedAppRegistry.set(appName, applicationConstructor)));
52
+ })), tap(entity => loadedEntityRegistry.set(entityName, entity)));
53
+ }
54
+
55
+ function loadApp(appName) {
56
+ return getApp(appName).pipe(switchMap(appConstructor => appConstructor
57
+ ? of(appConstructor).pipe(tap(applicationConstructor => loadedEntityRegistry.set(appName, applicationConstructor)))
58
+ : loadEntity(appName)));
32
59
  }
33
60
 
34
61
  function bootstrapApp(appName, selector, props) {
35
- return loadAppConstructor(appName).pipe(map(AppConstructor => { var _a; return new AppConstructor(appName, (_a = appOptionsRegistry.get(appName)) === null || _a === void 0 ? void 0 : _a.props); }), switchMap(app => defer(() => (console.log(props), app.bootstrap(selector, props))).pipe(mapTo(app))));
62
+ return loadApp(appName).pipe(map(AppConstructor => {
63
+ var _a;
64
+ return new AppConstructor(appName, (_a = entityOptionsRegistry.get(appName)) === null || _a === void 0 ? void 0 : _a.props);
65
+ }), switchMap(app => defer(() => app.bootstrap(selector, props)).pipe(mapTo(app))));
66
+ }
67
+
68
+ function registerEntity(options) {
69
+ entityOptionsRegistry.set(options.name, options);
36
70
  }
37
71
 
38
72
  function registerApp(options) {
39
- appOptionsRegistry.set(options.name, options);
73
+ registerEntity(options);
40
74
  }
41
75
 
42
76
  function replaceApps(from, to, props) {
@@ -46,6 +80,52 @@ function replaceApps(from, to, props) {
46
80
  });
47
81
  }
48
82
 
83
+ class MicrozordEvent {
84
+ constructor(type) {
85
+ this.type = type;
86
+ this.target = null;
87
+ }
88
+ }
89
+ // todo: подумать над сообщениями
90
+ class MicrozordMessageEvent extends MicrozordEvent {
91
+ static isMessageEvent(event) {
92
+ return (event && event.constructor && event.constructor.name === MicrozordMessageEvent.name);
93
+ }
94
+ }
95
+ // todo: подумать над ивентами роутинга
96
+ class MicrozordNavigationEvent extends MicrozordEvent {
97
+ static isNavigationEvent(event) {
98
+ return (event &&
99
+ event.constructor &&
100
+ event.constructor.name === MicrozordNavigationEvent.name);
101
+ }
102
+ }
103
+
104
+ var LifecycleEventTypes;
105
+ (function (LifecycleEventTypes) {
106
+ LifecycleEventTypes["bootstrapped"] = "bootstrapped";
107
+ LifecycleEventTypes["destroyed"] = "destroyed";
108
+ })(LifecycleEventTypes || (LifecycleEventTypes = {}));
109
+ class MicrozordLifecycleEvent extends MicrozordEvent {
110
+ static isLifecycleEvent(event) {
111
+ return (event &&
112
+ event.constructor &&
113
+ event.constructor.name === MicrozordLifecycleEvent.name);
114
+ }
115
+ static bootstrapped() {
116
+ return new MicrozordLifecycleEvent(LifecycleEventTypes.bootstrapped);
117
+ }
118
+ static isBootstrappedEvent(event) {
119
+ return event.type === LifecycleEventTypes.bootstrapped;
120
+ }
121
+ static destroyed() {
122
+ return new MicrozordLifecycleEvent(LifecycleEventTypes.destroyed);
123
+ }
124
+ static isDestroyedEvent(event) {
125
+ return event.type === LifecycleEventTypes.destroyed;
126
+ }
127
+ }
128
+
49
129
  class Application {
50
130
  // todo: заспекать типы props
51
131
  constructor(name, props) {
@@ -86,6 +166,7 @@ class Application {
86
166
  this.callListeners(this.hook, event);
87
167
  }
88
168
  destroy() {
169
+ this.emitHook(MicrozordLifecycleEvent.destroyed());
89
170
  this.hook.clear(); // todo: в этот поток перед комплитом нужен евент дестроя
90
171
  this.message.clear();
91
172
  this.navigationEvent.clear();
@@ -106,55 +187,9 @@ class Application {
106
187
  }
107
188
  }
108
189
 
109
- class MicrozordEvent {
110
- constructor(type) {
111
- this.type = type;
112
- this.target = null;
113
- }
114
- }
115
- // todo: подумать над сообщениями
116
- class MicrozordMessageEvent extends MicrozordEvent {
117
- static isMessageEvent(event) {
118
- return (event && event.constructor && event.constructor.name === MicrozordMessageEvent.name);
119
- }
120
- }
121
- // todo: подумать над ивентами роутинга
122
- class MicrozordNavigationEvent extends MicrozordEvent {
123
- static isNavigationEvent(event) {
124
- return (event &&
125
- event.constructor &&
126
- event.constructor.name === MicrozordNavigationEvent.name);
127
- }
128
- }
129
-
130
- var LifecycleEventTypes;
131
- (function (LifecycleEventTypes) {
132
- LifecycleEventTypes["bootstrapped"] = "bootstrapped";
133
- LifecycleEventTypes["destroyed"] = "destroyed";
134
- })(LifecycleEventTypes || (LifecycleEventTypes = {}));
135
- class MicrozordLifecycleEvent extends MicrozordEvent {
136
- static isLifecycleEvent(event) {
137
- return (event &&
138
- event.constructor &&
139
- event.constructor.name === MicrozordLifecycleEvent.name);
140
- }
141
- static bootstrapped() {
142
- return new MicrozordLifecycleEvent(LifecycleEventTypes.bootstrapped);
143
- }
144
- static isBootstrappedEvent(event) {
145
- return event.type === LifecycleEventTypes.bootstrapped;
146
- }
147
- static destroyed() {
148
- return new MicrozordLifecycleEvent(LifecycleEventTypes.destroyed);
149
- }
150
- static isDestroyedEvent(event) {
151
- return event.type === LifecycleEventTypes.destroyed;
152
- }
153
- }
154
-
155
190
  /**
156
191
  * Generated bundle index. Do not edit.
157
192
  */
158
193
 
159
- export { Application, LifecycleEventTypes, MicrozordEvent, MicrozordLifecycleEvent, MicrozordMessageEvent, MicrozordNavigationEvent, bootstrapApp, getAppConstructor, loadAppConstructor, registerApp, replaceApps, loadedAppRegistry as ɵa };
194
+ export { Application, LifecycleEventTypes, MicrozordEvent, MicrozordLifecycleEvent, MicrozordMessageEvent, MicrozordNavigationEvent, bootstrapApp, getApp, getEntity, loadApp, loadEntity, registerApp, registerEntity, replaceApps, MicrozordRegistry as ɵa, loadedEntityRegistry as ɵb };
160
195
  //# sourceMappingURL=microzord-core.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"microzord-core.js","sources":["../../../../libs/core/src/lib/registry.ts","../../../../libs/core/src/lib/helpers/get-app-constructor.ts","../../../../libs/core/src/lib/helpers/load-app-constructor.ts","../../../../libs/core/src/lib/helpers/bootstrap-app.ts","../../../../libs/core/src/lib/helpers/register-app.ts","../../../../libs/core/src/lib/helpers/replace-apps.ts","../../../../libs/core/src/lib/models/application.ts","../../../../libs/core/src/lib/models/events.ts","../../../../libs/core/src/lib/models/lifecycle.ts","../../../../libs/core/src/microzord-core.ts"],"sourcesContent":["import {ApplicationConstructor} from './models/application';\nimport {RegistrationOptions} from './models/registration-options';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const appOptionsRegistry = new Map<string, RegistrationOptions<any>>();\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const loadedAppRegistry = new Map<string, ApplicationConstructor<any>>();\n","import {Observable, of} from 'rxjs';\nimport {ApplicationConstructor} from '../models/application';\nimport {loadedAppRegistry} from '../registry';\n\nexport function getAppConstructor<T extends Record<string, any> = Record<string, any>>(\n appName: string,\n): Observable<ApplicationConstructor<T> | null> {\n return of(loadedAppRegistry.get(appName) || null);\n}\n","import {defer, isObservable, Observable, of} from 'rxjs';\nimport {catchError, switchMap, tap} from 'rxjs/operators';\nimport {ApplicationConstructor} from '../models/application';\nimport {appOptionsRegistry, loadedAppRegistry} from '../registry';\nimport {getAppConstructor} from './get-app-constructor';\n\nexport function loadAppConstructor<T extends Record<string, any> = Record<string, any>>(\n appName: string,\n): Observable<ApplicationConstructor<T>> {\n return getAppConstructor<T>(appName).pipe(\n switchMap(appConstructor =>\n appConstructor\n ? of(appConstructor)\n : defer(() => {\n const appOptions = appOptionsRegistry.get(appName);\n\n if (!appOptions) {\n throw `Microzord appliction \"${appName}\" has not been registered. Check the spelling or register an app.`;\n }\n\n if (!appOptions.loadApp) {\n throw `Microzord appliction \"${appName}\" is registered but it has no \"loadApp\" function. Please, provide it`;\n }\n\n const result = appOptions.loadApp(appOptions.props);\n\n return result &&\n (isObservable(result) ||\n ('then' in result && typeof result['then'] === 'function'))\n ? defer(() => result)\n : of(result as ApplicationConstructor<T>);\n }),\n ),\n tap(applicationConstructor => loadedAppRegistry.set(appName, applicationConstructor)),\n );\n}\n","import {defer, Observable} from 'rxjs';\nimport {map, mapTo, switchMap} from 'rxjs/operators';\nimport {Application} from '../models/application';\nimport {appOptionsRegistry} from '../registry';\nimport {loadAppConstructor} from './load-app-constructor';\n\nexport function bootstrapApp<T extends Record<string, any> = Record<string, any>>(\n appName: string,\n selector: string | Element,\n props?: T,\n): Observable<Application<T>> {\n return loadAppConstructor<T>(appName).pipe(\n map(\n AppConstructor =>\n new AppConstructor(appName, appOptionsRegistry.get(appName)?.props),\n ),\n switchMap(app =>\n defer(() => (console.log(props), app.bootstrap(selector, props))).pipe(mapTo(app)),\n ),\n );\n}\n","import {appOptionsRegistry} from '../registry';\nimport {RegistrationOptions} from '../models/registration-options';\n\nexport function registerApp<T extends Record<string, any> = Record<string, any>>(\n options: RegistrationOptions<T>,\n) {\n appOptionsRegistry.set(options.name, options);\n}\n","import {defer, Observable} from 'rxjs';\nimport {Application} from '../models/application';\nimport {bootstrapApp} from './bootstrap-app';\n\nexport function replaceApps<T extends Record<string, any> = Record<string, any>>(\n from: Application,\n to: string,\n props?: T,\n): Observable<Application<T>> {\n return defer(() => {\n from.destroy();\n\n return bootstrapApp(to, from.container, props);\n });\n}\n","import {MicrozordEvent, MicrozordMessageEvent, MicrozordNavigationEvent} from './events';\nimport {MicrozordLifecycleEvent} from './lifecycle';\n\nexport type Listener<T extends MicrozordEvent> = (event: T) => void;\n\nexport abstract class Application<T extends Record<string, any> = Record<string, any>> {\n isBootstrapped = false;\n isDestroyed = true;\n container: Element | string = '';\n\n protected readonly hook = new Set<Listener<MicrozordLifecycleEvent>>();\n protected readonly message = new Set<Listener<MicrozordMessageEvent>>();\n protected readonly navigationEvent = new Set<Listener<MicrozordNavigationEvent>>();\n\n // todo: заспекать типы props\n constructor(public readonly name: string, public props?: T) {}\n\n onMessage(fn: Listener<MicrozordMessageEvent>): () => void {\n this.message.add(fn);\n\n return () => {\n this.message.delete(fn);\n };\n }\n\n emitMessage(event: MicrozordMessageEvent) {\n this.callListeners(this.message, event);\n }\n\n onRouteChange(fn: Listener<MicrozordNavigationEvent>): () => void {\n this.navigationEvent.add(fn);\n\n return () => {\n this.navigationEvent.delete(fn);\n };\n }\n\n emitRouteChange(event: MicrozordNavigationEvent) {\n this.callListeners(this.navigationEvent, event);\n }\n\n onHook(fn: Listener<MicrozordLifecycleEvent>): () => void {\n this.hook.add(fn);\n\n return () => {\n this.hook.delete(fn);\n };\n }\n\n emitHook(event: MicrozordLifecycleEvent) {\n this.callListeners(this.hook, event);\n }\n\n destroy() {\n this.hook.clear(); // todo: в этот поток перед комплитом нужен евент дестроя\n this.message.clear();\n this.navigationEvent.clear();\n\n this.isBootstrapped = false;\n this.isDestroyed = true;\n }\n\n async bootstrap(container: string | Element, _props?: T): Promise<void> {\n this.isBootstrapped = true;\n this.container = container;\n }\n\n abstract send(msg: string | MicrozordMessageEvent): Promise<void>;\n\n // todo: шо за пропс? Надо придумать\n abstract navigate(url: string, props?: unknown): Promise<void>;\n\n protected callListeners<K extends MicrozordEvent>(\n listeners: Set<Listener<K>>,\n event: K,\n ) {\n event.target = this;\n\n [...listeners].forEach(fn => {\n fn(event);\n });\n }\n}\n\nexport interface ApplicationConstructor<\n T extends Record<string, any> = Record<string, any>,\n> {\n new (name: string, props?: T): Application<T>;\n}\n","import {Application} from './application';\n\nexport class MicrozordEvent {\n target: Application<any> | null = null;\n constructor(public readonly type: string) {}\n}\n\n// todo: подумать над сообщениями\nexport class MicrozordMessageEvent extends MicrozordEvent {\n static isMessageEvent(event: MicrozordEvent): event is MicrozordMessageEvent {\n return (\n event && event.constructor && event.constructor.name === MicrozordMessageEvent.name\n );\n }\n}\n\n// todo: подумать над ивентами роутинга\nexport class MicrozordNavigationEvent extends MicrozordEvent {\n static isNavigationEvent(event: MicrozordEvent): event is MicrozordNavigationEvent {\n return (\n event &&\n event.constructor &&\n event.constructor.name === MicrozordNavigationEvent.name\n );\n }\n}\n","import {MicrozordEvent} from './events';\n\nexport enum LifecycleEventTypes {\n bootstrapped = 'bootstrapped',\n destroyed = 'destroyed',\n}\n\nexport class MicrozordLifecycleEvent extends MicrozordEvent {\n static isLifecycleEvent(event: MicrozordEvent): event is MicrozordLifecycleEvent {\n return (\n event &&\n event.constructor &&\n event.constructor.name === MicrozordLifecycleEvent.name\n );\n }\n\n static bootstrapped(): MicrozordLifecycleEvent {\n return new MicrozordLifecycleEvent(LifecycleEventTypes.bootstrapped);\n }\n\n static isBootstrappedEvent(event: MicrozordLifecycleEvent): boolean {\n return event.type === LifecycleEventTypes.bootstrapped;\n }\n\n static destroyed(): MicrozordLifecycleEvent {\n return new MicrozordLifecycleEvent(LifecycleEventTypes.destroyed);\n }\n\n static isDestroyedEvent(event: MicrozordLifecycleEvent): boolean {\n return event.type === LifecycleEventTypes.destroyed;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n\nexport {loadedAppRegistry as ɵa} from './lib/registry';"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"microzord-core.js","sources":["../../../../libs/core/src/lib/registry.ts","../../../../libs/core/src/lib/helpers/get-entity.ts","../../../../libs/core/src/lib/helpers/get-app.ts","../../../../libs/core/src/lib/helpers/load-entity.ts","../../../../libs/core/src/lib/helpers/load-app.ts","../../../../libs/core/src/lib/helpers/bootstrap-app.ts","../../../../libs/core/src/lib/helpers/register-entity.ts","../../../../libs/core/src/lib/helpers/register-app.ts","../../../../libs/core/src/lib/helpers/replace-apps.ts","../../../../libs/core/src/lib/models/events.ts","../../../../libs/core/src/lib/models/lifecycle.ts","../../../../libs/core/src/lib/models/application.ts","../../../../libs/core/src/microzord-core.ts"],"sourcesContent":["import {EntityRegistrationOptions} from './models/registration-options';\nimport {EntityConstructor} from './models/entity';\n\nexport class MicrozordRegistry<K, V> {\n private _map = new Map<K, V>();\n\n getMap(): ReadonlyMap<K, V> {\n return this._map;\n }\n\n clear(): void {\n this._map.clear();\n }\n\n get<E extends V = V>(key: K): E | undefined {\n return this._map.get(key) as E;\n }\n\n set<E extends V = V>(key: K, value: E): void {\n this._map.set(key, value);\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const entityOptionsRegistry = new MicrozordRegistry<\n string,\n EntityRegistrationOptions<any>\n>();\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const loadedEntityRegistry = new MicrozordRegistry<\n string,\n EntityConstructor<any, any>\n>();\n","import {Observable, of} from 'rxjs';\nimport {loadedEntityRegistry} from '../registry';\nimport {EntityConstructor} from '../models/entity';\n\nexport function getEntity<T, K>(\n entityName: string,\n): Observable<EntityConstructor<T, K> | null> {\n return of(loadedEntityRegistry.get(entityName) || null);\n}\n","import {Observable} from 'rxjs';\nimport {ApplicationConstructor} from '../models/application';\nimport {getEntity} from './get-entity';\n\nexport function getApp<T extends Record<string, any> = Record<string, any>>(\n appName: string,\n): Observable<ApplicationConstructor<T> | null> {\n return getEntity(appName);\n}\n","import {defer, isObservable, Observable, of} from 'rxjs';\nimport {switchMap, tap} from 'rxjs/operators';\nimport {entityOptionsRegistry, loadedEntityRegistry} from '../registry';\nimport {EntityConstructor} from '../models/entity';\nimport {EntityRegistrationOptions} from '../models/registration-options';\nimport {getEntity} from './get-entity';\n\nexport function loadEntity<T, K>(\n entityName: string,\n): Observable<EntityConstructor<T, K>> {\n return getEntity<T, K>(entityName).pipe(\n switchMap(entity =>\n entity\n ? of(entity)\n : defer<Observable<EntityConstructor<T, K>>>(() => {\n const options =\n entityOptionsRegistry.get<\n EntityRegistrationOptions<EntityConstructor<T, K>>\n >(entityName);\n\n if (!options) {\n throw `Microzord entity \"${entityName}\" has not been registered. Check the spelling or register an app.`;\n }\n\n if (!options.load) {\n throw `Microzord entity \"${entityName}\" is registered but it has no \"load\" function. Please, provide it`;\n }\n\n const result = options.load();\n\n return result &&\n (isObservable(result) ||\n ('then' in result && typeof result['then'] === 'function'))\n ? defer(() => result)\n : of(result as EntityConstructor<T, K>);\n }),\n ),\n tap(entity => loadedEntityRegistry.set(entityName, entity)),\n );\n}\n","import {Observable, of} from 'rxjs';\nimport {switchMap, tap} from 'rxjs/operators';\nimport {Application, ApplicationConstructor} from '../models/application';\nimport {loadedEntityRegistry} from '../registry';\nimport {getApp} from './get-app';\nimport {loadEntity} from './load-entity';\n\nexport function loadApp<T extends Record<string, any> = Record<string, any>>(\n appName: string,\n): Observable<ApplicationConstructor<T>> {\n return getApp<T>(appName).pipe(\n switchMap(appConstructor =>\n appConstructor\n ? of(appConstructor).pipe(\n tap(applicationConstructor =>\n loadedEntityRegistry.set(appName, applicationConstructor),\n ),\n )\n : loadEntity<T, Application<T>>(appName),\n ),\n );\n}\n","import {defer, Observable} from 'rxjs';\nimport {map, mapTo, switchMap} from 'rxjs/operators';\nimport {Application} from '../models/application';\nimport {entityOptionsRegistry} from '../registry';\nimport {loadApp} from './load-app';\nimport {AppRegistrationOptions} from '../models/registration-options';\n\nexport function bootstrapApp<T extends Record<string, any> = Record<string, any>>(\n appName: string,\n selector: string | Element,\n props?: T,\n): Observable<Application<T>> {\n return loadApp<T>(appName).pipe(\n map(\n AppConstructor =>\n new AppConstructor(\n appName,\n entityOptionsRegistry.get<AppRegistrationOptions<T>>(appName)?.props,\n ),\n ),\n switchMap(app => defer(() => app.bootstrap(selector, props)).pipe(mapTo(app))),\n );\n}\n","import {entityOptionsRegistry} from '../registry';\nimport {EntityRegistrationOptions} from '../models/registration-options';\n\nexport function registerEntity<\n T,\n K extends EntityRegistrationOptions<T> = EntityRegistrationOptions<T>,\n>(options: K): void {\n entityOptionsRegistry.set(options.name, options);\n}\n","import {AppRegistrationOptions} from '../models/registration-options';\nimport {registerEntity} from './register-entity';\n\nexport function registerApp<T extends Record<string, any> = Record<string, any>>(\n options: AppRegistrationOptions<T>,\n) {\n registerEntity(options);\n}\n","import {defer, Observable} from 'rxjs';\nimport {Application} from '../models/application';\nimport {bootstrapApp} from './bootstrap-app';\n\nexport function replaceApps<T extends Record<string, any> = Record<string, any>>(\n from: Application,\n to: string,\n props?: T,\n): Observable<Application<T>> {\n return defer(() => {\n from.destroy();\n\n return bootstrapApp(to, from.container, props);\n });\n}\n","import {Application} from './application';\n\nexport class MicrozordEvent {\n target: Application<any> | null = null;\n constructor(public readonly type: string) {}\n}\n\n// todo: подумать над сообщениями\nexport class MicrozordMessageEvent extends MicrozordEvent {\n static isMessageEvent(event: MicrozordEvent): event is MicrozordMessageEvent {\n return (\n event && event.constructor && event.constructor.name === MicrozordMessageEvent.name\n );\n }\n}\n\n// todo: подумать над ивентами роутинга\nexport class MicrozordNavigationEvent extends MicrozordEvent {\n static isNavigationEvent(event: MicrozordEvent): event is MicrozordNavigationEvent {\n return (\n event &&\n event.constructor &&\n event.constructor.name === MicrozordNavigationEvent.name\n );\n }\n}\n","import {MicrozordEvent} from './events';\n\nexport enum LifecycleEventTypes {\n bootstrapped = 'bootstrapped',\n destroyed = 'destroyed',\n}\n\nexport class MicrozordLifecycleEvent extends MicrozordEvent {\n static isLifecycleEvent(event: MicrozordEvent): event is MicrozordLifecycleEvent {\n return (\n event &&\n event.constructor &&\n event.constructor.name === MicrozordLifecycleEvent.name\n );\n }\n\n static bootstrapped(): MicrozordLifecycleEvent {\n return new MicrozordLifecycleEvent(LifecycleEventTypes.bootstrapped);\n }\n\n static isBootstrappedEvent(event: MicrozordLifecycleEvent): boolean {\n return event.type === LifecycleEventTypes.bootstrapped;\n }\n\n static destroyed(): MicrozordLifecycleEvent {\n return new MicrozordLifecycleEvent(LifecycleEventTypes.destroyed);\n }\n\n static isDestroyedEvent(event: MicrozordLifecycleEvent): boolean {\n return event.type === LifecycleEventTypes.destroyed;\n }\n}\n","import {MicrozordEvent, MicrozordMessageEvent, MicrozordNavigationEvent} from './events';\nimport {MicrozordLifecycleEvent} from './lifecycle';\nimport {EntityConstructor} from './entity';\n\nexport type Listener<T extends MicrozordEvent> = (event: T) => void;\n\nexport abstract class Application<T extends Record<string, any> = Record<string, any>> {\n isBootstrapped = false;\n isDestroyed = true;\n container: Element | string = '';\n\n protected readonly hook = new Set<Listener<MicrozordLifecycleEvent>>();\n protected readonly message = new Set<Listener<MicrozordMessageEvent>>();\n protected readonly navigationEvent = new Set<Listener<MicrozordNavigationEvent>>();\n\n // todo: заспекать типы props\n constructor(public readonly name: string, public props?: T) {}\n\n onMessage(fn: Listener<MicrozordMessageEvent>): () => void {\n this.message.add(fn);\n\n return () => {\n this.message.delete(fn);\n };\n }\n\n emitMessage(event: MicrozordMessageEvent) {\n this.callListeners(this.message, event);\n }\n\n onRouteChange(fn: Listener<MicrozordNavigationEvent>): () => void {\n this.navigationEvent.add(fn);\n\n return () => {\n this.navigationEvent.delete(fn);\n };\n }\n\n emitRouteChange(event: MicrozordNavigationEvent) {\n this.callListeners(this.navigationEvent, event);\n }\n\n onHook(fn: Listener<MicrozordLifecycleEvent>): () => void {\n this.hook.add(fn);\n\n return () => {\n this.hook.delete(fn);\n };\n }\n\n emitHook(event: MicrozordLifecycleEvent) {\n this.callListeners(this.hook, event);\n }\n\n destroy() {\n this.emitHook(MicrozordLifecycleEvent.destroyed());\n\n this.hook.clear(); // todo: в этот поток перед комплитом нужен евент дестроя\n this.message.clear();\n this.navigationEvent.clear();\n\n this.isBootstrapped = false;\n this.isDestroyed = true;\n }\n\n async bootstrap(container: string | Element, _props?: T): Promise<void> {\n this.isBootstrapped = true;\n this.container = container;\n }\n\n abstract send(msg: string | MicrozordMessageEvent): Promise<void>;\n\n // todo: шо за пропс? Надо придумать\n abstract navigate(url: string, props?: unknown): Promise<void>;\n\n protected callListeners<K extends MicrozordEvent>(\n listeners: Set<Listener<K>>,\n event: K,\n ) {\n event.target = this;\n\n [...listeners].forEach(fn => {\n fn(event);\n });\n }\n}\n\nexport type ApplicationConstructor<T extends Record<string, any> = Record<string, any>> =\n EntityConstructor<T, Application<T>>;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n\nexport {MicrozordRegistry as ɵa,loadedEntityRegistry as ɵb} from './lib/registry';"],"names":[],"mappings":"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"}
package/index.d.ts CHANGED
@@ -1,9 +1,13 @@
1
1
  export * from './lib/helpers/bootstrap-app';
2
- export * from './lib/helpers/get-app-constructor';
3
- export * from './lib/helpers/load-app-constructor';
2
+ export * from './lib/helpers/get-app';
3
+ export * from './lib/helpers/get-entity';
4
+ export * from './lib/helpers/load-app';
5
+ export * from './lib/helpers/load-entity';
4
6
  export * from './lib/helpers/register-app';
7
+ export * from './lib/helpers/register-entity';
5
8
  export * from './lib/helpers/replace-apps';
6
9
  export * from './lib/models/application';
10
+ export * from './lib/models/entity';
7
11
  export * from './lib/models/events';
8
12
  export * from './lib/models/lifecycle';
9
13
  export * from './lib/models/registration-options';
@@ -0,0 +1,3 @@
1
+ import { Observable } from 'rxjs';
2
+ import { ApplicationConstructor } from '../models/application';
3
+ export declare function getApp<T extends Record<string, any> = Record<string, any>>(appName: string): Observable<ApplicationConstructor<T> | null>;
@@ -0,0 +1,3 @@
1
+ import { Observable } from 'rxjs';
2
+ import { EntityConstructor } from '../models/entity';
3
+ export declare function getEntity<T, K>(entityName: string): Observable<EntityConstructor<T, K> | null>;
@@ -0,0 +1,3 @@
1
+ import { Observable } from 'rxjs';
2
+ import { ApplicationConstructor } from '../models/application';
3
+ export declare function loadApp<T extends Record<string, any> = Record<string, any>>(appName: string): Observable<ApplicationConstructor<T>>;
@@ -0,0 +1,3 @@
1
+ import { Observable } from 'rxjs';
2
+ import { EntityConstructor } from '../models/entity';
3
+ export declare function loadEntity<T, K>(entityName: string): Observable<EntityConstructor<T, K>>;
@@ -1,2 +1,2 @@
1
- import { RegistrationOptions } from '../models/registration-options';
2
- export declare function registerApp<T extends Record<string, any> = Record<string, any>>(options: RegistrationOptions<T>): void;
1
+ import { AppRegistrationOptions } from '../models/registration-options';
2
+ export declare function registerApp<T extends Record<string, any> = Record<string, any>>(options: AppRegistrationOptions<T>): void;
@@ -0,0 +1,2 @@
1
+ import { EntityRegistrationOptions } from '../models/registration-options';
2
+ export declare function registerEntity<T, K extends EntityRegistrationOptions<T> = EntityRegistrationOptions<T>>(options: K): void;
@@ -1,5 +1,6 @@
1
1
  import { MicrozordEvent, MicrozordMessageEvent, MicrozordNavigationEvent } from './events';
2
2
  import { MicrozordLifecycleEvent } from './lifecycle';
3
+ import { EntityConstructor } from './entity';
3
4
  export declare type Listener<T extends MicrozordEvent> = (event: T) => void;
4
5
  export declare abstract class Application<T extends Record<string, any> = Record<string, any>> {
5
6
  readonly name: string;
@@ -23,6 +24,4 @@ export declare abstract class Application<T extends Record<string, any> = Record
23
24
  abstract navigate(url: string, props?: unknown): Promise<void>;
24
25
  protected callListeners<K extends MicrozordEvent>(listeners: Set<Listener<K>>, event: K): void;
25
26
  }
26
- export interface ApplicationConstructor<T extends Record<string, any> = Record<string, any>> {
27
- new (name: string, props?: T): Application<T>;
28
- }
27
+ export declare type ApplicationConstructor<T extends Record<string, any> = Record<string, any>> = EntityConstructor<T, Application<T>>;
@@ -0,0 +1,3 @@
1
+ export interface EntityConstructor<T, K> {
2
+ new (name: string, props?: T): K;
3
+ }
@@ -1,7 +1,9 @@
1
1
  import { Observable } from 'rxjs';
2
2
  import { ApplicationConstructor } from './application';
3
- export interface RegistrationOptions<T extends Record<string, any> = Record<string, any>> {
3
+ export interface EntityRegistrationOptions<T> {
4
4
  name: string;
5
+ load: () => Observable<T> | PromiseLike<T> | T;
6
+ }
7
+ export interface AppRegistrationOptions<T extends Record<string, any> = Record<string, any>> extends EntityRegistrationOptions<ApplicationConstructor<T>> {
5
8
  props?: T;
6
- loadApp: (props: T) => Observable<ApplicationConstructor<T>> | PromiseLike<ApplicationConstructor<T>> | ApplicationConstructor<T>;
7
9
  }
package/lib/registry.d.ts CHANGED
@@ -1,4 +1,11 @@
1
- import { ApplicationConstructor } from './models/application';
2
- import { RegistrationOptions } from './models/registration-options';
3
- export declare const appOptionsRegistry: Map<string, RegistrationOptions<any>>;
4
- export declare const loadedAppRegistry: Map<string, ApplicationConstructor<any>>;
1
+ import { EntityRegistrationOptions } from './models/registration-options';
2
+ import { EntityConstructor } from './models/entity';
3
+ export declare class MicrozordRegistry<K, V> {
4
+ private _map;
5
+ getMap(): ReadonlyMap<K, V>;
6
+ clear(): void;
7
+ get<E extends V = V>(key: K): E | undefined;
8
+ set<E extends V = V>(key: K, value: E): void;
9
+ }
10
+ export declare const entityOptionsRegistry: MicrozordRegistry<string, EntityRegistrationOptions<any>>;
11
+ export declare const loadedEntityRegistry: MicrozordRegistry<string, EntityConstructor<any, any>>;
@@ -2,4 +2,4 @@
2
2
  * Generated bundle index. Do not edit.
3
3
  */
4
4
  export * from './index';
5
- export { loadedAppRegistry as ɵa } from './lib/registry';
5
+ export { MicrozordRegistry as ɵa, loadedEntityRegistry as ɵb } from './lib/registry';
@@ -1 +1 @@
1
- {"__symbolic":"module","version":4,"metadata":{"bootstrapApp":{"__symbolic":"function","parameters":["appName","selector","props"],"value":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"loadAppConstructor"},"arguments":[{"__symbolic":"reference","name":"appName"}]},"member":"pipe"},"arguments":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"rxjs/operators","name":"map","line":12,"character":4},"arguments":[{"__symbolic":"error","message":"Lambda not supported","line":13,"character":6,"module":"./lib/helpers/bootstrap-app"}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"rxjs/operators","name":"switchMap","line":16,"character":4},"arguments":[{"__symbolic":"error","message":"Lambda not supported","line":16,"character":14,"module":"./lib/helpers/bootstrap-app"}]}]}},"getAppConstructor":{"__symbolic":"function","parameters":["appName"],"value":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"rxjs","name":"of","line":7,"character":9},"arguments":[{"__symbolic":"binop","operator":"||","left":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ɵa"},"member":"get"},"arguments":[{"__symbolic":"reference","name":"appName"}]},"right":null}]}},"loadAppConstructor":{"__symbolic":"function","parameters":["appName"],"value":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"getAppConstructor"},"arguments":[{"__symbolic":"reference","name":"appName"}]},"member":"pipe"},"arguments":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"rxjs/operators","name":"switchMap","line":10,"character":4},"arguments":[{"__symbolic":"error","message":"Lambda not supported","line":10,"character":14,"module":"./lib/helpers/load-app-constructor"}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"rxjs/operators","name":"tap","line":33,"character":4},"arguments":[{"__symbolic":"error","message":"Lambda not supported","line":33,"character":8,"module":"./lib/helpers/load-app-constructor"}]}]}},"registerApp":{"__symbolic":"function"},"replaceApps":{"__symbolic":"function","parameters":["from","to","props"],"value":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"rxjs","name":"defer","line":9,"character":9},"arguments":[{"__symbolic":"error","message":"Lambda not supported","line":9,"character":15,"module":"./lib/helpers/replace-apps"}]}},"Listener":{"__symbolic":"interface"},"Application":{"__symbolic":"class","arity":1,"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"string"},{"__symbolic":"error","message":"Could not resolve type","line":15,"character":59,"context":{"typeName":"T"},"module":"./lib/models/application"}]}],"onMessage":[{"__symbolic":"method"}],"emitMessage":[{"__symbolic":"method"}],"onRouteChange":[{"__symbolic":"method"}],"emitRouteChange":[{"__symbolic":"method"}],"onHook":[{"__symbolic":"method"}],"emitHook":[{"__symbolic":"method"}],"destroy":[{"__symbolic":"method"}],"bootstrap":[{"__symbolic":"method"}],"send":[{"__symbolic":"method"}],"navigate":[{"__symbolic":"method"}],"callListeners":[{"__symbolic":"method"}]}},"ApplicationConstructor":{"__symbolic":"interface"},"MicrozordEvent":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"string"}]}]}},"MicrozordMessageEvent":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"MicrozordEvent"},"members":{},"statics":{"isMessageEvent":{"__symbolic":"function","parameters":["event"],"value":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"reference","name":"event"},"right":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"event"},"member":"constructor"}},"right":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"select","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"event"},"member":"constructor"},"member":"name"},"right":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"MicrozordMessageEvent"},"member":"name"}}}}}},"MicrozordNavigationEvent":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"MicrozordEvent"},"members":{},"statics":{"isNavigationEvent":{"__symbolic":"function","parameters":["event"],"value":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"reference","name":"event"},"right":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"event"},"member":"constructor"}},"right":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"select","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"event"},"member":"constructor"},"member":"name"},"right":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"MicrozordNavigationEvent"},"member":"name"}}}}}},"LifecycleEventTypes":{"bootstrapped":"bootstrapped","destroyed":"destroyed"},"MicrozordLifecycleEvent":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"MicrozordEvent"},"members":{},"statics":{"isLifecycleEvent":{"__symbolic":"function","parameters":["event"],"value":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"reference","name":"event"},"right":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"event"},"member":"constructor"}},"right":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"select","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"event"},"member":"constructor"},"member":"name"},"right":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"MicrozordLifecycleEvent"},"member":"name"}}}},"bootstrapped":{"__symbolic":"function","parameters":[],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"MicrozordLifecycleEvent"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"LifecycleEventTypes"},"member":"bootstrapped"}]}},"isBootstrappedEvent":{"__symbolic":"function","parameters":["event"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"event"},"member":"type"},"right":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"LifecycleEventTypes"},"member":"bootstrapped"}}},"destroyed":{"__symbolic":"function","parameters":[],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"MicrozordLifecycleEvent"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"LifecycleEventTypes"},"member":"destroyed"}]}},"isDestroyedEvent":{"__symbolic":"function","parameters":["event"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"event"},"member":"type"},"right":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"LifecycleEventTypes"},"member":"destroyed"}}}}},"RegistrationOptions":{"__symbolic":"interface"},"ɵa":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"Map"}}},"origins":{"bootstrapApp":"./lib/helpers/bootstrap-app","getAppConstructor":"./lib/helpers/get-app-constructor","loadAppConstructor":"./lib/helpers/load-app-constructor","registerApp":"./lib/helpers/register-app","replaceApps":"./lib/helpers/replace-apps","Listener":"./lib/models/application","Application":"./lib/models/application","ApplicationConstructor":"./lib/models/application","MicrozordEvent":"./lib/models/events","MicrozordMessageEvent":"./lib/models/events","MicrozordNavigationEvent":"./lib/models/events","LifecycleEventTypes":"./lib/models/lifecycle","MicrozordLifecycleEvent":"./lib/models/lifecycle","RegistrationOptions":"./lib/models/registration-options","ɵa":"./lib/registry"},"importAs":"@microzord/core"}
1
+ {"__symbolic":"module","version":4,"metadata":{"bootstrapApp":{"__symbolic":"function","parameters":["appName","selector","props"],"value":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"loadApp"},"arguments":[{"__symbolic":"reference","name":"appName"}]},"member":"pipe"},"arguments":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"rxjs/operators","name":"map","line":13,"character":4},"arguments":[{"__symbolic":"error","message":"Lambda not supported","line":14,"character":6,"module":"./lib/helpers/bootstrap-app"}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"rxjs/operators","name":"switchMap","line":20,"character":4},"arguments":[{"__symbolic":"error","message":"Lambda not supported","line":20,"character":14,"module":"./lib/helpers/bootstrap-app"}]}]}},"getApp":{"__symbolic":"function","parameters":["appName"],"value":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"getEntity"},"arguments":[{"__symbolic":"reference","name":"appName"}]}},"getEntity":{"__symbolic":"function","parameters":["entityName"],"value":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"rxjs","name":"of","line":7,"character":9},"arguments":[{"__symbolic":"binop","operator":"||","left":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ɵb"},"member":"get"},"arguments":[{"__symbolic":"reference","name":"entityName"}]},"right":null}]}},"loadApp":{"__symbolic":"function","parameters":["appName"],"value":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"getApp"},"arguments":[{"__symbolic":"reference","name":"appName"}]},"member":"pipe"},"arguments":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"rxjs/operators","name":"switchMap","line":11,"character":4},"arguments":[{"__symbolic":"error","message":"Lambda not supported","line":11,"character":14,"module":"./lib/helpers/load-app"}]}]}},"loadEntity":{"__symbolic":"function","parameters":["entityName"],"value":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"call","expression":{"__symbolic":"reference","name":"getEntity"},"arguments":[{"__symbolic":"reference","name":"entityName"}]},"member":"pipe"},"arguments":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"rxjs/operators","name":"switchMap","line":11,"character":4},"arguments":[{"__symbolic":"error","message":"Lambda not supported","line":11,"character":14,"module":"./lib/helpers/load-entity"}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"rxjs/operators","name":"tap","line":37,"character":4},"arguments":[{"__symbolic":"error","message":"Lambda not supported","line":37,"character":8,"module":"./lib/helpers/load-entity"}]}]}},"registerApp":{"__symbolic":"function"},"registerEntity":{"__symbolic":"function"},"replaceApps":{"__symbolic":"function","parameters":["from","to","props"],"value":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"rxjs","name":"defer","line":9,"character":9},"arguments":[{"__symbolic":"error","message":"Lambda not supported","line":9,"character":15,"module":"./lib/helpers/replace-apps"}]}},"Listener":{"__symbolic":"interface"},"Application":{"__symbolic":"class","arity":1,"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"string"},{"__symbolic":"error","message":"Could not resolve type","line":16,"character":59,"context":{"typeName":"T"},"module":"./lib/models/application"}]}],"onMessage":[{"__symbolic":"method"}],"emitMessage":[{"__symbolic":"method"}],"onRouteChange":[{"__symbolic":"method"}],"emitRouteChange":[{"__symbolic":"method"}],"onHook":[{"__symbolic":"method"}],"emitHook":[{"__symbolic":"method"}],"destroy":[{"__symbolic":"method"}],"bootstrap":[{"__symbolic":"method"}],"send":[{"__symbolic":"method"}],"navigate":[{"__symbolic":"method"}],"callListeners":[{"__symbolic":"method"}]}},"ApplicationConstructor":{"__symbolic":"interface"},"EntityConstructor":{"__symbolic":"interface"},"MicrozordEvent":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"string"}]}]}},"MicrozordMessageEvent":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"MicrozordEvent"},"members":{},"statics":{"isMessageEvent":{"__symbolic":"function","parameters":["event"],"value":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"reference","name":"event"},"right":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"event"},"member":"constructor"}},"right":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"select","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"event"},"member":"constructor"},"member":"name"},"right":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"MicrozordMessageEvent"},"member":"name"}}}}}},"MicrozordNavigationEvent":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"MicrozordEvent"},"members":{},"statics":{"isNavigationEvent":{"__symbolic":"function","parameters":["event"],"value":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"reference","name":"event"},"right":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"event"},"member":"constructor"}},"right":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"select","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"event"},"member":"constructor"},"member":"name"},"right":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"MicrozordNavigationEvent"},"member":"name"}}}}}},"LifecycleEventTypes":{"bootstrapped":"bootstrapped","destroyed":"destroyed"},"MicrozordLifecycleEvent":{"__symbolic":"class","extends":{"__symbolic":"reference","name":"MicrozordEvent"},"members":{},"statics":{"isLifecycleEvent":{"__symbolic":"function","parameters":["event"],"value":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"binop","operator":"&&","left":{"__symbolic":"reference","name":"event"},"right":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"event"},"member":"constructor"}},"right":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"select","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"event"},"member":"constructor"},"member":"name"},"right":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"MicrozordLifecycleEvent"},"member":"name"}}}},"bootstrapped":{"__symbolic":"function","parameters":[],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"MicrozordLifecycleEvent"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"LifecycleEventTypes"},"member":"bootstrapped"}]}},"isBootstrappedEvent":{"__symbolic":"function","parameters":["event"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"event"},"member":"type"},"right":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"LifecycleEventTypes"},"member":"bootstrapped"}}},"destroyed":{"__symbolic":"function","parameters":[],"value":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"MicrozordLifecycleEvent"},"arguments":[{"__symbolic":"select","expression":{"__symbolic":"reference","name":"LifecycleEventTypes"},"member":"destroyed"}]}},"isDestroyedEvent":{"__symbolic":"function","parameters":["event"],"value":{"__symbolic":"binop","operator":"===","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"event"},"member":"type"},"right":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"LifecycleEventTypes"},"member":"destroyed"}}}}},"EntityRegistrationOptions":{"__symbolic":"interface"},"AppRegistrationOptions":{"__symbolic":"interface"},"ɵa":{"__symbolic":"class","arity":2,"members":{"getMap":[{"__symbolic":"method"}],"clear":[{"__symbolic":"method"}],"get":[{"__symbolic":"method"}],"set":[{"__symbolic":"method"}]}},"ɵb":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"ɵa"}}},"origins":{"bootstrapApp":"./lib/helpers/bootstrap-app","getApp":"./lib/helpers/get-app","getEntity":"./lib/helpers/get-entity","loadApp":"./lib/helpers/load-app","loadEntity":"./lib/helpers/load-entity","registerApp":"./lib/helpers/register-app","registerEntity":"./lib/helpers/register-entity","replaceApps":"./lib/helpers/replace-apps","Listener":"./lib/models/application","Application":"./lib/models/application","ApplicationConstructor":"./lib/models/application","EntityConstructor":"./lib/models/entity","MicrozordEvent":"./lib/models/events","MicrozordMessageEvent":"./lib/models/events","MicrozordNavigationEvent":"./lib/models/events","LifecycleEventTypes":"./lib/models/lifecycle","MicrozordLifecycleEvent":"./lib/models/lifecycle","EntityRegistrationOptions":"./lib/models/registration-options","AppRegistrationOptions":"./lib/models/registration-options","ɵa":"./lib/registry","ɵb":"./lib/registry"},"importAs":"@microzord/core"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@microzord/core",
3
- "version": "1.0.0-alpha.1",
3
+ "version": "1.0.0-alpha.2",
4
4
  "dependencies": {
5
5
  "tslib": "^2.1.0"
6
6
  },
@@ -0,0 +1,5 @@
1
+ import { Application, MicrozordMessageEvent } from '@microzord/core';
2
+ export declare class ApplicationMock extends Application<any> {
3
+ navigate(_url: string, _props?: unknown): Promise<void>;
4
+ send(_msg: string | MicrozordMessageEvent): Promise<void>;
5
+ }
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public_api';
@@ -0,0 +1 @@
1
+ {"__symbolic":"module","version":4,"metadata":{"ApplicationMock":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"@microzord/core","name":"Application","line":6,"character":37},"members":{"navigate":[{"__symbolic":"method"}],"send":[{"__symbolic":"method"}]}}},"origins":{"ApplicationMock":"./application.mock"},"importAs":"@microzord/core/testing"}
@@ -0,0 +1,11 @@
1
+ {
2
+ "main": "../bundles/microzord-core-testing.umd.js",
3
+ "module": "../fesm2015/microzord-core-testing.js",
4
+ "es2015": "../fesm2015/microzord-core-testing.js",
5
+ "esm2015": "../esm2015/testing/microzord-core-testing.js",
6
+ "fesm2015": "../fesm2015/microzord-core-testing.js",
7
+ "typings": "microzord-core-testing.d.ts",
8
+ "metadata": "microzord-core-testing.metadata.json",
9
+ "sideEffects": false,
10
+ "name": "@microzord/core/testing"
11
+ }
@@ -0,0 +1 @@
1
+ export * from './application.mock';
@@ -1,6 +0,0 @@
1
- import { of } from 'rxjs';
2
- import { loadedAppRegistry } from '../registry';
3
- export function getAppConstructor(appName) {
4
- return of(loadedAppRegistry.get(appName) || null);
5
- }
6
- //# sourceMappingURL=get-app-constructor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-app-constructor.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/helpers/get-app-constructor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,EAAE,EAAC,MAAM,MAAM,CAAC;AAEpC,OAAO,EAAC,iBAAiB,EAAC,MAAM,aAAa,CAAC;AAE9C,MAAM,UAAU,iBAAiB,CAC/B,OAAe;IAEf,OAAO,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;AACpD,CAAC","sourcesContent":["import {Observable, of} from 'rxjs';\nimport {ApplicationConstructor} from '../models/application';\nimport {loadedAppRegistry} from '../registry';\n\nexport function getAppConstructor<T extends Record<string, any> = Record<string, any>>(\n appName: string,\n): Observable<ApplicationConstructor<T> | null> {\n return of(loadedAppRegistry.get(appName) || null);\n}\n"]}
@@ -1 +0,0 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"getAppConstructor":{"__symbolic":"function","parameters":["appName"],"value":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"rxjs","name":"of","line":7,"character":9},"arguments":[{"__symbolic":"binop","operator":"||","left":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"../registry","name":"loadedAppRegistry","line":7,"character":12},"member":"get"},"arguments":[{"__symbolic":"reference","name":"appName"}]},"right":null}]}}}}]
@@ -1,24 +0,0 @@
1
- import { defer, isObservable, of } from 'rxjs';
2
- import { switchMap, tap } from 'rxjs/operators';
3
- import { appOptionsRegistry, loadedAppRegistry } from '../registry';
4
- import { getAppConstructor } from './get-app-constructor';
5
- export function loadAppConstructor(appName) {
6
- return getAppConstructor(appName).pipe(switchMap(appConstructor => appConstructor
7
- ? of(appConstructor)
8
- : defer(() => {
9
- const appOptions = appOptionsRegistry.get(appName);
10
- if (!appOptions) {
11
- throw `Microzord appliction "${appName}" has not been registered. Check the spelling or register an app.`;
12
- }
13
- if (!appOptions.loadApp) {
14
- throw `Microzord appliction "${appName}" is registered but it has no "loadApp" function. Please, provide it`;
15
- }
16
- const result = appOptions.loadApp(appOptions.props);
17
- return result &&
18
- (isObservable(result) ||
19
- ('then' in result && typeof result['then'] === 'function'))
20
- ? defer(() => result)
21
- : of(result);
22
- })), tap(applicationConstructor => loadedAppRegistry.set(appName, applicationConstructor)));
23
- }
24
- //# sourceMappingURL=load-app-constructor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"load-app-constructor.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/helpers/load-app-constructor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAE,YAAY,EAAc,EAAE,EAAC,MAAM,MAAM,CAAC;AACzD,OAAO,EAAa,SAAS,EAAE,GAAG,EAAC,MAAM,gBAAgB,CAAC;AAE1D,OAAO,EAAC,kBAAkB,EAAE,iBAAiB,EAAC,MAAM,aAAa,CAAC;AAClE,OAAO,EAAC,iBAAiB,EAAC,MAAM,uBAAuB,CAAC;AAExD,MAAM,UAAU,kBAAkB,CAChC,OAAe;IAEf,OAAO,iBAAiB,CAAI,OAAO,CAAC,CAAC,IAAI,CACvC,SAAS,CAAC,cAAc,CAAC,EAAE,CACzB,cAAc;QACZ,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC;QACpB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACT,MAAM,UAAU,GAAG,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAEnD,IAAI,CAAC,UAAU,EAAE;gBACf,MAAM,yBAAyB,OAAO,mEAAmE,CAAC;aAC3G;YAED,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;gBACvB,MAAM,yBAAyB,OAAO,sEAAsE,CAAC;aAC9G;YAED,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAEpD,OAAO,MAAM;gBACX,CAAC,YAAY,CAAC,MAAM,CAAC;oBACnB,CAAC,MAAM,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,UAAU,CAAC,CAAC;gBAC7D,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;gBACrB,CAAC,CAAC,EAAE,CAAC,MAAmC,CAAC,CAAC;QAC9C,CAAC,CAAC,CACP,EACD,GAAG,CAAC,sBAAsB,CAAC,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC,CACtF,CAAC;AACJ,CAAC","sourcesContent":["import {defer, isObservable, Observable, of} from 'rxjs';\nimport {catchError, switchMap, tap} from 'rxjs/operators';\nimport {ApplicationConstructor} from '../models/application';\nimport {appOptionsRegistry, loadedAppRegistry} from '../registry';\nimport {getAppConstructor} from './get-app-constructor';\n\nexport function loadAppConstructor<T extends Record<string, any> = Record<string, any>>(\n appName: string,\n): Observable<ApplicationConstructor<T>> {\n return getAppConstructor<T>(appName).pipe(\n switchMap(appConstructor =>\n appConstructor\n ? of(appConstructor)\n : defer(() => {\n const appOptions = appOptionsRegistry.get(appName);\n\n if (!appOptions) {\n throw `Microzord appliction \"${appName}\" has not been registered. Check the spelling or register an app.`;\n }\n\n if (!appOptions.loadApp) {\n throw `Microzord appliction \"${appName}\" is registered but it has no \"loadApp\" function. Please, provide it`;\n }\n\n const result = appOptions.loadApp(appOptions.props);\n\n return result &&\n (isObservable(result) ||\n ('then' in result && typeof result['then'] === 'function'))\n ? defer(() => result)\n : of(result as ApplicationConstructor<T>);\n }),\n ),\n tap(applicationConstructor => loadedAppRegistry.set(appName, applicationConstructor)),\n );\n}\n"]}
@@ -1 +0,0 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"loadAppConstructor":{"__symbolic":"function","parameters":["appName"],"value":{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"call","expression":{"__symbolic":"reference","module":"./get-app-constructor","name":"getAppConstructor","line":9,"character":9},"arguments":[{"__symbolic":"reference","name":"appName"}]},"member":"pipe"},"arguments":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"rxjs/operators","name":"switchMap","line":10,"character":4},"arguments":[{"__symbolic":"error","message":"Lambda not supported","line":10,"character":14}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"rxjs/operators","name":"tap","line":33,"character":4},"arguments":[{"__symbolic":"error","message":"Lambda not supported","line":33,"character":8}]}]}}}}]
@@ -1,3 +0,0 @@
1
- import { Observable } from 'rxjs';
2
- import { ApplicationConstructor } from '../models/application';
3
- export declare function getAppConstructor<T extends Record<string, any> = Record<string, any>>(appName: string): Observable<ApplicationConstructor<T> | null>;
@@ -1,3 +0,0 @@
1
- import { Observable } from 'rxjs';
2
- import { ApplicationConstructor } from '../models/application';
3
- export declare function loadAppConstructor<T extends Record<string, any> = Record<string, any>>(appName: string): Observable<ApplicationConstructor<T>>;