@beignet/core 0.0.1 → 0.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/CHANGELOG.md +27 -0
- package/README.md +202 -8
- package/dist/application/index.d.ts +93 -9
- package/dist/application/index.d.ts.map +1 -1
- package/dist/application/index.js +11 -11
- package/dist/application/index.js.map +1 -1
- package/dist/client/client.d.ts +73 -12
- package/dist/client/client.d.ts.map +1 -1
- package/dist/client/client.js +37 -12
- package/dist/client/client.js.map +1 -1
- package/dist/client/index.d.ts +12 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +6 -0
- package/dist/client/index.js.map +1 -1
- package/dist/client/types.d.ts +69 -8
- package/dist/client/types.d.ts.map +1 -1
- package/dist/config/index.d.ts +84 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +36 -0
- package/dist/config/index.js.map +1 -1
- package/dist/contracts/contract-builder.d.ts +49 -22
- package/dist/contracts/contract-builder.d.ts.map +1 -1
- package/dist/contracts/contract-builder.js +48 -21
- package/dist/contracts/contract-builder.js.map +1 -1
- package/dist/contracts/contract-group.d.ts +35 -19
- package/dist/contracts/contract-group.d.ts.map +1 -1
- package/dist/contracts/contract-group.js +35 -19
- package/dist/contracts/contract-group.js.map +1 -1
- package/dist/contracts/contract-like.d.ts +4 -4
- package/dist/contracts/contract-like.d.ts.map +1 -1
- package/dist/contracts/contract-like.js +2 -1
- package/dist/contracts/contract-like.js.map +1 -1
- package/dist/contracts/index.d.ts +28 -0
- package/dist/contracts/index.d.ts.map +1 -1
- package/dist/contracts/index.js +12 -0
- package/dist/contracts/index.js.map +1 -1
- package/dist/contracts/openapi-meta.d.ts +8 -8
- package/dist/contracts/openapi-meta.d.ts.map +1 -1
- package/dist/contracts/path-template.d.ts +27 -0
- package/dist/contracts/path-template.d.ts.map +1 -1
- package/dist/contracts/path-template.js +6 -0
- package/dist/contracts/path-template.js.map +1 -1
- package/dist/contracts/types.d.ts +104 -10
- package/dist/contracts/types.d.ts.map +1 -1
- package/dist/contracts/types.js +15 -0
- package/dist/contracts/types.js.map +1 -1
- package/dist/contracts/utils.d.ts +6 -0
- package/dist/contracts/utils.d.ts.map +1 -1
- package/dist/contracts/utils.js +6 -0
- package/dist/contracts/utils.js.map +1 -1
- package/dist/domain/entity.d.ts +22 -11
- package/dist/domain/entity.d.ts.map +1 -1
- package/dist/domain/entity.js +5 -1
- package/dist/domain/entity.js.map +1 -1
- package/dist/domain/events.d.ts +5 -2
- package/dist/domain/events.d.ts.map +1 -1
- package/dist/domain/events.js +4 -1
- package/dist/domain/events.js.map +1 -1
- package/dist/domain/value-object.d.ts +19 -9
- package/dist/domain/value-object.d.ts.map +1 -1
- package/dist/domain/value-object.js +5 -1
- package/dist/domain/value-object.js.map +1 -1
- package/dist/errors/catalog.d.ts +40 -16
- package/dist/errors/catalog.d.ts.map +1 -1
- package/dist/errors/catalog.js +18 -7
- package/dist/errors/catalog.js.map +1 -1
- package/dist/errors/response.d.ts +16 -4
- package/dist/errors/response.d.ts.map +1 -1
- package/dist/errors/response.js +3 -3
- package/dist/errors/response.js.map +1 -1
- package/dist/errors/validation.d.ts +10 -1
- package/dist/errors/validation.d.ts.map +1 -1
- package/dist/errors/validation.js +3 -0
- package/dist/errors/validation.js.map +1 -1
- package/dist/events/index.d.ts +133 -0
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +30 -0
- package/dist/events/index.js.map +1 -1
- package/dist/idempotency/index.d.ts +355 -0
- package/dist/idempotency/index.d.ts.map +1 -0
- package/dist/idempotency/index.js +360 -0
- package/dist/idempotency/index.js.map +1 -0
- package/dist/jobs/index.d.ts +248 -4
- package/dist/jobs/index.d.ts.map +1 -1
- package/dist/jobs/index.js +183 -1
- package/dist/jobs/index.js.map +1 -1
- package/dist/mail/index.d.ts +149 -0
- package/dist/mail/index.d.ts.map +1 -1
- package/dist/mail/index.js +30 -0
- package/dist/mail/index.js.map +1 -1
- package/dist/notifications/index.d.ts +369 -0
- package/dist/notifications/index.d.ts.map +1 -0
- package/dist/notifications/index.js +310 -0
- package/dist/notifications/index.js.map +1 -0
- package/dist/openapi/index.d.ts +132 -16
- package/dist/openapi/index.d.ts.map +1 -1
- package/dist/openapi/index.js +1 -1
- package/dist/openapi/index.js.map +1 -1
- package/dist/outbox/index.d.ts +474 -0
- package/dist/outbox/index.d.ts.map +1 -0
- package/dist/outbox/index.js +538 -0
- package/dist/outbox/index.js.map +1 -0
- package/dist/pagination/index.d.ts +166 -0
- package/dist/pagination/index.d.ts.map +1 -0
- package/dist/pagination/index.js +96 -0
- package/dist/pagination/index.js.map +1 -0
- package/dist/ports/audit.d.ts +271 -0
- package/dist/ports/audit.d.ts.map +1 -1
- package/dist/ports/audit.js +128 -0
- package/dist/ports/audit.js.map +1 -1
- package/dist/ports/auth.d.ts +70 -0
- package/dist/ports/auth.d.ts.map +1 -1
- package/dist/ports/auth.js +30 -0
- package/dist/ports/auth.js.map +1 -1
- package/dist/ports/cache.d.ts +41 -0
- package/dist/ports/cache.d.ts.map +1 -1
- package/dist/ports/cache.js +10 -0
- package/dist/ports/cache.js.map +1 -1
- package/dist/ports/clock.d.ts +38 -0
- package/dist/ports/clock.d.ts.map +1 -1
- package/dist/ports/clock.js +20 -0
- package/dist/ports/clock.js.map +1 -1
- package/dist/ports/id-generator.d.ts +37 -0
- package/dist/ports/id-generator.d.ts.map +1 -1
- package/dist/ports/id-generator.js +22 -0
- package/dist/ports/id-generator.js.map +1 -1
- package/dist/ports/index.d.ts +83 -0
- package/dist/ports/index.d.ts.map +1 -1
- package/dist/ports/index.js +41 -5
- package/dist/ports/index.js.map +1 -1
- package/dist/ports/logger.d.ts +56 -0
- package/dist/ports/logger.d.ts.map +1 -1
- package/dist/ports/logger.js +17 -0
- package/dist/ports/logger.js.map +1 -1
- package/dist/ports/policy.d.ts +132 -0
- package/dist/ports/policy.d.ts.map +1 -1
- package/dist/ports/policy.js +45 -0
- package/dist/ports/policy.js.map +1 -1
- package/dist/ports/rate-limit.d.ts +25 -0
- package/dist/ports/rate-limit.d.ts.map +1 -1
- package/dist/ports/rate-limit.js +10 -0
- package/dist/ports/rate-limit.js.map +1 -1
- package/dist/ports/redaction.d.ts +101 -0
- package/dist/ports/redaction.d.ts.map +1 -1
- package/dist/ports/redaction.js +59 -0
- package/dist/ports/redaction.js.map +1 -1
- package/dist/ports/storage.d.ts +100 -0
- package/dist/ports/storage.d.ts.map +1 -1
- package/dist/ports/storage.js +10 -0
- package/dist/ports/storage.js.map +1 -1
- package/dist/ports/testing.d.ts +47 -0
- package/dist/ports/testing.d.ts.map +1 -1
- package/dist/ports/testing.js +23 -0
- package/dist/ports/testing.js.map +1 -1
- package/dist/ports/unit-of-work.d.ts +60 -3
- package/dist/ports/unit-of-work.d.ts.map +1 -1
- package/dist/ports/unit-of-work.js +11 -2
- package/dist/ports/unit-of-work.js.map +1 -1
- package/dist/providers/instrumentation.d.ts +205 -1
- package/dist/providers/instrumentation.d.ts.map +1 -1
- package/dist/providers/instrumentation.js +14 -0
- package/dist/providers/instrumentation.js.map +1 -1
- package/dist/providers/provider.d.ts +14 -1
- package/dist/providers/provider.d.ts.map +1 -1
- package/dist/providers/provider.js.map +1 -1
- package/dist/schedules/index.d.ts +246 -0
- package/dist/schedules/index.d.ts.map +1 -1
- package/dist/schedules/index.js +27 -0
- package/dist/schedules/index.js.map +1 -1
- package/dist/server/health.d.ts +14 -5
- package/dist/server/health.d.ts.map +1 -1
- package/dist/server/health.js +5 -2
- package/dist/server/health.js.map +1 -1
- package/dist/server/hooks/auth.d.ts +68 -26
- package/dist/server/hooks/auth.d.ts.map +1 -1
- package/dist/server/hooks/auth.js +44 -55
- package/dist/server/hooks/auth.js.map +1 -1
- package/dist/server/hooks/cors.d.ts +27 -0
- package/dist/server/hooks/cors.d.ts.map +1 -1
- package/dist/server/hooks/cors.js +12 -0
- package/dist/server/hooks/cors.js.map +1 -1
- package/dist/server/hooks/errors.d.ts +15 -6
- package/dist/server/hooks/errors.d.ts.map +1 -1
- package/dist/server/hooks/errors.js.map +1 -1
- package/dist/server/hooks/index.d.ts +4 -1
- package/dist/server/hooks/index.d.ts.map +1 -1
- package/dist/server/hooks/index.js +3 -0
- package/dist/server/hooks/index.js.map +1 -1
- package/dist/server/hooks/logging.d.ts +36 -0
- package/dist/server/hooks/logging.d.ts.map +1 -1
- package/dist/server/hooks/logging.js +6 -0
- package/dist/server/hooks/logging.js.map +1 -1
- package/dist/server/hooks/rate-limit.d.ts +33 -0
- package/dist/server/hooks/rate-limit.d.ts.map +1 -1
- package/dist/server/hooks/rate-limit.js +11 -0
- package/dist/server/hooks/rate-limit.js.map +1 -1
- package/dist/server/http.d.ts +222 -0
- package/dist/server/http.d.ts.map +1 -1
- package/dist/server/http.js +20 -1
- package/dist/server/http.js.map +1 -1
- package/dist/server/index.d.ts +19 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +7 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/openapi.d.ts +5 -3
- package/dist/server/openapi.d.ts.map +1 -1
- package/dist/server/openapi.js +4 -2
- package/dist/server/openapi.js.map +1 -1
- package/dist/server/providers/loadProviderConfig.d.ts +9 -0
- package/dist/server/providers/loadProviderConfig.d.ts.map +1 -1
- package/dist/server/providers/loadProviderConfig.js +9 -0
- package/dist/server/providers/loadProviderConfig.js.map +1 -1
- package/dist/server/server.d.ts +159 -19
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +72 -31
- package/dist/server/server.js.map +1 -1
- package/dist/testing/index.d.ts +171 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +127 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/uploads/client.d.ts +278 -0
- package/dist/uploads/client.d.ts.map +1 -0
- package/dist/uploads/client.js +428 -0
- package/dist/uploads/client.js.map +1 -0
- package/dist/uploads/index.d.ts +361 -0
- package/dist/uploads/index.d.ts.map +1 -0
- package/dist/uploads/index.js +543 -0
- package/dist/uploads/index.js.map +1 -0
- package/package.json +31 -2
- package/src/application/index.ts +85 -22
- package/src/client/client.ts +73 -12
- package/src/client/index.ts +12 -0
- package/src/client/types.ts +70 -9
- package/src/config/index.ts +86 -0
- package/src/contracts/contract-builder.ts +49 -22
- package/src/contracts/contract-group.ts +35 -19
- package/src/contracts/contract-like.ts +4 -4
- package/src/contracts/index.ts +28 -1
- package/src/contracts/openapi-meta.ts +8 -8
- package/src/contracts/path-template.ts +27 -0
- package/src/contracts/types.ts +111 -10
- package/src/contracts/utils.ts +6 -0
- package/src/domain/entity.ts +22 -11
- package/src/domain/events.ts +5 -2
- package/src/domain/value-object.ts +19 -9
- package/src/errors/catalog.ts +40 -16
- package/src/errors/response.ts +16 -4
- package/src/errors/validation.ts +10 -1
- package/src/events/index.ts +134 -0
- package/src/idempotency/index.ts +767 -0
- package/src/jobs/index.ts +437 -5
- package/src/mail/index.ts +149 -0
- package/src/notifications/index.ts +771 -0
- package/src/openapi/index.ts +133 -16
- package/src/outbox/index.ts +1104 -0
- package/src/pagination/index.ts +278 -0
- package/src/ports/audit.ts +271 -0
- package/src/ports/auth.ts +70 -0
- package/src/ports/cache.ts +41 -0
- package/src/ports/clock.ts +38 -0
- package/src/ports/id-generator.ts +37 -0
- package/src/ports/index.ts +106 -11
- package/src/ports/logger.ts +56 -0
- package/src/ports/policy.ts +133 -0
- package/src/ports/rate-limit.ts +25 -0
- package/src/ports/redaction.ts +101 -0
- package/src/ports/storage.ts +100 -0
- package/src/ports/testing.ts +47 -0
- package/src/ports/unit-of-work.ts +60 -3
- package/src/providers/instrumentation.ts +211 -1
- package/src/providers/provider.ts +14 -1
- package/src/schedules/index.ts +247 -0
- package/src/server/health.ts +14 -5
- package/src/server/hooks/auth.ts +105 -120
- package/src/server/hooks/cors.ts +27 -0
- package/src/server/hooks/errors.ts +15 -6
- package/src/server/hooks/index.ts +4 -5
- package/src/server/hooks/logging.ts +36 -0
- package/src/server/hooks/rate-limit.ts +33 -0
- package/src/server/http.ts +249 -1
- package/src/server/index.ts +19 -1
- package/src/server/openapi.ts +5 -3
- package/src/server/providers/loadProviderConfig.ts +9 -0
- package/src/server/server.ts +296 -30
- package/src/testing/index.ts +348 -0
- package/src/uploads/client.ts +861 -0
- package/src/uploads/index.ts +1067 -0
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { type ClockPort } from "../ports/clock";
|
|
2
|
+
import { type IdGeneratorPort } from "../ports/id-generator";
|
|
3
|
+
/**
|
|
4
|
+
* Value that may be returned synchronously or asynchronously.
|
|
5
|
+
*/
|
|
6
|
+
export type MaybePromise<T> = T | Promise<T>;
|
|
7
|
+
/**
|
|
8
|
+
* Arguments passed to a factory default builder.
|
|
9
|
+
*/
|
|
10
|
+
export interface FactoryBuildArgs<Name extends string = string> {
|
|
11
|
+
/**
|
|
12
|
+
* Factory name.
|
|
13
|
+
*/
|
|
14
|
+
readonly name: Name;
|
|
15
|
+
/**
|
|
16
|
+
* Current sequence value.
|
|
17
|
+
*/
|
|
18
|
+
readonly sequence: number;
|
|
19
|
+
/**
|
|
20
|
+
* ID generator available to the factory.
|
|
21
|
+
*/
|
|
22
|
+
readonly ids: IdGeneratorPort;
|
|
23
|
+
/**
|
|
24
|
+
* Clock available to the factory.
|
|
25
|
+
*/
|
|
26
|
+
readonly clock: ClockPort;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Arguments passed to a factory persistence function.
|
|
30
|
+
*/
|
|
31
|
+
export type FactoryPersistArgs<Name extends string = string> = FactoryBuildArgs<Name>;
|
|
32
|
+
/**
|
|
33
|
+
* Overrides accepted by factory build and create methods.
|
|
34
|
+
*/
|
|
35
|
+
export type FactoryOverrides<Value extends object, Name extends string = string> = Partial<Value> | ((value: Value, args: FactoryBuildArgs<Name>) => Partial<Value>);
|
|
36
|
+
/**
|
|
37
|
+
* Options for declaring a test data factory.
|
|
38
|
+
*/
|
|
39
|
+
export interface DefineFactoryOptions<Name extends string, Value extends object, Ctx = unknown, Created = Value> {
|
|
40
|
+
/**
|
|
41
|
+
* Build the default value for the current sequence.
|
|
42
|
+
*/
|
|
43
|
+
defaults(args: FactoryBuildArgs<Name>): Value;
|
|
44
|
+
/**
|
|
45
|
+
* Persist a built value and return the created record.
|
|
46
|
+
*/
|
|
47
|
+
persist?(ctx: Ctx, value: Value, args: FactoryPersistArgs<Name>): MaybePromise<Created>;
|
|
48
|
+
/**
|
|
49
|
+
* ID generator to expose to the factory.
|
|
50
|
+
*/
|
|
51
|
+
ids?: IdGeneratorPort;
|
|
52
|
+
/**
|
|
53
|
+
* Clock to expose to the factory.
|
|
54
|
+
*/
|
|
55
|
+
clock?: ClockPort;
|
|
56
|
+
/**
|
|
57
|
+
* Initial sequence number. Defaults to `1`.
|
|
58
|
+
*/
|
|
59
|
+
start?: number;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Declared test data factory.
|
|
63
|
+
*/
|
|
64
|
+
export interface FactoryDef<Name extends string = string, Value extends object = object, Ctx = unknown, Created = Value> {
|
|
65
|
+
/**
|
|
66
|
+
* Discriminator for factory definitions.
|
|
67
|
+
*/
|
|
68
|
+
readonly kind: "factory";
|
|
69
|
+
/**
|
|
70
|
+
* Factory name.
|
|
71
|
+
*/
|
|
72
|
+
readonly name: Name;
|
|
73
|
+
/**
|
|
74
|
+
* Build an in-memory value.
|
|
75
|
+
*/
|
|
76
|
+
build(overrides?: FactoryOverrides<Value, Name>): Value;
|
|
77
|
+
/**
|
|
78
|
+
* Build multiple in-memory values.
|
|
79
|
+
*/
|
|
80
|
+
buildList(count: number, overrides?: FactoryOverrides<Value, Name>): Value[];
|
|
81
|
+
/**
|
|
82
|
+
* Build and persist a value.
|
|
83
|
+
*/
|
|
84
|
+
create(ctx: Ctx, overrides?: FactoryOverrides<Value, Name>): Promise<Created>;
|
|
85
|
+
/**
|
|
86
|
+
* Build and persist multiple values.
|
|
87
|
+
*/
|
|
88
|
+
createList(ctx: Ctx, count: number, overrides?: FactoryOverrides<Value, Name>): Promise<Created[]>;
|
|
89
|
+
/**
|
|
90
|
+
* Reset the factory sequence.
|
|
91
|
+
*/
|
|
92
|
+
resetSequence(next?: number): void;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Options for declaring a seed.
|
|
96
|
+
*/
|
|
97
|
+
export interface DefineSeedOptions<Ctx> {
|
|
98
|
+
/**
|
|
99
|
+
* Optional human-readable seed description.
|
|
100
|
+
*/
|
|
101
|
+
description?: string;
|
|
102
|
+
/**
|
|
103
|
+
* Execute the seed.
|
|
104
|
+
*/
|
|
105
|
+
run(ctx: Ctx): MaybePromise<void>;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Declared seed that can be run with `runSeeds(...)`.
|
|
109
|
+
*/
|
|
110
|
+
export interface SeedDef<Ctx = unknown, Name extends string = string> {
|
|
111
|
+
/**
|
|
112
|
+
* Discriminator for seed definitions.
|
|
113
|
+
*/
|
|
114
|
+
readonly kind: "seed";
|
|
115
|
+
/**
|
|
116
|
+
* Seed name.
|
|
117
|
+
*/
|
|
118
|
+
readonly name: Name;
|
|
119
|
+
/**
|
|
120
|
+
* Optional human-readable seed description.
|
|
121
|
+
*/
|
|
122
|
+
readonly description?: string;
|
|
123
|
+
/**
|
|
124
|
+
* Execute the seed.
|
|
125
|
+
*/
|
|
126
|
+
run(ctx: Ctx): MaybePromise<void>;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Options for running a list of seeds.
|
|
130
|
+
*/
|
|
131
|
+
export interface RunSeedsOptions<Ctx> {
|
|
132
|
+
/**
|
|
133
|
+
* Context passed to every seed.
|
|
134
|
+
*/
|
|
135
|
+
ctx: Ctx;
|
|
136
|
+
/**
|
|
137
|
+
* Seeds to run in order.
|
|
138
|
+
*/
|
|
139
|
+
seeds: readonly SeedDef<Ctx>[];
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Error thrown when a seed fails.
|
|
143
|
+
*/
|
|
144
|
+
export declare class SeedRunError extends Error {
|
|
145
|
+
/**
|
|
146
|
+
* Seed that failed.
|
|
147
|
+
*/
|
|
148
|
+
readonly seed: SeedDef;
|
|
149
|
+
/**
|
|
150
|
+
* Original thrown value.
|
|
151
|
+
*/
|
|
152
|
+
readonly cause: unknown;
|
|
153
|
+
constructor(seed: SeedDef, cause: unknown);
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Reset one or more factory sequences to their configured starting values.
|
|
157
|
+
*/
|
|
158
|
+
export declare function resetFactories(...factories: readonly Pick<FactoryDef, "resetSequence">[]): void;
|
|
159
|
+
/**
|
|
160
|
+
* Define a typed test data factory with deterministic sequence support.
|
|
161
|
+
*/
|
|
162
|
+
export declare function defineFactory<const Name extends string, Value extends object, Ctx = unknown, Created = Value>(name: Name, options: DefineFactoryOptions<Name, Value, Ctx, Created>): FactoryDef<Name, Value, Ctx, Created>;
|
|
163
|
+
/**
|
|
164
|
+
* Define a named seed.
|
|
165
|
+
*/
|
|
166
|
+
export declare function defineSeed<const Name extends string, Ctx = unknown>(name: Name, options: DefineSeedOptions<Ctx>): SeedDef<Ctx, Name>;
|
|
167
|
+
/**
|
|
168
|
+
* Run seeds in order and wrap failures with the seed name.
|
|
169
|
+
*/
|
|
170
|
+
export declare function runSeeds<Ctx>(options: RunSeedsOptions<Ctx>): Promise<void>;
|
|
171
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { createSystemClock } from "../ports/clock";
|
|
2
|
+
import { createUuidIdGenerator, } from "../ports/id-generator";
|
|
3
|
+
/**
|
|
4
|
+
* Error thrown when a seed fails.
|
|
5
|
+
*/
|
|
6
|
+
export class SeedRunError extends Error {
|
|
7
|
+
/**
|
|
8
|
+
* Seed that failed.
|
|
9
|
+
*/
|
|
10
|
+
seed;
|
|
11
|
+
/**
|
|
12
|
+
* Original thrown value.
|
|
13
|
+
*/
|
|
14
|
+
cause;
|
|
15
|
+
constructor(seed, cause) {
|
|
16
|
+
super(`Seed "${seed.name}" failed: ${errorMessage(cause)}`);
|
|
17
|
+
this.name = "SeedRunError";
|
|
18
|
+
this.seed = seed;
|
|
19
|
+
this.cause = cause;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Reset one or more factory sequences to their configured starting values.
|
|
24
|
+
*/
|
|
25
|
+
export function resetFactories(...factories) {
|
|
26
|
+
for (const factory of factories) {
|
|
27
|
+
factory.resetSequence();
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function errorMessage(error) {
|
|
31
|
+
return error instanceof Error ? error.message : String(error);
|
|
32
|
+
}
|
|
33
|
+
function factoryArgs(args) {
|
|
34
|
+
return args;
|
|
35
|
+
}
|
|
36
|
+
function applyOverrides(value, args, overrides) {
|
|
37
|
+
if (!overrides)
|
|
38
|
+
return value;
|
|
39
|
+
const resolved = typeof overrides === "function" ? overrides(value, args) : overrides;
|
|
40
|
+
return {
|
|
41
|
+
...value,
|
|
42
|
+
...resolved,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
function assertCount(kind, count) {
|
|
46
|
+
if (!Number.isInteger(count) || count < 0) {
|
|
47
|
+
throw new Error(`Factory ${kind} count must be a non-negative integer.`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Define a typed test data factory with deterministic sequence support.
|
|
52
|
+
*/
|
|
53
|
+
export function defineFactory(name, options) {
|
|
54
|
+
const start = options.start ?? 1;
|
|
55
|
+
const ids = options.ids ?? createUuidIdGenerator();
|
|
56
|
+
const clock = options.clock ?? createSystemClock();
|
|
57
|
+
let nextSequence = start;
|
|
58
|
+
function build(overrides) {
|
|
59
|
+
const args = factoryArgs({
|
|
60
|
+
name,
|
|
61
|
+
sequence: nextSequence++,
|
|
62
|
+
ids,
|
|
63
|
+
clock,
|
|
64
|
+
});
|
|
65
|
+
const value = options.defaults(args);
|
|
66
|
+
return applyOverrides(value, args, overrides);
|
|
67
|
+
}
|
|
68
|
+
async function create(ctx, overrides) {
|
|
69
|
+
if (!options.persist) {
|
|
70
|
+
throw new Error(`Factory "${name}" cannot create persisted records without a persist function.`);
|
|
71
|
+
}
|
|
72
|
+
const value = build(overrides);
|
|
73
|
+
const args = factoryArgs({
|
|
74
|
+
name,
|
|
75
|
+
sequence: nextSequence - 1,
|
|
76
|
+
ids,
|
|
77
|
+
clock,
|
|
78
|
+
});
|
|
79
|
+
return options.persist(ctx, value, args);
|
|
80
|
+
}
|
|
81
|
+
return {
|
|
82
|
+
kind: "factory",
|
|
83
|
+
name,
|
|
84
|
+
build,
|
|
85
|
+
buildList(count, overrides) {
|
|
86
|
+
assertCount("buildList", count);
|
|
87
|
+
return Array.from({ length: count }, () => build(overrides));
|
|
88
|
+
},
|
|
89
|
+
create,
|
|
90
|
+
async createList(ctx, count, overrides) {
|
|
91
|
+
assertCount("createList", count);
|
|
92
|
+
const created = [];
|
|
93
|
+
for (let index = 0; index < count; index += 1) {
|
|
94
|
+
created.push(await create(ctx, overrides));
|
|
95
|
+
}
|
|
96
|
+
return created;
|
|
97
|
+
},
|
|
98
|
+
resetSequence(next = start) {
|
|
99
|
+
nextSequence = next;
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Define a named seed.
|
|
105
|
+
*/
|
|
106
|
+
export function defineSeed(name, options) {
|
|
107
|
+
return {
|
|
108
|
+
kind: "seed",
|
|
109
|
+
name,
|
|
110
|
+
description: options.description,
|
|
111
|
+
run: options.run,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Run seeds in order and wrap failures with the seed name.
|
|
116
|
+
*/
|
|
117
|
+
export async function runSeeds(options) {
|
|
118
|
+
for (const seed of options.seeds) {
|
|
119
|
+
try {
|
|
120
|
+
await seed.run(options.ctx);
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
throw new SeedRunError(seed, error);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
import type { CompleteUploadResult, InferUploadMetadata, InferUploadResult, PreparedUploadFile, PrepareUploadResult, UploadDef, UploadFileConstraints, UploadFromRegistry, UploadManifestEntry, UploadRegistry } from "./index";
|
|
2
|
+
/**
|
|
3
|
+
* Upload registry shape accepted by the typed browser client.
|
|
4
|
+
*
|
|
5
|
+
* Pass the type of a `defineUploads(...)` registry, or an upload definition
|
|
6
|
+
* array, to `createUploadClient<...>()`.
|
|
7
|
+
*/
|
|
8
|
+
export type UploadClientRegistry = UploadRegistry | readonly UploadDef[];
|
|
9
|
+
/**
|
|
10
|
+
* Union of upload route names available in an upload registry.
|
|
11
|
+
*/
|
|
12
|
+
export type UploadClientName<Registry> = UploadFromRegistry<Registry> extends UploadDef<infer Name> ? Name & string : never;
|
|
13
|
+
/**
|
|
14
|
+
* Find one upload definition in a registry by its route name.
|
|
15
|
+
*/
|
|
16
|
+
export type UploadByName<Registry, Name extends string> = UploadFromRegistry<Registry> extends infer Upload ? Upload extends UploadDef ? Upload extends {
|
|
17
|
+
readonly name: Name;
|
|
18
|
+
} ? Upload : never : never : never;
|
|
19
|
+
/**
|
|
20
|
+
* Transport strategy used by `upload(...)`.
|
|
21
|
+
*/
|
|
22
|
+
export type UploadClientStrategy = "auto" | "direct" | "server";
|
|
23
|
+
/**
|
|
24
|
+
* Fetch-compatible function used for upload route and direct provider
|
|
25
|
+
* requests.
|
|
26
|
+
*/
|
|
27
|
+
export type UploadClientFetch = (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>;
|
|
28
|
+
/**
|
|
29
|
+
* Static or lazy headers sent to Beignet upload route requests.
|
|
30
|
+
*/
|
|
31
|
+
export type UploadClientHeaders = HeadersInit | (() => HeadersInit | Promise<HeadersInit>);
|
|
32
|
+
/**
|
|
33
|
+
* Request options shared by Beignet upload route requests.
|
|
34
|
+
*/
|
|
35
|
+
export interface UploadClientRequestOptions {
|
|
36
|
+
/**
|
|
37
|
+
* Browser credential policy for upload route requests.
|
|
38
|
+
*/
|
|
39
|
+
credentials?: RequestCredentials;
|
|
40
|
+
/**
|
|
41
|
+
* Browser request mode for upload route requests.
|
|
42
|
+
*/
|
|
43
|
+
mode?: RequestMode;
|
|
44
|
+
/**
|
|
45
|
+
* Browser cache policy for upload route requests.
|
|
46
|
+
*/
|
|
47
|
+
cache?: RequestCache;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Options for `createUploadClient(...)`.
|
|
51
|
+
*/
|
|
52
|
+
export interface CreateUploadClientOptions {
|
|
53
|
+
/**
|
|
54
|
+
* Base URL for the upload route.
|
|
55
|
+
*
|
|
56
|
+
* @default "/api/uploads"
|
|
57
|
+
*/
|
|
58
|
+
baseUrl?: string;
|
|
59
|
+
/**
|
|
60
|
+
* Fetch implementation used for Beignet upload route requests.
|
|
61
|
+
*/
|
|
62
|
+
fetch?: UploadClientFetch;
|
|
63
|
+
/**
|
|
64
|
+
* Headers sent to Beignet upload route requests. These are not sent to
|
|
65
|
+
* provider-owned direct upload URLs.
|
|
66
|
+
*/
|
|
67
|
+
headers?: UploadClientHeaders;
|
|
68
|
+
/**
|
|
69
|
+
* Request options shared by Beignet upload route requests.
|
|
70
|
+
*/
|
|
71
|
+
request?: UploadClientRequestOptions;
|
|
72
|
+
/**
|
|
73
|
+
* Optional client-safe upload metadata for UI helpers.
|
|
74
|
+
*/
|
|
75
|
+
manifest?: readonly UploadManifestEntry[];
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* File lifecycle event emitted by direct and server upload helpers.
|
|
79
|
+
*/
|
|
80
|
+
export interface UploadClientFileEvent {
|
|
81
|
+
/**
|
|
82
|
+
* Browser `File` object being uploaded.
|
|
83
|
+
*/
|
|
84
|
+
file: File;
|
|
85
|
+
/**
|
|
86
|
+
* File name supplied by the browser.
|
|
87
|
+
*/
|
|
88
|
+
fileName: string;
|
|
89
|
+
/**
|
|
90
|
+
* Zero-based index from the files array passed by the caller.
|
|
91
|
+
*/
|
|
92
|
+
index: number;
|
|
93
|
+
/**
|
|
94
|
+
* Prepared upload id when the file has gone through `prepare(...)`.
|
|
95
|
+
*/
|
|
96
|
+
uploadId?: string;
|
|
97
|
+
/**
|
|
98
|
+
* Storage key when the file has gone through `prepare(...)`.
|
|
99
|
+
*/
|
|
100
|
+
key?: string;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Upload progress event emitted while a direct upload is in flight.
|
|
104
|
+
*/
|
|
105
|
+
export interface UploadClientProgressEvent extends UploadClientFileEvent {
|
|
106
|
+
/**
|
|
107
|
+
* Uploaded bytes.
|
|
108
|
+
*/
|
|
109
|
+
loaded: number;
|
|
110
|
+
/**
|
|
111
|
+
* Total bytes expected for the file.
|
|
112
|
+
*/
|
|
113
|
+
total: number;
|
|
114
|
+
/**
|
|
115
|
+
* Fraction from `0` to `1`.
|
|
116
|
+
*/
|
|
117
|
+
progress: number;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Per-call options shared by upload client route requests.
|
|
121
|
+
*/
|
|
122
|
+
export interface UploadClientRouteOptions {
|
|
123
|
+
/**
|
|
124
|
+
* Additional headers sent to Beignet upload route requests.
|
|
125
|
+
*/
|
|
126
|
+
headers?: UploadClientHeaders;
|
|
127
|
+
/**
|
|
128
|
+
* Additional request options sent to Beignet upload route requests.
|
|
129
|
+
*/
|
|
130
|
+
request?: UploadClientRequestOptions;
|
|
131
|
+
/**
|
|
132
|
+
* Abort signal used for route requests and direct uploads.
|
|
133
|
+
*/
|
|
134
|
+
signal?: AbortSignal;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Options for preparing an upload.
|
|
138
|
+
*/
|
|
139
|
+
export interface UploadClientPrepareOptions<Upload extends UploadDef> extends UploadClientRouteOptions {
|
|
140
|
+
/**
|
|
141
|
+
* Metadata validated by the upload definition.
|
|
142
|
+
*/
|
|
143
|
+
metadata: InferUploadMetadata<Upload>;
|
|
144
|
+
/**
|
|
145
|
+
* Browser files to upload.
|
|
146
|
+
*/
|
|
147
|
+
files: readonly File[];
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Options for direct, server, or automatic upload execution.
|
|
151
|
+
*/
|
|
152
|
+
export interface UploadClientUploadOptions<Upload extends UploadDef> extends UploadClientPrepareOptions<Upload> {
|
|
153
|
+
/**
|
|
154
|
+
* Upload transport strategy. Auto probes for direct-upload instructions and
|
|
155
|
+
* falls back to server-handled multipart upload.
|
|
156
|
+
*
|
|
157
|
+
* @default "auto"
|
|
158
|
+
*/
|
|
159
|
+
strategy?: UploadClientStrategy;
|
|
160
|
+
/**
|
|
161
|
+
* Called when a file is about to be uploaded.
|
|
162
|
+
*/
|
|
163
|
+
onFileBegin?(event: UploadClientFileEvent): void;
|
|
164
|
+
/**
|
|
165
|
+
* Called with upload progress. Direct uploads use XHR when this callback is
|
|
166
|
+
* provided so browsers can report progress events.
|
|
167
|
+
*/
|
|
168
|
+
onProgress?(event: UploadClientProgressEvent): void;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Browser upload client typed by an upload registry.
|
|
172
|
+
*/
|
|
173
|
+
export interface UploadClient<Registry extends UploadClientRegistry> {
|
|
174
|
+
/**
|
|
175
|
+
* Validate metadata and file intent, authorize the upload, and receive
|
|
176
|
+
* storage keys plus direct upload instructions when a signer is configured.
|
|
177
|
+
*/
|
|
178
|
+
prepare<Name extends UploadClientName<Registry>>(uploadName: Name, options: UploadClientPrepareOptions<UploadByName<Registry, Name>>): Promise<PrepareUploadResult>;
|
|
179
|
+
/**
|
|
180
|
+
* Complete a prepared direct upload after objects have been written to
|
|
181
|
+
* storage.
|
|
182
|
+
*/
|
|
183
|
+
complete<Name extends UploadClientName<Registry>>(uploadName: Name, options: UploadClientRouteOptions & {
|
|
184
|
+
metadata: InferUploadMetadata<UploadByName<Registry, Name>>;
|
|
185
|
+
files: readonly PreparedUploadFile[];
|
|
186
|
+
}): Promise<CompleteUploadResult<InferUploadResult<UploadByName<Registry, Name>>>>;
|
|
187
|
+
/**
|
|
188
|
+
* Upload files through the Beignet application server using multipart form
|
|
189
|
+
* data.
|
|
190
|
+
*/
|
|
191
|
+
server<Name extends UploadClientName<Registry>>(uploadName: Name, options: UploadClientUploadOptions<UploadByName<Registry, Name>>): Promise<CompleteUploadResult<InferUploadResult<UploadByName<Registry, Name>>>>;
|
|
192
|
+
/**
|
|
193
|
+
* Require a direct provider upload flow: prepare, PUT each file to its
|
|
194
|
+
* provider URL, then complete.
|
|
195
|
+
*/
|
|
196
|
+
direct<Name extends UploadClientName<Registry>>(uploadName: Name, options: UploadClientUploadOptions<UploadByName<Registry, Name>>): Promise<CompleteUploadResult<InferUploadResult<UploadByName<Registry, Name>>>>;
|
|
197
|
+
/**
|
|
198
|
+
* Upload using the selected strategy. The default `"auto"` strategy uses a
|
|
199
|
+
* direct provider flow when available and falls back to server multipart.
|
|
200
|
+
*/
|
|
201
|
+
upload<Name extends UploadClientName<Registry>>(uploadName: Name, options: UploadClientUploadOptions<UploadByName<Registry, Name>>): Promise<CompleteUploadResult<InferUploadResult<UploadByName<Registry, Name>>>>;
|
|
202
|
+
/**
|
|
203
|
+
* Return manifest-backed file constraints for UI controls.
|
|
204
|
+
*/
|
|
205
|
+
constraints<Name extends UploadClientName<Registry>>(uploadName: Name): UploadFileConstraints | undefined;
|
|
206
|
+
/**
|
|
207
|
+
* Return a comma-delimited file input `accept` value from manifest content
|
|
208
|
+
* types.
|
|
209
|
+
*/
|
|
210
|
+
accept<Name extends UploadClientName<Registry>>(uploadName: Name): string | undefined;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Constructor options for `UploadClientError`.
|
|
214
|
+
*/
|
|
215
|
+
export interface UploadClientErrorOptions {
|
|
216
|
+
/**
|
|
217
|
+
* Client operation that failed.
|
|
218
|
+
*/
|
|
219
|
+
operation: string;
|
|
220
|
+
/**
|
|
221
|
+
* Upload route name involved in the failure.
|
|
222
|
+
*/
|
|
223
|
+
uploadName: string;
|
|
224
|
+
/**
|
|
225
|
+
* Human-readable error message.
|
|
226
|
+
*/
|
|
227
|
+
message: string;
|
|
228
|
+
/**
|
|
229
|
+
* HTTP status when a route or provider response was received.
|
|
230
|
+
*/
|
|
231
|
+
status?: number;
|
|
232
|
+
/**
|
|
233
|
+
* Machine-readable error code.
|
|
234
|
+
*/
|
|
235
|
+
code?: string;
|
|
236
|
+
/**
|
|
237
|
+
* Structured error details from the upload route, when available.
|
|
238
|
+
*/
|
|
239
|
+
details?: unknown;
|
|
240
|
+
/**
|
|
241
|
+
* Original error that caused the client failure.
|
|
242
|
+
*/
|
|
243
|
+
cause?: unknown;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Error thrown by upload client route requests or direct provider uploads.
|
|
247
|
+
*/
|
|
248
|
+
export declare class UploadClientError extends Error {
|
|
249
|
+
/**
|
|
250
|
+
* Client operation that failed.
|
|
251
|
+
*/
|
|
252
|
+
readonly operation: string;
|
|
253
|
+
/**
|
|
254
|
+
* Upload route name involved in the failure.
|
|
255
|
+
*/
|
|
256
|
+
readonly uploadName: string;
|
|
257
|
+
/**
|
|
258
|
+
* HTTP status when a route or provider response was received.
|
|
259
|
+
*/
|
|
260
|
+
readonly status?: number;
|
|
261
|
+
/**
|
|
262
|
+
* Machine-readable error code.
|
|
263
|
+
*/
|
|
264
|
+
readonly code?: string;
|
|
265
|
+
/**
|
|
266
|
+
* Structured error details from the upload route, when available.
|
|
267
|
+
*/
|
|
268
|
+
readonly details?: unknown;
|
|
269
|
+
/**
|
|
270
|
+
* Create an upload client error.
|
|
271
|
+
*/
|
|
272
|
+
constructor(options: UploadClientErrorOptions);
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Create a typed browser upload client for a Beignet upload route.
|
|
276
|
+
*/
|
|
277
|
+
export declare function createUploadClient<Registry extends UploadClientRegistry = UploadRegistry>(options?: CreateUploadClientOptions): UploadClient<Registry>;
|
|
278
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/uploads/client.ts"],"names":[],"mappings":"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"}
|