@owlmeans/context 0.1.18-rc.6 → 0.1.18-rc.8
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.
- package/README.md +27 -6
- package/agent-meta/manifest.json +2 -2
- package/agent-meta/skills/context/SKILL.md +129 -19
- package/build/config.d.ts.map +1 -1
- package/build/config.js +0 -2
- package/build/config.js.map +1 -1
- package/build/consts.d.ts +1 -9
- package/build/consts.d.ts.map +1 -1
- package/build/consts.js +0 -9
- package/build/consts.js.map +1 -1
- package/build/context.d.ts.map +1 -1
- package/build/context.js +24 -108
- package/build/context.js.map +1 -1
- package/build/helper.d.ts +0 -1
- package/build/helper.d.ts.map +1 -1
- package/build/helper.js +4 -13
- package/build/helper.js.map +1 -1
- package/build/types.d.ts +7 -23
- package/build/types.d.ts.map +1 -1
- package/build/utils/context.d.ts +2 -7
- package/build/utils/context.d.ts.map +1 -1
- package/build/utils/context.js +0 -11
- package/build/utils/context.js.map +1 -1
- package/build/utils/index.d.ts +0 -1
- package/build/utils/index.d.ts.map +1 -1
- package/build/utils/index.js +0 -1
- package/build/utils/index.js.map +1 -1
- package/package.json +1 -1
- package/src/config.ts +1 -2
- package/src/consts.ts +1 -10
- package/src/context.ts +28 -133
- package/src/helper.ts +4 -18
- package/src/types.ts +8 -27
- package/src/utils/context.ts +2 -20
- package/src/utils/index.ts +0 -1
- package/tests/context.ts +1 -2
- package/tests/service.spec.ts +1 -1
- package/build/.gitkeep +0 -0
- package/build/utils/layer.d.ts +0 -6
- package/build/utils/layer.d.ts.map +0 -1
- package/build/utils/layer.js +0 -12
- package/build/utils/layer.js.map +0 -1
- package/src/utils/layer.ts +0 -17
package/README.md
CHANGED
|
@@ -4,15 +4,15 @@ Lightweight dependency injection and service lifecycle management for fullstack
|
|
|
4
4
|
|
|
5
5
|
## Overview
|
|
6
6
|
|
|
7
|
-
- Context holds services,
|
|
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
|
-
-
|
|
10
|
-
- Route constants (`ROOT`, `HOME`, `GUEST`, `BASE`) are used by the
|
|
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
|
|
|
14
14
|
```bash
|
|
15
|
-
bun add @owlmeans/context
|
|
15
|
+
bun add @owlmeans/context@^0.1.18-rc.7
|
|
16
16
|
```
|
|
17
17
|
|
|
18
18
|
## Usage
|
|
@@ -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
|
```
|
|
@@ -99,7 +120,7 @@ This package ships embedded agent skills under `agent-meta/`. After installing y
|
|
|
99
120
|
your project's skill store (`.agents/skills/`):
|
|
100
121
|
|
|
101
122
|
```sh
|
|
102
|
-
npx @owlmeans/agent-skills
|
|
123
|
+
npx @owlmeans/agent-skills@^0.1.18-rc.12
|
|
103
124
|
```
|
|
104
125
|
|
|
105
126
|
The embedded files are version-matched to this package release. Do not edit them
|
package/agent-meta/manifest.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 2,
|
|
3
3
|
"package": "@owlmeans/context",
|
|
4
|
-
"version": "0.1.18-rc.
|
|
5
|
-
"generatedAt": "2026-
|
|
4
|
+
"version": "0.1.18-rc.8",
|
|
5
|
+
"generatedAt": "2026-09-04T22:43:25.452Z",
|
|
6
6
|
"canonicalRepo": "https://github.com/owlmeans/common",
|
|
7
7
|
"entries": [
|
|
8
8
|
{
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: context
|
|
3
|
-
description: How to use @owlmeans/context —
|
|
3
|
+
description: How to use @owlmeans/context — the DI container behind every OwlMeans app, its service/resource/entrypoint registries, the configure/init lifecycle, createService and createLazyService, middlewares, and the shared route-alias constants. Auto-invoked when importing context primitives, registering a service, or building a makeContext factory.
|
|
4
4
|
user-invocable: false
|
|
5
5
|
---
|
|
6
6
|
<!-- AUTO-GENERATED — do not edit. Regenerate via sync-agent-meta. -->
|
|
@@ -8,46 +8,156 @@ user-invocable: false
|
|
|
8
8
|
# @owlmeans/context
|
|
9
9
|
|
|
10
10
|
**Layer:** Core
|
|
11
|
-
**Install:** `"@owlmeans/context": "^0.1.18-rc.
|
|
11
|
+
**Install:** `"@owlmeans/context": "^0.1.18-rc.8"` in `dependencies`
|
|
12
12
|
|
|
13
13
|
## Key Exports
|
|
14
14
|
|
|
15
15
|
| Export | Description |
|
|
16
16
|
|--------|-------------|
|
|
17
|
-
| `
|
|
18
|
-
| `
|
|
19
|
-
| `
|
|
20
|
-
| `service
|
|
21
|
-
| `
|
|
22
|
-
| `
|
|
23
|
-
|
|
|
17
|
+
| `makeBasicContext(cfg)` | Low-level factory — extend a layer-specific factory instead |
|
|
18
|
+
| `BasicContext<C>` | The container interface, typed by its config |
|
|
19
|
+
| `BasicConfig` | `{ ready, service, alias?, type, services?, records?, debug? }` — what every config extends |
|
|
20
|
+
| `makeBasicConfig(type, service, cfg?)` | Build the base config object a layer factory then fills in |
|
|
21
|
+
| `createService(alias, impl, init?)` | Build a service initialized during `context.init()` |
|
|
22
|
+
| `createLazyService(alias, impl, init?)` | Build a service initialized on first `context.service()` |
|
|
23
|
+
| `appendContextual(alias, obj)` | Give any object `alias` / `registerContext` / `assertCtx` |
|
|
24
|
+
| `assertContext(ctx, location?)` | Return the context or throw `SyntaxError` when it is absent |
|
|
25
|
+
| `Service` / `InitializedService` / `LazyService` | The three service shapes |
|
|
26
|
+
| `BasicResource` / `BasicEntrypoint` / `Contextual` | The other registrable shapes |
|
|
27
|
+
| `Middleware`, `MiddlewareType`, `MiddlewareStage` | Hooks that run inside `configure()` / `init()` |
|
|
28
|
+
| `AppType` | `Backend` / `Frontend` |
|
|
29
|
+
| `ContextStage` | `Configuration` → `Loading` → `Ready` |
|
|
30
|
+
| `CONFIG_RECORD` (`'records'`), `ConfigRecord` | The config-record array key, and a record in it |
|
|
31
|
+
| `ROOT`, `HOME`, `GUEST`, `BASE`, `CRASH` | Route-alias idioms every layer reuses |
|
|
24
32
|
|
|
25
|
-
##
|
|
33
|
+
## One context per process
|
|
26
34
|
|
|
27
|
-
|
|
35
|
+
A context is created ONCE by ONE factory. Extend a layer-specific factory
|
|
36
|
+
(`@owlmeans/server-context`, `@owlmeans/web-panel`, …) rather than calling the basic factory
|
|
37
|
+
directly: your factory calls the factory below it, applies its own idempotent `append*(context)`
|
|
38
|
+
mixins and service registrations, and returns that same context. There are no layered or child
|
|
39
|
+
contexts and nothing is stored for re-creation — a service, a resource and an entrypoint each bind
|
|
40
|
+
to exactly one context, the first that registers them.
|
|
28
41
|
|
|
29
42
|
```typescript
|
|
30
|
-
import {
|
|
43
|
+
import { makeServerContext } from '@owlmeans/server-context'
|
|
31
44
|
|
|
32
45
|
export const makeContext = <C extends Config, T extends Context<C>>(cfg: C): T => {
|
|
33
|
-
const context =
|
|
46
|
+
const context = makeServerContext<C, T>(cfg)
|
|
34
47
|
context.registerService(makeMyService())
|
|
35
|
-
context.makeContext = makeContext as typeof context.makeContext
|
|
36
48
|
return context
|
|
37
49
|
}
|
|
38
50
|
```
|
|
39
51
|
|
|
40
|
-
|
|
52
|
+
## Registries
|
|
53
|
+
|
|
54
|
+
Three flat maps keyed by alias. Registering the same alias twice **replaces** the earlier entry —
|
|
55
|
+
entrypoint lists are routinely spread together and the later declaration is the one the app means.
|
|
56
|
+
|
|
57
|
+
```typescript
|
|
58
|
+
context.registerService(service) // service(alias), hasService(alias)
|
|
59
|
+
context.registerResource(resource) // resource(alias), hasResource(alias)
|
|
60
|
+
context.registerEntrypoints(entrypoints) // entrypoint(alias), entrypoints(), hasEntrypoint(alias)
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Every lookup throws `SyntaxError` when the alias is unknown. Resolve a service and call another
|
|
64
|
+
service's entrypoint from a handler:
|
|
41
65
|
|
|
42
66
|
```typescript
|
|
43
67
|
const someService = ctx.service<MyService>(MY_SERVICE_ALIAS)
|
|
44
68
|
|
|
45
|
-
const
|
|
69
|
+
const response = await ctx.entrypoint<ClientEntrypoint<ResponseType>>(
|
|
46
70
|
externalService.action.alias
|
|
47
|
-
).call({ body: { ... } })
|
|
71
|
+
).call({ body: { ... } }) // call() resolves to the value; invoke() gives { value, outcome }
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Lifecycle
|
|
75
|
+
|
|
76
|
+
`configure()` runs the `Config` + `Configuration` middlewares and moves the context to `Loading`;
|
|
77
|
+
`init()` awaits that, then initializes every service, then the resources, then flips to `Ready` and
|
|
78
|
+
sets `cfg.ready`. `waitForConfigured()` and `waitForInitialized()` resolve at those two points, and
|
|
79
|
+
`await ctx.config` yields the config once configuration is done. Both calls are safe to repeat — a
|
|
80
|
+
context already past the stage returns itself unchanged.
|
|
81
|
+
|
|
82
|
+
`configure()` is **not** async: it returns the context straight away and its middlewares run
|
|
83
|
+
detached, so the stage flips to `Loading` only when they settle. Anything that must see a configured
|
|
84
|
+
context awaits `waitForConfigured()` or `init()`, never the return of `configure()`.
|
|
85
|
+
|
|
86
|
+
## Services
|
|
87
|
+
|
|
88
|
+
`createService` and `createLazyService` differ only in **when** the init function runs.
|
|
89
|
+
|
|
90
|
+
- `createService` — `init()` is awaited during `context.init()`, in registration order. Asking for
|
|
91
|
+
an uninitialized one throws `SyntaxError`.
|
|
92
|
+
- `createLazyService` — `lazyInit()` fires on the first `context.service(alias)` and the service is
|
|
93
|
+
returned immediately, before that promise settles. Choose lazy when the service must be reachable
|
|
94
|
+
while the context is still `Loading` — from an app's `makeContext`, or from another package's
|
|
95
|
+
`append*` helper — **not** because it has no async work; most lazy services do plenty of it.
|
|
96
|
+
|
|
97
|
+
```typescript
|
|
98
|
+
import { createService } from '@owlmeans/context'
|
|
99
|
+
|
|
100
|
+
export const makeMyService = (alias = MY_SERVICE) => createService<MyService>(alias, {
|
|
101
|
+
doWork: async () => { /* ... */ }
|
|
102
|
+
}, service => async () => {
|
|
103
|
+
await connect()
|
|
104
|
+
service.initialized = true
|
|
105
|
+
})
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
The init function is a factory: it receives the service and returns the actual initializer, which
|
|
109
|
+
must set `service.initialized = true`. Omit it and the service is simply marked initialized. Inside
|
|
110
|
+
any method use `service.assertCtx<Config, Context>()` to reach the context it was registered on.
|
|
111
|
+
|
|
112
|
+
### `ready()`
|
|
113
|
+
|
|
114
|
+
Both factories give the service a `ready(): Promise<boolean>` that resolves once its init function
|
|
115
|
+
has finished, and both `InitializedService` and `LazyService` declare it. It is how you wait for a
|
|
116
|
+
lazy service: the container hands the service back before `lazyInit()` settles, so anything the init
|
|
117
|
+
prepared — a database client, a loaded config, a socket — is only safe to touch after `ready()`.
|
|
118
|
+
|
|
119
|
+
```typescript
|
|
120
|
+
const mongo = ctx.service<MongoService>(MONGO_ALIAS) // this call is what triggers lazyInit
|
|
121
|
+
await mongo.ready()
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
A lazy service's init runs only when someone resolves it through `context.service(alias)`, so
|
|
125
|
+
`ready()` on a reference obtained any other way never settles.
|
|
126
|
+
|
|
127
|
+
## Middlewares
|
|
128
|
+
|
|
129
|
+
A middleware declares a `type` (`Config` or `Context`) and a `stage` (`Configuration`, `Loading` or
|
|
130
|
+
`Ready`), and that pair — not the stage alone — decides where it runs. Exactly five pairs are ever
|
|
131
|
+
applied, in this order:
|
|
132
|
+
|
|
133
|
+
| Type + stage | Where it runs |
|
|
134
|
+
|--------------|---------------|
|
|
135
|
+
| `Config` + `Configuration` | inside `configure()`, before the stage becomes `Loading` — the only hook that sees `cfg` before anything else does |
|
|
136
|
+
| `Context` + `Configuration` | first thing inside `init()` |
|
|
137
|
+
| `Config` + `Loading` | inside `init()`, **after every service has been initialized** and before the resources |
|
|
138
|
+
| `Context` + `Loading` | inside `init()`, after the resources |
|
|
139
|
+
| `Context` + `Ready` | after the stage flips to `Ready`; started but **not awaited**, so `init()` resolves without waiting for it |
|
|
140
|
+
|
|
141
|
+
`Config` + `Ready` is never applied at all — a middleware registered under that pair silently never
|
|
142
|
+
runs. All middlewares sharing a pair are applied with `Promise.all`, so they run concurrently and
|
|
143
|
+
registration order does not sequence them.
|
|
144
|
+
|
|
145
|
+
Pick the pair by what the work needs. `Config` + `Configuration` is for config that stands on its
|
|
146
|
+
own — mounted secrets, hosts read from the environment. `Config` + `Loading` is for config that has
|
|
147
|
+
to be resolved *through a running service*, because services are already initialized by then; that
|
|
148
|
+
is the stage a cluster- or vault-backed value resolver registers at, and it can `await
|
|
149
|
+
service.ready()` on the service it depends on. `Context` middlewares register or adjust what the
|
|
150
|
+
container holds.
|
|
151
|
+
|
|
152
|
+
```typescript
|
|
153
|
+
context.registerMiddleware({
|
|
154
|
+
type: MiddlewareType.Config,
|
|
155
|
+
stage: MiddlewareStage.Loading, // services are up — resolve cfg values through one of them
|
|
156
|
+
apply: async ctx => { /* mutate ctx.cfg */ }
|
|
157
|
+
})
|
|
48
158
|
```
|
|
49
159
|
|
|
50
160
|
## Depends On
|
|
51
161
|
|
|
52
|
-
- `@owlmeans/config`
|
|
53
|
-
|
|
162
|
+
- Nothing. This is the root package — `@owlmeans/config` layers the application config on top of
|
|
163
|
+
`BasicConfig`, and `@owlmeans/entrypoint` layers URL units on top of `BasicEntrypoint`.
|
package/build/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,
|
|
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,QAAQ,OAAO,WAAW,MAAM,QAAQ,OAAO,CAAC,CAAC,CAAC,KAAG,CAYzG,CAAA"}
|
package/build/config.js
CHANGED
package/build/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
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]";
|
package/build/consts.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consts.d.ts","sourceRoot":"","sources":["../src/consts.ts"],"names":[],"mappings":"AACA,oBAAY,
|
|
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]';
|
package/build/consts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consts.js","sourceRoot":"","sources":["../src/consts.ts"],"names":[],"mappings":"AACA,MAAM,CAAN,IAAY,
|
|
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"}
|
package/build/context.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,
|
|
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,OAAO,CAAC,KAAG,YAAY,CAAC,CAAC,CAsK9E,CAAA"}
|
package/build/context.js
CHANGED
|
@@ -1,20 +1,19 @@
|
|
|
1
|
-
import { ContextStage,
|
|
2
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
116
|
-
|
|
117
|
-
|
|
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
|
-
|
|
143
|
-
|
|
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
|
-
|
|
152
|
-
|
|
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
|
-
|
|
160
|
-
|
|
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
|
};
|
package/build/context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE3E,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAIxE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAwB,GAAM,EAAmB,EAAE;IACjF;;;;OAIG;IACH,MAAM,QAAQ,GAA4B,EAAE,CAAA;IAC5C,MAAM,WAAW,GAA+B,EAAE,CAAA;IAClD,MAAM,SAAS,GAAkC,EAAE,CAAA;IACnD,MAAM,WAAW,GAAiC,EAAE,CAAA;IAEpD,IAAI,SAAiC,CAAA;IACrC,IAAI,UAAmC,CAAA;IAEvC,MAAM,UAAU,GAAG,IAAI,OAAO,CAAU,OAAO,CAAC,EAAE,GAAG,SAAS,GAAG,OAAO,CAAA,CAAC,CAAC,CAAC,CAAA;IAC3E,MAAM,WAAW,GAAG,IAAI,OAAO,CAAU,OAAO,CAAC,EAAE,GAAG,UAAU,GAAG,OAAO,CAAA,CAAC,CAAC,CAAC,CAAA;IAE7E,MAAM,UAAU,GAAG,IAAI,GAAG,EAAW,CAAA;IAErC,MAAM,OAAO,GAAoB;QAC/B,GAAG;QAEH,KAAK,EAAE,YAAY,CAAC,aAAa;QAEjC,iBAAiB,EAAE,GAAG,EAAE,CAAC,UAAU;QAEnC,kBAAkB,EAAE,GAAG,EAAE,CAAC,WAAW;QAErC,SAAS,EAAE,GAAM,EAAE;YACjB,IAAI,OAAO,CAAC,KAAK,KAAK,YAAY,CAAC,aAAa,EAAE,CAAC;gBACjD,SAAS,CAAC,IAAI,CAAC,CAAA;gBACf,OAAO,OAAY,CAAA;YACrB,CAAC;YAED,KAAK,CAAC,KAAK,IAAI,EAAE;gBACf,MAAM,gBAAgB,CAAqB,OAAO,EAAE,WAAW,EAAE,cAAc,CAAC,MAAM,EAAE,eAAe,CAAC,aAAa,CAAC,CAAA;gBAEtH,OAAO,CAAC,KAAK,GAAG,YAAY,CAAC,OAAO,CAAA;gBACpC,SAAS,CAAC,IAAI,CAAC,CAAA;YACjB,CAAC,CAAC,EAAE,CAAA;YAEJ,OAAO,OAAY,CAAA;QACrB,CAAC;QAED,IAAI,EAAE,KAAK,IAAO,EAAE;YAClB,MAAM,UAAU,CAAA;YAEhB,IAAI,OAAO,CAAC,KAAK,KAAK,YAAY,CAAC,OAAO,EAAE,CAAC;gBAC3C,OAAO,OAAY,CAAA;YACrB,CAAC;YAED,MAAM,gBAAgB,CAAqB,OAAO,EAAE,WAAW,EAAE,cAAc,CAAC,OAAO,EAAE,eAAe,CAAC,aAAa,CAAC,CAAA;YAEvH,MAAM,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAClC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;gBAC1B,MAAM,QAAQ,CAAA;gBACd,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;oBACzB,IAAI,OAAO,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;wBACzB,MAAM,OAAO,CAAC,IAAI,EAAE,CAAA;oBACtB,CAAC;oBACD,IAAI,OAAO,CAAC,IAAI,IAAI,IAAI,IAAI,OAAO,CAAC,QAAQ,IAAI,IAAI,EAAE,CAAC;wBACrD,OAAO,CAAC,WAAW,GAAG,IAAI,CAAA;oBAC5B,CAAC;gBACH,CAAC;YACH,CAAC,EACC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;YAEtB,MAAM,gBAAgB,CAAqB,OAAO,EAAE,WAAW,EAAE,cAAc,CAAC,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,CAAA;YAEhH,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE;gBACjE,MAAM,QAAQ,CAAA;gBACd,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAA;YACzB,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;YAErB,MAAM,gBAAgB,CAAqB,OAAO,EAAE,WAAW,EAAE,cAAc,CAAC,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC,CAAA;YAEjH,OAAO,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK,CAAA;YAClC,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAA;YACxB,UAAU,CAAC,IAAI,CAAC,CAAA;YAEhB,KAAK,gBAAgB,CAAqB,OAAO,EAAE,WAAW,EAAE,cAAc,CAAC,OAAO,EAAE,eAAe,CAAC,KAAK,CAAC,CAAA;YAE9G,OAAO,OAAY,CAAA;QACrB,CAAC;QAED,eAAe,EAAE,CAAI,OAAgB,EAAE,EAAE;YACvC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;YAE1D,OAAO,OAAY,CAAA;QACrB,CAAC;QAED,kBAAkB,EAAE,CAAI,UAAsB,EAAE,EAAE;YAChD,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;YAEnE,OAAO,OAAY,CAAA;QACrB,CAAC;QAED,mBAAmB,EAAE,CAAI,GAAiB,EAAE,EAAE;YAC5C,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAA;YACjD,OAAO,OAAY,CAAA;QACrB,CAAC;QAED,gBAAgB,EAAE,CAAI,QAAuB,EAAE,EAAE;YAC/C,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;YAE7D,OAAO,OAAY,CAAA;QACrB,CAAC;QAED,kBAAkB,EAAE,CAAI,UAAsB,EAAE,EAAE;YAChD,MAAM,GAAG,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAA;YACzC,IAAI,CAAC,CAAC,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC;gBAC1B,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,CAAA;YACvB,CAAC;YACD,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YAEjC,OAAO,OAAY,CAAA;QACrB,CAAC;QAED,IAAI,MAAM;YACR,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAC3C,CAAC;QAED,OAAO,EAAE,CAAI,KAAa,EAAE,EAAE;YAC5B,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;YAChC,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;gBACrB,MAAM,IAAI,WAAW,CAAC,WAAW,KAAK,YAAY,CAAC,CAAA;YACrD,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;gBAC1B,IAAI,QAAQ,CAAC,QAAQ,IAAI,IAAI,EAAE,CAAC;oBAC9B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;wBAC9B,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;wBACxB,QAAQ,CAAC,QAAQ,EAAE;6BAChB,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;6BACvC,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAA;oBAC/C,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,MAAM,IAAI,WAAW,CAAC,WAAW,KAAK,qBAAqB,CAAC,CAAA;gBAC9D,CAAC;YACH,CAAC;YACD,OAAO,QAAa,CAAA;QACtB,CAAC;QAED,UAAU,EAAE,CAAuB,KAAa,EAAE,EAAE;YAClD,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;gBAC/B,OAAO,WAAW,CAAC,KAAK,CAAM,CAAA;YAChC,CAAC;YACD,MAAM,IAAI,WAAW,CAAC,cAAc,KAAK,YAAY,CAAC,CAAA;QACxD,CAAC;QAED,QAAQ,EAAE,CAA0B,KAAa,EAAE,EAAE;YACnD,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;gBAC7B,OAAO,SAAS,CAAC,KAAK,CAAM,CAAA;YAC9B,CAAC;YACD,MAAM,IAAI,WAAW,CAAC,YAAY,KAAK,YAAY,CAAC,CAAA;QACtD,CAAC;QAED,WAAW,EAAE,GAAyB,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAQ;QAE1E,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,IAAI;QAE9C,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI;QAE5C,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,IAAI;KACnD,CAAA;IAED,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA"}
|
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
|
package/build/helper.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helper.d.ts","sourceRoot":"","sources":["../src/helper.ts"],"names":[],"mappings":"
|
|
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,SAAS,MAAM,cAAc,OAAO,CAAC,CAAC,CAAC,KAAG,CAgB9F,CAAA;AAED;;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"}
|
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
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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
|
|
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
|
package/build/helper.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helper.js","sourceRoot":"","sources":["../src/helper.ts"],"names":[],"mappings":"
|
|
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"}
|