@visulima/storage 1.0.0-alpha.10 → 1.0.0-alpha.11

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 (61) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/handler/http/fetch/index.js +3 -3
  3. package/dist/handler/http/hono/index.js +3 -3
  4. package/dist/handler/http/nextjs/index.d.ts +1 -1
  5. package/dist/handler/http/nextjs/index.js +3 -3
  6. package/dist/handler/http/node/index.js +3 -3
  7. package/dist/handler/http/solid-start/index.d.ts +1 -1
  8. package/dist/handler/http/solid-start/index.js +3 -3
  9. package/dist/index.js +4 -4
  10. package/dist/openapi/index.js +5 -5
  11. package/dist/packem_shared/{AwsLightMetaStorage-BWSOtVaN.js → AwsLightMetaStorage-D9qWQt6q.js} +1 -1
  12. package/dist/packem_shared/{AwsLightStorage-Blv-GP4v.js → AwsLightStorage-CEJTYBVv.js} +2 -2
  13. package/dist/packem_shared/{AzureSMetaStorage-CFs-OYJT.js → AzureSMetaStorage-BEbXX9Uk.js} +1 -0
  14. package/dist/packem_shared/{AzureStorage-B0v048hG.js → AzureStorage-CH6nvQx8.js} +4 -4
  15. package/dist/packem_shared/{BaseTransformer-C2gLib6v.js → BaseTransformer-9965D4pb.js} +1 -0
  16. package/dist/packem_shared/{DiskStorage-Ck5yGQsq.js → DiskStorage-DziI2mwX.js} +4 -4
  17. package/dist/packem_shared/{DiskStorageWithChecksum-BRl-V5x2.js → DiskStorageWithChecksum-B_XY8_cO.js} +4 -2
  18. package/dist/packem_shared/{GCSMetaStorage-CNX_Nc7d.js → GCSMetaStorage-FypK8Tn1.js} +1 -1
  19. package/dist/packem_shared/{GCStorage-kdkXVebX.js → GCStorage-CasTo9rF.js} +5 -3
  20. package/dist/packem_shared/{LocalMetaStorage-CZHhKkMd.js → LocalMetaStorage-BnllcjV9.js} +2 -2
  21. package/dist/packem_shared/{MediaTransformer-D6658DL1.js → MediaTransformer-BErvw2vE.js} +6 -7
  22. package/dist/packem_shared/{Multipart-D2ryPMjD.js → Multipart-CDDlDOs7.js} +2 -2
  23. package/dist/packem_shared/{Multipart-CRV21AUU.js → Multipart-vxBL2VXm.js} +2 -2
  24. package/dist/packem_shared/{NetlifyBlobMetaStorage-DxZ5aDvD.js → NetlifyBlobMetaStorage-DIkZ2umW.js} +1 -1
  25. package/dist/packem_shared/{NetlifyBlobStorage-CLPtjHqd.js → NetlifyBlobStorage-DEpx_4q-.js} +2 -2
  26. package/dist/packem_shared/{Rest-DcxBMBjU.js → Rest-CEj3EhMj.js} +1 -1
  27. package/dist/packem_shared/{Rest-DjwU3puo.js → Rest-D14vM7aJ.js} +1 -1
  28. package/dist/packem_shared/{S3MetaStorage-Dz9aDabA.js → S3MetaStorage-yT4CznlV.js} +1 -0
  29. package/dist/packem_shared/{S3Storage-DHmTk-hU.js → S3Storage-B0scgwPa.js} +3 -2
  30. package/dist/packem_shared/{Tus-DFVlZHaX.js → Tus-Cjz87bpz.js} +1 -1
  31. package/dist/packem_shared/{Tus-DaN0FmOy.js → Tus-WOVg-YnB.js} +1 -1
  32. package/dist/packem_shared/{VercelBlobMetaStorage-Bd9F-VFm.js → VercelBlobMetaStorage-c0M-TvAR.js} +1 -1
  33. package/dist/packem_shared/{VercelBlobStorage-DD9LMOS6.js → VercelBlobStorage-wOYxv8F7.js} +2 -2
  34. package/dist/packem_shared/{aws-light-meta-storage-DKJBgbR6.js → aws-light-meta-storage-Ba2b_h-o.js} +1 -0
  35. package/dist/packem_shared/{base-handler-fetch-D4u2xits.js → base-handler-fetch-CinvR65S.js} +1 -1
  36. package/dist/packem_shared/{base-handler-node-DGzcHHAy.js → base-handler-node-c02H0AxN.js} +3 -2
  37. package/dist/packem_shared/{defaultCloudStorageFileNameValidation-DUuacjWv.js → defaultCloudStorageFileNameValidation-CGoYrGB2.js} +3 -3
  38. package/dist/packem_shared/{disk-storage-CD47QI30.js → disk-storage-DeivH-J5.js} +17 -11
  39. package/dist/packem_shared/{gcs-meta-storage-BiQ1dySn.js → gcs-meta-storage-B0Baj0Xr.js} +2 -1
  40. package/dist/packem_shared/{local-meta-storage-By-3SNBI.js → local-meta-storage-BlOk6m7F.js} +5 -7
  41. package/dist/packem_shared/{path-CR6YkPXX-7R1-9CMk.js → path-aV9lMdcn-DMU5H1-h.js} +4 -3
  42. package/dist/packem_shared/{restOpenApiSpec-D1JC_Jto.js → restOpenApiSpec-D1zbmid7.js} +1 -1
  43. package/dist/packem_shared/{s3-base-storage-C1DIHTYY.js → s3-base-storage-CG21uusd.js} +6 -3
  44. package/dist/packem_shared/{sharedGet-Cpo7QUyu.js → sharedGet-DAyJfjhl.js} +4 -5
  45. package/dist/packem_shared/{storage-C6NSXb8h.js → storage-CpJpqLdn.js} +21 -12
  46. package/dist/packem_shared/{transformOpenApiSpec-DWM5WtnN.js → transformOpenApiSpec-BC0r6PzI.js} +1 -1
  47. package/dist/packem_shared/{tusOpenApiSpec-mBZkl7he.js → tusOpenApiSpec-BLIjKf0s.js} +1 -1
  48. package/dist/packem_shared/{validator-BeX_lJet.js → validator-DuO17wFF.js} +1 -0
  49. package/dist/packem_shared/{xhrOpenApiSpec-B1V5Dxrj.js → xhrOpenApiSpec-kItrSAsc.js} +1 -1
  50. package/dist/storage/aws/index.js +2 -2
  51. package/dist/storage/aws-light/index.js +2 -2
  52. package/dist/storage/azure/index.js +2 -2
  53. package/dist/storage/gcs/index.js +2 -2
  54. package/dist/storage/local/index.js +3 -3
  55. package/dist/storage/netlify-blob/index.js +2 -2
  56. package/dist/storage/vercel-blob/index.js +2 -2
  57. package/dist/transformer/audio-transformer.js +1 -1
  58. package/dist/transformer/image-transformer.js +1 -1
  59. package/dist/transformer/index.js +2 -2
  60. package/dist/transformer/video-transformer.js +1 -1
  61. package/package.json +6 -7
package/CHANGELOG.md CHANGED
@@ -1,3 +1,25 @@
1
+ ## @visulima/storage [1.0.0-alpha.11](https://github.com/visulima/visulima/compare/@visulima/storage@1.0.0-alpha.10...@visulima/storage@1.0.0-alpha.11) (2026-04-08)
2
+
3
+ ### Bug Fixes
4
+
5
+ * remove deprecated baseUrl and downlevelIteration from tsconfigs ([a708366](https://github.com/visulima/visulima/commit/a708366b5c3bc73cfde480a712ed397bd921fb93))
6
+ * **storage:** fix tsconfig.eslint.json to extend local tsconfig ([af2628a](https://github.com/visulima/visulima/commit/af2628ae8a8bc6f10693a96c9280feb81da2c0eb))
7
+
8
+ ### Miscellaneous Chores
9
+
10
+ * **storage:** apply prettier formatting ([b2fa58d](https://github.com/visulima/visulima/commit/b2fa58d4364fa580b321b2df47a4264fd22eb070))
11
+ * **storage:** expand inline if-return to block syntax ([29671ac](https://github.com/visulima/visulima/commit/29671ac54f22ae01029f40be73dbd745a1e9a8f9))
12
+ * **storage:** migrate .prettierrc.cjs to prettier.config.js ([98b0fe6](https://github.com/visulima/visulima/commit/98b0fe60cd98ea4c33b8a54ee0b2229ad3c1d4c1))
13
+ * **storage:** remove empty dependency objects from package.json ([ddfeb08](https://github.com/visulima/visulima/commit/ddfeb08fd392ad2553a1ce833dd331540ecc8b09))
14
+
15
+
16
+ ### Dependencies
17
+
18
+ * **@visulima/pagination:** upgraded to 5.0.0-alpha.9
19
+ * **@visulima/fs:** upgraded to 5.0.0-alpha.7
20
+ * **@visulima/humanizer:** upgraded to 3.0.0-alpha.9
21
+ * **@visulima/path:** upgraded to 3.0.0-alpha.8
22
+
1
23
  ## @visulima/storage [1.0.0-alpha.10](https://github.com/visulima/visulima/compare/@visulima/storage@1.0.0-alpha.9...@visulima/storage@1.0.0-alpha.10) (2026-03-26)
2
24
 
3
25
  ### Features
@@ -1,4 +1,4 @@
1
- export { default as Multipart } from '../../../packem_shared/Multipart-D2ryPMjD.js';
2
- export { default as Rest } from '../../../packem_shared/Rest-DjwU3puo.js';
3
- export { Tus } from '../../../packem_shared/Tus-DFVlZHaX.js';
1
+ export { default as Multipart } from '../../../packem_shared/Multipart-CDDlDOs7.js';
2
+ export { default as Rest } from '../../../packem_shared/Rest-D14vM7aJ.js';
3
+ export { Tus } from '../../../packem_shared/Tus-Cjz87bpz.js';
4
4
  export { TUS_RESUMABLE, TUS_VERSION } from '../../../packem_shared/TUS_RESUMABLE-Dtfsffnj.js';
@@ -1,6 +1,6 @@
1
- import Multipart from '../../../packem_shared/Multipart-D2ryPMjD.js';
2
- import RestFetch from '../../../packem_shared/Rest-DjwU3puo.js';
3
- import { Tus } from '../../../packem_shared/Tus-DFVlZHaX.js';
1
+ import Multipart from '../../../packem_shared/Multipart-CDDlDOs7.js';
2
+ import RestFetch from '../../../packem_shared/Rest-D14vM7aJ.js';
3
+ import { Tus } from '../../../packem_shared/Tus-Cjz87bpz.js';
4
4
 
5
5
  const createHandlerFunction = (handler) => async (c) => {
6
6
  try {
@@ -58,4 +58,4 @@ export interface NextjsHandlerConfig<TFile extends UploadFile> extends UploadOpt
58
58
  * export const OPTIONS = handler;
59
59
  * ```
60
60
  */
61
- export declare const createHandler: <TFile extends UploadFile>(config: NextjsHandlerConfig<TFile>) => (request: NextRequest) => Promise<NextResponse>;
61
+ export declare const createHandler: <TFile extends UploadFile>(config: NextjsHandlerConfig<TFile>) => ((request: NextRequest) => Promise<NextResponse>);
@@ -1,7 +1,7 @@
1
1
  import { NextResponse } from 'next/server.js';
2
- import Multipart from '../../../packem_shared/Multipart-D2ryPMjD.js';
3
- import RestFetch from '../../../packem_shared/Rest-DjwU3puo.js';
4
- import { Tus } from '../../../packem_shared/Tus-DFVlZHaX.js';
2
+ import Multipart from '../../../packem_shared/Multipart-CDDlDOs7.js';
3
+ import RestFetch from '../../../packem_shared/Rest-D14vM7aJ.js';
4
+ import { Tus } from '../../../packem_shared/Tus-Cjz87bpz.js';
5
5
 
6
6
  const createHandler = (config) => {
7
7
  let handler;
@@ -1,6 +1,6 @@
1
- import Multipart from '../../../packem_shared/Multipart-CRV21AUU.js';
2
- import Rest from '../../../packem_shared/Rest-DcxBMBjU.js';
3
- import { Tus } from '../../../packem_shared/Tus-DaN0FmOy.js';
1
+ import Multipart from '../../../packem_shared/Multipart-vxBL2VXm.js';
2
+ import Rest from '../../../packem_shared/Rest-CEj3EhMj.js';
3
+ import { Tus } from '../../../packem_shared/Tus-WOVg-YnB.js';
4
4
  export { TUS_RESUMABLE, TUS_VERSION } from '../../../packem_shared/TUS_RESUMABLE-Dtfsffnj.js';
5
5
 
6
6
 
@@ -57,4 +57,4 @@ export interface SolidStartHandlerConfig<TFile extends UploadFile> extends Uploa
57
57
  * export const OPTIONS = handler;
58
58
  * ```
59
59
  */
60
- export declare const createSolidStartHandler: <TFile extends UploadFile>(config: SolidStartHandlerConfig<TFile>) => (event: APIEvent) => Promise<Response>;
60
+ export declare const createSolidStartHandler: <TFile extends UploadFile>(config: SolidStartHandlerConfig<TFile>) => ((event: APIEvent) => Promise<Response>);
@@ -1,6 +1,6 @@
1
- import Multipart from '../../../packem_shared/Multipart-D2ryPMjD.js';
2
- import RestFetch from '../../../packem_shared/Rest-DjwU3puo.js';
3
- import { Tus } from '../../../packem_shared/Tus-DFVlZHaX.js';
1
+ import Multipart from '../../../packem_shared/Multipart-CDDlDOs7.js';
2
+ import RestFetch from '../../../packem_shared/Rest-D14vM7aJ.js';
3
+ import { Tus } from '../../../packem_shared/Tus-Cjz87bpz.js';
4
4
 
5
5
  const createSolidStartHandler = (config) => {
6
6
  let handler;
package/dist/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  export { waitForStorage } from './packem_shared/waitForStorage-Cscw85sx.js';
2
- export { D as DiskStorage } from './packem_shared/disk-storage-CD47QI30.js';
3
- export { default as DiskStorageWithChecksum } from './packem_shared/DiskStorageWithChecksum-BRl-V5x2.js';
4
- export { L as LocalMetaStorage } from './packem_shared/local-meta-storage-By-3SNBI.js';
2
+ export { D as DiskStorage } from './packem_shared/disk-storage-DeivH-J5.js';
3
+ export { default as DiskStorageWithChecksum } from './packem_shared/DiskStorageWithChecksum-B_XY8_cO.js';
4
+ export { L as LocalMetaStorage } from './packem_shared/local-meta-storage-BlOk6m7F.js';
5
5
  export { default as MetaStorage } from './packem_shared/MetaStorage-pECeFOad.js';
6
- export { B as AbstractBaseStorage, d as defaultCloudStorageFileNameValidation, a as defaultFilesystemFileNameValidation } from './packem_shared/storage-C6NSXb8h.js';
6
+ export { B as AbstractBaseStorage, d as defaultCloudStorageFileNameValidation, a as defaultFilesystemFileNameValidation } from './packem_shared/storage-CpJpqLdn.js';
7
7
  export { ERRORS, ErrorMap, UploadError, isUploadError, throwErrorCode } from './packem_shared/ERRORS-D0apMqnc.js';
8
8
  export { createRetryWrapper, isRetryableError, retry } from './packem_shared/isRetryableError-Dycp7127.js';
9
9
  export { fileTypeFromBlob, fileTypeFromBuffer, fileTypeFromTokenizer, supportedExtensions, supportedMimeTypes } from 'file-type';
@@ -1,5 +1,5 @@
1
- export { default as restOpenApiSpec } from '../packem_shared/restOpenApiSpec-D1JC_Jto.js';
2
- export { sharedErrorSchemaObject, sharedFileMetaExampleObject, sharedFileMetaSchemaObject, sharedGet, sharedGetList } from '../packem_shared/sharedGet-Cpo7QUyu.js';
3
- export { default as transformOpenApiSpec } from '../packem_shared/transformOpenApiSpec-DWM5WtnN.js';
4
- export { default as tusOpenApiSpec } from '../packem_shared/tusOpenApiSpec-mBZkl7he.js';
5
- export { default as xhrOpenApiSpec } from '../packem_shared/xhrOpenApiSpec-B1V5Dxrj.js';
1
+ export { default as restOpenApiSpec } from '../packem_shared/restOpenApiSpec-D1zbmid7.js';
2
+ export { sharedErrorSchemaObject, sharedFileMetaExampleObject, sharedFileMetaSchemaObject, sharedGet, sharedGetList } from '../packem_shared/sharedGet-DAyJfjhl.js';
3
+ export { default as transformOpenApiSpec } from '../packem_shared/transformOpenApiSpec-BC0r6PzI.js';
4
+ export { default as tusOpenApiSpec } from '../packem_shared/tusOpenApiSpec-BLIjKf0s.js';
5
+ export { default as xhrOpenApiSpec } from '../packem_shared/xhrOpenApiSpec-kItrSAsc.js';
@@ -1,4 +1,4 @@
1
1
  import './MetaStorage-pECeFOad.js';
2
2
  import './Metadata-DRLXeJ0F.js';
3
- export { A as default } from './aws-light-meta-storage-DKJBgbR6.js';
3
+ export { A as default } from './aws-light-meta-storage-Ba2b_h-o.js';
4
4
  import './is-expired-CTThU1q5.js';
@@ -1,6 +1,6 @@
1
1
  import { Readable } from 'node:stream';
2
- import { S as S3BaseStorage } from './s3-base-storage-C1DIHTYY.js';
3
- import { a as AwsLightApiAdapter, A as AwsLightMetaStorage } from './aws-light-meta-storage-DKJBgbR6.js';
2
+ import { S as S3BaseStorage } from './s3-base-storage-CG21uusd.js';
3
+ import { a as AwsLightApiAdapter, A as AwsLightMetaStorage } from './aws-light-meta-storage-Ba2b_h-o.js';
4
4
  import AwsLightFile from './AwsLightFile-tTneXZgG.js';
5
5
 
6
6
  class AwsLightStorage extends S3BaseStorage {
@@ -33,6 +33,7 @@ class AzureMetaStorage extends MetaStorage {
33
33
  }
34
34
  this.containerClient = this.client.getContainerClient(metaConfig.containerName);
35
35
  }
36
+ config;
36
37
  client;
37
38
  containerClient;
38
39
  async get(id) {
@@ -1,12 +1,12 @@
1
1
  import { BlobServiceClient, StorageSharedKeyCredential } from '@azure/storage-blob';
2
2
  import { p as partMatch, d as detectFileTypeFromStream, g as getFileStatus } from './part-match-BMNqHDYD.js';
3
3
  import { throwErrorCode, ERRORS } from './ERRORS-D0apMqnc.js';
4
- import { B as BaseStorage, t as toMilliseconds } from './storage-C6NSXb8h.js';
4
+ import { B as BaseStorage, t as toMilliseconds } from './storage-CpJpqLdn.js';
5
5
  import { createRetryWrapper } from './isRetryableError-Dycp7127.js';
6
- import { L as LocalMetaStorage } from './local-meta-storage-By-3SNBI.js';
6
+ import { L as LocalMetaStorage } from './local-meta-storage-BlOk6m7F.js';
7
7
  import AzureFile from './AzureFile-CesgFzps.js';
8
- import AzureMetaStorage from './AzureSMetaStorage-CFs-OYJT.js';
9
- import { n as normalize } from './path-CR6YkPXX-7R1-9CMk.js';
8
+ import AzureMetaStorage from './AzureSMetaStorage-BEbXX9Uk.js';
9
+ import { n as normalize } from './path-aV9lMdcn-DMU5H1-h.js';
10
10
  import { h as hasContent } from './has-content-CY66ehMK.js';
11
11
 
12
12
  class AzureStorage extends BaseStorage {
@@ -16,6 +16,7 @@ class BaseTransformer {
16
16
  this.logger = logger;
17
17
  this.cache = config.cache ?? new NoOpCache();
18
18
  }
19
+ storage;
19
20
  config;
20
21
  logger;
21
22
  cache;
@@ -1,12 +1,12 @@
1
1
  import 'node:fs';
2
2
  import 'node:fs/promises';
3
3
  import 'node:stream';
4
- export { D as default } from './disk-storage-CD47QI30.js';
4
+ export { D as default } from './disk-storage-DeivH-J5.js';
5
5
  import './part-match-BMNqHDYD.js';
6
6
  import './ERRORS-D0apMqnc.js';
7
- import './storage-C6NSXb8h.js';
8
- import './local-meta-storage-By-3SNBI.js';
7
+ import './storage-CpJpqLdn.js';
8
+ import './local-meta-storage-BlOk6m7F.js';
9
9
  import './File-Bb3P23dr.js';
10
10
  import './update-size-CCGm6i1J.js';
11
11
  import './has-content-CY66ehMK.js';
12
- import './path-CR6YkPXX-7R1-9CMk.js';
12
+ import './path-aV9lMdcn-DMU5H1-h.js';
@@ -3,10 +3,10 @@ import { truncate } from 'node:fs/promises';
3
3
  import { Transform, pipeline } from 'node:stream';
4
4
  import { p as partMatch, d as detectFileTypeFromStream, g as getFileStatus } from './part-match-BMNqHDYD.js';
5
5
  import { throwErrorCode, ERRORS } from './ERRORS-D0apMqnc.js';
6
- import { D as DiskStorage, e as ensureFile, S as StreamLength, s as streamChecksum } from './disk-storage-CD47QI30.js';
6
+ import { D as DiskStorage, e as ensureFile, S as StreamLength, s as streamChecksum } from './disk-storage-DeivH-J5.js';
7
7
  import { LRUCache } from 'lru-cache';
8
8
  import { createHash } from 'node:crypto';
9
- import { r as remove } from './local-meta-storage-By-3SNBI.js';
9
+ import { r as remove } from './local-meta-storage-BlOk6m7F.js';
10
10
  import { u as updateSize } from './update-size-CCGm6i1J.js';
11
11
  import { h as hasContent } from './has-content-CY66ehMK.js';
12
12
 
@@ -23,6 +23,7 @@ class RangeChecksum extends Transform {
23
23
  this.hash = this.hashes.get(path) || createHash(this.hashes.algorithm);
24
24
  this.hashCopy = this.hash.copy();
25
25
  }
26
+ path;
26
27
  hash;
27
28
  hashCopy;
28
29
  hashes;
@@ -67,6 +68,7 @@ class RangeHasher extends LRUCache {
67
68
  });
68
69
  this.algorithm = algorithm;
69
70
  }
71
+ algorithm;
70
72
  /**
71
73
  * Returns the hex-encoded digest for a previously initialized path.
72
74
  * @param path File path identifier
@@ -1,7 +1,7 @@
1
1
  import 'node:crypto';
2
2
  import 'gaxios';
3
3
  import 'google-auth-library';
4
- export { G as default } from './gcs-meta-storage-BiQ1dySn.js';
4
+ export { G as default } from './gcs-meta-storage-B0Baj0Xr.js';
5
5
  import './MetaStorage-pECeFOad.js';
6
6
  import './Metadata-DRLXeJ0F.js';
7
7
  import './GCSConfig-vPP22kN6.js';
@@ -1,11 +1,11 @@
1
1
  import { randomUUID } from 'node:crypto';
2
2
  import { request } from 'gaxios';
3
3
  import { GoogleAuth } from 'google-auth-library';
4
- import { r as retryOptions, G as GCSMetaStorage, g as getRangeEnd, p as package_, b as buildContentRange } from './gcs-meta-storage-BiQ1dySn.js';
4
+ import { r as retryOptions, G as GCSMetaStorage, g as getRangeEnd, p as package_, b as buildContentRange } from './gcs-meta-storage-B0Baj0Xr.js';
5
5
  import { p as partMatch, d as detectFileTypeFromStream, g as getFileStatus } from './part-match-BMNqHDYD.js';
6
6
  import { throwErrorCode, ERRORS } from './ERRORS-D0apMqnc.js';
7
- import { B as BaseStorage, t as toMilliseconds } from './storage-C6NSXb8h.js';
8
- import { L as LocalMetaStorage } from './local-meta-storage-By-3SNBI.js';
7
+ import { B as BaseStorage, t as toMilliseconds } from './storage-CpJpqLdn.js';
8
+ import { L as LocalMetaStorage } from './local-meta-storage-BlOk6m7F.js';
9
9
  import GCSConfig from './GCSConfig-vPP22kN6.js';
10
10
  import GCSFile from './GCSFile-BIEunhAN.js';
11
11
  import { h as hasContent } from './has-content-CY66ehMK.js';
@@ -16,6 +16,8 @@ class FetchError extends Error {
16
16
  this.code = code;
17
17
  this.config = config;
18
18
  }
19
+ code;
20
+ config;
19
21
  name = "FetchError";
20
22
  }
21
23
 
@@ -3,5 +3,5 @@ import 'node:os';
3
3
  import './ERRORS-D0apMqnc.js';
4
4
  import './MetaStorage-pECeFOad.js';
5
5
  import './Metadata-DRLXeJ0F.js';
6
- import './path-CR6YkPXX-7R1-9CMk.js';
7
- export { L as default } from './local-meta-storage-By-3SNBI.js';
6
+ import './path-aV9lMdcn-DMU5H1-h.js';
7
+ export { L as default } from './local-meta-storage-BlOk6m7F.js';
@@ -83,6 +83,7 @@ class MediaTransformer {
83
83
  );
84
84
  }
85
85
  }
86
+ storage;
86
87
  imageTransformer;
87
88
  videoTransformer;
88
89
  audioTransformer;
@@ -208,12 +209,9 @@ class MediaTransformer {
208
209
  image: this.imageTransformer?.getCacheStats(),
209
210
  video: this.videoTransformer?.getCacheStats()
210
211
  };
211
- if (stats.image === void 0)
212
- delete stats.image;
213
- if (stats.video === void 0)
214
- delete stats.video;
215
- if (stats.audio === void 0)
216
- delete stats.audio;
212
+ if (stats.image === void 0) delete stats.image;
213
+ if (stats.video === void 0) delete stats.video;
214
+ if (stats.audio === void 0) delete stats.audio;
217
215
  return stats;
218
216
  }
219
217
  /**
@@ -908,8 +906,9 @@ class MediaTransformer {
908
906
  */
909
907
  // eslint-disable-next-line class-methods-use-this
910
908
  parseBooleanParameter(value) {
911
- if (value === null)
909
+ if (value === null) {
912
910
  return void 0;
911
+ }
913
912
  return value === "true" || value === "1";
914
913
  }
915
914
  /**
@@ -1,8 +1,8 @@
1
1
  import { Readable } from 'node:stream';
2
2
  import { parseMultipartRequest, MaxFileSizeExceededError, MultipartParseError } from '@remix-run/multipart-parser';
3
3
  import { c as createHttpError } from './headers-YLRp1dLo.js';
4
- import { V as ValidationError } from './validator-BeX_lJet.js';
5
- import { B as BaseHandlerFetch } from './base-handler-fetch-D4u2xits.js';
4
+ import { V as ValidationError } from './validator-DuO17wFF.js';
5
+ import { B as BaseHandlerFetch } from './base-handler-fetch-CinvR65S.js';
6
6
  import { M as MultipartBase } from './multipart-base-C994naBi.js';
7
7
 
8
8
  const RE_MIME = /^multipart\/.+|application\/x-www-form-urlencoded$/i;
@@ -2,8 +2,8 @@ import { Readable } from 'node:stream';
2
2
  import { parseMultipartRequest, MaxFileSizeExceededError, MultipartParseError } from '@remix-run/multipart-parser/node';
3
3
  import { c as createHttpError } from './headers-YLRp1dLo.js';
4
4
  import { g as getIdFromRequest } from './base-handler-core-BoAqTyz7.js';
5
- import { V as ValidationError } from './validator-BeX_lJet.js';
6
- import { B as BaseHandlerNode } from './base-handler-node-DGzcHHAy.js';
5
+ import { V as ValidationError } from './validator-DuO17wFF.js';
6
+ import { B as BaseHandlerNode } from './base-handler-node-c02H0AxN.js';
7
7
  import { M as MultipartBase } from './multipart-base-C994naBi.js';
8
8
 
9
9
  const RE_MIME = /^multipart\/.+|application\/x-www-form-urlencoded$/i;
@@ -1,4 +1,4 @@
1
- import { L as LocalMetaStorage } from './local-meta-storage-By-3SNBI.js';
1
+ import { L as LocalMetaStorage } from './local-meta-storage-BlOk6m7F.js';
2
2
 
3
3
  class NetlifyBlobMetaStorage extends LocalMetaStorage {
4
4
  constructor(config) {
@@ -1,8 +1,8 @@
1
1
  import { getStore } from '@netlify/blobs';
2
2
  import { g as getFileStatus, p as partMatch, a as detectFileTypeFromBuffer } from './part-match-BMNqHDYD.js';
3
- import { B as BaseStorage, t as toMilliseconds, u as updateMetadata } from './storage-C6NSXb8h.js';
3
+ import { B as BaseStorage, t as toMilliseconds, u as updateMetadata } from './storage-CpJpqLdn.js';
4
4
  import { createRetryWrapper } from './isRetryableError-Dycp7127.js';
5
- import { L as LocalMetaStorage } from './local-meta-storage-By-3SNBI.js';
5
+ import { L as LocalMetaStorage } from './local-meta-storage-BlOk6m7F.js';
6
6
  import NetlifyBlobFile from './NetlifyBlobFile-CXzyjqrD.js';
7
7
  import { u as updateSize } from './update-size-CCGm6i1J.js';
8
8
  import { h as hasContent } from './has-content-CY66ehMK.js';
@@ -1,7 +1,7 @@
1
1
  import { c as createHttpError } from './headers-YLRp1dLo.js';
2
2
  import { hasBody } from 'type-is';
3
3
  import { a as getHeader, b as getRequestStream, g as getIdFromRequest, r as readBody } from './base-handler-core-BoAqTyz7.js';
4
- import { B as BaseHandlerNode } from './base-handler-node-DGzcHHAy.js';
4
+ import { B as BaseHandlerNode } from './base-handler-node-c02H0AxN.js';
5
5
  import { R as RestBase, v as validateRequestBody, a as validateContentLength, e as extractFileInit, p as parseContentDisposition, b as parseChunkHeaders } from './rest-base-D9URIFkc.js';
6
6
 
7
7
  class Rest extends BaseHandlerNode {
@@ -1,7 +1,7 @@
1
1
  import { c as createHttpError } from './headers-YLRp1dLo.js';
2
2
  import { ERRORS } from './ERRORS-D0apMqnc.js';
3
3
  import { b as getRequestStream } from './base-handler-core-BoAqTyz7.js';
4
- import { B as BaseHandlerFetch } from './base-handler-fetch-D4u2xits.js';
4
+ import { B as BaseHandlerFetch } from './base-handler-fetch-CinvR65S.js';
5
5
  import { R as RestBase, c as parseContentDispositionValue } from './rest-base-D9URIFkc.js';
6
6
 
7
7
  class RestFetch extends BaseHandlerFetch {
@@ -27,6 +27,7 @@ class S3MetaStorage extends MetaStorage {
27
27
  }
28
28
  this.bucket = bucket;
29
29
  }
30
+ config;
30
31
  bucket;
31
32
  client;
32
33
  async get(id) {
@@ -1,16 +1,17 @@
1
1
  import { Readable } from 'node:stream';
2
2
  import { CreateMultipartUploadCommand, UploadPartCommand, CompleteMultipartUploadCommand, AbortMultipartUploadCommand, ListPartsCommand, GetObjectCommand, HeadObjectCommand, DeleteObjectCommand, CopyObjectCommand, ListObjectsV2Command, waitUntilBucketExists, S3Client } from '@aws-sdk/client-s3';
3
3
  import { fromIni } from '@aws-sdk/credential-providers';
4
- import { S as S3BaseStorage } from './s3-base-storage-C1DIHTYY.js';
4
+ import { S as S3BaseStorage } from './s3-base-storage-CG21uusd.js';
5
5
  import { ReadableStream } from 'node:stream/web';
6
6
  import { getSignedUrl } from '@aws-sdk/s3-request-presigner';
7
7
  import S3File from './S3File-DZiyk9Qt.js';
8
- import S3MetaStorage from './S3MetaStorage-Dz9aDabA.js';
8
+ import S3MetaStorage from './S3MetaStorage-yT4CznlV.js';
9
9
 
10
10
  class S3ClientAdapter {
11
11
  constructor(client, _bucket) {
12
12
  this.client = client;
13
13
  }
14
+ client;
14
15
  async createMultipartUpload(params) {
15
16
  const command = new CreateMultipartUploadCommand({
16
17
  ACL: params.ACL,
@@ -1,5 +1,5 @@
1
1
  import { c as createHttpError } from './headers-YLRp1dLo.js';
2
- import { B as BaseHandlerFetch } from './base-handler-fetch-D4u2xits.js';
2
+ import { B as BaseHandlerFetch } from './base-handler-fetch-CinvR65S.js';
3
3
  import { TusBase } from './TUS_RESUMABLE-Dtfsffnj.js';
4
4
  export { TUS_RESUMABLE, TUS_VERSION } from './TUS_RESUMABLE-Dtfsffnj.js';
5
5
 
@@ -1,7 +1,7 @@
1
1
  import { format } from 'node:url';
2
2
  import { c as createHttpError } from './headers-YLRp1dLo.js';
3
3
  import { a as getHeader, b as getRequestStream, g as getIdFromRequest, c as getBaseUrl } from './base-handler-core-BoAqTyz7.js';
4
- import { B as BaseHandlerNode } from './base-handler-node-DGzcHHAy.js';
4
+ import { B as BaseHandlerNode } from './base-handler-node-c02H0AxN.js';
5
5
  import { TusBase } from './TUS_RESUMABLE-Dtfsffnj.js';
6
6
  export { TUS_RESUMABLE, TUS_VERSION } from './TUS_RESUMABLE-Dtfsffnj.js';
7
7
 
@@ -1,4 +1,4 @@
1
- import { L as LocalMetaStorage } from './local-meta-storage-By-3SNBI.js';
1
+ import { L as LocalMetaStorage } from './local-meta-storage-BlOk6m7F.js';
2
2
 
3
3
  class VercelBlobMetaStorage extends LocalMetaStorage {
4
4
  constructor(config) {
@@ -1,7 +1,7 @@
1
1
  import { put, del, copy, list } from '@vercel/blob';
2
2
  import { g as getFileStatus, p as partMatch, a as detectFileTypeFromBuffer } from './part-match-BMNqHDYD.js';
3
- import { B as BaseStorage, t as toMilliseconds } from './storage-C6NSXb8h.js';
4
- import { L as LocalMetaStorage } from './local-meta-storage-By-3SNBI.js';
3
+ import { B as BaseStorage, t as toMilliseconds } from './storage-CpJpqLdn.js';
4
+ import { L as LocalMetaStorage } from './local-meta-storage-BlOk6m7F.js';
5
5
  import VercelBlobFile from './VercelBlobFile-BCg4aTEq.js';
6
6
  import { u as updateSize } from './update-size-CCGm6i1J.js';
7
7
  import { h as hasContent } from './has-content-CY66ehMK.js';
@@ -396,6 +396,7 @@ class AwsLightMetaStorage extends MetaStorage {
396
396
  throw error;
397
397
  });
398
398
  }
399
+ config;
399
400
  adapter;
400
401
  bucket;
401
402
  async get(id) {
@@ -1,7 +1,7 @@
1
1
  import { H as HeaderUtilities, h as httpErrorsExports } from './headers-YLRp1dLo.js';
2
2
  import { ERRORS, isUploadError } from './ERRORS-D0apMqnc.js';
3
3
  import { B as BaseHandlerCore, p as pick } from './base-handler-core-BoAqTyz7.js';
4
- import { i as isValidationError } from './validator-BeX_lJet.js';
4
+ import { i as isValidationError } from './validator-DuO17wFF.js';
5
5
  import { waitForStorage } from './waitForStorage-Cscw85sx.js';
6
6
 
7
7
  class BaseHandlerFetch extends BaseHandlerCore {
@@ -4,7 +4,7 @@ import mime from 'mime';
4
4
  import { ERRORS, isUploadError } from './ERRORS-D0apMqnc.js';
5
5
  import { match } from 'path-to-regexp';
6
6
  import { p as pick, B as BaseHandlerCore, s as setHeaders, d as getRealPath, u as uuidRegex } from './base-handler-core-BoAqTyz7.js';
7
- import { i as isValidationError } from './validator-BeX_lJet.js';
7
+ import { i as isValidationError } from './validator-DuO17wFF.js';
8
8
  import { waitForStorage } from './waitForStorage-Cscw85sx.js';
9
9
  import { PassThrough } from 'node:stream';
10
10
  import { e as convertHeadersToString } from './response-builder-BtnRiBUI.js';
@@ -82,8 +82,9 @@ const createRangeLimitedStream = (sourceStream, start, end) => {
82
82
  const pipeWithBackpressure = (source, destination, sendError) => {
83
83
  let isDestroyed = false;
84
84
  const cleanup = () => {
85
- if (isDestroyed)
85
+ if (isDestroyed) {
86
86
  return;
87
+ }
87
88
  isDestroyed = true;
88
89
  source.destroy();
89
90
  };
@@ -5,7 +5,7 @@ import 'type-is';
5
5
  import './NoOpMetrics-DhAk5rXc.js';
6
6
  import './cache-B88MXQ_2.js';
7
7
  import './ERRORS-D0apMqnc.js';
8
- export { B as BaseStorage, d as defaultCloudStorageFileNameValidation, a as defaultFilesystemFileNameValidation } from './storage-C6NSXb8h.js';
9
- import './validator-BeX_lJet.js';
10
- import './path-CR6YkPXX-7R1-9CMk.js';
8
+ export { B as BaseStorage, d as defaultCloudStorageFileNameValidation, a as defaultFilesystemFileNameValidation } from './storage-CpJpqLdn.js';
9
+ import './validator-DuO17wFF.js';
10
+ import './path-aV9lMdcn-DMU5H1-h.js';
11
11
  import './is-expired-CTThU1q5.js';
@@ -7,11 +7,11 @@ import require$$1 from 'fs';
7
7
  import { g as getFileStatus, p as partMatch, d as detectFileTypeFromStream } from './part-match-BMNqHDYD.js';
8
8
  import { throwErrorCode, isUploadError, ERRORS } from './ERRORS-D0apMqnc.js';
9
9
  import { createHash } from 'node:crypto';
10
- import { B as BaseStorage, a as defaultFilesystemFileNameValidation, t as toMilliseconds } from './storage-C6NSXb8h.js';
11
- import { a as assertValidFileOrDirectoryPath, g as getFileInfoType, e as ensureDir, t as toPath, i as isAccessible, L as LocalMetaStorage, b as readFile, r as remove } from './local-meta-storage-By-3SNBI.js';
10
+ import { B as BaseStorage, a as defaultFilesystemFileNameValidation, t as toMilliseconds } from './storage-CpJpqLdn.js';
11
+ import { a as assertValidFileOrDirectoryPath, g as getFileInfoType, e as ensureDir, t as toPath, i as isAccessible, L as LocalMetaStorage, b as readFile, r as remove } from './local-meta-storage-BlOk6m7F.js';
12
12
  import File from './File-Bb3P23dr.js';
13
13
  import { createRequire } from 'node:module';
14
- import { d as dirname, r as resolve, j as join, n as normalize, b as basename, i as isAbsolute } from './path-CR6YkPXX-7R1-9CMk.js';
14
+ import { d as dirname, r as resolve, j as join, n as normalize, b as basename, i as isAbsolute } from './path-aV9lMdcn-DMU5H1-h.js';
15
15
  import { u as updateSize } from './update-size-CCGm6i1J.js';
16
16
  import { h as hasContent } from './has-content-CY66ehMK.js';
17
17
 
@@ -35,7 +35,7 @@ const ensureFile = async (filePath) => {
35
35
  try {
36
36
  const stat = await lstat(filePath);
37
37
  if (!stat.isFile()) {
38
- throw new Error(`Ensure path exists, expected 'file', got '${getFileInfoType(stat)}'`);
38
+ throw new Error(`Ensure path exists, expected 'file', got '${String(getFileInfoType(stat))}'`);
39
39
  }
40
40
  } catch (error) {
41
41
  if (error.code === "ENOENT") {
@@ -56,7 +56,7 @@ class WalkError extends Error {
56
56
  * @param root The root directory path where the walk operation started or encountered the error.
57
57
  */
58
58
  constructor(cause, root) {
59
- super(`${cause instanceof Error ? cause.message : cause} for path "${root}"`);
59
+ super(`${cause instanceof Error ? cause.message : String(cause)} for path "${root}"`);
60
60
  this.cause = cause;
61
61
  this.root = root;
62
62
  }
@@ -136,26 +136,28 @@ async function* walk(directory, {
136
136
  return;
137
137
  }
138
138
  try {
139
- for await (const entry of await readdir(directory, {
139
+ const entries = await readdir(directory, {
140
140
  withFileTypes: true
141
- })) {
141
+ });
142
+ for (const entry of entries) {
142
143
  let path = join(directory, entry.name);
143
144
  if (entry.isSymbolicLink()) {
144
145
  if (followSymlinks) {
145
146
  path = await realpath(path);
146
147
  } else if (includeSymlinks && walkInclude(path, extensions, mappedMatch, mappedSkip)) {
147
148
  yield {
148
- isDirectory: entry.isDirectory,
149
- isFile: entry.isFile,
150
- isSymbolicLink: entry.isSymbolicLink,
149
+ isDirectory: () => entry.isDirectory(),
150
+ isFile: () => entry.isFile(),
151
+ isSymbolicLink: () => entry.isSymbolicLink(),
151
152
  name: entry.name,
152
153
  path
153
154
  };
155
+ continue;
154
156
  } else {
155
157
  continue;
156
158
  }
157
159
  }
158
- if (entry.isSymbolicLink() || entry.isDirectory()) {
160
+ if (entry.isDirectory()) {
159
161
  yield* walk(path, {
160
162
  extensions,
161
163
  followSymlinks,
@@ -321,6 +323,9 @@ class StreamChecksum extends Transform {
321
323
  this.encoding = encoding;
322
324
  this.hash = createHash(algorithm);
323
325
  }
326
+ checksum;
327
+ algorithm;
328
+ encoding;
324
329
  length = 0;
325
330
  digest = "";
326
331
  hash;
@@ -369,6 +374,7 @@ class StreamLength extends Transform {
369
374
  super();
370
375
  this.limit = limit;
371
376
  }
377
+ limit;
372
378
  length = 0;
373
379
  /**
374
380
  * Transform method that counts bytes and enforces size limits.
@@ -7,7 +7,7 @@ import GCSConfig from './GCSConfig-vPP22kN6.js';
7
7
  import { h as hasContent } from './has-content-CY66ehMK.js';
8
8
 
9
9
  var name = "@visulima/storage";
10
- var version = "1.0.0-alpha.9";
10
+ var version = "1.0.0-alpha.10";
11
11
  const package_ = {
12
12
  name: name,
13
13
  version: version};
@@ -84,6 +84,7 @@ class GCSMetaStorage extends MetaStorage {
84
84
  });
85
85
  }
86
86
  }
87
+ config;
87
88
  authClient;
88
89
  storageBaseURI;
89
90
  uploadBaseURI;
@@ -3,7 +3,7 @@ import { tmpdir } from 'node:os';
3
3
  import { throwErrorCode, ERRORS } from './ERRORS-D0apMqnc.js';
4
4
  import MetaStorage from './MetaStorage-pECeFOad.js';
5
5
  import { stringifyMetadata, parseMetadata } from './Metadata-DRLXeJ0F.js';
6
- import { a as normalizeWindowsPath, d as dirname, n as normalize, j as join } from './path-CR6YkPXX-7R1-9CMk.js';
6
+ import { a as normalizeWindowsPath, d as dirname, n as normalize, j as join } from './path-aV9lMdcn-DMU5H1-h.js';
7
7
  import { createRequire } from 'node:module';
8
8
 
9
9
  const F_OK = 0;
@@ -48,7 +48,7 @@ const ensureDir = async (directory) => {
48
48
  try {
49
49
  const fileInfo = await lstat(directory);
50
50
  if (!fileInfo.isDirectory()) {
51
- throw new Error(`Ensure path exists, expected 'dir', got '${getFileInfoType(fileInfo)}'`);
51
+ throw new Error(`Ensure path exists, expected 'dir', got '${String(getFileInfoType(fileInfo))}'`);
52
52
  }
53
53
  return;
54
54
  } catch (error) {
@@ -64,7 +64,7 @@ const ensureDir = async (directory) => {
64
64
  }
65
65
  const fileInfo = await lstat(directory);
66
66
  if (!fileInfo.isDirectory()) {
67
- throw new Error(`Ensure path exists, expected 'dir', got '${getFileInfoType(fileInfo)}'`);
67
+ throw new Error(`Ensure path exists, expected 'dir', got '${String(getFileInfoType(fileInfo))}'`, { cause: error });
68
68
  }
69
69
  }
70
70
  };
@@ -485,7 +485,7 @@ const remove = async (path, options = {}) => {
485
485
  } catch {
486
486
  }
487
487
  try {
488
- await rm(path, { force: true, maxRetries: options?.maxRetries, recursive: true, retryDelay: options?.retryDelay });
488
+ await rm(path, { force: true, maxRetries: options.maxRetries, recursive: true, retryDelay: options.retryDelay });
489
489
  } catch {
490
490
  }
491
491
  };
@@ -558,9 +558,7 @@ const writeFile = async (path, content, options) => {
558
558
  await writeFile$1(temporaryPath, toUint8Array(content), { encoding: options.encoding, flag: options.flag });
559
559
  if (pathExists && !options.overwrite) {
560
560
  stat$1 = await stat(path);
561
- if (options.chown === void 0) {
562
- options.chown = { gid: stat$1.gid, uid: stat$1.uid };
563
- }
561
+ options.chown ??= { gid: stat$1.gid, uid: stat$1.uid };
564
562
  await rename(path, `${path}.bak`);
565
563
  }
566
564
  if (options.chown) {
@@ -8,6 +8,7 @@ const normalizeWindowsPath = (input = "") => {
8
8
  const UNC_REGEX = /^[/\\]{2}/;
9
9
  const IS_ABSOLUTE_RE = /^[/\\](?![/\\])|^[/\\]{2}(?!\.)|^[A-Z]:[/\\]/i;
10
10
  const DRIVE_LETTER_RE = /^[A-Z]:$/i;
11
+ const TRAILING_SLASH_RE = /\/$/;
11
12
  const cwd = () => {
12
13
  if (typeof process.cwd === "function") {
13
14
  return process.cwd().replaceAll("\\", "/");
@@ -111,7 +112,7 @@ const join = (...segments) => {
111
112
  continue;
112
113
  }
113
114
  if (path2.length > 0) {
114
- const pathTrailing = path2[path2.length - 1] === "/";
115
+ const pathTrailing = path2.at(-1) === "/";
115
116
  const segLeading = seg[0] === "/";
116
117
  const both = pathTrailing && segLeading;
117
118
  if (both) {
@@ -144,9 +145,9 @@ const resolve = function(...arguments_) {
144
145
  return resolvedPath.length > 0 ? resolvedPath : ".";
145
146
  };
146
147
  const dirname = (path2) => {
147
- const segments = normalizeWindowsPath(path2).replace(/\/$/, "").split("/").slice(0, -1);
148
+ const segments = normalizeWindowsPath(path2).replace(TRAILING_SLASH_RE, "").split("/").slice(0, -1);
148
149
  if (segments.length === 1 && DRIVE_LETTER_RE.test(segments[0])) {
149
- segments[0] += "/";
150
+ segments[0] = `${segments[0]}/`;
150
151
  }
151
152
  return segments.join("/") || (isAbsolute(path2) ? "/" : ".");
152
153
  };
@@ -1,6 +1,6 @@
1
1
  import { createHash } from 'node:crypto';
2
2
  import { createPaginationMetaSchemaObject, createPaginationSchemaObject } from '@visulima/pagination';
3
- import { sharedFileMetaSchemaObject, sharedErrorSchemaObject, sharedFileMetaExampleObject, sharedGetList, sharedGet, sharedGetMeta } from './sharedGet-Cpo7QUyu.js';
3
+ import { sharedFileMetaSchemaObject, sharedErrorSchemaObject, sharedFileMetaExampleObject, sharedGetList, sharedGet, sharedGetMeta } from './sharedGet-DAyJfjhl.js';
4
4
 
5
5
  const swaggerSpec = (origin, path, options) => {
6
6
  const { supportedTransformerFormat, tags, transformer } = { tags: ["REST"], transformer: false, ...options };
@@ -1,9 +1,9 @@
1
1
  import { Readable } from 'node:stream';
2
2
  import { p as partMatch, d as detectFileTypeFromStream, g as getFileStatus } from './part-match-BMNqHDYD.js';
3
3
  import { throwErrorCode, ERRORS } from './ERRORS-D0apMqnc.js';
4
- import { p as parseDuration, B as BaseStorage, b as parseBytes, t as toMilliseconds } from './storage-C6NSXb8h.js';
4
+ import { p as parseDuration, B as BaseStorage, b as parseBytes, t as toMilliseconds } from './storage-CpJpqLdn.js';
5
5
  import { createRetryWrapper } from './isRetryableError-Dycp7127.js';
6
- import { L as LocalMetaStorage } from './local-meta-storage-By-3SNBI.js';
6
+ import { L as LocalMetaStorage } from './local-meta-storage-BlOk6m7F.js';
7
7
  import { u as updateSize } from './update-size-CCGm6i1J.js';
8
8
  import { h as hasContent } from './has-content-CY66ehMK.js';
9
9
  import { i as isExpired } from './is-expired-CTThU1q5.js';
@@ -110,7 +110,10 @@ class S3BaseStorage extends BaseStorage {
110
110
  Bucket: this.bucket,
111
111
  ContentType: file.contentType,
112
112
  Key: file.name,
113
- Metadata: mapValues({ originalName: file.originalName, ...file.metadata }, (value) => encodeURI(String(value)))
113
+ Metadata: mapValues(
114
+ { originalName: file.originalName, ...file.metadata },
115
+ (value) => encodeURI(String(value))
116
+ )
114
117
  })
115
118
  );
116
119
  } catch {
@@ -14,8 +14,9 @@ const createParameterGroup = (parameters, groupName) => parameters.map((paramete
14
14
  };
15
15
  });
16
16
  const getTransformationParameters = (transform, format = ["jpeg", "png", "webp", "avif", "tiff", "gif", "mp4", "webm", "mkv", "ogg", "mp3", "wav", "aac", "flac"]) => {
17
- if (!transform)
17
+ if (!transform) {
18
18
  return [];
19
+ }
19
20
  const commonParameters = createParameterGroup(
20
21
  [
21
22
  {
@@ -519,8 +520,7 @@ const getOrganizedTransformationParameters = (transform, format = ["jpeg", "png"
519
520
  return { groups, parameters };
520
521
  };
521
522
  const getTransformationHeaders = (transform) => {
522
- if (!transform)
523
- return {};
523
+ if (!transform) return {};
524
524
  const headers = {
525
525
  "X-Media-Type": {
526
526
  description: "Type of media (image/video/audio)",
@@ -545,8 +545,7 @@ const getTransformationHeaders = (transform) => {
545
545
  return headers;
546
546
  };
547
547
  const getTransformationErrorResponses = (transform) => {
548
- if (!transform)
549
- return {};
548
+ if (!transform) return {};
550
549
  return {
551
550
  400: {
552
551
  content: {
@@ -6,10 +6,20 @@ import NoOpMetrics from './NoOpMetrics-DhAk5rXc.js';
6
6
  import { N as NoOpCache } from './cache-B88MXQ_2.js';
7
7
  import { ErrorMap, throwErrorCode, ERRORS } from './ERRORS-D0apMqnc.js';
8
8
  import { LRUCache } from 'lru-cache';
9
- import { a as Validator } from './validator-BeX_lJet.js';
10
- import { n as normalize, i as isAbsolute } from './path-CR6YkPXX-7R1-9CMk.js';
9
+ import { a as Validator } from './validator-DuO17wFF.js';
10
+ import { n as normalize, i as isAbsolute } from './path-aV9lMdcn-DMU5H1-h.js';
11
11
  import { i as isExpired } from './is-expired-CTThU1q5.js';
12
12
 
13
+ const PARSE_BYTES_REGEX = /^(?<value>-?(?:\d+(([.,])\d+)*)?[.,]?\d+) *(?<type>bytes?|b|kb|kib|mb|mib|gb|gib|tb|tib|pb|pib|eb|eib|zb|zib|yb|yib|(kilo|kibi|mega|mebi|giga|gibi|tera|tebi|peta|pebi|exa|exbi|zetta|zebi|yotta|yobi)?bytes)?$/i;
14
+ const KIBI_REGEX = /^KIBI/;
15
+ const MIBI_REGEX = /^MIBI/;
16
+ const GIBI_REGEX = /^GIBI/;
17
+ const TEBI_REGEX = /^TEBI/;
18
+ const PEBI_REGEX = /^PEBI/;
19
+ const EXBI_REGEX = /^EXBI/;
20
+ const ZEBI_REGEX = /^ZEBI/;
21
+ const YIBI_REGEX = /^YIBI/;
22
+ const IB_SUFFIX_REGEX = /^(.)IB$/;
13
23
  const BYTE_SIZES = {
14
24
  iec: [
15
25
  {
@@ -176,7 +186,7 @@ const fromBase = (base) => {
176
186
  if (base === 10) {
177
187
  return 1e3;
178
188
  }
179
- throw new TypeError(`Unsupported base.`);
189
+ throw new Error("Unsupported base.");
180
190
  };
181
191
  const parseBytes = (value, options) => {
182
192
  const config = {
@@ -191,15 +201,13 @@ const parseBytes = (value, options) => {
191
201
  if (value.length > 100) {
192
202
  throw new TypeError("Value exceeds the maximum length of 100 characters.");
193
203
  }
194
- const match = /^(?<value>-?(?:\d+(([.,])\d+)*)?[.,]?\d+) *(?<type>bytes?|b|kb|kib|mb|mib|gb|gib|tb|tib|pb|pib|eb|eib|zb|zib|yb|yib|(kilo|kibi|mega|mebi|giga|gibi|tera|tebi|peta|pebi|exa|exbi|zetta|zebi|yotta|yobi)?bytes)?$/i.exec(
195
- value
196
- );
204
+ const match = PARSE_BYTES_REGEX.exec(value);
197
205
  const groups = match?.groups;
198
206
  if (!groups) {
199
207
  return Number.NaN;
200
208
  }
201
209
  const localizedNumber = parseLocalizedNumber(groups.value, config.locale);
202
- const type = (groups.type ?? "Bytes").toUpperCase().replace(/^KIBI/, "KILO").replace(/^MIBI/, "MEGA").replace(/^GIBI/, "GIGA").replace(/^TEBI/, "TERA").replace(/^PEBI/, "PETA").replace(/^EXBI/, "EXA").replace(/^ZEBI/, "ZETTA").replace(/^YIBI/, "YOTTA").replace(/^(.)IB$/, "$1B");
210
+ const type = (groups.type ?? "Bytes").toUpperCase().replace(KIBI_REGEX, "KILO").replace(MIBI_REGEX, "MEGA").replace(GIBI_REGEX, "GIGA").replace(TEBI_REGEX, "TERA").replace(PEBI_REGEX, "PETA").replace(EXBI_REGEX, "EXA").replace(ZEBI_REGEX, "ZETTA").replace(YIBI_REGEX, "YOTTA").replace(IB_SUFFIX_REGEX, "$1B");
203
211
  const level = BYTE_SIZES[config.units].findIndex((unit) => unit.short[0].toUpperCase() === type[0]);
204
212
  const base = fromBase(config.base);
205
213
  return localizedNumber * base ** level;
@@ -294,14 +302,15 @@ const durationLanguage = createDurationLanguage(
294
302
  const validateDurationLanguage = (language) => {
295
303
  const requiredProperties = ["y", "mo", "w", "d", "h", "m", "s", "ms", "future", "past"];
296
304
  for (const property of requiredProperties) {
297
- if (!Object.prototype.hasOwnProperty.call(language, property)) {
305
+ if (!Object.hasOwn(language, property)) {
298
306
  throw new TypeError(`Missing required property: ${property}`);
299
307
  }
300
308
  }
301
309
  if (typeof language.future !== "string" || typeof language.past !== "string") {
302
310
  throw new TypeError("Properties future and past must be of type string");
303
311
  }
304
- for (const property of ["y", "mo", "w", "d", "h", "m", "s", "ms"]) {
312
+ const unitProperties = ["y", "mo", "w", "d", "h", "m", "s", "ms"];
313
+ for (const property of unitProperties) {
305
314
  if (typeof language[property] !== "string" && typeof language[property] !== "function") {
306
315
  throw new TypeError(`Property ${property} must be of type string or function`);
307
316
  }
@@ -340,6 +349,7 @@ const ESCAPE_REGEX = /[-/\\^$*+?.()|[\]{}]/g;
340
349
  const ISO_FORMAT = /^PT(?:(\d+)H)?(?:(\d+)M)?(?:(\d+)S)?$/i;
341
350
  const COLON_FORMAT = /^(?:(\d+):)?(?:(\d+):)?(\d+)$/;
342
351
  const NUMERIC_STRING_REGEX = /^[+-]?\d+(?:\.\d+)?$/;
352
+ const SIGN_PREFIX_REGEX = /^[-+]/;
343
353
  const parseDuration = (value, options) => {
344
354
  if (typeof value !== "string" || value.length === 0) {
345
355
  return void 0;
@@ -378,14 +388,13 @@ const parseDuration = (value, options) => {
378
388
  if (colonMatch) {
379
389
  let hours = 0;
380
390
  let minutes = 0;
381
- let seconds = 0;
382
391
  if (colonMatch[2] !== void 0) {
383
392
  hours = Number.parseInt(colonMatch[1] ?? "0", 10);
384
393
  minutes = Number.parseInt(colonMatch[2], 10);
385
394
  } else if (colonMatch[1] !== void 0) {
386
395
  minutes = Number.parseInt(colonMatch[1], 10);
387
396
  }
388
- seconds = Number.parseInt(colonMatch[3] ?? "0", 10);
397
+ const seconds = Number.parseInt(colonMatch[3] ?? "0", 10);
389
398
  return hours * 36e5 + minutes * 6e4 + seconds * 1e3;
390
399
  }
391
400
  const currentUnitMapKeys = Object.keys(currentUnitMap);
@@ -409,7 +418,7 @@ const parseDuration = (value, options) => {
409
418
  }
410
419
  const trimmedNumberString = numberString.trim();
411
420
  const sign = trimmedNumberString.startsWith("-") ? -1 : 1;
412
- const absNumberString = trimmedNumberString.replace(/^[-+]/, "");
421
+ const absNumberString = trimmedNumberString.replace(SIGN_PREFIX_REGEX, "");
413
422
  const parsedNumber = Number.parseFloat(absNumberString);
414
423
  const unitKey = currentUnitMap[unitString.toLowerCase()];
415
424
  if (unitKey === void 0) {
@@ -1,6 +1,6 @@
1
1
  import { createHash } from 'node:crypto';
2
2
  import { createPaginationMetaSchemaObject, createPaginationSchemaObject } from '@visulima/pagination';
3
- import { sharedFileMetaSchemaObject, sharedErrorSchemaObject, sharedFileMetaExampleObject } from './sharedGet-Cpo7QUyu.js';
3
+ import { sharedFileMetaSchemaObject, sharedErrorSchemaObject, sharedFileMetaExampleObject } from './sharedGet-DAyJfjhl.js';
4
4
 
5
5
  const swaggerSpec = (path = "/", tags = ["Transform"]) => {
6
6
  const pathHash = createHash("sha256").update(path).digest("base64");
@@ -1,6 +1,6 @@
1
1
  import { createHash } from 'node:crypto';
2
2
  import { createPaginationMetaSchemaObject, createPaginationSchemaObject } from '@visulima/pagination';
3
- import { sharedGet, sharedFileMetaSchemaObject, sharedErrorSchemaObject, sharedFileMetaExampleObject, sharedGetList, sharedGetMeta } from './sharedGet-Cpo7QUyu.js';
3
+ import { sharedGet, sharedFileMetaSchemaObject, sharedErrorSchemaObject, sharedFileMetaExampleObject, sharedGetList, sharedGetMeta } from './sharedGet-DAyJfjhl.js';
4
4
 
5
5
  const swaggerSpec = (path, options) => {
6
6
  const { supportedTransformerFormat, tags, transformer } = { tags: ["Tus"], transformer: false, ...options };
@@ -39,6 +39,7 @@ class Validator {
39
39
  constructor(prefix = "ValidationError") {
40
40
  this.prefix = prefix;
41
41
  }
42
+ prefix;
42
43
  validators = {};
43
44
  /**
44
45
  * Adds validation rules to the validator.
@@ -1,6 +1,6 @@
1
1
  import { createHash } from 'node:crypto';
2
2
  import { createPaginationMetaSchemaObject, createPaginationSchemaObject } from '@visulima/pagination';
3
- import { sharedFileMetaSchemaObject, sharedErrorSchemaObject, sharedFileMetaExampleObject, sharedGetList, sharedGet, sharedGetMeta } from './sharedGet-Cpo7QUyu.js';
3
+ import { sharedFileMetaSchemaObject, sharedErrorSchemaObject, sharedFileMetaExampleObject, sharedGetList, sharedGet, sharedGetMeta } from './sharedGet-DAyJfjhl.js';
4
4
 
5
5
  const swaggerSpec = (origin, path, options) => {
6
6
  const { supportedTransformerFormat, tags, transformer } = { tags: ["Multipart"], transformer: false, ...options };
@@ -1,3 +1,3 @@
1
1
  export { default as S3File } from '../../packem_shared/S3File-DZiyk9Qt.js';
2
- export { default as S3MetaStorage } from '../../packem_shared/S3MetaStorage-Dz9aDabA.js';
3
- export { default as S3Storage } from '../../packem_shared/S3Storage-DHmTk-hU.js';
2
+ export { default as S3MetaStorage } from '../../packem_shared/S3MetaStorage-yT4CznlV.js';
3
+ export { default as S3Storage } from '../../packem_shared/S3Storage-B0scgwPa.js';
@@ -1,3 +1,3 @@
1
1
  export { default as AwsLightFile } from '../../packem_shared/AwsLightFile-tTneXZgG.js';
2
- export { A as AwsLightMetaStorage } from '../../packem_shared/aws-light-meta-storage-DKJBgbR6.js';
3
- export { default as AwsLightStorage } from '../../packem_shared/AwsLightStorage-Blv-GP4v.js';
2
+ export { A as AwsLightMetaStorage } from '../../packem_shared/aws-light-meta-storage-Ba2b_h-o.js';
3
+ export { default as AwsLightStorage } from '../../packem_shared/AwsLightStorage-CEJTYBVv.js';
@@ -1,3 +1,3 @@
1
1
  export { default as AzureFile } from '../../packem_shared/AzureFile-CesgFzps.js';
2
- export { default as AzureSMetaStorage } from '../../packem_shared/AzureSMetaStorage-CFs-OYJT.js';
3
- export { default as AzureStorage } from '../../packem_shared/AzureStorage-B0v048hG.js';
2
+ export { default as AzureSMetaStorage } from '../../packem_shared/AzureSMetaStorage-BEbXX9Uk.js';
3
+ export { default as AzureStorage } from '../../packem_shared/AzureStorage-CH6nvQx8.js';
@@ -1,4 +1,4 @@
1
1
  export { default as GCSConfig } from '../../packem_shared/GCSConfig-vPP22kN6.js';
2
2
  export { default as GCSFile } from '../../packem_shared/GCSFile-BIEunhAN.js';
3
- export { G as GCSMetaStorage } from '../../packem_shared/gcs-meta-storage-BiQ1dySn.js';
4
- export { default as GCStorage } from '../../packem_shared/GCStorage-kdkXVebX.js';
3
+ export { G as GCSMetaStorage } from '../../packem_shared/gcs-meta-storage-B0Baj0Xr.js';
4
+ export { default as GCStorage } from '../../packem_shared/GCStorage-CasTo9rF.js';
@@ -1,3 +1,3 @@
1
- export { D as DiskStorage } from '../../packem_shared/disk-storage-CD47QI30.js';
2
- export { default as DiskStorageWithChecksum } from '../../packem_shared/DiskStorageWithChecksum-BRl-V5x2.js';
3
- export { L as LocalMetaStorage } from '../../packem_shared/local-meta-storage-By-3SNBI.js';
1
+ export { D as DiskStorage } from '../../packem_shared/disk-storage-DeivH-J5.js';
2
+ export { default as DiskStorageWithChecksum } from '../../packem_shared/DiskStorageWithChecksum-B_XY8_cO.js';
3
+ export { L as LocalMetaStorage } from '../../packem_shared/local-meta-storage-BlOk6m7F.js';
@@ -1,3 +1,3 @@
1
1
  export { default as NetlifyBlobFile } from '../../packem_shared/NetlifyBlobFile-CXzyjqrD.js';
2
- export { default as NetlifyBlobMetaStorage } from '../../packem_shared/NetlifyBlobMetaStorage-DxZ5aDvD.js';
3
- export { default as NetlifyBlobStorage } from '../../packem_shared/NetlifyBlobStorage-CLPtjHqd.js';
2
+ export { default as NetlifyBlobMetaStorage } from '../../packem_shared/NetlifyBlobMetaStorage-DIkZ2umW.js';
3
+ export { default as NetlifyBlobStorage } from '../../packem_shared/NetlifyBlobStorage-DEpx_4q-.js';
@@ -1,3 +1,3 @@
1
1
  export { default as VercelBlobFile } from '../../packem_shared/VercelBlobFile-BCg4aTEq.js';
2
- export { default as VercelBlobMetaStorage } from '../../packem_shared/VercelBlobMetaStorage-Bd9F-VFm.js';
3
- export { default as VercelBlobStorage } from '../../packem_shared/VercelBlobStorage-DD9LMOS6.js';
2
+ export { default as VercelBlobMetaStorage } from '../../packem_shared/VercelBlobMetaStorage-c0M-TvAR.js';
3
+ export { default as VercelBlobStorage } from '../../packem_shared/VercelBlobStorage-wOYxv8F7.js';
@@ -1,5 +1,5 @@
1
1
  import { Input, BufferSource, ALL_FORMATS, Output, BufferTarget, Conversion, Mp3OutputFormat, WavOutputFormat, OggOutputFormat, FlacOutputFormat, AdtsOutputFormat } from 'mediabunny';
2
- import BaseTransformer from '../packem_shared/BaseTransformer-C2gLib6v.js';
2
+ import BaseTransformer from '../packem_shared/BaseTransformer-9965D4pb.js';
3
3
  import { isValidMediaType, getFormatFromContentType } from '../packem_shared/isValidMediaType-BeDgiObq.js';
4
4
 
5
5
  class AudioTransformer extends BaseTransformer {
@@ -1,6 +1,6 @@
1
1
  import { Readable } from 'node:stream';
2
2
  import sharp from 'sharp';
3
- import BaseTransformer from '../packem_shared/BaseTransformer-C2gLib6v.js';
3
+ import BaseTransformer from '../packem_shared/BaseTransformer-9965D4pb.js';
4
4
  import { isValidMediaType, getFormatFromContentType } from '../packem_shared/isValidMediaType-BeDgiObq.js';
5
5
 
6
6
  class ImageTransformer extends BaseTransformer {
@@ -1,4 +1,4 @@
1
- export { default as BaseTransformer } from '../packem_shared/BaseTransformer-C2gLib6v.js';
2
- export { default as MediaTransformer } from '../packem_shared/MediaTransformer-D6658DL1.js';
1
+ export { default as BaseTransformer } from '../packem_shared/BaseTransformer-9965D4pb.js';
2
+ export { default as MediaTransformer } from '../packem_shared/MediaTransformer-BErvw2vE.js';
3
3
  export { getFormatFromContentType, isKnownContentType, isValidMediaType, validateMediaFile } from '../packem_shared/isValidMediaType-BeDgiObq.js';
4
4
  export { default as ValidationError } from '../packem_shared/ValidationError-BfF1aE4h.js';
@@ -1,5 +1,5 @@
1
1
  import { Input, BufferSource, ALL_FORMATS, Output, BufferTarget, Conversion, Mp4OutputFormat, WebMOutputFormat, OggOutputFormat, MkvOutputFormat } from 'mediabunny';
2
- import BaseTransformer from '../packem_shared/BaseTransformer-C2gLib6v.js';
2
+ import BaseTransformer from '../packem_shared/BaseTransformer-9965D4pb.js';
3
3
  import { isValidMediaType, getFormatFromContentType } from '../packem_shared/isValidMediaType-BeDgiObq.js';
4
4
 
5
5
  class VideoTransformer extends BaseTransformer {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@visulima/storage",
3
- "version": "1.0.0-alpha.10",
3
+ "version": "1.0.0-alpha.11",
4
4
  "description": "Visulima upload - Store files in a web-accessible location via a simplified API. Can automatically scale and rotate images. Includes S3, Azure, GCS and local filesystem-based backends with the most convenient features of each.",
5
5
  "keywords": [
6
6
  "anolilab",
@@ -186,14 +186,14 @@
186
186
  "LICENSE.md"
187
187
  ],
188
188
  "dependencies": {
189
- "@remix-run/multipart-parser": "^0.14.2",
189
+ "@remix-run/multipart-parser": "0.15.0",
190
190
  "@sindresorhus/fnv1a": "3.1.0",
191
- "@visulima/pagination": "5.0.0-alpha.8",
192
- "file-type": "21.3.4",
193
- "lru-cache": "11.2.7",
191
+ "@visulima/pagination": "5.0.0-alpha.9",
192
+ "file-type": "22.0.0",
193
+ "lru-cache": "11.3.3",
194
194
  "mime": "^4.1.0",
195
195
  "nanoid": "5.1.7",
196
- "path-to-regexp": "^8.3.0",
196
+ "path-to-regexp": "8.4.2",
197
197
  "type-is": "^2.0.1"
198
198
  },
199
199
  "peerDependencies": {
@@ -276,7 +276,6 @@
276
276
  "optional": true
277
277
  }
278
278
  },
279
- "optionalDependencies": {},
280
279
  "engines": {
281
280
  "node": ">=22.13 <=25.x"
282
281
  },