@c9up/station 0.1.5
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/LICENSE +21 -0
- package/README.md +3 -0
- package/dist/ResourceRegistry.d.ts +18 -0
- package/dist/ResourceRegistry.d.ts.map +1 -0
- package/dist/ResourceRegistry.js +38 -0
- package/dist/ResourceRegistry.js.map +1 -0
- package/dist/StationProvider.d.ts +109 -0
- package/dist/StationProvider.d.ts.map +1 -0
- package/dist/StationProvider.js +1144 -0
- package/dist/StationProvider.js.map +1 -0
- package/dist/casing.d.ts +27 -0
- package/dist/casing.d.ts.map +1 -0
- package/dist/casing.js +75 -0
- package/dist/casing.js.map +1 -0
- package/dist/defineResource.d.ts +9 -0
- package/dist/defineResource.d.ts.map +1 -0
- package/dist/defineResource.js +84 -0
- package/dist/defineResource.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/services/main.d.ts +18 -0
- package/dist/services/main.d.ts.map +1 -0
- package/dist/services/main.js +31 -0
- package/dist/services/main.js.map +1 -0
- package/dist/types.d.ts +85 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/dist/views/errors/404.d.ts +12 -0
- package/dist/views/errors/404.d.ts.map +1 -0
- package/dist/views/errors/404.js +19 -0
- package/dist/views/errors/404.js.map +1 -0
- package/dist/views/escape.d.ts +30 -0
- package/dist/views/escape.d.ts.map +1 -0
- package/dist/views/escape.js +34 -0
- package/dist/views/escape.js.map +1 -0
- package/dist/views/form.d.ts +34 -0
- package/dist/views/form.d.ts.map +1 -0
- package/dist/views/form.js +139 -0
- package/dist/views/form.js.map +1 -0
- package/dist/views/layout.d.ts +24 -0
- package/dist/views/layout.d.ts.map +1 -0
- package/dist/views/layout.js +85 -0
- package/dist/views/layout.js.map +1 -0
- package/dist/views/list.d.ts +22 -0
- package/dist/views/list.d.ts.map +1 -0
- package/dist/views/list.js +85 -0
- package/dist/views/list.js.map +1 -0
- package/dist/views/login.d.ts +25 -0
- package/dist/views/login.d.ts.map +1 -0
- package/dist/views/login.js +44 -0
- package/dist/views/login.js.map +1 -0
- package/dist/views/show.d.ts +17 -0
- package/dist/views/show.d.ts.map +1 -0
- package/dist/views/show.js +24 -0
- package/dist/views/show.js.map +1 -0
- package/package.json +63 -0
- package/src/ResourceRegistry.ts +49 -0
- package/src/StationProvider.ts +1579 -0
- package/src/casing.ts +86 -0
- package/src/defineResource.ts +126 -0
- package/src/index.ts +14 -0
- package/src/services/main.ts +39 -0
- package/src/types.ts +108 -0
- package/src/views/errors/404.ts +27 -0
- package/src/views/escape.ts +46 -0
- package/src/views/form.ts +191 -0
- package/src/views/layout.ts +90 -0
- package/src/views/list.ts +121 -0
- package/src/views/login.ts +65 -0
- package/src/views/show.ts +37 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { Resource } from "./types.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Central catalogue of declared resources for a Station-powered admin surface.
|
|
5
|
+
*
|
|
6
|
+
* Plain data structure: no boot()/start() lifecycle here — provider wiring
|
|
7
|
+
* lands in story 54.7. Iteration order is registration order, which is what
|
|
8
|
+
* the admin sidebar wants.
|
|
9
|
+
*/
|
|
10
|
+
export class ResourceRegistry {
|
|
11
|
+
readonly #map = new Map<string, Resource>();
|
|
12
|
+
|
|
13
|
+
register<T>(resource: Resource<T>): void {
|
|
14
|
+
const existing = this.#map.get(resource.name);
|
|
15
|
+
if (existing !== undefined) {
|
|
16
|
+
throw new Error(
|
|
17
|
+
`[station] ResourceRegistry: duplicate resource name '${resource.name}' (already registered for ${existing.entity.name})`,
|
|
18
|
+
);
|
|
19
|
+
}
|
|
20
|
+
this.#map.set(resource.name, resource);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
get(name: string): Resource | undefined {
|
|
24
|
+
return this.#map.get(name);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
getOrThrow(name: string): Resource {
|
|
28
|
+
const found = this.#map.get(name);
|
|
29
|
+
if (found === undefined) {
|
|
30
|
+
throw new Error(
|
|
31
|
+
`[station] ResourceRegistry: no resource named '${name}'`,
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
return found;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
has(name: string): boolean {
|
|
38
|
+
return this.#map.has(name);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
count(): number {
|
|
42
|
+
return this.#map.size;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
all(): ReadonlyArray<Resource> {
|
|
46
|
+
const snapshot: Resource[] = [...this.#map.values()];
|
|
47
|
+
return Object.freeze(snapshot);
|
|
48
|
+
}
|
|
49
|
+
}
|