@covro/covro 0.2.1-dev.6 → 0.2.1-dev.8
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 +8 -1
- package/README.zh-CN.md +8 -1
- package/dist/backups/factory.js +22 -0
- package/dist/backups/factory.js.map +7 -0
- package/dist/backups/lock.js +22 -0
- package/dist/backups/lock.js.map +7 -0
- package/dist/backups/manager.js +170 -0
- package/dist/backups/manager.js.map +7 -0
- package/dist/backups/restore.js +188 -0
- package/dist/backups/restore.js.map +7 -0
- package/dist/backups/store.js +274 -0
- package/dist/backups/store.js.map +7 -0
- package/dist/cli/backup.js +84 -0
- package/dist/cli/backup.js.map +7 -0
- package/dist/cli/daemon.js +7 -0
- package/dist/cli/daemon.js.map +2 -2
- package/dist/cli/main.js +35 -5
- package/dist/cli/main.js.map +2 -2
- package/dist/cli/paths.js.map +2 -2
- package/dist/server/db/history.js +60 -0
- package/dist/server/db/history.js.map +7 -0
- package/dist/server/db/index.js +11 -1
- package/dist/server/db/index.js.map +2 -2
- package/dist/server/db/migrate.js +8 -18
- package/dist/server/db/migrate.js.map +2 -2
- package/dist/server/http.js +21 -3
- package/dist/server/http.js.map +2 -2
- package/dist/server/main.js +14 -3
- package/dist/server/main.js.map +2 -2
- package/dist/server/service.js +9 -5
- package/dist/server/service.js.map +2 -2
- package/dist/shared/backups.js +55 -0
- package/dist/shared/backups.js.map +7 -0
- package/dist/shared/database.js +15 -0
- package/dist/shared/database.js.map +7 -0
- package/dist/update-worker.cjs +934 -388
- package/dist/updates/files.js +2 -1
- package/dist/updates/files.js.map +2 -2
- package/dist/updates/transaction.js +3 -24
- package/dist/updates/transaction.js.map +2 -2
- package/dist/updates/worker.js +69 -19
- package/dist/updates/worker.js.map +2 -2
- package/dist/web/assets/{abnfDiagram-WEYOIA3C-BkC1EVBk.js → abnfDiagram-WEYOIA3C-B8zG_C_F.js} +1 -1
- package/dist/web/assets/{arc-CYGT9huc.js → arc-BXL9OpmU.js} +1 -1
- package/dist/web/assets/{architecture-WOLXFQ4H-DCsF3gVg.js → architecture-WOLXFQ4H-BTKK_aYo.js} +1 -1
- package/dist/web/assets/{architectureDiagram-ZHVYKT53-Cn6kovuz.js → architectureDiagram-ZHVYKT53-DBCaGxvE.js} +1 -1
- package/dist/web/assets/{blockDiagram-RJAE7QA3-CNk2zXm9.js → blockDiagram-RJAE7QA3-5nSpgG2R.js} +1 -1
- package/dist/web/assets/{c4Diagram-XDPPPE54-CTuI_1XJ.js → c4Diagram-XDPPPE54-ZFSa_lAc.js} +1 -1
- package/dist/web/assets/channel-C_xSZVUz.js +1 -0
- package/dist/web/assets/{chunk-2E7WHVMD-TrYs0qV3.js → chunk-2E7WHVMD-m7Z4-p6b.js} +1 -1
- package/dist/web/assets/{chunk-4EMNKR2T-QL4-PZ4r.js → chunk-4EMNKR2T-Dd3Du5Wp.js} +1 -1
- package/dist/web/assets/{chunk-55XCU76K-yynn-EEr.js → chunk-55XCU76K-B4Cym3GJ.js} +1 -1
- package/dist/web/assets/{chunk-7S6XSTFO-dzrEn-_W.js → chunk-7S6XSTFO-CDr8VPut.js} +1 -1
- package/dist/web/assets/{chunk-AQDTSKZB-DaNZMEGO.js → chunk-AQDTSKZB-DN_lahgB.js} +1 -1
- package/dist/web/assets/{chunk-DSNLSHJZ-BnMtx8Ho.js → chunk-DSNLSHJZ-DtN5l5Ar.js} +1 -1
- package/dist/web/assets/{chunk-HAGFOTED-fg-JyiA5.js → chunk-HAGFOTED-aPHy1aHo.js} +1 -1
- package/dist/web/assets/{chunk-HNE4Q36P-CCsfPbcn.js → chunk-HNE4Q36P-LHoOBckL.js} +1 -1
- package/dist/web/assets/{chunk-NQOKRVIF-DLlOpcWZ.js → chunk-NQOKRVIF-CgVqPObB.js} +1 -1
- package/dist/web/assets/{chunk-UHW7PFBP-B-sPKpeS.js → chunk-UHW7PFBP-D7IOS7fZ.js} +1 -1
- package/dist/web/assets/{chunk-VQ5W62QI-BVqGMzey.js → chunk-VQ5W62QI-L-rpgVHW.js} +1 -1
- package/dist/web/assets/{chunk-WQQL4CDK-DcwJXNuh.js → chunk-WQQL4CDK-BwxlS7IY.js} +1 -1
- package/dist/web/assets/{chunk-XXDRQBXY-DRwLkqyU.js → chunk-XXDRQBXY-DeafdT4i.js} +1 -1
- package/dist/web/assets/{chunk-YZO67HFG-BrrgBnrQ.js → chunk-YZO67HFG-DXfUlNkI.js} +1 -1
- package/dist/web/assets/{chunk-ZAUX2LTX-C7qvwkRr.js → chunk-ZAUX2LTX-Do69fykC.js} +1 -1
- package/dist/web/assets/{chunk-ZCHMQSOR-DdBd3Cvs.js → chunk-ZCHMQSOR-CjoJalzt.js} +1 -1
- package/dist/web/assets/{classDiagram-v2-4MYWR3UA-Dn2RZb3v.js → classDiagram-v2-4MYWR3UA-CigIdZ7U.js} +1 -1
- package/dist/web/assets/{cose-bilkent-JH36ORCC-BlXvtfgE.js → cose-bilkent-JH36ORCC-CS7jqO5R.js} +1 -1
- package/dist/web/assets/{cynefin-EF2NZ3EQ-odDgTxc-.js → cynefin-EF2NZ3EQ-DclsepTa.js} +1 -1
- package/dist/web/assets/{cynefinDiagram-WF24UDRP-BySEoCW8.js → cynefinDiagram-WF24UDRP-BwggxvVt.js} +1 -1
- package/dist/web/assets/{dagre-NK4GIZVX-ihxmhB4X.js → dagre-NK4GIZVX-CDegqij1.js} +1 -1
- package/dist/web/assets/{diagram-CBK3MWTC-Ckr5P3IM.js → diagram-CBK3MWTC-CtYiu41o.js} +1 -1
- package/dist/web/assets/{diagram-I5XIIV2D-D5BZIval.js → diagram-I5XIIV2D-B_EdvEQ0.js} +1 -1
- package/dist/web/assets/{diagram-ODIL2UCW-BC5jjqqY.js → diagram-ODIL2UCW-DIAhaYWV.js} +1 -1
- package/dist/web/assets/{diagram-PFBEJUXE-D_IdYKqC.js → diagram-PFBEJUXE-h-2MVJLS.js} +1 -1
- package/dist/web/assets/{diagram-RJA3I4VV-DlPNsPqP.js → diagram-RJA3I4VV-L6CtV-wX.js} +1 -1
- package/dist/web/assets/{diagram-TYUNFSNR-Ca2ANhGM.js → diagram-TYUNFSNR-CRK7uDlw.js} +1 -1
- package/dist/web/assets/{dist-BSWkYZRr.js → dist-BJ7e_WRa.js} +1 -1
- package/dist/web/assets/{ebnfDiagram-V4P3TTPT-BrqvmeiB.js → ebnfDiagram-V4P3TTPT-DiMUSVcw.js} +1 -1
- package/dist/web/assets/{elk-QONTBCTQ-BfXeOE2E.js → elk-QONTBCTQ-zMe0e0lf.js} +1 -1
- package/dist/web/assets/{erDiagram-KYQIGQAA-CMuYoCVJ.js → erDiagram-KYQIGQAA-BurDHKVW.js} +1 -1
- package/dist/web/assets/{eventmodeling-K75KTNOO-9s4vQqv1.js → eventmodeling-K75KTNOO-CCdDU1Vn.js} +1 -1
- package/dist/web/assets/flowDiagram-IUGLLWBU-kvOthkRX.js +1 -0
- package/dist/web/assets/{ganttDiagram-R7GPNTJY-B-Xmfmm2.js → ganttDiagram-R7GPNTJY-B3p12HzE.js} +1 -1
- package/dist/web/assets/{gitGraph-VSP46ZUC-ZSbSQ7jf.js → gitGraph-VSP46ZUC-DwfEEe29.js} +1 -1
- package/dist/web/assets/{gitGraphDiagram-PDYL7XHY-BhxijLaZ.js → gitGraphDiagram-PDYL7XHY-C-4TICdU.js} +1 -1
- package/dist/web/assets/{index-mkDvqMQ3.css → index-COSho7m2.css} +1 -1
- package/dist/web/assets/index-_PgEAg27.js +147 -0
- package/dist/web/assets/{info-OHQRW6UA-CTSCkjt3.js → info-OHQRW6UA-9VU-Tuww.js} +1 -1
- package/dist/web/assets/{infoDiagram-MVDRKAX5-D46MTesD.js → infoDiagram-MVDRKAX5-Dl9CbN5F.js} +1 -1
- package/dist/web/assets/{ishikawaDiagram-HPEHV2GE-Bafu9NOk.js → ishikawaDiagram-HPEHV2GE-SDN10Ajd.js} +1 -1
- package/dist/web/assets/{journeyDiagram-BOSHW7O7-CRsIi1Ry.js → journeyDiagram-BOSHW7O7-BLB0N0xW.js} +1 -1
- package/dist/web/assets/{kanban-definition-FNSA4HC5-DjIT_uLs.js → kanban-definition-FNSA4HC5-DXwfxq7I.js} +1 -1
- package/dist/web/assets/{line-B5MDdgVs.js → line-46gZz5LW.js} +1 -1
- package/dist/web/assets/{linear-wm7JWxlT.js → linear-BAxP-UN2.js} +1 -1
- package/dist/web/assets/{mermaid-parser.core-C7jTW4sZ.js → mermaid-parser.core-do5rGU42.js} +3 -3
- package/dist/web/assets/{mermaid.core-DcWRGjP5.js → mermaid.core-DH3b37vl.js} +4 -4
- package/dist/web/assets/{mindmap-definition-6OY57UG3-qY6vV0UI.js → mindmap-definition-6OY57UG3-DMxeUKAv.js} +1 -1
- package/dist/web/assets/{packet-JDAUHWVQ-9B7vLYK0.js → packet-JDAUHWVQ-D3a0MMF_.js} +1 -1
- package/dist/web/assets/{pegDiagram-ECIUJNBX-B7gLZ_Fs.js → pegDiagram-ECIUJNBX-DTwfTBgO.js} +1 -1
- package/dist/web/assets/{pie-XZMESJXO-MfazZSiE.js → pie-XZMESJXO-e46xxIb_.js} +1 -1
- package/dist/web/assets/{pieDiagram-GNMPY74T-1ahagzzC.js → pieDiagram-GNMPY74T-PVAAsxhT.js} +1 -1
- package/dist/web/assets/{quadrantDiagram-D57K4MC3-C-GkwjOp.js → quadrantDiagram-D57K4MC3-B9amPs7h.js} +1 -1
- package/dist/web/assets/{radar-ABXABTNO-CgutvWTi.js → radar-ABXABTNO-D6ZOHa6D.js} +1 -1
- package/dist/web/assets/{railroad-I3PHUGI6-Bl9LJINm.js → railroad-I3PHUGI6-BKBsMC0B.js} +1 -1
- package/dist/web/assets/{railroad-abnf-LNEFI6M7-CGRpAnuU.js → railroad-abnf-LNEFI6M7-BxJ-MDoO.js} +1 -1
- package/dist/web/assets/{railroad-ebnf-DWYD2UWJ-D6A47xZS.js → railroad-ebnf-DWYD2UWJ-aG0mC8vs.js} +1 -1
- package/dist/web/assets/{railroad-peg-JR7BVNR7-DxGphrFO.js → railroad-peg-JR7BVNR7-DGhAES9a.js} +1 -1
- package/dist/web/assets/{railroadDiagram-Y72NRBL7-D8P17OV4.js → railroadDiagram-Y72NRBL7-8Bj0VxcB.js} +1 -1
- package/dist/web/assets/{requirementDiagram-EQYSW5RA-c93_xAaQ.js → requirementDiagram-EQYSW5RA-CiTdnYqt.js} +1 -1
- package/dist/web/assets/{sankeyDiagram-SY24JHO5-FankqwcZ.js → sankeyDiagram-SY24JHO5-JOgC0a7X.js} +1 -1
- package/dist/web/assets/{sequenceDiagram-BLEHNHQU-CWH5SeL1.js → sequenceDiagram-BLEHNHQU-BH4lajeV.js} +1 -1
- package/dist/web/assets/{src-BXQOmVZv.js → src-BWVVEoim.js} +1 -1
- package/dist/web/assets/{stateDiagram-v2-A6IESKWZ-DLfcw0e7.js → stateDiagram-v2-A6IESKWZ-BbiuK5Zz.js} +1 -1
- package/dist/web/assets/{swimlanes-B3ENRKFQ-DZ-yBiap.js → swimlanes-B3ENRKFQ-Dscu-_Yz.js} +1 -1
- package/dist/web/assets/swimlanesDiagram-AYQRV4AK-DSGMlqJQ.js +8 -0
- package/dist/web/assets/{timeline-definition-JXYKGLGB-B7XvxDHY.js → timeline-definition-JXYKGLGB-Br42w2T8.js} +1 -1
- package/dist/web/assets/{treeView-D4JQ5SDB-DrB6wXJ0.js → treeView-D4JQ5SDB-DSb5v9pO.js} +1 -1
- package/dist/web/assets/{treemap-SAJKECNS-BynFjsvx.js → treemap-SAJKECNS-C7iN5GFB.js} +1 -1
- package/dist/web/assets/{usecaseDiagram-WPOLBNNX-BISzHOHN.js → usecaseDiagram-WPOLBNNX-CTSO8vjh.js} +1 -1
- package/dist/web/assets/{vennDiagram-Q3Y3IDCW-BZwjTIST.js → vennDiagram-Q3Y3IDCW-BMAynpAa.js} +1 -1
- package/dist/web/assets/{wardley-7MLQ67FV-2bM0pMhO.js → wardley-7MLQ67FV-C0mrVGIB.js} +1 -1
- package/dist/web/assets/{wardleyDiagram-IVAIDKWA-CflkU8us.js → wardleyDiagram-IVAIDKWA-Cn5Ctwjf.js} +1 -1
- package/dist/web/assets/{xychartDiagram-4URNHDU4-DRspOlD3.js → xychartDiagram-4URNHDU4-7HTAaZFv.js} +1 -1
- package/dist/web/index.html +2 -2
- package/package.json +8 -3
- package/dist/web/assets/channel-BDxsxdm-.js +0 -1
- package/dist/web/assets/flowDiagram-IUGLLWBU-BHwP7Ha7.js +0 -1
- package/dist/web/assets/index-BrvtlTwN.js +0 -147
- package/dist/web/assets/swimlanesDiagram-AYQRV4AK-BlmdUBbW.js +0 -8
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
const backupIdSchema = z.string().regex(/^[a-zA-Z0-9][a-zA-Z0-9_-]{0,100}$/);
|
|
3
|
+
const backupTriggers = ["manual", "preUpgrade", "preRestore"];
|
|
4
|
+
const backupPhases = [
|
|
5
|
+
"waiting",
|
|
6
|
+
"copying",
|
|
7
|
+
"verifying",
|
|
8
|
+
"succeeded",
|
|
9
|
+
"failed",
|
|
10
|
+
"cancelled",
|
|
11
|
+
"interrupted",
|
|
12
|
+
"corrupt"
|
|
13
|
+
];
|
|
14
|
+
const backupManifestSchema = z.object({
|
|
15
|
+
formatVersion: z.literal(1),
|
|
16
|
+
complete: z.literal(true),
|
|
17
|
+
id: backupIdSchema,
|
|
18
|
+
createdAt: z.number().int().positive(),
|
|
19
|
+
appVersion: z.string().min(1),
|
|
20
|
+
commit: z.string().optional(),
|
|
21
|
+
trigger: z.enum(backupTriggers),
|
|
22
|
+
configPath: z.string(),
|
|
23
|
+
dataDir: z.string(),
|
|
24
|
+
schemaVersion: z.number().int().positive(),
|
|
25
|
+
migrationHashes: z.array(z.string().regex(/^[a-f0-9]{64}$/)).min(1),
|
|
26
|
+
files: z.array(
|
|
27
|
+
z.object({
|
|
28
|
+
name: z.enum(["app.sqlite", "config.json"]),
|
|
29
|
+
size: z.number().int().nonnegative(),
|
|
30
|
+
sha256: z.string().regex(/^[a-f0-9]{64}$/)
|
|
31
|
+
}).strict()
|
|
32
|
+
).length(2),
|
|
33
|
+
protectedBy: z.string().optional()
|
|
34
|
+
}).strict().refine(
|
|
35
|
+
(value) => new Set(value.files.map((file) => file.name)).size === 2 && value.migrationHashes.length === value.schemaVersion
|
|
36
|
+
);
|
|
37
|
+
const backupRecordSchema = z.object({
|
|
38
|
+
id: backupIdSchema,
|
|
39
|
+
phase: z.enum(backupPhases),
|
|
40
|
+
trigger: z.enum(backupTriggers),
|
|
41
|
+
createdAt: z.number().int().nonnegative().max(864e13),
|
|
42
|
+
updatedAt: z.number().int().nonnegative(),
|
|
43
|
+
path: z.string(),
|
|
44
|
+
message: z.string(),
|
|
45
|
+
progress: z.number().min(0).max(100).optional(),
|
|
46
|
+
manifest: backupManifestSchema.optional()
|
|
47
|
+
}).strict();
|
|
48
|
+
export {
|
|
49
|
+
backupIdSchema,
|
|
50
|
+
backupManifestSchema,
|
|
51
|
+
backupPhases,
|
|
52
|
+
backupRecordSchema,
|
|
53
|
+
backupTriggers
|
|
54
|
+
};
|
|
55
|
+
//# sourceMappingURL=backups.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/shared/backups.ts"],
|
|
4
|
+
"sourcesContent": ["import { z } from 'zod';\n\nexport const backupIdSchema = z.string().regex(/^[a-zA-Z0-9][a-zA-Z0-9_-]{0,100}$/);\nexport const backupTriggers = ['manual', 'preUpgrade', 'preRestore'] as const;\nexport const backupPhases = [\n 'waiting',\n 'copying',\n 'verifying',\n 'succeeded',\n 'failed',\n 'cancelled',\n 'interrupted',\n 'corrupt',\n] as const;\nexport const backupManifestSchema = z\n .object({\n formatVersion: z.literal(1),\n complete: z.literal(true),\n id: backupIdSchema,\n createdAt: z.number().int().positive(),\n appVersion: z.string().min(1),\n commit: z.string().optional(),\n trigger: z.enum(backupTriggers),\n configPath: z.string(),\n dataDir: z.string(),\n schemaVersion: z.number().int().positive(),\n migrationHashes: z.array(z.string().regex(/^[a-f0-9]{64}$/)).min(1),\n files: z\n .array(\n z\n .object({\n name: z.enum(['app.sqlite', 'config.json']),\n size: z.number().int().nonnegative(),\n sha256: z.string().regex(/^[a-f0-9]{64}$/),\n })\n .strict(),\n )\n .length(2),\n protectedBy: z.string().optional(),\n })\n .strict()\n .refine(\n (value) =>\n new Set(value.files.map((file) => file.name)).size === 2 &&\n value.migrationHashes.length === value.schemaVersion,\n );\nexport type BackupManifest = z.infer<typeof backupManifestSchema>;\nexport const backupRecordSchema = z\n .object({\n id: backupIdSchema,\n phase: z.enum(backupPhases),\n trigger: z.enum(backupTriggers),\n createdAt: z.number().int().nonnegative().max(8_640_000_000_000_000),\n updatedAt: z.number().int().nonnegative(),\n path: z.string(),\n message: z.string(),\n progress: z.number().min(0).max(100).optional(),\n manifest: backupManifestSchema.optional(),\n })\n .strict();\nexport type BackupRecord = z.infer<typeof backupRecordSchema>;\nexport interface BackupStatus {\n directory: string;\n schemaVersion: number;\n records: BackupRecord[];\n active?: BackupRecord;\n supported: boolean;\n unsupportedReason?: string;\n}\nexport interface BackupController {\n status(): Promise<BackupStatus>;\n start(input: { clientOperationId: string }): Promise<BackupStatus>;\n cancel(id: string): Promise<BackupStatus>;\n verify(id: string): Promise<BackupStatus>;\n close(): Promise<void>;\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,SAAS;AAEX,MAAM,iBAAiB,EAAE,OAAO,EAAE,MAAM,mCAAmC;AAC3E,MAAM,iBAAiB,CAAC,UAAU,cAAc,YAAY;AAC5D,MAAM,eAAe;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACO,MAAM,uBAAuB,EACjC,OAAO;AAAA,EACN,eAAe,EAAE,QAAQ,CAAC;AAAA,EAC1B,UAAU,EAAE,QAAQ,IAAI;AAAA,EACxB,IAAI;AAAA,EACJ,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACrC,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC5B,QAAQ,EAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,SAAS,EAAE,KAAK,cAAc;AAAA,EAC9B,YAAY,EAAE,OAAO;AAAA,EACrB,SAAS,EAAE,OAAO;AAAA,EAClB,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACzC,iBAAiB,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC,EAAE,IAAI,CAAC;AAAA,EAClE,OAAO,EACJ;AAAA,IACC,EACG,OAAO;AAAA,MACN,MAAM,EAAE,KAAK,CAAC,cAAc,aAAa,CAAC;AAAA,MAC1C,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,MACnC,QAAQ,EAAE,OAAO,EAAE,MAAM,gBAAgB;AAAA,IAC3C,CAAC,EACA,OAAO;AAAA,EACZ,EACC,OAAO,CAAC;AAAA,EACX,aAAa,EAAE,OAAO,EAAE,SAAS;AACnC,CAAC,EACA,OAAO,EACP;AAAA,EACC,CAAC,UACC,IAAI,IAAI,MAAM,MAAM,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,EAAE,SAAS,KACvD,MAAM,gBAAgB,WAAW,MAAM;AAC3C;AAEK,MAAM,qBAAqB,EAC/B,OAAO;AAAA,EACN,IAAI;AAAA,EACJ,OAAO,EAAE,KAAK,YAAY;AAAA,EAC1B,SAAS,EAAE,KAAK,cAAc;AAAA,EAC9B,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,MAAqB;AAAA,EACnE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EACxC,MAAM,EAAE,OAAO;AAAA,EACf,SAAS,EAAE,OAAO;AAAA,EAClB,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,EAC9C,UAAU,qBAAqB,SAAS;AAC1C,CAAC,EACA,OAAO;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
const databaseCompatibilitySchema = z.object({
|
|
3
|
+
schemaVersion: z.number().int().positive(),
|
|
4
|
+
minRestorableSchemaVersion: z.number().int().positive(),
|
|
5
|
+
backupFormatVersion: z.literal(1)
|
|
6
|
+
}).strict().refine((value) => value.minRestorableSchemaVersion <= value.schemaVersion);
|
|
7
|
+
function databaseCompatibilityMarkdown(metadata) {
|
|
8
|
+
const value = databaseCompatibilitySchema.parse(metadata);
|
|
9
|
+
return `DB Schema: **${value.schemaVersion}**. Restorable schemas: **${value.minRestorableSchemaVersion}\u2013${value.schemaVersion}**, subject to matching migration history. Backup format: **${value.backupFormatVersion}**. Older backups are migrated forward; newer schemas cannot be opened by this release. Downgrading the application does not downgrade its database; restore a compatible backup to roll back data.`;
|
|
10
|
+
}
|
|
11
|
+
export {
|
|
12
|
+
databaseCompatibilityMarkdown,
|
|
13
|
+
databaseCompatibilitySchema
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=database.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/shared/database.ts"],
|
|
4
|
+
"sourcesContent": ["import { z } from 'zod';\n\nexport const databaseCompatibilitySchema = z\n .object({\n schemaVersion: z.number().int().positive(),\n minRestorableSchemaVersion: z.number().int().positive(),\n backupFormatVersion: z.literal(1),\n })\n .strict()\n .refine((value) => value.minRestorableSchemaVersion <= value.schemaVersion);\nexport type DatabaseCompatibility = z.infer<typeof databaseCompatibilitySchema>;\n\nexport function databaseCompatibilityMarkdown(metadata: unknown) {\n const value = databaseCompatibilitySchema.parse(metadata);\n return `DB Schema: **${value.schemaVersion}**. Restorable schemas: **${value.minRestorableSchemaVersion}\u2013${value.schemaVersion}**, subject to matching migration history. Backup format: **${value.backupFormatVersion}**. Older backups are migrated forward; newer schemas cannot be opened by this release. Downgrading the application does not downgrade its database; restore a compatible backup to roll back data.`;\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,SAAS;AAEX,MAAM,8BAA8B,EACxC,OAAO;AAAA,EACN,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACzC,4BAA4B,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACtD,qBAAqB,EAAE,QAAQ,CAAC;AAClC,CAAC,EACA,OAAO,EACP,OAAO,CAAC,UAAU,MAAM,8BAA8B,MAAM,aAAa;AAGrE,SAAS,8BAA8B,UAAmB;AAC/D,QAAM,QAAQ,4BAA4B,MAAM,QAAQ;AACxD,SAAO,gBAAgB,MAAM,aAAa,6BAA6B,MAAM,0BAA0B,SAAI,MAAM,aAAa,+DAA+D,MAAM,mBAAmB;AACxN;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|