@kensio/yulin 1.8.0 → 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.
Files changed (21) hide show
  1. package/dist/service/s3/bucket/sim-s3-bucket-access.d.ts.map +1 -1
  2. package/dist/service/s3/bucket/sim-s3-bucket-access.js +6 -1
  3. package/dist/service/s3/bucket/sim-s3-bucket-access.js.map +1 -1
  4. package/dist/service/s3/mount/sim-s3-mount.type.d.ts +12 -0
  5. package/dist/service/s3/mount/sim-s3-mount.type.d.ts.map +1 -1
  6. package/dist/service/s3/storage/filesystem/s3-filesystem-allowed.d.ts +36 -0
  7. package/dist/service/s3/storage/filesystem/s3-filesystem-allowed.d.ts.map +1 -0
  8. package/dist/service/s3/storage/filesystem/s3-filesystem-allowed.js +73 -0
  9. package/dist/service/s3/storage/filesystem/s3-filesystem-allowed.js.map +1 -0
  10. package/dist/service/s3/storage/filesystem/s3-filesystem-object-metadata.d.ts.map +1 -1
  11. package/dist/service/s3/storage/filesystem/s3-filesystem-object-metadata.js +5 -6
  12. package/dist/service/s3/storage/filesystem/s3-filesystem-object-metadata.js.map +1 -1
  13. package/dist/service/s3/storage/filesystem/s3-filesystem-safety.d.ts +2 -0
  14. package/dist/service/s3/storage/filesystem/s3-filesystem-safety.d.ts.map +1 -1
  15. package/dist/service/s3/storage/filesystem/s3-filesystem-safety.js +7 -41
  16. package/dist/service/s3/storage/filesystem/s3-filesystem-safety.js.map +1 -1
  17. package/dist/service/s3/storage/filesystem/s3-filesystem-storage.d.ts +1 -0
  18. package/dist/service/s3/storage/filesystem/s3-filesystem-storage.d.ts.map +1 -1
  19. package/dist/service/s3/storage/filesystem/s3-filesystem-storage.js +1 -0
  20. package/dist/service/s3/storage/filesystem/s3-filesystem-storage.js.map +1 -1
  21. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"sim-s3-bucket-access.d.ts","sourceRoot":"","sources":["../../../../src/service/s3/bucket/sim-s3-bucket-access.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AAG1F,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAEvE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAEjF,UAAU,2BAA2B;IACnC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IAC5D,QAAQ,CAAC,kBAAkB,EAAE,wBAAwB,CAAC;CACvD;AAED;;;;;;;GAOG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4C;IACpE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA2B;IAC9D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA2B;IAExD,YAAY,UAAU,EAAE,2BAA2B,EAGlD;IAED;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,eAAe,GAAG,MAAM,GAAG,WAAW,CAK1D;IAED;;OAEG;IACH,GAAG,CAAC,UAAU,EAAE,eAAe,GAAG,MAAM,GAAG,GAAG,CAK7C;IAED;;OAEG;IACH,UAAU,CAAC,UAAU,EAAE,eAAe,GAAG,MAAM,GAAG,GAAG,CAEpD;IAED;;;;;;;;OAQG;IACH,eAAe,CACb,UAAU,EAAE,eAAe,GAAG,MAAM,EACpC,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,2BAAgC,GACxC,IAAI,CAKN;IAED;;OAEG;IACH,aAAa,IAAI,SAAS,MAAM,EAAE,CAEjC;IAED;;OAEG;IACH,kBAAkB,IAAI,IAAI,CAEzB;CACF"}
1
+ {"version":3,"file":"sim-s3-bucket-access.d.ts","sourceRoot":"","sources":["../../../../src/service/s3/bucket/sim-s3-bucket-access.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AAG1F,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAEvE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAEjF,UAAU,2BAA2B;IACnC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IAC5D,QAAQ,CAAC,kBAAkB,EAAE,wBAAwB,CAAC;CACvD;AAED;;;;;;;GAOG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4C;IACpE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA2B;IAC9D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA2B;IAExD,YAAY,UAAU,EAAE,2BAA2B,EAGlD;IAED;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,eAAe,GAAG,MAAM,GAAG,WAAW,CAK1D;IAED;;OAEG;IACH,GAAG,CAAC,UAAU,EAAE,eAAe,GAAG,MAAM,GAAG,GAAG,CAK7C;IAED;;OAEG;IACH,UAAU,CAAC,UAAU,EAAE,eAAe,GAAG,MAAM,GAAG,GAAG,CAEpD;IAED;;;;;;;;OAQG;IACH,eAAe,CACb,UAAU,EAAE,eAAe,GAAG,MAAM,EACpC,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,2BAAgC,GACxC,IAAI,CAUN;IAED;;OAEG;IACH,aAAa,IAAI,SAAS,MAAM,EAAE,CAEjC;IAED;;OAEG;IACH,kBAAkB,IAAI,IAAI,CAEzB;CACF"}
@@ -48,7 +48,12 @@ export class SimS3BucketAccess {
48
48
  * listed anywhere, and nothing happens outside watch mode.
49
49
  */
50
50
  mountFilesystem(bucketName, directoryPath, options = {}) {
51
- this.required(bucketName).configureSimStorage(new FilesystemS3BucketStorage({ directoryPath }));
51
+ this.required(bucketName).configureSimStorage(new FilesystemS3BucketStorage({
52
+ directoryPath,
53
+ ...(options.additionalFileExtensions !== undefined && {
54
+ additionalFileExtensions: options.additionalFileExtensions,
55
+ }),
56
+ }));
52
57
  this.mountWatches.register(bucketName, directoryPath, options);
53
58
  }
54
59
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"sim-s3-bucket-access.js","sourceRoot":"","sources":["../../../../src/service/s3/bucket/sim-s3-bucket-access.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAEpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gDAAgD,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAQrE;;;;;;;GAOG;AACH,MAAM,OAAO,iBAAiB;IACX,OAAO,CAA4C;IACnD,kBAAkB,CAA2B;IAC7C,YAAY,GAAG,IAAI,iBAAiB,EAAE,CAAC;IAExD,YAAY,UAAuC;QACjD,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;QAClC,IAAI,CAAC,kBAAkB,GAAG,UAAU,CAAC,kBAAkB,CAAC;IAC1D,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,UAAoC;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAA6B,CAAC,CAAC;QAC/D,aAAa,CAAC,MAAM,EAAE,uBAAuB,UAAU,EAAE,CAAC,CAAC;QAE3D,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,UAAoC;QACtC,OAAO,cAAc,CACnB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,UAAU,EACpC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CACnC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,UAAoC;QAC7C,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,aAAa,EAAE,CAAC;IACnD,CAAC;IAED;;;;;;;;OAQG;IACH,eAAe,CACb,UAAoC,EACpC,aAAqB,EACrB,OAAO,GAAgC,EAAE;QAEzC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,mBAAmB,CAC3C,IAAI,yBAAyB,CAAC,EAAE,aAAa,EAAE,CAAC,CACjD,CAAC;QACF,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;IACjE,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,kBAAkB;QAChB,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;IAC9B,CAAC;CACF"}
1
+ {"version":3,"file":"sim-s3-bucket-access.js","sourceRoot":"","sources":["../../../../src/service/s3/bucket/sim-s3-bucket-access.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAEpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gDAAgD,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAQrE;;;;;;;GAOG;AACH,MAAM,OAAO,iBAAiB;IACX,OAAO,CAA4C;IACnD,kBAAkB,CAA2B;IAC7C,YAAY,GAAG,IAAI,iBAAiB,EAAE,CAAC;IAExD,YAAY,UAAuC;QACjD,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;QAClC,IAAI,CAAC,kBAAkB,GAAG,UAAU,CAAC,kBAAkB,CAAC;IAC1D,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,UAAoC;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAA6B,CAAC,CAAC;QAC/D,aAAa,CAAC,MAAM,EAAE,uBAAuB,UAAU,EAAE,CAAC,CAAC;QAE3D,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,UAAoC;QACtC,OAAO,cAAc,CACnB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,UAAU,EACpC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CACnC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,UAAoC;QAC7C,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,aAAa,EAAE,CAAC;IACnD,CAAC;IAED;;;;;;;;OAQG;IACH,eAAe,CACb,UAAoC,EACpC,aAAqB,EACrB,OAAO,GAAgC,EAAE;QAEzC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,mBAAmB,CAC3C,IAAI,yBAAyB,CAAC;YAC5B,aAAa;YACb,GAAG,CAAC,OAAO,CAAC,wBAAwB,KAAK,SAAS,IAAI;gBACpD,wBAAwB,EAAE,OAAO,CAAC,wBAAwB;aAC3D,CAAC;SACH,CAAC,CACH,CAAC;QACF,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;IACjE,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,kBAAkB;QAChB,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;IAC9B,CAAC;CACF"}
@@ -27,5 +27,17 @@ export interface SimS3MountFilesystemOptions {
27
27
  * build one reload. The default suits a generator writing its output.
28
28
  */
29
29
  readonly settleMs?: number | undefined;
30
+ /**
31
+ * File extensions to serve in addition to the usual web ones.
32
+ *
33
+ * A mounted Bucket only serves files whose extension is on a cautious list —
34
+ * the web's own types, and nothing else — so that pointing a Bucket at a
35
+ * directory cannot be talked into reading whatever else is in it. A site
36
+ * serving a data file of its own needs its extension named here: a pinyin
37
+ * dictionary's `.freq`, a `.wasm` module, a `.pdf`.
38
+ *
39
+ * Added to the list rather than replacing it, and a leading dot is optional.
40
+ */
41
+ readonly additionalFileExtensions?: readonly string[] | undefined;
30
42
  }
31
43
  //# sourceMappingURL=sim-s3-mount.type.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sim-s3-mount.type.d.ts","sourceRoot":"","sources":["../../../../src/service/s3/mount/sim-s3-mount.type.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,WAAW,sBAAsB;IACrC,MAAM,IAAI,IAAI,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAC;IAErD;;;;;;OAMG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACxC"}
1
+ {"version":3,"file":"sim-s3-mount.type.d.ts","sourceRoot":"","sources":["../../../../src/service/s3/mount/sim-s3-mount.type.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,WAAW,sBAAsB;IACrC,MAAM,IAAI,IAAI,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAC;IAErD;;;;;;OAMG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAEvC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,wBAAwB,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;CACnE"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * What filesystem-backed simulated S3 storage will touch.
3
+ *
4
+ * The lists themselves, kept apart from the checks in
5
+ * `s3-filesystem-safety.ts` that apply them: this file answers "what is
6
+ * allowed" and that one answers "is this allowed", and only this one changes
7
+ * when the web grows another file type.
8
+ */
9
+ /**
10
+ * Default directory names that are safe to use as filesystem storage roots.
11
+ */
12
+ export declare const defaultAllowedDirectoryNames: readonly ["assets", "build", "dist", "out", "public", "static", "www"];
13
+ /**
14
+ * Write an extension the way `path.extname` reports one.
15
+ *
16
+ * A caller thinking about their own files says `.freq` or `freq` without
17
+ * meaning anything by the difference, and gets the same answer either way.
18
+ *
19
+ * An empty one is refused rather than normalised. `path.extname` reports `.`
20
+ * for a name ending in a dot, so normalising `""` to `.` would quietly turn a
21
+ * stray entry in a mount's list into permission to serve `secret.` — which is
22
+ * not something anybody asked for by passing an empty string.
23
+ */
24
+ export declare function normaliseExtension(extension: string): string;
25
+ /**
26
+ * Cautious list of allowed file extensions for simulated S3 objects. This is to
27
+ * try and avoid reading or writing other files that might be unsafe.
28
+ *
29
+ * A mount adds to this rather than replacing it — see
30
+ * `additionalFileExtensions` on the mount options. The list is long, general
31
+ * and the reason the check is worth having, so a project needing one more
32
+ * extension should not have to restate the other twenty-odd to get it, nor be
33
+ * able to drop `.html` by forgetting it.
34
+ */
35
+ export declare const defaultAllowedObjectFileExtensions: Set<string>;
36
+ //# sourceMappingURL=s3-filesystem-allowed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"s3-filesystem-allowed.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/storage/filesystem/s3-filesystem-allowed.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;GAEG;AACH,eAAO,MAAM,4BAA4B,YACvC,QAAQ,EACR,OAAO,EACP,MAAM,EACN,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,KAAK,CACG,CAAC;AAEX;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAY5D;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,kCAAkC,aAuB7C,CAAC"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * What filesystem-backed simulated S3 storage will touch.
3
+ *
4
+ * The lists themselves, kept apart from the checks in
5
+ * `s3-filesystem-safety.ts` that apply them: this file answers "what is
6
+ * allowed" and that one answers "is this allowed", and only this one changes
7
+ * when the web grows another file type.
8
+ */
9
+ /**
10
+ * Default directory names that are safe to use as filesystem storage roots.
11
+ */
12
+ export const defaultAllowedDirectoryNames = [
13
+ "assets",
14
+ "build",
15
+ "dist",
16
+ "out",
17
+ "public",
18
+ "static",
19
+ "www",
20
+ ];
21
+ /**
22
+ * Write an extension the way `path.extname` reports one.
23
+ *
24
+ * A caller thinking about their own files says `.freq` or `freq` without
25
+ * meaning anything by the difference, and gets the same answer either way.
26
+ *
27
+ * An empty one is refused rather than normalised. `path.extname` reports `.`
28
+ * for a name ending in a dot, so normalising `""` to `.` would quietly turn a
29
+ * stray entry in a mount's list into permission to serve `secret.` — which is
30
+ * not something anybody asked for by passing an empty string.
31
+ */
32
+ export function normaliseExtension(extension) {
33
+ const lowered = extension.trim().toLowerCase();
34
+ if (lowered === "" || lowered === ".") {
35
+ throw new Error(`Filesystem S3 storage file extension must not be empty. Got: ${JSON.stringify(extension)}`);
36
+ }
37
+ return lowered.startsWith(".") ? lowered : `.${lowered}`;
38
+ }
39
+ /**
40
+ * Cautious list of allowed file extensions for simulated S3 objects. This is to
41
+ * try and avoid reading or writing other files that might be unsafe.
42
+ *
43
+ * A mount adds to this rather than replacing it — see
44
+ * `additionalFileExtensions` on the mount options. The list is long, general
45
+ * and the reason the check is worth having, so a project needing one more
46
+ * extension should not have to restate the other twenty-odd to get it, nor be
47
+ * able to drop `.html` by forgetting it.
48
+ */
49
+ export const defaultAllowedObjectFileExtensions = new Set([
50
+ ".css",
51
+ ".eot",
52
+ ".gif",
53
+ ".htm",
54
+ ".html",
55
+ ".ico",
56
+ ".jpeg",
57
+ ".jpg",
58
+ ".js",
59
+ ".json",
60
+ ".map",
61
+ ".mjs",
62
+ ".otf",
63
+ ".png",
64
+ ".svg",
65
+ ".ttc",
66
+ ".ttf",
67
+ ".txt",
68
+ ".webp",
69
+ ".woff",
70
+ ".woff2",
71
+ ".xml",
72
+ ]);
73
+ //# sourceMappingURL=s3-filesystem-allowed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"s3-filesystem-allowed.js","sourceRoot":"","sources":["../../../../../src/service/s3/storage/filesystem/s3-filesystem-allowed.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,QAAQ;IACR,OAAO;IACP,MAAM;IACN,KAAK;IACL,QAAQ;IACR,QAAQ;IACR,KAAK;CACG,CAAC;AAEX;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAAiB;IAClD,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAE/C,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CACb,gEAAgE,IAAI,CAAC,SAAS,CAC5E,SAAS,CACV,EAAE,CACJ,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;AAC3D,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,kCAAkC,GAAG,IAAI,GAAG,CAAC;IACxD,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,OAAO;IACP,MAAM;IACN,OAAO;IACP,MAAM;IACN,KAAK;IACL,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,OAAO;IACP,OAAO;IACP,QAAQ;IACR,MAAM;CACP,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"s3-filesystem-object-metadata.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/storage/filesystem/s3-filesystem-object-metadata.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhE;;GAEG;AACH,wBAAgB,gCAAgC,CAC9C,GAAG,EAAE,MAAM,GACV,mBAAmB,CAWrB"}
1
+ {"version":3,"file":"s3-filesystem-object-metadata.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/storage/filesystem/s3-filesystem-object-metadata.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhE;;GAEG;AACH,wBAAgB,gCAAgC,CAC9C,GAAG,EAAE,MAAM,GACV,mBAAmB,CASrB"}
@@ -4,13 +4,12 @@ import { SimS3ObjectMetadata } from "../../object/s3-object.js";
4
4
  * Make up reasonable metadata for an Object based on the file on disk.
5
5
  */
6
6
  export function metadataForFilesystemS3ObjectKey(key) {
7
- const contentType = contentTypeForFilesystemS3ObjectKey(key);
8
- /* v8 ignore if -- defensive fallback */
9
- if (contentType === undefined) {
10
- return new SimS3ObjectMetadata();
11
- }
12
7
  return new SimS3ObjectMetadata({
13
- "content-type": contentType,
8
+ // Octet-stream for anything the table below has never heard of, which is
9
+ // what S3 reports for an object whose type it was never told. That case
10
+ // arrives by way of `additionalFileExtensions`: the table is the web's own
11
+ // types, and the option exists for files that are not one of them.
12
+ "content-type": contentTypeForFilesystemS3ObjectKey(key) ?? "application/octet-stream",
14
13
  });
15
14
  }
16
15
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"s3-filesystem-object-metadata.js","sourceRoot":"","sources":["../../../../../src/service/s3/storage/filesystem/s3-filesystem-object-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhE;;GAEG;AACH,MAAM,UAAU,gCAAgC,CAC9C,GAAW;IAEX,MAAM,WAAW,GAAG,mCAAmC,CAAC,GAAG,CAAC,CAAC;IAE7D,wCAAwC;IACxC,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,IAAI,mBAAmB,EAAE,CAAC;IACnC,CAAC;IAED,OAAO,IAAI,mBAAmB,CAAC;QAC7B,cAAc,EAAE,WAAW;KAC5B,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,SAAS,mCAAmC,CAAC,GAAW;IACtD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAElD,OAAO,uBAAuB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,uBAAuB,GAAgC,IAAI,GAAG,CAAC;IACnE,CAAC,MAAM,EAAE,UAAU,CAAC;IACpB,CAAC,MAAM,EAAE,+BAA+B,CAAC;IACzC,CAAC,MAAM,EAAE,WAAW,CAAC;IACrB,CAAC,OAAO,EAAE,WAAW,CAAC;IACtB,CAAC,MAAM,EAAE,WAAW,CAAC;IACrB,CAAC,MAAM,EAAE,cAAc,CAAC;IACxB,CAAC,OAAO,EAAE,YAAY,CAAC;IACvB,CAAC,MAAM,EAAE,YAAY,CAAC;IACtB,CAAC,KAAK,EAAE,iBAAiB,CAAC;IAC1B,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAC3B,CAAC,OAAO,EAAE,kBAAkB,CAAC;IAC7B,CAAC,MAAM,EAAE,kBAAkB,CAAC;IAC5B,CAAC,MAAM,EAAE,WAAW,CAAC;IACrB,CAAC,MAAM,EAAE,UAAU,CAAC;IACpB,CAAC,MAAM,EAAE,eAAe,CAAC;IACzB,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAC3B,CAAC,MAAM,EAAE,UAAU,CAAC;IACpB,CAAC,MAAM,EAAE,YAAY,CAAC;IACtB,CAAC,OAAO,EAAE,YAAY,CAAC;IACvB,CAAC,OAAO,EAAE,WAAW,CAAC;IACtB,CAAC,QAAQ,EAAE,YAAY,CAAC;IACxB,CAAC,MAAM,EAAE,iBAAiB,CAAC;CAC5B,CAAC,CAAC"}
1
+ {"version":3,"file":"s3-filesystem-object-metadata.js","sourceRoot":"","sources":["../../../../../src/service/s3/storage/filesystem/s3-filesystem-object-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhE;;GAEG;AACH,MAAM,UAAU,gCAAgC,CAC9C,GAAW;IAEX,OAAO,IAAI,mBAAmB,CAAC;QAC7B,yEAAyE;QACzE,wEAAwE;QACxE,2EAA2E;QAC3E,mEAAmE;QACnE,cAAc,EACZ,mCAAmC,CAAC,GAAG,CAAC,IAAI,0BAA0B;KACzE,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,SAAS,mCAAmC,CAAC,GAAW;IACtD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAElD,OAAO,uBAAuB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,uBAAuB,GAAgC,IAAI,GAAG,CAAC;IACnE,CAAC,MAAM,EAAE,UAAU,CAAC;IACpB,CAAC,MAAM,EAAE,+BAA+B,CAAC;IACzC,CAAC,MAAM,EAAE,WAAW,CAAC;IACrB,CAAC,OAAO,EAAE,WAAW,CAAC;IACtB,CAAC,MAAM,EAAE,WAAW,CAAC;IACrB,CAAC,MAAM,EAAE,cAAc,CAAC;IACxB,CAAC,OAAO,EAAE,YAAY,CAAC;IACvB,CAAC,MAAM,EAAE,YAAY,CAAC;IACtB,CAAC,KAAK,EAAE,iBAAiB,CAAC;IAC1B,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAC3B,CAAC,OAAO,EAAE,kBAAkB,CAAC;IAC7B,CAAC,MAAM,EAAE,kBAAkB,CAAC;IAC5B,CAAC,MAAM,EAAE,WAAW,CAAC;IACrB,CAAC,MAAM,EAAE,UAAU,CAAC;IACpB,CAAC,MAAM,EAAE,eAAe,CAAC;IACzB,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAC3B,CAAC,MAAM,EAAE,UAAU,CAAC;IACpB,CAAC,MAAM,EAAE,YAAY,CAAC;IACtB,CAAC,OAAO,EAAE,YAAY,CAAC;IACvB,CAAC,OAAO,EAAE,WAAW,CAAC;IACtB,CAAC,QAAQ,EAAE,YAAY,CAAC;IACxB,CAAC,MAAM,EAAE,iBAAiB,CAAC;CAC5B,CAAC,CAAC"}
@@ -1,5 +1,6 @@
1
1
  interface FilesystemS3StorageSafetyProperties {
2
2
  readonly allowedDirectoryNames?: readonly string[] | undefined;
3
+ readonly additionalFileExtensions?: readonly string[] | undefined;
3
4
  }
4
5
  /**
5
6
  * Safety checks for filesystem-based simulated S3 storage.
@@ -9,6 +10,7 @@ interface FilesystemS3StorageSafetyProperties {
9
10
  */
10
11
  export declare class FilesystemS3StorageSafety {
11
12
  private readonly allowedDirectoryNames;
13
+ private readonly allowedFileExtensions;
12
14
  constructor(properties?: FilesystemS3StorageSafetyProperties);
13
15
  /**
14
16
  * Throw an error if a directory path appears to be unsafe for use as S3
@@ -1 +1 @@
1
- {"version":3,"file":"s3-filesystem-safety.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/storage/filesystem/s3-filesystem-safety.ts"],"names":[],"mappings":"AAGA,UAAU,mCAAmC;IAC3C,QAAQ,CAAC,qBAAqB,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;CAChE;AAED;;;;;GAKG;AACH,qBAAa,yBAAyB;IACpC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAoB;IAE1D,YAAY,UAAU,GAAE,mCAAwC,EAG/D;IAED;;;OAGG;IACH,uBAAuB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAqCnD;IAED;;;OAGG;IACH,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAMrC;IAED;;;OAGG;IACH,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAQzC;IAED;;OAEG;IACH,2BAA2B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEhD;IAED,OAAO,CAAC,kCAAkC;CAG3C"}
1
+ {"version":3,"file":"s3-filesystem-safety.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/storage/filesystem/s3-filesystem-safety.ts"],"names":[],"mappings":"AASA,UAAU,mCAAmC;IAC3C,QAAQ,CAAC,qBAAqB,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAC/D,QAAQ,CAAC,wBAAwB,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;CACnE;AAED;;;;;GAKG;AACH,qBAAa,yBAAyB;IACpC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAoB;IAC1D,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAsB;IAE5D,YAAY,UAAU,GAAE,mCAAwC,EAS/D;IAED;;;OAGG;IACH,uBAAuB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAqCnD;IAED;;;OAGG;IACH,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAMrC;IAED;;;OAGG;IACH,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAQzC;IAED;;OAEG;IACH,2BAA2B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEhD;IAED,OAAO,CAAC,kCAAkC;CAG3C"}
@@ -1,5 +1,6 @@
1
1
  import { homedir } from "node:os";
2
2
  import path from "node:path";
3
+ import { defaultAllowedDirectoryNames, defaultAllowedObjectFileExtensions, normaliseExtension, } from "./s3-filesystem-allowed.js";
3
4
  /**
4
5
  * Safety checks for filesystem-based simulated S3 storage.
5
6
  *
@@ -8,9 +9,14 @@ import path from "node:path";
8
9
  */
9
10
  export class FilesystemS3StorageSafety {
10
11
  allowedDirectoryNames;
12
+ allowedFileExtensions;
11
13
  constructor(properties = {}) {
12
14
  const { allowedDirectoryNames = defaultAllowedDirectoryNames } = properties;
13
15
  this.allowedDirectoryNames = allowedDirectoryNames;
16
+ this.allowedFileExtensions = new Set([
17
+ ...defaultAllowedObjectFileExtensions,
18
+ ...(properties.additionalFileExtensions ?? []).map((extension) => normaliseExtension(extension)),
19
+ ]);
14
20
  }
15
21
  /**
16
22
  * Throw an error if a directory path appears to be unsafe for use as S3
@@ -62,50 +68,10 @@ export class FilesystemS3StorageSafety {
62
68
  * Check whether a sim S3 Object key has an allowed file extension.
63
69
  */
64
70
  isAllowedObjectKeyExtension(key) {
65
- return allowedObjectFileExtensions.has(path.extname(key).toLowerCase());
71
+ return this.allowedFileExtensions.has(path.extname(key).toLowerCase());
66
72
  }
67
73
  pathContainsParentDirectorySegment(value) {
68
74
  return value.split(/[\\/]/u).includes("..");
69
75
  }
70
76
  }
71
- /**
72
- * Default directory names that are safe to use as filesystem storage roots.
73
- */
74
- const defaultAllowedDirectoryNames = [
75
- "assets",
76
- "build",
77
- "dist",
78
- "out",
79
- "public",
80
- "static",
81
- "www",
82
- ];
83
- /**
84
- * Cautious list of allowed file extensions for simulated S3 objects. This is to
85
- * try and avoid reading or writing other files that might be unsafe.
86
- */
87
- const allowedObjectFileExtensions = new Set([
88
- ".css",
89
- ".eot",
90
- ".gif",
91
- ".htm",
92
- ".html",
93
- ".ico",
94
- ".jpeg",
95
- ".jpg",
96
- ".js",
97
- ".json",
98
- ".map",
99
- ".mjs",
100
- ".otf",
101
- ".png",
102
- ".svg",
103
- ".ttc",
104
- ".ttf",
105
- ".txt",
106
- ".webp",
107
- ".woff",
108
- ".woff2",
109
- ".xml",
110
- ]);
111
77
  //# sourceMappingURL=s3-filesystem-safety.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"s3-filesystem-safety.js","sourceRoot":"","sources":["../../../../../src/service/s3/storage/filesystem/s3-filesystem-safety.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"s3-filesystem-safety.js","sourceRoot":"","sources":["../../../../../src/service/s3/storage/filesystem/s3-filesystem-safety.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import { SimS3Object } from "../../object/s3-object.js";
3
3
  interface FilesystemS3BucketStorageProperties {
4
4
  readonly directoryPath: string;
5
5
  readonly allowedDirectoryNames?: readonly string[];
6
+ readonly additionalFileExtensions?: readonly string[];
6
7
  }
7
8
  /**
8
9
  * Maps simulated S3 Objects to files under a directory.
@@ -1 +1 @@
1
- {"version":3,"file":"s3-filesystem-storage.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/storage/filesystem/s3-filesystem-storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AASxD,UAAU,mCAAmC;IAC3C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,qBAAqB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACpD;AAED;;;;;;;GAOG;AACH,qBAAa,yBAA0B,YAAW,kBAAkB;IAClE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4B;IACnD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAyB;IAEpD,YAAY,UAAU,EAAE,mCAAmC,EAU1D;IAED;;OAEG;IACG,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CA4B7D;IAED;;OAEG;IACG,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAazD;IAED;;OAEG;IACG,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAOlD;IAED;;;;;;;;OAQG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQ1C;IAED,OAAO,CAAC,oBAAoB;CAiB7B"}
1
+ {"version":3,"file":"s3-filesystem-storage.d.ts","sourceRoot":"","sources":["../../../../../src/service/s3/storage/filesystem/s3-filesystem-storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AASxD,UAAU,mCAAmC;IAC3C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,qBAAqB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnD,QAAQ,CAAC,wBAAwB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACvD;AAED;;;;;;;GAOG;AACH,qBAAa,yBAA0B,YAAW,kBAAkB;IAClE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4B;IACnD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAyB;IAEpD,YAAY,UAAU,EAAE,mCAAmC,EAW1D;IAED;;OAEG;IACG,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CA4B7D;IAED;;OAEG;IACG,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAazD;IAED;;OAEG;IACG,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAOlD;IAED;;;;;;;;OAQG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQ1C;IAED,OAAO,CAAC,oBAAoB;CAiB7B"}
@@ -21,6 +21,7 @@ export class FilesystemS3BucketStorage {
21
21
  constructor(properties) {
22
22
  this.safety = new FilesystemS3StorageSafety({
23
23
  allowedDirectoryNames: properties.allowedDirectoryNames,
24
+ additionalFileExtensions: properties.additionalFileExtensions,
24
25
  });
25
26
  this.safety.assertSafeDirectoryPath(properties.directoryPath);
26
27
  this.directoryPath = path.resolve(properties.directoryPath);
@@ -1 +1 @@
1
- {"version":3,"file":"s3-filesystem-storage.js","sourceRoot":"","sources":["../../../../../src/service/s3/storage/filesystem/s3-filesystem-storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"s3-filesystem-storage.js","sourceRoot":"","sources":["../../../../../src/service/s3/storage/filesystem/s3-filesystem-storage.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kensio/yulin",
3
- "version": "1.8.0",
3
+ "version": "1.9.0",
4
4
  "description": "AWS system behaviour simulation for isolated unit testing",
5
5
  "repository": "https://github.com/KensioSoftware/yulin",
6
6
  "homepage": "https://yulinsim.dev/",