@edgestore/server 0.0.0-alpha.12 → 0.0.0-alpha.13

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 (39) hide show
  1. package/dist/adapters/next/app/index.d.ts +4 -1
  2. package/dist/adapters/next/app/index.d.ts.map +1 -1
  3. package/dist/adapters/next/app/index.js +4 -4
  4. package/dist/adapters/next/app/index.mjs +4 -4
  5. package/dist/adapters/next/pages/index.d.ts +4 -1
  6. package/dist/adapters/next/pages/index.d.ts.map +1 -1
  7. package/dist/adapters/next/pages/index.js +4 -4
  8. package/dist/adapters/next/pages/index.mjs +4 -4
  9. package/dist/adapters/shared.d.ts +4 -3
  10. package/dist/adapters/shared.d.ts.map +1 -1
  11. package/dist/core/client/index.d.ts +10 -2
  12. package/dist/core/client/index.d.ts.map +1 -1
  13. package/dist/core/index.js +1 -1
  14. package/dist/core/index.mjs +2 -2
  15. package/dist/core/internals/bucketBuilder.d.ts +52 -25
  16. package/dist/core/internals/bucketBuilder.d.ts.map +1 -1
  17. package/dist/core/sdk/index.d.ts +4 -4
  18. package/dist/core/sdk/index.d.ts.map +1 -1
  19. package/dist/{index-3cc4d530.js → index-0a168903.js} +4 -2
  20. package/dist/{index-ca41982b.mjs → index-579b8015.mjs} +4 -2
  21. package/dist/{index-3999aae6.js → index-62d969e5.js} +4 -2
  22. package/dist/index.js +18 -9
  23. package/dist/index.mjs +18 -9
  24. package/dist/providers/edgestore/index.js +2 -2
  25. package/dist/providers/edgestore/index.mjs +2 -2
  26. package/dist/providers/types.d.ts +2 -4
  27. package/dist/providers/types.d.ts.map +1 -1
  28. package/dist/{shared-6bef8919.js → shared-10685370.js} +33 -1
  29. package/dist/{shared-43667670.mjs → shared-59c74ca7.mjs} +32 -1
  30. package/dist/{shared-f7607e44.js → shared-5ed6e18e.js} +32 -1
  31. package/package.json +3 -3
  32. package/src/adapters/next/app/index.ts +14 -6
  33. package/src/adapters/next/pages/index.ts +14 -6
  34. package/src/adapters/shared.ts +39 -7
  35. package/src/core/client/index.ts +20 -12
  36. package/src/core/internals/bucketBuilder.ts +75 -37
  37. package/src/core/sdk/index.ts +8 -6
  38. package/src/providers/edgestore/index.ts +1 -1
  39. package/src/providers/types.ts +6 -4
@@ -10,10 +10,6 @@ type Merge<TType, TWith> = {
10
10
  : TWith[TKey & keyof TWith];
11
11
  };
12
12
 
13
- type OverwriteIfDefined<TType, TWith> = UnsetMarker extends TType
14
- ? TWith
15
- : Simplify<TType & TWith>;
16
-
17
13
  type ConvertStringToFunction<TType> = {
18
14
  [K in keyof TType]: TType[K] extends object
19
15
  ? Simplify<ConvertStringToFunction<TType[K]>>
@@ -36,20 +32,16 @@ type InferBucketPathKeysFromDef<TDef extends AnyDef> = KeysOfUnion<
36
32
  export type InferMetadataObject<TBucket extends Builder<any, AnyDef>> =
37
33
  TBucket['_def']['metadata'] extends (...args: any) => any
38
34
  ? Awaited<ReturnType<TBucket['_def']['metadata']>>
39
- : TBucket['_def']['metadata'] extends ((...args: any) => any) | undefined
40
- ? any
41
- : never;
35
+ : Record<string, never>;
42
36
 
43
37
  type InferMetadataObjectFromDef<TDef extends AnyDef> =
44
38
  TDef['metadata'] extends (...args: any) => any
45
39
  ? Awaited<ReturnType<TDef['metadata']>>
46
- : TDef['metadata'] extends ((...args: any) => any) | undefined
47
- ? any
48
- : never;
40
+ : Record<string, never>;
49
41
 
50
42
  export type AnyContext = Record<string, string | undefined | null>;
51
43
 
52
- export type AnyInput = z.AnyZodObject;
44
+ export type AnyInput = z.AnyZodObject | z.ZodNever;
53
45
 
54
46
  export type AnyPath = Record<string, () => string>[];
55
47
 
@@ -57,10 +49,6 @@ type PathParam<TPath extends AnyPath> = {
57
49
  path: keyof UnionToIntersection<TPath[number]>;
58
50
  };
59
51
 
60
- const unsetMarker = Symbol('unsetMarker');
61
-
62
- type UnsetMarker = typeof unsetMarker;
63
-
64
52
  type Conditions<TPath extends AnyPath> = {
65
53
  eq?: string | PathParam<TPath>;
66
54
  lt?: string | PathParam<TPath>;
@@ -86,10 +74,30 @@ export type AccessControlSchema<TCtx, TDef extends AnyDef> = Merge<
86
74
  }
87
75
  >;
88
76
 
77
+ type BucketConfig = {
78
+ /**
79
+ * Maximum size for a single file in bytes
80
+ *
81
+ * e.g. 1024 * 1024 * 10 = 10MB
82
+ */
83
+ maxSize?: number;
84
+ /**
85
+ * Accepted MIME types
86
+ *
87
+ * e.g. ['image/jpeg', 'image/png']
88
+ *
89
+ * You can also use wildcards after the slash:
90
+ *
91
+ * e.g. ['image/*']
92
+ */
93
+ accept?: string[];
94
+ };
95
+
89
96
  type FileInfo = {
90
97
  size: number;
91
98
  type: string;
92
99
  extension: string;
100
+ fileName?: string;
93
101
  replaceTargetUrl?: string;
94
102
  };
95
103
 
@@ -112,30 +120,34 @@ type BeforeDeleteFn<TCtx, TDef extends AnyDef> = (params: {
112
120
  };
113
121
  }) => MaybePromise<boolean>;
114
122
 
115
- type AnyMetadata = Record<string, string | undefined | null>;
123
+ export type AnyMetadata = Record<string, string | undefined | null>;
116
124
 
117
125
  type MetadataFn<
118
126
  TCtx,
119
- TDef extends AnyDef,
127
+ TInput extends AnyInput,
120
128
  TMetadata extends AnyMetadata,
121
- > = (params: {
122
- ctx: TCtx;
123
- input: z.infer<TDef['input']>;
124
- }) => MaybePromise<TMetadata>;
129
+ > = (params: { ctx: TCtx; input: z.infer<TInput> }) => MaybePromise<TMetadata>;
130
+
131
+ export type AnyMetadataFn = MetadataFn<any, AnyInput, AnyMetadata>;
125
132
 
126
133
  type BucketType = 'IMAGE' | 'FILE';
127
134
 
128
- type Def<TInput extends AnyInput, TPath extends AnyPath> = {
129
- type: any;
135
+ type Def<
136
+ TInput extends AnyInput,
137
+ TPath extends AnyPath,
138
+ TMetadata extends AnyMetadataFn,
139
+ > = {
140
+ type: BucketType;
130
141
  input: TInput;
131
142
  path: TPath;
132
- metadata?: MetadataFn<any, any, any>;
143
+ metadata: TMetadata;
144
+ bucketConfig?: BucketConfig;
133
145
  accessControl?: AccessControlSchema<any, any>;
134
146
  beforeUpload?: BeforeUploadFn<any, any>;
135
147
  beforeDelete?: BeforeDeleteFn<any, any>;
136
148
  };
137
149
 
138
- type AnyDef = Def<any, any>;
150
+ type AnyDef = Def<AnyInput, AnyPath, AnyMetadataFn>;
139
151
 
140
152
  type Builder<TCtx, TDef extends AnyDef> = {
141
153
  /** only used for types */
@@ -152,9 +164,10 @@ type Builder<TCtx, TDef extends AnyDef> = {
152
164
  TCtx,
153
165
  {
154
166
  type: TDef['type'];
155
- input: OverwriteIfDefined<TDef['input'], TInput>;
167
+ input: TInput;
156
168
  path: TDef['path'];
157
169
  metadata: TDef['metadata'];
170
+ bucketConfig: TDef['bucketConfig'];
158
171
  accessControl: TDef['accessControl'];
159
172
  beforeUpload: TDef['beforeUpload'];
160
173
  beforeDelete: TDef['beforeDelete'];
@@ -172,13 +185,14 @@ type Builder<TCtx, TDef extends AnyDef> = {
172
185
  input: TDef['input'];
173
186
  path: TParams;
174
187
  metadata: TDef['metadata'];
188
+ bucketConfig: TDef['bucketConfig'];
175
189
  accessControl: TDef['accessControl'];
176
190
  beforeUpload: TDef['beforeUpload'];
177
191
  beforeDelete: TDef['beforeDelete'];
178
192
  }
179
193
  >;
180
194
  metadata<TMetadata extends AnyMetadata>(
181
- metadata: MetadataFn<TCtx, TDef, TMetadata>,
195
+ metadata: MetadataFn<TCtx, TDef['input'], TMetadata>,
182
196
  ): Builder<
183
197
  TCtx,
184
198
  {
@@ -186,6 +200,7 @@ type Builder<TCtx, TDef extends AnyDef> = {
186
200
  input: TDef['input'];
187
201
  path: TDef['path'];
188
202
  metadata: MetadataFn<any, any, TMetadata>;
203
+ bucketConfig: TDef['bucketConfig'];
189
204
  accessControl: TDef['accessControl'];
190
205
  beforeUpload: TDef['beforeUpload'];
191
206
  beforeDelete: TDef['beforeDelete'];
@@ -198,6 +213,7 @@ type Builder<TCtx, TDef extends AnyDef> = {
198
213
  input: TDef['input'];
199
214
  path: TDef['path'];
200
215
  metadata: TDef['metadata'];
216
+ bucketConfig: TDef['bucketConfig'];
201
217
  accessControl: AccessControlSchema<any, any>;
202
218
  beforeUpload: TDef['beforeUpload'];
203
219
  beforeDelete: TDef['beforeDelete'];
@@ -210,6 +226,7 @@ type Builder<TCtx, TDef extends AnyDef> = {
210
226
  input: TDef['input'];
211
227
  path: TDef['path'];
212
228
  metadata: TDef['metadata'];
229
+ bucketConfig: TDef['bucketConfig'];
213
230
  accessControl: TDef['accessControl'];
214
231
  beforeUpload: BeforeUploadFn<any, any>;
215
232
  beforeDelete: TDef['beforeDelete'];
@@ -222,6 +239,7 @@ type Builder<TCtx, TDef extends AnyDef> = {
222
239
  input: TDef['input'];
223
240
  path: TDef['path'];
224
241
  metadata: TDef['metadata'];
242
+ bucketConfig: TDef['bucketConfig'];
225
243
  accessControl: TDef['accessControl'];
226
244
  beforeUpload: TDef['beforeUpload'];
227
245
  beforeDelete: BeforeDeleteFn<any, any>;
@@ -244,16 +262,23 @@ const createNewBuilder = (initDef: AnyDef, newDef: Partial<AnyDef>) => {
244
262
  );
245
263
  };
246
264
 
247
- function createBuilder<TCtx, TType extends BucketType>(
265
+ function createBuilder<
266
+ TCtx,
267
+ TType extends BucketType,
268
+ TInput extends AnyInput = z.ZodNever,
269
+ TPath extends AnyPath = [],
270
+ TMetadata extends AnyMetadataFn = () => Record<string, never>,
271
+ >(
248
272
  opts: { type: TType },
249
273
  initDef?: Partial<AnyDef>,
250
274
  ): Builder<
251
275
  TCtx,
252
276
  {
253
277
  type: TType;
254
- input: UnsetMarker;
255
- path: UnsetMarker;
256
- metadata?: MetadataFn<any, any, any>;
278
+ input: TInput;
279
+ path: TPath;
280
+ metadata: TMetadata;
281
+ bucketConfig?: BucketConfig;
257
282
  accessControl?: AccessControlSchema<any, any>;
258
283
  beforeUpload?: BeforeUploadFn<any, any>;
259
284
  beforeDelete?: BeforeDeleteFn<any, any>;
@@ -263,6 +288,7 @@ function createBuilder<TCtx, TType extends BucketType>(
263
288
  type: opts.type,
264
289
  input: z.never(),
265
290
  path: [],
291
+ metadata: () => ({}),
266
292
  ...initDef,
267
293
  };
268
294
 
@@ -270,6 +296,7 @@ function createBuilder<TCtx, TType extends BucketType>(
270
296
  $config: {
271
297
  ctx: undefined as TCtx,
272
298
  },
299
+ // @ts-expect-error - I think it would be too much work to make this type correct.
273
300
  _def,
274
301
  input(input) {
275
302
  return createNewBuilder(_def, {
@@ -309,7 +336,7 @@ function createBuilder<TCtx, TType extends BucketType>(
309
336
  };
310
337
  }
311
338
 
312
- class EdgeStoreBuilder<TCtx = object> {
339
+ class EdgeStoreBuilder<TCtx = Record<string, never>> {
313
340
  context<TNewContext extends AnyContext>() {
314
341
  return new EdgeStoreBuilder<TNewContext>();
315
342
  }
@@ -343,17 +370,28 @@ function createRouterFactory<TCtx>() {
343
370
  };
344
371
  }
345
372
 
373
+ function initBucket<TCtx, TType extends BucketType>(
374
+ type: TType,
375
+ config?: BucketConfig,
376
+ ) {
377
+ return createBuilder<TCtx, TType>({ type }, { bucketConfig: config });
378
+ }
379
+
346
380
  function createEdgeStoreInner<TCtx>() {
347
381
  return function initEdgeStoreInner() {
348
382
  return {
349
383
  /**
350
384
  * Builder object for creating an image bucket
351
385
  */
352
- imageBucket: createBuilder<TCtx, 'IMAGE'>({ type: 'IMAGE' }),
386
+ imageBucket(config?: BucketConfig) {
387
+ return initBucket<TCtx, 'IMAGE'>('IMAGE', config);
388
+ },
353
389
  /**
354
390
  * Builder object for creating a file bucket
355
391
  */
356
- fileBucket: createBuilder<TCtx, 'FILE'>({ type: 'FILE' }),
392
+ fileBucket(config?: BucketConfig) {
393
+ return initBucket<TCtx, 'FILE'>('FILE', config);
394
+ },
357
395
  /**
358
396
  * Create a router
359
397
  */
@@ -376,7 +414,7 @@ export const initEdgeStore = new EdgeStoreBuilder();
376
414
 
377
415
  // const es = initEdgeStore.context<Context>().create();
378
416
 
379
- // const imagesBucket = es.imageBucket
417
+ // const imagesBucket = es.imageBucket()
380
418
  // .input(
381
419
  // z.object({
382
420
  // type: z.enum(['profile', 'post']),
@@ -391,7 +429,7 @@ export const initEdgeStore = new EdgeStoreBuilder();
391
429
  // .beforeUpload(() => {
392
430
  // return true;
393
431
  // });
394
- // const a = es.imageBucket
432
+ // const a = es.imageBucket()
395
433
  // .input(z.object({ type: z.string(), someMeta: z.string().optional() }))
396
434
  // .path(({ ctx, input }) => [{ author: ctx.userId }, { type: input.type }])
397
435
  // .metadata(({ ctx, input }) => ({
@@ -415,7 +453,7 @@ export const initEdgeStore = new EdgeStoreBuilder();
415
453
  // return true;
416
454
  // });
417
455
 
418
- // const b = es.imageBucket.path(({ ctx }) => [{ author: ctx.userId }]);
456
+ // const b = es.imageBucket().path(({ ctx }) => [{ author: ctx.userId }]);
419
457
 
420
458
  // const router = es.router({
421
459
  // original: imagesBucket,
@@ -1,21 +1,21 @@
1
1
  import { AnyRouter } from '..';
2
2
  import EdgeStoreCredentialsError from '../../libs/errors/EdgeStoreCredentialsError';
3
- import { AnyContext } from '../internals/bucketBuilder';
3
+ import { AnyContext, AnyMetadata } from '../internals/bucketBuilder';
4
4
 
5
5
  const API_ENDPOINT =
6
- process.env.EDGE_STORE_API_ENDPOINT ?? 'https://api.edge-store.com';
6
+ process.env.EDGE_STORE_API_ENDPOINT ?? 'https://api.edgestore.dev';
7
7
 
8
8
  type FileInfoForUpload = {
9
9
  size: number;
10
10
  extension: string;
11
+ type?: string;
11
12
  isPublic: boolean;
12
13
  path: {
13
14
  key: string;
14
15
  value: string;
15
16
  }[];
16
- metadata?: {
17
- [key: string]: string;
18
- };
17
+ metadata: AnyMetadata;
18
+ fileName?: string;
19
19
  replaceTargetUrl?: string;
20
20
  };
21
21
 
@@ -74,7 +74,7 @@ async function makeRequest<TOutput>(params: {
74
74
  },
75
75
  });
76
76
  if (!res.ok) {
77
- throw new Error(`Failed to make request to ${path}`);
77
+ throw new Error(`Failed to make request to ${path}: ${await res.text()}`);
78
78
  }
79
79
  return (await res.json()) as TOutput;
80
80
  }
@@ -182,7 +182,9 @@ export const edgeStoreRawSdk = {
182
182
  path: fileInfo.path,
183
183
  extension: fileInfo.extension,
184
184
  size: fileInfo.size,
185
+ mimeType: fileInfo.type,
185
186
  metadata: fileInfo.metadata,
187
+ fileName: fileInfo.fileName,
186
188
  replaceTargetUrl: fileInfo.replaceTargetUrl,
187
189
  },
188
190
  });
@@ -3,7 +3,7 @@ import EdgeStoreCredentialsError from '../../libs/errors/EdgeStoreCredentialsErr
3
3
  import { Provider, RequestUploadRes } from '../types';
4
4
 
5
5
  const DEFAULT_BASE_URL =
6
- process.env.EDGE_STORE_BASE_URL ?? 'https://files.edge-store.com';
6
+ process.env.EDGE_STORE_BASE_URL ?? 'https://files.edgestore.dev';
7
7
 
8
8
  export type EdgeStoreProviderOptions = {
9
9
  accessKey?: string;
@@ -1,4 +1,8 @@
1
- import { AnyBuilder, EdgeStoreRouter } from '../core/internals/bucketBuilder';
1
+ import {
2
+ AnyBuilder,
3
+ AnyMetadata,
4
+ EdgeStoreRouter,
5
+ } from '../core/internals/bucketBuilder';
2
6
  import { MaybePromise } from '../types';
3
7
 
4
8
  export type InitParams = {
@@ -41,9 +45,7 @@ export type RequestUploadParams = {
41
45
  key: string;
42
46
  value: string;
43
47
  }[];
44
- metadata?: {
45
- [key: string]: string;
46
- };
48
+ metadata: AnyMetadata;
47
49
  replaceTargetUrl?: string;
48
50
  };
49
51
  };