@proteinjs/db-file 1.8.3 → 1.9.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 +38 -0
- package/dist/generated/index.d.ts.map +1 -1
- package/dist/generated/index.js +3 -1
- package/dist/generated/index.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/src/DbFileStorageDriver.d.ts +7 -0
- package/dist/src/DbFileStorageDriver.d.ts.map +1 -1
- package/dist/src/DbFileStorageDriver.js +69 -41
- package/dist/src/DbFileStorageDriver.js.map +1 -1
- package/dist/src/FileCopyForOthers.d.ts +52 -0
- package/dist/src/FileCopyForOthers.d.ts.map +1 -0
- package/dist/src/FileCopyForOthers.js +62 -0
- package/dist/src/FileCopyForOthers.js.map +1 -0
- package/dist/src/FileStorage.d.ts +145 -11
- package/dist/src/FileStorage.d.ts.map +1 -1
- package/dist/src/FileStorage.js +537 -41
- package/dist/src/FileStorage.js.map +1 -1
- package/dist/src/FileStorageDriver.d.ts +11 -0
- package/dist/src/FileStorageDriver.d.ts.map +1 -1
- package/dist/src/FileStorageError.d.ts +62 -0
- package/dist/src/FileStorageError.d.ts.map +1 -0
- package/dist/src/FileStorageError.js +118 -0
- package/dist/src/FileStorageError.js.map +1 -0
- package/dist/src/FileVariantMaker.d.ts +61 -0
- package/dist/src/FileVariantMaker.d.ts.map +1 -0
- package/dist/src/FileVariantMaker.js +62 -0
- package/dist/src/FileVariantMaker.js.map +1 -0
- package/dist/src/routes/FileResponder.d.ts +41 -0
- package/dist/src/routes/FileResponder.d.ts.map +1 -0
- package/dist/src/routes/FileResponder.js +135 -0
- package/dist/src/routes/FileResponder.js.map +1 -0
- package/dist/src/routes/getFile.d.ts +5 -13
- package/dist/src/routes/getFile.d.ts.map +1 -1
- package/dist/src/routes/getFile.js +20 -56
- package/dist/src/routes/getFile.js.map +1 -1
- package/dist/src/routes/getFileVariant.d.ts +20 -0
- package/dist/src/routes/getFileVariant.d.ts.map +1 -0
- package/dist/src/routes/getFileVariant.js +112 -0
- package/dist/src/routes/getFileVariant.js.map +1 -0
- package/dist/src/routes/getFileVariantRoute.d.ts +7 -0
- package/dist/src/routes/getFileVariantRoute.d.ts.map +1 -0
- package/dist/src/routes/getFileVariantRoute.js +9 -0
- package/dist/src/routes/getFileVariantRoute.js.map +1 -0
- package/dist/src/tables/FileTable.d.ts +55 -2
- package/dist/src/tables/FileTable.d.ts.map +1 -1
- package/dist/src/tables/FileTable.js +8 -0
- package/dist/src/tables/FileTable.js.map +1 -1
- package/dist/test/DbFileStorageDriverMissingBytes.test.d.ts +2 -0
- package/dist/test/DbFileStorageDriverMissingBytes.test.d.ts.map +1 -0
- package/dist/test/DbFileStorageDriverMissingBytes.test.js +184 -0
- package/dist/test/DbFileStorageDriverMissingBytes.test.js.map +1 -0
- package/dist/test/FileByteAccess.test.js +6 -3
- package/dist/test/FileByteAccess.test.js.map +1 -1
- package/dist/test/FileCopyForOthers.test.d.ts +2 -0
- package/dist/test/FileCopyForOthers.test.d.ts.map +1 -0
- package/dist/test/FileCopyForOthers.test.js +1143 -0
- package/dist/test/FileCopyForOthers.test.js.map +1 -0
- package/dist/test/FileMediaMetadata.test.js +60 -5
- package/dist/test/FileMediaMetadata.test.js.map +1 -1
- package/dist/test/FileStorageError.test.d.ts +2 -0
- package/dist/test/FileStorageError.test.d.ts.map +1 -0
- package/dist/test/FileStorageError.test.js +68 -0
- package/dist/test/FileStorageError.test.js.map +1 -0
- package/dist/test/FileTestEnvironment.d.ts.map +1 -1
- package/dist/test/FileTestEnvironment.js +3 -0
- package/dist/test/FileTestEnvironment.js.map +1 -1
- package/dist/test/FileVariants.test.d.ts +2 -0
- package/dist/test/FileVariants.test.d.ts.map +1 -0
- package/dist/test/FileVariants.test.js +1008 -0
- package/dist/test/FileVariants.test.js.map +1 -0
- package/dist/test/GetFileRoute.test.js +29 -0
- package/dist/test/GetFileRoute.test.js.map +1 -1
- package/generated/index.ts +3 -1
- package/index.ts +4 -0
- package/package.json +5 -5
- package/src/DbFileStorageDriver.ts +32 -21
- package/src/FileCopyForOthers.ts +71 -0
- package/src/FileStorage.ts +351 -18
- package/src/FileStorageDriver.ts +12 -0
- package/src/FileStorageError.ts +123 -0
- package/src/FileVariantMaker.ts +84 -0
- package/src/routes/FileResponder.ts +85 -0
- package/src/routes/getFile.ts +9 -44
- package/src/routes/getFileVariant.ts +53 -0
- package/src/routes/getFileVariantRoute.ts +7 -0
- package/src/tables/FileTable.ts +57 -1
- package/test/DbFileStorageDriverMissingBytes.test.ts +85 -0
- package/test/FileByteAccess.test.ts +7 -1
- package/test/FileCopyForOthers.test.ts +702 -0
- package/test/FileMediaMetadata.test.ts +44 -0
- package/test/FileStorageError.test.ts +79 -0
- package/test/FileTestEnvironment.ts +3 -0
- package/test/FileVariants.test.ts +604 -0
- package/test/GetFileRoute.test.ts +19 -0
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,44 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [1.9.0](https://github.com/proteinjs/db/compare/@proteinjs/db-file@1.8.4...@proteinjs/db-file@1.9.0) (2026-09-25)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* **db-file:** a file no copy can be made of answers a quiet 403 on GET /file/:id — it was a 500 with the refusal's stack printed on every view (a recipient looking at a shared camera RAW would raise an error report per look). FileCopyRefused is the seam's own refusal: FileStorage throws it in the maker's place with the maker's one-line reason, read by shape like FileStorageError; the route maps it, nothing printed; the browser service still throws it to its caller. Red first: the route case answered 500 ([936af9e](https://github.com/proteinjs/db/commit/936af9e58dbe1d0f672eeac41433e4f514b2b729))
|
|
12
|
+
* **db-file:** a file that is not there answers what a refused copy answers — 404 "File not found" at every door, never the id ([d5e484c](https://github.com/proteinjs/db/commit/d5e484c0b8456fd67d704cbaa96799feef47d87f))
|
|
13
|
+
* **db-file:** a refused copy answers only "File not found" at every door — the maker's reason stays in the server's log ([d4902f6](https://github.com/proteinjs/db/commit/d4902f6ce1d5b3e6daa609abab2bbf0eb9a4027a))
|
|
14
|
+
* **db-file:** a storage driver's errors are the driver's own — a code, a plain message, the status ([a111158](https://github.com/proteinjs/db/commit/a11115825085860c1578196675497429cd2fb930))
|
|
15
|
+
* **db-file:** deriveVariants hands back the caller's row with the variants named on it, not a re-read — an unset column stays unset (a consumer that returns the inserted row saw null where it had undefined); one read fewer at ingest ([763809c](https://github.com/proteinjs/db/commit/763809cc59b6d804f475bf8882a00d4d48ab113f))
|
|
16
|
+
* **db-file:** one refusal at every file door — a file no copy can be made of is a 404 for anyone but its owner, whichever door asks ([382fa26](https://github.com/proteinjs/db/commit/382fa2648e0627b13f728c16d1b018a501557791))
|
|
17
|
+
* **db-file:** the owner of a served file is read from the row's scope, not from a second read — getFile stays the one access decision every consumer stubs; a row with no owner recorded serves as itself ([133286b](https://github.com/proteinjs/db/commit/133286bb5178a5552704b76aa076ead3663f9f3e))
|
|
18
|
+
* **db-file:** the read path derives a variant once per file and kind at a time in a process — N readers asking for the same absent stage while it derives (a shared document opened by many on one tick) each read the original, ran the maker, stored an object and had the row's word discard all but one; now they wait for the one derivation's answer (four readers: one read, one maker call, one object, no loser). Across processes the row's word in one transaction still decides. A maker that cannot make the variant of these bytes no longer fails the read with a 500 per look: FileVariantNotMade is the seam's own refusal (the maker's one-line reason on it, read by shape like FileCopyRefused); the read path serves the file itself and says so in the log, the ingest door still reports it to the caller holding the bytes. Red first: four readers cost four maker calls; the maker's throw escaped getVariant ([b9cca11](https://github.com/proteinjs/db/commit/b9cca11148c1ec8985caf9157de1eab3f37e0faa))
|
|
19
|
+
* **db-file:** the row's word for a copy for others is decided in one transaction — two non-owners racing both passed the re-read and a second (third, fourth) copy stayed alive in the owner's scope, never named on the row and so never cascade-deleted; the read of the row and the write of its word now ride one transaction (the loser's transaction is retried and finds the winner named), the loser's row is deleted after the commit. The suite gains the race: four readers released on one tick at the driver's createFile — red 3/3 at the previous tip, green 3/3 here ([8eb5e45](https://github.com/proteinjs/db/commit/8eb5e456dfb9ac72fc40c1a11c89c6b0a6ae431b))
|
|
20
|
+
* **db-file:** the server-side file-data door refuses a caller who may not read the file as unavailable — a 404 ServiceRefusal, not a failure ([dcd631a](https://github.com/proteinjs/db/commit/dcd631a7a6e6d56f3b528a1b930b670d40d9db59))
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
### Features
|
|
24
|
+
|
|
25
|
+
* **db-file:** a file read by anyone but its owner is served through the copy the registered FileCopyForOthers makes — made once, stored as the owner's own File and named on the row (copy_for_others, cascade-deleted), dropped when the bytes change; the owner is always served the original; with no maker registered everyone is (the seam for a picture served without its location) ([44edaaa](https://github.com/proteinjs/db/commit/44edaaa3e356eb0c79b56b20e31557bb2654d584))
|
|
26
|
+
* **db-file:** a server-side door that made its own access decision is served the owner-or-copy bytes too — FileStorage.getAuthorizedFileData(row) ([927b19e](https://github.com/proteinjs/db/commit/927b19ed3173d80d75f51356d239275198ee1a81))
|
|
27
|
+
* **db-file:** a stage variant beside the preview — File.stage, a second derived File with the preview's lifecycle, made through one FileVariantMaker seam ([915cadd](https://github.com/proteinjs/db/commit/915cadd185da162e6b503ca82b23adfc0c55218e))
|
|
28
|
+
* **db-file:** File.originModel — which model made the bytes, beside the producer kind ([0005867](https://github.com/proteinjs/db/commit/0005867fc7c98e9e1800c3d86ef81ca64e026547))
|
|
29
|
+
* **db-file:** GET /file/:id/variant/:kind — a variant is asked by URL, an existing file derives it on the first request ([c50c32c](https://github.com/proteinjs/db/commit/c50c32cac2037d20623547c39b53c3be489befa9))
|
|
30
|
+
* File.origin — producer attribution column (how the bytes came to exist: an upload, a browser capture, a generation, a rendered document), a generic file fact consumers read without a join ([11786b7](https://github.com/proteinjs/db/commit/11786b747bc25a2744cb1c272d3cbb7b819a349c))
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
## [1.8.4](https://github.com/proteinjs/db/compare/@proteinjs/db-file@1.8.3...@proteinjs/db-file@1.8.4) (2026-09-24)
|
|
37
|
+
|
|
38
|
+
**Note:** Version bump only for package @proteinjs/db-file
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
6
44
|
## [1.8.3](https://github.com/proteinjs/db/compare/@proteinjs/db-file@1.8.2...@proteinjs/db-file@1.8.3) (2026-09-24)
|
|
7
45
|
|
|
8
46
|
**Note:** Version bump only for package @proteinjs/db-file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../generated/index.ts"],"names":[],"mappings":"AAAA,oCAAoC;AAEpC,OAAO,eAAe,CAAC;AACvB,OAAO,mBAAmB,CAAC;AAC3B,OAAO,uBAAuB,CAAC;AAC/B,OAAO,oBAAoB,CAAC;AAC5B,OAAO,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../generated/index.ts"],"names":[],"mappings":"AAAA,oCAAoC;AAEpC,OAAO,eAAe,CAAC;AACvB,OAAO,mBAAmB,CAAC;AAC3B,OAAO,uBAAuB,CAAC;AAC/B,OAAO,oBAAoB,CAAC;AAC5B,OAAO,iBAAiB,CAAC;AAiCzB,cAAc,UAAU,CAAC"}
|
package/dist/generated/index.js
CHANGED
|
@@ -21,17 +21,19 @@ require("@proteinjs/server-api");
|
|
|
21
21
|
require("@proteinjs/service");
|
|
22
22
|
require("@proteinjs/user");
|
|
23
23
|
/** Generate Source Graph */
|
|
24
|
-
var sourceGraph = "{\"options\":{\"directed\":true,\"multigraph\":false,\"compound\":false},\"nodes\":[{\"v\":\"@proteinjs/db-file/FileReachabilityResolver\",\"value\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"FileReachabilityResolver\",\"filePath\":\"src/FileReachabilityResolver.ts\",\"qualifiedName\":\"@proteinjs/db-file/FileReachabilityResolver\",\"properties\":[],\"methods\":[{\"name\":\"canReadViaReference\",\"returnType\":{\"packageName\":\"\",\"name\":\"Promise<boolean>\",\"filePath\":null,\"qualifiedName\":\"/Promise<boolean>\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":false,\"isOptional\":false,\"isAbstract\":true,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[{\"name\":\"fileId\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null}}]}],\"typeParameters\":[],\"directParents\":[{\"packageName\":\"@proteinjs/reflection\",\"name\":\"Loadable\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/reflection/Loadable\",\"properties\":[],\"methods\":[],\"typeParameters\":[],\"directParents\":[]}],\"sourceType\":3}},{\"v\":\"@proteinjs/reflection/Loadable\"},{\"v\":\"@proteinjs/db-file/DefaultFileStorageDriverFactory\",\"value\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"DefaultFileStorageDriverFactory\",\"filePath\":\"src/FileStorage.ts\",\"qualifiedName\":\"@proteinjs/db-file/DefaultFileStorageDriverFactory\",\"properties\":[],\"methods\":[{\"name\":\"getDriver\",\"returnType\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"FileStorageDriver\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/db-file/FileStorageDriver\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":false,\"isOptional\":false,\"isAbstract\":true,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[]}],\"typeParameters\":[],\"directParents\":[{\"packageName\":\"@proteinjs/reflection\",\"name\":\"Loadable\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/reflection/Loadable\",\"properties\":[],\"methods\":[],\"typeParameters\":[],\"directParents\":[]}],\"sourceType\":3}},{\"v\":\"@proteinjs/db-file/FileStorage\",\"value\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"FileStorage\",\"filePath\":\"src/FileStorage.ts\",\"qualifiedName\":\"@proteinjs/db-file/FileStorage\",\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"properties\":[{\"name\":\"driver\",\"type\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"FileStorageDriver\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/db-file/FileStorageDriver\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":false,\"isAbstract\":false,\"isStatic\":true,\"visibility\":\"private\"},{\"name\":\"serviceMetadata\",\"type\":null,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"}],\"methods\":[{\"name\":\"getDriver\",\"returnType\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"FileStorageDriver\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/db-file/FileStorageDriver\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":false,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":true,\"visibility\":\"public\",\"parameters\":[]},{\"name\":\"createFile\",\"returnType\":{\"packageName\":\"\",\"name\":\"Promise<File>\",\"filePath\":null,\"qualifiedName\":\"/Promise<File>\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":true,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[{\"name\":\"fileMetaData\",\"type\":{\"packageName\":\"\",\"name\":\"Omit<File, keyof ScopedRecord>\",\"filePath\":null,\"qualifiedName\":\"/Omit<File, keyof ScopedRecord>\",\"typeParameters\":null,\"directParents\":null}},{\"name\":\"fileData\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null}}]},{\"name\":\"getFile\",\"returnType\":{\"packageName\":\"\",\"name\":\"Promise<File>\",\"filePath\":null,\"qualifiedName\":\"/Promise<File>\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":true,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[{\"name\":\"fileId\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null}}]},{\"name\":\"getFileData\",\"returnType\":{\"packageName\":\"\",\"name\":\"Promise<string>\",\"filePath\":null,\"qualifiedName\":\"/Promise<string>\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":true,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[{\"name\":\"fileId\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null}}]},{\"name\":\"getSignedUrl\",\"returnType\":{\"packageName\":\"\",\"name\":\"Promise<string | undefined>\",\"filePath\":null,\"qualifiedName\":\"/Promise<string | undefined>\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":true,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[{\"name\":\"fileId\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null}},{\"name\":\"options\",\"type\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"{ ttlMs?: number }\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/db-file/{ ttlMs?: number }\",\"typeParameters\":null,\"directParents\":null}}]},{\"name\":\"updateFileData\",\"returnType\":{\"packageName\":\"\",\"name\":\"Promise<void>\",\"filePath\":null,\"qualifiedName\":\"/Promise<void>\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":true,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[{\"name\":\"fileId\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null}},{\"name\":\"data\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null}}]},{\"name\":\"updateFile\",\"returnType\":{\"packageName\":\"\",\"name\":\"Promise<void>\",\"filePath\":null,\"qualifiedName\":\"/Promise<void>\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":true,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[{\"name\":\"file\",\"type\":{\"packageName\":\"\",\"name\":\"Omit<File, keyof ScopedRecord>\",\"filePath\":null,\"qualifiedName\":\"/Omit<File, keyof ScopedRecord>\",\"typeParameters\":null,\"directParents\":null}}]},{\"name\":\"deleteFile\",\"returnType\":{\"packageName\":\"\",\"name\":\"Promise<void>\",\"filePath\":null,\"qualifiedName\":\"/Promise<void>\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":true,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[{\"name\":\"fileId\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null}}]}],\"typeParameters\":[],\"directParentInterfaces\":[{\"packageName\":\"@proteinjs/db-file\",\"name\":\"FileStorageService\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/db-file/FileStorageService\",\"properties\":[],\"methods\":[],\"typeParameters\":[],\"directParents\":[]}],\"directParentClasses\":[],\"sourceType\":2}},{\"v\":\"@proteinjs/db-file/FileStorageService\",\"value\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"FileStorageService\",\"filePath\":\"src/services/FileStorageService.ts\",\"qualifiedName\":\"@proteinjs/db-file/FileStorageService\",\"properties\":[],\"methods\":[{\"name\":\"createFile\",\"returnType\":{\"packageName\":\"\",\"name\":\"Promise<File>\",\"filePath\":null,\"qualifiedName\":\"/Promise<File>\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":false,\"isOptional\":false,\"isAbstract\":true,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[{\"name\":\"fileMetaData\",\"type\":{\"packageName\":\"\",\"name\":\"Omit<File, keyof ScopedRecord>\",\"filePath\":null,\"qualifiedName\":\"/Omit<File, keyof ScopedRecord>\",\"typeParameters\":null,\"directParents\":null}},{\"name\":\"fileData\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null}}]},{\"name\":\"getFile\",\"returnType\":{\"packageName\":\"\",\"name\":\"Promise<File>\",\"filePath\":null,\"qualifiedName\":\"/Promise<File>\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":false,\"isOptional\":false,\"isAbstract\":true,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[{\"name\":\"fileId\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null}}]},{\"name\":\"getFileData\",\"returnType\":{\"packageName\":\"\",\"name\":\"Promise<string>\",\"filePath\":null,\"qualifiedName\":\"/Promise<string>\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":false,\"isOptional\":false,\"isAbstract\":true,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[{\"name\":\"fileId\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null}}]},{\"name\":\"updateFileData\",\"returnType\":{\"packageName\":\"\",\"name\":\"Promise<void>\",\"filePath\":null,\"qualifiedName\":\"/Promise<void>\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":false,\"isOptional\":false,\"isAbstract\":true,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[{\"name\":\"fileId\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null}},{\"name\":\"data\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null}}]},{\"name\":\"updateFile\",\"returnType\":{\"packageName\":\"\",\"name\":\"Promise<void>\",\"filePath\":null,\"qualifiedName\":\"/Promise<void>\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":false,\"isOptional\":false,\"isAbstract\":true,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[{\"name\":\"file\",\"type\":{\"packageName\":\"\",\"name\":\"Omit<File, keyof ScopedRecord>\",\"filePath\":null,\"qualifiedName\":\"/Omit<File, keyof ScopedRecord>\",\"typeParameters\":null,\"directParents\":null}}]},{\"name\":\"deleteFile\",\"returnType\":{\"packageName\":\"\",\"name\":\"Promise<void>\",\"filePath\":null,\"qualifiedName\":\"/Promise<void>\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":false,\"isOptional\":false,\"isAbstract\":true,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[{\"name\":\"fileId\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null}}]}],\"typeParameters\":[],\"directParents\":[{\"packageName\":\"@proteinjs/service\",\"name\":\"Service\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/service/Service\",\"properties\":[],\"methods\":[],\"typeParameters\":[],\"directParents\":[]}],\"sourceType\":3}},{\"v\":\"@proteinjs/db-file/FileStorageTableWatcher\",\"value\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"FileStorageTableWatcher\",\"filePath\":\"src/FileStorageTableWatcher.ts\",\"qualifiedName\":\"@proteinjs/db-file/FileStorageTableWatcher\",\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"properties\":[{\"name\":\"logger\",\"type\":null,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"private\"}],\"methods\":[{\"name\":\"name\",\"returnType\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":false,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[]},{\"name\":\"table\",\"returnType\":{\"packageName\":\"\",\"name\":\"Table<File>\",\"filePath\":null,\"qualifiedName\":\"/Table<File>\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":false,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[]},{\"name\":\"beforeDelete\",\"returnType\":{\"packageName\":\"\",\"name\":\"Promise<void>\",\"filePath\":null,\"qualifiedName\":\"/Promise<void>\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":true,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[{\"name\":\"recordsToDelete\",\"type\":{\"packageName\":\"\",\"name\":\"T[]\",\"filePath\":null,\"qualifiedName\":\"/T[]\",\"typeParameters\":null,\"directParents\":null}},{\"name\":\"initialQb\",\"type\":{\"packageName\":\"\",\"name\":\"QueryBuilder<T>\",\"filePath\":null,\"qualifiedName\":\"/QueryBuilder<T>\",\"typeParameters\":null,\"directParents\":null}},{\"name\":\"deleteQb\",\"type\":{\"packageName\":\"\",\"name\":\"QueryBuilder<T>\",\"filePath\":null,\"qualifiedName\":\"/QueryBuilder<T>\",\"typeParameters\":null,\"directParents\":null}}]}],\"typeParameters\":[],\"directParentInterfaces\":[{\"packageName\":\"@proteinjs/db\",\"name\":\"TableWatcher\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/db/TableWatcher\",\"properties\":[],\"methods\":[],\"typeParameters\":[\"@proteinjs/db-file/File\"],\"directParents\":[]}],\"directParentClasses\":[],\"sourceType\":2}},{\"v\":\"@proteinjs/db/TableWatcher\"},{\"v\":\"@proteinjs/db-file/getFile\",\"value\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"getFile\",\"filePath\":\"src/routes/getFile.ts\",\"qualifiedName\":\"@proteinjs/db-file/getFile\",\"type\":{\"packageName\":\"@proteinjs/server-api\",\"name\":\"Route\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/server-api/Route\",\"typeParameters\":[],\"directParents\":[{\"packageName\":\"@proteinjs/server-api\",\"name\":\"Route\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/server-api/Route\",\"typeParameters\":[],\"directParents\":null}]},\"isExported\":true,\"isConst\":true,\"sourceType\":0}},{\"v\":\"@proteinjs/server-api/Route\"},{\"v\":\"@proteinjs/db-file/FileData\",\"value\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"FileData\",\"filePath\":\"src/tables/FileDataTable.ts\",\"qualifiedName\":\"@proteinjs/db-file/FileData\",\"properties\":[{\"name\":\"file\",\"type\":{\"packageName\":\"\",\"name\":\"Reference<File>\",\"filePath\":null,\"qualifiedName\":\"/Reference<File>\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"order\",\"type\":{\"packageName\":\"\",\"name\":\"number\",\"filePath\":null,\"qualifiedName\":\"/number\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"data\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"}],\"methods\":[],\"typeParameters\":[],\"directParents\":[{\"packageName\":\"@proteinjs/user\",\"name\":\"ScopedRecord\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/user/ScopedRecord\",\"properties\":[],\"methods\":[],\"typeParameters\":[],\"directParents\":[]}],\"sourceType\":3}},{\"v\":\"@proteinjs/user/ScopedRecord\"},{\"v\":\"@proteinjs/db-file/FileDataTable\",\"value\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"FileDataTable\",\"filePath\":\"src/tables/FileDataTable.ts\",\"qualifiedName\":\"@proteinjs/db-file/FileDataTable\",\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"properties\":[{\"name\":\"name\",\"type\":null,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"auth\",\"type\":{\"packageName\":\"\",\"name\":\"Table<FileData>['auth']\",\"filePath\":null,\"qualifiedName\":\"/Table<FileData>['auth']\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"columns\",\"type\":null,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"}],\"methods\":[],\"typeParameters\":[],\"directParentInterfaces\":[],\"directParentClasses\":[{\"packageName\":\"@proteinjs/db\",\"name\":\"Table\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/db/Table\",\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"properties\":[],\"methods\":[],\"typeParameters\":[\"@proteinjs/db-file/FileData\"],\"directParentInterfaces\":[],\"directParentClasses\":[]}],\"sourceType\":2}},{\"v\":\"@proteinjs/db/Table\"},{\"v\":\"@proteinjs/db-file/File\",\"value\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"File\",\"filePath\":\"src/tables/FileTable.ts\",\"qualifiedName\":\"@proteinjs/db-file/File\",\"properties\":[{\"name\":\"name\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"type\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"size\",\"type\":{\"packageName\":\"\",\"name\":\"number\",\"filePath\":null,\"qualifiedName\":\"/number\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"preview\",\"type\":{\"packageName\":\"\",\"name\":\"Reference<File>\",\"filePath\":null,\"qualifiedName\":\"/Reference<File>\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":true,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"width\",\"type\":{\"packageName\":\"\",\"name\":\"number\",\"filePath\":null,\"qualifiedName\":\"/number\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":true,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"height\",\"type\":{\"packageName\":\"\",\"name\":\"number\",\"filePath\":null,\"qualifiedName\":\"/number\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":true,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"durationMs\",\"type\":{\"packageName\":\"\",\"name\":\"number\",\"filePath\":null,\"qualifiedName\":\"/number\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":true,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"sourceUrl\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":true,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"sourcePageUrl\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":true,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"retrievedAt\",\"type\":{\"packageName\":\"\",\"name\":\"Date\",\"filePath\":null,\"qualifiedName\":\"/Date\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":true,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"license\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":true,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"licenseUrl\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":true,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"attribution\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":true,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"contentHash\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":true,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"}],\"methods\":[],\"typeParameters\":[],\"directParents\":[{\"packageName\":\"@proteinjs/user\",\"name\":\"ScopedRecord\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/user/ScopedRecord\",\"properties\":[],\"methods\":[],\"typeParameters\":[],\"directParents\":[]}],\"sourceType\":3}},{\"v\":\"@proteinjs/db-file/FileTable\",\"value\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"FileTable\",\"filePath\":\"src/tables/FileTable.ts\",\"qualifiedName\":\"@proteinjs/db-file/FileTable\",\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"properties\":[{\"name\":\"name\",\"type\":null,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"auth\",\"type\":{\"packageName\":\"\",\"name\":\"Table<File>['auth']\",\"filePath\":null,\"qualifiedName\":\"/Table<File>['auth']\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"columns\",\"type\":null,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"indexes\",\"type\":null,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"}],\"methods\":[],\"typeParameters\":[],\"directParentInterfaces\":[],\"directParentClasses\":[{\"packageName\":\"@proteinjs/db\",\"name\":\"Table\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/db/Table\",\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"properties\":[],\"methods\":[],\"typeParameters\":[\"@proteinjs/db-file/File\"],\"directParentInterfaces\":[],\"directParentClasses\":[]}],\"sourceType\":2}},{\"v\":\"@proteinjs/service/Service\"}],\"edges\":[{\"v\":\"@proteinjs/db-file/FileReachabilityResolver\",\"w\":\"@proteinjs/reflection/Loadable\",\"value\":\"extends interface\"},{\"v\":\"@proteinjs/db-file/DefaultFileStorageDriverFactory\",\"w\":\"@proteinjs/reflection/Loadable\",\"value\":\"extends interface\"},{\"v\":\"@proteinjs/db-file/FileStorage\",\"w\":\"@proteinjs/db-file/FileStorageService\",\"value\":\"implements interface\"},{\"v\":\"@proteinjs/db-file/FileStorageTableWatcher\",\"w\":\"@proteinjs/db/TableWatcher\",\"value\":\"implements interface\"},{\"v\":\"@proteinjs/db-file/getFile\",\"w\":\"@proteinjs/server-api/Route\",\"value\":\"has type\"},{\"v\":\"@proteinjs/db-file/FileData\",\"w\":\"@proteinjs/user/ScopedRecord\",\"value\":\"extends interface\"},{\"v\":\"@proteinjs/db-file/FileDataTable\",\"w\":\"@proteinjs/db/Table\",\"value\":\"extends class\"},{\"v\":\"@proteinjs/db-file/File\",\"w\":\"@proteinjs/user/ScopedRecord\",\"value\":\"extends interface\"},{\"v\":\"@proteinjs/db-file/FileTable\",\"w\":\"@proteinjs/db/Table\",\"value\":\"extends class\"},{\"v\":\"@proteinjs/db-file/FileStorageService\",\"w\":\"@proteinjs/service/Service\",\"value\":\"extends interface\"}]}";
|
|
24
|
+
var sourceGraph = "{\"options\":{\"directed\":true,\"multigraph\":false,\"compound\":false},\"nodes\":[{\"v\":\"@proteinjs/db-file/FileCopyForOthers\",\"value\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"FileCopyForOthers\",\"filePath\":\"src/FileCopyForOthers.ts\",\"qualifiedName\":\"@proteinjs/db-file/FileCopyForOthers\",\"properties\":[],\"methods\":[{\"name\":\"appliesTo\",\"returnType\":{\"packageName\":\"\",\"name\":\"boolean\",\"filePath\":null,\"qualifiedName\":\"/boolean\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":false,\"isOptional\":false,\"isAbstract\":true,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[{\"name\":\"file\",\"type\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"File\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/db-file/File\",\"typeParameters\":null,\"directParents\":null}}]},{\"name\":\"make\",\"returnType\":{\"packageName\":\"\",\"name\":\"Promise<Buffer>\",\"filePath\":null,\"qualifiedName\":\"/Promise<Buffer>\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":false,\"isOptional\":false,\"isAbstract\":true,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[{\"name\":\"file\",\"type\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"File\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/db-file/File\",\"typeParameters\":null,\"directParents\":null}},{\"name\":\"bytes\",\"type\":{\"packageName\":\"\",\"name\":\"Buffer\",\"filePath\":null,\"qualifiedName\":\"/Buffer\",\"typeParameters\":null,\"directParents\":null}}]}],\"typeParameters\":[],\"directParents\":[{\"packageName\":\"@proteinjs/reflection\",\"name\":\"Loadable\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/reflection/Loadable\",\"properties\":[],\"methods\":[],\"typeParameters\":[],\"directParents\":[]}],\"sourceType\":3}},{\"v\":\"@proteinjs/reflection/Loadable\"},{\"v\":\"/Error\"},{\"v\":\"@proteinjs/db-file/FileReachabilityResolver\",\"value\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"FileReachabilityResolver\",\"filePath\":\"src/FileReachabilityResolver.ts\",\"qualifiedName\":\"@proteinjs/db-file/FileReachabilityResolver\",\"properties\":[],\"methods\":[{\"name\":\"canReadViaReference\",\"returnType\":{\"packageName\":\"\",\"name\":\"Promise<boolean>\",\"filePath\":null,\"qualifiedName\":\"/Promise<boolean>\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":false,\"isOptional\":false,\"isAbstract\":true,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[{\"name\":\"fileId\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null}}]}],\"typeParameters\":[],\"directParents\":[{\"packageName\":\"@proteinjs/reflection\",\"name\":\"Loadable\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/reflection/Loadable\",\"properties\":[],\"methods\":[],\"typeParameters\":[],\"directParents\":[]}],\"sourceType\":3}},{\"v\":\"@proteinjs/db-file/DefaultFileStorageDriverFactory\",\"value\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"DefaultFileStorageDriverFactory\",\"filePath\":\"src/FileStorage.ts\",\"qualifiedName\":\"@proteinjs/db-file/DefaultFileStorageDriverFactory\",\"properties\":[],\"methods\":[{\"name\":\"getDriver\",\"returnType\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"FileStorageDriver\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/db-file/FileStorageDriver\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":false,\"isOptional\":false,\"isAbstract\":true,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[]}],\"typeParameters\":[],\"directParents\":[{\"packageName\":\"@proteinjs/reflection\",\"name\":\"Loadable\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/reflection/Loadable\",\"properties\":[],\"methods\":[],\"typeParameters\":[],\"directParents\":[]}],\"sourceType\":3}},{\"v\":\"@proteinjs/db-file/FileStorage\",\"value\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"FileStorage\",\"filePath\":\"src/FileStorage.ts\",\"qualifiedName\":\"@proteinjs/db-file/FileStorage\",\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"properties\":[{\"name\":\"driver\",\"type\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"FileStorageDriver\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/db-file/FileStorageDriver\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":false,\"isAbstract\":false,\"isStatic\":true,\"visibility\":\"private\"},{\"name\":\"derivations\",\"type\":null,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":true,\"visibility\":\"private\"},{\"name\":\"serviceMetadata\",\"type\":null,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"logger\",\"type\":null,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"private\"}],\"methods\":[{\"name\":\"getDriver\",\"returnType\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"FileStorageDriver\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/db-file/FileStorageDriver\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":false,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":true,\"visibility\":\"public\",\"parameters\":[]},{\"name\":\"createFile\",\"returnType\":{\"packageName\":\"\",\"name\":\"Promise<File>\",\"filePath\":null,\"qualifiedName\":\"/Promise<File>\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":true,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[{\"name\":\"fileMetaData\",\"type\":{\"packageName\":\"\",\"name\":\"Omit<File, keyof ScopedRecord>\",\"filePath\":null,\"qualifiedName\":\"/Omit<File, keyof ScopedRecord>\",\"typeParameters\":null,\"directParents\":null}},{\"name\":\"fileData\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null}}]},{\"name\":\"getFile\",\"returnType\":{\"packageName\":\"\",\"name\":\"Promise<File>\",\"filePath\":null,\"qualifiedName\":\"/Promise<File>\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":true,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[{\"name\":\"fileId\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null}}]},{\"name\":\"getVariant\",\"returnType\":{\"packageName\":\"\",\"name\":\"Promise<File | undefined>\",\"filePath\":null,\"qualifiedName\":\"/Promise<File | undefined>\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":true,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[{\"name\":\"fileId\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null}},{\"name\":\"kind\",\"type\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"FileVariantKind\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/db-file/FileVariantKind\",\"typeParameters\":null,\"directParents\":null}}]},{\"name\":\"deriveVariants\",\"returnType\":{\"packageName\":\"\",\"name\":\"Promise<{ file: File; variants: Partial<Record<FileVariantKind, File>> }>\",\"filePath\":null,\"qualifiedName\":\"/Promise<{ file: File; variants: Partial<Record<FileVariantKind, File>> }>\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":true,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[{\"name\":\"file\",\"type\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"File\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/db-file/File\",\"typeParameters\":null,\"directParents\":null}},{\"name\":\"bytes\",\"type\":{\"packageName\":\"\",\"name\":\"Buffer\",\"filePath\":null,\"qualifiedName\":\"/Buffer\",\"typeParameters\":null,\"directParents\":null}}]},{\"name\":\"getFileData\",\"returnType\":{\"packageName\":\"\",\"name\":\"Promise<string>\",\"filePath\":null,\"qualifiedName\":\"/Promise<string>\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":true,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[{\"name\":\"fileId\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null}}]},{\"name\":\"getAuthorizedFileData\",\"returnType\":{\"packageName\":\"\",\"name\":\"Promise<string>\",\"filePath\":null,\"qualifiedName\":\"/Promise<string>\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":true,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[{\"name\":\"file\",\"type\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"File\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/db-file/File\",\"typeParameters\":null,\"directParents\":null}}]},{\"name\":\"getSignedUrl\",\"returnType\":{\"packageName\":\"\",\"name\":\"Promise<string | undefined>\",\"filePath\":null,\"qualifiedName\":\"/Promise<string | undefined>\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":true,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[{\"name\":\"fileId\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null}},{\"name\":\"options\",\"type\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"{ ttlMs?: number }\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/db-file/{ ttlMs?: number }\",\"typeParameters\":null,\"directParents\":null}}]},{\"name\":\"updateFileData\",\"returnType\":{\"packageName\":\"\",\"name\":\"Promise<void>\",\"filePath\":null,\"qualifiedName\":\"/Promise<void>\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":true,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[{\"name\":\"fileId\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null}},{\"name\":\"data\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null}}]},{\"name\":\"updateFile\",\"returnType\":{\"packageName\":\"\",\"name\":\"Promise<void>\",\"filePath\":null,\"qualifiedName\":\"/Promise<void>\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":true,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[{\"name\":\"file\",\"type\":{\"packageName\":\"\",\"name\":\"Omit<File, keyof ScopedRecord>\",\"filePath\":null,\"qualifiedName\":\"/Omit<File, keyof ScopedRecord>\",\"typeParameters\":null,\"directParents\":null}}]},{\"name\":\"deleteFile\",\"returnType\":{\"packageName\":\"\",\"name\":\"Promise<void>\",\"filePath\":null,\"qualifiedName\":\"/Promise<void>\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":true,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[{\"name\":\"fileId\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null}}]},{\"name\":\"servedFileId\",\"returnType\":{\"packageName\":\"\",\"name\":\"Promise<string>\",\"filePath\":null,\"qualifiedName\":\"/Promise<string>\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":true,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"private\",\"parameters\":[{\"name\":\"file\",\"type\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"File\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/db-file/File\",\"typeParameters\":null,\"directParents\":null}}]},{\"name\":\"ownedByCaller\",\"returnType\":{\"packageName\":\"\",\"name\":\"boolean\",\"filePath\":null,\"qualifiedName\":\"/boolean\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":false,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"private\",\"parameters\":[{\"name\":\"file\",\"type\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"File\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/db-file/File\",\"typeParameters\":null,\"directParents\":null}}]},{\"name\":\"makeCopyForOthers\",\"returnType\":{\"packageName\":\"\",\"name\":\"Promise<string>\",\"filePath\":null,\"qualifiedName\":\"/Promise<string>\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":true,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"private\",\"parameters\":[{\"name\":\"file\",\"type\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"File\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/db-file/File\",\"typeParameters\":null,\"directParents\":null}}]},{\"name\":\"deriveOnce\",\"returnType\":{\"packageName\":\"\",\"name\":\"Promise<string | undefined>\",\"filePath\":null,\"qualifiedName\":\"/Promise<string | undefined>\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":false,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"private\",\"parameters\":[{\"name\":\"file\",\"type\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"File\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/db-file/File\",\"typeParameters\":null,\"directParents\":null}},{\"name\":\"kind\",\"type\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"FileVariantKind\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/db-file/FileVariantKind\",\"typeParameters\":null,\"directParents\":null}}]},{\"name\":\"makeVariant\",\"returnType\":{\"packageName\":\"\",\"name\":\"Promise<string>\",\"filePath\":null,\"qualifiedName\":\"/Promise<string>\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":true,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"private\",\"parameters\":[{\"name\":\"file\",\"type\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"File\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/db-file/File\",\"typeParameters\":null,\"directParents\":null}},{\"name\":\"kind\",\"type\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"FileVariantKind\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/db-file/FileVariantKind\",\"typeParameters\":null,\"directParents\":null}},{\"name\":\"bytes\",\"type\":{\"packageName\":\"\",\"name\":\"Buffer\",\"filePath\":null,\"qualifiedName\":\"/Buffer\",\"typeParameters\":null,\"directParents\":null}}]},{\"name\":\"dropDerivedFiles\",\"returnType\":{\"packageName\":\"\",\"name\":\"Promise<void>\",\"filePath\":null,\"qualifiedName\":\"/Promise<void>\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":true,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"private\",\"parameters\":[{\"name\":\"file\",\"type\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"File\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/db-file/File\",\"typeParameters\":null,\"directParents\":null}}]},{\"name\":\"notFound\",\"returnType\":{\"packageName\":\"@proteinjs/service\",\"name\":\"ServiceRefusal\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/service/ServiceRefusal\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":false,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":true,\"visibility\":\"private\",\"parameters\":[]}],\"typeParameters\":[],\"directParentInterfaces\":[{\"packageName\":\"@proteinjs/db-file\",\"name\":\"FileStorageService\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/db-file/FileStorageService\",\"properties\":[],\"methods\":[],\"typeParameters\":[],\"directParents\":[]}],\"directParentClasses\":[],\"sourceType\":2}},{\"v\":\"@proteinjs/db-file/FileStorageService\",\"value\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"FileStorageService\",\"filePath\":\"src/services/FileStorageService.ts\",\"qualifiedName\":\"@proteinjs/db-file/FileStorageService\",\"properties\":[],\"methods\":[{\"name\":\"createFile\",\"returnType\":{\"packageName\":\"\",\"name\":\"Promise<File>\",\"filePath\":null,\"qualifiedName\":\"/Promise<File>\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":false,\"isOptional\":false,\"isAbstract\":true,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[{\"name\":\"fileMetaData\",\"type\":{\"packageName\":\"\",\"name\":\"Omit<File, keyof ScopedRecord>\",\"filePath\":null,\"qualifiedName\":\"/Omit<File, keyof ScopedRecord>\",\"typeParameters\":null,\"directParents\":null}},{\"name\":\"fileData\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null}}]},{\"name\":\"getFile\",\"returnType\":{\"packageName\":\"\",\"name\":\"Promise<File>\",\"filePath\":null,\"qualifiedName\":\"/Promise<File>\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":false,\"isOptional\":false,\"isAbstract\":true,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[{\"name\":\"fileId\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null}}]},{\"name\":\"getFileData\",\"returnType\":{\"packageName\":\"\",\"name\":\"Promise<string>\",\"filePath\":null,\"qualifiedName\":\"/Promise<string>\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":false,\"isOptional\":false,\"isAbstract\":true,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[{\"name\":\"fileId\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null}}]},{\"name\":\"updateFileData\",\"returnType\":{\"packageName\":\"\",\"name\":\"Promise<void>\",\"filePath\":null,\"qualifiedName\":\"/Promise<void>\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":false,\"isOptional\":false,\"isAbstract\":true,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[{\"name\":\"fileId\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null}},{\"name\":\"data\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null}}]},{\"name\":\"updateFile\",\"returnType\":{\"packageName\":\"\",\"name\":\"Promise<void>\",\"filePath\":null,\"qualifiedName\":\"/Promise<void>\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":false,\"isOptional\":false,\"isAbstract\":true,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[{\"name\":\"file\",\"type\":{\"packageName\":\"\",\"name\":\"Omit<File, keyof ScopedRecord>\",\"filePath\":null,\"qualifiedName\":\"/Omit<File, keyof ScopedRecord>\",\"typeParameters\":null,\"directParents\":null}}]},{\"name\":\"deleteFile\",\"returnType\":{\"packageName\":\"\",\"name\":\"Promise<void>\",\"filePath\":null,\"qualifiedName\":\"/Promise<void>\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":false,\"isOptional\":false,\"isAbstract\":true,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[{\"name\":\"fileId\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null}}]}],\"typeParameters\":[],\"directParents\":[{\"packageName\":\"@proteinjs/service\",\"name\":\"Service\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/service/Service\",\"properties\":[],\"methods\":[],\"typeParameters\":[],\"directParents\":[]}],\"sourceType\":3}},{\"v\":\"/'not-found' | 'precondition-failed' | 'forbidden' | 'unavailable' | 'unknown'\"},{\"v\":\"@proteinjs/db-file/FileStorageTableWatcher\",\"value\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"FileStorageTableWatcher\",\"filePath\":\"src/FileStorageTableWatcher.ts\",\"qualifiedName\":\"@proteinjs/db-file/FileStorageTableWatcher\",\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"properties\":[{\"name\":\"logger\",\"type\":null,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"private\"}],\"methods\":[{\"name\":\"name\",\"returnType\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":false,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[]},{\"name\":\"table\",\"returnType\":{\"packageName\":\"\",\"name\":\"Table<File>\",\"filePath\":null,\"qualifiedName\":\"/Table<File>\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":false,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[]},{\"name\":\"beforeDelete\",\"returnType\":{\"packageName\":\"\",\"name\":\"Promise<void>\",\"filePath\":null,\"qualifiedName\":\"/Promise<void>\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":true,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[{\"name\":\"recordsToDelete\",\"type\":{\"packageName\":\"\",\"name\":\"T[]\",\"filePath\":null,\"qualifiedName\":\"/T[]\",\"typeParameters\":null,\"directParents\":null}},{\"name\":\"initialQb\",\"type\":{\"packageName\":\"\",\"name\":\"QueryBuilder<T>\",\"filePath\":null,\"qualifiedName\":\"/QueryBuilder<T>\",\"typeParameters\":null,\"directParents\":null}},{\"name\":\"deleteQb\",\"type\":{\"packageName\":\"\",\"name\":\"QueryBuilder<T>\",\"filePath\":null,\"qualifiedName\":\"/QueryBuilder<T>\",\"typeParameters\":null,\"directParents\":null}}]}],\"typeParameters\":[],\"directParentInterfaces\":[{\"packageName\":\"@proteinjs/db\",\"name\":\"TableWatcher\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/db/TableWatcher\",\"properties\":[],\"methods\":[],\"typeParameters\":[\"@proteinjs/db-file/File\"],\"directParents\":[]}],\"directParentClasses\":[],\"sourceType\":2}},{\"v\":\"@proteinjs/db/TableWatcher\"},{\"v\":\"/'preview' | 'stage'\"},{\"v\":\"/readonly FileVariantKind[]\"},{\"v\":\"@proteinjs/db-file/FileVariantMaker\",\"value\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"FileVariantMaker\",\"filePath\":\"src/FileVariantMaker.ts\",\"qualifiedName\":\"@proteinjs/db-file/FileVariantMaker\",\"properties\":[],\"methods\":[{\"name\":\"appliesTo\",\"returnType\":{\"packageName\":\"\",\"name\":\"boolean\",\"filePath\":null,\"qualifiedName\":\"/boolean\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":false,\"isOptional\":false,\"isAbstract\":true,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[{\"name\":\"file\",\"type\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"File\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/db-file/File\",\"typeParameters\":null,\"directParents\":null}},{\"name\":\"kind\",\"type\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"FileVariantKind\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/db-file/FileVariantKind\",\"typeParameters\":null,\"directParents\":null}}]},{\"name\":\"make\",\"returnType\":{\"packageName\":\"\",\"name\":\"Promise<FileVariant>\",\"filePath\":null,\"qualifiedName\":\"/Promise<FileVariant>\",\"typeParameters\":null,\"directParents\":null},\"isAsync\":false,\"isOptional\":false,\"isAbstract\":true,\"isStatic\":false,\"visibility\":\"public\",\"parameters\":[{\"name\":\"file\",\"type\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"File\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/db-file/File\",\"typeParameters\":null,\"directParents\":null}},{\"name\":\"bytes\",\"type\":{\"packageName\":\"\",\"name\":\"Buffer\",\"filePath\":null,\"qualifiedName\":\"/Buffer\",\"typeParameters\":null,\"directParents\":null}},{\"name\":\"kind\",\"type\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"FileVariantKind\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/db-file/FileVariantKind\",\"typeParameters\":null,\"directParents\":null}}]}],\"typeParameters\":[],\"directParents\":[{\"packageName\":\"@proteinjs/reflection\",\"name\":\"Loadable\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/reflection/Loadable\",\"properties\":[],\"methods\":[],\"typeParameters\":[],\"directParents\":[]}],\"sourceType\":3}},{\"v\":\"@proteinjs/db-file/getFile\",\"value\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"getFile\",\"filePath\":\"src/routes/getFile.ts\",\"qualifiedName\":\"@proteinjs/db-file/getFile\",\"type\":{\"packageName\":\"@proteinjs/server-api\",\"name\":\"Route\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/server-api/Route\",\"typeParameters\":[],\"directParents\":[{\"packageName\":\"@proteinjs/server-api\",\"name\":\"Route\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/server-api/Route\",\"typeParameters\":[],\"directParents\":null}]},\"isExported\":true,\"isConst\":true,\"sourceType\":0}},{\"v\":\"@proteinjs/server-api/Route\"},{\"v\":\"@proteinjs/db-file/getFileVariant\",\"value\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"getFileVariant\",\"filePath\":\"src/routes/getFileVariant.ts\",\"qualifiedName\":\"@proteinjs/db-file/getFileVariant\",\"type\":{\"packageName\":\"@proteinjs/server-api\",\"name\":\"Route\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/server-api/Route\",\"typeParameters\":[],\"directParents\":[{\"packageName\":\"@proteinjs/server-api\",\"name\":\"Route\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/server-api/Route\",\"typeParameters\":[],\"directParents\":null}]},\"isExported\":true,\"isConst\":true,\"sourceType\":0}},{\"v\":\"@proteinjs/db-file/FileData\",\"value\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"FileData\",\"filePath\":\"src/tables/FileDataTable.ts\",\"qualifiedName\":\"@proteinjs/db-file/FileData\",\"properties\":[{\"name\":\"file\",\"type\":{\"packageName\":\"\",\"name\":\"Reference<File>\",\"filePath\":null,\"qualifiedName\":\"/Reference<File>\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"order\",\"type\":{\"packageName\":\"\",\"name\":\"number\",\"filePath\":null,\"qualifiedName\":\"/number\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"data\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"}],\"methods\":[],\"typeParameters\":[],\"directParents\":[{\"packageName\":\"@proteinjs/user\",\"name\":\"ScopedRecord\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/user/ScopedRecord\",\"properties\":[],\"methods\":[],\"typeParameters\":[],\"directParents\":[]}],\"sourceType\":3}},{\"v\":\"@proteinjs/user/ScopedRecord\"},{\"v\":\"@proteinjs/db-file/FileDataTable\",\"value\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"FileDataTable\",\"filePath\":\"src/tables/FileDataTable.ts\",\"qualifiedName\":\"@proteinjs/db-file/FileDataTable\",\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"properties\":[{\"name\":\"name\",\"type\":null,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"auth\",\"type\":{\"packageName\":\"\",\"name\":\"Table<FileData>['auth']\",\"filePath\":null,\"qualifiedName\":\"/Table<FileData>['auth']\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"columns\",\"type\":null,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"}],\"methods\":[],\"typeParameters\":[],\"directParentInterfaces\":[],\"directParentClasses\":[{\"packageName\":\"@proteinjs/db\",\"name\":\"Table\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/db/Table\",\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"properties\":[],\"methods\":[],\"typeParameters\":[\"@proteinjs/db-file/FileData\"],\"directParentInterfaces\":[],\"directParentClasses\":[]}],\"sourceType\":2}},{\"v\":\"@proteinjs/db/Table\"},{\"v\":\"@proteinjs/db-file/File\",\"value\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"File\",\"filePath\":\"src/tables/FileTable.ts\",\"qualifiedName\":\"@proteinjs/db-file/File\",\"properties\":[{\"name\":\"name\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"type\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"size\",\"type\":{\"packageName\":\"\",\"name\":\"number\",\"filePath\":null,\"qualifiedName\":\"/number\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"preview\",\"type\":{\"packageName\":\"\",\"name\":\"Reference<File> | null\",\"filePath\":null,\"qualifiedName\":\"/Reference<File> | null\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":true,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"stage\",\"type\":{\"packageName\":\"\",\"name\":\"Reference<File> | null\",\"filePath\":null,\"qualifiedName\":\"/Reference<File> | null\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":true,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"variantOf\",\"type\":{\"packageName\":\"\",\"name\":\"Reference<File> | null\",\"filePath\":null,\"qualifiedName\":\"/Reference<File> | null\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":true,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"copyForOthers\",\"type\":{\"packageName\":\"\",\"name\":\"Reference<File> | null\",\"filePath\":null,\"qualifiedName\":\"/Reference<File> | null\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":true,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"width\",\"type\":{\"packageName\":\"\",\"name\":\"number\",\"filePath\":null,\"qualifiedName\":\"/number\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":true,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"height\",\"type\":{\"packageName\":\"\",\"name\":\"number\",\"filePath\":null,\"qualifiedName\":\"/number\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":true,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"durationMs\",\"type\":{\"packageName\":\"\",\"name\":\"number\",\"filePath\":null,\"qualifiedName\":\"/number\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":true,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"sourceUrl\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":true,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"sourcePageUrl\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":true,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"retrievedAt\",\"type\":{\"packageName\":\"\",\"name\":\"Date\",\"filePath\":null,\"qualifiedName\":\"/Date\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":true,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"license\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":true,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"licenseUrl\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":true,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"attribution\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":true,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"contentHash\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":true,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"origin\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":true,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"originModel\",\"type\":{\"packageName\":\"\",\"name\":\"string\",\"filePath\":null,\"qualifiedName\":\"/string\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":true,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"}],\"methods\":[],\"typeParameters\":[],\"directParents\":[{\"packageName\":\"@proteinjs/user\",\"name\":\"ScopedRecord\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/user/ScopedRecord\",\"properties\":[],\"methods\":[],\"typeParameters\":[],\"directParents\":[]}],\"sourceType\":3}},{\"v\":\"@proteinjs/db-file/FileTable\",\"value\":{\"packageName\":\"@proteinjs/db-file\",\"name\":\"FileTable\",\"filePath\":\"src/tables/FileTable.ts\",\"qualifiedName\":\"@proteinjs/db-file/FileTable\",\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"properties\":[{\"name\":\"name\",\"type\":null,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"auth\",\"type\":{\"packageName\":\"\",\"name\":\"Table<File>['auth']\",\"filePath\":null,\"qualifiedName\":\"/Table<File>['auth']\",\"typeParameters\":null,\"directParents\":null},\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"columns\",\"type\":null,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"},{\"name\":\"indexes\",\"type\":null,\"isOptional\":false,\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\"}],\"methods\":[],\"typeParameters\":[],\"directParentInterfaces\":[],\"directParentClasses\":[{\"packageName\":\"@proteinjs/db\",\"name\":\"Table\",\"filePath\":null,\"qualifiedName\":\"@proteinjs/db/Table\",\"isAbstract\":false,\"isStatic\":false,\"visibility\":\"public\",\"properties\":[],\"methods\":[],\"typeParameters\":[\"@proteinjs/db-file/File\"],\"directParentInterfaces\":[],\"directParentClasses\":[]}],\"sourceType\":2}},{\"v\":\"@proteinjs/service/Service\"}],\"edges\":[{\"v\":\"@proteinjs/db-file/FileCopyForOthers\",\"w\":\"@proteinjs/reflection/Loadable\",\"value\":\"extends interface\"},{\"v\":\"@proteinjs/db-file/FileReachabilityResolver\",\"w\":\"@proteinjs/reflection/Loadable\",\"value\":\"extends interface\"},{\"v\":\"@proteinjs/db-file/DefaultFileStorageDriverFactory\",\"w\":\"@proteinjs/reflection/Loadable\",\"value\":\"extends interface\"},{\"v\":\"@proteinjs/db-file/FileStorage\",\"w\":\"@proteinjs/db-file/FileStorageService\",\"value\":\"implements interface\"},{\"v\":\"@proteinjs/db-file/FileStorageTableWatcher\",\"w\":\"@proteinjs/db/TableWatcher\",\"value\":\"implements interface\"},{\"v\":\"@proteinjs/db-file/FileVariantMaker\",\"w\":\"@proteinjs/reflection/Loadable\",\"value\":\"extends interface\"},{\"v\":\"@proteinjs/db-file/getFile\",\"w\":\"@proteinjs/server-api/Route\",\"value\":\"has type\"},{\"v\":\"@proteinjs/db-file/getFileVariant\",\"w\":\"@proteinjs/server-api/Route\",\"value\":\"has type\"},{\"v\":\"@proteinjs/db-file/FileData\",\"w\":\"@proteinjs/user/ScopedRecord\",\"value\":\"extends interface\"},{\"v\":\"@proteinjs/db-file/FileDataTable\",\"w\":\"@proteinjs/db/Table\",\"value\":\"extends class\"},{\"v\":\"@proteinjs/db-file/File\",\"w\":\"@proteinjs/user/ScopedRecord\",\"value\":\"extends interface\"},{\"v\":\"@proteinjs/db-file/FileTable\",\"w\":\"@proteinjs/db/Table\",\"value\":\"extends class\"},{\"v\":\"@proteinjs/db-file/FileStorageService\",\"w\":\"@proteinjs/service/Service\",\"value\":\"extends interface\"}]}";
|
|
25
25
|
/** Generate Source Links */
|
|
26
26
|
var FileStorage_1 = require("../src/FileStorage");
|
|
27
27
|
var FileStorageTableWatcher_1 = require("../src/FileStorageTableWatcher");
|
|
28
28
|
var getFile_1 = require("../src/routes/getFile");
|
|
29
|
+
var getFileVariant_1 = require("../src/routes/getFileVariant");
|
|
29
30
|
var FileDataTable_1 = require("../src/tables/FileDataTable");
|
|
30
31
|
var FileTable_1 = require("../src/tables/FileTable");
|
|
31
32
|
var sourceLinks = {
|
|
32
33
|
'@proteinjs/db-file/FileStorage': FileStorage_1.FileStorage,
|
|
33
34
|
'@proteinjs/db-file/FileStorageTableWatcher': FileStorageTableWatcher_1.FileStorageTableWatcher,
|
|
34
35
|
'@proteinjs/db-file/getFile': getFile_1.getFile,
|
|
36
|
+
'@proteinjs/db-file/getFileVariant': getFileVariant_1.getFileVariant,
|
|
35
37
|
'@proteinjs/db-file/FileDataTable': FileDataTable_1.FileDataTable,
|
|
36
38
|
'@proteinjs/db-file/FileTable': FileTable_1.FileTable,
|
|
37
39
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../generated/index.ts"],"names":[],"mappings":";AAAA,oCAAoC;;;;;;;;;;;;;;;;AAEpC,yBAAuB;AACvB,6BAA2B;AAC3B,iCAA+B;AAC/B,8BAA4B;AAC5B,2BAAyB;AAGzB,4BAA4B;AAE5B,IAAM,WAAW,GAAG,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../generated/index.ts"],"names":[],"mappings":";AAAA,oCAAoC;;;;;;;;;;;;;;;;AAEpC,yBAAuB;AACvB,6BAA2B;AAC3B,iCAA+B;AAC/B,8BAA4B;AAC5B,2BAAyB;AAGzB,4BAA4B;AAE5B,IAAM,WAAW,GAAG,qznCAAqznC,CAAC;AAG10nC,4BAA4B;AAE5B,kDAAiD;AACjD,0EAAyE;AACzE,iDAAgD;AAChD,+DAA8D;AAC9D,6DAA4D;AAC5D,qDAAoD;AAEpD,IAAM,WAAW,GAAG;IACnB,gCAAgC,EAAE,yBAAW;IAC7C,4CAA4C,EAAE,iDAAuB;IACrE,4BAA4B,EAAE,iBAAO;IACrC,mCAAmC,EAAE,+BAAc;IACnD,kCAAkC,EAAE,6BAAa;IACjD,8BAA8B,EAAE,qBAAS;CACzC,CAAC;AAGF,kCAAkC;AAElC,oDAAyD;AACzD,6BAAgB,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AAGjD,2CAAyB"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,8 +4,12 @@ export * from './src/tables/FileTable';
|
|
|
4
4
|
export * from './src/tables/FileDataTable';
|
|
5
5
|
export * from './src/services/FileStorageService';
|
|
6
6
|
export * from './src/routes/getFileRoute';
|
|
7
|
+
export * from './src/routes/getFileVariantRoute';
|
|
7
8
|
export * from './src/FileReachabilityResolver';
|
|
9
|
+
export * from './src/FileCopyForOthers';
|
|
10
|
+
export * from './src/FileVariantMaker';
|
|
8
11
|
export * from './src/FileStorageDriver';
|
|
12
|
+
export * from './src/FileStorageError';
|
|
9
13
|
export * from './src/DbFileStorageDriver';
|
|
10
14
|
export * from './src/FileStorageTableWatcher';
|
|
11
15
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAEA,cAAc,mBAAmB,CAAC;AAElC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAE3C,cAAc,mCAAmC,CAAC;AAElD,cAAc,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAEA,cAAc,mBAAmB,CAAC;AAElC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAE3C,cAAc,mCAAmC,CAAC;AAElD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kCAAkC,CAAC;AAEjD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,+BAA+B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -20,8 +20,12 @@ __exportStar(require("./src/tables/FileTable"), exports);
|
|
|
20
20
|
__exportStar(require("./src/tables/FileDataTable"), exports);
|
|
21
21
|
__exportStar(require("./src/services/FileStorageService"), exports);
|
|
22
22
|
__exportStar(require("./src/routes/getFileRoute"), exports);
|
|
23
|
+
__exportStar(require("./src/routes/getFileVariantRoute"), exports);
|
|
23
24
|
__exportStar(require("./src/FileReachabilityResolver"), exports);
|
|
25
|
+
__exportStar(require("./src/FileCopyForOthers"), exports);
|
|
26
|
+
__exportStar(require("./src/FileVariantMaker"), exports);
|
|
24
27
|
__exportStar(require("./src/FileStorageDriver"), exports);
|
|
28
|
+
__exportStar(require("./src/FileStorageError"), exports);
|
|
25
29
|
__exportStar(require("./src/DbFileStorageDriver"), exports);
|
|
26
30
|
__exportStar(require("./src/FileStorageTableWatcher"), exports);
|
|
27
31
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAEA,oDAAkC;AAElC,sDAAoC;AACpC,yDAAuC;AACvC,6DAA2C;AAE3C,oEAAkD;AAElD,4DAA0C;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAEA,oDAAkC;AAElC,sDAAoC;AACpC,yDAAuC;AACvC,6DAA2C;AAE3C,oEAAkD;AAElD,4DAA0C;AAC1C,mEAAiD;AAEjD,iEAA+C;AAC/C,0DAAwC;AACxC,yDAAuC;AACvC,0DAAwC;AACxC,yDAAuC;AACvC,4DAA0C;AAC1C,gEAA8C"}
|
|
@@ -10,6 +10,13 @@ export declare class DbFileStorageDriver implements FileStorageDriver {
|
|
|
10
10
|
getFileData(fileId: string): Promise<string>;
|
|
11
11
|
updateFileData(fileId: string, data: string): Promise<void>;
|
|
12
12
|
deleteFile(fileId: string): Promise<void>;
|
|
13
|
+
private insertChunks;
|
|
14
|
+
/**
|
|
15
|
+
* An EMPTY file is stored as one empty chunk, so stored-but-empty and not-stored never look
|
|
16
|
+
* alike. Files written before that rule have no chunk row at all when they are empty; the file
|
|
17
|
+
* row settles those — a row that states zero bytes is an empty file, anything else is missing.
|
|
18
|
+
*/
|
|
19
|
+
private isLegacyEmptyFile;
|
|
13
20
|
private splitIntoChunks;
|
|
14
21
|
}
|
|
15
22
|
//# sourceMappingURL=DbFileStorageDriver.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DbFileStorageDriver.d.ts","sourceRoot":"","sources":["../../src/DbFileStorageDriver.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"DbFileStorageDriver.d.ts","sourceRoot":"","sources":["../../src/DbFileStorageDriver.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,qBAAa,mBAAoB,YAAW,iBAAiB;IAC3D,OAAO,CAAC,SAAS,CAAW;IAE5B;;OAEG;gBACS,SAAS,CAAC,EAAE,MAAM;IAMxB,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvD,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAqB5C,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU3D,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAUjC,YAAY;IAY1B;;;;OAIG;YACW,iBAAiB;IAK/B,OAAO,CAAC,eAAe;CAOxB"}
|
|
@@ -40,6 +40,7 @@ exports.DbFileStorageDriver = void 0;
|
|
|
40
40
|
var user_1 = require("@proteinjs/user");
|
|
41
41
|
var db_1 = require("@proteinjs/db");
|
|
42
42
|
var tables_1 = require("./tables/tables");
|
|
43
|
+
var FileStorageError_1 = require("./FileStorageError");
|
|
43
44
|
var DbFileStorageDriver = /** @class */ (function () {
|
|
44
45
|
/**
|
|
45
46
|
* @param chunkSize the size, in bytes, to be stored in each `FileDataTable` record; default is 1mb
|
|
@@ -52,38 +53,21 @@ var DbFileStorageDriver = /** @class */ (function () {
|
|
|
52
53
|
}
|
|
53
54
|
DbFileStorageDriver.prototype.createFile = function (file, fileData) {
|
|
54
55
|
return __awaiter(this, void 0, void 0, function () {
|
|
55
|
-
var db, chunks, index, chunk;
|
|
56
56
|
return __generator(this, function (_a) {
|
|
57
57
|
switch (_a.label) {
|
|
58
|
-
case 0:
|
|
59
|
-
db = (0, user_1.getScopedDb)();
|
|
60
|
-
chunks = this.splitIntoChunks(fileData);
|
|
61
|
-
index = 0;
|
|
62
|
-
_a.label = 1;
|
|
58
|
+
case 0: return [4 /*yield*/, this.insertChunks(file.id, fileData)];
|
|
63
59
|
case 1:
|
|
64
|
-
if (!(index < chunks.length)) return [3 /*break*/, 4];
|
|
65
|
-
chunk = chunks[index];
|
|
66
|
-
return [4 /*yield*/, db.insert(tables_1.tables.FileData, {
|
|
67
|
-
file: new db_1.Reference(tables_1.tables.FileData.name, file.id),
|
|
68
|
-
order: index,
|
|
69
|
-
data: chunk,
|
|
70
|
-
})];
|
|
71
|
-
case 2:
|
|
72
60
|
_a.sent();
|
|
73
|
-
|
|
74
|
-
case 3:
|
|
75
|
-
index++;
|
|
76
|
-
return [3 /*break*/, 1];
|
|
77
|
-
case 4: return [2 /*return*/];
|
|
61
|
+
return [2 /*return*/];
|
|
78
62
|
}
|
|
79
63
|
});
|
|
80
64
|
});
|
|
81
65
|
};
|
|
82
66
|
DbFileStorageDriver.prototype.getFileData = function (fileId) {
|
|
83
67
|
return __awaiter(this, void 0, void 0, function () {
|
|
84
|
-
var db, qb, fileDataRecords;
|
|
85
|
-
return __generator(this, function (
|
|
86
|
-
switch (
|
|
68
|
+
var db, qb, fileDataRecords, _a;
|
|
69
|
+
return __generator(this, function (_b) {
|
|
70
|
+
switch (_b.label) {
|
|
87
71
|
case 0:
|
|
88
72
|
db = (0, user_1.getScopedDbAsSystem)();
|
|
89
73
|
qb = new db_1.QueryBuilderFactory()
|
|
@@ -91,7 +75,19 @@ var DbFileStorageDriver = /** @class */ (function () {
|
|
|
91
75
|
.sort([{ field: 'order', desc: false }]);
|
|
92
76
|
return [4 /*yield*/, db.query(tables_1.tables.FileData, qb)];
|
|
93
77
|
case 1:
|
|
94
|
-
fileDataRecords =
|
|
78
|
+
fileDataRecords = _b.sent();
|
|
79
|
+
_a = fileDataRecords.length === 0;
|
|
80
|
+
if (!_a) return [3 /*break*/, 3];
|
|
81
|
+
return [4 /*yield*/, this.isLegacyEmptyFile(fileId)];
|
|
82
|
+
case 2:
|
|
83
|
+
_a = !(_b.sent());
|
|
84
|
+
_b.label = 3;
|
|
85
|
+
case 3:
|
|
86
|
+
if (_a) {
|
|
87
|
+
// The driver contract's one answer for bytes that are not there — the same code the
|
|
88
|
+
// object-store drivers report for a missing object, so callers branch on one thing.
|
|
89
|
+
throw new FileStorageError_1.FileStorageError('not-found', "getFileData failed for file ".concat(fileId));
|
|
90
|
+
}
|
|
95
91
|
return [2 /*return*/, fileDataRecords.map(function (record) { return record.data; }).join('')];
|
|
96
92
|
}
|
|
97
93
|
});
|
|
@@ -99,7 +95,7 @@ var DbFileStorageDriver = /** @class */ (function () {
|
|
|
99
95
|
};
|
|
100
96
|
DbFileStorageDriver.prototype.updateFileData = function (fileId, data) {
|
|
101
97
|
return __awaiter(this, void 0, void 0, function () {
|
|
102
|
-
var db, deleteQuery
|
|
98
|
+
var db, deleteQuery;
|
|
103
99
|
return __generator(this, function (_a) {
|
|
104
100
|
switch (_a.label) {
|
|
105
101
|
case 0:
|
|
@@ -108,24 +104,10 @@ var DbFileStorageDriver = /** @class */ (function () {
|
|
|
108
104
|
return [4 /*yield*/, db.delete(tables_1.tables.FileData, deleteQuery)];
|
|
109
105
|
case 1:
|
|
110
106
|
_a.sent();
|
|
111
|
-
|
|
112
|
-
index = 0;
|
|
113
|
-
_a.label = 2;
|
|
107
|
+
return [4 /*yield*/, this.insertChunks(fileId, data)];
|
|
114
108
|
case 2:
|
|
115
|
-
if (!(index < chunks.length)) return [3 /*break*/, 5];
|
|
116
|
-
chunk = chunks[index];
|
|
117
|
-
return [4 /*yield*/, db.insert(tables_1.tables.FileData, {
|
|
118
|
-
file: new db_1.Reference(tables_1.tables.FileData.name, fileId),
|
|
119
|
-
order: index,
|
|
120
|
-
data: chunk,
|
|
121
|
-
})];
|
|
122
|
-
case 3:
|
|
123
109
|
_a.sent();
|
|
124
|
-
|
|
125
|
-
case 4:
|
|
126
|
-
index++;
|
|
127
|
-
return [3 /*break*/, 2];
|
|
128
|
-
case 5: return [2 /*return*/];
|
|
110
|
+
return [2 /*return*/];
|
|
129
111
|
}
|
|
130
112
|
});
|
|
131
113
|
});
|
|
@@ -146,12 +128,58 @@ var DbFileStorageDriver = /** @class */ (function () {
|
|
|
146
128
|
});
|
|
147
129
|
});
|
|
148
130
|
};
|
|
131
|
+
DbFileStorageDriver.prototype.insertChunks = function (fileId, data) {
|
|
132
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
133
|
+
var db, chunks, index;
|
|
134
|
+
return __generator(this, function (_a) {
|
|
135
|
+
switch (_a.label) {
|
|
136
|
+
case 0:
|
|
137
|
+
db = (0, user_1.getScopedDb)();
|
|
138
|
+
chunks = this.splitIntoChunks(data);
|
|
139
|
+
index = 0;
|
|
140
|
+
_a.label = 1;
|
|
141
|
+
case 1:
|
|
142
|
+
if (!(index < chunks.length)) return [3 /*break*/, 4];
|
|
143
|
+
return [4 /*yield*/, db.insert(tables_1.tables.FileData, {
|
|
144
|
+
file: new db_1.Reference(tables_1.tables.FileData.name, fileId),
|
|
145
|
+
order: index,
|
|
146
|
+
data: chunks[index],
|
|
147
|
+
})];
|
|
148
|
+
case 2:
|
|
149
|
+
_a.sent();
|
|
150
|
+
_a.label = 3;
|
|
151
|
+
case 3:
|
|
152
|
+
index++;
|
|
153
|
+
return [3 /*break*/, 1];
|
|
154
|
+
case 4: return [2 /*return*/];
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
};
|
|
159
|
+
/**
|
|
160
|
+
* An EMPTY file is stored as one empty chunk, so stored-but-empty and not-stored never look
|
|
161
|
+
* alike. Files written before that rule have no chunk row at all when they are empty; the file
|
|
162
|
+
* row settles those — a row that states zero bytes is an empty file, anything else is missing.
|
|
163
|
+
*/
|
|
164
|
+
DbFileStorageDriver.prototype.isLegacyEmptyFile = function (fileId) {
|
|
165
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
166
|
+
var file;
|
|
167
|
+
return __generator(this, function (_a) {
|
|
168
|
+
switch (_a.label) {
|
|
169
|
+
case 0: return [4 /*yield*/, (0, user_1.getScopedDbAsSystem)().get(tables_1.tables.File, { id: fileId })];
|
|
170
|
+
case 1:
|
|
171
|
+
file = _a.sent();
|
|
172
|
+
return [2 /*return*/, !!file && file.size === 0];
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
};
|
|
149
177
|
DbFileStorageDriver.prototype.splitIntoChunks = function (data) {
|
|
150
178
|
var chunks = [];
|
|
151
179
|
for (var i = 0; i < data.length; i += this.chunkSize) {
|
|
152
180
|
chunks.push(data.substring(i, i + this.chunkSize));
|
|
153
181
|
}
|
|
154
|
-
return chunks;
|
|
182
|
+
return chunks.length > 0 ? chunks : [''];
|
|
155
183
|
};
|
|
156
184
|
return DbFileStorageDriver;
|
|
157
185
|
}());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DbFileStorageDriver.js","sourceRoot":"","sources":["../../src/DbFileStorageDriver.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wCAAmE;AACnE,oCAA+D;AAE/D,0CAAyC;
|
|
1
|
+
{"version":3,"file":"DbFileStorageDriver.js","sourceRoot":"","sources":["../../src/DbFileStorageDriver.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wCAAmE;AACnE,oCAA+D;AAE/D,0CAAyC;AAEzC,uDAAsD;AAEtD;IAGE;;OAEG;IACH,6BAAY,SAAkB;QALtB,cAAS,GAAG,OAAO,CAAC,CAAC,sDAAsD;QAMjF,IAAI,SAAS,IAAI,SAAS,EAAE;YAC1B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;SAC5B;IACH,CAAC;IAEK,wCAAU,GAAhB,UAAiB,IAAU,EAAE,QAAgB;;;;4BAC3C,qBAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAA;;wBAA1C,SAA0C,CAAC;;;;;KAC5C;IAEK,yCAAW,GAAjB,UAAkB,MAAc;;;;;;wBAOxB,EAAE,GAAG,IAAA,0BAAmB,GAAE,CAAC;wBAC3B,EAAE,GAAG,IAAI,wBAAmB,EAAE;6BACjC,eAAe,CAAC,eAAM,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;6BAClD,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;wBACnB,qBAAM,EAAE,CAAC,KAAK,CAAC,eAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAA;;wBAArD,eAAe,GAAG,SAAmC;wBACvD,KAAA,eAAe,CAAC,MAAM,KAAK,CAAC,CAAA;iCAA5B,wBAA4B;wBAAM,qBAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAA;;wBAAtC,KAAA,CAAC,CAAC,SAAoC,CAAC,CAAA;;;wBAA3E,QAA6E;4BAC3E,oFAAoF;4BACpF,oFAAoF;4BACpF,MAAM,IAAI,mCAAgB,CAAC,WAAW,EAAE,sCAA+B,MAAM,CAAE,CAAC,CAAC;yBAClF;wBAED,sBAAO,eAAe,CAAC,GAAG,CAAC,UAAC,MAAM,IAAK,OAAA,MAAM,CAAC,IAAI,EAAX,CAAW,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAC;;;;KAC9D;IAEK,4CAAc,GAApB,UAAqB,MAAc,EAAE,IAAY;;;;;;wBACzC,EAAE,GAAG,IAAA,kBAAW,GAAE,CAAC;wBAGnB,WAAW,GAAG,IAAI,wBAAmB,EAAE,CAAC,eAAe,CAAC,eAAM,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;wBACjG,qBAAM,EAAE,CAAC,MAAM,CAAC,eAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAA;;wBAA7C,SAA6C,CAAC;wBAE9C,qBAAM,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,EAAA;;wBAArC,SAAqC,CAAC;;;;;KACvC;IAEK,wCAAU,GAAhB,UAAiB,MAAc;;;;;;wBAKvB,EAAE,GAAG,IAAA,0BAAmB,GAAE,CAAC;wBAC3B,WAAW,GAAG,IAAI,wBAAmB,EAAE,CAAC,eAAe,CAAC,eAAM,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;wBACjG,qBAAM,EAAE,CAAC,MAAM,CAAC,eAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAA;;wBAA7C,SAA6C,CAAC;;;;;KAC/C;IAEa,0CAAY,GAA1B,UAA2B,MAAc,EAAE,IAAY;;;;;;wBAC/C,EAAE,GAAG,IAAA,kBAAW,GAAE,CAAC;wBACnB,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;wBACjC,KAAK,GAAG,CAAC;;;6BAAE,CAAA,KAAK,GAAG,MAAM,CAAC,MAAM,CAAA;wBACvC,qBAAM,EAAE,CAAC,MAAM,CAAC,eAAM,CAAC,QAAQ,EAAE;gCAC/B,IAAI,EAAE,IAAI,cAAS,CAAC,eAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gCACjD,KAAK,EAAE,KAAK;gCACZ,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC;6BACpB,CAAC,EAAA;;wBAJF,SAIE,CAAC;;;wBALsC,KAAK,EAAE,CAAA;;;;;;KAOnD;IAED;;;;OAIG;IACW,+CAAiB,GAA/B,UAAgC,MAAc;;;;;4BAC/B,qBAAM,IAAA,0BAAmB,GAAE,CAAC,GAAG,CAAC,eAAM,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAA;;wBAAnE,IAAI,GAAG,SAA4D;wBACzE,sBAAO,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,EAAC;;;;KAClC;IAEO,6CAAe,GAAvB,UAAwB,IAAY;QAClC,IAAM,MAAM,GAAG,EAAE,CAAC;QAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE;YACpD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;SACpD;QACD,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3C,CAAC;IACH,0BAAC;AAAD,CAAC,AAtFD,IAsFC;AAtFY,kDAAmB"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
/// <reference types="node" />
|
|
3
|
+
import { Loadable } from '@proteinjs/reflection';
|
|
4
|
+
import { File } from './tables/FileTable';
|
|
5
|
+
/**
|
|
6
|
+
* What a file becomes when it is served to someone who is not its owner.
|
|
7
|
+
*
|
|
8
|
+
* A file's bytes are the owner's, kept exactly as they arrived. When a read resolves through the
|
|
9
|
+
* shared-content leg instead of the owner's own scope (`FileStorage.getFile`: a share recipient
|
|
10
|
+
* reading a file a shared row references), `FileStorage` serves a COPY made by the one registered
|
|
11
|
+
* maker — the package that knows the file's format decides what leaves in it (a picture's
|
|
12
|
+
* location, say, does not). The copy is made once per file, stored as its own `File` in the
|
|
13
|
+
* owner's scope and named on the original's row (`File.copyForOthers`), so every later read by
|
|
14
|
+
* anyone but the owner serves the same bytes without remaking them; it is dropped when the
|
|
15
|
+
* original's bytes change and deleted with the original.
|
|
16
|
+
*
|
|
17
|
+
* Dependency direction is the {@link FileReachabilityResolver} pattern: the seam lives here in
|
|
18
|
+
* db-file, the one implementation lives in the package that knows media, discovered through the
|
|
19
|
+
* SourceRepository. With no maker registered, everyone is served the original.
|
|
20
|
+
*/
|
|
21
|
+
export interface FileCopyForOthers extends Loadable {
|
|
22
|
+
/**
|
|
23
|
+
* Whether this file is served to others through a copy at all — decided from the row alone,
|
|
24
|
+
* never from its bytes (a plain document serves as itself and costs no read). True means
|
|
25
|
+
* {@link make} is called once, with the original's bytes, and its answer is what others get.
|
|
26
|
+
*/
|
|
27
|
+
appliesTo(file: File): boolean;
|
|
28
|
+
/** The bytes served to anyone but the owner, made from the original's. Throws when no copy can be made — the read then fails rather than serving the original. */
|
|
29
|
+
make(file: File, bytes: Buffer): Promise<Buffer>;
|
|
30
|
+
}
|
|
31
|
+
export declare const getFileCopyForOthers: () => FileCopyForOthers | undefined;
|
|
32
|
+
/**
|
|
33
|
+
* What a non-owner's read becomes when the registered maker could not make a copy: the file is
|
|
34
|
+
* served to no one but its owner. The seam's own cause, thrown by `FileStorage` in place of
|
|
35
|
+
* whatever the maker threw (the maker's own one-line reason kept as `reason`) and answered by
|
|
36
|
+
* `FileStorage` itself, once for every door — the browser service, `GET /file/:id`, a server-side
|
|
37
|
+
* reader — as a 404 `ServiceRefusal` saying only `File not found`, so a door never meets it: a
|
|
38
|
+
* deliberate refusal every door tells from a failure the same way. Its message and `reason` stay
|
|
39
|
+
* on the server (`FileStorage` logs them at WARN); a caller reads the words a missing file gets.
|
|
40
|
+
* Read by shape ({@link FileCopyRefused.is}), so it holds across duplicate copies of this package.
|
|
41
|
+
*/
|
|
42
|
+
export declare class FileCopyRefused extends Error {
|
|
43
|
+
private static readonly NAME;
|
|
44
|
+
/** Free text that reaches a message is one line and bounded. */
|
|
45
|
+
private static readonly MAX_REASON_CHARS;
|
|
46
|
+
readonly fileId: string;
|
|
47
|
+
readonly reason: string;
|
|
48
|
+
constructor(fileId: string, cause: unknown);
|
|
49
|
+
static is(error: unknown): error is FileCopyRefused;
|
|
50
|
+
private static plain;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=FileCopyForOthers.d.ts.map
|