@storyshelf/db-postgres 0.6.2 → 0.7.0

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 (69) hide show
  1. package/README.md +56 -0
  2. package/dist/ddl.d.mts +1 -1
  3. package/dist/ddl.mjs +209 -13
  4. package/dist/ddl.mjs.map +1 -1
  5. package/dist/index.mjs +1 -1
  6. package/dist/index.mjs.map +1 -1
  7. package/dist/migrate.mjs +83 -3
  8. package/dist/migrate.mjs.map +1 -1
  9. package/dist/neon-http.mjs +1 -1
  10. package/dist/neon-http.mjs.map +1 -1
  11. package/dist/neon.mjs +1 -1
  12. package/dist/neon.mjs.map +1 -1
  13. package/dist/pg.mjs +1 -1
  14. package/dist/pg.mjs.map +1 -1
  15. package/dist/pglite.mjs +2 -2
  16. package/dist/pglite.mjs.map +1 -1
  17. package/dist/schema/baseline.d.mts +54 -0
  18. package/dist/schema/baseline.mjs +4 -1
  19. package/dist/schema/baseline.mjs.map +1 -1
  20. package/dist/schema/{status-config.d.mts → build-component.d.mts} +42 -35
  21. package/dist/schema/build-component.mjs +25 -0
  22. package/dist/schema/build-component.mjs.map +1 -0
  23. package/dist/schema/build-review.d.mts +118 -0
  24. package/dist/schema/build-review.mjs +23 -0
  25. package/dist/schema/build-review.mjs.map +1 -0
  26. package/dist/schema/build.d.mts +38 -2
  27. package/dist/schema/build.mjs +3 -0
  28. package/dist/schema/build.mjs.map +1 -1
  29. package/dist/schema/capture-job.d.mts +330 -0
  30. package/dist/schema/capture-job.mjs +56 -0
  31. package/dist/schema/capture-job.mjs.map +1 -0
  32. package/dist/schema/capture-shard.d.mts +257 -0
  33. package/dist/schema/capture-shard.mjs +40 -0
  34. package/dist/schema/capture-shard.mjs.map +1 -0
  35. package/dist/schema/comment.d.mts +18 -0
  36. package/dist/schema/comment.mjs +3 -2
  37. package/dist/schema/comment.mjs.map +1 -1
  38. package/dist/schema/connection.d.mts +173 -0
  39. package/dist/schema/connection.mjs +35 -0
  40. package/dist/schema/connection.mjs.map +1 -0
  41. package/dist/schema/design.d.mts +589 -0
  42. package/dist/schema/design.mjs +73 -0
  43. package/dist/schema/design.mjs.map +1 -0
  44. package/dist/schema/insight.d.mts +633 -0
  45. package/dist/schema/insight.mjs +68 -0
  46. package/dist/schema/insight.mjs.map +1 -0
  47. package/dist/schema/notification.d.mts +36 -0
  48. package/dist/schema/notification.mjs +5 -0
  49. package/dist/schema/notification.mjs.map +1 -1
  50. package/dist/schema/project.d.mts +126 -0
  51. package/dist/schema/project.mjs +8 -1
  52. package/dist/schema/project.mjs.map +1 -1
  53. package/dist/schema/site-setting.d.mts +99 -0
  54. package/dist/schema/site-setting.mjs +23 -0
  55. package/dist/schema/site-setting.mjs.map +1 -0
  56. package/dist/schema/snapshot.d.mts +108 -0
  57. package/dist/schema/snapshot.mjs +11 -1
  58. package/dist/schema/snapshot.mjs.map +1 -1
  59. package/dist/schema/usage.d.mts +267 -0
  60. package/dist/schema/usage.mjs +36 -0
  61. package/dist/schema/usage.mjs.map +1 -0
  62. package/dist/schema.d.mts +24 -3
  63. package/dist/schema.mjs +25 -4
  64. package/dist/schema.mjs.map +1 -1
  65. package/dist/vercel.mjs +1 -1
  66. package/dist/vercel.mjs.map +1 -1
  67. package/package.json +5 -5
  68. package/dist/schema/status-config.mjs +0 -26
  69. package/dist/schema/status-config.mjs.map +0 -1
@@ -0,0 +1,589 @@
1
+ import __tsdown_shims_path from 'node:path';
2
+ import __tsdown_shims_url from 'node:url';
3
+ //#region src/schema/design.d.ts
4
+ /** Narrow `design_links` table definition. */
5
+ declare const designLinks: import("drizzle-orm/pg-core").PgTableWithColumns<{
6
+ name: "design_links";
7
+ schema: undefined;
8
+ columns: {
9
+ id: import("drizzle-orm/pg-core").PgColumn<{
10
+ name: "id";
11
+ tableName: "design_links";
12
+ dataType: "string";
13
+ columnType: "PgText";
14
+ data: string;
15
+ driverParam: string;
16
+ notNull: true;
17
+ hasDefault: false;
18
+ isPrimaryKey: true;
19
+ isAutoincrement: false;
20
+ hasRuntimeDefault: false;
21
+ enumValues: [string, ...string[]];
22
+ baseColumn: never;
23
+ identity: undefined;
24
+ generated: undefined;
25
+ }, {}, {}>;
26
+ projectId: import("drizzle-orm/pg-core").PgColumn<{
27
+ name: "project_id";
28
+ tableName: "design_links";
29
+ dataType: "string";
30
+ columnType: "PgText";
31
+ data: string;
32
+ driverParam: string;
33
+ notNull: true;
34
+ hasDefault: false;
35
+ isPrimaryKey: false;
36
+ isAutoincrement: false;
37
+ hasRuntimeDefault: false;
38
+ enumValues: [string, ...string[]];
39
+ baseColumn: never;
40
+ identity: undefined;
41
+ generated: undefined;
42
+ }, {}, {}>;
43
+ importPath: import("drizzle-orm/pg-core").PgColumn<{
44
+ name: "import_path";
45
+ tableName: "design_links";
46
+ dataType: "string";
47
+ columnType: "PgText";
48
+ data: string;
49
+ driverParam: string;
50
+ notNull: false;
51
+ hasDefault: false;
52
+ isPrimaryKey: false;
53
+ isAutoincrement: false;
54
+ hasRuntimeDefault: false;
55
+ enumValues: [string, ...string[]];
56
+ baseColumn: never;
57
+ identity: undefined;
58
+ generated: undefined;
59
+ }, {}, {}>;
60
+ label: import("drizzle-orm/pg-core").PgColumn<{
61
+ name: "label";
62
+ tableName: "design_links";
63
+ dataType: "string";
64
+ columnType: "PgText";
65
+ data: string;
66
+ driverParam: string;
67
+ notNull: false;
68
+ hasDefault: false;
69
+ isPrimaryKey: false;
70
+ isAutoincrement: false;
71
+ hasRuntimeDefault: false;
72
+ enumValues: [string, ...string[]];
73
+ baseColumn: never;
74
+ identity: undefined;
75
+ generated: undefined;
76
+ }, {}, {}>;
77
+ url: import("drizzle-orm/pg-core").PgColumn<{
78
+ name: "url";
79
+ tableName: "design_links";
80
+ dataType: "string";
81
+ columnType: "PgText";
82
+ data: string;
83
+ driverParam: string;
84
+ notNull: true;
85
+ hasDefault: false;
86
+ isPrimaryKey: false;
87
+ isAutoincrement: false;
88
+ hasRuntimeDefault: false;
89
+ enumValues: [string, ...string[]];
90
+ baseColumn: never;
91
+ identity: undefined;
92
+ generated: undefined;
93
+ }, {}, {}>;
94
+ createdAt: import("drizzle-orm/pg-core").PgColumn<{
95
+ name: "created_at";
96
+ tableName: "design_links";
97
+ dataType: "string";
98
+ columnType: "PgTimestampString";
99
+ data: string;
100
+ driverParam: string;
101
+ notNull: true;
102
+ hasDefault: false;
103
+ isPrimaryKey: false;
104
+ isAutoincrement: false;
105
+ hasRuntimeDefault: false;
106
+ enumValues: undefined;
107
+ baseColumn: never;
108
+ identity: undefined;
109
+ generated: undefined;
110
+ }, {}, {}>;
111
+ updatedAt: import("drizzle-orm/pg-core").PgColumn<{
112
+ name: "updated_at";
113
+ tableName: "design_links";
114
+ dataType: "string";
115
+ columnType: "PgTimestampString";
116
+ data: string;
117
+ driverParam: string;
118
+ notNull: true;
119
+ hasDefault: false;
120
+ isPrimaryKey: false;
121
+ isAutoincrement: false;
122
+ hasRuntimeDefault: false;
123
+ enumValues: undefined;
124
+ baseColumn: never;
125
+ identity: undefined;
126
+ generated: undefined;
127
+ }, {}, {}>;
128
+ };
129
+ dialect: 'pg';
130
+ }>;
131
+ /** Narrow `design_credentials` table definition: the project-wide design-provider token. */
132
+ declare const designCredentials: import("drizzle-orm/pg-core").PgTableWithColumns<{
133
+ name: "design_credentials";
134
+ schema: undefined;
135
+ columns: {
136
+ id: import("drizzle-orm/pg-core").PgColumn<{
137
+ name: "id";
138
+ tableName: "design_credentials";
139
+ dataType: "string";
140
+ columnType: "PgText";
141
+ data: string;
142
+ driverParam: string;
143
+ notNull: true;
144
+ hasDefault: false;
145
+ isPrimaryKey: true;
146
+ isAutoincrement: false;
147
+ hasRuntimeDefault: false;
148
+ enumValues: [string, ...string[]];
149
+ baseColumn: never;
150
+ identity: undefined;
151
+ generated: undefined;
152
+ }, {}, {}>;
153
+ projectId: import("drizzle-orm/pg-core").PgColumn<{
154
+ name: "project_id";
155
+ tableName: "design_credentials";
156
+ dataType: "string";
157
+ columnType: "PgText";
158
+ data: string;
159
+ driverParam: string;
160
+ notNull: true;
161
+ hasDefault: false;
162
+ isPrimaryKey: false;
163
+ isAutoincrement: false;
164
+ hasRuntimeDefault: false;
165
+ enumValues: [string, ...string[]];
166
+ baseColumn: never;
167
+ identity: undefined;
168
+ generated: undefined;
169
+ }, {}, {}>;
170
+ provider: import("drizzle-orm/pg-core").PgColumn<{
171
+ name: "provider";
172
+ tableName: "design_credentials";
173
+ dataType: "string";
174
+ columnType: "PgText";
175
+ data: string;
176
+ driverParam: string;
177
+ notNull: true;
178
+ hasDefault: false;
179
+ isPrimaryKey: false;
180
+ isAutoincrement: false;
181
+ hasRuntimeDefault: false;
182
+ enumValues: [string, ...string[]];
183
+ baseColumn: never;
184
+ identity: undefined;
185
+ generated: undefined;
186
+ }, {}, {}>;
187
+ tokenEncrypted: import("drizzle-orm/pg-core").PgColumn<{
188
+ name: "token_encrypted";
189
+ tableName: "design_credentials";
190
+ dataType: "string";
191
+ columnType: "PgText";
192
+ data: string;
193
+ driverParam: string;
194
+ notNull: true;
195
+ hasDefault: false;
196
+ isPrimaryKey: false;
197
+ isAutoincrement: false;
198
+ hasRuntimeDefault: false;
199
+ enumValues: [string, ...string[]];
200
+ baseColumn: never;
201
+ identity: undefined;
202
+ generated: undefined;
203
+ }, {}, {}>;
204
+ status: import("drizzle-orm/pg-core").PgColumn<{
205
+ name: "status";
206
+ tableName: "design_credentials";
207
+ dataType: "string";
208
+ columnType: "PgText";
209
+ data: string;
210
+ driverParam: string;
211
+ notNull: true;
212
+ hasDefault: true;
213
+ isPrimaryKey: false;
214
+ isAutoincrement: false;
215
+ hasRuntimeDefault: false;
216
+ enumValues: [string, ...string[]];
217
+ baseColumn: never;
218
+ identity: undefined;
219
+ generated: undefined;
220
+ }, {}, {}>;
221
+ checkedAt: import("drizzle-orm/pg-core").PgColumn<{
222
+ name: "checked_at";
223
+ tableName: "design_credentials";
224
+ dataType: "string";
225
+ columnType: "PgTimestampString";
226
+ data: string;
227
+ driverParam: string;
228
+ notNull: false;
229
+ hasDefault: false;
230
+ isPrimaryKey: false;
231
+ isAutoincrement: false;
232
+ hasRuntimeDefault: false;
233
+ enumValues: undefined;
234
+ baseColumn: never;
235
+ identity: undefined;
236
+ generated: undefined;
237
+ }, {}, {}>;
238
+ createdAt: import("drizzle-orm/pg-core").PgColumn<{
239
+ name: "created_at";
240
+ tableName: "design_credentials";
241
+ dataType: "string";
242
+ columnType: "PgTimestampString";
243
+ data: string;
244
+ driverParam: string;
245
+ notNull: true;
246
+ hasDefault: false;
247
+ isPrimaryKey: false;
248
+ isAutoincrement: false;
249
+ hasRuntimeDefault: false;
250
+ enumValues: undefined;
251
+ baseColumn: never;
252
+ identity: undefined;
253
+ generated: undefined;
254
+ }, {}, {}>;
255
+ updatedAt: import("drizzle-orm/pg-core").PgColumn<{
256
+ name: "updated_at";
257
+ tableName: "design_credentials";
258
+ dataType: "string";
259
+ columnType: "PgTimestampString";
260
+ data: string;
261
+ driverParam: string;
262
+ notNull: true;
263
+ hasDefault: false;
264
+ isPrimaryKey: false;
265
+ isAutoincrement: false;
266
+ hasRuntimeDefault: false;
267
+ enumValues: undefined;
268
+ baseColumn: never;
269
+ identity: undefined;
270
+ generated: undefined;
271
+ }, {}, {}>;
272
+ };
273
+ dialect: 'pg';
274
+ }>;
275
+ /** Narrow `design_nodes` table definition (design metadata + render cache). */
276
+ declare const designNodes: import("drizzle-orm/pg-core").PgTableWithColumns<{
277
+ name: "design_nodes";
278
+ schema: undefined;
279
+ columns: {
280
+ id: import("drizzle-orm/pg-core").PgColumn<{
281
+ name: "id";
282
+ tableName: "design_nodes";
283
+ dataType: "string";
284
+ columnType: "PgText";
285
+ data: string;
286
+ driverParam: string;
287
+ notNull: true;
288
+ hasDefault: false;
289
+ isPrimaryKey: true;
290
+ isAutoincrement: false;
291
+ hasRuntimeDefault: false;
292
+ enumValues: [string, ...string[]];
293
+ baseColumn: never;
294
+ identity: undefined;
295
+ generated: undefined;
296
+ }, {}, {}>;
297
+ projectId: import("drizzle-orm/pg-core").PgColumn<{
298
+ name: "project_id";
299
+ tableName: "design_nodes";
300
+ dataType: "string";
301
+ columnType: "PgText";
302
+ data: string;
303
+ driverParam: string;
304
+ notNull: true;
305
+ hasDefault: false;
306
+ isPrimaryKey: false;
307
+ isAutoincrement: false;
308
+ hasRuntimeDefault: false;
309
+ enumValues: [string, ...string[]];
310
+ baseColumn: never;
311
+ identity: undefined;
312
+ generated: undefined;
313
+ }, {}, {}>;
314
+ provider: import("drizzle-orm/pg-core").PgColumn<{
315
+ name: "provider";
316
+ tableName: "design_nodes";
317
+ dataType: "string";
318
+ columnType: "PgText";
319
+ data: string;
320
+ driverParam: string;
321
+ notNull: true;
322
+ hasDefault: false;
323
+ isPrimaryKey: false;
324
+ isAutoincrement: false;
325
+ hasRuntimeDefault: false;
326
+ enumValues: [string, ...string[]];
327
+ baseColumn: never;
328
+ identity: undefined;
329
+ generated: undefined;
330
+ }, {}, {}>;
331
+ viewerId: import("drizzle-orm/pg-core").PgColumn<{
332
+ name: "viewer_id";
333
+ tableName: "design_nodes";
334
+ dataType: "string";
335
+ columnType: "PgText";
336
+ data: string;
337
+ driverParam: string;
338
+ notNull: true;
339
+ hasDefault: true;
340
+ isPrimaryKey: false;
341
+ isAutoincrement: false;
342
+ hasRuntimeDefault: false;
343
+ enumValues: [string, ...string[]];
344
+ baseColumn: never;
345
+ identity: undefined;
346
+ generated: undefined;
347
+ }, {}, {}>;
348
+ fileKey: import("drizzle-orm/pg-core").PgColumn<{
349
+ name: "file_key";
350
+ tableName: "design_nodes";
351
+ dataType: "string";
352
+ columnType: "PgText";
353
+ data: string;
354
+ driverParam: string;
355
+ notNull: true;
356
+ hasDefault: false;
357
+ isPrimaryKey: false;
358
+ isAutoincrement: false;
359
+ hasRuntimeDefault: false;
360
+ enumValues: [string, ...string[]];
361
+ baseColumn: never;
362
+ identity: undefined;
363
+ generated: undefined;
364
+ }, {}, {}>;
365
+ nodeId: import("drizzle-orm/pg-core").PgColumn<{
366
+ name: "node_id";
367
+ tableName: "design_nodes";
368
+ dataType: "string";
369
+ columnType: "PgText";
370
+ data: string;
371
+ driverParam: string;
372
+ notNull: true;
373
+ hasDefault: true;
374
+ isPrimaryKey: false;
375
+ isAutoincrement: false;
376
+ hasRuntimeDefault: false;
377
+ enumValues: [string, ...string[]];
378
+ baseColumn: never;
379
+ identity: undefined;
380
+ generated: undefined;
381
+ }, {}, {}>;
382
+ name: import("drizzle-orm/pg-core").PgColumn<{
383
+ name: "name";
384
+ tableName: "design_nodes";
385
+ dataType: "string";
386
+ columnType: "PgText";
387
+ data: string;
388
+ driverParam: string;
389
+ notNull: false;
390
+ hasDefault: false;
391
+ isPrimaryKey: false;
392
+ isAutoincrement: false;
393
+ hasRuntimeDefault: false;
394
+ enumValues: [string, ...string[]];
395
+ baseColumn: never;
396
+ identity: undefined;
397
+ generated: undefined;
398
+ }, {}, {}>;
399
+ version: import("drizzle-orm/pg-core").PgColumn<{
400
+ name: "version";
401
+ tableName: "design_nodes";
402
+ dataType: "string";
403
+ columnType: "PgText";
404
+ data: string;
405
+ driverParam: string;
406
+ notNull: false;
407
+ hasDefault: false;
408
+ isPrimaryKey: false;
409
+ isAutoincrement: false;
410
+ hasRuntimeDefault: false;
411
+ enumValues: [string, ...string[]];
412
+ baseColumn: never;
413
+ identity: undefined;
414
+ generated: undefined;
415
+ }, {}, {}>;
416
+ lastModified: import("drizzle-orm/pg-core").PgColumn<{
417
+ name: "last_modified";
418
+ tableName: "design_nodes";
419
+ dataType: "string";
420
+ columnType: "PgText";
421
+ data: string;
422
+ driverParam: string;
423
+ notNull: false;
424
+ hasDefault: false;
425
+ isPrimaryKey: false;
426
+ isAutoincrement: false;
427
+ hasRuntimeDefault: false;
428
+ enumValues: [string, ...string[]];
429
+ baseColumn: never;
430
+ identity: undefined;
431
+ generated: undefined;
432
+ }, {}, {}>;
433
+ state: import("drizzle-orm/pg-core").PgColumn<{
434
+ name: "state";
435
+ tableName: "design_nodes";
436
+ dataType: "string";
437
+ columnType: "PgText";
438
+ data: string;
439
+ driverParam: string;
440
+ notNull: true;
441
+ hasDefault: true;
442
+ isPrimaryKey: false;
443
+ isAutoincrement: false;
444
+ hasRuntimeDefault: false;
445
+ enumValues: [string, ...string[]];
446
+ baseColumn: never;
447
+ identity: undefined;
448
+ generated: undefined;
449
+ }, {}, {}>;
450
+ renderPath: import("drizzle-orm/pg-core").PgColumn<{
451
+ name: "render_path";
452
+ tableName: "design_nodes";
453
+ dataType: "string";
454
+ columnType: "PgText";
455
+ data: string;
456
+ driverParam: string;
457
+ notNull: false;
458
+ hasDefault: false;
459
+ isPrimaryKey: false;
460
+ isAutoincrement: false;
461
+ hasRuntimeDefault: false;
462
+ enumValues: [string, ...string[]];
463
+ baseColumn: never;
464
+ identity: undefined;
465
+ generated: undefined;
466
+ }, {}, {}>;
467
+ renderVersion: import("drizzle-orm/pg-core").PgColumn<{
468
+ name: "render_version";
469
+ tableName: "design_nodes";
470
+ dataType: "string";
471
+ columnType: "PgText";
472
+ data: string;
473
+ driverParam: string;
474
+ notNull: false;
475
+ hasDefault: false;
476
+ isPrimaryKey: false;
477
+ isAutoincrement: false;
478
+ hasRuntimeDefault: false;
479
+ enumValues: [string, ...string[]];
480
+ baseColumn: never;
481
+ identity: undefined;
482
+ generated: undefined;
483
+ }, {}, {}>;
484
+ fetchedAt: import("drizzle-orm/pg-core").PgColumn<{
485
+ name: "fetched_at";
486
+ tableName: "design_nodes";
487
+ dataType: "string";
488
+ columnType: "PgTimestampString";
489
+ data: string;
490
+ driverParam: string;
491
+ notNull: true;
492
+ hasDefault: false;
493
+ isPrimaryKey: false;
494
+ isAutoincrement: false;
495
+ hasRuntimeDefault: false;
496
+ enumValues: undefined;
497
+ baseColumn: never;
498
+ identity: undefined;
499
+ generated: undefined;
500
+ }, {}, {}>;
501
+ createdAt: import("drizzle-orm/pg-core").PgColumn<{
502
+ name: "created_at";
503
+ tableName: "design_nodes";
504
+ dataType: "string";
505
+ columnType: "PgTimestampString";
506
+ data: string;
507
+ driverParam: string;
508
+ notNull: true;
509
+ hasDefault: false;
510
+ isPrimaryKey: false;
511
+ isAutoincrement: false;
512
+ hasRuntimeDefault: false;
513
+ enumValues: undefined;
514
+ baseColumn: never;
515
+ identity: undefined;
516
+ generated: undefined;
517
+ }, {}, {}>;
518
+ updatedAt: import("drizzle-orm/pg-core").PgColumn<{
519
+ name: "updated_at";
520
+ tableName: "design_nodes";
521
+ dataType: "string";
522
+ columnType: "PgTimestampString";
523
+ data: string;
524
+ driverParam: string;
525
+ notNull: true;
526
+ hasDefault: false;
527
+ isPrimaryKey: false;
528
+ isAutoincrement: false;
529
+ hasRuntimeDefault: false;
530
+ enumValues: undefined;
531
+ baseColumn: never;
532
+ identity: undefined;
533
+ generated: undefined;
534
+ }, {}, {}>;
535
+ };
536
+ dialect: 'pg';
537
+ }>;
538
+ /** A design link: a project-level file link (`importPath` null) or a component mapping override. */
539
+ interface DesignLink {
540
+ id: string;
541
+ projectId: string;
542
+ /** Story file the URL is mapped to; null for a project-level design file link. */
543
+ importPath: string | null;
544
+ /** Display label of a project-level link. */
545
+ label: string | null;
546
+ url: string;
547
+ createdAt: string;
548
+ updatedAt: string;
549
+ }
550
+ /** The project-wide token of a design provider (an admin pastes it; encrypted at rest). */
551
+ interface DesignCredential {
552
+ id: string;
553
+ projectId: string;
554
+ /** Provider `metadata.kind`, e.g. `figma`. */
555
+ provider: string;
556
+ tokenEncrypted: string;
557
+ /** Last API outcome: `unknown` | `ok` | `unauthorized` | `forbidden`. */
558
+ status: string;
559
+ checkedAt: string | null;
560
+ /** When the credential was set or replaced; drives the rotation clock. */
561
+ createdAt: string;
562
+ updatedAt: string;
563
+ }
564
+ /** Cached design file/node metadata, keyed by project, provider, viewer, file key and node id. */
565
+ interface DesignNode {
566
+ id: string;
567
+ projectId: string;
568
+ provider: string;
569
+ /** Whose access fetched the entry: `""` for the project credential, else a user id. */
570
+ viewerId: string;
571
+ fileKey: string;
572
+ /** Provider node id; empty string for a whole-file link. */
573
+ nodeId: string;
574
+ name: string | null;
575
+ version: string | null;
576
+ lastModified: string | null;
577
+ /** `ok` | `deleted` | `unauthorized` | `forbidden`. */
578
+ state: string;
579
+ /** Storage path of the cached PNG render (node links only). */
580
+ renderPath: string | null;
581
+ /** File `version` the cached render was taken at. */
582
+ renderVersion: string | null;
583
+ fetchedAt: string;
584
+ createdAt: string;
585
+ updatedAt: string;
586
+ }
587
+ //#endregion
588
+ export { DesignCredential, DesignLink, DesignNode, designCredentials, designLinks, designNodes };
589
+ //# sourceMappingURL=design.d.mts.map
@@ -0,0 +1,73 @@
1
+ import "node:path";
2
+ import "node:url";
3
+ import.meta.url;
4
+ import { projects } from "./project.mjs";
5
+ import { index, pgTable, text, timestamp, uniqueIndex } from "drizzle-orm/pg-core";
6
+ //#region src/schema/design.ts
7
+ /** Narrow `design_links` table definition. */
8
+ const designLinks = pgTable("design_links", {
9
+ id: text("id").primaryKey(),
10
+ projectId: text("project_id").notNull().references(() => projects.id, { onDelete: "cascade" }),
11
+ importPath: text("import_path"),
12
+ label: text("label"),
13
+ url: text("url").notNull(),
14
+ createdAt: timestamp("created_at", {
15
+ withTimezone: true,
16
+ mode: "string"
17
+ }).notNull(),
18
+ updatedAt: timestamp("updated_at", {
19
+ withTimezone: true,
20
+ mode: "string"
21
+ }).notNull()
22
+ }, (t) => [index("design_links_project_id_idx").on(t.projectId), uniqueIndex("design_links_project_import_path_idx").on(t.projectId, t.importPath)]);
23
+ /** Narrow `design_credentials` table definition: the project-wide design-provider token. */
24
+ const designCredentials = pgTable("design_credentials", {
25
+ id: text("id").primaryKey(),
26
+ projectId: text("project_id").notNull().references(() => projects.id, { onDelete: "cascade" }),
27
+ provider: text("provider").notNull(),
28
+ tokenEncrypted: text("token_encrypted").notNull(),
29
+ status: text("status").notNull().default("unknown"),
30
+ checkedAt: timestamp("checked_at", {
31
+ withTimezone: true,
32
+ mode: "string"
33
+ }),
34
+ createdAt: timestamp("created_at", {
35
+ withTimezone: true,
36
+ mode: "string"
37
+ }).notNull(),
38
+ updatedAt: timestamp("updated_at", {
39
+ withTimezone: true,
40
+ mode: "string"
41
+ }).notNull()
42
+ }, (t) => [uniqueIndex("design_credentials_project_provider_idx").on(t.projectId, t.provider)]);
43
+ /** Narrow `design_nodes` table definition (design metadata + render cache). */
44
+ const designNodes = pgTable("design_nodes", {
45
+ id: text("id").primaryKey(),
46
+ projectId: text("project_id").notNull().references(() => projects.id, { onDelete: "cascade" }),
47
+ provider: text("provider").notNull(),
48
+ viewerId: text("viewer_id").notNull().default(""),
49
+ fileKey: text("file_key").notNull(),
50
+ nodeId: text("node_id").notNull().default(""),
51
+ name: text("name"),
52
+ version: text("version"),
53
+ lastModified: text("last_modified"),
54
+ state: text("state").notNull().default("ok"),
55
+ renderPath: text("render_path"),
56
+ renderVersion: text("render_version"),
57
+ fetchedAt: timestamp("fetched_at", {
58
+ withTimezone: true,
59
+ mode: "string"
60
+ }).notNull(),
61
+ createdAt: timestamp("created_at", {
62
+ withTimezone: true,
63
+ mode: "string"
64
+ }).notNull(),
65
+ updatedAt: timestamp("updated_at", {
66
+ withTimezone: true,
67
+ mode: "string"
68
+ }).notNull()
69
+ }, (t) => [uniqueIndex("design_nodes_project_file_node_idx").on(t.projectId, t.provider, t.viewerId, t.fileKey, t.nodeId)]);
70
+ //#endregion
71
+ export { designCredentials, designLinks, designNodes };
72
+
73
+ //# sourceMappingURL=design.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"design.mjs","names":[],"sources":["../../src/schema/design.ts"],"sourcesContent":["import { index, pgTable, text, timestamp, uniqueIndex } from \"drizzle-orm/pg-core\";\nimport { projects } from \"./project.ts\";\n\n/** Narrow `design_links` table definition. */\nexport const designLinks = pgTable(\n \"design_links\",\n {\n id: text(\"id\").primaryKey(),\n projectId: text(\"project_id\")\n .notNull()\n .references(() => projects.id, { onDelete: \"cascade\" }),\n importPath: text(\"import_path\"),\n label: text(\"label\"),\n url: text(\"url\").notNull(),\n createdAt: timestamp(\"created_at\", { withTimezone: true, mode: \"string\" }).notNull(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true, mode: \"string\" }).notNull(),\n },\n (t) => [\n index(\"design_links_project_id_idx\").on(t.projectId),\n // One mapping per story file; project-level links (null import_path) never collide.\n uniqueIndex(\"design_links_project_import_path_idx\").on(t.projectId, t.importPath),\n ],\n);\n\n/** Narrow `design_credentials` table definition: the project-wide design-provider token. */\nexport const designCredentials = pgTable(\n \"design_credentials\",\n {\n id: text(\"id\").primaryKey(),\n projectId: text(\"project_id\")\n .notNull()\n .references(() => projects.id, { onDelete: \"cascade\" }),\n provider: text(\"provider\").notNull(),\n tokenEncrypted: text(\"token_encrypted\").notNull(),\n status: text(\"status\").notNull().default(\"unknown\"),\n checkedAt: timestamp(\"checked_at\", { withTimezone: true, mode: \"string\" }),\n createdAt: timestamp(\"created_at\", { withTimezone: true, mode: \"string\" }).notNull(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true, mode: \"string\" }).notNull(),\n },\n (t) => [uniqueIndex(\"design_credentials_project_provider_idx\").on(t.projectId, t.provider)],\n);\n\n/** Narrow `design_nodes` table definition (design metadata + render cache). */\nexport const designNodes = pgTable(\n \"design_nodes\",\n {\n id: text(\"id\").primaryKey(),\n projectId: text(\"project_id\")\n .notNull()\n .references(() => projects.id, { onDelete: \"cascade\" }),\n provider: text(\"provider\").notNull(),\n viewerId: text(\"viewer_id\").notNull().default(\"\"),\n fileKey: text(\"file_key\").notNull(),\n nodeId: text(\"node_id\").notNull().default(\"\"),\n name: text(\"name\"),\n version: text(\"version\"),\n lastModified: text(\"last_modified\"),\n state: text(\"state\").notNull().default(\"ok\"),\n renderPath: text(\"render_path\"),\n renderVersion: text(\"render_version\"),\n fetchedAt: timestamp(\"fetched_at\", { withTimezone: true, mode: \"string\" }).notNull(),\n createdAt: timestamp(\"created_at\", { withTimezone: true, mode: \"string\" }).notNull(),\n updatedAt: timestamp(\"updated_at\", { withTimezone: true, mode: \"string\" }).notNull(),\n },\n (t) => [\n uniqueIndex(\"design_nodes_project_file_node_idx\").on(\n t.projectId,\n t.provider,\n t.viewerId,\n t.fileKey,\n t.nodeId,\n ),\n ],\n);\n\n/** A design link: a project-level file link (`importPath` null) or a component mapping override. */\nexport interface DesignLink {\n id: string;\n projectId: string;\n /** Story file the URL is mapped to; null for a project-level design file link. */\n importPath: string | null;\n /** Display label of a project-level link. */\n label: string | null;\n url: string;\n createdAt: string;\n updatedAt: string;\n}\n\n/** The project-wide token of a design provider (an admin pastes it; encrypted at rest). */\nexport interface DesignCredential {\n id: string;\n projectId: string;\n /** Provider `metadata.kind`, e.g. `figma`. */\n provider: string;\n tokenEncrypted: string;\n /** Last API outcome: `unknown` | `ok` | `unauthorized` | `forbidden`. */\n status: string;\n checkedAt: string | null;\n /** When the credential was set or replaced; drives the rotation clock. */\n createdAt: string;\n updatedAt: string;\n}\n\n/** Cached design file/node metadata, keyed by project, provider, viewer, file key and node id. */\nexport interface DesignNode {\n id: string;\n projectId: string;\n provider: string;\n /** Whose access fetched the entry: `\"\"` for the project credential, else a user id. */\n viewerId: string;\n fileKey: string;\n /** Provider node id; empty string for a whole-file link. */\n nodeId: string;\n name: string | null;\n version: string | null;\n lastModified: string | null;\n /** `ok` | `deleted` | `unauthorized` | `forbidden`. */\n state: string;\n /** Storage path of the cached PNG render (node links only). */\n renderPath: string | null;\n /** File `version` the cached render was taken at. */\n renderVersion: string | null;\n fetchedAt: string;\n createdAt: string;\n updatedAt: string;\n}\n"],"mappings":";;;;;;;AAIA,MAAa,cAAc,QACzB,gBACA;CACE,IAAI,KAAK,IAAI,CAAC,CAAC,WAAW;CAC1B,WAAW,KAAK,YAAY,CAAC,CAC1B,QAAQ,CAAC,CACT,iBAAiB,SAAS,IAAI,EAAE,UAAU,UAAU,CAAC;CACxD,YAAY,KAAK,aAAa;CAC9B,OAAO,KAAK,OAAO;CACnB,KAAK,KAAK,KAAK,CAAC,CAAC,QAAQ;CACzB,WAAW,UAAU,cAAc;EAAE,cAAc;EAAM,MAAM;CAAS,CAAC,CAAC,CAAC,QAAQ;CACnF,WAAW,UAAU,cAAc;EAAE,cAAc;EAAM,MAAM;CAAS,CAAC,CAAC,CAAC,QAAQ;AACrF,IACC,MAAM,CACL,MAAM,6BAA6B,CAAC,CAAC,GAAG,EAAE,SAAS,GAEnD,YAAY,sCAAsC,CAAC,CAAC,GAAG,EAAE,WAAW,EAAE,UAAU,CAClF,CACF;;AAGA,MAAa,oBAAoB,QAC/B,sBACA;CACE,IAAI,KAAK,IAAI,CAAC,CAAC,WAAW;CAC1B,WAAW,KAAK,YAAY,CAAC,CAC1B,QAAQ,CAAC,CACT,iBAAiB,SAAS,IAAI,EAAE,UAAU,UAAU,CAAC;CACxD,UAAU,KAAK,UAAU,CAAC,CAAC,QAAQ;CACnC,gBAAgB,KAAK,iBAAiB,CAAC,CAAC,QAAQ;CAChD,QAAQ,KAAK,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,SAAS;CAClD,WAAW,UAAU,cAAc;EAAE,cAAc;EAAM,MAAM;CAAS,CAAC;CACzE,WAAW,UAAU,cAAc;EAAE,cAAc;EAAM,MAAM;CAAS,CAAC,CAAC,CAAC,QAAQ;CACnF,WAAW,UAAU,cAAc;EAAE,cAAc;EAAM,MAAM;CAAS,CAAC,CAAC,CAAC,QAAQ;AACrF,IACC,MAAM,CAAC,YAAY,yCAAyC,CAAC,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,CAAC,CAC5F;;AAGA,MAAa,cAAc,QACzB,gBACA;CACE,IAAI,KAAK,IAAI,CAAC,CAAC,WAAW;CAC1B,WAAW,KAAK,YAAY,CAAC,CAC1B,QAAQ,CAAC,CACT,iBAAiB,SAAS,IAAI,EAAE,UAAU,UAAU,CAAC;CACxD,UAAU,KAAK,UAAU,CAAC,CAAC,QAAQ;CACnC,UAAU,KAAK,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE;CAChD,SAAS,KAAK,UAAU,CAAC,CAAC,QAAQ;CAClC,QAAQ,KAAK,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE;CAC5C,MAAM,KAAK,MAAM;CACjB,SAAS,KAAK,SAAS;CACvB,cAAc,KAAK,eAAe;CAClC,OAAO,KAAK,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,IAAI;CAC3C,YAAY,KAAK,aAAa;CAC9B,eAAe,KAAK,gBAAgB;CACpC,WAAW,UAAU,cAAc;EAAE,cAAc;EAAM,MAAM;CAAS,CAAC,CAAC,CAAC,QAAQ;CACnF,WAAW,UAAU,cAAc;EAAE,cAAc;EAAM,MAAM;CAAS,CAAC,CAAC,CAAC,QAAQ;CACnF,WAAW,UAAU,cAAc;EAAE,cAAc;EAAM,MAAM;CAAS,CAAC,CAAC,CAAC,QAAQ;AACrF,IACC,MAAM,CACL,YAAY,oCAAoC,CAAC,CAAC,GAChD,EAAE,WACF,EAAE,UACF,EAAE,UACF,EAAE,SACF,EAAE,MACJ,CACF,CACF"}