katanakit-js 4.0.4 → 5.2.0
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 +184 -10
- package/dist/adapters/insforge/index.d.ts +3 -0
- package/dist/adapters/insforge/index.d.ts.map +1 -0
- package/dist/adapters/insforge/index.js +2 -0
- package/dist/adapters/insforge/index.js.map +1 -0
- package/dist/adapters/insforge/insforge.service.d.ts +116 -0
- package/dist/adapters/insforge/insforge.service.d.ts.map +1 -0
- package/dist/adapters/insforge/insforge.service.js +437 -0
- package/dist/adapters/insforge/insforge.service.js.map +1 -0
- package/dist/adapters/notion/notion.service.d.ts.map +1 -1
- package/dist/adapters/notion/notion.service.js +72 -54
- package/dist/adapters/notion/notion.service.js.map +1 -1
- package/dist/adapters/wordpress/wordpress.service.d.ts.map +1 -1
- package/dist/adapters/wordpress/wordpress.service.js +163 -85
- package/dist/adapters/wordpress/wordpress.service.js.map +1 -1
- package/dist/config/seo.service.d.ts.map +1 -1
- package/dist/config/seo.service.js +42 -4
- package/dist/config/seo.service.js.map +1 -1
- package/dist/core/index.d.ts +5 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +5 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/services/error.service.d.ts +21 -1
- package/dist/core/services/error.service.d.ts.map +1 -1
- package/dist/core/services/error.service.js +39 -0
- package/dist/core/services/error.service.js.map +1 -1
- package/dist/core/services/faker.service.d.ts +160 -0
- package/dist/core/services/faker.service.d.ts.map +1 -0
- package/dist/core/services/faker.service.js +235 -0
- package/dist/core/services/faker.service.js.map +1 -0
- package/dist/core/services/http.service.d.ts.map +1 -1
- package/dist/core/services/http.service.js +10 -16
- package/dist/core/services/http.service.js.map +1 -1
- package/dist/core/services/media.service.d.ts +97 -0
- package/dist/core/services/media.service.d.ts.map +1 -0
- package/dist/core/services/media.service.js +239 -0
- package/dist/core/services/media.service.js.map +1 -0
- package/dist/core/services/reactive.service.d.ts.map +1 -1
- package/dist/core/services/reactive.service.js +5 -14
- package/dist/core/services/reactive.service.js.map +1 -1
- package/dist/core/services/result.service.d.ts +41 -0
- package/dist/core/services/result.service.d.ts.map +1 -0
- package/dist/core/services/result.service.js +60 -0
- package/dist/core/services/result.service.js.map +1 -0
- package/dist/core/services/validation.service.d.ts +22 -0
- package/dist/core/services/validation.service.d.ts.map +1 -0
- package/dist/core/services/validation.service.js +41 -0
- package/dist/core/services/validation.service.js.map +1 -0
- package/dist/core/services/youtube.service.d.ts +79 -0
- package/dist/core/services/youtube.service.d.ts.map +1 -0
- package/dist/core/services/youtube.service.js +388 -0
- package/dist/core/services/youtube.service.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/filesystem/filesystem.service.d.ts +267 -0
- package/dist/infrastructure/filesystem/filesystem.service.d.ts.map +1 -0
- package/dist/infrastructure/filesystem/filesystem.service.js +453 -0
- package/dist/infrastructure/filesystem/filesystem.service.js.map +1 -0
- package/dist/infrastructure/filesystem/path.service.d.ts +115 -0
- package/dist/infrastructure/filesystem/path.service.d.ts.map +1 -0
- package/dist/infrastructure/filesystem/path.service.js +154 -0
- package/dist/infrastructure/filesystem/path.service.js.map +1 -0
- package/dist/infrastructure/index.d.ts +3 -0
- package/dist/infrastructure/index.d.ts.map +1 -1
- package/dist/infrastructure/index.js +3 -0
- package/dist/infrastructure/index.js.map +1 -1
- package/dist/infrastructure/media/media.service.d.ts +15 -0
- package/dist/infrastructure/media/media.service.d.ts.map +1 -0
- package/dist/infrastructure/media/media.service.js +44 -0
- package/dist/infrastructure/media/media.service.js.map +1 -0
- package/dist/infrastructure/storage/storage.service.d.ts.map +1 -1
- package/dist/infrastructure/storage/storage.service.js +10 -8
- package/dist/infrastructure/storage/storage.service.js.map +1 -1
- package/dist/schemas/access.schema.d.ts +69 -0
- package/dist/schemas/access.schema.d.ts.map +1 -0
- package/dist/schemas/access.schema.js +36 -0
- package/dist/schemas/access.schema.js.map +1 -0
- package/dist/schemas/ai.schema.d.ts +53 -0
- package/dist/schemas/ai.schema.d.ts.map +1 -0
- package/dist/schemas/ai.schema.js +34 -0
- package/dist/schemas/ai.schema.js.map +1 -0
- package/dist/schemas/common.schema.d.ts +49 -0
- package/dist/schemas/common.schema.d.ts.map +1 -0
- package/dist/schemas/common.schema.js +23 -0
- package/dist/schemas/common.schema.js.map +1 -0
- package/dist/schemas/core.schema.d.ts +164 -0
- package/dist/schemas/core.schema.d.ts.map +1 -0
- package/dist/schemas/core.schema.js +109 -0
- package/dist/schemas/core.schema.js.map +1 -0
- package/dist/schemas/faker.schema.d.ts +12 -0
- package/dist/schemas/faker.schema.d.ts.map +1 -0
- package/dist/schemas/faker.schema.js +12 -0
- package/dist/schemas/faker.schema.js.map +1 -0
- package/dist/schemas/filesystem.schema.d.ts +71 -0
- package/dist/schemas/filesystem.schema.d.ts.map +1 -0
- package/dist/schemas/filesystem.schema.js +56 -0
- package/dist/schemas/filesystem.schema.js.map +1 -0
- package/dist/schemas/index.d.ts +13 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +13 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/insforge.schema.d.ts +69 -0
- package/dist/schemas/insforge.schema.d.ts.map +1 -0
- package/dist/schemas/insforge.schema.js +82 -0
- package/dist/schemas/insforge.schema.js.map +1 -0
- package/dist/schemas/media.schema.d.ts +51 -0
- package/dist/schemas/media.schema.d.ts.map +1 -0
- package/dist/schemas/media.schema.js +50 -0
- package/dist/schemas/media.schema.js.map +1 -0
- package/dist/schemas/notion.schema.d.ts +1058 -0
- package/dist/schemas/notion.schema.d.ts.map +1 -0
- package/dist/schemas/notion.schema.js +248 -0
- package/dist/schemas/notion.schema.js.map +1 -0
- package/dist/schemas/rss.schema.d.ts +35 -0
- package/dist/schemas/rss.schema.d.ts.map +1 -0
- package/dist/schemas/rss.schema.js +44 -0
- package/dist/schemas/rss.schema.js.map +1 -0
- package/dist/schemas/wordpress.schema.d.ts +1304 -0
- package/dist/schemas/wordpress.schema.d.ts.map +1 -0
- package/dist/schemas/wordpress.schema.js +404 -0
- package/dist/schemas/wordpress.schema.js.map +1 -0
- package/dist/schemas/youtube.schema.d.ts +122 -0
- package/dist/schemas/youtube.schema.d.ts.map +1 -0
- package/dist/schemas/youtube.schema.js +113 -0
- package/dist/schemas/youtube.schema.js.map +1 -0
- package/dist/types/index.d.ts +191 -800
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +40 -15
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// Path facade — Node-only helpers with runtime guards.
|
|
3
|
+
// `node:path` and `node:url` load through dynamic `import()` so
|
|
4
|
+
// importing this module never pulls Node built-ins into a browser
|
|
5
|
+
// bundle. Outside Node/Bun the helpers throw; the filesystem
|
|
6
|
+
// service catches that surface and returns a Safe Result instead.
|
|
7
|
+
// ============================================================
|
|
8
|
+
/**
|
|
9
|
+
* Checks whether the code runs in a Node.js-compatible runtime
|
|
10
|
+
* (Node, Bun or Deno). Returns `false` in browsers and edge runtimes.
|
|
11
|
+
*
|
|
12
|
+
* @returns `true` when `process.versions.node` is available.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* import { useIsNode } from "katanakit-js";
|
|
17
|
+
*
|
|
18
|
+
* if (useIsNode()) {
|
|
19
|
+
* // safe to use node:fs / node:path
|
|
20
|
+
* }
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export const useIsNode = () => typeof process !== "undefined" && typeof process.versions?.node === "string";
|
|
24
|
+
/** Throws when a path helper is called outside a Node-compatible runtime. */
|
|
25
|
+
function assertNodeRuntime() {
|
|
26
|
+
if (!useIsNode()) {
|
|
27
|
+
throw new Error("[Filesystem] A Node.js-compatible runtime is required to use filesystem helpers.");
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/** Lazily loads `node:path` and `node:url` (the ESM loader caches both). */
|
|
31
|
+
async function loadModules() {
|
|
32
|
+
assertNodeRuntime();
|
|
33
|
+
const [path, url] = await Promise.all([import("node:path"), import("node:url")]);
|
|
34
|
+
return { path, url };
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Resolves the directory of a module from its `import.meta.url`.
|
|
38
|
+
*
|
|
39
|
+
* Unlike `import.meta.dirname`, this works for any module you pass in,
|
|
40
|
+
* so a consumer's app resolves its own paths — never KatanaKit's `dist/`.
|
|
41
|
+
*
|
|
42
|
+
* @param importMetaUrl - Your module's `import.meta.url`.
|
|
43
|
+
* @returns The absolute directory that contains the module.
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```ts
|
|
47
|
+
* import { useGetDirname } from "katanakit-js";
|
|
48
|
+
*
|
|
49
|
+
* const dir = await useGetDirname(import.meta.url);
|
|
50
|
+
* // "<project>/src/features/books"
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export async function useGetDirname(importMetaUrl) {
|
|
54
|
+
const { path, url } = await loadModules();
|
|
55
|
+
return path.dirname(url.fileURLToPath(importMetaUrl));
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Resolves a sequence of path segments into an absolute path.
|
|
59
|
+
* Relative segments resolve against `process.cwd()`; if the first
|
|
60
|
+
* segment is absolute (like a `useGetDirname` result), cwd is ignored.
|
|
61
|
+
*
|
|
62
|
+
* @param segments - Path segments to resolve.
|
|
63
|
+
* @returns The resolved absolute path.
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```ts
|
|
67
|
+
* const base = await useGetDirname(import.meta.url);
|
|
68
|
+
* const file = await useResolvePath(base, "../data/books.json");
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
export async function useResolvePath(...segments) {
|
|
72
|
+
const { path } = await loadModules();
|
|
73
|
+
return path.resolve(...segments);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Joins path segments without resolving against `process.cwd()`.
|
|
77
|
+
*
|
|
78
|
+
* @param segments - Path segments to join.
|
|
79
|
+
* @returns The joined (possibly relative) path.
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* ```ts
|
|
83
|
+
* await useJoinPath("data", "books.json"); // "data/books.json"
|
|
84
|
+
* ```
|
|
85
|
+
*/
|
|
86
|
+
export async function useJoinPath(...segments) {
|
|
87
|
+
const { path } = await loadModules();
|
|
88
|
+
return path.join(...segments);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Computes the relative path from `from` to `to`.
|
|
92
|
+
*
|
|
93
|
+
* @param from - Origin path.
|
|
94
|
+
* @param to - Destination path.
|
|
95
|
+
* @returns The relative path between both.
|
|
96
|
+
*
|
|
97
|
+
* @example
|
|
98
|
+
* ```ts
|
|
99
|
+
* await useGetRelativePath("/app/src", "/app/data/books.json"); // "../data/books.json"
|
|
100
|
+
* ```
|
|
101
|
+
*/
|
|
102
|
+
export async function useGetRelativePath(from, to) {
|
|
103
|
+
const { path } = await loadModules();
|
|
104
|
+
return path.relative(from, to);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Returns the last portion of a path (file name).
|
|
108
|
+
*
|
|
109
|
+
* @param filePath - The path to inspect.
|
|
110
|
+
* @param suffix - Optional suffix to strip (e.g. `".json"`).
|
|
111
|
+
* @returns The base name.
|
|
112
|
+
*
|
|
113
|
+
* @example
|
|
114
|
+
* ```ts
|
|
115
|
+
* await useGetBasename("/data/books.json"); // "books.json"
|
|
116
|
+
* await useGetBasename("/data/books.json", ".json"); // "books"
|
|
117
|
+
* ```
|
|
118
|
+
*/
|
|
119
|
+
export async function useGetBasename(filePath, suffix) {
|
|
120
|
+
const { path } = await loadModules();
|
|
121
|
+
return path.basename(filePath, suffix);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Returns the extension of a path, including the leading dot.
|
|
125
|
+
*
|
|
126
|
+
* @param filePath - The path to inspect.
|
|
127
|
+
* @returns The extension (`""` when there is none).
|
|
128
|
+
*
|
|
129
|
+
* @example
|
|
130
|
+
* ```ts
|
|
131
|
+
* await useGetFileExtension("/data/books.json"); // ".json"
|
|
132
|
+
* ```
|
|
133
|
+
*/
|
|
134
|
+
export async function useGetFileExtension(filePath) {
|
|
135
|
+
const { path } = await loadModules();
|
|
136
|
+
return path.extname(filePath);
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Returns the current working directory of the process (where the
|
|
140
|
+
* command was launched), or `null` outside a Node-compatible runtime.
|
|
141
|
+
* Use it for project-relative paths; use {@link useGetDirname} for
|
|
142
|
+
* file-relative paths.
|
|
143
|
+
*
|
|
144
|
+
* @returns The cwd, or `null` in browsers/edge runtimes.
|
|
145
|
+
*
|
|
146
|
+
* @example
|
|
147
|
+
* ```ts
|
|
148
|
+
* const cwd = useGetCwd(); // "/app" when launched from the project root
|
|
149
|
+
* ```
|
|
150
|
+
*/
|
|
151
|
+
export function useGetCwd() {
|
|
152
|
+
return useIsNode() ? process.cwd() : null;
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=path.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.service.js","sourceRoot":"","sources":["../../../src/infrastructure/filesystem/path.service.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,uDAAuD;AACvD,gEAAgE;AAChE,kEAAkE;AAClE,6DAA6D;AAC7D,kEAAkE;AAClE,+DAA+D;AAK/D;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,GAAY,EAAE,CACtC,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,OAAO,CAAC,QAAQ,EAAE,IAAI,KAAK,QAAQ,CAAC;AAE9E,6EAA6E;AAC7E,SAAS,iBAAiB;IACzB,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CACd,kFAAkF,CAClF,CAAC;IACH,CAAC;AACF,CAAC;AAED,4EAA4E;AAC5E,KAAK,UAAU,WAAW;IACzB,iBAAiB,EAAE,CAAC;IACpB,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACjF,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AACtB,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,aAAqB;IACxD,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC;IAC1C,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC;AACvD,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAG,QAAkB;IACzD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC;IACrC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC;AAClC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAG,QAAkB;IACtD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC;IACrC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;AAC/B,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAY,EAAE,EAAU;IAChE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC;IACrC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAChC,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAgB,EAAE,MAAe;IACrE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC;IACrC,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AACxC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,QAAgB;IACzD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC;IACrC,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC/B,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,SAAS;IACxB,OAAO,SAAS,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3C,CAAC"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
export * from "./dom/dom.service.js";
|
|
2
|
+
export * from "./filesystem/filesystem.service.js";
|
|
3
|
+
export * from "./filesystem/path.service.js";
|
|
4
|
+
export * from "./media/media.service.js";
|
|
2
5
|
export * from "./observer/observer.service.js";
|
|
3
6
|
export * from "./sensors/sensors.service.js";
|
|
4
7
|
export * from "./storage/storage.service.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/infrastructure/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/infrastructure/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,oCAAoC,CAAC;AACnD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC"}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
export * from "./dom/dom.service.js";
|
|
2
|
+
export * from "./filesystem/filesystem.service.js";
|
|
3
|
+
export * from "./filesystem/path.service.js";
|
|
4
|
+
export * from "./media/media.service.js";
|
|
2
5
|
export * from "./observer/observer.service.js";
|
|
3
6
|
export * from "./sensors/sensors.service.js";
|
|
4
7
|
export * from "./storage/storage.service.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/infrastructure/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/infrastructure/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,oCAAoC,CAAC;AACnD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hydrates click-to-play facades rendered by `useBuildVideoEmbed`.
|
|
3
|
+
* SSR-safe: no-op outside the browser, no side effects on import.
|
|
4
|
+
* Call once per page (Astro/React/Vue/MDX `useEffect` or inline script).
|
|
5
|
+
*
|
|
6
|
+
* @param root - Scope element or document (defaults to `document`).
|
|
7
|
+
* @returns Cleanup function removing the delegated listener.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* useEnhanceVideoFacades(); // click on [data-video-facade] swaps in the iframe
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export declare function useEnhanceVideoFacades(root?: ParentNode): () => void;
|
|
15
|
+
//# sourceMappingURL=media.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media.service.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/media/media.service.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,MAAM,IAAI,CA2BpE"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { useIsBrowser } from "../dom/dom.service.js";
|
|
2
|
+
/**
|
|
3
|
+
* Hydrates click-to-play facades rendered by `useBuildVideoEmbed`.
|
|
4
|
+
* SSR-safe: no-op outside the browser, no side effects on import.
|
|
5
|
+
* Call once per page (Astro/React/Vue/MDX `useEffect` or inline script).
|
|
6
|
+
*
|
|
7
|
+
* @param root - Scope element or document (defaults to `document`).
|
|
8
|
+
* @returns Cleanup function removing the delegated listener.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* useEnhanceVideoFacades(); // click on [data-video-facade] swaps in the iframe
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
export function useEnhanceVideoFacades(root) {
|
|
16
|
+
if (!useIsBrowser())
|
|
17
|
+
return () => undefined;
|
|
18
|
+
const scope = root ?? document;
|
|
19
|
+
const onClick = (event) => {
|
|
20
|
+
const target = event.target;
|
|
21
|
+
const button = target?.closest?.("[data-video-facade]");
|
|
22
|
+
if (!button || !scope.contains(button))
|
|
23
|
+
return;
|
|
24
|
+
const src = button.getAttribute("data-video-facade");
|
|
25
|
+
if (!src)
|
|
26
|
+
return;
|
|
27
|
+
const label = button.getAttribute("aria-label") ?? "Embedded video";
|
|
28
|
+
const iframe = document.createElement("iframe");
|
|
29
|
+
iframe.src = src;
|
|
30
|
+
iframe.title = label;
|
|
31
|
+
iframe.loading = "lazy";
|
|
32
|
+
iframe.referrerPolicy = "strict-origin-when-cross-origin";
|
|
33
|
+
iframe.allow =
|
|
34
|
+
"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share";
|
|
35
|
+
iframe.allowFullscreen = true;
|
|
36
|
+
iframe.style.width = "100%";
|
|
37
|
+
iframe.style.height = "100%";
|
|
38
|
+
iframe.style.border = "0";
|
|
39
|
+
button.replaceWith(iframe);
|
|
40
|
+
};
|
|
41
|
+
scope.addEventListener("click", onClick);
|
|
42
|
+
return () => scope.removeEventListener("click", onClick);
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=media.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media.service.js","sourceRoot":"","sources":["../../../src/infrastructure/media/media.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAiB;IACvD,IAAI,CAAC,YAAY,EAAE;QAAE,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC;IAC5C,MAAM,KAAK,GAAG,IAAI,IAAI,QAAQ,CAAC;IAE/B,MAAM,OAAO,GAAG,CAAC,KAAY,EAAQ,EAAE;QACtC,MAAM,MAAM,GAAG,KAAK,CAAC,MAA4B,CAAC;QAClD,MAAM,MAAM,GAAG,MAAM,EAAE,OAAO,EAAE,CAAC,qBAAqB,CAA6B,CAAC;QACpF,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO;QAC/C,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC;QACrD,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,gBAAgB,CAAC;QACpE,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;QACjB,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QACrB,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC;QACxB,MAAM,CAAC,cAAc,GAAG,iCAAiC,CAAC;QAC1D,MAAM,CAAC,KAAK;YACX,qGAAqG,CAAC;QACvG,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;QAC5B,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QAC7B,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;QAC1B,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC,CAAC;IAEF,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACzC,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC1D,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.service.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/storage/storage.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"storage.service.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/storage/storage.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AA6D3E;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAuB7C;AAMD;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,eAAe,CAGvE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,eAAe,CAGzE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,IAAI,eAAe,CAEvD;AAyJD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAQhF;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,aAAa,GAAI,CAAC,GAAG,OAAO,EACxC,KAAK,MAAM,EACX,SAAQ,aAA8B,KACpC,CAAC,GAAG,IAAkD,CAAC;AAE1D;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,aAAa,GACzB,KAAK,MAAM,EACX,OAAO,OAAO,EACd,SAAQ,aAA8B,KACpC,IAAsD,CAAC;AAE1D;;;;;;;;;;GAUG;AACH,eAAO,MAAM,gBAAgB,GAAI,KAAK,MAAM,EAAE,SAAQ,aAA8B,KAAG,IAC5C,CAAC;AAE5C;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,GAAI,SAAQ,aAA8B,KAAG,IACtC,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { useTryJsonParse } from "../../core/services/result.service.js";
|
|
1
2
|
// ============================================================
|
|
2
3
|
// Strategy factories (plain objects implementing StorageStrategy)
|
|
3
4
|
// ============================================================
|
|
@@ -11,18 +12,19 @@
|
|
|
11
12
|
function createWebStorageStrategy(storage) {
|
|
12
13
|
return {
|
|
13
14
|
useGetItem(key) {
|
|
15
|
+
let raw;
|
|
14
16
|
try {
|
|
15
|
-
|
|
16
|
-
return raw ? JSON.parse(raw) : null;
|
|
17
|
+
raw = storage.getItem(key);
|
|
17
18
|
}
|
|
18
19
|
catch {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}
|
|
22
|
-
catch {
|
|
23
|
-
return null;
|
|
24
|
-
}
|
|
20
|
+
// Unavailable storage.
|
|
21
|
+
return null;
|
|
25
22
|
}
|
|
23
|
+
if (!raw)
|
|
24
|
+
return null;
|
|
25
|
+
// Non-JSON values fall back to the raw string (legacy contract).
|
|
26
|
+
const parsed = useTryJsonParse(raw);
|
|
27
|
+
return parsed.ok ? parsed.data : raw;
|
|
26
28
|
},
|
|
27
29
|
useSetItem(key, value) {
|
|
28
30
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.service.js","sourceRoot":"","sources":["../../../src/infrastructure/storage/storage.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"storage.service.js","sourceRoot":"","sources":["../../../src/infrastructure/storage/storage.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAGxE,+DAA+D;AAC/D,kEAAkE;AAClE,+DAA+D;AAE/D;;;;;;GAMG;AACH,SAAS,wBAAwB,CAAC,OAAgB;IACjD,OAAO;QACN,UAAU,CAAc,GAAW;YAClC,IAAI,GAAkB,CAAC;YACvB,IAAI,CAAC;gBACJ,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC5B,CAAC;YAAC,MAAM,CAAC;gBACR,uBAAuB;gBACvB,OAAO,IAAI,CAAC;YACb,CAAC;YACD,IAAI,CAAC,GAAG;gBAAE,OAAO,IAAI,CAAC;YAEtB,iEAAiE;YACjE,MAAM,MAAM,GAAG,eAAe,CAAI,GAAG,CAAC,CAAC;YACvC,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAE,GAAoB,CAAC;QACxD,CAAC;QAED,UAAU,CAAC,GAAW,EAAE,KAAc;YACrC,IAAI,CAAC;gBACJ,MAAM,UAAU,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBAC7E,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;YAClC,CAAC;YAAC,MAAM,CAAC;gBACR,iEAAiE;YAClE,CAAC;QACF,CAAC;QAED,aAAa,CAAC,GAAW;YACxB,IAAI,CAAC;gBACJ,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACzB,CAAC;YAAC,MAAM,CAAC;gBACR,8BAA8B;YAC/B,CAAC;QACF,CAAC;QAED,QAAQ;YACP,IAAI,CAAC;gBACJ,OAAO,CAAC,KAAK,EAAE,CAAC;YACjB,CAAC;YAAC,MAAM,CAAC;gBACR,8BAA8B;YAC/B,CAAC;QACF,CAAC;KACD,CAAC;AACH,CAAC;AAED,+DAA+D;AAC/D,mCAAmC;AACnC,+DAA+D;AAE/D;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,mBAAmB;IAClC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IAExC,OAAO;QACN,IAAI,MAAM;YACT,OAAO,KAAK,CAAC,IAAI,CAAC;QACnB,CAAC;QACD,KAAK;YACJ,KAAK,CAAC,KAAK,EAAE,CAAC;QACf,CAAC;QACD,OAAO,CAAC,GAAW;YAClB,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;QAC/B,CAAC;QACD,GAAG,CAAC,KAAa;YAChB,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;QAChD,CAAC;QACD,UAAU,CAAC,GAAW;YACrB,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;QACD,OAAO,CAAC,GAAW,EAAE,KAAa;YACjC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACvB,CAAC;KACD,CAAC;AACH,CAAC;AAED,+DAA+D;AAC/D,8BAA8B;AAC9B,+DAA+D;AAE/D;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAiB;IACrD,MAAM,QAAQ,GAAG,OAAO,IAAI,sBAAsB,EAAE,CAAC;IACrD,OAAO,QAAQ,CAAC,CAAC,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,qBAAqB,EAAE,CAAC;AAChF,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAiB;IACvD,MAAM,QAAQ,GAAG,OAAO,IAAI,wBAAwB,EAAE,CAAC;IACvD,OAAO,QAAQ,CAAC,CAAC,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,qBAAqB,EAAE,CAAC;AAChF,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,qBAAqB;IACpC,OAAO,wBAAwB,CAAC,mBAAmB,EAAE,CAAC,CAAC;AACxD,CAAC;AAED,+DAA+D;AAC/D,iCAAiC;AACjC,+DAA+D;AAE/D;;GAEG;AACH,SAAS,sBAAsB;IAC9B,IAAI,CAAC;QACJ,OAAO,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;IACnE,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AAED;;GAEG;AACH,SAAS,wBAAwB;IAChC,IAAI,CAAC;QACJ,OAAO,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC;IACrE,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AAgBD,SAAS,oBAAoB;IAC5B,OAAO;QACN,QAAQ,EAAE,GAAG,EAAE,CAAC,SAAS;QACzB,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE;KACzB,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,IAAI,aAAa,GAAuC,oBAAoB,EAAE,CAAC;AAE/E;;;;;GAKG;AACH,IAAI,YAAY,GAAyB,IAAI,CAAC;AAE9C,KAAK,UAAU,aAAa;IAC3B,IAAI,YAAY;QAAE,OAAO,YAAY,CAAC;IAEtC,YAAY,GAAG,CAAC,KAAK,IAAI,EAAE;QAC1B,IAAI,CAAC;YACJ,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;YAC7C,MAAM,QAAQ,GAAG,GAAG,CAAC,iBAAiB,CAAC;YACvC,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;gBACpC,aAAa,GAAG,IAAI,QAAQ,EAAwC,CAAC;YACtE,CAAC;QACF,CAAC;QAAC,MAAM,CAAC;YACR,mEAAmE;QACpE,CAAC;IACF,CAAC,CAAC,EAAE,CAAC;IAEL,OAAO,YAAY,CAAC;AACrB,CAAC;AAQD,2DAA2D;AAC3D,IAAI,iBAAiB,GAAuB,IAAI,CAAC;AAEjD,SAAS,sBAAsB;IAC9B,OAAO;QACN,YAAY,EAAE,qBAAqB,EAAE;QACrC,cAAc,EAAE,qBAAqB,EAAE;KACvC,CAAC;AACH,CAAC;AAED,SAAS,0BAA0B;IAClC,MAAM,KAAK,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;IACtD,OAAO;QACN,YAAY,EAAE,KAAK,IAAI,qBAAqB,EAAE;QAC9C,cAAc,EAAE,OAAO,IAAI,qBAAqB,EAAE;KAClD,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,mBAAmB,CAAC,IAAuC;IACnE,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IAC/C,IAAI,CAAC;QACJ,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,QAAQ,GAAG,sBAAsB,CAAC;QACxC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC/B,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,IAAI,KAAK,cAAc,CAAC,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAClG,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AAED;;;GAGG;AACH,SAAS,aAAa;IACrB,MAAM,SAAS,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC;IAEhD,IAAI,SAAS,EAAE,CAAC;QACf,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACxB,iBAAiB,GAAG,0BAA0B,EAAE,CAAC;QAClD,CAAC;QACD,OAAO,iBAAiB,CAAC;IAC1B,CAAC;IAED,4DAA4D;IAC5D,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,EAAE,CAAC;IACxC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,iFAAiF;IACjF,OAAO,sBAAsB,EAAE,CAAC;AACjC,CAAC;AAED,+DAA+D;AAC/D,aAAa;AACb,+DAA+D;AAE/D;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAI,EAAwB;IACnE,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QACnC,6CAA6C;QAC7C,OAAO,EAAE,EAAE,CAAC;IACb,CAAC;IACD,qEAAqE;IACrE,MAAM,aAAa,EAAE,CAAC;IACtB,OAAO,aAAa,CAAC,GAAG,CAAC,sBAAsB,EAAE,EAAE,EAAE,CAAC,CAAC;AACxD,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC5B,GAAW,EACX,SAAwB,cAAc,EAC3B,EAAE,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC,UAAU,CAAI,GAAG,CAAC,CAAC;AAE1D;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC5B,GAAW,EACX,KAAc,EACd,SAAwB,cAAc,EAC/B,EAAE,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAE1D;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,GAAW,EAAE,SAAwB,cAAc,EAAQ,EAAE,CAC7F,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AAE5C;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,SAAwB,cAAc,EAAQ,EAAE,CAC/E,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/** Built-in roles, ordered from most to least privileged. */
|
|
3
|
+
export declare const AccessRoleSchema: z.ZodEnum<{
|
|
4
|
+
author: "author";
|
|
5
|
+
owner: "owner";
|
|
6
|
+
admin: "admin";
|
|
7
|
+
editor: "editor";
|
|
8
|
+
member: "member";
|
|
9
|
+
guest: "guest";
|
|
10
|
+
}>;
|
|
11
|
+
/**
|
|
12
|
+
* Namespaced capabilities derived from the project domain.
|
|
13
|
+
* Format: `<domain>:<action>[:<scope>]`.
|
|
14
|
+
*/
|
|
15
|
+
export declare const AccessCapabilitySchema: z.ZodEnum<{
|
|
16
|
+
"content:create": "content:create";
|
|
17
|
+
"content:publish": "content:publish";
|
|
18
|
+
"content:edit:own": "content:edit:own";
|
|
19
|
+
"content:edit:any": "content:edit:any";
|
|
20
|
+
"content:delete:own": "content:delete:own";
|
|
21
|
+
"content:delete:any": "content:delete:any";
|
|
22
|
+
"conversations:use": "conversations:use";
|
|
23
|
+
"conversations:moderate": "conversations:moderate";
|
|
24
|
+
"members:manage": "members:manage";
|
|
25
|
+
"roles:assign": "roles:assign";
|
|
26
|
+
"system:admin": "system:admin";
|
|
27
|
+
}>;
|
|
28
|
+
/** A role definition: slug, human label and the capabilities it grants. */
|
|
29
|
+
export declare const AccessRoleDefinitionSchema: z.ZodObject<{
|
|
30
|
+
slug: z.ZodEnum<{
|
|
31
|
+
author: "author";
|
|
32
|
+
owner: "owner";
|
|
33
|
+
admin: "admin";
|
|
34
|
+
editor: "editor";
|
|
35
|
+
member: "member";
|
|
36
|
+
guest: "guest";
|
|
37
|
+
}>;
|
|
38
|
+
label: z.ZodString;
|
|
39
|
+
capabilities: z.ZodArray<z.ZodEnum<{
|
|
40
|
+
"content:create": "content:create";
|
|
41
|
+
"content:publish": "content:publish";
|
|
42
|
+
"content:edit:own": "content:edit:own";
|
|
43
|
+
"content:edit:any": "content:edit:any";
|
|
44
|
+
"content:delete:own": "content:delete:own";
|
|
45
|
+
"content:delete:any": "content:delete:any";
|
|
46
|
+
"conversations:use": "conversations:use";
|
|
47
|
+
"conversations:moderate": "conversations:moderate";
|
|
48
|
+
"members:manage": "members:manage";
|
|
49
|
+
"roles:assign": "roles:assign";
|
|
50
|
+
"system:admin": "system:admin";
|
|
51
|
+
}>>;
|
|
52
|
+
}, z.core.$strip>;
|
|
53
|
+
/**
|
|
54
|
+
* Structural subject for access checks. Decoupled from the persistence layer:
|
|
55
|
+
* any object with an id and a role list can be checked (e.g. a Prisma
|
|
56
|
+
* `Account` row, a JWT payload, or a test fixture).
|
|
57
|
+
*/
|
|
58
|
+
export declare const AccessSubjectSchema: z.ZodObject<{
|
|
59
|
+
id: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
|
|
60
|
+
roles: z.ZodArray<z.ZodEnum<{
|
|
61
|
+
author: "author";
|
|
62
|
+
owner: "owner";
|
|
63
|
+
admin: "admin";
|
|
64
|
+
editor: "editor";
|
|
65
|
+
member: "member";
|
|
66
|
+
guest: "guest";
|
|
67
|
+
}>>;
|
|
68
|
+
}, z.core.$strip>;
|
|
69
|
+
//# sourceMappingURL=access.schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"access.schema.d.ts","sourceRoot":"","sources":["../../src/schemas/access.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,6DAA6D;AAC7D,eAAO,MAAM,gBAAgB;;;;;;;EAAoE,CAAC;AAElG;;;GAGG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;EAYjC,CAAC;AAEH,2EAA2E;AAC3E,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;iBAIrC,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;iBAG9B,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/** Built-in roles, ordered from most to least privileged. */
|
|
3
|
+
export const AccessRoleSchema = z.enum(["owner", "admin", "editor", "author", "member", "guest"]);
|
|
4
|
+
/**
|
|
5
|
+
* Namespaced capabilities derived from the project domain.
|
|
6
|
+
* Format: `<domain>:<action>[:<scope>]`.
|
|
7
|
+
*/
|
|
8
|
+
export const AccessCapabilitySchema = z.enum([
|
|
9
|
+
"content:create",
|
|
10
|
+
"content:publish",
|
|
11
|
+
"content:edit:own",
|
|
12
|
+
"content:edit:any",
|
|
13
|
+
"content:delete:own",
|
|
14
|
+
"content:delete:any",
|
|
15
|
+
"conversations:use",
|
|
16
|
+
"conversations:moderate",
|
|
17
|
+
"members:manage",
|
|
18
|
+
"roles:assign",
|
|
19
|
+
"system:admin",
|
|
20
|
+
]);
|
|
21
|
+
/** A role definition: slug, human label and the capabilities it grants. */
|
|
22
|
+
export const AccessRoleDefinitionSchema = z.object({
|
|
23
|
+
slug: AccessRoleSchema,
|
|
24
|
+
label: z.string().min(1),
|
|
25
|
+
capabilities: z.array(AccessCapabilitySchema),
|
|
26
|
+
});
|
|
27
|
+
/**
|
|
28
|
+
* Structural subject for access checks. Decoupled from the persistence layer:
|
|
29
|
+
* any object with an id and a role list can be checked (e.g. a Prisma
|
|
30
|
+
* `Account` row, a JWT payload, or a test fixture).
|
|
31
|
+
*/
|
|
32
|
+
export const AccessSubjectSchema = z.object({
|
|
33
|
+
id: z.union([z.string(), z.number()]),
|
|
34
|
+
roles: z.array(AccessRoleSchema),
|
|
35
|
+
});
|
|
36
|
+
//# sourceMappingURL=access.schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"access.schema.js","sourceRoot":"","sources":["../../src/schemas/access.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,6DAA6D;AAC7D,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AAElG;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,IAAI,CAAC;IAC5C,gBAAgB;IAChB,iBAAiB;IACjB,kBAAkB;IAClB,kBAAkB;IAClB,oBAAoB;IACpB,oBAAoB;IACpB,mBAAmB;IACnB,wBAAwB;IACxB,gBAAgB;IAChB,cAAc;IACd,cAAc;CACd,CAAC,CAAC;AAEH,2EAA2E;AAC3E,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,IAAI,EAAE,gBAAgB;IACtB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC;CAC7C,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACrC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC;CAChC,CAAC,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/** Role of a chat message in the OpenAI-compatible protocol. */
|
|
3
|
+
export declare const AiRoleSchema: z.ZodEnum<{
|
|
4
|
+
system: "system";
|
|
5
|
+
user: "user";
|
|
6
|
+
assistant: "assistant";
|
|
7
|
+
tool: "tool";
|
|
8
|
+
}>;
|
|
9
|
+
/** Function invocation requested by the model when using tools. */
|
|
10
|
+
export declare const AiFunctionCallSchema: z.ZodObject<{
|
|
11
|
+
name: z.ZodString;
|
|
12
|
+
arguments: z.ZodString;
|
|
13
|
+
}, z.core.$strip>;
|
|
14
|
+
/** A single tool call emitted by the model (OpenAI-compatible wire shape). */
|
|
15
|
+
export declare const AiToolCallSchema: z.ZodObject<{
|
|
16
|
+
id: z.ZodString;
|
|
17
|
+
type: z.ZodLiteral<"function">;
|
|
18
|
+
function: z.ZodObject<{
|
|
19
|
+
name: z.ZodString;
|
|
20
|
+
arguments: z.ZodString;
|
|
21
|
+
}, z.core.$strip>;
|
|
22
|
+
}, z.core.$strip>;
|
|
23
|
+
/**
|
|
24
|
+
* A chat message. `tool_calls` and `tool_call_id` use snake_case on purpose:
|
|
25
|
+
* they mirror the OpenAI-compatible protocol so messages pass through unchanged.
|
|
26
|
+
*/
|
|
27
|
+
export declare const AiMessageSchema: z.ZodObject<{
|
|
28
|
+
role: z.ZodEnum<{
|
|
29
|
+
system: "system";
|
|
30
|
+
user: "user";
|
|
31
|
+
assistant: "assistant";
|
|
32
|
+
tool: "tool";
|
|
33
|
+
}>;
|
|
34
|
+
content: z.ZodNullable<z.ZodString>;
|
|
35
|
+
tool_calls: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
36
|
+
id: z.ZodString;
|
|
37
|
+
type: z.ZodLiteral<"function">;
|
|
38
|
+
function: z.ZodObject<{
|
|
39
|
+
name: z.ZodString;
|
|
40
|
+
arguments: z.ZodString;
|
|
41
|
+
}, z.core.$strip>;
|
|
42
|
+
}, z.core.$strip>>>;
|
|
43
|
+
tool_call_id: z.ZodOptional<z.ZodString>;
|
|
44
|
+
name: z.ZodOptional<z.ZodString>;
|
|
45
|
+
}, z.core.$strip>;
|
|
46
|
+
/** Provider configuration for an OpenAI-compatible chat/agent endpoint. */
|
|
47
|
+
export declare const AiProviderConfigSchema: z.ZodObject<{
|
|
48
|
+
apiKey: z.ZodString;
|
|
49
|
+
baseUrl: z.ZodString;
|
|
50
|
+
model: z.ZodString;
|
|
51
|
+
systemPrompt: z.ZodOptional<z.ZodString>;
|
|
52
|
+
}, z.core.$strip>;
|
|
53
|
+
//# sourceMappingURL=ai.schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai.schema.d.ts","sourceRoot":"","sources":["../../src/schemas/ai.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,gEAAgE;AAChE,eAAO,MAAM,YAAY;;;;;EAAkD,CAAC;AAE5E,mEAAmE;AACnE,eAAO,MAAM,oBAAoB;;;iBAG/B,CAAC;AAEH,8EAA8E;AAC9E,eAAO,MAAM,gBAAgB;;;;;;;iBAI3B,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;iBAM1B,CAAC;AAEH,2EAA2E;AAC3E,eAAO,MAAM,sBAAsB;;;;;iBAMjC,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/** Role of a chat message in the OpenAI-compatible protocol. */
|
|
3
|
+
export const AiRoleSchema = z.enum(["system", "user", "assistant", "tool"]);
|
|
4
|
+
/** Function invocation requested by the model when using tools. */
|
|
5
|
+
export const AiFunctionCallSchema = z.object({
|
|
6
|
+
name: z.string().min(1),
|
|
7
|
+
arguments: z.string(),
|
|
8
|
+
});
|
|
9
|
+
/** A single tool call emitted by the model (OpenAI-compatible wire shape). */
|
|
10
|
+
export const AiToolCallSchema = z.object({
|
|
11
|
+
id: z.string().min(1),
|
|
12
|
+
type: z.literal("function"),
|
|
13
|
+
function: AiFunctionCallSchema,
|
|
14
|
+
});
|
|
15
|
+
/**
|
|
16
|
+
* A chat message. `tool_calls` and `tool_call_id` use snake_case on purpose:
|
|
17
|
+
* they mirror the OpenAI-compatible protocol so messages pass through unchanged.
|
|
18
|
+
*/
|
|
19
|
+
export const AiMessageSchema = z.object({
|
|
20
|
+
role: AiRoleSchema,
|
|
21
|
+
content: z.string().nullable(),
|
|
22
|
+
tool_calls: z.array(AiToolCallSchema).optional(),
|
|
23
|
+
tool_call_id: z.string().optional(),
|
|
24
|
+
name: z.string().optional(),
|
|
25
|
+
});
|
|
26
|
+
/** Provider configuration for an OpenAI-compatible chat/agent endpoint. */
|
|
27
|
+
export const AiProviderConfigSchema = z.object({
|
|
28
|
+
apiKey: z.string(),
|
|
29
|
+
baseUrl: z.string().min(1),
|
|
30
|
+
model: z.string().min(1),
|
|
31
|
+
/** Default system prompt. */
|
|
32
|
+
systemPrompt: z.string().optional(),
|
|
33
|
+
});
|
|
34
|
+
//# sourceMappingURL=ai.schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai.schema.js","sourceRoot":"","sources":["../../src/schemas/ai.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,gEAAgE;AAChE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;AAE5E,mEAAmE;AACnE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;CACrB,CAAC,CAAC;AAEH,8EAA8E;AAC9E,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;IAC3B,QAAQ,EAAE,oBAAoB;CAC9B,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,YAAY;IAClB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,QAAQ,EAAE;IAChD,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC3B,CAAC,CAAC;AAEH,2EAA2E;AAC3E,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,6BAA6B;IAC7B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACnC,CAAC,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/** Native console methods used as log levels. */
|
|
3
|
+
export declare const LogLevelSchema: z.ZodEnum<{
|
|
4
|
+
error: "error";
|
|
5
|
+
log: "log";
|
|
6
|
+
warn: "warn";
|
|
7
|
+
}>;
|
|
8
|
+
/** HTTP verbs supported by the fetch facade. */
|
|
9
|
+
export declare const HttpMethodSchema: z.ZodEnum<{
|
|
10
|
+
GET: "GET";
|
|
11
|
+
POST: "POST";
|
|
12
|
+
PUT: "PUT";
|
|
13
|
+
DELETE: "DELETE";
|
|
14
|
+
PATCH: "PATCH";
|
|
15
|
+
}>;
|
|
16
|
+
/** Storage backends (Web Storage API). */
|
|
17
|
+
export declare const StorageTargetSchema: z.ZodEnum<{
|
|
18
|
+
localStorage: "localStorage";
|
|
19
|
+
sessionStorage: "sessionStorage";
|
|
20
|
+
}>;
|
|
21
|
+
/** Locales with first-class formatting support. */
|
|
22
|
+
export declare const LocaleSchema: z.ZodEnum<{
|
|
23
|
+
en: "en";
|
|
24
|
+
es: "es";
|
|
25
|
+
fr: "fr";
|
|
26
|
+
de: "de";
|
|
27
|
+
it: "it";
|
|
28
|
+
pt: "pt";
|
|
29
|
+
ja: "ja";
|
|
30
|
+
zh: "zh";
|
|
31
|
+
}>;
|
|
32
|
+
/** Color scheme modes. */
|
|
33
|
+
export declare const ThemeModeSchema: z.ZodEnum<{
|
|
34
|
+
system: "system";
|
|
35
|
+
light: "light";
|
|
36
|
+
dark: "dark";
|
|
37
|
+
}>;
|
|
38
|
+
/** Serialized error shape. */
|
|
39
|
+
export declare const SerializedErrorSchema: z.ZodObject<{
|
|
40
|
+
message: z.ZodString;
|
|
41
|
+
code: z.ZodNumber;
|
|
42
|
+
}, z.core.$strip>;
|
|
43
|
+
/** Safe error returned on non-2xx, network or validation failures. */
|
|
44
|
+
export declare const ApiErrorSchema: z.ZodObject<{
|
|
45
|
+
message: z.ZodString;
|
|
46
|
+
status: z.ZodNumber;
|
|
47
|
+
details: z.ZodOptional<z.ZodUnknown>;
|
|
48
|
+
}, z.core.$strip>;
|
|
49
|
+
//# sourceMappingURL=common.schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.schema.d.ts","sourceRoot":"","sources":["../../src/schemas/common.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,iDAAiD;AACjD,eAAO,MAAM,cAAc;;;;EAAmC,CAAC;AAE/D,gDAAgD;AAChD,eAAO,MAAM,gBAAgB;;;;;;EAAoD,CAAC;AAElF,0CAA0C;AAC1C,eAAO,MAAM,mBAAmB;;;EAA6C,CAAC;AAE9E,mDAAmD;AACnD,eAAO,MAAM,YAAY;;;;;;;;;EAA2D,CAAC;AAErF,0BAA0B;AAC1B,eAAO,MAAM,eAAe;;;;EAAsC,CAAC;AAEnE,8BAA8B;AAC9B,eAAO,MAAM,qBAAqB;;;iBAGhC,CAAC;AAEH,sEAAsE;AACtE,eAAO,MAAM,cAAc;;;;iBAIzB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/** Native console methods used as log levels. */
|
|
3
|
+
export const LogLevelSchema = z.enum(["log", "warn", "error"]);
|
|
4
|
+
/** HTTP verbs supported by the fetch facade. */
|
|
5
|
+
export const HttpMethodSchema = z.enum(["GET", "POST", "PUT", "DELETE", "PATCH"]);
|
|
6
|
+
/** Storage backends (Web Storage API). */
|
|
7
|
+
export const StorageTargetSchema = z.enum(["localStorage", "sessionStorage"]);
|
|
8
|
+
/** Locales with first-class formatting support. */
|
|
9
|
+
export const LocaleSchema = z.enum(["en", "es", "fr", "de", "it", "pt", "ja", "zh"]);
|
|
10
|
+
/** Color scheme modes. */
|
|
11
|
+
export const ThemeModeSchema = z.enum(["light", "dark", "system"]);
|
|
12
|
+
/** Serialized error shape. */
|
|
13
|
+
export const SerializedErrorSchema = z.object({
|
|
14
|
+
message: z.string(),
|
|
15
|
+
code: z.number(),
|
|
16
|
+
});
|
|
17
|
+
/** Safe error returned on non-2xx, network or validation failures. */
|
|
18
|
+
export const ApiErrorSchema = z.object({
|
|
19
|
+
message: z.string(),
|
|
20
|
+
status: z.number(),
|
|
21
|
+
details: z.unknown().optional(),
|
|
22
|
+
});
|
|
23
|
+
//# sourceMappingURL=common.schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.schema.js","sourceRoot":"","sources":["../../src/schemas/common.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,iDAAiD;AACjD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAE/D,gDAAgD;AAChD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AAElF,0CAA0C;AAC1C,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC,CAAC;AAE9E,mDAAmD;AACnD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAErF,0BAA0B;AAC1B,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;AAEnE,8BAA8B;AAC9B,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;CAChB,CAAC,CAAC;AAEH,sEAAsE;AACtE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC,CAAC"}
|