@beyonk/tus-bunny-store 0.1.0-beta.1 → 0.1.0-beta.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAIjC,OAAO,EAAwB,MAAM,EAAE,SAAS,EAAC,MAAM,YAAY,CAAA;AACnE,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAA;AAIzD,MAAM,MAAM,OAAO,GAAG;IACpB;;OAEG;IACH,WAAW,EAAE,eAAe,CAAC,IAAI,CAAC,WAAW,CAAA;CAC9C,CAAA;AAqDD,qBAAa,UAAW,SAAQ,SAAS;;IAChC,WAAW,EAAE,eAAe,CAAC,IAAI,CAAC,WAAW,CAAA;gBAExC,OAAO,EAAE,OAAO;IA4FtB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA4CvC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;IAarD;;OAEG;IACG,KAAK,CACT,QAAQ,EAAE,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,QAAQ,EAChD,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC;IAgIZ,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAyBtC,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAO5E"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAKjC,OAAO,EAAwB,MAAM,EAAE,SAAS,EAAC,MAAM,YAAY,CAAA;AACnE,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAA;AAIzD,MAAM,MAAM,OAAO,GAAG;IACpB;;OAEG;IACH,WAAW,EAAE,eAAe,CAAC,IAAI,CAAC,WAAW,CAAA;CAC9C,CAAA;AAqDD,qBAAa,UAAW,SAAQ,SAAS;;IAChC,WAAW,EAAE,eAAe,CAAC,IAAI,CAAC,WAAW,CAAA;gBAExC,OAAO,EAAE,OAAO;IAsGtB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkCvC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;IAerD;;OAEG;IACG,KAAK,CACT,QAAQ,EAAE,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,QAAQ,EAChD,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC;IAmIZ,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA0BtC,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAO5E"}
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import stream from 'node:stream';
2
+ import { Buffer } from 'node:buffer';
2
3
  import debug from 'debug';
3
4
  import { ReadableStream } from 'node:stream/web';
4
5
  import { ERRORS, TUS_RESUMABLE, Upload, DataStore } from '@tus/utils';
@@ -59,6 +60,12 @@ export class BunnyStore extends DataStore {
59
60
  this.storageZone = options.storageZone;
60
61
  this.extensions = ['creation', 'creation-with-upload', 'creation-defer-length'];
61
62
  }
63
+ /**
64
+ * Normalize path for Bunny Storage - ensure it starts with /
65
+ */
66
+ #normalizePath(path) {
67
+ return path.startsWith('/') ? path : `/${path}`;
68
+ }
62
69
  /**
63
70
  * Get the path for the metadata info file
64
71
  */
@@ -81,7 +88,9 @@ export class BunnyStore extends DataStore {
81
88
  this.push(null);
82
89
  },
83
90
  });
84
- await BunnyStorageSDK.file.upload(this.storageZone, this.#infoKey(upload.id), nodeStreamToWebStream(metadataStream));
91
+ const metadataPath = this.#normalizePath(this.#infoKey(upload.id));
92
+ log(`[${upload.id}] uploading metadata to path: ${metadataPath}`);
93
+ await BunnyStorageSDK.file.upload(this.storageZone, metadataPath, nodeStreamToWebStream(metadataStream));
85
94
  log(`[${upload.id}] metadata file saved`);
86
95
  }
87
96
  /**
@@ -89,7 +98,8 @@ export class BunnyStore extends DataStore {
89
98
  */
90
99
  async #getMetadata(id) {
91
100
  try {
92
- const infoFile = await BunnyStorageSDK.file.get(this.storageZone, this.#infoKey(id));
101
+ const infoPath = this.#normalizePath(this.#infoKey(id));
102
+ const infoFile = await BunnyStorageSDK.file.get(this.storageZone, infoPath);
93
103
  const { stream: webStream } = await infoFile.data();
94
104
  const nodeStream = webStreamToNodeStream(webStream);
95
105
  const chunks = [];
@@ -131,40 +141,40 @@ export class BunnyStore extends DataStore {
131
141
  if (!upload.id) {
132
142
  throw ERRORS.FILE_NOT_FOUND;
133
143
  }
144
+ const filePath = this.#normalizePath(upload.id);
145
+ log(`[${upload.id}] normalized file path: ${filePath}`);
134
146
  upload.storage = {
135
147
  type: 'bunny',
136
- path: upload.id,
148
+ path: filePath,
137
149
  bucket: BunnyStorageSDK.zone.name(this.storageZone),
138
150
  };
139
151
  upload.creation_date = new Date().toISOString();
140
- // Create an empty file to initialize the upload
141
- const emptyStream = new stream.Readable({
142
- read() {
143
- this.push(null);
144
- },
145
- });
146
- const uploadOptions = {};
147
- if (upload.metadata?.contentType) {
148
- uploadOptions.contentType = upload.metadata.contentType;
149
- }
152
+ // Don't create the actual file yet - Bunny Storage may not accept empty files
153
+ // The file will be created on the first write operation
154
+ // Only save the metadata to track the upload
150
155
  try {
151
- await BunnyStorageSDK.file.upload(this.storageZone, upload.id, nodeStreamToWebStream(emptyStream), uploadOptions);
152
156
  await this.#saveMetadata(upload);
153
- log(`[${upload.id}] upload created`);
157
+ log(`[${upload.id}] upload created (metadata only, file will be created on first write)`);
154
158
  return upload;
155
159
  }
156
160
  catch (error) {
157
- log('[BunnyStore] create error', error);
161
+ log(`[BunnyStore] create error for path "${filePath}":`, error);
162
+ if (error instanceof Error) {
163
+ log(`[BunnyStore] error message: ${error.message}`);
164
+ log(`[BunnyStore] error stack: ${error.stack}`);
165
+ }
158
166
  throw ERRORS.FILE_WRITE_ERROR;
159
167
  }
160
168
  }
161
169
  async read(file_id) {
170
+ const filePath = this.#normalizePath(file_id);
162
171
  try {
163
- const { stream: webStream } = await BunnyStorageSDK.file.download(this.storageZone, file_id);
172
+ log(`[${file_id}] reading from path: ${filePath}`);
173
+ const { stream: webStream } = await BunnyStorageSDK.file.download(this.storageZone, filePath);
164
174
  return webStreamToNodeStream(webStream);
165
175
  }
166
176
  catch (error) {
167
- log('[BunnyStore] read error', error);
177
+ log(`[BunnyStore] read error for path "${filePath}":`, error);
168
178
  throw ERRORS.FILE_NOT_FOUND;
169
179
  }
170
180
  }
@@ -192,8 +202,10 @@ export class BunnyStore extends DataStore {
192
202
  const chunks = [];
193
203
  // If there's existing data, download it first
194
204
  if (upload.offset > 0) {
205
+ const existingFilePath = this.#normalizePath(id);
195
206
  try {
196
- const existingFile = await BunnyStorageSDK.file.get(this.storageZone, id);
207
+ log(`[${id}] downloading existing file from path: ${existingFilePath}`);
208
+ const existingFile = await BunnyStorageSDK.file.get(this.storageZone, existingFilePath);
197
209
  const { stream: existingWebStream } = await existingFile.data();
198
210
  const existingNodeStream = webStreamToNodeStream(existingWebStream);
199
211
  for await (const chunk of existingNodeStream) {
@@ -201,7 +213,7 @@ export class BunnyStore extends DataStore {
201
213
  }
202
214
  }
203
215
  catch (error) {
204
- log(`[${id}] error downloading existing file:`, error);
216
+ log(`[${id}] error downloading existing file from path "${existingFilePath}":`, error);
205
217
  // If file doesn't exist yet, that's okay for offset 0
206
218
  if (upload.offset > 0) {
207
219
  isResolved = true;
@@ -241,7 +253,8 @@ export class BunnyStore extends DataStore {
241
253
  if (upload.metadata?.contentType) {
242
254
  uploadOptions.contentType = upload.metadata.contentType;
243
255
  }
244
- await BunnyStorageSDK.file.upload(this.storageZone, id, nodeStreamToWebStream(combinedStream), uploadOptions);
256
+ const uploadFilePath = this.#normalizePath(id);
257
+ await BunnyStorageSDK.file.upload(this.storageZone, uploadFilePath, nodeStreamToWebStream(combinedStream), uploadOptions);
245
258
  // Update metadata
246
259
  await this.#saveMetadata(upload);
247
260
  log(`[${id}] ${newOffset} bytes written`);
@@ -293,7 +306,8 @@ export class BunnyStore extends DataStore {
293
306
  const upload = metadata.file;
294
307
  // Get the actual file size from storage
295
308
  try {
296
- const fileInfo = await BunnyStorageSDK.file.get(this.storageZone, id);
309
+ const filePath = this.#normalizePath(id);
310
+ const fileInfo = await BunnyStorageSDK.file.get(this.storageZone, filePath);
297
311
  upload.offset = fileInfo.length;
298
312
  }
299
313
  catch (error) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAA;AAEhC,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAC,cAAc,EAAC,MAAM,iBAAiB,CAAA;AAE9C,OAAO,EAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAC,MAAM,YAAY,CAAA;AACnE,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAA;AAEzD,MAAM,GAAG,GAAG,KAAK,CAAC,mCAAmC,CAAC,CAAA;AActD;;GAEG;AACH,SAAS,qBAAqB,CAAC,UAA2B;IACxD,OAAO,IAAI,cAAc,CAAC;QACxB,KAAK,CAAC,UAAU;YACd,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAA0B,EAAE,EAAE;gBACnD,MAAM,UAAU,GAAG,KAAK,YAAY,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAA;gBAC9E,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;YAChC,CAAC,CAAC,CAAA;YACF,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACxB,UAAU,CAAC,KAAK,EAAE,CAAA;YACpB,CAAC,CAAC,CAAA;YACF,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC7B,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YACvB,CAAC,CAAC,CAAA;QACJ,CAAC;QACD,MAAM;YACJ,UAAU,CAAC,OAAO,EAAE,CAAA;QACtB,CAAC;KACF,CAAC,CAAA;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAAC,SAAqC;IAClE,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,EAAE,CAAA;IACpC,MAAM,UAAU,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC;QACrC,KAAK,CAAC,IAAI;YACR,IAAI,CAAC;gBACH,MAAM,EAAC,IAAI,EAAE,KAAK,EAAC,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;gBACzC,IAAI,IAAI,EAAE,CAAC;oBACT,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACjB,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;gBAC/B,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,OAAO,CAAC,KAAc,CAAC,CAAA;YAC9B,CAAC;QACH,CAAC;KACF,CAAC,CAAA;IAEF,OAAO,UAAU,CAAA;AACnB,CAAC;AAED,MAAM,OAAO,UAAW,SAAQ,SAAS;IAChC,WAAW,CAAkC;IAEpD,YAAY,OAAgB;QAC1B,KAAK,EAAE,CAAA;QAEP,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;QACvD,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAA;QAEtC,IAAI,CAAC,UAAU,GAAG,CAAC,UAAU,EAAE,sBAAsB,EAAE,uBAAuB,CAAC,CAAA;IACjF,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,EAAU;QACjB,OAAO,GAAG,EAAE,OAAO,CAAA;IACrB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,MAAc;QAChC,GAAG,CAAC,IAAI,MAAM,CAAC,EAAE,mBAAmB,CAAC,CAAA;QACrC,MAAM,QAAQ,GAAkB;YAC9B,IAAI,EAAE,MAAM;YACZ,aAAa,EAAE,aAAa;SAC7B,CAAA;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;QAC7C,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC;YACzC,IAAI;gBACF,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAA;gBACpC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACjB,CAAC;SACF,CAAC,CAAA;QAEF,MAAM,eAAe,CAAC,IAAI,CAAC,MAAM,CAC/B,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EACxB,qBAAqB,CAAC,cAAc,CAAC,CACtC,CAAA;QACD,GAAG,CAAC,IAAI,MAAM,CAAC,EAAE,uBAAuB,CAAC,CAAA;IAC3C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,EAAU;QAC3B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;YACpF,MAAM,EAAC,MAAM,EAAE,SAAS,EAAC,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;YACjD,MAAM,UAAU,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAA;YAEnD,MAAM,MAAM,GAAa,EAAE,CAAA;YAC3B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;gBACrC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACpB,CAAC;YAED,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;YAC5D,MAAM,QAAQ,GAAkB,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;YAExD,4BAA4B;YAC5B,QAAQ,CAAC,IAAI,GAAG,IAAI,MAAM,CAAC;gBACzB,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE;gBACpB,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI;gBACxB,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM;gBAC5B,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ;gBAChC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,OAAO;gBAC9B,aAAa,EAAE,QAAQ,CAAC,IAAI,CAAC,aAAa;aAC3C,CAAC,CAAA;YAEF,OAAO,QAAQ,CAAA;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAA;YAC5C,MAAM,MAAM,CAAC,cAAc,CAAA;QAC7B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,oBAAoB,CAAC,MAAc;QACjC,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,IAAI;YACzB,cAAc,EAAE,GAAG,MAAM,CAAC,cAAc,EAAE;YAC1C,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;YACzC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC;SACxC,CAAA;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAc;QACzB,GAAG,CAAC,IAAI,MAAM,CAAC,EAAE,mBAAmB,CAAC,CAAA;QACrC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,MAAM,CAAC,cAAc,CAAA;QAC7B,CAAC;QAED,MAAM,CAAC,OAAO,GAAG;YACf,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,MAAM,CAAC,EAAE;YACf,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;SACpD,CAAA;QAED,MAAM,CAAC,aAAa,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;QAE/C,gDAAgD;QAChD,MAAM,WAAW,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC;YACtC,IAAI;gBACF,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACjB,CAAC;SACF,CAAC,CAAA;QAEF,MAAM,aAAa,GAAuC,EAAE,CAAA;QAC5D,IAAI,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC;YACjC,aAAa,CAAC,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAA;QACzD,CAAC;QAED,IAAI,CAAC;YACH,MAAM,eAAe,CAAC,IAAI,CAAC,MAAM,CAC/B,IAAI,CAAC,WAAW,EAChB,MAAM,CAAC,EAAE,EACT,qBAAqB,CAAC,WAAW,CAAC,EAClC,aAAa,CACd,CAAA;YAED,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;YAEhC,GAAG,CAAC,IAAI,MAAM,CAAC,EAAE,kBAAkB,CAAC,CAAA;YACpC,OAAO,MAAM,CAAA;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAA;YACvC,MAAM,MAAM,CAAC,gBAAgB,CAAA;QAC/B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAe;QACxB,IAAI,CAAC;YACH,MAAM,EAAC,MAAM,EAAE,SAAS,EAAC,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,QAAQ,CAC7D,IAAI,CAAC,WAAW,EAChB,OAAO,CACR,CAAA;YACD,OAAO,qBAAqB,CAAC,SAAS,CAAC,CAAA;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAA;YACrC,MAAM,MAAM,CAAC,cAAc,CAAA;QAC7B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CACT,QAAgD,EAChD,EAAU,EACV,MAAc;QAEd,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;YACvB,MAAM,MAAM,CAAC,gBAAgB,CAAA;QAC/B,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;QAEvC,IAAI,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;YAC7B,GAAG,CAAC,IAAI,EAAE,gCAAgC,MAAM,YAAY,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;YAC5E,MAAM,MAAM,CAAC,cAAc,CAAA;QAC7B,CAAC;QAED,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,sDAAsD;YACtD,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;gBACvB,OAAO,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;YACxC,CAAC;YAED,IAAI,UAAU,GAAG,KAAK,CAAA;YACtB,IAAI,QAAQ,GAAG,KAAK,CAAA;YAEpB,IAAI,CAAC;gBACH,IAAI,aAAa,GAAG,CAAC,CAAA;gBACrB,MAAM,MAAM,GAAa,EAAE,CAAA;gBAE3B,8CAA8C;gBAC9C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtB,IAAI,CAAC;wBACH,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;wBACzE,MAAM,EAAC,MAAM,EAAE,iBAAiB,EAAC,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,CAAA;wBAC7D,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,iBAAiB,CAAC,CAAA;wBAEnE,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,kBAAkB,EAAE,CAAC;4BAC7C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;wBACpB,CAAC;oBACH,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,GAAG,CAAC,IAAI,EAAE,oCAAoC,EAAE,KAAK,CAAC,CAAA;wBACtD,sDAAsD;wBACtD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BACtB,UAAU,GAAG,IAAI,CAAA;4BACjB,OAAO,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;wBACxC,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,8DAA8D;gBAC9D,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;oBACvB,UAAU,GAAG,IAAI,CAAA;oBACjB,OAAO,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;gBACxC,CAAC;gBAED,gBAAgB;gBAChB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,MAAc,EAAE,EAAE;oBACrC,IAAI,UAAU;wBAAE,OAAM;oBACtB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;oBACnB,aAAa,IAAI,MAAM,CAAC,MAAM,CAAA;gBAChC,CAAC,CAAC,CAAA;gBAEF,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE;oBAC5B,IAAI,UAAU;wBAAE,OAAM;oBACtB,QAAQ,GAAG,IAAI,CAAA;oBACf,IAAI,CAAC;wBACH,qBAAqB;wBACrB,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;wBAC5C,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,GAAG,aAAa,CAAA;wBAE/C,MAAM,CAAC,MAAM,GAAG,SAAS,CAAA;wBAEzB,2BAA2B;wBAC3B,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC;4BACzC,IAAI;gCACF,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;gCACzB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;4BACjB,CAAC;yBACF,CAAC,CAAA;wBAEF,MAAM,aAAa,GAAuC,EAAE,CAAA;wBAC5D,IAAI,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC;4BACjC,aAAa,CAAC,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAA;wBACzD,CAAC;wBAED,MAAM,eAAe,CAAC,IAAI,CAAC,MAAM,CAC/B,IAAI,CAAC,WAAW,EAChB,EAAE,EACF,qBAAqB,CAAC,cAAc,CAAC,EACrC,aAAa,CACd,CAAA;wBAED,kBAAkB;wBAClB,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;wBAEhC,GAAG,CAAC,IAAI,EAAE,KAAK,SAAS,gBAAgB,CAAC,CAAA;wBACzC,UAAU,GAAG,IAAI,CAAA;wBACjB,OAAO,CAAC,SAAS,CAAC,CAAA;oBACpB,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,IAAI,UAAU;4BAAE,OAAM;wBACtB,GAAG,CAAC,IAAI,EAAE,uBAAuB,EAAE,KAAK,CAAC,CAAA;wBACzC,UAAU,GAAG,IAAI,CAAA;wBACjB,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;oBACjC,CAAC;gBACH,CAAC,CAAC,CAAA;gBAEF,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;oBAC7B,IAAI,UAAU;wBAAE,OAAM;oBACtB,GAAG,CAAC,IAAI,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAA;oBACnC,UAAU,GAAG,IAAI,CAAA;oBACjB,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;gBACjC,CAAC,CAAC,CAAA;gBAEF,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;oBACxB,0EAA0E;oBAC1E,6CAA6C;oBAC7C,IAAI,UAAU;wBAAE,OAAM;oBACtB,IAAI,QAAQ,CAAC,SAAS,IAAI,CAAC,QAAQ,EAAE,CAAC;wBACpC,GAAG,CAAC,IAAI,EAAE,0CAA0C,CAAC,CAAA;wBACrD,UAAU,GAAG,IAAI,CAAA;wBACjB,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;oBACjC,CAAC;gBACH,CAAC,CAAC,CAAA;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,UAAU;oBAAE,OAAM;gBACtB,GAAG,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAA;gBAClC,UAAU,GAAG,IAAI,CAAA;gBACjB,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;YACjC,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,EAAU;QACxB,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,MAAM,MAAM,CAAC,cAAc,CAAA;QAC7B,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA;YAC5C,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAA;YAE5B,wCAAwC;YACxC,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;gBACrE,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAA;YACjC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,yCAAyC;gBACzC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAA;YACnB,CAAC;YAED,OAAO,MAAM,CAAA;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAA;YAC1C,MAAM,MAAM,CAAC,cAAc,CAAA;QAC7B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,EAAU,EAAE,aAAqB;QACzD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;QAEvC,MAAM,CAAC,IAAI,GAAG,aAAa,CAAA;QAE3B,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;IAClC,CAAC;CACF"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAA;AAEhC,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAA;AAClC,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAC,cAAc,EAAC,MAAM,iBAAiB,CAAA;AAE9C,OAAO,EAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAC,MAAM,YAAY,CAAA;AACnE,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAA;AAEzD,MAAM,GAAG,GAAG,KAAK,CAAC,mCAAmC,CAAC,CAAA;AActD;;GAEG;AACH,SAAS,qBAAqB,CAAC,UAA2B;IACxD,OAAO,IAAI,cAAc,CAAC;QACxB,KAAK,CAAC,UAAU;YACd,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAA0B,EAAE,EAAE;gBACnD,MAAM,UAAU,GAAG,KAAK,YAAY,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAA;gBAC9E,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;YAChC,CAAC,CAAC,CAAA;YACF,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACxB,UAAU,CAAC,KAAK,EAAE,CAAA;YACpB,CAAC,CAAC,CAAA;YACF,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC7B,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YACvB,CAAC,CAAC,CAAA;QACJ,CAAC;QACD,MAAM;YACJ,UAAU,CAAC,OAAO,EAAE,CAAA;QACtB,CAAC;KACF,CAAC,CAAA;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAAC,SAAqC;IAClE,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,EAAE,CAAA;IACpC,MAAM,UAAU,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC;QACrC,KAAK,CAAC,IAAI;YACR,IAAI,CAAC;gBACH,MAAM,EAAC,IAAI,EAAE,KAAK,EAAC,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;gBACzC,IAAI,IAAI,EAAE,CAAC;oBACT,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACjB,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;gBAC/B,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,OAAO,CAAC,KAAc,CAAC,CAAA;YAC9B,CAAC;QACH,CAAC;KACF,CAAC,CAAA;IAEF,OAAO,UAAU,CAAA;AACnB,CAAC;AAED,MAAM,OAAO,UAAW,SAAQ,SAAS;IAChC,WAAW,CAAkC;IAEpD,YAAY,OAAgB;QAC1B,KAAK,EAAE,CAAA;QAEP,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;QACvD,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAA;QAEtC,IAAI,CAAC,UAAU,GAAG,CAAC,UAAU,EAAE,sBAAsB,EAAE,uBAAuB,CAAC,CAAA;IACjF,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,IAAY;QACzB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAA;IACjD,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,EAAU;QACjB,OAAO,GAAG,EAAE,OAAO,CAAA;IACrB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,MAAc;QAChC,GAAG,CAAC,IAAI,MAAM,CAAC,EAAE,mBAAmB,CAAC,CAAA;QACrC,MAAM,QAAQ,GAAkB;YAC9B,IAAI,EAAE,MAAM;YACZ,aAAa,EAAE,aAAa;SAC7B,CAAA;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;QAC7C,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC;YACzC,IAAI;gBACF,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAA;gBACpC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACjB,CAAC;SACF,CAAC,CAAA;QAEF,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;QAClE,GAAG,CAAC,IAAI,MAAM,CAAC,EAAE,iCAAiC,YAAY,EAAE,CAAC,CAAA;QACjE,MAAM,eAAe,CAAC,IAAI,CAAC,MAAM,CAC/B,IAAI,CAAC,WAAW,EAChB,YAAY,EACZ,qBAAqB,CAAC,cAAc,CAAC,CACtC,CAAA;QACD,GAAG,CAAC,IAAI,MAAM,CAAC,EAAE,uBAAuB,CAAC,CAAA;IAC3C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,EAAU;QAC3B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;YACvD,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;YAC3E,MAAM,EAAC,MAAM,EAAE,SAAS,EAAC,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;YACjD,MAAM,UAAU,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAA;YAEnD,MAAM,MAAM,GAAa,EAAE,CAAA;YAC3B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;gBACrC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACpB,CAAC;YAED,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;YAC5D,MAAM,QAAQ,GAAkB,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;YAExD,4BAA4B;YAC5B,QAAQ,CAAC,IAAI,GAAG,IAAI,MAAM,CAAC;gBACzB,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE;gBACpB,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI;gBACxB,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM;gBAC5B,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ;gBAChC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,OAAO;gBAC9B,aAAa,EAAE,QAAQ,CAAC,IAAI,CAAC,aAAa;aAC3C,CAAC,CAAA;YAEF,OAAO,QAAQ,CAAA;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAA;YAC5C,MAAM,MAAM,CAAC,cAAc,CAAA;QAC7B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,oBAAoB,CAAC,MAAc;QACjC,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,IAAI;YACzB,cAAc,EAAE,GAAG,MAAM,CAAC,cAAc,EAAE;YAC1C,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;YACzC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC;SACxC,CAAA;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAc;QACzB,GAAG,CAAC,IAAI,MAAM,CAAC,EAAE,mBAAmB,CAAC,CAAA;QACrC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,MAAM,CAAC,cAAc,CAAA;QAC7B,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QAC/C,GAAG,CAAC,IAAI,MAAM,CAAC,EAAE,2BAA2B,QAAQ,EAAE,CAAC,CAAA;QAEvD,MAAM,CAAC,OAAO,GAAG;YACf,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;SACpD,CAAA;QAED,MAAM,CAAC,aAAa,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;QAE/C,8EAA8E;QAC9E,wDAAwD;QACxD,6CAA6C;QAC7C,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;YAChC,GAAG,CAAC,IAAI,MAAM,CAAC,EAAE,uEAAuE,CAAC,CAAA;YACzF,OAAO,MAAM,CAAA;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,uCAAuC,QAAQ,IAAI,EAAE,KAAK,CAAC,CAAA;YAC/D,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,GAAG,CAAC,+BAA+B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;gBACnD,GAAG,CAAC,6BAA6B,KAAK,CAAC,KAAK,EAAE,CAAC,CAAA;YACjD,CAAC;YACD,MAAM,MAAM,CAAC,gBAAgB,CAAA;QAC/B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAe;QACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;QAC7C,IAAI,CAAC;YACH,GAAG,CAAC,IAAI,OAAO,wBAAwB,QAAQ,EAAE,CAAC,CAAA;YAClD,MAAM,EAAC,MAAM,EAAE,SAAS,EAAC,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,QAAQ,CAC7D,IAAI,CAAC,WAAW,EAChB,QAAQ,CACT,CAAA;YACD,OAAO,qBAAqB,CAAC,SAAS,CAAC,CAAA;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,qCAAqC,QAAQ,IAAI,EAAE,KAAK,CAAC,CAAA;YAC7D,MAAM,MAAM,CAAC,cAAc,CAAA;QAC7B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CACT,QAAgD,EAChD,EAAU,EACV,MAAc;QAEd,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;YACvB,MAAM,MAAM,CAAC,gBAAgB,CAAA;QAC/B,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;QAEvC,IAAI,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;YAC7B,GAAG,CAAC,IAAI,EAAE,gCAAgC,MAAM,YAAY,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;YAC5E,MAAM,MAAM,CAAC,cAAc,CAAA;QAC7B,CAAC;QAED,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,sDAAsD;YACtD,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;gBACvB,OAAO,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;YACxC,CAAC;YAED,IAAI,UAAU,GAAG,KAAK,CAAA;YACtB,IAAI,QAAQ,GAAG,KAAK,CAAA;YAEpB,IAAI,CAAC;gBACH,IAAI,aAAa,GAAG,CAAC,CAAA;gBACrB,MAAM,MAAM,GAAa,EAAE,CAAA;gBAE3B,8CAA8C;gBAC9C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtB,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAA;oBAChD,IAAI,CAAC;wBACH,GAAG,CAAC,IAAI,EAAE,0CAA0C,gBAAgB,EAAE,CAAC,CAAA;wBACvE,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAA;wBACvF,MAAM,EAAC,MAAM,EAAE,iBAAiB,EAAC,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,CAAA;wBAC7D,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,iBAAiB,CAAC,CAAA;wBAEnE,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,kBAAkB,EAAE,CAAC;4BAC7C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;wBACpB,CAAC;oBACH,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,GAAG,CAAC,IAAI,EAAE,gDAAgD,gBAAgB,IAAI,EAAE,KAAK,CAAC,CAAA;wBACtF,sDAAsD;wBACtD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BACtB,UAAU,GAAG,IAAI,CAAA;4BACjB,OAAO,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;wBACxC,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,8DAA8D;gBAC9D,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;oBACvB,UAAU,GAAG,IAAI,CAAA;oBACjB,OAAO,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;gBACxC,CAAC;gBAED,gBAAgB;gBAChB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,MAAc,EAAE,EAAE;oBACrC,IAAI,UAAU;wBAAE,OAAM;oBACtB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;oBACnB,aAAa,IAAI,MAAM,CAAC,MAAM,CAAA;gBAChC,CAAC,CAAC,CAAA;gBAEF,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE;oBAC5B,IAAI,UAAU;wBAAE,OAAM;oBACtB,QAAQ,GAAG,IAAI,CAAA;oBACf,IAAI,CAAC;wBACH,qBAAqB;wBACrB,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;wBAC5C,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,GAAG,aAAa,CAAA;wBAE/C,MAAM,CAAC,MAAM,GAAG,SAAS,CAAA;wBAEzB,2BAA2B;wBAC3B,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC;4BACzC,IAAI;gCACF,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;gCACzB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;4BACjB,CAAC;yBACF,CAAC,CAAA;wBAEF,MAAM,aAAa,GAAuC,EAAE,CAAA;wBAC5D,IAAI,MAAM,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC;4BACjC,aAAa,CAAC,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAA;wBACzD,CAAC;wBAED,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAA;wBAC9C,MAAM,eAAe,CAAC,IAAI,CAAC,MAAM,CAC/B,IAAI,CAAC,WAAW,EAChB,cAAc,EACd,qBAAqB,CAAC,cAAc,CAAC,EACrC,aAAa,CACd,CAAA;wBAED,kBAAkB;wBAClB,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;wBAEhC,GAAG,CAAC,IAAI,EAAE,KAAK,SAAS,gBAAgB,CAAC,CAAA;wBACzC,UAAU,GAAG,IAAI,CAAA;wBACjB,OAAO,CAAC,SAAS,CAAC,CAAA;oBACpB,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,IAAI,UAAU;4BAAE,OAAM;wBACtB,GAAG,CAAC,IAAI,EAAE,uBAAuB,EAAE,KAAK,CAAC,CAAA;wBACzC,UAAU,GAAG,IAAI,CAAA;wBACjB,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;oBACjC,CAAC;gBACH,CAAC,CAAC,CAAA;gBAEF,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;oBAC7B,IAAI,UAAU;wBAAE,OAAM;oBACtB,GAAG,CAAC,IAAI,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAA;oBACnC,UAAU,GAAG,IAAI,CAAA;oBACjB,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;gBACjC,CAAC,CAAC,CAAA;gBAEF,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;oBACxB,0EAA0E;oBAC1E,6CAA6C;oBAC7C,IAAI,UAAU;wBAAE,OAAM;oBACtB,IAAI,QAAQ,CAAC,SAAS,IAAI,CAAC,QAAQ,EAAE,CAAC;wBACpC,GAAG,CAAC,IAAI,EAAE,0CAA0C,CAAC,CAAA;wBACrD,UAAU,GAAG,IAAI,CAAA;wBACjB,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;oBACjC,CAAC;gBACH,CAAC,CAAC,CAAA;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,UAAU;oBAAE,OAAM;gBACtB,GAAG,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAA;gBAClC,UAAU,GAAG,IAAI,CAAA;gBACjB,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;YACjC,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,EAAU;QACxB,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,MAAM,MAAM,CAAC,cAAc,CAAA;QAC7B,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA;YAC5C,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAA;YAE5B,wCAAwC;YACxC,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAA;gBACxC,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;gBAC3E,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAA;YACjC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,yCAAyC;gBACzC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAA;YACnB,CAAC;YAED,OAAO,MAAM,CAAA;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAA;YAC1C,MAAM,MAAM,CAAC,cAAc,CAAA;QAC7B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,EAAU,EAAE,aAAqB;QACzD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;QAEvC,MAAM,CAAC,IAAI,GAAG,aAAa,CAAA;QAE3B,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;IAClC,CAAC;CACF"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "@beyonk/tus-bunny-store",
4
- "version": "0.1.0-beta.1",
4
+ "version": "0.1.0-beta.2",
5
5
  "description": "Bunny.net store for @tus/server",
6
6
  "main": "./dist/index.js",
7
7
  "exports": "./dist/index.js",
package/src/index.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import stream from 'node:stream'
2
2
  import type http from 'node:http'
3
+ import {Buffer} from 'node:buffer'
3
4
  import debug from 'debug'
4
5
  import {ReadableStream} from 'node:stream/web'
5
6
 
@@ -81,6 +82,13 @@ export class BunnyStore extends DataStore {
81
82
  this.extensions = ['creation', 'creation-with-upload', 'creation-defer-length']
82
83
  }
83
84
 
85
+ /**
86
+ * Normalize path for Bunny Storage - ensure it starts with /
87
+ */
88
+ #normalizePath(path: string): string {
89
+ return path.startsWith('/') ? path : `/${path}`
90
+ }
91
+
84
92
  /**
85
93
  * Get the path for the metadata info file
86
94
  */
@@ -106,9 +114,11 @@ export class BunnyStore extends DataStore {
106
114
  },
107
115
  })
108
116
 
117
+ const metadataPath = this.#normalizePath(this.#infoKey(upload.id))
118
+ log(`[${upload.id}] uploading metadata to path: ${metadataPath}`)
109
119
  await BunnyStorageSDK.file.upload(
110
120
  this.storageZone,
111
- this.#infoKey(upload.id),
121
+ metadataPath,
112
122
  nodeStreamToWebStream(metadataStream)
113
123
  )
114
124
  log(`[${upload.id}] metadata file saved`)
@@ -119,7 +129,8 @@ export class BunnyStore extends DataStore {
119
129
  */
120
130
  async #getMetadata(id: string): Promise<MetadataValue> {
121
131
  try {
122
- const infoFile = await BunnyStorageSDK.file.get(this.storageZone, this.#infoKey(id))
132
+ const infoPath = this.#normalizePath(this.#infoKey(id))
133
+ const infoFile = await BunnyStorageSDK.file.get(this.storageZone, infoPath)
123
134
  const {stream: webStream} = await infoFile.data()
124
135
  const nodeStream = webStreamToNodeStream(webStream)
125
136
 
@@ -167,53 +178,45 @@ export class BunnyStore extends DataStore {
167
178
  throw ERRORS.FILE_NOT_FOUND
168
179
  }
169
180
 
181
+ const filePath = this.#normalizePath(upload.id)
182
+ log(`[${upload.id}] normalized file path: ${filePath}`)
183
+
170
184
  upload.storage = {
171
185
  type: 'bunny',
172
- path: upload.id,
186
+ path: filePath,
173
187
  bucket: BunnyStorageSDK.zone.name(this.storageZone),
174
188
  }
175
189
 
176
190
  upload.creation_date = new Date().toISOString()
177
191
 
178
- // Create an empty file to initialize the upload
179
- const emptyStream = new stream.Readable({
180
- read() {
181
- this.push(null)
182
- },
183
- })
184
-
185
- const uploadOptions: BunnyStorageSDK.file.UploadOptions = {}
186
- if (upload.metadata?.contentType) {
187
- uploadOptions.contentType = upload.metadata.contentType
188
- }
189
-
192
+ // Don't create the actual file yet - Bunny Storage may not accept empty files
193
+ // The file will be created on the first write operation
194
+ // Only save the metadata to track the upload
190
195
  try {
191
- await BunnyStorageSDK.file.upload(
192
- this.storageZone,
193
- upload.id,
194
- nodeStreamToWebStream(emptyStream),
195
- uploadOptions
196
- )
197
-
198
196
  await this.#saveMetadata(upload)
199
-
200
- log(`[${upload.id}] upload created`)
197
+ log(`[${upload.id}] upload created (metadata only, file will be created on first write)`)
201
198
  return upload
202
199
  } catch (error) {
203
- log('[BunnyStore] create error', error)
200
+ log(`[BunnyStore] create error for path "${filePath}":`, error)
201
+ if (error instanceof Error) {
202
+ log(`[BunnyStore] error message: ${error.message}`)
203
+ log(`[BunnyStore] error stack: ${error.stack}`)
204
+ }
204
205
  throw ERRORS.FILE_WRITE_ERROR
205
206
  }
206
207
  }
207
208
 
208
209
  async read(file_id: string): Promise<stream.Readable> {
210
+ const filePath = this.#normalizePath(file_id)
209
211
  try {
212
+ log(`[${file_id}] reading from path: ${filePath}`)
210
213
  const {stream: webStream} = await BunnyStorageSDK.file.download(
211
214
  this.storageZone,
212
- file_id
215
+ filePath
213
216
  )
214
217
  return webStreamToNodeStream(webStream)
215
218
  } catch (error) {
216
- log('[BunnyStore] read error', error)
219
+ log(`[BunnyStore] read error for path "${filePath}":`, error)
217
220
  throw ERRORS.FILE_NOT_FOUND
218
221
  }
219
222
  }
@@ -252,8 +255,10 @@ export class BunnyStore extends DataStore {
252
255
 
253
256
  // If there's existing data, download it first
254
257
  if (upload.offset > 0) {
258
+ const existingFilePath = this.#normalizePath(id)
255
259
  try {
256
- const existingFile = await BunnyStorageSDK.file.get(this.storageZone, id)
260
+ log(`[${id}] downloading existing file from path: ${existingFilePath}`)
261
+ const existingFile = await BunnyStorageSDK.file.get(this.storageZone, existingFilePath)
257
262
  const {stream: existingWebStream} = await existingFile.data()
258
263
  const existingNodeStream = webStreamToNodeStream(existingWebStream)
259
264
 
@@ -261,7 +266,7 @@ export class BunnyStore extends DataStore {
261
266
  chunks.push(chunk)
262
267
  }
263
268
  } catch (error) {
264
- log(`[${id}] error downloading existing file:`, error)
269
+ log(`[${id}] error downloading existing file from path "${existingFilePath}":`, error)
265
270
  // If file doesn't exist yet, that's okay for offset 0
266
271
  if (upload.offset > 0) {
267
272
  isResolved = true
@@ -306,9 +311,10 @@ export class BunnyStore extends DataStore {
306
311
  uploadOptions.contentType = upload.metadata.contentType
307
312
  }
308
313
 
314
+ const uploadFilePath = this.#normalizePath(id)
309
315
  await BunnyStorageSDK.file.upload(
310
316
  this.storageZone,
311
- id,
317
+ uploadFilePath,
312
318
  nodeStreamToWebStream(combinedStream),
313
319
  uploadOptions
314
320
  )
@@ -364,7 +370,8 @@ export class BunnyStore extends DataStore {
364
370
 
365
371
  // Get the actual file size from storage
366
372
  try {
367
- const fileInfo = await BunnyStorageSDK.file.get(this.storageZone, id)
373
+ const filePath = this.#normalizePath(id)
374
+ const fileInfo = await BunnyStorageSDK.file.get(this.storageZone, filePath)
368
375
  upload.offset = fileInfo.length
369
376
  } catch (error) {
370
377
  // If file doesn't exist yet, offset is 0