@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 @@
|
|
|
1
|
+
{"version":3,"file":"StationProvider.js","sourceRoot":"","sources":["../src/StationProvider.ts"],"names":[],"mappings":"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"}
|
package/dist/casing.d.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convert an identifier (camelCase / PascalCase / digits / already-lowercase)
|
|
3
|
+
* to kebab-case.
|
|
4
|
+
*
|
|
5
|
+
* BlogPost -> blog-post
|
|
6
|
+
* URLParser -> url-parser (consecutive uppercase = one segment)
|
|
7
|
+
* My2024Post -> my-2024-post (digit boundaries split too)
|
|
8
|
+
* user -> user (idempotent on already-lower input)
|
|
9
|
+
*/
|
|
10
|
+
export declare function kebabCase(input: string): string;
|
|
11
|
+
/**
|
|
12
|
+
* Convert kebab-case to space-separated Title Case.
|
|
13
|
+
*
|
|
14
|
+
* blog-posts -> Blog Posts
|
|
15
|
+
*/
|
|
16
|
+
export declare function titleCase(input: string): string;
|
|
17
|
+
/**
|
|
18
|
+
* Minimal English pluraliser. Hand-rolled (zero runtime deps).
|
|
19
|
+
*
|
|
20
|
+
* Multi-word kebab inputs only have their LAST segment pluralised:
|
|
21
|
+
*
|
|
22
|
+
* user -> users
|
|
23
|
+
* blog-post -> blog-posts
|
|
24
|
+
* super-man -> super-men
|
|
25
|
+
*/
|
|
26
|
+
export declare function pluralise(singular: string): string;
|
|
27
|
+
//# sourceMappingURL=casing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"casing.d.ts","sourceRoot":"","sources":["../src/casing.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAW/C;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAO/C;AAqCD;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKlD"}
|
package/dist/casing.js
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convert an identifier (camelCase / PascalCase / digits / already-lowercase)
|
|
3
|
+
* to kebab-case.
|
|
4
|
+
*
|
|
5
|
+
* BlogPost -> blog-post
|
|
6
|
+
* URLParser -> url-parser (consecutive uppercase = one segment)
|
|
7
|
+
* My2024Post -> my-2024-post (digit boundaries split too)
|
|
8
|
+
* user -> user (idempotent on already-lower input)
|
|
9
|
+
*/
|
|
10
|
+
export function kebabCase(input) {
|
|
11
|
+
const upperAfterLowerOrDigit = input.replace(/([a-z0-9])([A-Z])/g, "$1-$2");
|
|
12
|
+
const upperAfterUpperBeforeLower = upperAfterLowerOrDigit.replace(/([A-Z])([A-Z][a-z])/g, "$1-$2");
|
|
13
|
+
const digitAfterLetter = upperAfterUpperBeforeLower.replace(/([A-Za-z])([0-9])/g, "$1-$2");
|
|
14
|
+
return digitAfterLetter.toLowerCase();
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Convert kebab-case to space-separated Title Case.
|
|
18
|
+
*
|
|
19
|
+
* blog-posts -> Blog Posts
|
|
20
|
+
*/
|
|
21
|
+
export function titleCase(input) {
|
|
22
|
+
return input
|
|
23
|
+
.split("-")
|
|
24
|
+
.map((part) => part.length === 0 ? part : part[0].toUpperCase() + part.slice(1))
|
|
25
|
+
.join(" ");
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Irregular plural table. Lookup is on the LAST kebab segment so
|
|
29
|
+
* `super-man` -> `super-men` works while `human` falls through.
|
|
30
|
+
*/
|
|
31
|
+
const IRREGULAR_PLURALS = new Map([
|
|
32
|
+
["person", "people"],
|
|
33
|
+
["child", "children"],
|
|
34
|
+
["man", "men"],
|
|
35
|
+
["woman", "women"],
|
|
36
|
+
["mouse", "mice"],
|
|
37
|
+
["goose", "geese"],
|
|
38
|
+
["tooth", "teeth"],
|
|
39
|
+
["foot", "feet"],
|
|
40
|
+
["analysis", "analyses"],
|
|
41
|
+
["crisis", "crises"],
|
|
42
|
+
["phenomenon", "phenomena"],
|
|
43
|
+
["criterion", "criteria"],
|
|
44
|
+
["datum", "data"],
|
|
45
|
+
["medium", "media"],
|
|
46
|
+
]);
|
|
47
|
+
function pluraliseWord(word) {
|
|
48
|
+
const irregular = IRREGULAR_PLURALS.get(word);
|
|
49
|
+
if (irregular !== undefined) {
|
|
50
|
+
return irregular;
|
|
51
|
+
}
|
|
52
|
+
if (/[^aeiou]y$/.test(word)) {
|
|
53
|
+
return `${word.slice(0, -1)}ies`;
|
|
54
|
+
}
|
|
55
|
+
if (/(s|x|z|ch|sh)$/.test(word)) {
|
|
56
|
+
return `${word}es`;
|
|
57
|
+
}
|
|
58
|
+
return `${word}s`;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Minimal English pluraliser. Hand-rolled (zero runtime deps).
|
|
62
|
+
*
|
|
63
|
+
* Multi-word kebab inputs only have their LAST segment pluralised:
|
|
64
|
+
*
|
|
65
|
+
* user -> users
|
|
66
|
+
* blog-post -> blog-posts
|
|
67
|
+
* super-man -> super-men
|
|
68
|
+
*/
|
|
69
|
+
export function pluralise(singular) {
|
|
70
|
+
const segments = singular.split("-");
|
|
71
|
+
const last = segments[segments.length - 1];
|
|
72
|
+
segments[segments.length - 1] = pluraliseWord(last);
|
|
73
|
+
return segments.join("-");
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=casing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"casing.js","sourceRoot":"","sources":["../src/casing.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,UAAU,SAAS,CAAC,KAAa;IACtC,MAAM,sBAAsB,GAAG,KAAK,CAAC,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;IAC5E,MAAM,0BAA0B,GAAG,sBAAsB,CAAC,OAAO,CAChE,sBAAsB,EACtB,OAAO,CACP,CAAC;IACF,MAAM,gBAAgB,GAAG,0BAA0B,CAAC,OAAO,CAC1D,oBAAoB,EACpB,OAAO,CACP,CAAC;IACF,OAAO,gBAAgB,CAAC,WAAW,EAAE,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,KAAa;IACtC,OAAO,KAAK;SACV,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACb,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAChE;SACA,IAAI,CAAC,GAAG,CAAC,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,iBAAiB,GAAgC,IAAI,GAAG,CAAC;IAC9D,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACpB,CAAC,OAAO,EAAE,UAAU,CAAC;IACrB,CAAC,KAAK,EAAE,KAAK,CAAC;IACd,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,OAAO,EAAE,MAAM,CAAC;IACjB,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,OAAO,EAAE,OAAO,CAAC;IAClB,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,UAAU,EAAE,UAAU,CAAC;IACxB,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACpB,CAAC,YAAY,EAAE,WAAW,CAAC;IAC3B,CAAC,WAAW,EAAE,UAAU,CAAC;IACzB,CAAC,OAAO,EAAE,MAAM,CAAC;IACjB,CAAC,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC,CAAC;AAEH,SAAS,aAAa,CAAC,IAAY;IAClC,MAAM,SAAS,GAAG,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IAClC,CAAC;IACD,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACjC,OAAO,GAAG,IAAI,IAAI,CAAC;IACpB,CAAC;IACD,OAAO,GAAG,IAAI,GAAG,CAAC;AACnB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,SAAS,CAAC,QAAgB;IACzC,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC3C,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACpD,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type Resource, type ResourceOptions } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Build a frozen `Resource` from a developer's declaration.
|
|
4
|
+
*
|
|
5
|
+
* Validation is fail-fast and pre-HTTP: a typo in `actions` or `name` throws
|
|
6
|
+
* here, not at request time, so the offending key surfaces in boot logs.
|
|
7
|
+
*/
|
|
8
|
+
export declare function defineResource<T>(options: ResourceOptions<T>): Resource<T>;
|
|
9
|
+
//# sourceMappingURL=defineResource.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defineResource.d.ts","sourceRoot":"","sources":["../src/defineResource.ts"],"names":[],"mappings":"AACA,OAAO,EAKN,KAAK,QAAQ,EAEb,KAAK,eAAe,EACpB,MAAM,YAAY,CAAC;AAUpB;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAoG1E"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { kebabCase, pluralise, titleCase } from "./casing.js";
|
|
2
|
+
import { RESOURCE_ACTIONS, } from "./types.js";
|
|
3
|
+
const NAME_PATTERN = /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/;
|
|
4
|
+
const ACTION_LOOKUP = new Set(RESOURCE_ACTIONS);
|
|
5
|
+
function isResourceAction(value) {
|
|
6
|
+
return typeof value === "string" && ACTION_LOOKUP.has(value);
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Build a frozen `Resource` from a developer's declaration.
|
|
10
|
+
*
|
|
11
|
+
* Validation is fail-fast and pre-HTTP: a typo in `actions` or `name` throws
|
|
12
|
+
* here, not at request time, so the offending key surfaces in boot logs.
|
|
13
|
+
*/
|
|
14
|
+
export function defineResource(options) {
|
|
15
|
+
if (typeof options.entity !== "function") {
|
|
16
|
+
throw new TypeError("[station] defineResource: 'entity' must be a class constructor");
|
|
17
|
+
}
|
|
18
|
+
if (options.actions !== undefined) {
|
|
19
|
+
if (!Array.isArray(options.actions) || options.actions.length === 0) {
|
|
20
|
+
throw new Error("[station] defineResource: 'actions' must contain at least one action");
|
|
21
|
+
}
|
|
22
|
+
for (const action of options.actions) {
|
|
23
|
+
if (!isResourceAction(action)) {
|
|
24
|
+
throw new Error(`[station] defineResource: unknown action '${String(action)}' (allowed: list, show, create, edit, destroy)`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
if (options.name !== undefined && !NAME_PATTERN.test(options.name)) {
|
|
29
|
+
throw new Error(`[station] defineResource: 'name' must be lowercase kebab-case (got: '${options.name}')`);
|
|
30
|
+
}
|
|
31
|
+
const entityName = options.entity.name;
|
|
32
|
+
if (entityName === "") {
|
|
33
|
+
throw new Error("[station] defineResource: 'entity' class has no name (anonymous class); pass 'name:' explicitly");
|
|
34
|
+
}
|
|
35
|
+
const slugBase = kebabCase(entityName);
|
|
36
|
+
const name = options.name ?? pluralise(slugBase);
|
|
37
|
+
if (options.name === undefined && !NAME_PATTERN.test(name)) {
|
|
38
|
+
throw new Error(`[station] defineResource: entity name '${entityName}' produces invalid slug '${name}'; pass 'name:' explicitly to override`);
|
|
39
|
+
}
|
|
40
|
+
const label = options.label ?? titleCase(pluralise(slugBase));
|
|
41
|
+
const enabled = options.actions === undefined
|
|
42
|
+
? new Set(RESOURCE_ACTIONS)
|
|
43
|
+
: new Set(options.actions);
|
|
44
|
+
const orderedActions = Object.freeze(RESOURCE_ACTIONS.filter((action) => enabled.has(action)));
|
|
45
|
+
// 54.5: validate per-field overrides — keyed by camelCase property
|
|
46
|
+
// name on the entity. Validation is shape-only here; the inferred
|
|
47
|
+
// form vs override merge happens at render time in views/form.ts.
|
|
48
|
+
const formFieldsRaw = options.formFields ?? {};
|
|
49
|
+
const formFields = {};
|
|
50
|
+
for (const [field, override] of Object.entries(formFieldsRaw)) {
|
|
51
|
+
if (override === null || typeof override !== "object") {
|
|
52
|
+
throw new TypeError(`[station] defineResource: 'formFields.${field}' must be an object`);
|
|
53
|
+
}
|
|
54
|
+
formFields[field] = override;
|
|
55
|
+
}
|
|
56
|
+
// 54.6: audit sink shape-check — if provided, must be callable. No
|
|
57
|
+
// extra validation; the sink is exercised lazily on first write.
|
|
58
|
+
let audit;
|
|
59
|
+
if (options.audit !== undefined) {
|
|
60
|
+
if (typeof options.audit !== "function") {
|
|
61
|
+
throw new TypeError(`[station] defineResource: 'audit' must be a function (got ${typeof options.audit})`);
|
|
62
|
+
}
|
|
63
|
+
audit = options.audit;
|
|
64
|
+
}
|
|
65
|
+
// 54.6 hardening: optional audit-failure observability hook.
|
|
66
|
+
let onAuditError;
|
|
67
|
+
if (options.onAuditError !== undefined) {
|
|
68
|
+
if (typeof options.onAuditError !== "function") {
|
|
69
|
+
throw new TypeError(`[station] defineResource: 'onAuditError' must be a function (got ${typeof options.onAuditError})`);
|
|
70
|
+
}
|
|
71
|
+
onAuditError = options.onAuditError;
|
|
72
|
+
}
|
|
73
|
+
const resource = {
|
|
74
|
+
entity: options.entity,
|
|
75
|
+
name,
|
|
76
|
+
label,
|
|
77
|
+
actions: orderedActions,
|
|
78
|
+
audit,
|
|
79
|
+
onAuditError,
|
|
80
|
+
formFields: Object.freeze(formFields),
|
|
81
|
+
};
|
|
82
|
+
return Object.freeze(resource);
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=defineResource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defineResource.js","sourceRoot":"","sources":["../src/defineResource.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { kebabCase, pluralise, titleCase } from "./casing.js";
|
|
2
|
+
export { defineResource } from "./defineResource.js";
|
|
3
|
+
export { ResourceRegistry } from "./ResourceRegistry.js";
|
|
4
|
+
export type { StationAppContext } from "./StationProvider.js";
|
|
5
|
+
export { default as StationProvider } from "./StationProvider.js";
|
|
6
|
+
export { type AuditEvent, type AuditSink, type FormFieldOverride, RESOURCE_ACTIONS, type Resource, type ResourceAction, type ResourceOptions, } from "./types.js";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EACN,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,iBAAiB,EACtB,gBAAgB,EAChB,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,KAAK,eAAe,GACpB,MAAM,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { kebabCase, pluralise, titleCase } from "./casing.js";
|
|
2
|
+
export { defineResource } from "./defineResource.js";
|
|
3
|
+
export { ResourceRegistry } from "./ResourceRegistry.js";
|
|
4
|
+
export { default as StationProvider } from "./StationProvider.js";
|
|
5
|
+
export { RESOURCE_ACTIONS, } from "./types.js";
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAIN,gBAAgB,GAIhB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default `ResourceRegistry` singleton — Adonis-style:
|
|
3
|
+
*
|
|
4
|
+
* import station from '@c9up/station/services/main'
|
|
5
|
+
*
|
|
6
|
+
* station.register(defineResource({ entity: User }))
|
|
7
|
+
*
|
|
8
|
+
* Populated either by `StationProvider.boot()` (lands in story 54.7) or by
|
|
9
|
+
* the app itself via `setStation(myRegistry)`.
|
|
10
|
+
*/
|
|
11
|
+
import type { ResourceRegistry } from "../ResourceRegistry.js";
|
|
12
|
+
/** @internal Bind the singleton (called by StationProvider or by the app). */
|
|
13
|
+
export declare function setStation(value: ResourceRegistry): void;
|
|
14
|
+
/** @internal Read the singleton (or `undefined` pre-boot). */
|
|
15
|
+
export declare function getStation(): ResourceRegistry | undefined;
|
|
16
|
+
declare const station: ResourceRegistry;
|
|
17
|
+
export default station;
|
|
18
|
+
//# sourceMappingURL=main.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/services/main.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAI/D,8EAA8E;AAC9E,wBAAgB,UAAU,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAExD;AAED,8DAA8D;AAC9D,wBAAgB,UAAU,IAAI,gBAAgB,GAAG,SAAS,CAEzD;AAED,QAAA,MAAM,OAAO,EAAE,gBAWb,CAAC;AAEH,eAAe,OAAO,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default `ResourceRegistry` singleton — Adonis-style:
|
|
3
|
+
*
|
|
4
|
+
* import station from '@c9up/station/services/main'
|
|
5
|
+
*
|
|
6
|
+
* station.register(defineResource({ entity: User }))
|
|
7
|
+
*
|
|
8
|
+
* Populated either by `StationProvider.boot()` (lands in story 54.7) or by
|
|
9
|
+
* the app itself via `setStation(myRegistry)`.
|
|
10
|
+
*/
|
|
11
|
+
let instance;
|
|
12
|
+
/** @internal Bind the singleton (called by StationProvider or by the app). */
|
|
13
|
+
export function setStation(value) {
|
|
14
|
+
instance = value;
|
|
15
|
+
}
|
|
16
|
+
/** @internal Read the singleton (or `undefined` pre-boot). */
|
|
17
|
+
export function getStation() {
|
|
18
|
+
return instance;
|
|
19
|
+
}
|
|
20
|
+
const station = new Proxy({}, {
|
|
21
|
+
get(_target, prop) {
|
|
22
|
+
if (!instance) {
|
|
23
|
+
throw new Error("[station] ResourceRegistry singleton accessed before StationProvider.boot() ran " +
|
|
24
|
+
"or `setStation(myRegistry)` was called. Wire one of them first.");
|
|
25
|
+
}
|
|
26
|
+
const value = Reflect.get(instance, prop, instance);
|
|
27
|
+
return typeof value === "function" ? value.bind(instance) : value;
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
export default station;
|
|
31
|
+
//# sourceMappingURL=main.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/services/main.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,IAAI,QAAsC,CAAC;AAE3C,8EAA8E;AAC9E,MAAM,UAAU,UAAU,CAAC,KAAuB;IACjD,QAAQ,GAAG,KAAK,CAAC;AAClB,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,UAAU;IACzB,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED,MAAM,OAAO,GAAqB,IAAI,KAAK,CAAC,EAAsB,EAAE;IACnE,GAAG,CAAC,OAAO,EAAE,IAAI;QAChB,IAAI,CAAC,QAAQ,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACd,kFAAkF;gBACjF,iEAAiE,CAClE,CAAC;QACH,CAAC;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QACpD,OAAO,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACnE,CAAC;CACD,CAAC,CAAC;AAEH,eAAe,OAAO,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
export type ResourceAction = "list" | "show" | "create" | "edit" | "destroy";
|
|
2
|
+
export declare const RESOURCE_ACTIONS: ReadonlyArray<ResourceAction>;
|
|
3
|
+
/**
|
|
4
|
+
* Audit-trail event (Story 54.6). Emitted AFTER a write action lands
|
|
5
|
+
* successfully — on a 4xx/5xx the event does not fire (the action's
|
|
6
|
+
* effect is the boundary). `before` is present for `edit` and
|
|
7
|
+
* `destroy`; `after` is present for `create` and `edit`.
|
|
8
|
+
*/
|
|
9
|
+
export interface AuditEvent {
|
|
10
|
+
readonly action: ResourceAction;
|
|
11
|
+
readonly resource: string;
|
|
12
|
+
readonly recordId?: unknown;
|
|
13
|
+
readonly userId?: unknown;
|
|
14
|
+
readonly before?: Readonly<Record<string, unknown>>;
|
|
15
|
+
readonly after?: Readonly<Record<string, unknown>>;
|
|
16
|
+
readonly at: Date;
|
|
17
|
+
}
|
|
18
|
+
export type AuditSink = (event: AuditEvent) => void | Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* Per-field override for the auto-generated form (Story 54.5). Station
|
|
21
|
+
* infers the form from the entity's `@Column` metadata; consumers can
|
|
22
|
+
* override one column at a time without losing the inference for the
|
|
23
|
+
* others.
|
|
24
|
+
*/
|
|
25
|
+
export interface FormFieldOverride {
|
|
26
|
+
/** Hide the field from the form entirely (still rendered on show). */
|
|
27
|
+
hidden?: boolean;
|
|
28
|
+
/** Override the rendered `<input type>`. */
|
|
29
|
+
inputType?: "text" | "number" | "email" | "password" | "date" | "datetime-local" | "checkbox" | "textarea";
|
|
30
|
+
/** Override the visible label (defaults to the column name title-cased). */
|
|
31
|
+
label?: string;
|
|
32
|
+
/** Add an `<input placeholder>`. */
|
|
33
|
+
placeholder?: string;
|
|
34
|
+
/** Mark the field as required at the HTML level. */
|
|
35
|
+
required?: boolean;
|
|
36
|
+
}
|
|
37
|
+
export interface ResourceOptions<TEntity> {
|
|
38
|
+
/** Entity class (Atlas `@Entity()`-decorated constructor). */
|
|
39
|
+
entity: new (...args: never[]) => TEntity;
|
|
40
|
+
/** Human-readable label shown in the admin sidebar (e.g. "Users"). */
|
|
41
|
+
label?: string;
|
|
42
|
+
/** Subset of actions to mount. Default: all five. */
|
|
43
|
+
actions?: ReadonlyArray<ResourceAction>;
|
|
44
|
+
/** URL slug override. Default: derived from the entity class name. */
|
|
45
|
+
name?: string;
|
|
46
|
+
/**
|
|
47
|
+
* Audit sink invoked AFTER each successful write (Story 54.6). When
|
|
48
|
+
* omitted, Station falls back to a once-per-process stderr warning
|
|
49
|
+
* so apps don't silently lose audit visibility.
|
|
50
|
+
*/
|
|
51
|
+
audit?: AuditSink;
|
|
52
|
+
/**
|
|
53
|
+
* Invoked when the audit sink throws (Story 54.6 hardening, retro
|
|
54
|
+
* 2026-06-01). The mutation has already committed, so this is a
|
|
55
|
+
* compliance-observability hook — emit an alert / enqueue a retry /
|
|
56
|
+
* record the gap. Station does NOT block the user request on an audit
|
|
57
|
+
* failure; without this handler the failure is logged at `error`
|
|
58
|
+
* level. The handler is itself wrapped so a throwing handler can't
|
|
59
|
+
* crash the request.
|
|
60
|
+
*/
|
|
61
|
+
onAuditError?: (event: AuditEvent, error: unknown) => void;
|
|
62
|
+
/**
|
|
63
|
+
* Per-field overrides on top of the inferred form (Story 54.5).
|
|
64
|
+
* Keyed by the entity's camelCase property name; absent keys keep
|
|
65
|
+
* the inferred defaults.
|
|
66
|
+
*/
|
|
67
|
+
formFields?: Readonly<Record<string, FormFieldOverride>>;
|
|
68
|
+
}
|
|
69
|
+
export interface Resource<TEntity = unknown> {
|
|
70
|
+
/** The entity class passed in. */
|
|
71
|
+
readonly entity: new (...args: never[]) => TEntity;
|
|
72
|
+
/** URL slug — e.g. "users", "blog-posts". Always lowercase, kebab-case. */
|
|
73
|
+
readonly name: string;
|
|
74
|
+
/** Display label — e.g. "Users". Defaults to a title-cased pluralised entity name. */
|
|
75
|
+
readonly label: string;
|
|
76
|
+
/** Frozen list of enabled actions, in canonical order (list, show, create, edit, destroy). */
|
|
77
|
+
readonly actions: ReadonlyArray<ResourceAction>;
|
|
78
|
+
/** Optional audit sink (Story 54.6). */
|
|
79
|
+
readonly audit?: AuditSink;
|
|
80
|
+
/** Optional audit-failure observability hook (Story 54.6 hardening). */
|
|
81
|
+
readonly onAuditError?: (event: AuditEvent, error: unknown) => void;
|
|
82
|
+
/** Frozen per-field overrides for the inferred form (Story 54.5). */
|
|
83
|
+
readonly formFields: Readonly<Record<string, FormFieldOverride>>;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;AAE7E,eAAO,MAAM,gBAAgB,EAAE,aAAa,CAAC,cAAc,CAMzD,CAAC;AAEH;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IAC1B,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACnD,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;CAClB;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEpE;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IACjC,sEAAsE;IACtE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,4CAA4C;IAC5C,SAAS,CAAC,EACP,MAAM,GACN,QAAQ,GACR,OAAO,GACP,UAAU,GACV,MAAM,GACN,gBAAgB,GAChB,UAAU,GACV,UAAU,CAAC;IACd,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,eAAe,CAAC,OAAO;IACvC,8DAA8D;IAC9D,MAAM,EAAE,KACP,GAAG,IAAI,EAAE,KAAK,EAAE,KACZ,OAAO,CAAC;IACb,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,OAAO,CAAC,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IACxC,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3D;;;;OAIG;IACH,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;CACzD;AAED,MAAM,WAAW,QAAQ,CAAC,OAAO,GAAG,OAAO;IAC1C,kCAAkC;IAClC,QAAQ,CAAC,MAAM,EAAE,KAChB,GAAG,IAAI,EAAE,KAAK,EAAE,KACZ,OAAO,CAAC;IACb,2EAA2E;IAC3E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,sFAAsF;IACtF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,8FAA8F;IAC9F,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IAChD,wCAAwC;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;IAC3B,wEAAwE;IACxE,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACpE,qEAAqE;IACrE,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;CACjE"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gBAAgB,GAAkC,MAAM,CAAC,MAAM,CAAC;IAC5E,MAAM;IACN,MAAM;IACN,QAAQ;IACR,MAAM;IACN,SAAS;CACT,CAAC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Station-branded 404 for `GET /admin/<slug>/:id` where the row doesn't
|
|
3
|
+
* exist. NOT used for unknown slugs (those fall through to Ream's
|
|
4
|
+
* default 404 — see story spec D6).
|
|
5
|
+
*/
|
|
6
|
+
import type { Resource } from "../../types.js";
|
|
7
|
+
export interface NotFoundPageInput {
|
|
8
|
+
resource: Resource;
|
|
9
|
+
id: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function renderNotFoundPage(input: NotFoundPageInput): string;
|
|
12
|
+
//# sourceMappingURL=404.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"404.d.ts","sourceRoot":"","sources":["../../../src/views/errors/404.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI/C,MAAM,WAAW,iBAAiB;IACjC,QAAQ,EAAE,QAAQ,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;CACX;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAWnE"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Station-branded 404 for `GET /admin/<slug>/:id` where the row doesn't
|
|
3
|
+
* exist. NOT used for unknown slugs (those fall through to Ream's
|
|
4
|
+
* default 404 — see story spec D6).
|
|
5
|
+
*/
|
|
6
|
+
import { escapeHtml, safeHtml } from "../escape.js";
|
|
7
|
+
import { renderLayout } from "../layout.js";
|
|
8
|
+
export function renderNotFoundPage(input) {
|
|
9
|
+
const { resource, id } = input;
|
|
10
|
+
const slug = encodeURIComponent(resource.name);
|
|
11
|
+
const body = `<h1>404 Not Found</h1>` +
|
|
12
|
+
`<p>No ${escapeHtml(resource.label.toLowerCase())} with ID <code>${escapeHtml(id)}</code>.</p>` +
|
|
13
|
+
`<a class="st-backlink" href="/admin/${slug}">← Back to ${escapeHtml(resource.label)}</a>`;
|
|
14
|
+
return renderLayout({
|
|
15
|
+
title: "Not Found",
|
|
16
|
+
bodyHtml: safeHtml(body),
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=404.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"404.js","sourceRoot":"","sources":["../../../src/views/errors/404.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAO5C,MAAM,UAAU,kBAAkB,CAAC,KAAwB;IAC1D,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC;IAC/B,MAAM,IAAI,GAAG,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,IAAI,GACT,wBAAwB;QACxB,SAAS,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,kBAAkB,UAAU,CAAC,EAAE,CAAC,cAAc;QAC/F,uCAAuC,IAAI,eAAe,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;IAC5F,OAAO,YAAY,CAAC;QACnB,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC;KACxB,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTML-escape helpers for Station's hand-rolled view layer.
|
|
3
|
+
*
|
|
4
|
+
* Every dynamic value interpolated into a `${…}` slot in a view template
|
|
5
|
+
* MUST flow through `escapeHtml()`. The lint sweep at
|
|
6
|
+
* `tests/unit/no-unescaped-interpolation.test.ts` enforces this on a
|
|
7
|
+
* grep-pass over `src/views/**` so a missing wrap surfaces as a failing
|
|
8
|
+
* test rather than a stored-XSS bug.
|
|
9
|
+
*
|
|
10
|
+
* `safeHtml()` is the escape hatch for pre-escaped fragments that views
|
|
11
|
+
* compose (e.g., the rendered body the layout helper splices into its
|
|
12
|
+
* shell). The branded shape (`{ readonly __safe: true; readonly html }`)
|
|
13
|
+
* makes the boundary explicit and lets the lint sweep skip lines that
|
|
14
|
+
* mention `__safe` as the only legitimate raw-HTML carrier.
|
|
15
|
+
*/
|
|
16
|
+
/** Escape a value for safe interpolation into HTML text or attribute content. */
|
|
17
|
+
export declare function escapeHtml(value: unknown): string;
|
|
18
|
+
/**
|
|
19
|
+
* Branded wrapper marking a string as already HTML-escaped (or
|
|
20
|
+
* deliberately raw, e.g., the inline CSS block in the layout). The
|
|
21
|
+
* lint sweep that bans bare `${…}` interpolations excludes lines
|
|
22
|
+
* containing `__safe`.
|
|
23
|
+
*/
|
|
24
|
+
export interface SafeHtml {
|
|
25
|
+
readonly __safe: true;
|
|
26
|
+
readonly html: string;
|
|
27
|
+
}
|
|
28
|
+
/** Mark a string as pre-escaped / deliberately raw HTML. */
|
|
29
|
+
export declare function safeHtml(html: string): SafeHtml;
|
|
30
|
+
//# sourceMappingURL=escape.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"escape.d.ts","sourceRoot":"","sources":["../../src/views/escape.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAUH,iFAAiF;AACjF,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAIjD;AAED;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IACxB,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACtB;AAED,4DAA4D;AAC5D,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAE/C"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTML-escape helpers for Station's hand-rolled view layer.
|
|
3
|
+
*
|
|
4
|
+
* Every dynamic value interpolated into a `${…}` slot in a view template
|
|
5
|
+
* MUST flow through `escapeHtml()`. The lint sweep at
|
|
6
|
+
* `tests/unit/no-unescaped-interpolation.test.ts` enforces this on a
|
|
7
|
+
* grep-pass over `src/views/**` so a missing wrap surfaces as a failing
|
|
8
|
+
* test rather than a stored-XSS bug.
|
|
9
|
+
*
|
|
10
|
+
* `safeHtml()` is the escape hatch for pre-escaped fragments that views
|
|
11
|
+
* compose (e.g., the rendered body the layout helper splices into its
|
|
12
|
+
* shell). The branded shape (`{ readonly __safe: true; readonly html }`)
|
|
13
|
+
* makes the boundary explicit and lets the lint sweep skip lines that
|
|
14
|
+
* mention `__safe` as the only legitimate raw-HTML carrier.
|
|
15
|
+
*/
|
|
16
|
+
const ESCAPE_MAP = Object.freeze({
|
|
17
|
+
"&": "&",
|
|
18
|
+
"<": "<",
|
|
19
|
+
">": ">",
|
|
20
|
+
'"': """,
|
|
21
|
+
"'": "'",
|
|
22
|
+
});
|
|
23
|
+
/** Escape a value for safe interpolation into HTML text or attribute content. */
|
|
24
|
+
export function escapeHtml(value) {
|
|
25
|
+
if (value === null || value === undefined)
|
|
26
|
+
return "";
|
|
27
|
+
const str = typeof value === "string" ? value : String(value);
|
|
28
|
+
return str.replace(/[&<>"']/g, (ch) => ESCAPE_MAP[ch] ?? ch);
|
|
29
|
+
}
|
|
30
|
+
/** Mark a string as pre-escaped / deliberately raw HTML. */
|
|
31
|
+
export function safeHtml(html) {
|
|
32
|
+
return Object.freeze({ __safe: true, html });
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=escape.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"escape.js","sourceRoot":"","sources":["../../src/views/escape.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,UAAU,GAAqC,MAAM,CAAC,MAAM,CAAC;IAClE,GAAG,EAAE,OAAO;IACZ,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,OAAO;CACZ,CAAC,CAAC;AAEH,iFAAiF;AACjF,MAAM,UAAU,UAAU,CAAC,KAAc;IACxC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACrD,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9D,OAAO,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AAC9D,CAAC;AAaD,4DAA4D;AAC5D,MAAM,UAAU,QAAQ,CAAC,IAAY;IACpC,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAa,EAAE,IAAI,EAAE,CAAC,CAAC;AACvD,CAAC"}
|