@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.
- package/dist/adapters/next/app/index.d.ts +4 -1
- package/dist/adapters/next/app/index.d.ts.map +1 -1
- package/dist/adapters/next/app/index.js +4 -4
- package/dist/adapters/next/app/index.mjs +4 -4
- package/dist/adapters/next/pages/index.d.ts +4 -1
- package/dist/adapters/next/pages/index.d.ts.map +1 -1
- package/dist/adapters/next/pages/index.js +4 -4
- package/dist/adapters/next/pages/index.mjs +4 -4
- package/dist/adapters/shared.d.ts +4 -3
- package/dist/adapters/shared.d.ts.map +1 -1
- package/dist/core/client/index.d.ts +10 -2
- package/dist/core/client/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -1
- package/dist/core/index.mjs +2 -2
- package/dist/core/internals/bucketBuilder.d.ts +52 -25
- package/dist/core/internals/bucketBuilder.d.ts.map +1 -1
- package/dist/core/sdk/index.d.ts +4 -4
- package/dist/core/sdk/index.d.ts.map +1 -1
- package/dist/{index-3cc4d530.js → index-0a168903.js} +4 -2
- package/dist/{index-ca41982b.mjs → index-579b8015.mjs} +4 -2
- package/dist/{index-3999aae6.js → index-62d969e5.js} +4 -2
- package/dist/index.js +18 -9
- package/dist/index.mjs +18 -9
- package/dist/providers/edgestore/index.js +2 -2
- package/dist/providers/edgestore/index.mjs +2 -2
- package/dist/providers/types.d.ts +2 -4
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/{shared-6bef8919.js → shared-10685370.js} +33 -1
- package/dist/{shared-43667670.mjs → shared-59c74ca7.mjs} +32 -1
- package/dist/{shared-f7607e44.js → shared-5ed6e18e.js} +32 -1
- package/package.json +3 -3
- package/src/adapters/next/app/index.ts +14 -6
- package/src/adapters/next/pages/index.ts +14 -6
- package/src/adapters/shared.ts +39 -7
- package/src/core/client/index.ts +20 -12
- package/src/core/internals/bucketBuilder.ts +75 -37
- package/src/core/sdk/index.ts +8 -6
- package/src/providers/edgestore/index.ts +1 -1
- 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
|
-
:
|
|
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
|
-
:
|
|
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
|
-
|
|
127
|
+
TInput extends AnyInput,
|
|
120
128
|
TMetadata extends AnyMetadata,
|
|
121
|
-
> = (params: {
|
|
122
|
-
|
|
123
|
-
|
|
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<
|
|
129
|
-
|
|
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
|
|
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<
|
|
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:
|
|
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<
|
|
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:
|
|
255
|
-
path:
|
|
256
|
-
metadata
|
|
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 =
|
|
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
|
|
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
|
|
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,
|
package/src/core/sdk/index.ts
CHANGED
|
@@ -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.
|
|
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
|
-
|
|
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.
|
|
6
|
+
process.env.EDGE_STORE_BASE_URL ?? 'https://files.edgestore.dev';
|
|
7
7
|
|
|
8
8
|
export type EdgeStoreProviderOptions = {
|
|
9
9
|
accessKey?: string;
|
package/src/providers/types.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import {
|
|
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
|
};
|