@microzord/core 1.0.0-alpha.1 → 1.0.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 (93) hide show
  1. package/README.md +3 -4
  2. package/bundles/microzord-core-testing.umd.js +494 -0
  3. package/bundles/microzord-core-testing.umd.js.map +1 -0
  4. package/bundles/microzord-core.umd.js +310 -105
  5. package/bundles/microzord-core.umd.js.map +1 -1
  6. package/esm2015/index.js +8 -2
  7. package/esm2015/index.js.map +1 -1
  8. package/esm2015/index.metadata.json +1 -1
  9. package/esm2015/lib/helpers/bootstrap-app.js +4 -6
  10. package/esm2015/lib/helpers/bootstrap-app.js.map +1 -1
  11. package/esm2015/lib/helpers/bootstrap-app.metadata.json +1 -1
  12. package/esm2015/lib/helpers/construct-and-bootstrap-app.js +7 -0
  13. package/esm2015/lib/helpers/construct-and-bootstrap-app.js.map +1 -0
  14. package/esm2015/lib/helpers/construct-and-bootstrap-app.metadata.json +1 -0
  15. package/esm2015/lib/helpers/construct-app.js +10 -0
  16. package/esm2015/lib/helpers/construct-app.js.map +1 -0
  17. package/esm2015/lib/helpers/construct-app.metadata.json +1 -0
  18. package/esm2015/lib/helpers/get-app.js +5 -0
  19. package/esm2015/lib/helpers/get-app.js.map +1 -0
  20. package/esm2015/lib/helpers/get-app.metadata.json +1 -0
  21. package/esm2015/lib/helpers/get-entity.js +6 -0
  22. package/esm2015/lib/helpers/get-entity.js.map +1 -0
  23. package/esm2015/lib/helpers/get-entity.metadata.json +1 -0
  24. package/esm2015/lib/helpers/load-app.js +11 -0
  25. package/esm2015/lib/helpers/load-app.js.map +1 -0
  26. package/esm2015/lib/helpers/load-app.metadata.json +1 -0
  27. package/esm2015/lib/helpers/load-entity.js +24 -0
  28. package/esm2015/lib/helpers/load-entity.js.map +1 -0
  29. package/esm2015/lib/helpers/load-entity.metadata.json +1 -0
  30. package/esm2015/lib/helpers/register-app.js +2 -2
  31. package/esm2015/lib/helpers/register-app.js.map +1 -1
  32. package/esm2015/lib/helpers/register-entity.js +5 -0
  33. package/esm2015/lib/helpers/register-entity.js.map +1 -0
  34. package/esm2015/lib/helpers/register-entity.metadata.json +1 -0
  35. package/esm2015/lib/helpers/replace-apps.js +2 -2
  36. package/esm2015/lib/helpers/replace-apps.js.map +1 -1
  37. package/esm2015/lib/models/application.js +2 -0
  38. package/esm2015/lib/models/application.js.map +1 -1
  39. package/esm2015/lib/models/application.metadata.json +1 -1
  40. package/esm2015/lib/models/entity.js +2 -0
  41. package/esm2015/lib/models/entity.js.map +1 -0
  42. package/esm2015/lib/models/entity.metadata.json +1 -0
  43. package/esm2015/lib/models/registration-options.js.map +1 -1
  44. package/esm2015/lib/models/registration-options.metadata.json +1 -1
  45. package/esm2015/lib/registry.js +19 -2
  46. package/esm2015/lib/registry.js.map +1 -1
  47. package/esm2015/lib/registry.metadata.json +1 -1
  48. package/esm2015/microzord-core.js +1 -1
  49. package/esm2015/microzord-core.js.map +1 -1
  50. package/esm2015/microzord-core.metadata.json +1 -1
  51. package/esm2015/testing/application.mock.js +10 -0
  52. package/esm2015/testing/application.mock.js.map +1 -0
  53. package/esm2015/testing/application.mock.metadata.json +1 -0
  54. package/esm2015/testing/microzord-core-testing.js +5 -0
  55. package/esm2015/testing/microzord-core-testing.js.map +1 -0
  56. package/esm2015/testing/microzord-core-testing.metadata.json +1 -0
  57. package/esm2015/testing/public_api.js +2 -0
  58. package/esm2015/testing/public_api.js.map +1 -0
  59. package/esm2015/testing/public_api.metadata.json +1 -0
  60. package/fesm2015/microzord-core-testing.js +17 -0
  61. package/fesm2015/microzord-core-testing.js.map +1 -0
  62. package/fesm2015/microzord-core.js +109 -66
  63. package/fesm2015/microzord-core.js.map +1 -1
  64. package/index.d.ts +8 -2
  65. package/lib/helpers/bootstrap-app.d.ts +1 -1
  66. package/lib/helpers/construct-and-bootstrap-app.d.ts +3 -0
  67. package/lib/helpers/construct-app.d.ts +3 -0
  68. package/lib/helpers/get-app.d.ts +3 -0
  69. package/lib/helpers/get-entity.d.ts +3 -0
  70. package/lib/helpers/load-app.d.ts +3 -0
  71. package/lib/helpers/load-entity.d.ts +3 -0
  72. package/lib/helpers/register-app.d.ts +2 -2
  73. package/lib/helpers/register-entity.d.ts +2 -0
  74. package/lib/models/application.d.ts +3 -4
  75. package/lib/models/entity.d.ts +3 -0
  76. package/lib/models/registration-options.d.ts +4 -2
  77. package/lib/registry.d.ts +11 -4
  78. package/microzord-core.d.ts +1 -1
  79. package/microzord-core.metadata.json +1 -1
  80. package/package.json +4 -4
  81. package/testing/application.mock.d.ts +5 -0
  82. package/testing/microzord-core-testing.d.ts +4 -0
  83. package/testing/microzord-core-testing.metadata.json +1 -0
  84. package/testing/package.json +11 -0
  85. package/testing/public_api.d.ts +1 -0
  86. package/esm2015/lib/helpers/get-app-constructor.js +0 -6
  87. package/esm2015/lib/helpers/get-app-constructor.js.map +0 -1
  88. package/esm2015/lib/helpers/get-app-constructor.metadata.json +0 -1
  89. package/esm2015/lib/helpers/load-app-constructor.js +0 -24
  90. package/esm2015/lib/helpers/load-app-constructor.js.map +0 -1
  91. package/esm2015/lib/helpers/load-app-constructor.metadata.json +0 -1
  92. package/lib/helpers/get-app-constructor.d.ts +0 -3
  93. package/lib/helpers/load-app-constructor.d.ts +0 -3
@@ -1 +1 @@
1
- {"version":3,"file":"registration-options.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/models/registration-options.ts"],"names":[],"mappings":"","sourcesContent":["import {Observable} from 'rxjs';\nimport {ApplicationConstructor} from './application';\n\nexport interface RegistrationOptions<\n T extends Record<string, any> = Record<string, any>,\n> {\n name: string;\n props?: T;\n loadApp: (\n props: T,\n ) =>\n | Observable<ApplicationConstructor<T>>\n | PromiseLike<ApplicationConstructor<T>>\n | ApplicationConstructor<T>;\n}\n"]}
1
+ {"version":3,"file":"registration-options.js","sourceRoot":"","sources":["../../../../../../libs/core/src/lib/models/registration-options.ts"],"names":[],"mappings":"","sourcesContent":["import {Observable} from 'rxjs';\nimport {ApplicationConstructor} from './application';\n\nexport interface EntityRegistrationOptions<T> {\n name: string;\n load: () => Observable<T> | PromiseLike<T> | T;\n}\n\nexport interface AppRegistrationOptions<\n T extends Record<string, any> = Record<string, any>,\n> extends EntityRegistrationOptions<ApplicationConstructor<T>> {\n props?: T;\n}\n"]}
@@ -1 +1 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"RegistrationOptions":{"__symbolic":"interface"}}}]
1
+ [{"__symbolic":"module","version":4,"metadata":{"EntityRegistrationOptions":{"__symbolic":"interface"},"AppRegistrationOptions":{"__symbolic":"interface"}}}]
@@ -1,5 +1,22 @@
1
+ export class MicrozordRegistry {
2
+ constructor() {
3
+ this._map = new Map();
4
+ }
5
+ getMap() {
6
+ return this._map;
7
+ }
8
+ clear() {
9
+ this._map.clear();
10
+ }
11
+ get(key) {
12
+ return this._map.get(key);
13
+ }
14
+ set(key, value) {
15
+ this._map.set(key, value);
16
+ }
17
+ }
1
18
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
2
- export const appOptionsRegistry = new Map();
19
+ export const entityOptionsRegistry = new MicrozordRegistry();
3
20
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
4
- export const loadedAppRegistry = new Map();
21
+ export const loadedEntityRegistry = new MicrozordRegistry();
5
22
  //# sourceMappingURL=registry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../../../libs/core/src/lib/registry.ts"],"names":[],"mappings":"AAGA,8DAA8D;AAC9D,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAoC,CAAC;AAE9E,8DAA8D;AAC9D,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAuC,CAAC","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"]}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../../../libs/core/src/lib/registry.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,iBAAiB;IAA9B;QACU,SAAI,GAAG,IAAI,GAAG,EAAQ,CAAC;IAiBjC,CAAC;IAfC,MAAM;QACJ,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IAED,GAAG,CAAkB,GAAM;QACzB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAM,CAAC;IACjC,CAAC;IAED,GAAG,CAAkB,GAAM,EAAE,KAAQ;QACnC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC5B,CAAC;CACF;AAED,8DAA8D;AAC9D,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,iBAAiB,EAGvD,CAAC;AAEJ,8DAA8D;AAC9D,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,iBAAiB,EAGtD,CAAC","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"]}
@@ -1 +1 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"appOptionsRegistry":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"Map"}},"loadedAppRegistry":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"Map"}}}}]
1
+ [{"__symbolic":"module","version":4,"metadata":{"MicrozordRegistry":{"__symbolic":"class","arity":2,"members":{"getMap":[{"__symbolic":"method"}],"clear":[{"__symbolic":"method"}],"get":[{"__symbolic":"method"}],"set":[{"__symbolic":"method"}]}},"entityOptionsRegistry":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"MicrozordRegistry"}},"loadedEntityRegistry":{"__symbolic":"new","expression":{"__symbolic":"reference","name":"MicrozordRegistry"}}}}]
@@ -2,5 +2,5 @@
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';
6
6
  //# sourceMappingURL=microzord-core.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"microzord-core.js","sourceRoot":"","sources":["../../../../libs/core/src/microzord-core.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,SAAS,CAAC;AAExB,OAAO,EAAC,iBAAiB,IAAI,EAAE,EAAC,MAAM,gBAAgB,CAAC","sourcesContent":["/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n\nexport {loadedAppRegistry as ɵa} from './lib/registry';"]}
1
+ {"version":3,"file":"microzord-core.js","sourceRoot":"","sources":["../../../../libs/core/src/microzord-core.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,SAAS,CAAC;AAExB,OAAO,EAAC,iBAAiB,IAAI,EAAE,EAAC,oBAAoB,IAAI,EAAE,EAAC,MAAM,gBAAgB,CAAC","sourcesContent":["/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n\nexport {MicrozordRegistry as ɵa,loadedEntityRegistry as ɵb} from './lib/registry';"]}
@@ -1 +1 @@
1
- [{"__symbolic":"module","version":4,"metadata":{},"exports":[{"from":"./index"},{"from":"./lib/registry","export":[{"name":"loadedAppRegistry","as":"ɵa"}]}]}]
1
+ [{"__symbolic":"module","version":4,"metadata":{},"exports":[{"from":"./index"},{"from":"./lib/registry","export":[{"name":"MicrozordRegistry","as":"ɵa"},{"name":"loadedEntityRegistry","as":"ɵb"}]}]}]
@@ -0,0 +1,10 @@
1
+ import { Application, } from '@microzord/core';
2
+ export class ApplicationMock extends Application {
3
+ navigate(_url, _props) {
4
+ return Promise.resolve(undefined);
5
+ }
6
+ send(_msg) {
7
+ return Promise.resolve(undefined);
8
+ }
9
+ }
10
+ //# sourceMappingURL=application.mock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"application.mock.js","sourceRoot":"","sources":["../../../../../libs/core/testing/src/application.mock.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,GAGZ,MAAM,iBAAiB,CAAC;AAEzB,MAAM,OAAO,eAAgB,SAAQ,WAAgB;IACnD,QAAQ,CAAC,IAAY,EAAE,MAAgB;QACrC,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,CAAC,IAAoC;QACvC,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;CACF","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"]}
@@ -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"}]}}}}]
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public_api';
5
+ //# sourceMappingURL=microzord-core-testing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"microzord-core-testing.js","sourceRoot":"","sources":["../../../../../libs/core/testing/src/microzord-core-testing.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,cAAc,CAAC","sourcesContent":["/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"]}
@@ -0,0 +1 @@
1
+ [{"__symbolic":"module","version":4,"metadata":{},"exports":[{"from":"./public_api"}]}]
@@ -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":";;AAMM,MAAO,eAAgB,SAAQ,WAAgB,CAAA;IACnD,QAAQ,CAAC,IAAY,EAAE,MAAgB,EAAA;AACrC,QAAA,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;KACnC;AAED,IAAA,IAAI,CAAC,IAAoC,EAAA;AACvC,QAAA,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;KACnC;AACF;;ACdD;;AAEG;;;;"}
@@ -1,51 +1,139 @@
1
- import { of, defer, isObservable } from 'rxjs';
2
1
  import { switchMap, tap, map, mapTo } from 'rxjs/operators';
2
+ import { of, defer, isObservable } from 'rxjs';
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();
26
+
27
+ function getEntity(entityName) {
28
+ return of(loadedEntityRegistry.get(entityName) || null);
29
+ }
9
30
 
10
- function getAppConstructor(appName) {
11
- return of(loadedAppRegistry.get(appName) || null);
31
+ function getApp(appName) {
32
+ return getEntity(appName);
12
33
  }
13
34
 
14
- function loadAppConstructor(appName) {
15
- return getAppConstructor(appName).pipe(switchMap(appConstructor => appConstructor
16
- ? of(appConstructor)
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)));
59
+ }
60
+
61
+ function constructApp(appName) {
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
+ }));
32
66
  }
33
67
 
34
- 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))));
68
+ function bootstrapApp(app, selector, props) {
69
+ return of(app).pipe(switchMap(app => defer(() => app.bootstrap(selector, props)).pipe(mapTo(app))));
70
+ }
71
+
72
+ function constructAndBootstrapApp(appName, selector, props) {
73
+ return constructApp(appName).pipe(switchMap(app => bootstrapApp(app, selector, props)));
74
+ }
75
+
76
+ function registerEntity(options) {
77
+ entityOptionsRegistry.set(options.name, options);
36
78
  }
37
79
 
38
80
  function registerApp(options) {
39
- appOptionsRegistry.set(options.name, options);
81
+ registerEntity(options);
40
82
  }
41
83
 
42
84
  function replaceApps(from, to, props) {
43
85
  return defer(() => {
44
86
  from.destroy();
45
- return bootstrapApp(to, from.container, props);
87
+ return constructAndBootstrapApp(to, from.container, props);
46
88
  });
47
89
  }
48
90
 
91
+ class MicrozordEvent {
92
+ constructor(type) {
93
+ this.type = type;
94
+ this.target = null;
95
+ }
96
+ }
97
+ // todo: подумать над сообщениями
98
+ class MicrozordMessageEvent extends MicrozordEvent {
99
+ static isMessageEvent(event) {
100
+ return (event && event.constructor && event.constructor.name === MicrozordMessageEvent.name);
101
+ }
102
+ }
103
+ // todo: подумать над ивентами роутинга
104
+ class MicrozordNavigationEvent extends MicrozordEvent {
105
+ static isNavigationEvent(event) {
106
+ return (event &&
107
+ event.constructor &&
108
+ event.constructor.name === MicrozordNavigationEvent.name);
109
+ }
110
+ }
111
+
112
+ var LifecycleEventTypes;
113
+ (function (LifecycleEventTypes) {
114
+ LifecycleEventTypes["bootstrapped"] = "bootstrapped";
115
+ LifecycleEventTypes["destroyed"] = "destroyed";
116
+ })(LifecycleEventTypes || (LifecycleEventTypes = {}));
117
+ class MicrozordLifecycleEvent extends MicrozordEvent {
118
+ static isLifecycleEvent(event) {
119
+ return (event &&
120
+ event.constructor &&
121
+ event.constructor.name === MicrozordLifecycleEvent.name);
122
+ }
123
+ static bootstrapped() {
124
+ return new MicrozordLifecycleEvent(LifecycleEventTypes.bootstrapped);
125
+ }
126
+ static isBootstrappedEvent(event) {
127
+ return event.type === LifecycleEventTypes.bootstrapped;
128
+ }
129
+ static destroyed() {
130
+ return new MicrozordLifecycleEvent(LifecycleEventTypes.destroyed);
131
+ }
132
+ static isDestroyedEvent(event) {
133
+ return event.type === LifecycleEventTypes.destroyed;
134
+ }
135
+ }
136
+
49
137
  class Application {
50
138
  // todo: заспекать типы props
51
139
  constructor(name, props) {
@@ -86,6 +174,7 @@ class Application {
86
174
  this.callListeners(this.hook, event);
87
175
  }
88
176
  destroy() {
177
+ this.emitHook(MicrozordLifecycleEvent.destroyed());
89
178
  this.hook.clear(); // todo: в этот поток перед комплитом нужен евент дестроя
90
179
  this.message.clear();
91
180
  this.navigationEvent.clear();
@@ -106,55 +195,9 @@ class Application {
106
195
  }
107
196
  }
108
197
 
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
198
  /**
156
199
  * Generated bundle index. Do not edit.
157
200
  */
158
201
 
159
- export { Application, LifecycleEventTypes, MicrozordEvent, MicrozordLifecycleEvent, MicrozordMessageEvent, MicrozordNavigationEvent, bootstrapApp, getAppConstructor, loadAppConstructor, registerApp, replaceApps, loadedAppRegistry as ɵa };
202
+ export { Application, LifecycleEventTypes, MicrozordEvent, MicrozordLifecycleEvent, MicrozordMessageEvent, MicrozordNavigationEvent, bootstrapApp, constructAndBootstrapApp, constructApp, getApp, getEntity, loadApp, loadEntity, registerApp, registerEntity, replaceApps, MicrozordRegistry as ɵa, loadedEntityRegistry as ɵb };
160
203
  //# 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/construct-app.ts","../../../../libs/core/src/lib/helpers/bootstrap-app.ts","../../../../libs/core/src/lib/helpers/construct-and-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 {Observable} from 'rxjs';\nimport {map} 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 constructApp<T extends Record<string, unknown>>(\n appName: string,\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 );\n}\n","import {defer, Observable, of} from 'rxjs';\nimport {mapTo, switchMap} from 'rxjs/operators';\nimport {Application} from '../models/application';\n\nexport function bootstrapApp<T extends Record<string, unknown>>(\n app: Application<T>,\n selector: string | Element,\n props?: T,\n): Observable<Application<T>> {\n return of(app).pipe(\n switchMap(app => defer(() => app.bootstrap(selector, props)).pipe(mapTo(app))),\n );\n}\n","import {Observable} from 'rxjs';\nimport {switchMap} from 'rxjs/operators';\nimport {Application} from '../models/application';\nimport {constructApp} from './construct-app';\nimport {bootstrapApp} from './bootstrap-app';\n\nexport function constructAndBootstrapApp<\n T extends Record<string, unknown> = Record<string, unknown>,\n>(appName: string, selector: string | Element, props?: T): Observable<Application<T>> {\n return constructApp<T>(appName).pipe(\n switchMap(app => bootstrapApp(app, selector, props)),\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 {constructAndBootstrapApp} from './construct-and-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 constructAndBootstrapApp(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<\n T extends Record<string, unknown> = Record<string, unknown>,\n> {\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<\n T extends Record<string, unknown> = Record<string, unknown>,\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,15 @@
1
+ export * from './lib/helpers/construct-and-bootstrap-app';
1
2
  export * from './lib/helpers/bootstrap-app';
2
- export * from './lib/helpers/get-app-constructor';
3
- export * from './lib/helpers/load-app-constructor';
3
+ export * from './lib/helpers/construct-app';
4
+ export * from './lib/helpers/get-app';
5
+ export * from './lib/helpers/get-entity';
6
+ export * from './lib/helpers/load-app';
7
+ export * from './lib/helpers/load-entity';
4
8
  export * from './lib/helpers/register-app';
9
+ export * from './lib/helpers/register-entity';
5
10
  export * from './lib/helpers/replace-apps';
6
11
  export * from './lib/models/application';
12
+ export * from './lib/models/entity';
7
13
  export * from './lib/models/events';
8
14
  export * from './lib/models/lifecycle';
9
15
  export * from './lib/models/registration-options';
@@ -1,3 +1,3 @@
1
1
  import { Observable } from 'rxjs';
2
2
  import { Application } from '../models/application';
3
- export declare function bootstrapApp<T extends Record<string, any> = Record<string, any>>(appName: string, selector: string | Element, props?: T): Observable<Application<T>>;
3
+ export declare function bootstrapApp<T extends Record<string, unknown>>(app: Application<T>, selector: string | Element, props?: T): Observable<Application<T>>;
@@ -0,0 +1,3 @@
1
+ import { Observable } from 'rxjs';
2
+ import { Application } from '../models/application';
3
+ export declare function constructAndBootstrapApp<T extends Record<string, unknown> = Record<string, unknown>>(appName: string, selector: string | Element, props?: T): Observable<Application<T>>;
@@ -0,0 +1,3 @@
1
+ import { Observable } from 'rxjs';
2
+ import { Application } from '../models/application';
3
+ export declare function constructApp<T extends Record<string, unknown>>(appName: string): Observable<Application<T>>;
@@ -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,7 +1,8 @@
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
- export declare abstract class Application<T extends Record<string, any> = Record<string, any>> {
5
+ export declare abstract class Application<T extends Record<string, unknown> = Record<string, unknown>> {
5
6
  readonly name: string;
6
7
  props?: T | undefined;
7
8
  isBootstrapped: boolean;
@@ -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, unknown> = Record<string, unknown>> = 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';