@owlmeans/context 0.1.18-rc.5 → 0.1.18-rc.7

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 (44) hide show
  1. package/README.md +25 -4
  2. package/agent-meta/manifest.json +2 -2
  3. package/agent-meta/skills/context/SKILL.md +8 -5
  4. package/build/config.d.ts.map +1 -1
  5. package/build/config.js +0 -2
  6. package/build/config.js.map +1 -1
  7. package/build/consts.d.ts +1 -9
  8. package/build/consts.d.ts.map +1 -1
  9. package/build/consts.js +0 -9
  10. package/build/consts.js.map +1 -1
  11. package/build/context.d.ts.map +1 -1
  12. package/build/context.js +24 -108
  13. package/build/context.js.map +1 -1
  14. package/build/helper.d.ts +0 -1
  15. package/build/helper.d.ts.map +1 -1
  16. package/build/helper.js +4 -13
  17. package/build/helper.js.map +1 -1
  18. package/build/service.d.ts.map +1 -1
  19. package/build/types.d.ts +7 -23
  20. package/build/types.d.ts.map +1 -1
  21. package/build/utils/context.d.ts +2 -7
  22. package/build/utils/context.d.ts.map +1 -1
  23. package/build/utils/context.js +0 -11
  24. package/build/utils/context.js.map +1 -1
  25. package/build/utils/index.d.ts +0 -1
  26. package/build/utils/index.d.ts.map +1 -1
  27. package/build/utils/index.js +0 -1
  28. package/build/utils/index.js.map +1 -1
  29. package/package.json +1 -1
  30. package/src/config.ts +1 -2
  31. package/src/consts.ts +1 -10
  32. package/src/context.ts +28 -133
  33. package/src/helper.ts +4 -18
  34. package/src/types.ts +8 -27
  35. package/src/utils/context.ts +2 -20
  36. package/src/utils/index.ts +0 -1
  37. package/tests/context.ts +1 -2
  38. package/tests/service.spec.ts +1 -1
  39. package/build/.gitkeep +0 -0
  40. package/build/utils/layer.d.ts +0 -6
  41. package/build/utils/layer.d.ts.map +0 -1
  42. package/build/utils/layer.js +0 -12
  43. package/build/utils/layer.js.map +0 -1
  44. package/src/utils/layer.ts +0 -17
package/README.md CHANGED
@@ -4,10 +4,10 @@ Lightweight dependency injection and service lifecycle management for fullstack
4
4
 
5
5
  ## Overview
6
6
 
7
- - Context holds services, modules, and resources; passed top-down through the app
7
+ - Context holds services, entrypoints, and resources in three flat registries keyed by alias; passed top-down through the app
8
8
  - Services are registered by alias and retrieved via `context.service(alias)`
9
- - Supports layered contexts (System → Global → Service → Entity → User) for multi-tenant apps
10
- - Route constants (`ROOT`, `HOME`, `GUEST`, `BASE`) are used by the module system across all packages
9
+ - One context is built per process by a single factory and extended with idempotent `append*` mixins
10
+ - Route constants (`ROOT`, `HOME`, `GUEST`, `BASE`) are used by the entrypoint system across all packages
11
11
 
12
12
  ## Installation
13
13
 
@@ -66,10 +66,31 @@ Asserts that a context is defined; throws if not.
66
66
 
67
67
  Creates a context from a config object. Rarely used directly — prefer the higher-level `makeContext` from `@owlmeans/server-app` or `@owlmeans/client-context`.
68
68
 
69
+ A factory calls the factory of the layer below it, applies its own idempotent `append*` mixins, and returns that same context:
70
+
71
+ ```typescript
72
+ export const makeContext = <C extends Config, T extends Context<C>>(cfg: C): T => {
73
+ const context = makeServerContext<C, T>(cfg)
74
+ appendMyService<C, T>(context)
75
+ return context
76
+ }
77
+ ```
78
+
79
+ Nothing is stored for re-creation — a service, a resource and an entrypoint each bind to exactly one context.
80
+
81
+ ### Registries
82
+
83
+ Three flat maps keyed by alias. Registering the same alias twice replaces the earlier entry.
84
+
85
+ ```typescript
86
+ context.registerService(service) // context.service(alias), context.hasService(alias)
87
+ context.registerResource(resource) // context.resource(alias), context.hasResource(alias)
88
+ context.registerEntrypoints(entrypoints) // context.entrypoint(alias), context.entrypoints(), context.hasEntrypoint(alias)
89
+ ```
90
+
69
91
  ### Enums
70
92
 
71
93
  ```typescript
72
- enum Layer { System, Global, Service, Entity, User }
73
94
  enum AppType { Backend, Frontend }
74
95
  enum ContextStage { Configuration, Loading, Ready }
75
96
  ```
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": 2,
3
3
  "package": "@owlmeans/context",
4
- "version": "0.1.18-rc.0",
5
- "generatedAt": "2026-08-16T22:20:50.516Z",
4
+ "version": "0.1.18-rc.7",
5
+ "generatedAt": "2026-09-01T16:28:56.997Z",
6
6
  "canonicalRepo": "https://github.com/owlmeans/common",
7
7
  "entries": [
8
8
  {
@@ -8,7 +8,7 @@ user-invocable: false
8
8
  # @owlmeans/context
9
9
 
10
10
  **Layer:** Core
11
- **Install:** `"@owlmeans/context": "^0.1.18-rc.0"` in `dependencies`
11
+ **Install:** `"@owlmeans/context": "^0.1.18-rc.7"` in `dependencies`
12
12
 
13
13
  ## Key Exports
14
14
 
@@ -24,15 +24,18 @@ user-invocable: false
24
24
 
25
25
  ## Usage
26
26
 
27
- Always extend a layer-specific factory (`@owlmeans/server-context`, `@owlmeans/web-panel`, etc.) rather than calling the basic factory directly. Always reassign `context.makeContext` so child contexts inherit the typed factory:
27
+ A context is created ONCE per process by ONE factory. Extend a layer-specific factory
28
+ (`@owlmeans/server-context`, `@owlmeans/web-panel`, etc.) rather than calling the basic factory
29
+ directly: your factory calls the factory below it, applies its own idempotent `append*(context)`
30
+ mixins and service registrations, and returns that same context. Nothing is stored for re-creation —
31
+ a service, a resource and an entrypoint each bind to exactly one context.
28
32
 
29
33
  ```typescript
30
- import { makeBackendContext } from '@owlmeans/server-context'
34
+ import { makeServerContext } from '@owlmeans/server-context'
31
35
 
32
36
  export const makeContext = <C extends Config, T extends Context<C>>(cfg: C): T => {
33
- const context = makeBackendContext<C, T>(cfg)
37
+ const context = makeServerContext<C, T>(cfg)
34
38
  context.registerService(makeMyService())
35
- context.makeContext = makeContext as typeof context.makeContext
36
39
  return context
37
40
  }
38
41
  ```
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAA;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAE7C,eAAO,MAAM,eAAe,GAAI,CAAC,SAAS,WAAW,QAAQ,OAAO,WAAW,MAAM,QAAQ,OAAO,CAAC,CAAC,CAAC,KAAG,CAazG,CAAA"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAE7C,eAAO,MAAM,eAAe,GAAI,CAAC,SAAS,WAAW,EAAE,MAAM,OAAO,EAAE,SAAS,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,KAAG,CAYzG,CAAA"}
package/build/config.js CHANGED
@@ -1,9 +1,7 @@
1
- import { AppType, Layer } from './consts.js';
2
1
  export const makeBasicConfig = (type, service, cfg) => {
3
2
  const config = {
4
3
  ready: false,
5
4
  service,
6
- layer: type === AppType.Frontend ? Layer.Service : Layer.System,
7
5
  type,
8
6
  debug: {},
9
7
  services: {},
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAG5C,MAAM,CAAC,MAAM,eAAe,GAAG,CAAwB,IAAa,EAAE,OAAe,EAAE,GAAgB,EAAK,EAAE;IAC5G,MAAM,MAAM,GAAG;QACb,KAAK,EAAE,KAAK;QACZ,OAAO;QACP,KAAK,EAAE,IAAI,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM;QAC/D,IAAI;QACJ,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,EAAE;QACZ,OAAO,EAAE,EAAE;QACX,GAAG,GAAG;KACF,CAAA;IAEN,OAAO,MAAM,CAAA;AACf,CAAC,CAAA"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,eAAe,GAAG,CAAwB,IAAa,EAAE,OAAe,EAAE,GAAgB,EAAK,EAAE;IAC5G,MAAM,MAAM,GAAG;QACb,KAAK,EAAE,KAAK;QACZ,OAAO;QACP,IAAI;QACJ,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,EAAE;QACZ,OAAO,EAAE,EAAE;QACX,GAAG,GAAG;KACF,CAAA;IAEN,OAAO,MAAM,CAAA;AACf,CAAC,CAAA"}
package/build/consts.d.ts CHANGED
@@ -1,10 +1,3 @@
1
- export declare enum Layer {
2
- System = "system",
3
- Global = "global",
4
- Service = "service",
5
- Entity = "entity",
6
- User = "user"
7
- }
8
1
  export declare enum AppType {
9
2
  Backend = "backend",
10
3
  Frontend = "frontend"
@@ -21,8 +14,7 @@ export declare enum ContextStage {
21
14
  export declare enum MiddlewareStage {
22
15
  Configuration = "configuration",
23
16
  Loading = "loading",
24
- Ready = "ready",
25
- Switching = "switching"
17
+ Ready = "ready"
26
18
  }
27
19
  export declare const CONFIG_RECORD = "records";
28
20
  export declare const EMPTY_ENTITY = "[UNDEFINED_ENTITY]";
@@ -1 +1 @@
1
- {"version":3,"file":"consts.d.ts","sourceRoot":"","sources":["../src/consts.ts"],"names":[],"mappings":"AACA,oBAAY,KAAK;IACf,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,IAAI,SAAS;CACd;AAED,oBAAY,OAAO;IACjB,OAAO,YAAY;IACnB,QAAQ,aAAa;CACtB;AAED,oBAAY,cAAc;IACxB,MAAM,WAAW;IACjB,OAAO,YAAY;CACpB;AAED,oBAAY,YAAY;IACtB,aAAa,kBAAkB;IAC/B,OAAO,YAAY;IACnB,KAAK,UAAU;CAChB;AAED,oBAAY,eAAe;IACzB,aAAa,kBAAkB;IAC/B,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,SAAS,cAAc;CACxB;AAED,eAAO,MAAM,aAAa,YAAY,CAAA;AAEtC,eAAO,MAAM,YAAY,uBAAuB,CAAA;AAChD,eAAO,MAAM,aAAa,wBAAwB,CAAA;AAGlD;;GAEG;AACH,eAAO,MAAM,IAAI,SAAS,CAAA;AAC1B;;GAEG;AACH,eAAO,MAAM,IAAI,SAAS,CAAA;AAC1B;;GAEG;AACH,eAAO,MAAM,KAAK,UAAU,CAAA;AAC5B;;GAEG;AACH,eAAO,MAAM,IAAI,SAAS,CAAA;AAC1B;;GAEG;AACH,eAAO,MAAM,KAAK,UAAU,CAAA"}
1
+ {"version":3,"file":"consts.d.ts","sourceRoot":"","sources":["../src/consts.ts"],"names":[],"mappings":"AACA,oBAAY,OAAO;IACjB,OAAO,YAAY;IACnB,QAAQ,aAAa;CACtB;AAED,oBAAY,cAAc;IACxB,MAAM,WAAW;IACjB,OAAO,YAAY;CACpB;AAED,oBAAY,YAAY;IACtB,aAAa,kBAAkB;IAC/B,OAAO,YAAY;IACnB,KAAK,UAAU;CAChB;AAED,oBAAY,eAAe;IACzB,aAAa,kBAAkB;IAC/B,OAAO,YAAY;IACnB,KAAK,UAAU;CAChB;AAED,eAAO,MAAM,aAAa,YAAY,CAAA;AAEtC,eAAO,MAAM,YAAY,uBAAuB,CAAA;AAChD,eAAO,MAAM,aAAa,wBAAwB,CAAA;AAGlD;;GAEG;AACH,eAAO,MAAM,IAAI,SAAS,CAAA;AAC1B;;GAEG;AACH,eAAO,MAAM,IAAI,SAAS,CAAA;AAC1B;;GAEG;AACH,eAAO,MAAM,KAAK,UAAU,CAAA;AAC5B;;GAEG;AACH,eAAO,MAAM,IAAI,SAAS,CAAA;AAC1B;;GAEG;AACH,eAAO,MAAM,KAAK,UAAU,CAAA"}
package/build/consts.js CHANGED
@@ -1,11 +1,3 @@
1
- export var Layer;
2
- (function (Layer) {
3
- Layer["System"] = "system";
4
- Layer["Global"] = "global";
5
- Layer["Service"] = "service";
6
- Layer["Entity"] = "entity";
7
- Layer["User"] = "user";
8
- })(Layer || (Layer = {}));
9
1
  export var AppType;
10
2
  (function (AppType) {
11
3
  AppType["Backend"] = "backend";
@@ -27,7 +19,6 @@ export var MiddlewareStage;
27
19
  MiddlewareStage["Configuration"] = "configuration";
28
20
  MiddlewareStage["Loading"] = "loading";
29
21
  MiddlewareStage["Ready"] = "ready";
30
- MiddlewareStage["Switching"] = "switching";
31
22
  })(MiddlewareStage || (MiddlewareStage = {}));
32
23
  export const CONFIG_RECORD = 'records';
33
24
  export const EMPTY_ENTITY = '[UNDEFINED_ENTITY]';
@@ -1 +1 @@
1
- {"version":3,"file":"consts.js","sourceRoot":"","sources":["../src/consts.ts"],"names":[],"mappings":"AACA,MAAM,CAAN,IAAY,KAMX;AAND,WAAY,KAAK;IACf,0BAAiB,CAAA;IACjB,0BAAiB,CAAA;IACjB,4BAAmB,CAAA;IACnB,0BAAiB,CAAA;IACjB,sBAAa,CAAA;AACf,CAAC,EANW,KAAK,KAAL,KAAK,QAMhB;AAED,MAAM,CAAN,IAAY,OAGX;AAHD,WAAY,OAAO;IACjB,8BAAmB,CAAA;IACnB,gCAAqB,CAAA;AACvB,CAAC,EAHW,OAAO,KAAP,OAAO,QAGlB;AAED,MAAM,CAAN,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,mCAAiB,CAAA;IACjB,qCAAmB,CAAA;AACrB,CAAC,EAHW,cAAc,KAAd,cAAc,QAGzB;AAED,MAAM,CAAN,IAAY,YAIX;AAJD,WAAY,YAAY;IACtB,+CAA+B,CAAA;IAC/B,mCAAmB,CAAA;IACnB,+BAAe,CAAA;AACjB,CAAC,EAJW,YAAY,KAAZ,YAAY,QAIvB;AAED,MAAM,CAAN,IAAY,eAKX;AALD,WAAY,eAAe;IACzB,kDAA+B,CAAA;IAC/B,sCAAmB,CAAA;IACnB,kCAAe,CAAA;IACf,0CAAuB,CAAA;AACzB,CAAC,EALW,eAAe,KAAf,eAAe,QAK1B;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,SAAS,CAAA;AAEtC,MAAM,CAAC,MAAM,YAAY,GAAG,oBAAoB,CAAA;AAChD,MAAM,CAAC,MAAM,aAAa,GAAG,qBAAqB,CAAA;AAElD,wBAAwB;AACxB;;GAEG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAA;AAC1B;;GAEG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAA;AAC1B;;GAEG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,OAAO,CAAA;AAC5B;;GAEG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAA;AAC1B;;GAEG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,OAAO,CAAA"}
1
+ {"version":3,"file":"consts.js","sourceRoot":"","sources":["../src/consts.ts"],"names":[],"mappings":"AACA,MAAM,CAAN,IAAY,OAGX;AAHD,WAAY,OAAO;IACjB,8BAAmB,CAAA;IACnB,gCAAqB,CAAA;AACvB,CAAC,EAHW,OAAO,KAAP,OAAO,QAGlB;AAED,MAAM,CAAN,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,mCAAiB,CAAA;IACjB,qCAAmB,CAAA;AACrB,CAAC,EAHW,cAAc,KAAd,cAAc,QAGzB;AAED,MAAM,CAAN,IAAY,YAIX;AAJD,WAAY,YAAY;IACtB,+CAA+B,CAAA;IAC/B,mCAAmB,CAAA;IACnB,+BAAe,CAAA;AACjB,CAAC,EAJW,YAAY,KAAZ,YAAY,QAIvB;AAED,MAAM,CAAN,IAAY,eAIX;AAJD,WAAY,eAAe;IACzB,kDAA+B,CAAA;IAC/B,sCAAmB,CAAA;IACnB,kCAAe,CAAA;AACjB,CAAC,EAJW,eAAe,KAAf,eAAe,QAI1B;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,SAAS,CAAA;AAEtC,MAAM,CAAC,MAAM,YAAY,GAAG,oBAAoB,CAAA;AAChD,MAAM,CAAC,MAAM,aAAa,GAAG,qBAAqB,CAAA;AAElD,wBAAwB;AACxB;;GAEG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAA;AAC1B;;GAEG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAA;AAC1B;;GAEG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,OAAO,CAAA;AAC5B;;GAEG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAA;AAC1B;;GAEG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,OAAO,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAoE,MAAM,YAAY,CAAA;AAO7H,eAAO,MAAM,gBAAgB,GAAI,CAAC,SAAS,WAAW,OAAO,CAAC,KAAG,YAAY,CAAC,CAAC,CA6Q9E,CAAA"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAuD,MAAM,YAAY,CAAA;AAKhH,eAAO,MAAM,gBAAgB,GAAI,CAAC,SAAS,WAAW,EAAE,KAAK,CAAC,KAAG,YAAY,CAAC,CAAC,CAsK9E,CAAA"}
package/build/context.js CHANGED
@@ -1,20 +1,19 @@
1
- import { ContextStage, Layer, MiddlewareStage, MiddlewareType } from './consts.js';
2
- // import { applyMiddlewares, getAllServices, getMiddlerwareKey, isResourceAvailable, layersOrder } from './utils/context.js'
3
- import { applyMiddlewares, getAllServices, getMiddlerwareKey, isResourceAvailable } from './utils/context.js';
4
- import { DEFAULT, initializeLayer } from './utils/layer.js';
1
+ import { ContextStage, MiddlewareStage, MiddlewareType } from './consts.js';
2
+ import { applyMiddlewares, getMiddlerwareKey } from './utils/context.js';
5
3
  export const makeBasicContext = (cfg) => {
4
+ /**
5
+ * One flat registry per kind, keyed by alias. Registering an alias twice replaces the
6
+ * earlier entry — application entrypoint lists are routinely spread together and the
7
+ * later declaration is the one the app means.
8
+ */
6
9
  const services = {};
7
10
  const entrypoints = {};
8
11
  const resources = {};
9
12
  const middlewares = {};
10
- const allServices = {};
11
- const allEntrypoints = {};
12
- const allResources = {};
13
13
  let configure;
14
14
  let initialize;
15
15
  const configured = new Promise(resolve => { configure = resolve; });
16
16
  const initialized = new Promise(resolve => { initialize = resolve; });
17
- // const contexts: Record<string, BasicContext<C>> = {}
18
17
  const inLazyInit = new Set();
19
18
  const context = {
20
19
  cfg,
@@ -39,7 +38,7 @@ export const makeBasicContext = (cfg) => {
39
38
  return context;
40
39
  }
41
40
  await applyMiddlewares(context, middlewares, MiddlewareType.Context, MiddlewareStage.Configuration);
42
- await getAllServices(services, context.cfg.layer, context.cfg.layerId ?? DEFAULT).reduce(async (previous, service) => {
41
+ await Object.values(services).reduce(async (previous, service) => {
43
42
  await previous;
44
43
  if (!service.initialized) {
45
44
  if (service.init != null) {
@@ -51,12 +50,9 @@ export const makeBasicContext = (cfg) => {
51
50
  }
52
51
  }, Promise.resolve());
53
52
  await applyMiddlewares(context, middlewares, MiddlewareType.Config, MiddlewareStage.Loading);
54
- const id = initializeLayer(resources, context.cfg.layer, context.cfg.layerId ?? DEFAULT);
55
- await Object.values(resources[context.cfg.layer][id]).reduce(async (previous, resource) => {
53
+ await Object.values(resources).reduce(async (previous, resource) => {
56
54
  await previous;
57
- if (isResourceAvailable(resource, context.cfg.layer)) {
58
- await resource.init?.();
59
- }
55
+ await resource.init?.();
60
56
  }, Promise.resolve());
61
57
  await applyMiddlewares(context, middlewares, MiddlewareType.Context, MiddlewareStage.Loading);
62
58
  context.stage = ContextStage.Ready;
@@ -66,38 +62,19 @@ export const makeBasicContext = (cfg) => {
66
62
  return context;
67
63
  },
68
64
  registerService: (service) => {
69
- const id = initializeLayer(services, context.cfg.layer, context.cfg.layerId);
70
- service = service.registerContext(context);
71
- if (allServices[service.alias] == null) {
72
- allServices[service.alias] = service;
73
- }
74
- services[context.cfg.layer][id][service.alias] = service;
65
+ services[service.alias] = service.registerContext(context);
75
66
  return context;
76
67
  },
77
68
  registerEntrypoint: (entrypoint) => {
78
- const id = initializeLayer(entrypoints, context.cfg.layer, context.cfg.layerId);
79
- entrypoint = entrypoint.registerContext(context);
80
- if (allEntrypoints[entrypoint.alias] == null) {
81
- allEntrypoints[entrypoint.alias] = entrypoint;
82
- }
83
- entrypoints[context.cfg.layer][id][entrypoint.alias] = entrypoint;
69
+ entrypoints[entrypoint.alias] = entrypoint.registerContext(context);
84
70
  return context;
85
71
  },
86
72
  registerEntrypoints: (eps) => {
87
73
  eps.forEach(ep => context.registerEntrypoint(ep));
88
74
  return context;
89
75
  },
90
- /** @deprecated use registerEntrypoint */
91
- registerModule: (module) => context.registerEntrypoint(module),
92
- /** @deprecated use registerEntrypoints */
93
- registerModules: (mods) => context.registerEntrypoints(mods),
94
76
  registerResource: (resource) => {
95
- const id = initializeLayer(resources, context.cfg.layer, context.cfg.layerId);
96
- resource = resource.registerContext(context);
97
- if (allResources[resource.alias] == null) {
98
- allResources[resource.alias] = resource;
99
- }
100
- resources[context.cfg.layer][id][resource.alias] = resource;
77
+ resources[resource.alias] = resource.registerContext(context);
101
78
  return context;
102
79
  },
103
80
  registerMiddleware: (middleware) => {
@@ -112,16 +89,9 @@ export const makeBasicContext = (cfg) => {
112
89
  return configured.then(() => context.cfg);
113
90
  },
114
91
  service: (alias) => {
115
- const id = initializeLayer(services, context.cfg.layer, context.cfg.layerId);
116
- let _service;
117
- if (services[context.cfg.layer]?.[id]?.[alias] != null) {
118
- _service = services[context.cfg.layer][id][alias];
119
- }
120
- else if (services[Layer.Global]?.[id]?.[alias] != null) {
121
- _service = services[context.cfg.layer][id][alias];
122
- }
123
- else {
124
- throw new SyntaxError(`Service ${alias} not found in layer ${context.cfg.layer}`);
92
+ const _service = services[alias];
93
+ if (_service == null) {
94
+ throw new SyntaxError(`Service ${alias} not found`);
125
95
  }
126
96
  if (!_service.initialized) {
127
97
  if (_service.lazyInit != null) {
@@ -139,75 +109,21 @@ export const makeBasicContext = (cfg) => {
139
109
  return _service;
140
110
  },
141
111
  entrypoint: (alias) => {
142
- const id = initializeLayer(entrypoints, context.cfg.layer, context.cfg.layerId);
143
- if (entrypoints[context.cfg.layer][id][alias] != null) {
144
- return entrypoints[context.cfg.layer][id][alias];
112
+ if (entrypoints[alias] != null) {
113
+ return entrypoints[alias];
145
114
  }
146
115
  throw new SyntaxError(`Entrypoint ${alias} not found`);
147
116
  },
148
- /** @deprecated use entrypoint */
149
- module: (alias) => context.entrypoint(alias),
150
117
  resource: (alias) => {
151
- const id = initializeLayer(resources, context.cfg.layer, context.cfg.layerId);
152
- if (resources[context.cfg.layer][id][alias] != null) {
153
- const resource = resources[context.cfg.layer][id][alias];
154
- return resource;
118
+ if (resources[alias] != null) {
119
+ return resources[alias];
155
120
  }
156
121
  throw new SyntaxError(`Resource ${alias} not found`);
157
122
  },
158
- entrypoints: () => {
159
- const id = initializeLayer(entrypoints, context.cfg.layer, context.cfg.layerId);
160
- return Object.values(entrypoints[context.cfg.layer][id]);
161
- },
162
- /** @deprecated use entrypoints */
163
- modules: () => context.entrypoints(),
164
- /**
165
- * @TODO Unfortunatly module cloning between contexts is quite unstable.
166
- * And it looks like in some cases it relies on modules that aren't really clonned.
167
- * The problem is that the not cloned modules are changing their context accross all context
168
- * layers and we can't rely on such behaviour.
169
- * So we disabled context update as a whole and all functionality that relies on it
170
- * cause in curent release mixed tenancy is not in use in any project and it looks like
171
- * there is no short term plans to use it some way.
172
- */
173
- updateContext: async (_id, _layer) => {
174
- return context;
175
- // const index = layersOrder.indexOf(context.cfg.layer)
176
- // layer = layer ?? (layersOrder[index + 1] != null ? layersOrder[index + 1] : undefined)
177
- // if (layer == null) {
178
- // throw new SyntaxError("There is no next layer to switch to")
179
- // }
180
- // if ([Layer.Entity, Layer.User].includes(layer) && id == null) {
181
- // throw new SyntaxError(`Cannot switch to layer ${layer} without id`)
182
- // }
183
- // id = initializeLayer(resources, layer, id)
184
- // // Cache initalized context layers
185
- // const key = `${layer}:${id}`
186
- // if (key in contexts) {
187
- // return contexts[key] as T
188
- // }
189
- // const _config: C = JSON.parse(JSON.stringify(context.cfg))
190
- // _config.layer = layer
191
- // _config.ready = false
192
- // _config.layerId = id
193
- // // @TODO we need to make a rule to store all makeContext methods after they are applied
194
- // const _context = context.makeContext != null ? context.makeContext(_config) : makeBasicContext(_config)
195
- // Object.values(middlewares).flatMap(middlewares => middlewares)
196
- // .forEach(middleware => _context.registerMiddleware(middleware))
197
- // await applyMiddlewares<C, BasicContext<C>>(_context, middlewares, MiddlewareType.Config, MiddlewareStage.Switching, { layer, id })
198
- // Object.values(allServices).forEach(service => _context.registerService(service))
199
- // Object.values(allEntrypoints).forEach(ep => _context.registerEntrypoint(ep))
200
- // Object.values(allResources).forEach(resource => _context.registerResource(resource))
201
- // await applyMiddlewares<C, BasicContext<C>>(_context, middlewares, MiddlewareType.Context, MiddlewareStage.Switching, { layer, id })
202
- // _context.stage = ContextStage.Loading
203
- // await _context.configure().init()
204
- // return (contexts[key] = _context) as T
205
- },
206
- hasResource: alias => allResources[alias] != null,
207
- hasService: alias => allServices[alias] != null,
208
- hasEntrypoint: alias => allEntrypoints[alias] != null,
209
- /** @deprecated use hasEntrypoint */
210
- hasModule: alias => context.hasEntrypoint(alias),
123
+ entrypoints: () => Object.values(entrypoints),
124
+ hasResource: alias => resources[alias] != null,
125
+ hasService: alias => services[alias] != null,
126
+ hasEntrypoint: alias => entrypoints[alias] != null,
211
127
  };
212
128
  return context;
213
129
  };
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
package/build/helper.d.ts CHANGED
@@ -4,5 +4,4 @@ export declare const appendContextual: <T extends Contextual>(alias: string, con
4
4
  * @throws {SyntaxError}
5
5
  */
6
6
  export declare const assertContext: <C extends BasicConfig, T extends BasicContext<C>>(ctx: T | BasicContext<BasicConfig> | undefined, location?: string) => T;
7
- export declare const isContextWithoutIds: <C extends BasicConfig, T extends BasicContext<C>>(context: T) => boolean;
8
7
  //# sourceMappingURL=helper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"helper.d.ts","sourceRoot":"","sources":["../src/helper.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAEvE,eAAO,MAAM,gBAAgB,GAAI,CAAC,SAAS,UAAU,SAAS,MAAM,cAAc,OAAO,CAAC,CAAC,CAAC,KAAG,CAsB9F,CAAA;AAMD;;GAEG;AACH,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,WAAW,EAAE,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC,WAAW,CAAC,GAAG,SAAS,aAAa,MAAM,KAAG,CAKnJ,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAI,CAAC,SAAS,WAAW,EAAE,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,KAAG,OAC1B,CAAA"}
1
+ {"version":3,"file":"helper.d.ts","sourceRoot":"","sources":["../src/helper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAEvE,eAAO,MAAM,gBAAgB,GAAI,CAAC,SAAS,UAAU,EAAE,OAAO,MAAM,EAAE,YAAY,OAAO,CAAC,CAAC,CAAC,KAAG,CAgB9F,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,WAAW,EAAE,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,YAAY,CAAC,WAAW,CAAC,GAAG,SAAS,EAAE,WAAW,MAAM,KAAG,CAKnJ,CAAA"}
package/build/helper.js CHANGED
@@ -1,23 +1,15 @@
1
- import { Layer } from './consts.js';
2
1
  export const appendContextual = (alias, contextual) => {
3
2
  contextual.alias = alias;
4
3
  contextual.registerContext = (context) => {
5
- const _contextual = contextual.ctx == null
6
- ? contextual
7
- : contextual.reinitializeContext != null
8
- ? contextual.reinitializeContext(context) : contextual;
9
- // We do NOT update context when it's the same contextual with already set context
10
- // Actuall we just do not need to switch context in many on the level of context consumer
11
- if (_contextual.ctx == null) {
12
- _contextual.ctx = context;
4
+ // A contextual binds to exactly one context — the first one that registers it.
5
+ if (contextual.ctx == null) {
6
+ contextual.ctx = context;
13
7
  }
14
- return _contextual;
8
+ return contextual;
15
9
  };
16
10
  contextual.assertCtx = (location => assertContext(contextual.ctx, location ?? contextual.alias));
17
11
  return contextual;
18
12
  };
19
- // export type UpdContextType<C extends Config, T extends Context<C>, ExtraType> = T & ExtraType
20
- // export type UpdConfigType<T extends Config, ExtraType> = T & ExtraType
21
13
  /**
22
14
  * @throws {SyntaxError}
23
15
  */
@@ -27,5 +19,4 @@ export const assertContext = (ctx, location) => {
27
19
  }
28
20
  return ctx;
29
21
  };
30
- export const isContextWithoutIds = (context) => [Layer.System, Layer.Global, Layer.Service].includes(context.cfg.layer);
31
22
  //# sourceMappingURL=helper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helper.js","sourceRoot":"","sources":["../src/helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAGnC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAuB,KAAa,EAAE,UAAsB,EAAK,EAAE;IACjG,UAAU,CAAC,KAAK,GAAG,KAAK,CAAA;IACxB,UAAU,CAAC,eAAe,GAAG,CAA2B,OAAwB,EAAE,EAAE;QAClF,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,IAAI,IAAI;YACxC,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,UAAU,CAAC,mBAAmB,IAAI,IAAI;gBACtC,CAAC,CAAC,UAAU,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAA;QAE1D,kFAAkF;QAClF,yFAAyF;QACzF,IAAI,WAAW,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;YAC5B,WAAW,CAAC,GAAG,GAAG,OAAO,CAAA;QAC3B,CAAC;QAED,OAAO,WAAgB,CAAA;IACzB,CAAC,CAAA;IAED,UAAU,CAAC,SAAS,GAAG,CACrB,QAAQ,CAAC,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,EAAE,QAAQ,IAAI,UAAU,CAAC,KAAK,CAAC,CACzC,CAAA;IAEhC,OAAO,UAAe,CAAA;AACxB,CAAC,CAAA;AAED,gGAAgG;AAEhG,yEAAyE;AAEzE;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAmD,GAA8C,EAAE,QAAiB,EAAK,EAAE;IACtJ,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QAChB,MAAM,IAAI,WAAW,CAAC,wBAAwB,QAAQ,EAAE,CAAC,CAAA;IAC3D,CAAC;IACD,OAAO,GAAQ,CAAA;AACjB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAmD,OAAU,EAAW,EAAE,CAC3G,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA"}
1
+ {"version":3,"file":"helper.js","sourceRoot":"","sources":["../src/helper.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAuB,KAAa,EAAE,UAAsB,EAAK,EAAE;IACjG,UAAU,CAAC,KAAK,GAAG,KAAK,CAAA;IACxB,UAAU,CAAC,eAAe,GAAG,CAA2B,OAAwB,EAAE,EAAE;QAClF,+EAA+E;QAC/E,IAAI,UAAU,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;YAC3B,UAAU,CAAC,GAAG,GAAG,OAAO,CAAA;QAC1B,CAAC;QAED,OAAO,UAAe,CAAA;IACxB,CAAC,CAAA;IAED,UAAU,CAAC,SAAS,GAAG,CACrB,QAAQ,CAAC,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,EAAE,QAAQ,IAAI,UAAU,CAAC,KAAK,CAAC,CACzC,CAAA;IAEhC,OAAO,UAAe,CAAA;AACxB,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAmD,GAA8C,EAAE,QAAiB,EAAK,EAAE;IACtJ,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QAChB,MAAM,IAAI,WAAW,CAAC,wBAAwB,QAAQ,EAAE,CAAC,CAAA;IAC3D,CAAC;IACD,OAAO,GAAQ,CAAA;AACjB,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAc,kBAAkB,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAOtF,MAAM,WAAW,UAAU,CAAC,CAAC,SAAS,OAAO;IAC3C,CAAC,OAAO,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAClC;AAgCD,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,kBAAkB,SACjD,MAAM,WAAW,OAAO,CAAC,CAAC,CAAC,SAAS,UAAU,CAAC,CAAC,CAAC,KACvD,CAAsE,CAAA;AAEzE,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,WAAW,SAC9C,MAAM,WAAW,OAAO,CAAC,CAAC,CAAC,SAAS,UAAU,CAAC,CAAC,CAAC,KACvD,CAA+D,CAAA"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAc,kBAAkB,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAOtF,MAAM,WAAW,UAAU,CAAC,CAAC,SAAS,OAAO;IAC3C,CAAC,OAAO,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAClC;AAgCD,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,kBAAkB,EACxD,OAAO,MAAM,EAAE,SAAS,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,UAAU,CAAC,CAAC,CAAC,KACvD,CAAsE,CAAA;AAEzE,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,WAAW,EACrD,OAAO,MAAM,EAAE,SAAS,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,UAAU,CAAC,CAAC,CAAC,KACvD,CAA+D,CAAA"}
package/build/types.d.ts CHANGED
@@ -1,11 +1,9 @@
1
- import type { AppType, ContextStage, Layer, MiddlewareStage, MiddlewareType, CONFIG_RECORD } from './consts.js';
1
+ import type { AppType, ContextStage, MiddlewareStage, MiddlewareType, CONFIG_RECORD } from './consts.js';
2
2
  export interface BasicConfig {
3
3
  ready: boolean;
4
4
  service: string;
5
5
  alias?: string;
6
- layer: Layer;
7
6
  type: AppType;
8
- layerId?: string;
9
7
  services?: Record<string, Object>;
10
8
  [CONFIG_RECORD]?: ConfigRecord[];
11
9
  debug?: {
@@ -23,12 +21,10 @@ interface ConfigRecordItem extends Record<string, MaybeArray<ConfigRecordItem |
23
21
  export interface Contextual {
24
22
  ctx?: BasicContext<any>;
25
23
  alias: string;
26
- reinitializeContext?: <T extends Contextual>(context: BasicContext<any>) => T;
27
24
  registerContext: <T extends Contextual, C extends BasicConfig>(context: BasicContext<C>) => T;
28
25
  assertCtx: <C extends BasicConfig, T extends BasicContext<C>>(location?: string) => T;
29
26
  }
30
27
  export interface Service extends Contextual {
31
- layers?: Layer[];
32
28
  initialized: boolean;
33
29
  init?: () => Promise<void>;
34
30
  lazyInit?: () => Promise<void>;
@@ -44,14 +40,8 @@ export interface LazyService extends Service {
44
40
  }
45
41
  export interface BasicEntrypoint extends Contextual {
46
42
  _entrypoint: true;
47
- _module: true;
48
- }
49
- /** @deprecated use BasicEntrypoint */
50
- export interface BasicModule extends Contextual {
51
- _module: true;
52
43
  }
53
44
  export interface BasicResource extends Contextual {
54
- layers?: Layer[];
55
45
  init?: () => Promise<void>;
56
46
  }
57
47
  export interface Middleware {
@@ -59,6 +49,12 @@ export interface Middleware {
59
49
  stage: MiddlewareStage;
60
50
  apply: <C extends BasicConfig, T extends BasicContext<C>>(context: T, args?: Record<string, string | undefined>) => Promise<void>;
61
51
  }
52
+ /**
53
+ * The DI container. One context is built per process by one factory: a layer specific
54
+ * factory composes the layer below it and then `append*` mixins register what the
55
+ * application needs. There is no child context and nothing is stored for re-creation —
56
+ * a service, a resource and an entrypoint each bind to exactly one context.
57
+ */
62
58
  export interface BasicContext<C extends BasicConfig> {
63
59
  cfg: C;
64
60
  stage: ContextStage;
@@ -66,7 +62,6 @@ export interface BasicContext<C extends BasicConfig> {
66
62
  waitForInitialized: () => Promise<boolean>;
67
63
  configure: <T extends BasicContext<C>>() => T;
68
64
  init: <T extends BasicContext<C>>() => Promise<T>;
69
- updateContext: <T extends BasicContext<C>>(id?: string, to?: Layer) => Promise<T>;
70
65
  registerService: <T extends BasicContext<C>>(service: Service) => T;
71
66
  registerEntrypoint: <T extends BasicContext<C>>(entrypoint: BasicEntrypoint) => T;
72
67
  registerEntrypoints: <T extends BasicContext<C>>(entrypoints: BasicEntrypoint[]) => T;
@@ -80,17 +75,6 @@ export interface BasicContext<C extends BasicConfig> {
80
75
  hasService: (alias: string) => boolean;
81
76
  hasEntrypoint: (alias: string) => boolean;
82
77
  entrypoints: <T extends BasicEntrypoint>() => T[];
83
- /** @deprecated use registerEntrypoint */
84
- registerModule: <T extends BasicContext<C>>(module: BasicModule) => T;
85
- /** @deprecated use registerEntrypoints */
86
- registerModules: <T extends BasicContext<C>>(modules: BasicModule[]) => T;
87
- /** @deprecated use entrypoint */
88
- module: <T extends BasicModule>(alias: string) => T;
89
- /** @deprecated use hasEntrypoint */
90
- hasModule: (alias: string) => boolean;
91
- /** @deprecated use entrypoints */
92
- modules: <T extends BasicModule>() => T[];
93
- makeContext?: <T extends BasicContext<C>>(cfg: C) => T;
94
78
  }
95
79
  export {};
96
80
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,6 @@
1
- import { Layer, MiddlewareStage, MiddlewareType } from '../consts.js';
2
- import type { BasicConfig, BasicContext, Middleware, BasicResource, Service } from '../types.js';
3
- import type { InLayer } from './layer.js';
1
+ import type { MiddlewareStage, MiddlewareType } from '../consts.js';
2
+ import type { BasicConfig, BasicContext, Middleware } from '../types.js';
4
3
  export declare const getMiddlerwareKey: (middleware: Middleware) => string;
5
4
  export declare const createMiddlewareKey: (type: MiddlewareType, stage: MiddlewareStage) => string;
6
- export declare const isLayerIherited: (current: Layer, parent: Layer) => boolean;
7
- export declare const isResourceAvailable: (resource: BasicResource, layer: Layer) => boolean;
8
- export declare const layersOrder: Layer[];
9
- export declare const getAllServices: (services: InLayer<Record<string, Service>>, layer: Layer, id: string) => Service[];
10
5
  export declare const applyMiddlewares: <C extends BasicConfig, T extends BasicContext<C>>(context: T, middlewares: Record<string, Middleware[]>, type: MiddlewareType, stage: MiddlewareStage, args?: Record<string, string | undefined>) => Promise<void[]>;
11
6
  //# sourceMappingURL=context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/utils/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAChG,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEzC,eAAO,MAAM,iBAAiB,eAAgB,UAAU,WAA2D,CAAA;AAEnH,eAAO,MAAM,mBAAmB,SAAU,cAAc,SAAS,eAAe,WAAuB,CAAA;AAEvG,eAAO,MAAM,eAAe,YAAa,KAAK,UAAU,KAAK,KAAG,OACsB,CAAA;AAEtF,eAAO,MAAM,mBAAmB,aAAc,aAAa,SAAS,KAAK,YACkB,CAAA;AAE3F,eAAO,MAAM,WAAW,SAMvB,CAAA;AAED,eAAO,MAAM,cAAc,aAAc,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,SAAS,KAAK,MAAM,MAAM,cACxB,CAAA;AAE3E,eAAO,MAAM,gBAAgB,GAAI,CAAC,SAAS,WAAW,EAAE,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,WACtE,CAAC,eACG,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,QACnC,cAAc,SACb,eAAe,SACf,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,oBAG1C,CAAA"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/utils/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExE,eAAO,MAAM,iBAAiB,GAAI,YAAY,UAAU,WAA2D,CAAA;AAEnH,eAAO,MAAM,mBAAmB,GAAI,MAAM,cAAc,EAAE,OAAO,eAAe,WAAuB,CAAA;AAEvG,eAAO,MAAM,gBAAgB,GAAI,CAAC,SAAS,WAAW,EAAE,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EAC/E,SAAS,CAAC,EACV,aAAa,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,EACzC,MAAM,cAAc,EACpB,OAAO,eAAe,EACtB,OAAO,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,oBAG1C,CAAA"}
@@ -1,15 +1,4 @@
1
- import { Layer } from '../consts.js';
2
1
  export const getMiddlerwareKey = (middleware) => createMiddlewareKey(middleware.type, middleware.stage);
3
2
  export const createMiddlewareKey = (type, stage) => `${type}:${stage}`;
4
- export const isLayerIherited = (current, parent) => (current === parent) || (layersOrder.indexOf(parent) > layersOrder.indexOf(current));
5
- export const isResourceAvailable = (resource, layer) => resource.layers == null || resource.layers.some(_layer => isLayerIherited(_layer, layer));
6
- export const layersOrder = [
7
- Layer.System,
8
- Layer.Global,
9
- Layer.Service,
10
- Layer.Entity,
11
- Layer.User
12
- ];
13
- export const getAllServices = (services, layer, id) => services?.[layer]?.[id] != null ? Object.values(services[layer][id]) : [];
14
3
  export const applyMiddlewares = (context, middlewares, type, stage, args) => Promise.all(middlewares[createMiddlewareKey(type, stage)]?.map(async (middleware) => middleware.apply(context, args)) ?? []);
15
4
  //# sourceMappingURL=context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/utils/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAmC,MAAM,cAAc,CAAA;AAIrE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,UAAsB,EAAE,EAAE,CAAC,mBAAmB,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,CAAA;AAEnH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,IAAoB,EAAE,KAAsB,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,KAAK,EAAE,CAAA;AAEvG,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAAc,EAAE,MAAa,EAAW,EAAE,CACxE,CAAC,OAAO,KAAK,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAA;AAEtF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,QAAuB,EAAE,KAAY,EAAE,EAAE,CAC3E,QAAQ,CAAC,MAAM,IAAI,IAAI,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAA;AAE3F,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,KAAK,CAAC,MAAM;IACZ,KAAK,CAAC,MAAM;IACZ,KAAK,CAAC,OAAO;IACb,KAAK,CAAC,MAAM;IACZ,KAAK,CAAC,IAAI;CACX,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,QAA0C,EAAE,KAAY,EAAE,EAAU,EAAE,EAAE,CACrG,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AAE3E,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,OAAU,EACV,WAAyC,EACzC,IAAoB,EACpB,KAAsB,EACtB,IAAyC,EACzC,EAAE,CAAC,OAAO,CAAC,GAAG,CACd,WAAW,CAAC,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,EAAC,UAAU,EAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAO,OAAO,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CACpH,CAAA"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/utils/context.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,UAAsB,EAAE,EAAE,CAAC,mBAAmB,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,CAAA;AAEnH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,IAAoB,EAAE,KAAsB,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,KAAK,EAAE,CAAA;AAEvG,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,OAAU,EACV,WAAyC,EACzC,IAAoB,EACpB,KAAsB,EACtB,IAAyC,EACzC,EAAE,CAAC,OAAO,CAAC,GAAG,CACd,WAAW,CAAC,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,EAAC,UAAU,EAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAO,OAAO,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CACpH,CAAA"}
@@ -1,3 +1,2 @@
1
1
  export * from './context.js';
2
- export * from './layer.js';
3
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AACA,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AACA,cAAc,cAAc,CAAA"}
@@ -1,3 +1,2 @@
1
1
  export * from './context.js';
2
- export * from './layer.js';
3
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AACA,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AACA,cAAc,cAAc,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@owlmeans/context",
3
- "version": "0.1.18-rc.5",
3
+ "version": "0.1.18-rc.7",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "scripts": {
package/src/config.ts CHANGED
@@ -1,11 +1,10 @@
1
- import { AppType, Layer } from './consts.js'
1
+ import { AppType } from './consts.js'
2
2
  import type { BasicConfig } from './types.js'
3
3
 
4
4
  export const makeBasicConfig = <C extends BasicConfig>(type: AppType, service: string, cfg?: Partial<C>): C => {
5
5
  const config = {
6
6
  ready: false,
7
7
  service,
8
- layer: type === AppType.Frontend ? Layer.Service : Layer.System,
9
8
  type,
10
9
  debug: {},
11
10
  services: {},
package/src/consts.ts CHANGED
@@ -1,12 +1,4 @@
1
1
 
2
- export enum Layer {
3
- System = 'system',
4
- Global = 'global',
5
- Service = 'service',
6
- Entity = 'entity',
7
- User = 'user'
8
- }
9
-
10
2
  export enum AppType {
11
3
  Backend = 'backend',
12
4
  Frontend = 'frontend',
@@ -26,8 +18,7 @@ export enum ContextStage {
26
18
  export enum MiddlewareStage {
27
19
  Configuration = 'configuration',
28
20
  Loading = 'loading',
29
- Ready = 'ready',
30
- Switching = 'switching'
21
+ Ready = 'ready'
31
22
  }
32
23
 
33
24
  export const CONFIG_RECORD = 'records'
package/src/context.ts CHANGED
@@ -1,19 +1,19 @@
1
- import { ContextStage, Layer, MiddlewareStage, MiddlewareType } from './consts.js'
2
- import type { BasicConfig, BasicContext, Middleware, BasicEntrypoint, BasicModule, BasicResource, Service } from './types.js'
3
- // import { applyMiddlewares, getAllServices, getMiddlerwareKey, isResourceAvailable, layersOrder } from './utils/context.js'
4
- import { applyMiddlewares, getAllServices, getMiddlerwareKey, isResourceAvailable } from './utils/context.js'
5
- import { DEFAULT, InLayer, initializeLayer } from './utils/layer.js'
1
+ import { ContextStage, MiddlewareStage, MiddlewareType } from './consts.js'
2
+ import type { BasicConfig, BasicContext, Middleware, BasicEntrypoint, BasicResource, Service } from './types.js'
3
+ import { applyMiddlewares, getMiddlerwareKey } from './utils/context.js'
6
4
 
7
5
  type Entrypoint = BasicEntrypoint
8
6
 
9
7
  export const makeBasicContext = <C extends BasicConfig>(cfg: C): BasicContext<C> => {
10
- const services = {} as InLayer<Record<string, Service>>
11
- const entrypoints = {} as InLayer<Record<string, Entrypoint>>
12
- const resources = {} as InLayer<Record<string, BasicResource>>
8
+ /**
9
+ * One flat registry per kind, keyed by alias. Registering an alias twice replaces the
10
+ * earlier entry — application entrypoint lists are routinely spread together and the
11
+ * later declaration is the one the app means.
12
+ */
13
+ const services: Record<string, Service> = {}
14
+ const entrypoints: Record<string, Entrypoint> = {}
15
+ const resources: Record<string, BasicResource> = {}
13
16
  const middlewares: Record<string, Middleware[]> = {}
14
- const allServices: Record<string, Service> = {}
15
- const allEntrypoints: Record<string, Entrypoint> = {}
16
- const allResources: Record<string, BasicResource> = {}
17
17
 
18
18
  let configure: (res: boolean) => void
19
19
  let initialize: (resv: boolean) => void
@@ -21,8 +21,6 @@ export const makeBasicContext = <C extends BasicConfig>(cfg: C): BasicContext<C>
21
21
  const configured = new Promise<boolean>(resolve => { configure = resolve })
22
22
  const initialized = new Promise<boolean>(resolve => { initialize = resolve })
23
23
 
24
- // const contexts: Record<string, BasicContext<C>> = {}
25
-
26
24
  const inLazyInit = new Set<Service>()
27
25
 
28
26
  const context: BasicContext<C> = {
@@ -59,7 +57,7 @@ export const makeBasicContext = <C extends BasicConfig>(cfg: C): BasicContext<C>
59
57
 
60
58
  await applyMiddlewares<C, BasicContext<C>>(context, middlewares, MiddlewareType.Context, MiddlewareStage.Configuration)
61
59
 
62
- await getAllServices(services, context.cfg.layer, context.cfg.layerId ?? DEFAULT).reduce(
60
+ await Object.values(services).reduce(
63
61
  async (previous, service) => {
64
62
  await previous
65
63
  if (!service.initialized) {
@@ -75,12 +73,9 @@ export const makeBasicContext = <C extends BasicConfig>(cfg: C): BasicContext<C>
75
73
 
76
74
  await applyMiddlewares<C, BasicContext<C>>(context, middlewares, MiddlewareType.Config, MiddlewareStage.Loading)
77
75
 
78
- const id = initializeLayer(resources, context.cfg.layer, context.cfg.layerId ?? DEFAULT)
79
- await Object.values(resources[context.cfg.layer][id]).reduce(async (previous, resource) => {
76
+ await Object.values(resources).reduce(async (previous, resource) => {
80
77
  await previous
81
- if (isResourceAvailable(resource, context.cfg.layer)) {
82
- await resource.init?.()
83
- }
78
+ await resource.init?.()
84
79
  }, Promise.resolve())
85
80
 
86
81
  await applyMiddlewares<C, BasicContext<C>>(context, middlewares, MiddlewareType.Context, MiddlewareStage.Loading)
@@ -95,24 +90,13 @@ export const makeBasicContext = <C extends BasicConfig>(cfg: C): BasicContext<C>
95
90
  },
96
91
 
97
92
  registerService: <T>(service: Service) => {
98
- const id = initializeLayer(services, context.cfg.layer, context.cfg.layerId)
99
- service = service.registerContext(context)
100
-
101
- if (allServices[service.alias] == null) {
102
- allServices[service.alias] = service
103
- }
104
- services[context.cfg.layer][id][service.alias] = service
93
+ services[service.alias] = service.registerContext(context)
105
94
 
106
95
  return context as T
107
96
  },
108
97
 
109
98
  registerEntrypoint: <T>(entrypoint: Entrypoint) => {
110
- const id = initializeLayer(entrypoints, context.cfg.layer, context.cfg.layerId)
111
- entrypoint = entrypoint.registerContext(context)
112
- if (allEntrypoints[entrypoint.alias] == null) {
113
- allEntrypoints[entrypoint.alias] = entrypoint
114
- }
115
- entrypoints[context.cfg.layer][id][entrypoint.alias] = entrypoint
99
+ entrypoints[entrypoint.alias] = entrypoint.registerContext(context)
116
100
 
117
101
  return context as T
118
102
  },
@@ -122,19 +106,8 @@ export const makeBasicContext = <C extends BasicConfig>(cfg: C): BasicContext<C>
122
106
  return context as T
123
107
  },
124
108
 
125
- /** @deprecated use registerEntrypoint */
126
- registerModule: <T>(module: BasicModule) => context.registerEntrypoint(module as unknown as Entrypoint) as T,
127
-
128
- /** @deprecated use registerEntrypoints */
129
- registerModules: <T>(mods: BasicModule[]) => context.registerEntrypoints(mods as unknown as Entrypoint[]) as T,
130
-
131
109
  registerResource: <T>(resource: BasicResource) => {
132
- const id = initializeLayer(resources, context.cfg.layer, context.cfg.layerId)
133
- resource = resource.registerContext(context)
134
- if (allResources[resource.alias] == null) {
135
- allResources[resource.alias] = resource
136
- }
137
- resources[context.cfg.layer][id][resource.alias] = resource
110
+ resources[resource.alias] = resource.registerContext(context)
138
111
 
139
112
  return context as T
140
113
  },
@@ -154,15 +127,9 @@ export const makeBasicContext = <C extends BasicConfig>(cfg: C): BasicContext<C>
154
127
  },
155
128
 
156
129
  service: <T>(alias: string) => {
157
- const id = initializeLayer(services, context.cfg.layer, context.cfg.layerId)
158
-
159
- let _service: Service
160
- if (services[context.cfg.layer]?.[id]?.[alias] != null) {
161
- _service = services[context.cfg.layer][id][alias]
162
- } else if (services[Layer.Global]?.[id]?.[alias] != null) {
163
- _service = services[context.cfg.layer][id][alias]
164
- } else {
165
- throw new SyntaxError(`Service ${alias} not found in layer ${context.cfg.layer}`)
130
+ const _service = services[alias]
131
+ if (_service == null) {
132
+ throw new SyntaxError(`Service ${alias} not found`)
166
133
  }
167
134
  if (!_service.initialized) {
168
135
  if (_service.lazyInit != null) {
@@ -180,98 +147,26 @@ export const makeBasicContext = <C extends BasicConfig>(cfg: C): BasicContext<C>
180
147
  },
181
148
 
182
149
  entrypoint: <T extends Entrypoint>(alias: string) => {
183
- const id = initializeLayer(entrypoints, context.cfg.layer, context.cfg.layerId)
184
- if (entrypoints[context.cfg.layer][id][alias] != null) {
185
- return entrypoints[context.cfg.layer][id][alias] as T
150
+ if (entrypoints[alias] != null) {
151
+ return entrypoints[alias] as T
186
152
  }
187
153
  throw new SyntaxError(`Entrypoint ${alias} not found`)
188
154
  },
189
155
 
190
- /** @deprecated use entrypoint */
191
- module: <T>(alias: string) => context.entrypoint<any>(alias) as T,
192
-
193
156
  resource: <T extends BasicResource>(alias: string) => {
194
- const id = initializeLayer(resources, context.cfg.layer, context.cfg.layerId)
195
- if (resources[context.cfg.layer][id][alias] != null) {
196
- const resource = resources[context.cfg.layer][id][alias] as T
197
-
198
- return resource
157
+ if (resources[alias] != null) {
158
+ return resources[alias] as T
199
159
  }
200
160
  throw new SyntaxError(`Resource ${alias} not found`)
201
161
  },
202
162
 
203
- entrypoints: <T extends Entrypoint>() => {
204
- const id = initializeLayer(entrypoints, context.cfg.layer, context.cfg.layerId)
205
- return Object.values(entrypoints[context.cfg.layer][id]) as T[]
206
- },
207
-
208
- /** @deprecated use entrypoints */
209
- modules: <T>() => context.entrypoints<any>() as T[],
210
-
211
- /**
212
- * @TODO Unfortunatly module cloning between contexts is quite unstable.
213
- * And it looks like in some cases it relies on modules that aren't really clonned.
214
- * The problem is that the not cloned modules are changing their context accross all context
215
- * layers and we can't rely on such behaviour.
216
- * So we disabled context update as a whole and all functionality that relies on it
217
- * cause in curent release mixed tenancy is not in use in any project and it looks like
218
- * there is no short term plans to use it some way.
219
- */
220
- updateContext: async <T>(_id?: string, _layer?: Layer) => {
221
- return context as T
222
-
223
- // const index = layersOrder.indexOf(context.cfg.layer)
224
- // layer = layer ?? (layersOrder[index + 1] != null ? layersOrder[index + 1] : undefined)
225
- // if (layer == null) {
226
- // throw new SyntaxError("There is no next layer to switch to")
227
- // }
228
-
229
- // if ([Layer.Entity, Layer.User].includes(layer) && id == null) {
230
- // throw new SyntaxError(`Cannot switch to layer ${layer} without id`)
231
- // }
232
-
233
- // id = initializeLayer(resources, layer, id)
234
-
235
- // // Cache initalized context layers
236
- // const key = `${layer}:${id}`
237
- // if (key in contexts) {
238
- // return contexts[key] as T
239
- // }
240
-
241
- // const _config: C = JSON.parse(JSON.stringify(context.cfg))
242
- // _config.layer = layer
243
- // _config.ready = false
244
- // _config.layerId = id
245
- // // @TODO we need to make a rule to store all makeContext methods after they are applied
246
- // const _context = context.makeContext != null ? context.makeContext(_config) : makeBasicContext(_config)
247
-
248
- // Object.values(middlewares).flatMap(middlewares => middlewares)
249
- // .forEach(middleware => _context.registerMiddleware(middleware))
250
-
251
- // await applyMiddlewares<C, BasicContext<C>>(_context, middlewares, MiddlewareType.Config, MiddlewareStage.Switching, { layer, id })
252
-
253
- // Object.values(allServices).forEach(service => _context.registerService(service))
254
-
255
- // Object.values(allEntrypoints).forEach(ep => _context.registerEntrypoint(ep))
256
-
257
- // Object.values(allResources).forEach(resource => _context.registerResource(resource))
258
-
259
- // await applyMiddlewares<C, BasicContext<C>>(_context, middlewares, MiddlewareType.Context, MiddlewareStage.Switching, { layer, id })
260
-
261
- // _context.stage = ContextStage.Loading
262
- // await _context.configure().init()
263
-
264
- // return (contexts[key] = _context) as T
265
- },
266
-
267
- hasResource: alias => allResources[alias] != null,
163
+ entrypoints: <T extends Entrypoint>() => Object.values(entrypoints) as T[],
268
164
 
269
- hasService: alias => allServices[alias] != null,
165
+ hasResource: alias => resources[alias] != null,
270
166
 
271
- hasEntrypoint: alias => allEntrypoints[alias] != null,
167
+ hasService: alias => services[alias] != null,
272
168
 
273
- /** @deprecated use hasEntrypoint */
274
- hasModule: alias => context.hasEntrypoint(alias),
169
+ hasEntrypoint: alias => entrypoints[alias] != null,
275
170
  }
276
171
 
277
172
  return context
package/src/helper.ts CHANGED
@@ -1,21 +1,14 @@
1
- import { Layer } from './consts.js'
2
1
  import type { Contextual, BasicContext, BasicConfig } from './types.js'
3
2
 
4
3
  export const appendContextual = <T extends Contextual>(alias: string, contextual: Partial<T>): T => {
5
4
  contextual.alias = alias
6
5
  contextual.registerContext = <T, C extends BasicConfig>(context: BasicContext<C>) => {
7
- const _contextual = contextual.ctx == null
8
- ? contextual
9
- : contextual.reinitializeContext != null
10
- ? contextual.reinitializeContext(context) : contextual
11
-
12
- // We do NOT update context when it's the same contextual with already set context
13
- // Actuall we just do not need to switch context in many on the level of context consumer
14
- if (_contextual.ctx == null) {
15
- _contextual.ctx = context
6
+ // A contextual binds to exactly one context — the first one that registers it.
7
+ if (contextual.ctx == null) {
8
+ contextual.ctx = context
16
9
  }
17
10
 
18
- return _contextual as T
11
+ return contextual as T
19
12
  }
20
13
 
21
14
  contextual.assertCtx = (
@@ -25,10 +18,6 @@ export const appendContextual = <T extends Contextual>(alias: string, contextual
25
18
  return contextual as T
26
19
  }
27
20
 
28
- // export type UpdContextType<C extends Config, T extends Context<C>, ExtraType> = T & ExtraType
29
-
30
- // export type UpdConfigType<T extends Config, ExtraType> = T & ExtraType
31
-
32
21
  /**
33
22
  * @throws {SyntaxError}
34
23
  */
@@ -38,6 +27,3 @@ export const assertContext = <C extends BasicConfig, T extends BasicContext<C>>(
38
27
  }
39
28
  return ctx as T
40
29
  }
41
-
42
- export const isContextWithoutIds = <C extends BasicConfig, T extends BasicContext<C>>(context: T): boolean =>
43
- [Layer.System, Layer.Global, Layer.Service].includes(context.cfg.layer)
package/src/types.ts CHANGED
@@ -1,13 +1,11 @@
1
- import type { AppType, ContextStage, Layer, MiddlewareStage, MiddlewareType, CONFIG_RECORD } from './consts.js'
1
+ import type { AppType, ContextStage, MiddlewareStage, MiddlewareType, CONFIG_RECORD } from './consts.js'
2
2
 
3
3
  export interface BasicConfig {
4
4
  ready: boolean
5
5
  service: string
6
6
  // Is used as username of the service (e.g. for looking up for autehntication keys)
7
7
  alias?: string
8
- layer: Layer
9
8
  type: AppType
10
- layerId?: string
11
9
  services?: Record<string, Object>
12
10
  [CONFIG_RECORD]?: ConfigRecord[]
13
11
  debug?: {
@@ -31,13 +29,11 @@ interface ConfigRecordItem extends Record<
31
29
  export interface Contextual {
32
30
  ctx?: BasicContext<any>
33
31
  alias: string
34
- reinitializeContext?: <T extends Contextual>(context: BasicContext<any>) => T // This method is a fix to replace context inside closed scope
35
32
  registerContext: <T extends Contextual, C extends BasicConfig>(context: BasicContext<C>) => T
36
33
  assertCtx: <C extends BasicConfig, T extends BasicContext<C>>(location?: string) => T
37
34
  }
38
35
 
39
36
  export interface Service extends Contextual {
40
- layers?: Layer[]
41
37
  initialized: boolean
42
38
  init?: () => Promise<void>
43
39
  lazyInit?: () => Promise<void>
@@ -56,17 +52,10 @@ export interface LazyService extends Service {
56
52
 
57
53
  export interface BasicEntrypoint extends Contextual {
58
54
  _entrypoint: true
59
- _module: true
60
- }
61
-
62
- /** @deprecated use BasicEntrypoint */
63
- export interface BasicModule extends Contextual {
64
- _module: true
65
55
  }
66
56
 
67
57
  export interface BasicResource extends Contextual {
68
- layers?: Layer[]
69
- init?: () => Promise<void> // After context switch the resource should be able to reinitialize
58
+ init?: () => Promise<void>
70
59
  }
71
60
 
72
61
  export interface Middleware {
@@ -75,6 +64,12 @@ export interface Middleware {
75
64
  apply: <C extends BasicConfig, T extends BasicContext<C>>(context: T, args?: Record<string, string | undefined>) => Promise<void>
76
65
  }
77
66
 
67
+ /**
68
+ * The DI container. One context is built per process by one factory: a layer specific
69
+ * factory composes the layer below it and then `append*` mixins register what the
70
+ * application needs. There is no child context and nothing is stored for re-creation —
71
+ * a service, a resource and an entrypoint each bind to exactly one context.
72
+ */
78
73
  export interface BasicContext<C extends BasicConfig> {
79
74
  cfg: C
80
75
  stage: ContextStage
@@ -82,7 +77,6 @@ export interface BasicContext<C extends BasicConfig> {
82
77
  waitForInitialized: () => Promise<boolean>
83
78
  configure: <T extends BasicContext<C>>() => T
84
79
  init: <T extends BasicContext<C>>() => Promise<T>
85
- updateContext: <T extends BasicContext<C>>(id?: string, to?: Layer) => Promise<T>
86
80
  registerService: <T extends BasicContext<C>>(service: Service) => T
87
81
  registerEntrypoint: <T extends BasicContext<C>>(entrypoint: BasicEntrypoint) => T
88
82
  registerEntrypoints: <T extends BasicContext<C>>(entrypoints: BasicEntrypoint[]) => T
@@ -98,17 +92,4 @@ export interface BasicContext<C extends BasicConfig> {
98
92
  hasEntrypoint: (alias: string) => boolean
99
93
 
100
94
  entrypoints: <T extends BasicEntrypoint>() => T[]
101
-
102
- /** @deprecated use registerEntrypoint */
103
- registerModule: <T extends BasicContext<C>>(module: BasicModule) => T
104
- /** @deprecated use registerEntrypoints */
105
- registerModules: <T extends BasicContext<C>>(modules: BasicModule[]) => T
106
- /** @deprecated use entrypoint */
107
- module: <T extends BasicModule>(alias: string) => T
108
- /** @deprecated use hasEntrypoint */
109
- hasModule: (alias: string) => boolean
110
- /** @deprecated use entrypoints */
111
- modules: <T extends BasicModule>() => T[]
112
-
113
- makeContext?: <T extends BasicContext<C>>(cfg: C) => T
114
95
  }
@@ -1,28 +1,10 @@
1
- import { Layer, MiddlewareStage, MiddlewareType } from '../consts.js'
2
- import type { BasicConfig, BasicContext, Middleware, BasicResource, Service } from '../types.js'
3
- import type { InLayer } from './layer.js'
1
+ import type { MiddlewareStage, MiddlewareType } from '../consts.js'
2
+ import type { BasicConfig, BasicContext, Middleware } from '../types.js'
4
3
 
5
4
  export const getMiddlerwareKey = (middleware: Middleware) => createMiddlewareKey(middleware.type, middleware.stage)
6
5
 
7
6
  export const createMiddlewareKey = (type: MiddlewareType, stage: MiddlewareStage) => `${type}:${stage}`
8
7
 
9
- export const isLayerIherited = (current: Layer, parent: Layer): boolean =>
10
- (current === parent) || (layersOrder.indexOf(parent) > layersOrder.indexOf(current))
11
-
12
- export const isResourceAvailable = (resource: BasicResource, layer: Layer) =>
13
- resource.layers == null || resource.layers.some(_layer => isLayerIherited(_layer, layer))
14
-
15
- export const layersOrder = [
16
- Layer.System,
17
- Layer.Global,
18
- Layer.Service,
19
- Layer.Entity,
20
- Layer.User
21
- ]
22
-
23
- export const getAllServices = (services: InLayer<Record<string, Service>>, layer: Layer, id: string) =>
24
- services?.[layer]?.[id] != null ? Object.values(services[layer][id]) : []
25
-
26
8
  export const applyMiddlewares = <C extends BasicConfig, T extends BasicContext<C>>(
27
9
  context: T,
28
10
  middlewares: Record<string, Middleware[]>,
@@ -1,3 +1,2 @@
1
1
 
2
2
  export * from './context.js'
3
- export * from './layer.js'
package/tests/context.ts CHANGED
@@ -1,10 +1,9 @@
1
- import { AppType, Layer, makeBasicContext } from '@owlmeans/context'
1
+ import { AppType, makeBasicContext } from '@owlmeans/context'
2
2
  import type { BasicConfig, BasicContext } from '@owlmeans/context'
3
3
 
4
4
  const baseConfig = (): BasicConfig => ({
5
5
  ready: false,
6
6
  service: 'test-context',
7
- layer: Layer.Service,
8
7
  type: AppType.Backend,
9
8
  })
10
9
 
@@ -5,7 +5,7 @@ import { makeTestCtx } from './context.js'
5
5
  describe('@owlmeans/context — service registration', () => {
6
6
  test('registers a service and resolves it by alias after initialization', async () => {
7
7
  const ctx = makeTestCtx()
8
- const stub = createService('alpha', { layers: [] })
8
+ const stub = createService('alpha', {})
9
9
  ctx.registerService(stub)
10
10
  expect(ctx.hasService('alpha')).toBe(true)
11
11
  ctx.configure()
package/build/.gitkeep DELETED
File without changes
@@ -1,6 +0,0 @@
1
- import { Layer } from '../consts';
2
- export interface InLayer<T> extends Record<Layer, Record<string, T>> {
3
- }
4
- export declare const initializeLayer: <T>(inLayer: InLayer<T>, layer: Layer, id: string | undefined) => string;
5
- export declare const DEFAULT = "default";
6
- //# sourceMappingURL=layer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"layer.d.ts","sourceRoot":"","sources":["../../src/utils/layer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AAEjC,MAAM,WAAW,OAAO,CAAC,CAAC,CAAE,SAAQ,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;CAAI;AAExE,eAAO,MAAM,eAAe,GAAI,CAAC,WAAW,OAAO,CAAC,CAAC,CAAC,SAAS,KAAK,MAAM,MAAM,GAAG,SAAS,KAAG,MAU9F,CAAA;AAED,eAAO,MAAM,OAAO,YAAY,CAAA"}
@@ -1,12 +0,0 @@
1
- export const initializeLayer = (inLayer, layer, id) => {
2
- if (inLayer[layer] == null) {
3
- inLayer[layer] = {};
4
- }
5
- id = id ?? DEFAULT;
6
- if (inLayer[layer][id] == null) {
7
- inLayer[layer][id] = {};
8
- }
9
- return id;
10
- };
11
- export const DEFAULT = 'default';
12
- //# sourceMappingURL=layer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"layer.js","sourceRoot":"","sources":["../../src/utils/layer.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,eAAe,GAAG,CAAI,OAAmB,EAAE,KAAY,EAAE,EAAsB,EAAU,EAAE;IACtG,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAA;IACrB,CAAC;IACD,EAAE,GAAG,EAAE,IAAI,OAAO,CAAA;IAClB,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,EAAO,CAAA;IAC9B,CAAC;IAED,OAAO,EAAE,CAAA;AACX,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,SAAS,CAAA"}
@@ -1,17 +0,0 @@
1
- import { Layer } from '../consts'
2
-
3
- export interface InLayer<T> extends Record<Layer, Record<string, T>> { }
4
-
5
- export const initializeLayer = <T>(inLayer: InLayer<T>, layer: Layer, id: string | undefined): string => {
6
- if (inLayer[layer] == null) {
7
- inLayer[layer] = {}
8
- }
9
- id = id ?? DEFAULT
10
- if (inLayer[layer][id] == null) {
11
- inLayer[layer][id] = {} as T
12
- }
13
-
14
- return id
15
- }
16
-
17
- export const DEFAULT = 'default'