@toa.io/extensions.storages 1.0.0-alpha.7 → 1.0.0-alpha.78

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.
Files changed (47) hide show
  1. package/package.json +8 -8
  2. package/readme.md +32 -22
  3. package/schemas/fs.cos.yaml +2 -0
  4. package/schemas/s3.cos.yaml +1 -0
  5. package/schemas/tmp.cos.yaml +0 -1
  6. package/source/Entry.ts +1 -0
  7. package/source/Factory.ts +7 -4
  8. package/source/Provider.ts +5 -0
  9. package/source/Scanner.ts +46 -17
  10. package/source/Storage.test.ts +126 -76
  11. package/source/Storage.ts +92 -91
  12. package/source/deployment.ts +38 -7
  13. package/source/providers/FileSystem.test.ts +6 -0
  14. package/source/providers/FileSystem.ts +15 -2
  15. package/source/providers/Memory.ts +21 -7
  16. package/source/providers/S3.test.ts +1 -0
  17. package/source/providers/S3.ts +36 -6
  18. package/source/providers/index.test.ts +10 -0
  19. package/source/test/arny.jpg +0 -0
  20. package/source/test/sample.avi +0 -0
  21. package/source/test/sample.svg +4 -0
  22. package/source/test/sample.wav +0 -0
  23. package/transpiled/Entry.d.ts +1 -0
  24. package/transpiled/Factory.js +5 -3
  25. package/transpiled/Factory.js.map +1 -1
  26. package/transpiled/Provider.d.ts +3 -0
  27. package/transpiled/Provider.js +1 -0
  28. package/transpiled/Provider.js.map +1 -1
  29. package/transpiled/Scanner.d.ts +3 -1
  30. package/transpiled/Scanner.js +36 -15
  31. package/transpiled/Scanner.js.map +1 -1
  32. package/transpiled/Storage.d.ts +6 -6
  33. package/transpiled/Storage.js +66 -78
  34. package/transpiled/Storage.js.map +1 -1
  35. package/transpiled/deployment.d.ts +1 -1
  36. package/transpiled/deployment.js +30 -7
  37. package/transpiled/deployment.js.map +1 -1
  38. package/transpiled/providers/FileSystem.d.ts +4 -1
  39. package/transpiled/providers/FileSystem.js +10 -1
  40. package/transpiled/providers/FileSystem.js.map +1 -1
  41. package/transpiled/providers/Memory.d.ts +2 -0
  42. package/transpiled/providers/Memory.js +13 -1
  43. package/transpiled/providers/Memory.js.map +1 -1
  44. package/transpiled/providers/S3.d.ts +3 -0
  45. package/transpiled/providers/S3.js +23 -4
  46. package/transpiled/providers/S3.js.map +1 -1
  47. package/transpiled/tsconfig.tsbuildinfo +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Provider.js","sourceRoot":"","sources":["../source/Provider.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA,oDAAqC;AASrC,MAAsB,QAAQ;IACrB,MAAM,CAAU,OAAO,GAA8B,EAAE,CAAA;IAE9D,YAAoB,CAAU,EAAE,OAAyB;QACvD,KAAK,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,KAAK,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO;YACzD,MAAM,CAAC,EAAE,CAAC,QAAQ,IAAI,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE,mBAAmB,IAAI,GAAG,CAAC,CAAA;IACpF,CAAC;;AANH,4BAeC"}
1
+ {"version":3,"file":"Provider.js","sourceRoot":"","sources":["../source/Provider.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA,oDAAqC;AASrC,MAAsB,QAAQ;IACrB,MAAM,CAAU,OAAO,GAA8B,EAAE,CAAA;IAC9C,IAAI,GAAkB,IAAI,CAAA;IAE1C,YAAoB,CAAU,EAAE,OAAyB;QACvD,KAAK,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,KAAK,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO;YACzD,MAAM,CAAC,EAAE,CAAC,QAAQ,IAAI,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE,mBAAmB,IAAI,GAAG,CAAC,CAAA;IACpF,CAAC;;AAPH,4BAoBC"}
@@ -8,8 +8,9 @@ export declare class Scanner extends PassThrough {
8
8
  private readonly hash;
9
9
  private readonly claim?;
10
10
  private readonly accept?;
11
+ private readonly limit?;
11
12
  private position;
12
- private detected;
13
+ private completed;
13
14
  private readonly chunks;
14
15
  constructor(control?: ScanOptions);
15
16
  digest(): string;
@@ -23,4 +24,5 @@ export declare class Scanner extends PassThrough {
23
24
  export interface ScanOptions {
24
25
  claim?: string;
25
26
  accept?: string;
27
+ limit?: number;
26
28
  }
@@ -12,13 +12,15 @@ class Scanner extends node_stream_1.PassThrough {
12
12
  hash = (0, node_crypto_1.createHash)('md5');
13
13
  claim;
14
14
  accept;
15
+ limit;
15
16
  position = 0;
16
- detected = false;
17
+ completed = false;
17
18
  chunks = [];
18
19
  constructor(control) {
19
20
  super();
20
21
  this.claim = control?.claim;
21
22
  this.accept = control?.accept;
23
+ this.limit = control?.limit;
22
24
  }
23
25
  digest() {
24
26
  return this.hash.digest('hex');
@@ -30,7 +32,7 @@ class Scanner extends node_stream_1.PassThrough {
30
32
  process = (buffer) => {
31
33
  this.size += buffer.length;
32
34
  this.hash.update(buffer);
33
- if (this.detected)
35
+ if (this.completed)
34
36
  return;
35
37
  if (this.position + buffer.length > HEADER_SIZE)
36
38
  buffer = buffer.subarray(0, HEADER_SIZE - this.position);
@@ -38,18 +40,25 @@ class Scanner extends node_stream_1.PassThrough {
38
40
  this.position += buffer.length;
39
41
  if (this.position === HEADER_SIZE)
40
42
  this.complete();
43
+ if (this.limit !== undefined && this.size > this.limit)
44
+ this.interrupt(ERR_LIMIT_EXCEEDED);
41
45
  };
42
46
  complete() {
43
47
  const header = Buffer.concat(this.chunks).toString('hex');
44
48
  const signature = SIGNATURES
45
- .find(({ hex, off }) => header.slice(off, off + hex.length) === hex);
49
+ .find(({ off, hex, expression }) => {
50
+ const sig = header.slice(off, off + hex.length);
51
+ return expression === undefined
52
+ ? sig === hex
53
+ : expression.test(sig);
54
+ });
46
55
  const type = signature?.type ?? this.claim;
47
56
  if (type !== undefined) {
48
57
  this.match(type);
49
58
  this.type = type;
50
59
  }
51
60
  this.verify(signature);
52
- this.detected = true;
61
+ this.completed = true;
53
62
  }
54
63
  verify(signature) {
55
64
  if (this.claim === undefined || this.claim === 'application/octet-stream')
@@ -68,6 +77,7 @@ class Scanner extends node_stream_1.PassThrough {
68
77
  this.interrupt(ERR_NOT_ACCEPTABLE);
69
78
  }
70
79
  interrupt(error) {
80
+ this.completed = true;
71
81
  this.error = error;
72
82
  this.end();
73
83
  }
@@ -75,24 +85,35 @@ class Scanner extends node_stream_1.PassThrough {
75
85
  exports.Scanner = Scanner;
76
86
  // https://en.wikipedia.org/wiki/List_of_file_signatures
77
87
  const SIGNATURES = [
78
- { hex: 'ffd8ffe0', off: 0, type: 'image/jpeg' },
79
- { hex: 'ffd8ffe1', off: 0, type: 'image/jpeg' },
80
- { hex: 'ffd8ffee', off: 0, type: 'image/jpeg' },
81
- { hex: 'ffd8ffdb', off: 0, type: 'image/jpeg' },
82
- { hex: '89504e47', off: 0, type: 'image/png' },
83
- { hex: '47494638', off: 0, type: 'image/gif' },
84
- { hex: '52494646', off: 0, type: 'image/webp' },
85
- { hex: '4a584c200d0a870a', off: 8, type: 'image/jxl' },
86
- { hex: '6674797068656963', off: 8, type: 'image/heic' },
87
- { hex: '6674797061766966', off: 8, type: 'image/avif' }
88
+ { hex: 'ff d8 ff e0', off: 0, type: 'image/jpeg' },
89
+ { hex: 'ff d8 ff e1', off: 0, type: 'image/jpeg' },
90
+ { hex: 'ff d8 ff e2', off: 0, type: 'image/jpeg' },
91
+ { hex: 'ff d8 ff ee', off: 0, type: 'image/jpeg' },
92
+ { hex: 'ff d8 ff db', off: 0, type: 'image/jpeg' },
93
+ { hex: '89 50 4e 47', off: 0, type: 'image/png' },
94
+ { hex: '47 49 46 38', off: 0, type: 'image/gif' },
95
+ { hex: '52 49 46 46 ?? ?? ?? ?? 57 45 42 50', off: 0, type: 'image/webp' },
96
+ { hex: '4a 58 4c 20 0d 0a 87 0a', off: 8, type: 'image/jxl' },
97
+ { hex: '66 74 79 70 68 65 69 63', off: 8, type: 'image/heic' },
98
+ { hex: '66 74 79 70 61 76 69 66', off: 8, type: 'image/avif' },
99
+ { hex: '52 49 46 46 ?? ?? ?? ?? 41 56 49 20', off: 0, type: 'video/avi' },
100
+ { hex: '52 49 46 46 ?? ?? ?? ?? 57 41 56 45', off: 0, type: 'audio/wav' }
88
101
  /*
89
102
  When adding a new signature, include a copyright-free sample file in the `.tests` directory
90
103
  and update the 'signatures' test group in `Storage.test.ts`.
91
104
  */
92
- ];
105
+ ].map((signature) => {
106
+ signature.hex = signature.hex.replaceAll(' ', '');
107
+ if (signature.hex.includes('??')) {
108
+ const expression = signature.hex.replaceAll(/(?<wildcards>\?{1,24})/g, (_, wildcards) => `[0-9a-f]{${wildcards.length}}`);
109
+ signature.expression = new RegExp(expression, 'i');
110
+ }
111
+ return signature;
112
+ });
93
113
  const HEADER_SIZE = SIGNATURES
94
114
  .reduce((max, { off, hex }) => Math.max(max, off + hex.length), 0) / 2;
95
115
  const KNOWN_TYPES = new Set(SIGNATURES.map(({ type }) => type));
96
116
  const ERR_TYPE_MISMATCH = (0, error_value_1.Err)('TYPE_MISMATCH');
97
117
  const ERR_NOT_ACCEPTABLE = (0, error_value_1.Err)('NOT_ACCEPTABLE');
118
+ const ERR_LIMIT_EXCEEDED = (0, error_value_1.Err)('LIMIT_EXCEEDED');
98
119
  //# sourceMappingURL=Scanner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Scanner.js","sourceRoot":"","sources":["../source/Scanner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Scanner.js","sourceRoot":"","sources":["../source/Scanner.ts"],"names":[],"mappings":"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"}
@@ -8,24 +8,24 @@ export declare class Storage {
8
8
  constructor(provider: Provider);
9
9
  put(path: string, stream: Readable, options?: Options): Maybe<Entry>;
10
10
  get(path: string): Maybe<Entry>;
11
+ list(path: string): Promise<string[]>;
11
12
  fetch(path: string): Maybe<Readable>;
12
13
  delete(path: string): Maybe<void>;
13
- list(path: string): Promise<string[]>;
14
- permute(path: string, ids: string[]): Maybe<void>;
15
- conceal(path: string): Maybe<void>;
16
- reveal(path: string): Maybe<void>;
14
+ move(path: string, to: string): Maybe<void>;
17
15
  diversify(path: string, name: string, stream: Readable): Maybe<void>;
18
- annotate(path: string, key: string, value?: unknown): Maybe<void>;
16
+ annotate(path: string, key: string | Record<string, unknown>, value?: unknown): Maybe<void>;
17
+ path(): string | null;
19
18
  private transit;
20
19
  private persist;
21
20
  private create;
22
21
  private save;
23
- private enroll;
24
22
  private parse;
23
+ private destruct;
25
24
  }
26
25
  type Maybe<T> = Promise<T | Error>;
27
26
  type Meta = Record<string, string>;
28
27
  interface Options extends ScanOptions {
28
+ origin?: string;
29
29
  meta?: Meta;
30
30
  }
31
31
  export type Storages = Record<string, Storage>;
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Storage = void 0;
4
4
  const node_stream_1 = require("node:stream");
5
5
  const node_path_1 = require("node:path");
6
+ const consumers_1 = require("node:stream/consumers");
6
7
  const msgpackr_1 = require("msgpackr");
7
8
  const generic_1 = require("@toa.io/generic");
8
9
  const error_value_1 = require("error-value");
@@ -20,15 +21,28 @@ class Storage {
20
21
  return scanner.error;
21
22
  const id = scanner.digest();
22
23
  await this.persist(tempname, id);
23
- return await this.create(path, id, scanner.size, scanner.type, options?.meta);
24
+ const entry = {
25
+ id,
26
+ size: scanner.size,
27
+ type: scanner.type,
28
+ origin: options?.origin,
29
+ created: Date.now(),
30
+ variants: [],
31
+ meta: options?.meta ?? {}
32
+ };
33
+ return await this.create(path, entry);
24
34
  }
25
35
  async get(path) {
26
- const metapath = node_path_1.posix.join(ENTRIES, path, META);
27
- const result = await this.provider.get(metapath);
36
+ const paths = this.destruct(path);
37
+ const result = await this.provider.get(paths.metafile);
28
38
  if (result === null)
29
39
  return ERR_NOT_FOUND;
30
40
  else
31
- return (0, msgpackr_1.decode)(await (0, generic_1.buffer)(result));
41
+ return (0, msgpackr_1.decode)(await (0, consumers_1.buffer)(result));
42
+ }
43
+ async list(path) {
44
+ const dir = node_path_1.posix.join(ENTRIES_ROOT, path, ENTRIES_DIR);
45
+ return await this.provider.list(dir);
32
46
  }
33
47
  async fetch(path) {
34
48
  const { rel, id, variant } = this.parse(path);
@@ -39,7 +53,7 @@ class Storage {
39
53
  }
40
54
  const blob = variant === null
41
55
  ? node_path_1.posix.join(BLOBs, id)
42
- : node_path_1.posix.join(ENTRIES, rel, id, variant);
56
+ : node_path_1.posix.join(ENTRIES_ROOT, rel, id, variant);
43
57
  const stream = await this.provider.get(blob);
44
58
  if (stream === null)
45
59
  return ERR_NOT_FOUND;
@@ -50,43 +64,30 @@ class Storage {
50
64
  const entry = await this.get(path);
51
65
  if (entry instanceof Error)
52
66
  return entry;
53
- await this.conceal(path);
54
- await this.provider.delete(node_path_1.posix.join(ENTRIES, path));
55
- }
56
- async list(path) {
57
- const listfile = node_path_1.posix.join(ENTRIES, path, LIST);
58
- const stream = await this.provider.get(listfile);
59
- return stream === null ? [] : (0, msgpackr_1.decode)(await (0, generic_1.buffer)(stream));
60
- }
61
- async permute(path, ids) {
62
- const unique = new Set(ids);
63
- const dir = node_path_1.posix.join(ENTRIES, path);
64
- const list = await this.list(path);
65
- if (list.length !== ids.length || unique.size !== ids.length)
66
- return ERR_PERMUTATION_MISMATCH;
67
- for (const id of ids)
68
- if (!list.includes(id))
69
- return ERR_PERMUTATION_MISMATCH;
70
- await this.provider.put(dir, LIST, node_stream_1.Readable.from((0, msgpackr_1.encode)(ids)));
71
- }
72
- async conceal(path) {
73
- const { id, rel } = this.parse(path);
74
- const dir = node_path_1.posix.join(ENTRIES, rel);
75
- const list = await this.list(rel);
76
- const index = list.indexOf(id);
77
- if (index === -1)
78
- return ERR_NOT_FOUND;
79
- list.splice(index, 1);
80
- await this.provider.put(dir, LIST, node_stream_1.Readable.from((0, msgpackr_1.encode)(list)));
81
- }
82
- async reveal(path) {
83
- const { id, rel } = this.parse(path);
84
- return await this.enroll(rel, id);
67
+ const paths = this.destruct(path);
68
+ await Promise.all([
69
+ this.provider.delete(paths.metafile),
70
+ this.provider.delete(paths.vardir)
71
+ ]);
72
+ }
73
+ async move(path, to) {
74
+ const source = this.destruct(path);
75
+ const rel = to.startsWith('.');
76
+ const dir = to.endsWith('/');
77
+ if (rel)
78
+ to = node_path_1.posix.resolve(source.rel + '/', to);
79
+ if (dir)
80
+ to = node_path_1.posix.join(to, source.ent);
81
+ const target = this.destruct(to);
82
+ await Promise.all([
83
+ this.provider.move(source.metafile, target.metafile),
84
+ this.provider.moveDir(source.vardir, target.vardir)
85
+ ]);
85
86
  }
86
87
  async diversify(path, name, stream) {
87
88
  const scanner = new Scanner_1.Scanner();
88
89
  const pipe = stream.pipe(scanner);
89
- await this.provider.put(node_path_1.posix.join(ENTRIES, path), name, pipe);
90
+ await this.provider.put(node_path_1.posix.join(ENTRIES_ROOT, path), name, pipe);
90
91
  if (scanner.error !== null)
91
92
  return scanner.error;
92
93
  const { size, type } = scanner;
@@ -101,13 +102,19 @@ class Storage {
101
102
  const entry = await this.get(path);
102
103
  if (entry instanceof Error)
103
104
  return entry;
104
- // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
105
- if (value === undefined)
106
- delete entry.meta[key];
107
- else
108
- entry.meta[key] = value;
105
+ const update = typeof key === 'string'
106
+ ? { [key]: value }
107
+ : key;
108
+ Object.assign(entry.meta, update);
109
+ // filter undefined values
110
+ for (const key of Object.keys(entry.meta))
111
+ if (entry.meta[key] === undefined)
112
+ delete entry.meta[key];
109
113
  await this.save(path, entry);
110
114
  }
115
+ path() {
116
+ return this.provider.path;
117
+ }
111
118
  async transit(stream) {
112
119
  const tempname = (0, generic_1.newid)();
113
120
  await this.provider.put(TEMP, tempname, stream);
@@ -119,43 +126,17 @@ class Storage {
119
126
  await this.provider.move(temp, blob);
120
127
  }
121
128
  // eslint-disable-next-line max-params
122
- async create(path, id, size, type, meta = {}) {
123
- const entry = {
124
- id,
125
- size,
126
- type,
127
- created: Date.now(),
128
- variants: [],
129
- meta
130
- };
129
+ async create(path, entry) {
131
130
  const metafile = node_path_1.posix.join(path, entry.id);
132
131
  const existing = await this.get(metafile);
133
132
  if (existing instanceof Error)
134
133
  await this.save(metafile, entry);
135
- await this.enroll(path, id, true);
136
134
  return entry;
137
135
  }
138
- async save(rel, entry) {
139
- const buffer = (0, msgpackr_1.encode)(entry);
140
- const stream = node_stream_1.Readable.from(buffer);
141
- await this.provider.put(node_path_1.posix.join(ENTRIES, rel), META, stream);
142
- }
143
- async enroll(path, id, addition = false) {
144
- const dir = node_path_1.posix.join(ENTRIES, path);
145
- const list = await this.list(path);
146
- const index = list.indexOf(id);
147
- if (index !== -1)
148
- if (addition)
149
- list.splice(index, 1);
150
- else
151
- return;
152
- else if (!addition) {
153
- const entry = await this.get(node_path_1.posix.join(path, id));
154
- if (entry instanceof Error)
155
- return entry;
156
- }
157
- list.push(id);
158
- await this.provider.put(dir, LIST, node_stream_1.Readable.from((0, msgpackr_1.encode)(list)));
136
+ async save(path, entry) {
137
+ const paths = this.destruct(path);
138
+ const stream = node_stream_1.Readable.from((0, msgpackr_1.encode)(entry));
139
+ await this.provider.put(paths.metadir, paths.ent, stream);
159
140
  }
160
141
  parse(path) {
161
142
  const [last, ...segments] = path.split('/').reverse();
@@ -164,13 +145,20 @@ class Storage {
164
145
  const rel = segments.reverse().join('/');
165
146
  return { rel, id, variant };
166
147
  }
148
+ destruct(path) {
149
+ const rel = node_path_1.posix.dirname(path);
150
+ const dir = node_path_1.posix.join(ENTRIES_ROOT, rel);
151
+ const ent = node_path_1.posix.basename(path);
152
+ const metadir = node_path_1.posix.join(dir, ENTRIES_DIR);
153
+ const metafile = node_path_1.posix.join(metadir, ent);
154
+ const vardir = node_path_1.posix.join(dir, ent);
155
+ return { rel, dir, ent, metadir, metafile, vardir };
156
+ }
167
157
  }
168
158
  exports.Storage = Storage;
169
159
  const ERR_NOT_FOUND = (0, error_value_1.Err)('NOT_FOUND');
170
- const ERR_PERMUTATION_MISMATCH = (0, error_value_1.Err)('PERMUTATION_MISMATCH');
171
160
  const TEMP = '/temp';
172
161
  const BLOBs = '/blobs';
173
- const ENTRIES = '/entries';
174
- const LIST = '.list';
175
- const META = '.meta';
162
+ const ENTRIES_ROOT = '/entries';
163
+ const ENTRIES_DIR = '.meta';
176
164
  //# sourceMappingURL=Storage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Storage.js","sourceRoot":"","sources":["../source/Storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Storage.js","sourceRoot":"","sources":["../source/Storage.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { Dependency } from '@toa.io/operations';
2
2
  import type { context } from '@toa.io/norm';
3
- export declare const SERIALIZATION_PREFIX = "TOA_STORAGES";
3
+ export declare const ENV_PREFIX = "TOA_STORAGES";
4
4
  export declare function deployment(instances: Instance[], annotation: unknown): Dependency;
5
5
  export type Instance = context.Dependency<string[]>;
@@ -23,20 +23,22 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.deployment = exports.SERIALIZATION_PREFIX = void 0;
26
+ exports.deployment = exports.ENV_PREFIX = void 0;
27
27
  const assert = __importStar(require("node:assert"));
28
28
  const generic_1 = require("@toa.io/generic");
29
29
  const providers_1 = require("./providers");
30
30
  const Annotation_1 = require("./Annotation");
31
- exports.SERIALIZATION_PREFIX = 'TOA_STORAGES';
31
+ exports.ENV_PREFIX = 'TOA_STORAGES';
32
32
  function deployment(instances, annotation) {
33
33
  validate(instances, annotation);
34
34
  const value = (0, generic_1.encode)(annotation);
35
- const pointer = { name: exports.SERIALIZATION_PREFIX, value };
35
+ const pointer = { name: exports.ENV_PREFIX, value };
36
36
  const secrets = getSecrets(annotation);
37
- return {
38
- variables: { global: [pointer, ...secrets] }
39
- };
37
+ const mounts = getMounts(instances, annotation);
38
+ const dependency = { variables: { global: [pointer, ...secrets] } };
39
+ if (mounts !== null)
40
+ dependency.mounts = mounts;
41
+ return dependency;
40
42
  }
41
43
  exports.deployment = deployment;
42
44
  function validate(instances, annotation) {
@@ -55,7 +57,7 @@ function getSecrets(annotation) {
55
57
  const Provider = providers_1.providers[declaration.provider];
56
58
  for (const secret of Provider.SECRETS)
57
59
  secrets.push({
58
- name: `${exports.SERIALIZATION_PREFIX}_${name}_${secret.name}`.toUpperCase(),
60
+ name: `${exports.ENV_PREFIX}_${name}_${secret.name}`.toUpperCase(),
59
61
  secret: {
60
62
  name: `toa-storages-${name}`,
61
63
  key: secret.name,
@@ -65,4 +67,25 @@ function getSecrets(annotation) {
65
67
  }
66
68
  return secrets;
67
69
  }
70
+ function getMounts(instances, annotation) {
71
+ let mounts = null;
72
+ for (const { locator, manifest } of instances)
73
+ for (const name of manifest) {
74
+ const declaration = annotation[name];
75
+ // eslint-disable-next-line max-depth
76
+ if (declaration.provider !== 'fs')
77
+ continue;
78
+ // eslint-disable-next-line max-depth
79
+ if (declaration.claim !== undefined) {
80
+ mounts ??= {};
81
+ mounts[locator.label] ??= [];
82
+ mounts[locator.label].push({
83
+ name,
84
+ path: declaration.path,
85
+ claim: declaration.claim
86
+ });
87
+ }
88
+ }
89
+ return mounts;
90
+ }
68
91
  //# sourceMappingURL=deployment.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"deployment.js","sourceRoot":"","sources":["../source/deployment.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oDAAqC;AACrC,6CAAwC;AACxC,2CAAuC;AACvC,6CAAiD;AAKpC,QAAA,oBAAoB,GAAG,cAAc,CAAA;AAElD,SAAgB,UAAU,CAAE,SAAqB,EAAE,UAAmB;IACpE,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;IAE/B,MAAM,KAAK,GAAG,IAAA,gBAAM,EAAC,UAAU,CAAC,CAAA;IAChC,MAAM,OAAO,GAAa,EAAE,IAAI,EAAE,4BAAoB,EAAE,KAAK,EAAE,CAAA;IAC/D,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,CAAA;IAEtC,OAAO;QACL,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,EAAE;KAC7C,CAAA;AACH,CAAC;AAVD,gCAUC;AAED,SAAS,QAAQ,CAAE,SAAqB,EAAE,UAAmB;IAC3D,IAAA,+BAAkB,EAAC,UAAU,CAAC,CAAA;IAE9B,KAAK,MAAM,QAAQ,IAAI,SAAS;QAC9B,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;AAClC,CAAC;AAED,SAAS,QAAQ,CAAE,QAAkB,EAAE,UAAsB;IAC3D,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,QAAQ;QAClC,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,UAAU,EAC1B,YAAY,IAAI,uBAAuB;YACvC,gBAAgB,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,CAAA;AACvD,CAAC;AAED,SAAS,UAAU,CAAE,UAAsB;IACzC,MAAM,OAAO,GAAe,EAAE,CAAA;IAE9B,KAAK,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7D,MAAM,QAAQ,GAAG,qBAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;QAEhD,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,OAAO;YACnC,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,GAAG,4BAAoB,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;gBACpE,MAAM,EAAE;oBACN,IAAI,EAAE,gBAAgB,IAAI,EAAE;oBAC5B,GAAG,EAAE,MAAM,CAAC,IAAI;oBAChB,QAAQ,EAAE,MAAM,CAAC,QAAQ;iBAC1B;aACF,CAAC,CAAA;IACN,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC"}
1
+ {"version":3,"file":"deployment.js","sourceRoot":"","sources":["../source/deployment.ts"],"names":[],"mappings":"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"}
@@ -4,12 +4,15 @@ import { Provider } from '../Provider';
4
4
  import type { ProviderSecrets } from '../Provider';
5
5
  export interface FileSystemOptions {
6
6
  path: string;
7
+ claim?: string;
7
8
  }
8
9
  export declare class FileSystem extends Provider<FileSystemOptions> {
9
- protected readonly path: string;
10
+ readonly path: string;
10
11
  constructor(options: FileSystemOptions, secrets?: ProviderSecrets);
11
12
  get(path: string): Promise<Readable | null>;
13
+ list(path: string): Promise<string[]>;
12
14
  put(rel: string, filename: string, stream: Readable): Promise<void>;
13
15
  delete(path: string): Promise<void>;
14
16
  move(from: string, to: string): Promise<void>;
17
+ moveDir(from: string, to: string): Promise<void>;
15
18
  }
@@ -24,10 +24,16 @@ class FileSystem extends Provider_1.Provider {
24
24
  throw err;
25
25
  }
26
26
  }
27
+ async list(path) {
28
+ const dir = (0, node_path_1.join)(this.path, path);
29
+ return (await promises_1.default.readdir(dir, { withFileTypes: true }))
30
+ .filter((dirent) => dirent.isFile())
31
+ .map((dirent) => dirent.name);
32
+ }
27
33
  async put(rel, filename, stream) {
28
34
  const dir = (0, node_path_1.join)(this.path, rel);
29
35
  const path = (0, node_path_1.join)(dir, filename);
30
- await promises_1.default.mkdir((0, node_path_1.dirname)(path), { recursive: true });
36
+ await promises_1.default.mkdir(dir, { recursive: true });
31
37
  await promises_1.default.writeFile(path, stream);
32
38
  }
33
39
  async delete(path) {
@@ -39,6 +45,9 @@ class FileSystem extends Provider_1.Provider {
39
45
  await promises_1.default.mkdir((0, node_path_1.dirname)(to), { recursive: true });
40
46
  await promises_1.default.rename(from, to);
41
47
  }
48
+ async moveDir(from, to) {
49
+ await this.move(from, to).catch(() => null);
50
+ }
42
51
  }
43
52
  exports.FileSystem = FileSystem;
44
53
  //# sourceMappingURL=FileSystem.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FileSystem.js","sourceRoot":"","sources":["../../source/providers/FileSystem.ts"],"names":[],"mappings":";;;;;;AACA,yCAAyC;AACzC,gEAAiC;AACjC,0CAAsC;AAOtC,MAAa,UAAW,SAAQ,mBAA2B;IACtC,IAAI,CAAQ;IAE/B,YAAoB,OAA0B,EAAE,OAAyB;QACvE,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAEvB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;IAC1B,CAAC;IAEM,KAAK,CAAC,GAAG,CAAE,IAAY;QAC5B,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,kBAAE,CAAC,IAAI,CAAC,IAAA,gBAAI,EAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;YAE/C,OAAO,EAAE,CAAC,gBAAgB,EAAE,CAAA;QAC9B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAK,GAA6B,EAAE,IAAI,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAA;YAElE,MAAM,GAAG,CAAA;QACX,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,GAAG,CAAE,GAAW,EAAE,QAAgB,EAAE,MAAgB;QAC/D,MAAM,GAAG,GAAG,IAAA,gBAAI,EAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QAChC,MAAM,IAAI,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;QAEhC,MAAM,kBAAE,CAAC,KAAK,CAAC,IAAA,mBAAO,EAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAClD,MAAM,kBAAE,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAClC,CAAC;IAEM,KAAK,CAAC,MAAM,CAAE,IAAY;QAC/B,MAAM,kBAAE,CAAC,EAAE,CAAC,IAAA,gBAAI,EAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IACtE,CAAC;IAEM,KAAK,CAAC,IAAI,CAAE,IAAY,EAAE,EAAU;QACzC,IAAI,GAAG,IAAA,gBAAI,EAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAC5B,EAAE,GAAG,IAAA,gBAAI,EAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;QAExB,MAAM,kBAAE,CAAC,KAAK,CAAC,IAAA,mBAAO,EAAC,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAChD,MAAM,kBAAE,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IAC3B,CAAC;CACF;AAxCD,gCAwCC"}
1
+ {"version":3,"file":"FileSystem.js","sourceRoot":"","sources":["../../source/providers/FileSystem.ts"],"names":[],"mappings":";;;;;;AACA,yCAAyC;AACzC,gEAAiC;AACjC,0CAAsC;AAQtC,MAAa,UAAW,SAAQ,mBAA2B;IAChC,IAAI,CAAQ;IAErC,YAAoB,OAA0B,EAAE,OAAyB;QACvE,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAEvB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;IAC1B,CAAC;IAEM,KAAK,CAAC,GAAG,CAAE,IAAY;QAC5B,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,kBAAE,CAAC,IAAI,CAAC,IAAA,gBAAI,EAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;YAE/C,OAAO,EAAE,CAAC,gBAAgB,EAAE,CAAA;QAC9B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAK,GAA6B,EAAE,IAAI,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAA;YAElE,MAAM,GAAG,CAAA;QACX,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,IAAI,CAAE,IAAY;QAC7B,MAAM,GAAG,GAAG,IAAA,gBAAI,EAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAEjC,OAAO,CAAC,MAAM,kBAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;aACpD,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;aACnC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACjC,CAAC;IAEM,KAAK,CAAC,GAAG,CAAE,GAAW,EAAE,QAAgB,EAAE,MAAgB;QAC/D,MAAM,GAAG,GAAG,IAAA,gBAAI,EAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QAChC,MAAM,IAAI,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;QAEhC,MAAM,kBAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACxC,MAAM,kBAAE,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAClC,CAAC;IAEM,KAAK,CAAC,MAAM,CAAE,IAAY;QAC/B,MAAM,kBAAE,CAAC,EAAE,CAAC,IAAA,gBAAI,EAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IACtE,CAAC;IAEM,KAAK,CAAC,IAAI,CAAE,IAAY,EAAE,EAAU;QACzC,IAAI,GAAG,IAAA,gBAAI,EAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAC5B,EAAE,GAAG,IAAA,gBAAI,EAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;QAExB,MAAM,kBAAE,CAAC,KAAK,CAAC,IAAA,mBAAO,EAAC,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAChD,MAAM,kBAAE,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IAC3B,CAAC;IAEM,KAAK,CAAC,OAAO,CAAE,IAAY,EAAE,EAAU;QAC5C,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;IAC7C,CAAC;CACF;AApDD,gCAoDC"}
@@ -7,7 +7,9 @@ import { Provider } from '../Provider';
7
7
  export declare class InMemory extends Provider {
8
8
  private readonly storage;
9
9
  get(path: string): Promise<Readable | null>;
10
+ list(path: string): Promise<string[]>;
10
11
  put(path: string, filename: string, stream: Readable): Promise<void>;
11
12
  delete(path: string): Promise<void>;
12
13
  move(from: string, to: string): Promise<void>;
14
+ moveDir(from: string, to: string): Promise<void>;
13
15
  }
@@ -40,6 +40,11 @@ class InMemory extends Provider_1.Provider {
40
40
  return null;
41
41
  return node_stream_1.Readable.from(data);
42
42
  }
43
+ async list(path) {
44
+ return Array.from(this.storage.keys())
45
+ .filter((f) => node_path_1.posix.dirname(f) === path)
46
+ .map((f) => node_path_1.posix.basename(f));
47
+ }
43
48
  async put(path, filename, stream) {
44
49
  this.storage.set((0, node_path_1.join)(path, filename), await (0, consumers_1.buffer)(stream));
45
50
  }
@@ -49,12 +54,19 @@ class InMemory extends Provider_1.Provider {
49
54
  this.storage.delete(f);
50
55
  }
51
56
  async move(from, to) {
52
- assert.notEqual(from, to, 'Source and destination are the same');
53
57
  const buf = this.storage.get(from);
54
58
  assert.ok(buf !== undefined, `File not found: ${from}`);
55
59
  this.storage.set(to, buf);
56
60
  this.storage.delete(from);
57
61
  }
62
+ async moveDir(from, to) {
63
+ for (const f of this.storage.keys())
64
+ if (f.startsWith(from)) {
65
+ const toPath = to + f.slice(from.length);
66
+ this.storage.set(toPath, this.storage.get(f));
67
+ this.storage.delete(f);
68
+ }
69
+ }
58
70
  }
59
71
  exports.InMemory = InMemory;
60
72
  //# sourceMappingURL=Memory.js.map