cloesce 0.0.4-unstable.2 → 0.0.4-unstable.4
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/README.md +99 -7
- package/dist/cli.js +6 -3
- package/dist/common.d.ts +221 -19
- package/dist/common.d.ts.map +1 -1
- package/dist/common.js +112 -15
- package/dist/extractor/extract.d.ts +9 -9
- package/dist/extractor/extract.d.ts.map +1 -1
- package/dist/extractor/extract.js +65 -99
- package/dist/generator.wasm +0 -0
- package/dist/orm.wasm +0 -0
- package/dist/router/crud.js +1 -1
- package/dist/router/router.d.ts.map +1 -1
- package/dist/router/router.js +3 -3
- package/dist/router/wasm.d.ts +1 -1
- package/dist/router/wasm.d.ts.map +1 -1
- package/dist/router/wasm.js +1 -1
- package/dist/ui/backend.d.ts +333 -9
- package/dist/ui/backend.d.ts.map +1 -1
- package/dist/ui/backend.js +269 -10
- package/package.json +1 -1
package/dist/ui/backend.d.ts
CHANGED
|
@@ -3,36 +3,361 @@ import { CrudKind, Either, KeysOfType } from "../common.js";
|
|
|
3
3
|
export { cloesce } from "../router/router.js";
|
|
4
4
|
export type { HttpResult, Either, DeepPartial, InstanceRegistry, CrudKind, } from "../common.js";
|
|
5
5
|
export { CloesceApp } from "../common.js";
|
|
6
|
+
/**
|
|
7
|
+
* Marks a class as a D1-backed SQL model.
|
|
8
|
+
*
|
|
9
|
+
* Classes annotated with `@D1` are compiled into:
|
|
10
|
+
* - a D1 table definition (via `cloesce migrate`)
|
|
11
|
+
* - backend API endpoints (Workers)
|
|
12
|
+
* - a frontend client API
|
|
13
|
+
* - Cloudflare Wrangler configurations
|
|
14
|
+
*
|
|
15
|
+
* Each `@D1` class must define exactly one `@PrimaryKey`.
|
|
16
|
+
*
|
|
17
|
+
* Example:
|
|
18
|
+
*```ts
|
|
19
|
+
* @D1
|
|
20
|
+
* export class Horse {
|
|
21
|
+
* @PrimaryKey id: number;
|
|
22
|
+
* name: string;
|
|
23
|
+
* }
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
6
26
|
export declare const D1: ClassDecorator;
|
|
27
|
+
/**
|
|
28
|
+
* Marks a class as a plain serializable object.
|
|
29
|
+
*
|
|
30
|
+
* `@PlainOldObject` types represent data that can be safely
|
|
31
|
+
* returned from a model method or API endpoint without being
|
|
32
|
+
* treated as a database model.
|
|
33
|
+
*
|
|
34
|
+
* These are often used for DTOs or view models.
|
|
35
|
+
*
|
|
36
|
+
* Example:
|
|
37
|
+
* ```ts
|
|
38
|
+
* @PlainOldObject
|
|
39
|
+
* export class CatStuff {
|
|
40
|
+
* catFacts: string[];
|
|
41
|
+
* catNames: string[];
|
|
42
|
+
* }
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
7
45
|
export declare const PlainOldObject: ClassDecorator;
|
|
46
|
+
/**
|
|
47
|
+
* Declares a Wrangler environment definition.
|
|
48
|
+
*
|
|
49
|
+
* A `@WranglerEnv` class describes environment bindings
|
|
50
|
+
* available to your Cloudflare Worker at runtime.
|
|
51
|
+
*
|
|
52
|
+
* The environment instance is automatically injected into
|
|
53
|
+
* decorated methods using `@Inject`.
|
|
54
|
+
*
|
|
55
|
+
* Example:
|
|
56
|
+
* ```ts
|
|
57
|
+
* @WranglerEnv
|
|
58
|
+
* export class Env {
|
|
59
|
+
* db: D1Database;
|
|
60
|
+
* motd: string;
|
|
61
|
+
* }
|
|
62
|
+
*
|
|
63
|
+
* // in a method...
|
|
64
|
+
* foo(@Inject env: WranglerEnv) {...}
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
8
67
|
export declare const WranglerEnv: ClassDecorator;
|
|
68
|
+
/**
|
|
69
|
+
* Marks a property as the SQL primary key for a model.
|
|
70
|
+
*
|
|
71
|
+
* Every `@D1` class must define exactly one primary key.
|
|
72
|
+
*
|
|
73
|
+
* Cannot be null.
|
|
74
|
+
*
|
|
75
|
+
* Example:
|
|
76
|
+
* ```ts
|
|
77
|
+
* @D1
|
|
78
|
+
* export class User {
|
|
79
|
+
* @PrimaryKey id: number;
|
|
80
|
+
* name: string;
|
|
81
|
+
* }
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
9
84
|
export declare const PrimaryKey: PropertyDecorator;
|
|
85
|
+
/**
|
|
86
|
+
* Exposes a class method as an HTTP GET endpoint.
|
|
87
|
+
* The method will appear in both backend and generated client APIs.
|
|
88
|
+
*/
|
|
10
89
|
export declare const GET: MethodDecorator;
|
|
90
|
+
/**
|
|
91
|
+
* Exposes a class method as an HTTP POST endpoint.
|
|
92
|
+
* The method will appear in both backend and generated client APIs.
|
|
93
|
+
*/
|
|
11
94
|
export declare const POST: MethodDecorator;
|
|
95
|
+
/**
|
|
96
|
+
* Exposes a class method as an HTTP PUT endpoint.
|
|
97
|
+
* The method will appear in both backend and generated client APIs.
|
|
98
|
+
*/
|
|
12
99
|
export declare const PUT: MethodDecorator;
|
|
100
|
+
/**
|
|
101
|
+
* Exposes a class method as an HTTP PATCH endpoint.
|
|
102
|
+
* The method will appear in both backend and generated client APIs.
|
|
103
|
+
*/
|
|
13
104
|
export declare const PATCH: MethodDecorator;
|
|
105
|
+
/**
|
|
106
|
+
* Exposes a class method as an HTTP DEL endpoint.
|
|
107
|
+
* The method will appear in both backend and generated client APIs.
|
|
108
|
+
*/
|
|
14
109
|
export declare const DELETE: MethodDecorator;
|
|
110
|
+
/**
|
|
111
|
+
* Declares a static property as a data source.
|
|
112
|
+
*
|
|
113
|
+
* Data sources describe SQL view definitions (joins) for
|
|
114
|
+
* model relationships. They define which related models
|
|
115
|
+
* are automatically included when querying. Data sources
|
|
116
|
+
* can only reference navigation properties, not scalar
|
|
117
|
+
* attributes.
|
|
118
|
+
*
|
|
119
|
+
* Example:
|
|
120
|
+
* ```ts
|
|
121
|
+
* @D1
|
|
122
|
+
* export class Dog {
|
|
123
|
+
* @PrimaryKey
|
|
124
|
+
* id: number;
|
|
125
|
+
*
|
|
126
|
+
* name: string;
|
|
127
|
+
* }
|
|
128
|
+
*
|
|
129
|
+
* @D1
|
|
130
|
+
* export class Person {
|
|
131
|
+
* @PrimaryKey
|
|
132
|
+
* id: number;
|
|
133
|
+
*
|
|
134
|
+
* @ForeignKey(Dog)
|
|
135
|
+
* dogId: number;
|
|
136
|
+
*
|
|
137
|
+
* @OneToOne("dogId")
|
|
138
|
+
* dog: Dog | undefined;
|
|
139
|
+
*
|
|
140
|
+
* // 👇 Defines a data source that joins the related Dog record
|
|
141
|
+
* @DataSource
|
|
142
|
+
* static readonly default: IncludeTree<Person> = {
|
|
143
|
+
* dog: {},
|
|
144
|
+
* };
|
|
145
|
+
* }
|
|
146
|
+
*
|
|
147
|
+
* // The above will generate an SQL view similar to:
|
|
148
|
+
* // CREATE VIEW "Person.default" AS
|
|
149
|
+
* // SELECT
|
|
150
|
+
* // "Person"."id" AS "id",
|
|
151
|
+
* // "Person"."dogId" AS "dogId",
|
|
152
|
+
* // "Dog"."id" AS "dog.id",
|
|
153
|
+
* // "Dog"."name" AS "dog.name"
|
|
154
|
+
* // FROM "Person"
|
|
155
|
+
* // LEFT JOIN "Dog" ON "Person"."dogId" = "Dog"."id";
|
|
156
|
+
*
|
|
157
|
+
* // When queried via the ORM or client API:
|
|
158
|
+
* const orm = Orm.fromD1(env.db);
|
|
159
|
+
* const people = (await orm.list(Person, "default")).value;
|
|
160
|
+
* // Each Person instance will now include a populated .dog property.
|
|
161
|
+
* ```
|
|
162
|
+
*/
|
|
15
163
|
export declare const DataSource: PropertyDecorator;
|
|
164
|
+
/**
|
|
165
|
+
* Declares a one-to-many relationship between models.
|
|
166
|
+
*
|
|
167
|
+
* The argument is the foreign key property name on the
|
|
168
|
+
* related model.
|
|
169
|
+
*
|
|
170
|
+
* Example:
|
|
171
|
+
* ```ts
|
|
172
|
+
* @OneToMany("personId")
|
|
173
|
+
* dogs: Dog[];
|
|
174
|
+
* ```
|
|
175
|
+
*/
|
|
16
176
|
export declare const OneToMany: (_: string) => PropertyDecorator;
|
|
177
|
+
/**
|
|
178
|
+
* Declares a one-to-one relationship between models.
|
|
179
|
+
*
|
|
180
|
+
* The argument is the foreign key property name that links
|
|
181
|
+
* the two tables.
|
|
182
|
+
*
|
|
183
|
+
* Example:
|
|
184
|
+
* ```ts
|
|
185
|
+
* @OneToOne("dogId")
|
|
186
|
+
* dog: Dog | undefined;
|
|
187
|
+
* ```
|
|
188
|
+
*/
|
|
17
189
|
export declare const OneToOne: (_: string) => PropertyDecorator;
|
|
190
|
+
/**
|
|
191
|
+
* Declares a many-to-many relationship between models.
|
|
192
|
+
*
|
|
193
|
+
* The argument is a unique identifier for the generated
|
|
194
|
+
* junction table used to connect the two entities.
|
|
195
|
+
*
|
|
196
|
+
* Example:
|
|
197
|
+
* ```ts
|
|
198
|
+
* @ManyToMany("StudentsCourses")
|
|
199
|
+
* courses: Course[];
|
|
200
|
+
* ```
|
|
201
|
+
*/
|
|
18
202
|
export declare const ManyToMany: (_: string) => PropertyDecorator;
|
|
203
|
+
/**
|
|
204
|
+
* Declares a foreign key relationship between models.
|
|
205
|
+
* Directly translates to a SQLite foreign key.
|
|
206
|
+
*
|
|
207
|
+
* The argument must reference either a model class or the
|
|
208
|
+
* name of a model class as a string. The property type must
|
|
209
|
+
* match the target model’s primary key type.
|
|
210
|
+
*
|
|
211
|
+
* Example:
|
|
212
|
+
* ```ts
|
|
213
|
+
* @ForeignKey(Dog)
|
|
214
|
+
* dogId: number;
|
|
215
|
+
* ```
|
|
216
|
+
*/
|
|
19
217
|
export declare const ForeignKey: <T>(_: T | string) => PropertyDecorator;
|
|
218
|
+
/**
|
|
219
|
+
* Marks a method parameter for dependency injection.
|
|
220
|
+
*
|
|
221
|
+
* Injected parameters can receive environment bindings,
|
|
222
|
+
* middleware-provided objects, or other registered values.
|
|
223
|
+
*
|
|
224
|
+
* Example:
|
|
225
|
+
* ```ts
|
|
226
|
+
* @POST
|
|
227
|
+
* async neigh(@Inject env: WranglerEnv) {
|
|
228
|
+
* return `i am ${this.name}`;
|
|
229
|
+
* }
|
|
230
|
+
* ```
|
|
231
|
+
*/
|
|
20
232
|
export declare const Inject: ParameterDecorator;
|
|
233
|
+
/**
|
|
234
|
+
* Enables automatic CRUD method generation for a model.
|
|
235
|
+
*
|
|
236
|
+
* The argument is a list of CRUD operation kinds
|
|
237
|
+
* (e.g. `"SAVE"`, `"GET"`, `"LIST"`) to generate for the model.
|
|
238
|
+
*
|
|
239
|
+
* Cloesce will emit corresponding backend methods and frontend
|
|
240
|
+
* client bindings automatically, removing the need to manually
|
|
241
|
+
* define common API operations.
|
|
242
|
+
*
|
|
243
|
+
* Supported kinds:
|
|
244
|
+
* - **"SAVE"** — Performs an *upsert* (insert or update) for a model instance.
|
|
245
|
+
* - **"GET"** — Retrieves a single record by its primary key, optionally using a `DataSource`.
|
|
246
|
+
* - **"LIST"** — Retrieves all records for the model, using the specified `DataSource`.
|
|
247
|
+
* - **(future)** `"DELETE"` — Will remove a record by primary key once implemented.
|
|
248
|
+
*
|
|
249
|
+
* The generated methods are static, exposed through both the backend
|
|
250
|
+
* (Worker endpoints) and the frontend client API.
|
|
251
|
+
*
|
|
252
|
+
* Example:
|
|
253
|
+
* ```ts
|
|
254
|
+
* @CRUD(["SAVE", "GET", "LIST"])
|
|
255
|
+
* @D1
|
|
256
|
+
* export class CrudHaver {
|
|
257
|
+
* @PrimaryKey id: number;
|
|
258
|
+
* name: string;
|
|
259
|
+
* }
|
|
260
|
+
*
|
|
261
|
+
* // Generated methods (conceptually):
|
|
262
|
+
* // static async save(item: CrudHaver): Promise<HttpResult<CrudHaver>>
|
|
263
|
+
* // static async get(id: number, dataSource?: string): Promise<HttpResult<CrudHaver>>
|
|
264
|
+
* // static async list(dataSource?: string): Promise<HttpResult<CrudHaver[]>>
|
|
265
|
+
* ```
|
|
266
|
+
*/
|
|
21
267
|
export declare const CRUD: (_kinds: CrudKind[]) => ClassDecorator;
|
|
22
268
|
type Primitive = string | number | boolean | bigint | symbol | null | undefined;
|
|
23
|
-
|
|
269
|
+
/**
|
|
270
|
+
* A recursive type describing which related models to include
|
|
271
|
+
* when querying a `@D1` model.
|
|
272
|
+
*
|
|
273
|
+
* An `IncludeTree<T>` mirrors the shape of the model class,
|
|
274
|
+
* where each navigation property can be replaced with another
|
|
275
|
+
* `IncludeTree` describing nested joins.
|
|
276
|
+
*
|
|
277
|
+
* - Scalar properties (string, number, etc.) are excluded automatically.
|
|
278
|
+
* - Navigation properties (e.g. `dogs: Dog[]`, `owner: Person`) may appear
|
|
279
|
+
* as keys with empty objects `{}` or nested trees.
|
|
280
|
+
*
|
|
281
|
+
* Example:
|
|
282
|
+
* ```ts
|
|
283
|
+
* @D1
|
|
284
|
+
* export class Person {
|
|
285
|
+
* @PrimaryKey id: number;
|
|
286
|
+
* @OneToMany("personId") dogs: Dog[];
|
|
287
|
+
*
|
|
288
|
+
* @DataSource
|
|
289
|
+
* static readonly default: IncludeTree<Person> = {
|
|
290
|
+
* dogs: {}, // join Dog table when querying Person
|
|
291
|
+
* };
|
|
292
|
+
* }
|
|
293
|
+
* ```
|
|
294
|
+
*/
|
|
295
|
+
export type IncludeTree<T> = (T extends Primitive ? never : {
|
|
24
296
|
[K in keyof T]?: T[K] extends (infer U)[] ? IncludeTree<NonNullable<U>> : IncludeTree<NonNullable<T[K]>>;
|
|
297
|
+
}) & {
|
|
298
|
+
__brand?: "IncludeTree";
|
|
299
|
+
};
|
|
300
|
+
/**
|
|
301
|
+
* Represents the name of a `@DataSource` available on a model type `T`,
|
|
302
|
+
* or `"none"` when no data source (no joins) should be applied.
|
|
303
|
+
*
|
|
304
|
+
* This type is used by ORM and CRUD methods to restrict valid
|
|
305
|
+
* data source names to the actual static properties declared on the model.
|
|
306
|
+
*
|
|
307
|
+
* Example:
|
|
308
|
+
* ```ts
|
|
309
|
+
* @D1
|
|
310
|
+
* export class Person {
|
|
311
|
+
* @PrimaryKey id: number;
|
|
312
|
+
*
|
|
313
|
+
* @DataSource
|
|
314
|
+
* static readonly default: IncludeTree<Person> = { dogs: {} };
|
|
315
|
+
* }
|
|
316
|
+
*
|
|
317
|
+
* type DS = DataSourceOf<Person>;
|
|
318
|
+
* // => "default" | "none"
|
|
319
|
+
* ```
|
|
320
|
+
*/
|
|
321
|
+
export type DataSourceOf<T extends object> = (KeysOfType<T, IncludeTree<T>> | "none") & {
|
|
322
|
+
__brand?: "DataSource";
|
|
25
323
|
};
|
|
26
|
-
export type DataSourceOf<T extends object> = KeysOfType<T, IncludeTree<T>> | "none";
|
|
27
324
|
/**
|
|
28
|
-
* A
|
|
29
|
-
* should be
|
|
325
|
+
* A branded `number` type indicating that the corresponding
|
|
326
|
+
* SQL column should be created as an `INTEGER`.
|
|
327
|
+
*
|
|
328
|
+
* While all numbers are valid JavaScript types, annotating a
|
|
329
|
+
* field with `Integer` communicates to the Cloesce compiler
|
|
330
|
+
* that this property represents an integer column in SQLite.
|
|
331
|
+
*
|
|
332
|
+
* Example:
|
|
333
|
+
* ```ts
|
|
334
|
+
* @D1
|
|
335
|
+
* export class Horse {
|
|
336
|
+
* @PrimaryKey id: Integer;
|
|
337
|
+
* height: number; // stored as REAL
|
|
338
|
+
* }
|
|
339
|
+
* ```
|
|
30
340
|
*/
|
|
31
341
|
export type Integer = number & {
|
|
32
|
-
|
|
342
|
+
__brand?: "Integer";
|
|
33
343
|
};
|
|
34
344
|
/**
|
|
35
|
-
*
|
|
345
|
+
* Provides helper methods for performing ORM operations against a D1 database.
|
|
346
|
+
*
|
|
347
|
+
* The `Orm` class uses the Cloesce metadata system to generate, execute,
|
|
348
|
+
* and map SQL queries for model classes decorated with `@D1`.
|
|
349
|
+
*
|
|
350
|
+
* Typical operations include:
|
|
351
|
+
* - `fromD1(db)` — create an ORM instance bound to a `D1Database`
|
|
352
|
+
* - `upsert()` — insert or update a model
|
|
353
|
+
* - `list()` — fetch all instances of a model
|
|
354
|
+
* - `get()` — fetch one instance by primary key
|
|
355
|
+
*
|
|
356
|
+
* Example:
|
|
357
|
+
* ```ts
|
|
358
|
+
* const orm = Orm.fromD1(env.db);
|
|
359
|
+
* const horses = (await orm.list(Horse, "default")).value;
|
|
360
|
+
* ```
|
|
36
361
|
*/
|
|
37
362
|
export declare class Orm {
|
|
38
363
|
private db;
|
|
@@ -49,9 +374,8 @@ export declare class Orm {
|
|
|
49
374
|
* @param ctor The model constructor
|
|
50
375
|
* @param records D1 Result records
|
|
51
376
|
* @param includeTree Include tree to define the relationships to join.
|
|
52
|
-
* @returns
|
|
53
377
|
*/
|
|
54
|
-
static
|
|
378
|
+
static mapSql<T extends object>(ctor: new () => T, records: Record<string, any>[], includeTree: IncludeTree<T> | null): Either<string, T[]>;
|
|
55
379
|
/**
|
|
56
380
|
* Returns a SQL query to insert a model into the database. Uses an IncludeTree as a guide for
|
|
57
381
|
* foreign key relationships, only inserting the explicitly stated pattern in the tree.
|
|
@@ -113,7 +437,7 @@ export declare class Orm {
|
|
|
113
437
|
*/
|
|
114
438
|
static listQuery<T extends object>(ctor: new () => T, includeTree: KeysOfType<T, IncludeTree<T>> | null): string;
|
|
115
439
|
/**
|
|
116
|
-
* Returns a query of the form `SELECT * FROM [Model.DataSource] WHERE [
|
|
440
|
+
* Returns a query of the form `SELECT * FROM [Model.DataSource] WHERE [PrimaryKey] = ?`.
|
|
117
441
|
* Requires the id parameter to be bound (use db.prepare().bind)
|
|
118
442
|
*/
|
|
119
443
|
static getQuery<T extends object>(ctor: new () => T, includeTree: KeysOfType<T, IncludeTree<T>> | null): string;
|
package/dist/ui/backend.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../src/ui/backend.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iDAAiD,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAe,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../src/ui/backend.ts"],"names":[],"mappings":"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"}
|