@owlmeans/context 0.1.18-rc.8 → 0.1.18

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 (67) hide show
  1. package/README.md +248 -64
  2. package/agent-meta/manifest.json +6 -6
  3. package/agent-meta/skills/owlmeans-context/SKILL.md +25 -0
  4. package/build/consts.local.d.ts +5 -0
  5. package/build/consts.local.d.ts.map +1 -0
  6. package/build/consts.local.js +6 -0
  7. package/build/consts.local.js.map +1 -0
  8. package/build/context.d.ts.map +1 -1
  9. package/build/context.js +9 -8
  10. package/build/context.js.map +1 -1
  11. package/build/index.d.ts +2 -0
  12. package/build/index.d.ts.map +1 -1
  13. package/build/index.js +1 -0
  14. package/build/index.js.map +1 -1
  15. package/build/memo/types.d.ts +14 -0
  16. package/build/memo/types.d.ts.map +1 -0
  17. package/build/memo/types.js +2 -0
  18. package/build/memo/types.js.map +1 -0
  19. package/build/memo.d.ts +4 -0
  20. package/build/memo.d.ts.map +1 -0
  21. package/build/memo.js +25 -0
  22. package/build/memo.js.map +1 -0
  23. package/build/service.d.ts +1 -4
  24. package/build/service.d.ts.map +1 -1
  25. package/build/service.js +1 -5
  26. package/build/service.js.map +1 -1
  27. package/build/types.d.ts +18 -1
  28. package/build/types.d.ts.map +1 -1
  29. package/build/types.local.d.ts +6 -0
  30. package/build/types.local.d.ts.map +1 -0
  31. package/build/types.local.js +2 -0
  32. package/build/types.local.js.map +1 -0
  33. package/build/utils/context.d.ts +7 -2
  34. package/build/utils/context.d.ts.map +1 -1
  35. package/build/utils/context.js +11 -0
  36. package/build/utils/context.js.map +1 -1
  37. package/build/utils/index.d.ts +2 -1
  38. package/build/utils/index.d.ts.map +1 -1
  39. package/build/utils/index.js +1 -1
  40. package/build/utils/index.js.map +1 -1
  41. package/build/utils/layer.d.ts +6 -0
  42. package/build/utils/layer.d.ts.map +1 -0
  43. package/build/utils/layer.js +12 -0
  44. package/build/utils/layer.js.map +1 -0
  45. package/build/utils/middleware/types.d.ts +12 -0
  46. package/build/utils/middleware/types.d.ts.map +1 -0
  47. package/build/utils/middleware/types.js +2 -0
  48. package/build/utils/middleware/types.js.map +1 -0
  49. package/build/utils/middleware.d.ts +4 -0
  50. package/build/utils/middleware.d.ts.map +1 -0
  51. package/build/utils/middleware.js +8 -0
  52. package/build/utils/middleware.js.map +1 -0
  53. package/package.json +2 -2
  54. package/src/consts.local.ts +4 -0
  55. package/src/context.ts +11 -11
  56. package/src/index.ts +2 -0
  57. package/src/memo/types.ts +13 -0
  58. package/src/memo.ts +33 -0
  59. package/src/service.ts +3 -14
  60. package/src/types.local.ts +7 -0
  61. package/src/types.ts +20 -1
  62. package/src/utils/index.ts +2 -1
  63. package/src/utils/middleware/types.ts +18 -0
  64. package/src/utils/middleware.ts +23 -0
  65. package/tests/memo.spec.ts +27 -0
  66. package/agent-meta/skills/context/SKILL.md +0 -163
  67. package/src/utils/context.ts +0 -16
@@ -1,7 +1,4 @@
1
- import type { InitializedService, LazyService, Service } from './types.js';
2
- export interface InitMethod<S extends Service> {
3
- (service: S): () => Promise<void>;
4
- }
1
+ import type { InitializedService, LazyService, InitMethod } from './types.js';
5
2
  export declare const createService: <S extends InitializedService>(alias: string, service: Partial<S>, init?: InitMethod<S>) => S;
6
3
  export declare const createLazyService: <S extends LazyService>(alias: string, service: Partial<S>, init?: InitMethod<S>) => S;
7
4
  //# sourceMappingURL=service.d.ts.map
@@ -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,EAAW,UAAU,EAAE,MAAM,YAAY,CAAA;AA8BlG,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"}
package/build/service.js CHANGED
@@ -1,9 +1,5 @@
1
1
  import { appendContextual } from './helper.js';
2
- var TypeToMethod;
3
- (function (TypeToMethod) {
4
- TypeToMethod["Lazy"] = "lazyInit";
5
- TypeToMethod["Initialized"] = "init";
6
- })(TypeToMethod || (TypeToMethod = {}));
2
+ import { TypeToMethod } from './consts.local.js';
7
3
  const _createService = (type) => (alias, service, init) => {
8
4
  if (service.registerContext == null) {
9
5
  appendContextual(alias, service);
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAG9C,IAAK,YAGJ;AAHD,WAAK,YAAY;IACf,iCAAiB,CAAA;IACjB,oCAAoB,CAAA;AACtB,CAAC,EAHI,YAAY,KAAZ,YAAY,QAGhB;AAUD,MAAM,cAAc,GAAG,CAAoB,IAAkB,EAAoB,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;IAC3G,IAAI,OAAO,CAAC,eAAe,IAAI,IAAI,EAAE,CAAC;QACpC,gBAAgB,CAAC,KAAK,EAAE,OAAqB,CAAC,CAAA;IAChD,CAAC;IAED,IAAI,UAAkC,CAAA;IACtC,MAAM,KAAK,GAAG,IAAI,OAAO,CAAU,OAAO,CAAC,EAAE,GAAG,UAAU,GAAG,OAAO,CAAA,CAAC,CAAC,CAAC,CAAA;IAEvE,OAAO,CAAC,KAAK,GAAG,KAAK,CAAA;IAErB,OAAO,CAAC,WAAW,GAAG,KAAK,CAAA;IAE3B,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,EAAE;QAC/B,OAAO,CAAC,WAAW,GAAG,IAAI,CAAA;IAC5B,CAAC,CAAC,CAAA;IAEF,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,EAAE;QACzB,MAAM,IAAI,CAAC,OAAY,CAAC,EAAE,CAAA;QAC1B,UAAU,CAAC,IAAI,CAAC,CAAA;IAClB,CAAC,CAAA;IAED,OAAO,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC,KAAK,CAAA;IAE3B,OAAO,OAAY,CAAA;AACrB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,KAAa,EAAE,OAAmB,EAAE,IAAoB,EACrD,EAAE,CAAC,cAAc,CAAI,YAAY,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;AAEzE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,KAAa,EAAE,OAAmB,EAAE,IAAoB,EACrD,EAAE,CAAC,cAAc,CAAI,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE9C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGhD,MAAM,cAAc,GAAG,CAAoB,IAAkB,EAAoB,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;IAC3G,IAAI,OAAO,CAAC,eAAe,IAAI,IAAI,EAAE,CAAC;QACpC,gBAAgB,CAAC,KAAK,EAAE,OAAqB,CAAC,CAAA;IAChD,CAAC;IAED,IAAI,UAAkC,CAAA;IACtC,MAAM,KAAK,GAAG,IAAI,OAAO,CAAU,OAAO,CAAC,EAAE,GAAG,UAAU,GAAG,OAAO,CAAA,CAAC,CAAC,CAAC,CAAA;IAEvE,OAAO,CAAC,KAAK,GAAG,KAAK,CAAA;IAErB,OAAO,CAAC,WAAW,GAAG,KAAK,CAAA;IAE3B,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,EAAE;QAC/B,OAAO,CAAC,WAAW,GAAG,IAAI,CAAA;IAC5B,CAAC,CAAC,CAAA;IAEF,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,EAAE;QACzB,MAAM,IAAI,CAAC,OAAY,CAAC,EAAE,CAAA;QAC1B,UAAU,CAAC,IAAI,CAAC,CAAA;IAClB,CAAC,CAAA;IAED,OAAO,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC,KAAK,CAAA;IAE3B,OAAO,OAAY,CAAA;AACrB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,KAAa,EAAE,OAAmB,EAAE,IAAoB,EACrD,EAAE,CAAC,cAAc,CAAI,YAAY,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;AAEzE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,KAAa,EAAE,OAAmB,EAAE,IAAoB,EACrD,EAAE,CAAC,cAAc,CAAI,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA"}
package/build/types.d.ts CHANGED
@@ -41,6 +41,17 @@ export interface LazyService extends Service {
41
41
  export interface BasicEntrypoint extends Contextual {
42
42
  _entrypoint: true;
43
43
  }
44
+ /**
45
+ * A stable reference to an entrypoint registered in a context.
46
+ *
47
+ * Contract packages use this instead of exporting raw alias strings. The optional type member is
48
+ * deliberately phantom: it lets `context.entrypoint(protocol)` infer the context-bound module
49
+ * without changing the wire alias or adding registry-wide declaration merging.
50
+ */
51
+ export interface EntrypointReference<T extends BasicEntrypoint = BasicEntrypoint> {
52
+ readonly alias: string;
53
+ readonly entrypointType?: T;
54
+ }
44
55
  export interface BasicResource extends Contextual {
45
56
  init?: () => Promise<void>;
46
57
  }
@@ -69,12 +80,18 @@ export interface BasicContext<C extends BasicConfig> {
69
80
  registerMiddleware: <T extends BasicContext<C>>(middleware: Middleware) => T;
70
81
  get config(): Promise<C>;
71
82
  service: <T extends Service>(alias: string) => T;
72
- entrypoint: <T extends BasicEntrypoint>(alias: string) => T;
83
+ entrypoint: {
84
+ <T extends BasicEntrypoint>(reference: EntrypointReference<T>): T;
85
+ <T extends BasicEntrypoint>(reference: EntrypointReference | string): T;
86
+ };
73
87
  resource: <T extends BasicResource>(alias: string) => T;
74
88
  hasResource: (alias: string) => boolean;
75
89
  hasService: (alias: string) => boolean;
76
90
  hasEntrypoint: (alias: string) => boolean;
77
91
  entrypoints: <T extends BasicEntrypoint>() => T[];
78
92
  }
93
+ export interface InitMethod<S extends Service> {
94
+ (service: S): () => Promise<void>;
95
+ }
79
96
  export {};
80
97
  //# 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":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAExG,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,OAAO,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IAEf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,OAAO,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACjC,CAAC,aAAa,CAAC,CAAC,EAAE,YAAY,EAAE,CAAA;IAChC,KAAK,CAAC,EAAE;QACN,GAAG,CAAC,EAAE,OAAO,CAAA;QACb,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAA;KACvC,CAAA;CACF;AAED,MAAM,WAAW,YAAa,SAAQ,gBAAgB;IACpD,EAAE,EAAE,MAAM,CAAA;CACX;AAED,KAAK,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAA;AAE5B,UAAU,gBAAiB,SAAQ,MAAM,CACvC,MAAM,EACN,UAAU,CAAC,gBAAgB,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IAC5E,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,CAAA;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,eAAe,EAAE,CAAC,CAAC,SAAS,UAAU,EAAE,CAAC,SAAS,WAAW,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IAC7F,SAAS,EAAE,CAAC,CAAC,SAAS,WAAW,EAAE,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,CAAC,CAAA;CACtF;AAED,MAAM,WAAW,OAAQ,SAAQ,UAAU;IACzC,WAAW,EAAE,OAAO,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1B,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9B,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;CAC/B;AAED,MAAM,WAAW,kBAAmB,SAAQ,OAAO;IACjD,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACzB,KAAK,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;CAC9B;AAED,MAAM,WAAW,WAAY,SAAQ,OAAO;IAC1C,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7B,KAAK,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;CAC9B;AAED,MAAM,WAAW,eAAgB,SAAQ,UAAU;IACjD,WAAW,EAAE,IAAI,CAAA;CAClB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB,CAAC,CAAC,SAAS,eAAe,GAAG,eAAe;IAC9E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAA;CAC5B;AAED,MAAM,WAAW,aAAc,SAAQ,UAAU;IAC/C,IAAI,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,cAAc,CAAA;IACpB,KAAK,EAAE,eAAe,CAAA;IACtB,KAAK,EAAE,CAAC,CAAC,SAAS,WAAW,EAAE,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAClI;AAED;;;;;GAKG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,WAAW;IACjD,GAAG,EAAE,CAAC,CAAA;IACN,KAAK,EAAE,YAAY,CAAA;IACnB,iBAAiB,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IACzC,kBAAkB,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IAC1C,SAAS,EAAE,CAAC,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;IAC7C,IAAI,EAAE,CAAC,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,CAAC,CAAA;IACjD,eAAe,EAAE,CAAC,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,KAAK,CAAC,CAAA;IACnE,kBAAkB,EAAE,CAAC,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,eAAe,KAAK,CAAC,CAAA;IACjF,mBAAmB,EAAE,CAAC,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,eAAe,EAAE,KAAK,CAAC,CAAA;IACrF,gBAAgB,EAAE,CAAC,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,aAAa,KAAK,CAAC,CAAA;IAC3E,kBAAkB,EAAE,CAAC,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,KAAK,CAAC,CAAA;IAE5E,IAAI,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,CAAA;IACxB,OAAO,EAAE,CAAC,CAAC,SAAS,OAAO,EAAE,KAAK,EAAE,MAAM,KAAK,CAAC,CAAA;IAChD,UAAU,EAAE;QACV,CAAC,CAAC,SAAS,eAAe,EAAE,SAAS,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QACjE,CAAC,CAAC,SAAS,eAAe,EAAE,SAAS,EAAE,mBAAmB,GAAG,MAAM,GAAG,CAAC,CAAA;KACxE,CAAA;IACD,QAAQ,EAAE,CAAC,CAAC,SAAS,aAAa,EAAE,KAAK,EAAE,MAAM,KAAK,CAAC,CAAA;IACvD,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAA;IACvC,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAA;IACtC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAA;IAEzC,WAAW,EAAE,CAAC,CAAC,SAAS,eAAe,OAAO,CAAC,EAAE,CAAA;CAClD;AAED,MAAM,WAAW,UAAU,CAAC,CAAC,SAAS,OAAO;IAC3C,CAAC,OAAO,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAClC"}
@@ -0,0 +1,6 @@
1
+ import type { BasicEntrypoint, Service, InitMethod } from './types.js';
2
+ export type Entrypoint = BasicEntrypoint;
3
+ export interface CreateService<S extends Service> {
4
+ (alias: string, service: Partial<S>, init?: InitMethod<S>): S;
5
+ }
6
+ //# sourceMappingURL=types.local.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.local.d.ts","sourceRoot":"","sources":["../src/types.local.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAEtE,MAAM,MAAM,UAAU,GAAG,eAAe,CAAA;AAExC,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,OAAO;IAC9C,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;CAC9D"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.local.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.local.js","sourceRoot":"","sources":["../src/types.local.ts"],"names":[],"mappings":""}
@@ -1,6 +1,11 @@
1
- import type { MiddlewareStage, MiddlewareType } from '../consts.js';
2
- import type { BasicConfig, BasicContext, Middleware } from '../types.js';
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';
3
4
  export declare const getMiddlerwareKey: (middleware: Middleware) => string;
4
5
  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[];
5
10
  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[]>;
6
11
  //# sourceMappingURL=context.d.ts.map
@@ -1 +1 @@
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,eAAgB,UAAU,WAA2D,CAAA;AAEnH,eAAO,MAAM,mBAAmB,SAAU,cAAc,SAAS,eAAe,WAAuB,CAAA;AAEvG,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,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,GAAI,YAAY,UAAU,WAA2D,CAAA;AAEnH,eAAO,MAAM,mBAAmB,GAAI,MAAM,cAAc,EAAE,OAAO,eAAe,WAAuB,CAAA;AAEvG,eAAO,MAAM,eAAe,GAAI,SAAS,KAAK,EAAE,QAAQ,KAAK,KAAG,OACsB,CAAA;AAEtF,eAAO,MAAM,mBAAmB,GAAI,UAAU,aAAa,EAAE,OAAO,KAAK,YACkB,CAAA;AAE3F,eAAO,MAAM,WAAW,SAMvB,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,UAAU,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,KAAK,EAAE,IAAI,MAAM,cACxB,CAAA;AAE3E,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,4 +1,15 @@
1
+ import { Layer } from '../consts.js';
1
2
  export const getMiddlerwareKey = (middleware) => createMiddlewareKey(middleware.type, middleware.stage);
2
3
  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]) : [];
3
14
  export const applyMiddlewares = (context, middlewares, type, stage, args) => Promise.all(middlewares[createMiddlewareKey(type, stage)]?.map(async (middleware) => middleware.apply(context, args)) ?? []);
4
15
  //# sourceMappingURL=context.js.map
@@ -1 +1 @@
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
+ {"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,2 +1,3 @@
1
- export * from './context.js';
1
+ export type * from './middleware/types.js';
2
+ export * from './middleware.js';
2
3
  //# 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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AACA,mBAAmB,uBAAuB,CAAA;AAC1C,cAAc,iBAAiB,CAAA"}
@@ -1,2 +1,2 @@
1
- export * from './context.js';
1
+ export * from './middleware.js';
2
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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAEA,cAAc,iBAAiB,CAAA"}
@@ -0,0 +1,6 @@
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
@@ -0,0 +1 @@
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,EAAE,SAAS,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK,EAAE,IAAI,MAAM,GAAG,SAAS,KAAG,MAU9F,CAAA;AAED,eAAO,MAAM,OAAO,YAAY,CAAA"}
@@ -0,0 +1,12 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,12 @@
1
+ import type { MiddlewareStage, MiddlewareType } from '../../consts.js';
2
+ import type { BasicConfig, BasicContext, Middleware } from '../../types.js';
3
+ /** The middleware registry keys and the staged application of the middlewares a context holds. */
4
+ export interface MiddlewareUtils {
5
+ /** The registry key a middleware is filed under: its type and stage. */
6
+ getMiddlerwareKey: (middleware: Middleware) => string;
7
+ /** The registry key of one middleware type at one stage. */
8
+ createMiddlewareKey: (type: MiddlewareType, stage: MiddlewareStage) => string;
9
+ /** Applies, in parallel, every middleware registered for the type at the stage. */
10
+ 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
+ }
12
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/utils/middleware/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAE3E,kGAAkG;AAClG,MAAM,WAAW,eAAe;IAC9B,wEAAwE;IACxE,iBAAiB,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,MAAM,CAAA;IACrD,4DAA4D;IAC5D,mBAAmB,EAAE,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,eAAe,KAAK,MAAM,CAAA;IAC7E,mFAAmF;IACnF,gBAAgB,EAAE,CAAC,CAAC,SAAS,WAAW,EAAE,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EACjE,OAAO,EAAE,CAAC,EACV,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,EACzC,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,eAAe,EACtB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,KACtC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;CACrB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/utils/middleware/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import type { MiddlewareUtils } from './middleware/types.js';
2
+ export declare const createMiddlewareUtils: () => MiddlewareUtils;
3
+ export declare const middlewareUtils: MiddlewareUtils;
4
+ //# sourceMappingURL=middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/utils/middleware.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAE5D,eAAO,MAAM,qBAAqB,QAAO,eAgBxC,CAAA;AAED,eAAO,MAAM,eAAe,iBAA0B,CAAA"}
@@ -0,0 +1,8 @@
1
+ export const createMiddlewareUtils = () => {
2
+ const createMiddlewareKey = (type, stage) => `${type}:${stage}`;
3
+ const getMiddlerwareKey = (middleware) => createMiddlewareKey(middleware.type, middleware.stage);
4
+ const applyMiddlewares = (context, middlewares, type, stage, args) => Promise.all(middlewares[createMiddlewareKey(type, stage)]?.map(async (middleware) => middleware.apply(context, args)) ?? []);
5
+ return { getMiddlerwareKey, createMiddlewareKey, applyMiddlewares };
6
+ };
7
+ export const middlewareUtils = createMiddlewareUtils();
8
+ //# sourceMappingURL=middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/utils/middleware.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAoB,EAAE;IACzD,MAAM,mBAAmB,GAAG,CAAC,IAAoB,EAAE,KAAsB,EAAU,EAAE,CAAC,GAAG,IAAI,IAAI,KAAK,EAAE,CAAA;IAExG,MAAM,iBAAiB,GAAG,CAAC,UAAsB,EAAU,EAAE,CAAC,mBAAmB,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,CAAA;IAEpH,MAAM,gBAAgB,GAAG,CACvB,OAAU,EACV,WAAyC,EACzC,IAAoB,EACpB,KAAsB,EACtB,IAAyC,EACxB,EAAE,CAAC,OAAO,CAAC,GAAG,CAC/B,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;IAED,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,CAAA;AACrE,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,qBAAqB,EAAE,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@owlmeans/context",
3
- "version": "0.1.18-rc.8",
3
+ "version": "0.1.18",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -22,7 +22,7 @@
22
22
  }
23
23
  },
24
24
  "devDependencies": {
25
- "@owlmeans/dep-config": "workspace:*",
25
+ "@owlmeans/dep-config": "^0.1.18",
26
26
  "nodemon": "^3.1.14",
27
27
  "typescript": "^7.0.2"
28
28
  },
@@ -0,0 +1,4 @@
1
+ export enum TypeToMethod {
2
+ Lazy = 'lazyInit',
3
+ Initialized = 'init'
4
+ }
package/src/context.ts CHANGED
@@ -1,8 +1,7 @@
1
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'
4
-
5
- type Entrypoint = BasicEntrypoint
2
+ import type { BasicConfig, BasicContext, Middleware, BasicResource, EntrypointReference, Service } from './types.js'
3
+ import { middlewareUtils } from './utils/middleware.js'
4
+ import type { Entrypoint } from './types.local.js'
6
5
 
7
6
  export const makeBasicContext = <C extends BasicConfig>(cfg: C): BasicContext<C> => {
8
7
  /**
@@ -39,7 +38,7 @@ export const makeBasicContext = <C extends BasicConfig>(cfg: C): BasicContext<C>
39
38
  }
40
39
 
41
40
  void (async () => {
42
- await applyMiddlewares<C, BasicContext<C>>(context, middlewares, MiddlewareType.Config, MiddlewareStage.Configuration)
41
+ await middlewareUtils.applyMiddlewares<C, BasicContext<C>>(context, middlewares, MiddlewareType.Config, MiddlewareStage.Configuration)
43
42
 
44
43
  context.stage = ContextStage.Loading
45
44
  configure(true)
@@ -55,7 +54,7 @@ export const makeBasicContext = <C extends BasicConfig>(cfg: C): BasicContext<C>
55
54
  return context as T
56
55
  }
57
56
 
58
- await applyMiddlewares<C, BasicContext<C>>(context, middlewares, MiddlewareType.Context, MiddlewareStage.Configuration)
57
+ await middlewareUtils.applyMiddlewares<C, BasicContext<C>>(context, middlewares, MiddlewareType.Context, MiddlewareStage.Configuration)
59
58
 
60
59
  await Object.values(services).reduce(
61
60
  async (previous, service) => {
@@ -71,20 +70,20 @@ export const makeBasicContext = <C extends BasicConfig>(cfg: C): BasicContext<C>
71
70
  }
72
71
  , Promise.resolve())
73
72
 
74
- await applyMiddlewares<C, BasicContext<C>>(context, middlewares, MiddlewareType.Config, MiddlewareStage.Loading)
73
+ await middlewareUtils.applyMiddlewares<C, BasicContext<C>>(context, middlewares, MiddlewareType.Config, MiddlewareStage.Loading)
75
74
 
76
75
  await Object.values(resources).reduce(async (previous, resource) => {
77
76
  await previous
78
77
  await resource.init?.()
79
78
  }, Promise.resolve())
80
79
 
81
- await applyMiddlewares<C, BasicContext<C>>(context, middlewares, MiddlewareType.Context, MiddlewareStage.Loading)
80
+ await middlewareUtils.applyMiddlewares<C, BasicContext<C>>(context, middlewares, MiddlewareType.Context, MiddlewareStage.Loading)
82
81
 
83
82
  context.stage = ContextStage.Ready
84
83
  context.cfg.ready = true
85
84
  initialize(true)
86
85
 
87
- void applyMiddlewares<C, BasicContext<C>>(context, middlewares, MiddlewareType.Context, MiddlewareStage.Ready)
86
+ void middlewareUtils.applyMiddlewares<C, BasicContext<C>>(context, middlewares, MiddlewareType.Context, MiddlewareStage.Ready)
88
87
 
89
88
  return context as T
90
89
  },
@@ -113,7 +112,7 @@ export const makeBasicContext = <C extends BasicConfig>(cfg: C): BasicContext<C>
113
112
  },
114
113
 
115
114
  registerMiddleware: <T>(middleware: Middleware) => {
116
- const key = getMiddlerwareKey(middleware)
115
+ const key = middlewareUtils.getMiddlerwareKey(middleware)
117
116
  if (!(key in middlewares)) {
118
117
  middlewares[key] = []
119
118
  }
@@ -146,7 +145,8 @@ export const makeBasicContext = <C extends BasicConfig>(cfg: C): BasicContext<C>
146
145
  return _service as T
147
146
  },
148
147
 
149
- entrypoint: <T extends Entrypoint>(alias: string) => {
148
+ entrypoint: <T extends Entrypoint>(reference: EntrypointReference<T> | string) => {
149
+ const alias = typeof reference === 'string' ? reference : reference.alias
150
150
  if (entrypoints[alias] != null) {
151
151
  return entrypoints[alias] as T
152
152
  }
package/src/index.ts CHANGED
@@ -1,7 +1,9 @@
1
1
 
2
2
  export type * from './types.js'
3
+ export type * from './memo/types.js'
3
4
  export * from './consts.js'
4
5
  export * from './context.js'
5
6
  export * from './service.js'
6
7
  export * from './helper.js'
7
8
  export * from './config.js'
9
+ export * from './memo.js'
@@ -0,0 +1,13 @@
1
+ /** Lazy, memoized construction — the seam bound objects are reached through. */
2
+ export interface MemoHelper {
3
+ /**
4
+ * A thunk that builds its value on the first call and answers the same value after. A flag, not
5
+ * `undefined`, marks it built, so a builder that returns `undefined` still runs once.
6
+ */
7
+ once: <T>(build: () => T) => () => T
8
+ /**
9
+ * One `make(target)` per target object: built on first use for that target and released with it
10
+ * (a WeakMap), so a context, a request or a collaborator gets exactly one bound object.
11
+ */
12
+ oncePer: <K extends object, T>(make: (target: K) => T) => (target: K) => T
13
+ }
package/src/memo.ts ADDED
@@ -0,0 +1,33 @@
1
+ import type { MemoHelper } from './memo/types.js'
2
+
3
+ export const createMemoHelper = (): MemoHelper => {
4
+ const once = <T>(build: () => T): (() => T) => {
5
+ let built = false
6
+ let value: T | undefined
7
+
8
+ return () => {
9
+ if (!built) {
10
+ value = build()
11
+ built = true
12
+ }
13
+
14
+ return value as T
15
+ }
16
+ }
17
+
18
+ const oncePer = <K extends object, T>(make: (target: K) => T): ((target: K) => T) => {
19
+ const made = new WeakMap<K, T>()
20
+
21
+ return target => {
22
+ if (!made.has(target)) {
23
+ made.set(target, make(target))
24
+ }
25
+
26
+ return made.get(target) as T
27
+ }
28
+ }
29
+
30
+ return { once, oncePer }
31
+ }
32
+
33
+ export const memoHelper = createMemoHelper()
package/src/service.ts CHANGED
@@ -1,18 +1,7 @@
1
1
  import { appendContextual } from './helper.js'
2
- import type { Contextual, InitializedService, LazyService, Service } from './types.js'
3
-
4
- enum TypeToMethod {
5
- Lazy = 'lazyInit',
6
- Initialized = 'init'
7
- }
8
-
9
- export interface InitMethod<S extends Service> {
10
- (service: S): () => Promise<void>
11
- }
12
-
13
- interface CreateService<S extends Service> {
14
- (alias: string, service: Partial<S>, init?: InitMethod<S>): S
15
- }
2
+ import type { Contextual, InitializedService, LazyService, Service, InitMethod } from './types.js'
3
+ import { TypeToMethod } from './consts.local.js'
4
+ import type { CreateService } from './types.local.js'
16
5
 
17
6
  const _createService = <S extends Service>(type: TypeToMethod): CreateService<S> => (alias, service, init) => {
18
7
  if (service.registerContext == null) {
@@ -0,0 +1,7 @@
1
+ import type { BasicEntrypoint, Service, InitMethod } from './types.js'
2
+
3
+ export type Entrypoint = BasicEntrypoint
4
+
5
+ export interface CreateService<S extends Service> {
6
+ (alias: string, service: Partial<S>, init?: InitMethod<S>): S
7
+ }
package/src/types.ts CHANGED
@@ -54,6 +54,18 @@ export interface BasicEntrypoint extends Contextual {
54
54
  _entrypoint: true
55
55
  }
56
56
 
57
+ /**
58
+ * A stable reference to an entrypoint registered in a context.
59
+ *
60
+ * Contract packages use this instead of exporting raw alias strings. The optional type member is
61
+ * deliberately phantom: it lets `context.entrypoint(protocol)` infer the context-bound module
62
+ * without changing the wire alias or adding registry-wide declaration merging.
63
+ */
64
+ export interface EntrypointReference<T extends BasicEntrypoint = BasicEntrypoint> {
65
+ readonly alias: string
66
+ readonly entrypointType?: T
67
+ }
68
+
57
69
  export interface BasicResource extends Contextual {
58
70
  init?: () => Promise<void>
59
71
  }
@@ -85,7 +97,10 @@ export interface BasicContext<C extends BasicConfig> {
85
97
 
86
98
  get config(): Promise<C>
87
99
  service: <T extends Service>(alias: string) => T
88
- entrypoint: <T extends BasicEntrypoint>(alias: string) => T
100
+ entrypoint: {
101
+ <T extends BasicEntrypoint>(reference: EntrypointReference<T>): T
102
+ <T extends BasicEntrypoint>(reference: EntrypointReference | string): T
103
+ }
89
104
  resource: <T extends BasicResource>(alias: string) => T
90
105
  hasResource: (alias: string) => boolean
91
106
  hasService: (alias: string) => boolean
@@ -93,3 +108,7 @@ export interface BasicContext<C extends BasicConfig> {
93
108
 
94
109
  entrypoints: <T extends BasicEntrypoint>() => T[]
95
110
  }
111
+
112
+ export interface InitMethod<S extends Service> {
113
+ (service: S): () => Promise<void>
114
+ }
@@ -1,2 +1,3 @@
1
1
 
2
- export * from './context.js'
2
+ export type * from './middleware/types.js'
3
+ export * from './middleware.js'
@@ -0,0 +1,18 @@
1
+ import type { MiddlewareStage, MiddlewareType } from '../../consts.js'
2
+ import type { BasicConfig, BasicContext, Middleware } from '../../types.js'
3
+
4
+ /** The middleware registry keys and the staged application of the middlewares a context holds. */
5
+ export interface MiddlewareUtils {
6
+ /** The registry key a middleware is filed under: its type and stage. */
7
+ getMiddlerwareKey: (middleware: Middleware) => string
8
+ /** The registry key of one middleware type at one stage. */
9
+ createMiddlewareKey: (type: MiddlewareType, stage: MiddlewareStage) => string
10
+ /** Applies, in parallel, every middleware registered for the type at the stage. */
11
+ applyMiddlewares: <C extends BasicConfig, T extends BasicContext<C>>(
12
+ context: T,
13
+ middlewares: Record<string, Middleware[]>,
14
+ type: MiddlewareType,
15
+ stage: MiddlewareStage,
16
+ args?: Record<string, string | undefined>
17
+ ) => Promise<void[]>
18
+ }
@@ -0,0 +1,23 @@
1
+ import type { MiddlewareStage, MiddlewareType } from '../consts.js'
2
+ import type { BasicConfig, BasicContext, Middleware } from '../types.js'
3
+ import type { MiddlewareUtils } from './middleware/types.js'
4
+
5
+ export const createMiddlewareUtils = (): MiddlewareUtils => {
6
+ const createMiddlewareKey = (type: MiddlewareType, stage: MiddlewareStage): string => `${type}:${stage}`
7
+
8
+ const getMiddlerwareKey = (middleware: Middleware): string => createMiddlewareKey(middleware.type, middleware.stage)
9
+
10
+ const applyMiddlewares = <C extends BasicConfig, T extends BasicContext<C>>(
11
+ context: T,
12
+ middlewares: Record<string, Middleware[]>,
13
+ type: MiddlewareType,
14
+ stage: MiddlewareStage,
15
+ args?: Record<string, string | undefined>
16
+ ): Promise<void[]> => Promise.all(
17
+ middlewares[createMiddlewareKey(type, stage)]?.map(async middleware => middleware.apply<C, T>(context, args)) ?? []
18
+ )
19
+
20
+ return { getMiddlerwareKey, createMiddlewareKey, applyMiddlewares }
21
+ }
22
+
23
+ export const middlewareUtils = createMiddlewareUtils()
@@ -0,0 +1,27 @@
1
+ import { describe, expect, test } from 'bun:test'
2
+ import { createMemoHelper, memoHelper } from '../src/memo.js'
3
+
4
+ describe('@owlmeans/context — memoHelper', () => {
5
+ test('once builds on the first call only, even when the value is undefined', () => {
6
+ let builds = 0
7
+ const lazy = memoHelper.once(() => { builds++; return undefined })
8
+ expect(builds).toBe(0)
9
+ lazy(); lazy(); lazy()
10
+ expect(builds).toBe(1)
11
+ })
12
+
13
+ test('once answers the same object every time', () => {
14
+ const lazy = memoHelper.once(() => ({ id: Math.random() }))
15
+ expect(lazy()).toBe(lazy())
16
+ })
17
+
18
+ test('oncePer builds one value per target and keeps targets apart', () => {
19
+ let builds = 0
20
+ const helperOf = createMemoHelper().oncePer((ctx: { name: string }) => { builds++; return { owner: ctx.name } })
21
+ const a = { name: 'a' }
22
+ const b = { name: 'b' }
23
+ expect(helperOf(a)).toBe(helperOf(a))
24
+ expect(helperOf(b).owner).toBe('b')
25
+ expect(builds).toBe(2)
26
+ })
27
+ })