@owlmeans/router 0.1.14 → 0.1.15
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/agent-meta/instructions/router.instructions.md +9 -1
- package/agent-meta/manifest.json +2 -2
- package/agent-meta/skills/router/SKILL.md +10 -1
- package/build/service.d.ts +7 -0
- package/build/service.d.ts.map +1 -1
- package/build/service.js +9 -2
- package/build/service.js.map +1 -1
- package/build/types.d.ts +2 -2
- package/build/types.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/service.ts +9 -2
- package/src/types.ts +2 -2
|
@@ -7,7 +7,7 @@ applyTo: "**/*.ts, **/*.tsx"
|
|
|
7
7
|
# @owlmeans/router
|
|
8
8
|
|
|
9
9
|
**Layer:** Core (L1)
|
|
10
|
-
**Install:** `"@owlmeans/router": "^0.1.
|
|
10
|
+
**Install:** `"@owlmeans/router": "^0.1.15"` in `dependencies`
|
|
11
11
|
|
|
12
12
|
The plugin **host** for OwlMeans UI routing. Defines the contract, holds a registry of routing
|
|
13
13
|
plugins, and selects the active one by cascade. Concrete mechanics are plugins:
|
|
@@ -35,6 +35,14 @@ import { ROUTER_SERVICE } from '@owlmeans/router'
|
|
|
35
35
|
ctx.service(ROUTER_SERVICE).useParams() // delegates to the active plugin
|
|
36
36
|
```
|
|
37
37
|
|
|
38
|
+
## The host is a LAZY service
|
|
39
|
+
|
|
40
|
+
`makeRouterService` builds a **lazy** service (`createLazyService`) — the host has no async setup,
|
|
41
|
+
and plugin packages must reach it from an app's `makeContext`, i.e. while the context is still in
|
|
42
|
+
the Loading stage. `context.service()` throws for an uninitialized non-lazy service, which would
|
|
43
|
+
break `ensureRouterService` (and every `appendXxxRouter` on an existing host) exactly where apps
|
|
44
|
+
are told to call them. Keep it lazy when extending the host.
|
|
45
|
+
|
|
38
46
|
## Depends On
|
|
39
47
|
|
|
40
48
|
- `@owlmeans/context`; peer `react` (types only — no react-router, no DOM here)
|
package/agent-meta/manifest.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"package": "@owlmeans/router",
|
|
4
|
-
"version": "0.1.
|
|
5
|
-
"generatedAt": "2026-08-
|
|
4
|
+
"version": "0.1.15",
|
|
5
|
+
"generatedAt": "2026-08-07T17:06:32.907Z",
|
|
6
6
|
"canonicalRepo": "https://github.com/owlmeans/common",
|
|
7
7
|
"entries": [
|
|
8
8
|
{
|
|
@@ -8,7 +8,7 @@ user-invocable: false
|
|
|
8
8
|
# @owlmeans/router
|
|
9
9
|
|
|
10
10
|
**Layer:** Core (L1)
|
|
11
|
-
**Install:** `"@owlmeans/router": "^0.1.
|
|
11
|
+
**Install:** `"@owlmeans/router": "^0.1.15"` in `dependencies`
|
|
12
12
|
|
|
13
13
|
`@owlmeans/router` is the **plugin host** for OwlMeans UI routing. It does not talk to any
|
|
14
14
|
concrete router; it defines the contract, holds a registry of routing plugins, and selects the
|
|
@@ -42,6 +42,15 @@ import { ROUTER_SERVICE } from '@owlmeans/router'
|
|
|
42
42
|
const params = ctx.service(ROUTER_SERVICE).useParams() // delegates to the active plugin
|
|
43
43
|
```
|
|
44
44
|
|
|
45
|
+
## The host is a LAZY service
|
|
46
|
+
|
|
47
|
+
`makeRouterService` builds a **lazy** service (`createLazyService`). The host carries no async
|
|
48
|
+
setup, and plugin packages must be able to reach it from an app's `makeContext` — i.e. while the
|
|
49
|
+
context is still in the Loading stage. `context.service()` throws for an uninitialized non-lazy
|
|
50
|
+
service, which would make `ensureRouterService` (and therefore `appendReactRouter` /
|
|
51
|
+
`appendWebRouter` on an existing host) fail exactly where apps are told to call them. Keep the host
|
|
52
|
+
lazy when extending it.
|
|
53
|
+
|
|
45
54
|
## Native-safety invariant
|
|
46
55
|
|
|
47
56
|
The facade methods are **plain writable instance properties**, never getters — the native router
|
package/build/service.d.ts
CHANGED
|
@@ -8,6 +8,13 @@ import type { RouterService } from "./types.js";
|
|
|
8
8
|
* The facade methods stay ordinary writable properties (never getters) so that
|
|
9
9
|
* non-plugin implementations — e.g. the native router — can keep overriding them
|
|
10
10
|
* directly, exactly as `web-router` did before the plugin model.
|
|
11
|
+
*
|
|
12
|
+
* It is a LAZY service on purpose. The host carries no async setup, and plugin
|
|
13
|
+
* packages must be able to reach it from an app's `makeContext` — i.e. while the
|
|
14
|
+
* context is still in the Loading stage. `context.service()` throws for an
|
|
15
|
+
* uninitialized non-lazy service, which would make `ensureRouterService` (and
|
|
16
|
+
* therefore `appendReactRouter` / `appendWebRouter` on an existing host) fail
|
|
17
|
+
* exactly where apps are told to call them.
|
|
11
18
|
*/
|
|
12
19
|
export declare const makeRouterService: (alias?: string) => RouterService;
|
|
13
20
|
/**
|
package/build/service.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGrD,OAAO,KAAK,EACV,aAAa,EACd,MAAM,YAAY,CAAA;AAEnB
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGrD,OAAO,KAAK,EACV,aAAa,EACd,MAAM,YAAY,CAAA;AAEnB;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,iBAAiB,GAAI,QAAO,MAAsB,KAAG,aAwCjE,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAAI,KAAK,YAAY,CAAC,GAAG,CAAC,KAAG,aAO5D,CAAA"}
|
package/build/service.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createLazyService } from "@owlmeans/context";
|
|
2
2
|
import { DEFAULT_ALIAS } from "./consts.js";
|
|
3
3
|
import { defaultRouterEnv } from "./env.js";
|
|
4
4
|
/**
|
|
@@ -9,10 +9,17 @@ import { defaultRouterEnv } from "./env.js";
|
|
|
9
9
|
* The facade methods stay ordinary writable properties (never getters) so that
|
|
10
10
|
* non-plugin implementations — e.g. the native router — can keep overriding them
|
|
11
11
|
* directly, exactly as `web-router` did before the plugin model.
|
|
12
|
+
*
|
|
13
|
+
* It is a LAZY service on purpose. The host carries no async setup, and plugin
|
|
14
|
+
* packages must be able to reach it from an app's `makeContext` — i.e. while the
|
|
15
|
+
* context is still in the Loading stage. `context.service()` throws for an
|
|
16
|
+
* uninitialized non-lazy service, which would make `ensureRouterService` (and
|
|
17
|
+
* therefore `appendReactRouter` / `appendWebRouter` on an existing host) fail
|
|
18
|
+
* exactly where apps are told to call them.
|
|
12
19
|
*/
|
|
13
20
|
export const makeRouterService = (alias = DEFAULT_ALIAS) => {
|
|
14
21
|
const plugins = [];
|
|
15
|
-
const service =
|
|
22
|
+
const service = createLazyService(alias, {
|
|
16
23
|
registerPlugin: plugin => {
|
|
17
24
|
const existing = plugins.findIndex(candidate => candidate.alias === plugin.alias);
|
|
18
25
|
if (existing >= 0) {
|
package/build/service.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAErD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAK3C;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,QAAgB,aAAa,EAAiB,EAAE;IAChF,MAAM,OAAO,GAAmB,EAAE,CAAA;IAElC,MAAM,OAAO,GAAkB,iBAAiB,CAAgB,KAAK,EAAE;QACrE,cAAc,EAAE,MAAM,CAAC,EAAE;YACvB,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,CAAA;YACjF,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;gBAClB,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;YAC7B,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAA;QAC/D,CAAC;QAED,MAAM,EAAE,GAAG,CAAC,EAAE;YACZ,MAAM,WAAW,GAAG,GAAG,IAAI,gBAAgB,EAAE,CAAA;YAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAoC,CAAA;YACxD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,CAAA;YACrF,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAA;YACtE,CAAC;YACD,OAAO,MAAM,CAAA;QACf,CAAC;QAED,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE;QAEvC,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAE3C,SAAS,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,CAAkB;QAEhE,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE;QAEjD,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE;QAEjD,eAAe,EAAE,CAAC,CAAC,IAA+C,EAAE,EAAE,CACpE,OAAO,CAAC,MAAM,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAwB;QAEhE,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,GAAoC,CAAC;KAClG,CAAC,CAAA;IAEF,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,GAAsB,EAAiB,EAAE;IAC3E,IAAI,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAClC,OAAO,GAAG,CAAC,OAAO,CAAgB,aAAa,CAAC,CAAA;IAClD,CAAC;IACD,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAA;IACnC,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;IAC5B,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA"}
|
package/build/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { LazyService, BasicContext } from "@owlmeans/context";
|
|
2
2
|
import type { ComponentType } from 'react';
|
|
3
3
|
export type { ComponentType };
|
|
4
4
|
export type LibraryRouter = unknown;
|
|
@@ -45,7 +45,7 @@ export interface RouterPlugin {
|
|
|
45
45
|
useNavigate: UseNavigateHook;
|
|
46
46
|
useSearchParams: UseSearchParamsHook;
|
|
47
47
|
}
|
|
48
|
-
export interface RouterService extends
|
|
48
|
+
export interface RouterService extends LazyService {
|
|
49
49
|
registerPlugin: (plugin: RouterPlugin) => void;
|
|
50
50
|
/** Select the active plugin for the given (or default) environment. */
|
|
51
51
|
plugin: (env?: RouterEnv) => RouterPlugin;
|
package/build/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@owlmeans/router",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.15",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
}
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@owlmeans/context": "^0.1.
|
|
24
|
+
"@owlmeans/context": "^0.1.15"
|
|
25
25
|
},
|
|
26
26
|
"peerDependencies": {
|
|
27
27
|
"react": "*"
|
package/src/service.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createLazyService } from "@owlmeans/context"
|
|
2
2
|
import type { BasicContext } from "@owlmeans/context"
|
|
3
3
|
import { DEFAULT_ALIAS } from "./consts.js"
|
|
4
4
|
import { defaultRouterEnv } from "./env.js"
|
|
@@ -14,11 +14,18 @@ import type {
|
|
|
14
14
|
* The facade methods stay ordinary writable properties (never getters) so that
|
|
15
15
|
* non-plugin implementations — e.g. the native router — can keep overriding them
|
|
16
16
|
* directly, exactly as `web-router` did before the plugin model.
|
|
17
|
+
*
|
|
18
|
+
* It is a LAZY service on purpose. The host carries no async setup, and plugin
|
|
19
|
+
* packages must be able to reach it from an app's `makeContext` — i.e. while the
|
|
20
|
+
* context is still in the Loading stage. `context.service()` throws for an
|
|
21
|
+
* uninitialized non-lazy service, which would make `ensureRouterService` (and
|
|
22
|
+
* therefore `appendReactRouter` / `appendWebRouter` on an existing host) fail
|
|
23
|
+
* exactly where apps are told to call them.
|
|
17
24
|
*/
|
|
18
25
|
export const makeRouterService = (alias: string = DEFAULT_ALIAS): RouterService => {
|
|
19
26
|
const plugins: RouterPlugin[] = []
|
|
20
27
|
|
|
21
|
-
const service: RouterService =
|
|
28
|
+
const service: RouterService = createLazyService<RouterService>(alias, {
|
|
22
29
|
registerPlugin: plugin => {
|
|
23
30
|
const existing = plugins.findIndex(candidate => candidate.alias === plugin.alias)
|
|
24
31
|
if (existing >= 0) {
|
package/src/types.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { LazyService, BasicContext } from "@owlmeans/context"
|
|
2
2
|
import type { ComponentType } from 'react'
|
|
3
3
|
export type { ComponentType }
|
|
4
4
|
|
|
@@ -51,7 +51,7 @@ export interface RouterPlugin {
|
|
|
51
51
|
useSearchParams: UseSearchParamsHook
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
export interface RouterService extends
|
|
54
|
+
export interface RouterService extends LazyService {
|
|
55
55
|
registerPlugin: (plugin: RouterPlugin) => void
|
|
56
56
|
/** Select the active plugin for the given (or default) environment. */
|
|
57
57
|
plugin: (env?: RouterEnv) => RouterPlugin
|