@rockhall/electron-offline-content 0.4.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/CHANGELOG.md +384 -0
- package/LICENSE +21 -0
- package/README.md +794 -0
- package/dist/internal/asset-file-name.cjs +13 -0
- package/dist/internal/asset-file-name.cjs.map +1 -0
- package/dist/internal/asset-file-name.d.cts +6 -0
- package/dist/internal/asset-file-name.d.cts.map +1 -0
- package/dist/internal/asset-file-name.d.ts +6 -0
- package/dist/internal/asset-file-name.d.ts.map +1 -0
- package/dist/internal/asset-file-name.js +12 -0
- package/dist/internal/asset-file-name.js.map +1 -0
- package/dist/internal/asset-key.cjs +30 -0
- package/dist/internal/asset-key.cjs.map +1 -0
- package/dist/internal/asset-key.d.cts +19 -0
- package/dist/internal/asset-key.d.cts.map +1 -0
- package/dist/internal/asset-key.d.ts +19 -0
- package/dist/internal/asset-key.d.ts.map +1 -0
- package/dist/internal/asset-key.js +27 -0
- package/dist/internal/asset-key.js.map +1 -0
- package/dist/internal/log-format.cjs +98 -0
- package/dist/internal/log-format.cjs.map +1 -0
- package/dist/internal/log-format.d.cts +10 -0
- package/dist/internal/log-format.d.cts.map +1 -0
- package/dist/internal/log-format.d.ts +10 -0
- package/dist/internal/log-format.d.ts.map +1 -0
- package/dist/internal/log-format.js +97 -0
- package/dist/internal/log-format.js.map +1 -0
- package/dist/internal/media-kind.cjs +46 -0
- package/dist/internal/media-kind.cjs.map +1 -0
- package/dist/internal/media-kind.d.cts +20 -0
- package/dist/internal/media-kind.d.cts.map +1 -0
- package/dist/internal/media-kind.d.ts +20 -0
- package/dist/internal/media-kind.d.ts.map +1 -0
- package/dist/internal/media-kind.js +45 -0
- package/dist/internal/media-kind.js.map +1 -0
- package/dist/internal/url-warn.cjs +14 -0
- package/dist/internal/url-warn.cjs.map +1 -0
- package/dist/internal/url-warn.d.cts +10 -0
- package/dist/internal/url-warn.d.cts.map +1 -0
- package/dist/internal/url-warn.d.ts +10 -0
- package/dist/internal/url-warn.d.ts.map +1 -0
- package/dist/internal/url-warn.js +13 -0
- package/dist/internal/url-warn.js.map +1 -0
- package/dist/internal/validation.cjs +222 -0
- package/dist/internal/validation.cjs.map +1 -0
- package/dist/internal/validation.d.cts +78 -0
- package/dist/internal/validation.d.cts.map +1 -0
- package/dist/internal/validation.d.ts +78 -0
- package/dist/internal/validation.d.ts.map +1 -0
- package/dist/internal/validation.js +196 -0
- package/dist/internal/validation.js.map +1 -0
- package/dist/main/asset-download.cjs +265 -0
- package/dist/main/asset-download.cjs.map +1 -0
- package/dist/main/asset-download.d.cts +12 -0
- package/dist/main/asset-download.d.cts.map +1 -0
- package/dist/main/asset-download.d.ts +12 -0
- package/dist/main/asset-download.d.ts.map +1 -0
- package/dist/main/asset-download.js +263 -0
- package/dist/main/asset-download.js.map +1 -0
- package/dist/main/database.cjs +473 -0
- package/dist/main/database.cjs.map +1 -0
- package/dist/main/database.d.cts +81 -0
- package/dist/main/database.d.cts.map +1 -0
- package/dist/main/database.d.ts +81 -0
- package/dist/main/database.d.ts.map +1 -0
- package/dist/main/database.js +472 -0
- package/dist/main/database.js.map +1 -0
- package/dist/main/index.cjs +22 -0
- package/dist/main/index.d.cts +7 -0
- package/dist/main/index.d.ts +7 -0
- package/dist/main/index.js +7 -0
- package/dist/main/media-cache.cjs +862 -0
- package/dist/main/media-cache.cjs.map +1 -0
- package/dist/main/media-cache.d.cts +134 -0
- package/dist/main/media-cache.d.cts.map +1 -0
- package/dist/main/media-cache.d.ts +134 -0
- package/dist/main/media-cache.d.ts.map +1 -0
- package/dist/main/media-cache.js +854 -0
- package/dist/main/media-cache.js.map +1 -0
- package/dist/main/storage-root-lock.cjs +124 -0
- package/dist/main/storage-root-lock.cjs.map +1 -0
- package/dist/main/storage-root-lock.d.cts +11 -0
- package/dist/main/storage-root-lock.d.cts.map +1 -0
- package/dist/main/storage-root-lock.d.ts +11 -0
- package/dist/main/storage-root-lock.d.ts.map +1 -0
- package/dist/main/storage-root-lock.js +120 -0
- package/dist/main/storage-root-lock.js.map +1 -0
- package/dist/main/store.cjs +197 -0
- package/dist/main/store.cjs.map +1 -0
- package/dist/main/store.d.cts +83 -0
- package/dist/main/store.d.cts.map +1 -0
- package/dist/main/store.d.ts +83 -0
- package/dist/main/store.d.ts.map +1 -0
- package/dist/main/store.js +195 -0
- package/dist/main/store.js.map +1 -0
- package/dist/preload/index.cjs +36 -0
- package/dist/preload/index.cjs.map +1 -0
- package/dist/preload/index.d.cts +14 -0
- package/dist/preload/index.d.cts.map +1 -0
- package/dist/preload/index.d.ts +14 -0
- package/dist/preload/index.d.ts.map +1 -0
- package/dist/preload/index.js +34 -0
- package/dist/preload/index.js.map +1 -0
- package/dist/react/index.cjs +199 -0
- package/dist/react/index.cjs.map +1 -0
- package/dist/react/index.d.cts +50 -0
- package/dist/react/index.d.cts.map +1 -0
- package/dist/react/index.d.ts +50 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +191 -0
- package/dist/react/index.js.map +1 -0
- package/dist/renderer/helpers.cjs +36 -0
- package/dist/renderer/helpers.cjs.map +1 -0
- package/dist/renderer/helpers.d.cts +11 -0
- package/dist/renderer/helpers.d.cts.map +1 -0
- package/dist/renderer/helpers.d.ts +11 -0
- package/dist/renderer/helpers.d.ts.map +1 -0
- package/dist/renderer/helpers.js +35 -0
- package/dist/renderer/helpers.js.map +1 -0
- package/dist/renderer/index.cjs +20 -0
- package/dist/renderer/index.cjs.map +1 -0
- package/dist/renderer/index.d.cts +14 -0
- package/dist/renderer/index.d.cts.map +1 -0
- package/dist/renderer/index.d.ts +14 -0
- package/dist/renderer/index.d.ts.map +1 -0
- package/dist/renderer/index.js +14 -0
- package/dist/renderer/index.js.map +1 -0
- package/dist/renderer/runtime.cjs +278 -0
- package/dist/renderer/runtime.cjs.map +1 -0
- package/dist/renderer/runtime.d.cts +35 -0
- package/dist/renderer/runtime.d.cts.map +1 -0
- package/dist/renderer/runtime.d.ts +35 -0
- package/dist/renderer/runtime.d.ts.map +1 -0
- package/dist/renderer/runtime.js +273 -0
- package/dist/renderer/runtime.js.map +1 -0
- package/dist/renderer/window-globals.d.cts +9 -0
- package/dist/renderer/window-globals.d.cts.map +1 -0
- package/dist/renderer/window-globals.d.ts +9 -0
- package/dist/renderer/window-globals.d.ts.map +1 -0
- package/dist/shared/errors.cjs +102 -0
- package/dist/shared/errors.cjs.map +1 -0
- package/dist/shared/errors.d.cts +45 -0
- package/dist/shared/errors.d.cts.map +1 -0
- package/dist/shared/errors.d.ts +45 -0
- package/dist/shared/errors.d.ts.map +1 -0
- package/dist/shared/errors.js +93 -0
- package/dist/shared/errors.js.map +1 -0
- package/dist/shared/ipc.cjs +14 -0
- package/dist/shared/ipc.cjs.map +1 -0
- package/dist/shared/ipc.d.cts +12 -0
- package/dist/shared/ipc.d.cts.map +1 -0
- package/dist/shared/ipc.d.ts +12 -0
- package/dist/shared/ipc.d.ts.map +1 -0
- package/dist/shared/ipc.js +13 -0
- package/dist/shared/ipc.js.map +1 -0
- package/dist/shared/normalize.cjs +19 -0
- package/dist/shared/normalize.cjs.map +1 -0
- package/dist/shared/normalize.d.cts +11 -0
- package/dist/shared/normalize.d.cts.map +1 -0
- package/dist/shared/normalize.d.ts +11 -0
- package/dist/shared/normalize.d.ts.map +1 -0
- package/dist/shared/normalize.js +18 -0
- package/dist/shared/normalize.js.map +1 -0
- package/dist/shared/pagination.cjs +32 -0
- package/dist/shared/pagination.cjs.map +1 -0
- package/dist/shared/pagination.d.cts +14 -0
- package/dist/shared/pagination.d.cts.map +1 -0
- package/dist/shared/pagination.d.ts +14 -0
- package/dist/shared/pagination.d.ts.map +1 -0
- package/dist/shared/pagination.js +28 -0
- package/dist/shared/pagination.js.map +1 -0
- package/dist/shared/stem.cjs +16 -0
- package/dist/shared/stem.cjs.map +1 -0
- package/dist/shared/stem.d.cts +6 -0
- package/dist/shared/stem.d.cts.map +1 -0
- package/dist/shared/stem.d.ts +6 -0
- package/dist/shared/stem.d.ts.map +1 -0
- package/dist/shared/stem.js +14 -0
- package/dist/shared/stem.js.map +1 -0
- package/dist/shared/types.cjs +15 -0
- package/dist/shared/types.cjs.map +1 -0
- package/dist/shared/types.d.cts +234 -0
- package/dist/shared/types.d.cts.map +1 -0
- package/dist/shared/types.d.ts +234 -0
- package/dist/shared/types.d.ts.map +1 -0
- package/dist/shared/types.js +14 -0
- package/dist/shared/types.js.map +1 -0
- package/package.json +120 -0
- package/skills/authenticated-downloads/SKILL.md +203 -0
- package/skills/cache-configuration/SKILL.md +357 -0
- package/skills/cache-configuration/references/options.md +356 -0
- package/skills/getting-started/SKILL.md +407 -0
- package/skills/production-checklist/SKILL.md +397 -0
- package/skills/react-rendering/SKILL.md +424 -0
- package/skills/react-rendering/references/hooks.md +443 -0
- package/skills/store-authoring/SKILL.md +369 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-kind.js","names":[],"sources":["../../src/internal/media-kind.ts"],"sourcesContent":["import type { MediaKind } from \"../shared/types.js\";\n\nconst documentMimeTypes = new Set([\n \"application/pdf\",\n \"application/msword\",\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n \"application/vnd.ms-excel\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n \"application/vnd.ms-powerpoint\",\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n \"application/rtf\",\n \"application/epub+zip\",\n]);\n\n/**\n * Derives a coarse {@link MediaKind} from a MIME type string.\n *\n * Mapping rules (first match wins):\n * - `video/*` → `\"video\"`\n * - `image/*` → `\"image\"`\n * - `audio/*` → `\"audio\"`\n * - `text/html` → `\"html\"`\n * - `text/*` → `\"text\"`\n * - Known document MIME types (PDF, Office, EPUB) → `\"document\"`\n * - `application/json` → `\"text\"`\n * - Everything else → `\"binary\"`\n */\nexport function mediaKindFromMime(mime: string): MediaKind {\n const normalized = mime.trim().toLowerCase().split(\";\")[0]!.trim();\n const slash = normalized.indexOf(\"/\");\n if (slash === -1) {\n return \"binary\";\n }\n\n const type = normalized.slice(0, slash);\n\n switch (type) {\n case \"video\":\n return \"video\";\n case \"image\":\n return \"image\";\n case \"audio\":\n return \"audio\";\n case \"text\":\n return normalized === \"text/html\" ? \"html\" : \"text\";\n case \"application\":\n if (documentMimeTypes.has(normalized)) {\n return \"document\";\n }\n if (normalized === \"application/json\") {\n return \"text\";\n }\n return \"binary\";\n default:\n return \"binary\";\n }\n}\n"],"mappings":";AAEA,MAAM,oBAAoB,IAAI,IAAI;CAChC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;;;;;;;;;;;;;;AAeF,SAAgB,kBAAkB,MAAyB;CACzD,MAAM,aAAa,KAAK,MAAM,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC,GAAI,MAAM;CAClE,MAAM,QAAQ,WAAW,QAAQ,IAAI;CACrC,IAAI,UAAU,IACZ,OAAO;CAKT,QAFa,WAAW,MAAM,GAAG,MAErB,EAAZ;EACE,KAAK,SACH,OAAO;EACT,KAAK,SACH,OAAO;EACT,KAAK,SACH,OAAO;EACT,KAAK,QACH,OAAO,eAAe,cAAc,SAAS;EAC/C,KAAK;GACH,IAAI,kBAAkB,IAAI,WAAW,EACnC,OAAO;GAET,IAAI,eAAe,oBACjB,OAAO;GAET,OAAO;EACT,SACE,OAAO"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
//#region src/internal/url-warn.ts
|
|
3
|
+
/**
|
|
4
|
+
* Emergency fallback when no structured warning sink is available — writes to console.warn.
|
|
5
|
+
* Only used when MediaCacheDatabase is constructed without onWarn, or MediaCache
|
|
6
|
+
* has neither `logging.onLog` nor the built-in development console sink.
|
|
7
|
+
*/
|
|
8
|
+
function consoleWarnResolveAssetBaseUrlFallback(contextLabel, err) {
|
|
9
|
+
console.warn(`[media-cache] resolveAssetBaseUrl: could not apply origin override for ${contextLabel}:`, err);
|
|
10
|
+
}
|
|
11
|
+
//#endregion
|
|
12
|
+
exports.consoleWarnResolveAssetBaseUrlFallback = consoleWarnResolveAssetBaseUrlFallback;
|
|
13
|
+
|
|
14
|
+
//# sourceMappingURL=url-warn.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url-warn.cjs","names":[],"sources":["../../src/internal/url-warn.ts"],"sourcesContent":["/**\n * Emergency fallback when no structured warning sink is available — writes to console.warn.\n * Only used when MediaCacheDatabase is constructed without onWarn, or MediaCache\n * has neither `logging.onLog` nor the built-in development console sink.\n */\nexport function consoleWarnResolveAssetBaseUrlFallback(contextLabel: string, err: unknown): void {\n console.warn(\n `[media-cache] resolveAssetBaseUrl: could not apply origin override for ${contextLabel}:`,\n err,\n );\n}\n"],"mappings":";;;;;;;AAKA,SAAgB,uCAAuC,cAAsB,KAAoB;CAC/F,QAAQ,KACN,0EAA0E,aAAa,IACvF,IACD"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
//#region src/internal/url-warn.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Emergency fallback when no structured warning sink is available — writes to console.warn.
|
|
4
|
+
* Only used when MediaCacheDatabase is constructed without onWarn, or MediaCache
|
|
5
|
+
* has neither `logging.onLog` nor the built-in development console sink.
|
|
6
|
+
*/
|
|
7
|
+
declare function consoleWarnResolveAssetBaseUrlFallback(contextLabel: string, err: unknown): void;
|
|
8
|
+
//#endregion
|
|
9
|
+
export { consoleWarnResolveAssetBaseUrlFallback };
|
|
10
|
+
//# sourceMappingURL=url-warn.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url-warn.d.cts","names":[],"sources":["../../src/internal/url-warn.ts"],"mappings":";;AAKA;;;;iBAAgB,sCAAA,CAAuC,YAAA,UAAsB,GAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
//#region src/internal/url-warn.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Emergency fallback when no structured warning sink is available — writes to console.warn.
|
|
4
|
+
* Only used when MediaCacheDatabase is constructed without onWarn, or MediaCache
|
|
5
|
+
* has neither `logging.onLog` nor the built-in development console sink.
|
|
6
|
+
*/
|
|
7
|
+
declare function consoleWarnResolveAssetBaseUrlFallback(contextLabel: string, err: unknown): void;
|
|
8
|
+
//#endregion
|
|
9
|
+
export { consoleWarnResolveAssetBaseUrlFallback };
|
|
10
|
+
//# sourceMappingURL=url-warn.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url-warn.d.ts","names":[],"sources":["../../src/internal/url-warn.ts"],"mappings":";;AAKA;;;;iBAAgB,sCAAA,CAAuC,YAAA,UAAsB,GAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
//#region src/internal/url-warn.ts
|
|
2
|
+
/**
|
|
3
|
+
* Emergency fallback when no structured warning sink is available — writes to console.warn.
|
|
4
|
+
* Only used when MediaCacheDatabase is constructed without onWarn, or MediaCache
|
|
5
|
+
* has neither `logging.onLog` nor the built-in development console sink.
|
|
6
|
+
*/
|
|
7
|
+
function consoleWarnResolveAssetBaseUrlFallback(contextLabel, err) {
|
|
8
|
+
console.warn(`[media-cache] resolveAssetBaseUrl: could not apply origin override for ${contextLabel}:`, err);
|
|
9
|
+
}
|
|
10
|
+
//#endregion
|
|
11
|
+
export { consoleWarnResolveAssetBaseUrlFallback };
|
|
12
|
+
|
|
13
|
+
//# sourceMappingURL=url-warn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url-warn.js","names":[],"sources":["../../src/internal/url-warn.ts"],"sourcesContent":["/**\n * Emergency fallback when no structured warning sink is available — writes to console.warn.\n * Only used when MediaCacheDatabase is constructed without onWarn, or MediaCache\n * has neither `logging.onLog` nor the built-in development console sink.\n */\nexport function consoleWarnResolveAssetBaseUrlFallback(contextLabel: string, err: unknown): void {\n console.warn(\n `[media-cache] resolveAssetBaseUrl: could not apply origin override for ${contextLabel}:`,\n err,\n );\n}\n"],"mappings":";;;;;;AAKA,SAAgB,uCAAuC,cAAsB,KAAoB;CAC/F,QAAQ,KACN,0EAA0E,aAAa,IACvF,IACD"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_shared_errors = require("../shared/errors.cjs");
|
|
3
|
+
let zod = require("zod");
|
|
4
|
+
//#region src/internal/validation.ts
|
|
5
|
+
const nonNegativeIntegerSchema = zod.z.number().int().nonnegative();
|
|
6
|
+
const nonNegativeNumberSchema = zod.z.number().nonnegative();
|
|
7
|
+
/**
|
|
8
|
+
* Schema for IPC/API string identifiers: asset key, index name, index value, file stem.
|
|
9
|
+
* Enforces min 1 and max 2000 characters.
|
|
10
|
+
*/
|
|
11
|
+
const stringInputSchema = zod.z.string().min(1).max(2e3);
|
|
12
|
+
const jsonValueSchema = zod.z.lazy(() => zod.z.union([
|
|
13
|
+
zod.z.string(),
|
|
14
|
+
zod.z.number(),
|
|
15
|
+
zod.z.boolean(),
|
|
16
|
+
zod.z.null(),
|
|
17
|
+
zod.z.array(jsonValueSchema),
|
|
18
|
+
zod.z.record(zod.z.string(), jsonValueSchema)
|
|
19
|
+
]));
|
|
20
|
+
const jsonObjectSchema = zod.z.record(zod.z.string(), jsonValueSchema);
|
|
21
|
+
const stringRecordSchema = zod.z.record(zod.z.string(), zod.z.string());
|
|
22
|
+
const serializedMediaCacheErrorSchema = zod.z.object({
|
|
23
|
+
name: zod.z.string(),
|
|
24
|
+
code: zod.z.string(),
|
|
25
|
+
message: zod.z.string()
|
|
26
|
+
});
|
|
27
|
+
const syncRunStatsSchema = zod.z.object({
|
|
28
|
+
totalAssets: nonNegativeIntegerSchema,
|
|
29
|
+
downloadedAssets: nonNegativeIntegerSchema,
|
|
30
|
+
skippedAssets: nonNegativeIntegerSchema,
|
|
31
|
+
bytesDownloaded: nonNegativeNumberSchema
|
|
32
|
+
});
|
|
33
|
+
const syncProgressSchema = zod.z.object({
|
|
34
|
+
runId: nonNegativeIntegerSchema,
|
|
35
|
+
phase: zod.z.enum([
|
|
36
|
+
"resolving-store",
|
|
37
|
+
"staging-generation",
|
|
38
|
+
"diffing",
|
|
39
|
+
"downloading",
|
|
40
|
+
"committing",
|
|
41
|
+
"pruning"
|
|
42
|
+
]),
|
|
43
|
+
totalAssets: nonNegativeIntegerSchema,
|
|
44
|
+
completedAssets: nonNegativeIntegerSchema,
|
|
45
|
+
downloadedAssets: nonNegativeIntegerSchema,
|
|
46
|
+
skippedAssets: nonNegativeIntegerSchema,
|
|
47
|
+
bytesDownloaded: nonNegativeNumberSchema
|
|
48
|
+
});
|
|
49
|
+
const syncRunSummarySchema = zod.z.object({
|
|
50
|
+
id: nonNegativeIntegerSchema,
|
|
51
|
+
status: zod.z.enum([
|
|
52
|
+
"running",
|
|
53
|
+
"success",
|
|
54
|
+
"error"
|
|
55
|
+
]),
|
|
56
|
+
startedAt: nonNegativeIntegerSchema,
|
|
57
|
+
finishedAt: nonNegativeIntegerSchema.nullable(),
|
|
58
|
+
errorCode: zod.z.string().nullable(),
|
|
59
|
+
errorMessage: zod.z.string().nullable(),
|
|
60
|
+
stats: syncRunStatsSchema
|
|
61
|
+
});
|
|
62
|
+
const mediaCacheStatusSchema = zod.z.object({
|
|
63
|
+
phase: zod.z.enum([
|
|
64
|
+
"idle",
|
|
65
|
+
"syncing",
|
|
66
|
+
"ready",
|
|
67
|
+
"error"
|
|
68
|
+
]),
|
|
69
|
+
storageRoot: zod.z.string().nullable().default(null),
|
|
70
|
+
activeGenerationId: nonNegativeIntegerSchema.nullable(),
|
|
71
|
+
progress: syncProgressSchema.nullable(),
|
|
72
|
+
lastRun: syncRunSummarySchema.nullable(),
|
|
73
|
+
error: serializedMediaCacheErrorSchema.nullable(),
|
|
74
|
+
updatedAt: nonNegativeIntegerSchema
|
|
75
|
+
});
|
|
76
|
+
const mediaKindSchema = zod.z.enum([
|
|
77
|
+
"video",
|
|
78
|
+
"image",
|
|
79
|
+
"audio",
|
|
80
|
+
"document",
|
|
81
|
+
"html",
|
|
82
|
+
"text",
|
|
83
|
+
"binary"
|
|
84
|
+
]);
|
|
85
|
+
const mediaCacheAppPathSchema = zod.z.enum([
|
|
86
|
+
"home",
|
|
87
|
+
"appData",
|
|
88
|
+
"userData",
|
|
89
|
+
"sessionData",
|
|
90
|
+
"temp",
|
|
91
|
+
"exe",
|
|
92
|
+
"module",
|
|
93
|
+
"desktop",
|
|
94
|
+
"documents",
|
|
95
|
+
"downloads",
|
|
96
|
+
"music",
|
|
97
|
+
"pictures",
|
|
98
|
+
"videos",
|
|
99
|
+
"recent",
|
|
100
|
+
"logs",
|
|
101
|
+
"crashDumps"
|
|
102
|
+
]);
|
|
103
|
+
const storagePathSegmentSchema = zod.z.string().min(1).refine((segment) => !/[/\\]/.test(segment), { message: "Storage path segments must not contain path separators" }).refine((segment) => segment !== "." && segment !== "..", { message: "Storage path segments must not be \".\" or \"..\"" });
|
|
104
|
+
const mediaCacheStoragePathSchema = zod.z.object({
|
|
105
|
+
appPath: mediaCacheAppPathSchema,
|
|
106
|
+
segments: zod.z.array(storagePathSegmentSchema).optional()
|
|
107
|
+
});
|
|
108
|
+
const statusSnapshotRowSchema = zod.z.object({ status_json: zod.z.string() });
|
|
109
|
+
const syncRunRowSchema = zod.z.object({
|
|
110
|
+
id: nonNegativeIntegerSchema,
|
|
111
|
+
started_at_ms: nonNegativeIntegerSchema,
|
|
112
|
+
finished_at_ms: nonNegativeIntegerSchema.nullable(),
|
|
113
|
+
status: zod.z.enum([
|
|
114
|
+
"running",
|
|
115
|
+
"success",
|
|
116
|
+
"error"
|
|
117
|
+
]),
|
|
118
|
+
error_code: zod.z.string().nullable(),
|
|
119
|
+
error_message: zod.z.string().nullable(),
|
|
120
|
+
stats_json: zod.z.string()
|
|
121
|
+
});
|
|
122
|
+
const syncRunIdRowSchema = zod.z.object({ id: nonNegativeIntegerSchema });
|
|
123
|
+
const generationIdRowSchema = zod.z.object({ id: nonNegativeIntegerSchema });
|
|
124
|
+
const activeGenerationRowSchema = zod.z.object({ generation_id: nonNegativeIntegerSchema });
|
|
125
|
+
/** Row shape from getGenerationAssets used during sync diffing. */
|
|
126
|
+
const generationAssetRowSchema = zod.z.object({
|
|
127
|
+
assetKey: zod.z.string(),
|
|
128
|
+
version: zod.z.string(),
|
|
129
|
+
relativePath: zod.z.string().nullable(),
|
|
130
|
+
mimeType: zod.z.string(),
|
|
131
|
+
url: zod.z.string()
|
|
132
|
+
});
|
|
133
|
+
/** Row shape for a fully joined active asset used for queries. */
|
|
134
|
+
const activeAssetRowSchema = zod.z.object({
|
|
135
|
+
generationId: nonNegativeIntegerSchema,
|
|
136
|
+
assetKey: zod.z.string(),
|
|
137
|
+
displayKey: zod.z.string(),
|
|
138
|
+
version: zod.z.string(),
|
|
139
|
+
mimeType: zod.z.string(),
|
|
140
|
+
mediaKind: mediaKindSchema,
|
|
141
|
+
byteLength: nonNegativeNumberSchema.nullable(),
|
|
142
|
+
metadata: zod.z.string(),
|
|
143
|
+
indexesJson: zod.z.string(),
|
|
144
|
+
relativePath: zod.z.string().nullable(),
|
|
145
|
+
url: zod.z.string(),
|
|
146
|
+
fileStem: zod.z.string(),
|
|
147
|
+
orderIndex: nonNegativeIntegerSchema
|
|
148
|
+
});
|
|
149
|
+
const pendingDeletionSchema = zod.z.object({
|
|
150
|
+
deletionKey: zod.z.string(),
|
|
151
|
+
logicalKey: zod.z.string(),
|
|
152
|
+
relativePath: zod.z.string()
|
|
153
|
+
});
|
|
154
|
+
const protocolAssetTargetRowSchema = zod.z.object({ relative_path: zod.z.string().nullable() });
|
|
155
|
+
const fileStemRowSchema = zod.z.object({ assetKey: zod.z.string() });
|
|
156
|
+
const optionalNonNegativeIntegerSchema = zod.z.number().int().nonnegative().nullish().transform((value) => value ?? void 0);
|
|
157
|
+
const optionalStringSchema = zod.z.string().nullish().transform((value) => value ?? void 0);
|
|
158
|
+
const paginationInputSchema = zod.z.object({
|
|
159
|
+
limit: optionalNonNegativeIntegerSchema,
|
|
160
|
+
cursor: optionalStringSchema
|
|
161
|
+
});
|
|
162
|
+
const optionalPaginationInputSchema = paginationInputSchema.nullish().transform((value) => value ?? void 0);
|
|
163
|
+
const cursorPayloadSchema = zod.z.object({ index: zod.z.number().int().nonnegative() });
|
|
164
|
+
function parseWithSchema(schema, value, context) {
|
|
165
|
+
const result = schema.safeParse(value);
|
|
166
|
+
if (result.success) return result.data;
|
|
167
|
+
throw new require_shared_errors.DataValidationError(`Invalid ${context}: ${formatZodIssues(result.error)}`, { cause: result.error });
|
|
168
|
+
}
|
|
169
|
+
function parseJsonWithSchema(rawJson, schema, context) {
|
|
170
|
+
let parsed;
|
|
171
|
+
try {
|
|
172
|
+
parsed = JSON.parse(rawJson);
|
|
173
|
+
} catch (error) {
|
|
174
|
+
throw new require_shared_errors.DataValidationError(`Invalid ${context}: failed to parse JSON.`, { cause: error });
|
|
175
|
+
}
|
|
176
|
+
return parseWithSchema(schema, parsed, context);
|
|
177
|
+
}
|
|
178
|
+
function stringifyWithSchema(value, schema, context) {
|
|
179
|
+
let rawJson;
|
|
180
|
+
try {
|
|
181
|
+
rawJson = JSON.stringify(value);
|
|
182
|
+
} catch (error) {
|
|
183
|
+
throw new require_shared_errors.DataValidationError(`Invalid ${context}: value is not JSON serializable.`, { cause: error });
|
|
184
|
+
}
|
|
185
|
+
if (rawJson === void 0) throw new require_shared_errors.DataValidationError(`Invalid ${context}: value is not JSON serializable.`);
|
|
186
|
+
parseJsonWithSchema(rawJson, schema, context);
|
|
187
|
+
return rawJson;
|
|
188
|
+
}
|
|
189
|
+
function formatZodIssues(error) {
|
|
190
|
+
return error.issues.map((issue) => {
|
|
191
|
+
return `${issue.path.length > 0 ? issue.path.join(".") : "(root)"}: ${issue.message}`;
|
|
192
|
+
}).join("; ");
|
|
193
|
+
}
|
|
194
|
+
//#endregion
|
|
195
|
+
exports.activeAssetRowSchema = activeAssetRowSchema;
|
|
196
|
+
exports.activeGenerationRowSchema = activeGenerationRowSchema;
|
|
197
|
+
exports.cursorPayloadSchema = cursorPayloadSchema;
|
|
198
|
+
exports.fileStemRowSchema = fileStemRowSchema;
|
|
199
|
+
exports.generationAssetRowSchema = generationAssetRowSchema;
|
|
200
|
+
exports.generationIdRowSchema = generationIdRowSchema;
|
|
201
|
+
exports.jsonObjectSchema = jsonObjectSchema;
|
|
202
|
+
exports.jsonValueSchema = jsonValueSchema;
|
|
203
|
+
exports.mediaCacheStatusSchema = mediaCacheStatusSchema;
|
|
204
|
+
exports.mediaCacheStoragePathSchema = mediaCacheStoragePathSchema;
|
|
205
|
+
exports.optionalPaginationInputSchema = optionalPaginationInputSchema;
|
|
206
|
+
exports.paginationInputSchema = paginationInputSchema;
|
|
207
|
+
exports.parseJsonWithSchema = parseJsonWithSchema;
|
|
208
|
+
exports.parseWithSchema = parseWithSchema;
|
|
209
|
+
exports.pendingDeletionSchema = pendingDeletionSchema;
|
|
210
|
+
exports.protocolAssetTargetRowSchema = protocolAssetTargetRowSchema;
|
|
211
|
+
exports.serializedMediaCacheErrorSchema = serializedMediaCacheErrorSchema;
|
|
212
|
+
exports.statusSnapshotRowSchema = statusSnapshotRowSchema;
|
|
213
|
+
exports.stringInputSchema = stringInputSchema;
|
|
214
|
+
exports.stringRecordSchema = stringRecordSchema;
|
|
215
|
+
exports.stringifyWithSchema = stringifyWithSchema;
|
|
216
|
+
exports.syncProgressSchema = syncProgressSchema;
|
|
217
|
+
exports.syncRunIdRowSchema = syncRunIdRowSchema;
|
|
218
|
+
exports.syncRunRowSchema = syncRunRowSchema;
|
|
219
|
+
exports.syncRunStatsSchema = syncRunStatsSchema;
|
|
220
|
+
exports.syncRunSummarySchema = syncRunSummarySchema;
|
|
221
|
+
|
|
222
|
+
//# sourceMappingURL=validation.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.cjs","names":["z","DataValidationError"],"sources":["../../src/internal/validation.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { DataValidationError } from \"../shared/errors.js\";\nimport type { ActiveAssetRow, GenerationAssetRow, PendingDeletion } from \"../main/database.js\";\nimport type {\n JsonValue,\n MediaCacheAppPath,\n MediaCacheStatus,\n MediaCacheStoragePath,\n MediaKind,\n SerializedMediaCacheError,\n SyncProgress,\n SyncRunStats,\n SyncRunSummary,\n} from \"../shared/types.js\";\n\nconst nonNegativeIntegerSchema = z.number().int().nonnegative();\nconst nonNegativeNumberSchema = z.number().nonnegative();\n\n/**\n * Schema for IPC/API string identifiers: asset key, index name, index value, file stem.\n * Enforces min 1 and max 2000 characters.\n */\nexport const stringInputSchema = z.string().min(1).max(2000);\n\nexport const jsonValueSchema: z.ZodType<JsonValue> = z.lazy(() =>\n z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.null(),\n z.array(jsonValueSchema),\n z.record(z.string(), jsonValueSchema),\n ]),\n);\n\nexport const jsonObjectSchema: z.ZodType<Record<string, JsonValue>> = z.record(\n z.string(),\n jsonValueSchema,\n);\n\nexport const stringRecordSchema = z.record(z.string(), z.string());\n\nexport const serializedMediaCacheErrorSchema: z.ZodType<SerializedMediaCacheError> = z.object({\n name: z.string(),\n code: z.string(),\n message: z.string(),\n});\n\nexport const syncRunStatsSchema: z.ZodType<SyncRunStats> = z.object({\n totalAssets: nonNegativeIntegerSchema,\n downloadedAssets: nonNegativeIntegerSchema,\n skippedAssets: nonNegativeIntegerSchema,\n bytesDownloaded: nonNegativeNumberSchema,\n});\n\nexport const syncProgressSchema: z.ZodType<SyncProgress> = z.object({\n runId: nonNegativeIntegerSchema,\n phase: z.enum([\n \"resolving-store\",\n \"staging-generation\",\n \"diffing\",\n \"downloading\",\n \"committing\",\n \"pruning\",\n ]),\n totalAssets: nonNegativeIntegerSchema,\n completedAssets: nonNegativeIntegerSchema,\n downloadedAssets: nonNegativeIntegerSchema,\n skippedAssets: nonNegativeIntegerSchema,\n bytesDownloaded: nonNegativeNumberSchema,\n});\n\nexport const syncRunSummarySchema: z.ZodType<SyncRunSummary> = z.object({\n id: nonNegativeIntegerSchema,\n status: z.enum([\"running\", \"success\", \"error\"]),\n startedAt: nonNegativeIntegerSchema,\n finishedAt: nonNegativeIntegerSchema.nullable(),\n errorCode: z.string().nullable(),\n errorMessage: z.string().nullable(),\n stats: syncRunStatsSchema,\n});\n\nexport const mediaCacheStatusSchema: z.ZodType<MediaCacheStatus> = z.object({\n phase: z.enum([\"idle\", \"syncing\", \"ready\", \"error\"]),\n storageRoot: z.string().nullable().default(null),\n activeGenerationId: nonNegativeIntegerSchema.nullable(),\n progress: syncProgressSchema.nullable(),\n lastRun: syncRunSummarySchema.nullable(),\n error: serializedMediaCacheErrorSchema.nullable(),\n updatedAt: nonNegativeIntegerSchema,\n});\n\nconst mediaKindSchema: z.ZodType<MediaKind> = z.enum([\n \"video\",\n \"image\",\n \"audio\",\n \"document\",\n \"html\",\n \"text\",\n \"binary\",\n]);\n\nconst mediaCacheAppPathSchema: z.ZodType<MediaCacheAppPath> = z.enum([\n \"home\",\n \"appData\",\n \"userData\",\n \"sessionData\",\n \"temp\",\n \"exe\",\n \"module\",\n \"desktop\",\n \"documents\",\n \"downloads\",\n \"music\",\n \"pictures\",\n \"videos\",\n \"recent\",\n \"logs\",\n \"crashDumps\",\n]);\n\nconst storagePathSegmentSchema = z\n .string()\n .min(1)\n .refine((segment) => !/[/\\\\]/.test(segment), {\n message: \"Storage path segments must not contain path separators\",\n })\n .refine((segment) => segment !== \".\" && segment !== \"..\", {\n message: 'Storage path segments must not be \".\" or \"..\"',\n });\n\nexport const mediaCacheStoragePathSchema: z.ZodType<MediaCacheStoragePath> = z.object({\n appPath: mediaCacheAppPathSchema,\n segments: z.array(storagePathSegmentSchema).optional(),\n});\n\nexport const statusSnapshotRowSchema = z.object({\n status_json: z.string(),\n});\n\nexport const syncRunRowSchema = z.object({\n id: nonNegativeIntegerSchema,\n started_at_ms: nonNegativeIntegerSchema,\n finished_at_ms: nonNegativeIntegerSchema.nullable(),\n status: z.enum([\"running\", \"success\", \"error\"]),\n error_code: z.string().nullable(),\n error_message: z.string().nullable(),\n stats_json: z.string(),\n});\n\nexport const syncRunIdRowSchema = z.object({\n id: nonNegativeIntegerSchema,\n});\n\nexport const generationIdRowSchema = z.object({\n id: nonNegativeIntegerSchema,\n});\n\nexport const activeGenerationRowSchema = z.object({\n generation_id: nonNegativeIntegerSchema,\n});\n\n/** Row shape from getGenerationAssets used during sync diffing. */\nexport const generationAssetRowSchema: z.ZodType<GenerationAssetRow> = z.object({\n assetKey: z.string(),\n version: z.string(),\n relativePath: z.string().nullable(),\n mimeType: z.string(),\n url: z.string(),\n});\n\n/** Row shape for a fully joined active asset used for queries. */\nexport const activeAssetRowSchema: z.ZodType<ActiveAssetRow> = z.object({\n generationId: nonNegativeIntegerSchema,\n assetKey: z.string(),\n displayKey: z.string(),\n version: z.string(),\n mimeType: z.string(),\n mediaKind: mediaKindSchema,\n byteLength: nonNegativeNumberSchema.nullable(),\n metadata: z.string(),\n indexesJson: z.string(),\n relativePath: z.string().nullable(),\n url: z.string(),\n fileStem: z.string(),\n orderIndex: nonNegativeIntegerSchema,\n});\n\nexport const pendingDeletionSchema: z.ZodType<PendingDeletion> = z.object({\n deletionKey: z.string(),\n logicalKey: z.string(),\n relativePath: z.string(),\n});\n\nexport const protocolAssetTargetRowSchema = z.object({\n relative_path: z.string().nullable(),\n});\n\nexport const fileStemRowSchema = z.object({\n assetKey: z.string(),\n});\n\nconst optionalNonNegativeIntegerSchema = z\n .number()\n .int()\n .nonnegative()\n .nullish()\n .transform((value) => value ?? undefined);\n\nconst optionalStringSchema = z\n .string()\n .nullish()\n .transform((value) => value ?? undefined);\n\nexport const paginationInputSchema = z.object({\n limit: optionalNonNegativeIntegerSchema,\n cursor: optionalStringSchema,\n});\n\nexport const optionalPaginationInputSchema = paginationInputSchema\n .nullish()\n .transform((value) => value ?? undefined);\n\nexport const cursorPayloadSchema = z.object({\n index: z.number().int().nonnegative(),\n});\n\nexport function parseWithSchema<T>(schema: z.ZodType<T>, value: unknown, context: string): T {\n const result = schema.safeParse(value);\n if (result.success) {\n return result.data;\n }\n\n throw new DataValidationError(`Invalid ${context}: ${formatZodIssues(result.error)}`, {\n cause: result.error,\n });\n}\n\nexport function parseJsonWithSchema<T>(rawJson: string, schema: z.ZodType<T>, context: string): T {\n let parsed: unknown;\n try {\n parsed = JSON.parse(rawJson);\n } catch (error) {\n throw new DataValidationError(`Invalid ${context}: failed to parse JSON.`, {\n cause: error,\n });\n }\n\n return parseWithSchema(schema, parsed, context);\n}\n\nexport function stringifyWithSchema<T>(\n value: unknown,\n schema: z.ZodType<T>,\n context: string,\n): string {\n let rawJson: string | undefined;\n try {\n rawJson = JSON.stringify(value);\n } catch (error) {\n throw new DataValidationError(`Invalid ${context}: value is not JSON serializable.`, {\n cause: error,\n });\n }\n if (rawJson === undefined) {\n throw new DataValidationError(`Invalid ${context}: value is not JSON serializable.`);\n }\n\n parseJsonWithSchema(rawJson, schema, context);\n return rawJson;\n}\n\nfunction formatZodIssues(error: z.ZodError): string {\n return error.issues\n .map((issue) => {\n const path = issue.path.length > 0 ? issue.path.join(\".\") : \"(root)\";\n return `${path}: ${issue.message}`;\n })\n .join(\"; \");\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { JsonValue, MediaCacheStatus, MediaCacheStoragePath, SerializedMediaCacheError, SyncProgress, SyncRunStats, SyncRunSummary } from "../shared/types.cjs";
|
|
2
|
+
import { ActiveAssetRow, GenerationAssetRow, PendingDeletion } from "../main/database.cjs";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
|
|
5
|
+
//#region src/internal/validation.d.ts
|
|
6
|
+
/**
|
|
7
|
+
* Schema for IPC/API string identifiers: asset key, index name, index value, file stem.
|
|
8
|
+
* Enforces min 1 and max 2000 characters.
|
|
9
|
+
*/
|
|
10
|
+
declare const stringInputSchema: z.ZodString;
|
|
11
|
+
declare const jsonValueSchema: z.ZodType<JsonValue>;
|
|
12
|
+
declare const jsonObjectSchema: z.ZodType<Record<string, JsonValue>>;
|
|
13
|
+
declare const stringRecordSchema: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
14
|
+
declare const serializedMediaCacheErrorSchema: z.ZodType<SerializedMediaCacheError>;
|
|
15
|
+
declare const syncRunStatsSchema: z.ZodType<SyncRunStats>;
|
|
16
|
+
declare const syncProgressSchema: z.ZodType<SyncProgress>;
|
|
17
|
+
declare const syncRunSummarySchema: z.ZodType<SyncRunSummary>;
|
|
18
|
+
declare const mediaCacheStatusSchema: z.ZodType<MediaCacheStatus>;
|
|
19
|
+
declare const mediaCacheStoragePathSchema: z.ZodType<MediaCacheStoragePath>;
|
|
20
|
+
declare const statusSnapshotRowSchema: z.ZodObject<{
|
|
21
|
+
status_json: z.ZodString;
|
|
22
|
+
}, z.core.$strip>;
|
|
23
|
+
declare const syncRunRowSchema: z.ZodObject<{
|
|
24
|
+
id: z.ZodNumber;
|
|
25
|
+
started_at_ms: z.ZodNumber;
|
|
26
|
+
finished_at_ms: z.ZodNullable<z.ZodNumber>;
|
|
27
|
+
status: z.ZodEnum<{
|
|
28
|
+
error: "error";
|
|
29
|
+
success: "success";
|
|
30
|
+
running: "running";
|
|
31
|
+
}>;
|
|
32
|
+
error_code: z.ZodNullable<z.ZodString>;
|
|
33
|
+
error_message: z.ZodNullable<z.ZodString>;
|
|
34
|
+
stats_json: z.ZodString;
|
|
35
|
+
}, z.core.$strip>;
|
|
36
|
+
declare const syncRunIdRowSchema: z.ZodObject<{
|
|
37
|
+
id: z.ZodNumber;
|
|
38
|
+
}, z.core.$strip>;
|
|
39
|
+
declare const generationIdRowSchema: z.ZodObject<{
|
|
40
|
+
id: z.ZodNumber;
|
|
41
|
+
}, z.core.$strip>;
|
|
42
|
+
declare const activeGenerationRowSchema: z.ZodObject<{
|
|
43
|
+
generation_id: z.ZodNumber;
|
|
44
|
+
}, z.core.$strip>;
|
|
45
|
+
/** Row shape from getGenerationAssets used during sync diffing. */
|
|
46
|
+
declare const generationAssetRowSchema: z.ZodType<GenerationAssetRow>;
|
|
47
|
+
/** Row shape for a fully joined active asset used for queries. */
|
|
48
|
+
declare const activeAssetRowSchema: z.ZodType<ActiveAssetRow>;
|
|
49
|
+
declare const pendingDeletionSchema: z.ZodType<PendingDeletion>;
|
|
50
|
+
declare const protocolAssetTargetRowSchema: z.ZodObject<{
|
|
51
|
+
relative_path: z.ZodNullable<z.ZodString>;
|
|
52
|
+
}, z.core.$strip>;
|
|
53
|
+
declare const fileStemRowSchema: z.ZodObject<{
|
|
54
|
+
assetKey: z.ZodString;
|
|
55
|
+
}, z.core.$strip>;
|
|
56
|
+
declare const paginationInputSchema: z.ZodObject<{
|
|
57
|
+
limit: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodNumber>>, z.ZodTransform<number | undefined, number | null | undefined>>;
|
|
58
|
+
cursor: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string | undefined, string | null | undefined>>;
|
|
59
|
+
}, z.core.$strip>;
|
|
60
|
+
declare const optionalPaginationInputSchema: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
61
|
+
limit: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodNumber>>, z.ZodTransform<number | undefined, number | null | undefined>>;
|
|
62
|
+
cursor: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string | undefined, string | null | undefined>>;
|
|
63
|
+
}, z.core.$strip>>>, z.ZodTransform<{
|
|
64
|
+
limit: number | undefined;
|
|
65
|
+
cursor: string | undefined;
|
|
66
|
+
} | undefined, {
|
|
67
|
+
limit: number | undefined;
|
|
68
|
+
cursor: string | undefined;
|
|
69
|
+
} | null | undefined>>;
|
|
70
|
+
declare const cursorPayloadSchema: z.ZodObject<{
|
|
71
|
+
index: z.ZodNumber;
|
|
72
|
+
}, z.core.$strip>;
|
|
73
|
+
declare function parseWithSchema<T>(schema: z.ZodType<T>, value: unknown, context: string): T;
|
|
74
|
+
declare function parseJsonWithSchema<T>(rawJson: string, schema: z.ZodType<T>, context: string): T;
|
|
75
|
+
declare function stringifyWithSchema<T>(value: unknown, schema: z.ZodType<T>, context: string): string;
|
|
76
|
+
//#endregion
|
|
77
|
+
export { activeAssetRowSchema, activeGenerationRowSchema, cursorPayloadSchema, fileStemRowSchema, generationAssetRowSchema, generationIdRowSchema, jsonObjectSchema, jsonValueSchema, mediaCacheStatusSchema, mediaCacheStoragePathSchema, optionalPaginationInputSchema, paginationInputSchema, parseJsonWithSchema, parseWithSchema, pendingDeletionSchema, protocolAssetTargetRowSchema, serializedMediaCacheErrorSchema, statusSnapshotRowSchema, stringInputSchema, stringRecordSchema, stringifyWithSchema, syncProgressSchema, syncRunIdRowSchema, syncRunRowSchema, syncRunStatsSchema, syncRunSummarySchema };
|
|
78
|
+
//# sourceMappingURL=validation.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.cts","names":[],"sources":["../../src/internal/validation.ts"],"mappings":";;;;;;;AAsBA;;cAAa,iBAAA,EAAiB,CAAA,CAAA,SAAA;AAAA,cAEjB,eAAA,EAAiB,CAAA,CAAE,OAAA,CAAQ,SAAA;AAAA,cAW3B,gBAAA,EAAkB,CAAA,CAAE,OAAA,CAAQ,MAAA,SAAe,SAAA;AAAA,cAK3C,kBAAA,EAAkB,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,SAAA,EAAA,CAAA,CAAA,SAAA;AAAA,cAElB,+BAAA,EAAiC,CAAA,CAAE,OAAA,CAAQ,yBAAA;AAAA,cAM3C,kBAAA,EAAoB,CAAA,CAAE,OAAA,CAAQ,YAAA;AAAA,cAO9B,kBAAA,EAAoB,CAAA,CAAE,OAAA,CAAQ,YAAA;AAAA,cAiB9B,oBAAA,EAAsB,CAAA,CAAE,OAAA,CAAQ,cAAA;AAAA,cAUhC,sBAAA,EAAwB,CAAA,CAAE,OAAA,CAAQ,gBAAA;AAAA,cAiDlC,2BAAA,EAA6B,CAAA,CAAE,OAAA,CAAQ,qBAAA;AAAA,cAKvC,uBAAA,EAAuB,CAAA,CAAA,SAAA;;;cAIvB,gBAAA,EAAgB,CAAA,CAAA,SAAA;;;;;;;;;;;;;cAUhB,kBAAA,EAAkB,CAAA,CAAA,SAAA;;;cAIlB,qBAAA,EAAqB,CAAA,CAAA,SAAA;;;cAIrB,yBAAA,EAAyB,CAAA,CAAA,SAAA;;;;cAKzB,wBAAA,EAA0B,CAAA,CAAE,OAAA,CAAQ,kBAAA;;cASpC,oBAAA,EAAsB,CAAA,CAAE,OAAA,CAAQ,cAAA;AAAA,cAgBhC,qBAAA,EAAuB,CAAA,CAAE,OAAA,CAAQ,eAAA;AAAA,cAMjC,4BAAA,EAA4B,CAAA,CAAA,SAAA;;;cAI5B,iBAAA,EAAiB,CAAA,CAAA,SAAA;;;cAgBjB,qBAAA,EAAqB,CAAA,CAAA,SAAA;;;;cAKrB,6BAAA,EAA6B,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,WAAA,CAAA,CAAA,CAAA,WAAA,CAAA,CAAA,CAAA,SAAA;;;;;;;;;;cAI7B,mBAAA,EAAmB,CAAA,CAAA,SAAA;;;iBAIhB,eAAA,GAAA,CAAmB,MAAA,EAAQ,CAAA,CAAE,OAAA,CAAQ,CAAA,GAAI,KAAA,WAAgB,OAAA,WAAkB,CAAA;AAAA,iBAW3E,mBAAA,GAAA,CAAuB,OAAA,UAAiB,MAAA,EAAQ,CAAA,CAAE,OAAA,CAAQ,CAAA,GAAI,OAAA,WAAkB,CAAA;AAAA,iBAahF,mBAAA,GAAA,CACd,KAAA,WACA,MAAA,EAAQ,CAAA,CAAE,OAAA,CAAQ,CAAA,GAClB,OAAA"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { JsonValue, MediaCacheStatus, MediaCacheStoragePath, SerializedMediaCacheError, SyncProgress, SyncRunStats, SyncRunSummary } from "../shared/types.js";
|
|
2
|
+
import { ActiveAssetRow, GenerationAssetRow, PendingDeletion } from "../main/database.js";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
|
|
5
|
+
//#region src/internal/validation.d.ts
|
|
6
|
+
/**
|
|
7
|
+
* Schema for IPC/API string identifiers: asset key, index name, index value, file stem.
|
|
8
|
+
* Enforces min 1 and max 2000 characters.
|
|
9
|
+
*/
|
|
10
|
+
declare const stringInputSchema: z.ZodString;
|
|
11
|
+
declare const jsonValueSchema: z.ZodType<JsonValue>;
|
|
12
|
+
declare const jsonObjectSchema: z.ZodType<Record<string, JsonValue>>;
|
|
13
|
+
declare const stringRecordSchema: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
14
|
+
declare const serializedMediaCacheErrorSchema: z.ZodType<SerializedMediaCacheError>;
|
|
15
|
+
declare const syncRunStatsSchema: z.ZodType<SyncRunStats>;
|
|
16
|
+
declare const syncProgressSchema: z.ZodType<SyncProgress>;
|
|
17
|
+
declare const syncRunSummarySchema: z.ZodType<SyncRunSummary>;
|
|
18
|
+
declare const mediaCacheStatusSchema: z.ZodType<MediaCacheStatus>;
|
|
19
|
+
declare const mediaCacheStoragePathSchema: z.ZodType<MediaCacheStoragePath>;
|
|
20
|
+
declare const statusSnapshotRowSchema: z.ZodObject<{
|
|
21
|
+
status_json: z.ZodString;
|
|
22
|
+
}, z.core.$strip>;
|
|
23
|
+
declare const syncRunRowSchema: z.ZodObject<{
|
|
24
|
+
id: z.ZodNumber;
|
|
25
|
+
started_at_ms: z.ZodNumber;
|
|
26
|
+
finished_at_ms: z.ZodNullable<z.ZodNumber>;
|
|
27
|
+
status: z.ZodEnum<{
|
|
28
|
+
error: "error";
|
|
29
|
+
success: "success";
|
|
30
|
+
running: "running";
|
|
31
|
+
}>;
|
|
32
|
+
error_code: z.ZodNullable<z.ZodString>;
|
|
33
|
+
error_message: z.ZodNullable<z.ZodString>;
|
|
34
|
+
stats_json: z.ZodString;
|
|
35
|
+
}, z.core.$strip>;
|
|
36
|
+
declare const syncRunIdRowSchema: z.ZodObject<{
|
|
37
|
+
id: z.ZodNumber;
|
|
38
|
+
}, z.core.$strip>;
|
|
39
|
+
declare const generationIdRowSchema: z.ZodObject<{
|
|
40
|
+
id: z.ZodNumber;
|
|
41
|
+
}, z.core.$strip>;
|
|
42
|
+
declare const activeGenerationRowSchema: z.ZodObject<{
|
|
43
|
+
generation_id: z.ZodNumber;
|
|
44
|
+
}, z.core.$strip>;
|
|
45
|
+
/** Row shape from getGenerationAssets used during sync diffing. */
|
|
46
|
+
declare const generationAssetRowSchema: z.ZodType<GenerationAssetRow>;
|
|
47
|
+
/** Row shape for a fully joined active asset used for queries. */
|
|
48
|
+
declare const activeAssetRowSchema: z.ZodType<ActiveAssetRow>;
|
|
49
|
+
declare const pendingDeletionSchema: z.ZodType<PendingDeletion>;
|
|
50
|
+
declare const protocolAssetTargetRowSchema: z.ZodObject<{
|
|
51
|
+
relative_path: z.ZodNullable<z.ZodString>;
|
|
52
|
+
}, z.core.$strip>;
|
|
53
|
+
declare const fileStemRowSchema: z.ZodObject<{
|
|
54
|
+
assetKey: z.ZodString;
|
|
55
|
+
}, z.core.$strip>;
|
|
56
|
+
declare const paginationInputSchema: z.ZodObject<{
|
|
57
|
+
limit: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodNumber>>, z.ZodTransform<number | undefined, number | null | undefined>>;
|
|
58
|
+
cursor: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string | undefined, string | null | undefined>>;
|
|
59
|
+
}, z.core.$strip>;
|
|
60
|
+
declare const optionalPaginationInputSchema: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
61
|
+
limit: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodNumber>>, z.ZodTransform<number | undefined, number | null | undefined>>;
|
|
62
|
+
cursor: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string | undefined, string | null | undefined>>;
|
|
63
|
+
}, z.core.$strip>>>, z.ZodTransform<{
|
|
64
|
+
limit: number | undefined;
|
|
65
|
+
cursor: string | undefined;
|
|
66
|
+
} | undefined, {
|
|
67
|
+
limit: number | undefined;
|
|
68
|
+
cursor: string | undefined;
|
|
69
|
+
} | null | undefined>>;
|
|
70
|
+
declare const cursorPayloadSchema: z.ZodObject<{
|
|
71
|
+
index: z.ZodNumber;
|
|
72
|
+
}, z.core.$strip>;
|
|
73
|
+
declare function parseWithSchema<T>(schema: z.ZodType<T>, value: unknown, context: string): T;
|
|
74
|
+
declare function parseJsonWithSchema<T>(rawJson: string, schema: z.ZodType<T>, context: string): T;
|
|
75
|
+
declare function stringifyWithSchema<T>(value: unknown, schema: z.ZodType<T>, context: string): string;
|
|
76
|
+
//#endregion
|
|
77
|
+
export { activeAssetRowSchema, activeGenerationRowSchema, cursorPayloadSchema, fileStemRowSchema, generationAssetRowSchema, generationIdRowSchema, jsonObjectSchema, jsonValueSchema, mediaCacheStatusSchema, mediaCacheStoragePathSchema, optionalPaginationInputSchema, paginationInputSchema, parseJsonWithSchema, parseWithSchema, pendingDeletionSchema, protocolAssetTargetRowSchema, serializedMediaCacheErrorSchema, statusSnapshotRowSchema, stringInputSchema, stringRecordSchema, stringifyWithSchema, syncProgressSchema, syncRunIdRowSchema, syncRunRowSchema, syncRunStatsSchema, syncRunSummarySchema };
|
|
78
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","names":[],"sources":["../../src/internal/validation.ts"],"mappings":";;;;;;;AAsBA;;cAAa,iBAAA,EAAiB,CAAA,CAAA,SAAA;AAAA,cAEjB,eAAA,EAAiB,CAAA,CAAE,OAAA,CAAQ,SAAA;AAAA,cAW3B,gBAAA,EAAkB,CAAA,CAAE,OAAA,CAAQ,MAAA,SAAe,SAAA;AAAA,cAK3C,kBAAA,EAAkB,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,SAAA,EAAA,CAAA,CAAA,SAAA;AAAA,cAElB,+BAAA,EAAiC,CAAA,CAAE,OAAA,CAAQ,yBAAA;AAAA,cAM3C,kBAAA,EAAoB,CAAA,CAAE,OAAA,CAAQ,YAAA;AAAA,cAO9B,kBAAA,EAAoB,CAAA,CAAE,OAAA,CAAQ,YAAA;AAAA,cAiB9B,oBAAA,EAAsB,CAAA,CAAE,OAAA,CAAQ,cAAA;AAAA,cAUhC,sBAAA,EAAwB,CAAA,CAAE,OAAA,CAAQ,gBAAA;AAAA,cAiDlC,2BAAA,EAA6B,CAAA,CAAE,OAAA,CAAQ,qBAAA;AAAA,cAKvC,uBAAA,EAAuB,CAAA,CAAA,SAAA;;;cAIvB,gBAAA,EAAgB,CAAA,CAAA,SAAA;;;;;;;;;;;;;cAUhB,kBAAA,EAAkB,CAAA,CAAA,SAAA;;;cAIlB,qBAAA,EAAqB,CAAA,CAAA,SAAA;;;cAIrB,yBAAA,EAAyB,CAAA,CAAA,SAAA;;;;cAKzB,wBAAA,EAA0B,CAAA,CAAE,OAAA,CAAQ,kBAAA;;cASpC,oBAAA,EAAsB,CAAA,CAAE,OAAA,CAAQ,cAAA;AAAA,cAgBhC,qBAAA,EAAuB,CAAA,CAAE,OAAA,CAAQ,eAAA;AAAA,cAMjC,4BAAA,EAA4B,CAAA,CAAA,SAAA;;;cAI5B,iBAAA,EAAiB,CAAA,CAAA,SAAA;;;cAgBjB,qBAAA,EAAqB,CAAA,CAAA,SAAA;;;;cAKrB,6BAAA,EAA6B,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,WAAA,CAAA,CAAA,CAAA,WAAA,CAAA,CAAA,CAAA,SAAA;;;;;;;;;;cAI7B,mBAAA,EAAmB,CAAA,CAAA,SAAA;;;iBAIhB,eAAA,GAAA,CAAmB,MAAA,EAAQ,CAAA,CAAE,OAAA,CAAQ,CAAA,GAAI,KAAA,WAAgB,OAAA,WAAkB,CAAA;AAAA,iBAW3E,mBAAA,GAAA,CAAuB,OAAA,UAAiB,MAAA,EAAQ,CAAA,CAAE,OAAA,CAAQ,CAAA,GAAI,OAAA,WAAkB,CAAA;AAAA,iBAahF,mBAAA,GAAA,CACd,KAAA,WACA,MAAA,EAAQ,CAAA,CAAE,OAAA,CAAQ,CAAA,GAClB,OAAA"}
|