@freehour/supabase-core 2.0.2 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -2,6 +2,7 @@ import { assert as e } from "@freehour/assert";
2
2
  import t from "zod";
3
3
  import { PostgrestError as n } from "@supabase/supabase-js";
4
4
  import * as r from "@supabase/postgrest-js";
5
+ import "@supabase/storage-js";
5
6
  //#region lib/errors.ts
6
7
  var i = class extends Error {
7
8
  constructor(e, t = {}) {
@@ -385,7 +386,18 @@ var j = class t extends r.PostgrestFilterBuilder {
385
386
  view: t
386
387
  });
387
388
  }
388
- }, F = class {
389
+ };
390
+ //#endregion
391
+ //#region lib/storage.ts
392
+ function F(e) {
393
+ return e.bucket !== void 0 && e.path !== void 0;
394
+ }
395
+ function I(e) {
396
+ return e.fileId !== void 0 && e.bucket !== void 0;
397
+ }
398
+ //#endregion
399
+ //#region lib/storage-service.ts
400
+ var L = class {
389
401
  client;
390
402
  database;
391
403
  constructor({ client: e, database: t }) {
@@ -394,7 +406,7 @@ var j = class t extends r.PostgrestFilterBuilder {
394
406
  get files() {
395
407
  return this.database.table("storage", "objects");
396
408
  }
397
- async getFileObject(e, t) {
409
+ async getFileObject({ bucket: e, path: t }) {
398
410
  let { data: n, error: r } = await this.client.from(e).info(t);
399
411
  if (r) throw r;
400
412
  return n;
@@ -405,33 +417,31 @@ var j = class t extends r.PostgrestFilterBuilder {
405
417
  return n;
406
418
  }
407
419
  async getFileStorageLocation(t) {
408
- if ("fileId" in t) {
409
- let { fileId: n } = t, r = await this.files.get(n, ["bucket_id", "path_tokens"]);
410
- if (!r) throw new a(`File with ID ${n} not found`, { fileId: n });
420
+ if (I(t)) return t;
421
+ if (F(t)) {
422
+ let { id: e } = await this.getFileObject(t);
411
423
  return {
412
- fileId: n,
413
- bucket: e.notNull(r.bucket_id, "bucket_id must not be null"),
414
- path: e.notNull(r.path_tokens, "path_tokens must not be null").join("/")
424
+ fileId: e,
425
+ ...t
415
426
  };
416
427
  }
417
- let { bucket: n, path: r } = t, { id: i } = await this.getFileObject(n, r);
428
+ let { fileId: n } = t, r = await this.files.get(n, ["bucket_id", "path_tokens"]);
429
+ if (!r) throw new a(`File with ID ${n} not found`, { fileId: n });
418
430
  return {
419
- fileId: i,
420
- bucket: n,
421
- path: r
431
+ fileId: n,
432
+ bucket: e.notNull(r.bucket_id, "bucket_id must not be null"),
433
+ path: e.notNull(r.path_tokens, "path_tokens must not be null").join("/")
422
434
  };
423
435
  }
424
436
  async getFileInfo(t) {
425
- let { fileId: n, bucket: r, path: i } = await this.getFileStorageLocation(t), { id: a, bucketId: o, metadata: s, ...c } = await this.getFileObject(r, i);
426
- return e(a === n, "file ID from storage client must match file ID from database"), e(o === r, "bucketId from storage client must match bucket from database"), {
427
- ...c,
428
- fileId: n,
429
- bucket: r,
430
- path: i,
431
- metadata: s,
432
- properties: s ? {
433
- type: s.mimetype,
434
- lastModified: new Date(s.lastModified).getTime()
437
+ let n = await this.getFileStorageLocation(t), { id: r, bucketId: i, metadata: a, ...o } = await this.getFileObject(n);
438
+ return e(r === n.fileId, "file ID from storage client must match file ID from database"), e(i === n.bucket, "bucketId from storage client must match bucket from database"), {
439
+ ...o,
440
+ ...n,
441
+ metadata: a,
442
+ properties: a ? {
443
+ type: a.mimetype,
444
+ lastModified: new Date(a.lastModified).getTime()
435
445
  } : {}
436
446
  };
437
447
  }
@@ -476,7 +486,7 @@ var j = class t extends r.PostgrestFilterBuilder {
476
486
  let n = t.filter((e) => "fileId" in e).map((e) => e.fileId), r = (await this.files.query.select(["bucket_id", "path_tokens"]).containedBy("id", n).throwOnError()).data.map(({ bucket_id: t, path_tokens: n }) => ({
477
487
  bucket: e.notNull(t, "bucket_id must not be null"),
478
488
  path: e.notNull(n, "path_tokens must not be null").join("/")
479
- })), i = h(p(t.filter((e) => "path" in e).concat(r), (e) => e.bucket)).map(([e, t]) => ({
489
+ })), i = h(p(t.filter((e) => F(e)).concat(r), (e) => e.bucket)).map(([e, t]) => ({
480
490
  bucket: e,
481
491
  paths: t.map((e) => e.path)
482
492
  }));
@@ -491,4 +501,4 @@ var j = class t extends r.PostgrestFilterBuilder {
491
501
  }
492
502
  };
493
503
  //#endregion
494
- export { g as DataService, P as DatabaseService, a as FileNotFoundError, o as FileNotSupportedError, w as Filter, C as FilterChainSeparator, b as FilterOp, x as LogicalOp, S as LogicalOpSeparator, s as ParseError, N as PostgrestClient, l as PostgrestErrorInterface, j as PostgrestFilterBuilder, M as PostgrestQueryBuilder, c as RecordNotFoundError, F as StorageService, _ as TableDataService, i as TracedError, v as ViewDataService, y as assertCounted, f as coerceArray, O as encodeFilter, D as encodeFilterNode, h as entries, p as groupBy, u as isDatabaseApiError, E as negateFilterNode, T as negateOp, k as parseFilterExpression, A as parseFilterExpressionChain, m as removeElement, d as splitPath };
504
+ export { g as DataService, P as DatabaseService, a as FileNotFoundError, o as FileNotSupportedError, w as Filter, C as FilterChainSeparator, b as FilterOp, x as LogicalOp, S as LogicalOpSeparator, s as ParseError, N as PostgrestClient, l as PostgrestErrorInterface, j as PostgrestFilterBuilder, M as PostgrestQueryBuilder, c as RecordNotFoundError, L as StorageService, _ as TableDataService, i as TracedError, v as ViewDataService, y as assertCounted, f as coerceArray, O as encodeFilter, D as encodeFilterNode, h as entries, p as groupBy, u as isDatabaseApiError, E as negateFilterNode, T as negateOp, k as parseFilterExpression, A as parseFilterExpressionChain, m as removeElement, d as splitPath };
@@ -15,7 +15,7 @@ export declare class StorageService<BucketName extends string = string> {
15
15
  private get files();
16
16
  private getFileObject;
17
17
  getFiles(bucket: BucketName, options?: SearchV2Options): Promise<SearchV2Result>;
18
- getFileStorageLocation(fileRef: FileRef<BucketName>): Promise<StorageLocation>;
18
+ getFileStorageLocation(ref: FileRef<BucketName>): Promise<StorageLocation>;
19
19
  getFileInfo(fileRef: FileRef<BucketName>): Promise<FileInfo>;
20
20
  getPublicURL(fileRef: FileRef<BucketName>, options?: PublicURLOptions): Promise<string>;
21
21
  existsFile(fileRef: FileRef<BucketName>): Promise<boolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"storage-service.d.ts","sourceRoot":"","sources":["../lib/storage-service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAA0B,eAAe,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAIpG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAIrI,MAAM,WAAW,oBAAoB,CACjC,UAAU,SAAS,MAAM,GAAG,MAAM;IAElC,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAClC,QAAQ,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,qBAAa,cAAc,CACvB,UAAU,SAAS,MAAM,GAAG,MAAM;IAElC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4B;IACnD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;gBAE/B,EACR,MAAM,EACN,QAAQ,GACX,EAAE,oBAAoB,CAAC,UAAU,CAAC;IAKnC,OAAO,KAAK,KAAK,GAEhB;YAEa,aAAa;IAYrB,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IAYhF,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC;IAsB9E,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;IAsB5D,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IAUvF,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAc1D,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB7D,UAAU,CACZ,IAAI,EAAE,IAAI,EACV,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,WAAW,CAAC,UAAU,CAAC,EACzC,EAAE,iBAAyB,EAAE,GAAE,iBAAsB,GACtD,OAAO,CAAC,eAAe,CAAC;IAsBrB,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,eAAe,GAAG;QAAE,IAAI,EAAE,IAAI,CAAA;KAAE,CAAC;IAoBrF,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;CA2CjF"}
1
+ {"version":3,"file":"storage-service.d.ts","sourceRoot":"","sources":["../lib/storage-service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAA0B,eAAe,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAIpG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAKrI,MAAM,WAAW,oBAAoB,CACjC,UAAU,SAAS,MAAM,GAAG,MAAM;IAElC,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAClC,QAAQ,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,qBAAa,cAAc,CACvB,UAAU,SAAS,MAAM,GAAG,MAAM;IAElC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4B;IACnD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;gBAE/B,EACR,MAAM,EACN,QAAQ,GACX,EAAE,oBAAoB,CAAC,UAAU,CAAC;IAKnC,OAAO,KAAK,KAAK,GAEhB;YAEa,aAAa;IAWrB,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IAYhF,sBAAsB,CAAC,GAAG,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC;IAuB1E,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;IAoB5D,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IAUvF,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAc1D,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB7D,UAAU,CACZ,IAAI,EAAE,IAAI,EACV,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,WAAW,CAAC,UAAU,CAAC,EACzC,EAAE,iBAAyB,EAAE,GAAE,iBAAsB,GACtD,OAAO,CAAC,eAAe,CAAC;IAsBrB,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,eAAe,GAAG;QAAE,IAAI,EAAE,IAAI,CAAA;KAAE,CAAC;IAoBrF,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;CA2CjF"}
package/dist/storage.d.ts CHANGED
@@ -16,7 +16,17 @@ export interface FilePointer<BucketName extends string = string> {
16
16
  }
17
17
  export type FileRef<BucketName extends string = string> = {
18
18
  fileId: string;
19
- } | FilePointer<BucketName>;
19
+ bucket?: never;
20
+ path?: never;
21
+ } | {
22
+ fileId?: never;
23
+ bucket: BucketName;
24
+ path: string;
25
+ } | {
26
+ fileId: string;
27
+ bucket: BucketName;
28
+ path: string;
29
+ };
20
30
  export interface FileInfo extends OmitFrom<Camelize<FileObjectV2>, 'id' | 'bucketId'>, StorageLocation {
21
31
  properties: FilePropertyBag;
22
32
  }
@@ -27,4 +37,6 @@ export interface PublicURLOptions {
27
37
  export interface UploadFileOptions {
28
38
  overwriteExisting?: boolean;
29
39
  }
40
+ export declare function isFilePointer<BucketName extends string>(ref: FileRef<BucketName>): ref is FilePointer<BucketName>;
41
+ export declare function isStorageLocation(ref: FileRef): ref is StorageLocation;
30
42
  //# sourceMappingURL=storage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../lib/storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,aAAa,IAAI,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE9E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGxC,MAAM,CAAC,OAAO,OAAO,aAAa,CAAC,UAAU,SAAS,MAAM,GAAG,MAAM,CAAE,SAAQ,qBAAqB;IAChG,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,UAAU,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;CACtF;AAED,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC;AAE5E,MAAM,WAAW,eAAe;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW,CAAC,UAAU,SAAS,MAAM,GAAG,MAAM;IAC3D,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,OAAO,CAAC,UAAU,SAAS,MAAM,GAAG,MAAM,IAAI;IACtD,MAAM,EAAE,MAAM,CAAC;CAClB,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;AAE5B,MAAM,WAAW,QAAS,SAAQ,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,GAAG,UAAU,CAAC,EAAE,eAAe;IAClG,UAAU,EAAE,eAAe,CAAC;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5B,SAAS,CAAC,EAAE,gBAAgB,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB;IAC9B,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC/B"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../lib/storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,aAAa,IAAI,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE9E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGxC,MAAM,CAAC,OAAO,OAAO,aAAa,CAAC,UAAU,SAAS,MAAM,GAAG,MAAM,CAAE,SAAQ,qBAAqB;IAChG,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,UAAU,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;CACtF;AAED,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC;AAE5E,MAAM,WAAW,eAAe;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW,CAAC,UAAU,SAAS,MAAM,GAAG,MAAM;IAC3D,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,OAAO,CAAC,UAAU,SAAS,MAAM,GAAG,MAAM,IAAI;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,IAAI,CAAC,EAAE,KAAK,CAAC;CAChB,GAAG;IACA,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CAChB,GAAG;IACA,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,WAAW,QAAS,SAAQ,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,GAAG,UAAU,CAAC,EAAE,eAAe;IAClG,UAAU,EAAE,eAAe,CAAC;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5B,SAAS,CAAC,EAAE,gBAAgB,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB;IAC9B,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAGD,wBAAgB,aAAa,CAAC,UAAU,SAAS,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,GAAG,IAAI,WAAW,CAAC,UAAU,CAAC,CAEjH;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,eAAe,CAEtE"}
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "private": false,
4
4
  "displayName": "Supabase-Core",
5
5
  "description": "Lightweight services for supabase to make it easier to work with databases, tables and storage buckets",
6
- "version": "2.0.2",
6
+ "version": "2.0.3",
7
7
  "type": "module",
8
8
  "repository": {
9
9
  "type": "git",