@columnus/shared 0.1.55 → 0.1.56

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 (76) hide show
  1. package/dist/apiProfile.d.ts +39 -0
  2. package/dist/apiProfile.js +19 -2
  3. package/dist/apiProfile.js.map +1 -1
  4. package/dist/assetFamily.d.ts +36 -0
  5. package/dist/assetFamily.js +73 -0
  6. package/dist/assetFamily.js.map +1 -0
  7. package/dist/assetFieldValues.d.ts +21 -0
  8. package/dist/{storageFieldValues.js → assetFieldValues.js} +159 -60
  9. package/dist/assetFieldValues.js.map +1 -0
  10. package/dist/assetGraph.d.ts +199 -0
  11. package/dist/assetGraph.js +214 -0
  12. package/dist/assetGraph.js.map +1 -0
  13. package/dist/assetJobs.d.ts +95 -0
  14. package/dist/assetJobs.js +41 -0
  15. package/dist/assetJobs.js.map +1 -0
  16. package/dist/assetSettings.d.ts +129 -0
  17. package/dist/assetSettings.js +87 -0
  18. package/dist/assetSettings.js.map +1 -0
  19. package/dist/assetValidators.d.ts +475 -0
  20. package/dist/assetValidators.js +83 -0
  21. package/dist/assetValidators.js.map +1 -0
  22. package/dist/bffProtocol.d.ts +29 -24
  23. package/dist/bffProtocol.js +5 -1
  24. package/dist/bffProtocol.js.map +1 -1
  25. package/dist/ciPreviewEnv.js +1 -1
  26. package/dist/ciPreviewEnv.js.map +1 -1
  27. package/dist/clipboardTransfer.js +112 -12
  28. package/dist/clipboardTransfer.js.map +1 -1
  29. package/dist/csv.js +118 -18
  30. package/dist/csv.js.map +1 -1
  31. package/dist/displayLabel.js +1 -1
  32. package/dist/displayLabel.js.map +1 -1
  33. package/dist/dotenv.js +5 -1
  34. package/dist/dotenv.js.map +1 -1
  35. package/dist/importMatch.js +118 -18
  36. package/dist/importMatch.js.map +1 -1
  37. package/dist/index.d.ts +7 -1
  38. package/dist/index.js +722 -80
  39. package/dist/index.js.map +1 -1
  40. package/dist/postLoginPath.d.ts +21 -0
  41. package/dist/postLoginPath.js +24 -0
  42. package/dist/postLoginPath.js.map +1 -0
  43. package/dist/previewDeployName.js +2 -2
  44. package/dist/previewDeployName.js.map +1 -1
  45. package/dist/recordTableColumns.js +112 -12
  46. package/dist/recordTableColumns.js.map +1 -1
  47. package/dist/recordTablePreload.js.map +1 -1
  48. package/dist/refDisplayRequests.js +112 -12
  49. package/dist/refDisplayRequests.js.map +1 -1
  50. package/dist/richDoc.d.ts +2 -2
  51. package/dist/richDoc.js +5 -5
  52. package/dist/richDoc.js.map +1 -1
  53. package/dist/schemaGenerator.d.ts +25 -1
  54. package/dist/schemaGenerator.js +4569 -18
  55. package/dist/schemaGenerator.js.map +1 -1
  56. package/dist/schemaShrink.d.ts +3 -1
  57. package/dist/schemaShrink.js +4451 -1
  58. package/dist/schemaShrink.js.map +1 -1
  59. package/dist/schemaShrinkValidators.d.ts +2 -2
  60. package/dist/schemaTypes.d.ts +123 -0
  61. package/dist/schemaTypes.js +107 -13
  62. package/dist/schemaTypes.js.map +1 -1
  63. package/dist/share.js +6 -1
  64. package/dist/share.js.map +1 -1
  65. package/dist/shareApiBridge.js +6 -1
  66. package/dist/shareApiBridge.js.map +1 -1
  67. package/dist/shareProposal.js +112 -12
  68. package/dist/shareProposal.js.map +1 -1
  69. package/dist/spaceBundle.js +112 -12
  70. package/dist/spaceBundle.js.map +1 -1
  71. package/dist/syncChannel.d.ts +15 -0
  72. package/dist/syncChannel.js +4642 -0
  73. package/dist/syncChannel.js.map +1 -0
  74. package/package.json +1 -1
  75. package/dist/storageFieldValues.d.ts +0 -10
  76. package/dist/storageFieldValues.js.map +0 -1
@@ -4180,7 +4180,13 @@ var RESERVED_TABLE_NAMES = /* @__PURE__ */ new Set([
4180
4180
  "columnus_api_output_secrets",
4181
4181
  "columnus_api_sync_routes",
4182
4182
  "columnus_api_outbox",
4183
- "columnus_api_delivery"
4183
+ "columnus_api_delivery",
4184
+ "columnus_assets",
4185
+ "columnus_asset_versions",
4186
+ "columnus_asset_refs",
4187
+ "columnus_asset_profiles",
4188
+ "columnus_asset_settings",
4189
+ "columnus_asset_jobs"
4184
4190
  ]);
4185
4191
  var displayTemplatesSchema = external_exports.object({
4186
4192
  id: external_exports.string().optional(),
@@ -4213,6 +4219,12 @@ var TABLE_COLORS = [
4213
4219
  "lavender"
4214
4220
  ];
4215
4221
  var tableColorSchema = external_exports.enum(TABLE_COLORS);
4222
+ var TABLE_KINDS = ["record", "asset"];
4223
+ var tableKindSchema = external_exports.enum(TABLE_KINDS);
4224
+ var assetBindingSchema = external_exports.object({
4225
+ profile: external_exports.string().min(1),
4226
+ enforced: external_exports.boolean().optional()
4227
+ });
4216
4228
  var fieldTypeSchema = external_exports.lazy(
4217
4229
  () => external_exports.discriminatedUnion("kind", [
4218
4230
  external_exports.object({ kind: external_exports.literal("string") }),
@@ -4240,7 +4252,9 @@ var fieldTypeSchema = external_exports.lazy(
4240
4252
  name: external_exports.string().regex(IDENT),
4241
4253
  label: external_exports.string().optional(),
4242
4254
  type: fieldTypeSchema,
4243
- optional: external_exports.boolean()
4255
+ optional: external_exports.boolean(),
4256
+ /** Nested image/file placements bind a Media profile like top-level ones. */
4257
+ asset: assetBindingSchema.optional()
4244
4258
  })
4245
4259
  )
4246
4260
  }),
@@ -4254,7 +4268,9 @@ var fieldSchema = external_exports.object({
4254
4268
  name: external_exports.string().regex(IDENT, "must be a valid identifier"),
4255
4269
  label: external_exports.string().optional(),
4256
4270
  type: fieldTypeSchema,
4257
- optional: external_exports.boolean()
4271
+ optional: external_exports.boolean(),
4272
+ /** Image/file fields may pin a Media profile; existence is enforced at upload/pick. */
4273
+ asset: assetBindingSchema.optional()
4258
4274
  });
4259
4275
  var indexSchema = external_exports.object({
4260
4276
  name: external_exports.string().regex(IDENT),
@@ -4271,6 +4287,8 @@ var tableSchema = external_exports.object({
4271
4287
  }),
4272
4288
  label: external_exports.string().optional(),
4273
4289
  color: tableColorSchema.optional(),
4290
+ /** Asset metadata tables are typed root tables but never ordinary user records. */
4291
+ kind: tableKindSchema.optional().default("record"),
4274
4292
  fields: external_exports.array(fieldSchema),
4275
4293
  indexes: external_exports.array(indexSchema).default([]),
4276
4294
  searchIndexes: external_exports.array(searchIndexSchema).default([]),
@@ -4280,6 +4298,7 @@ var manifestSchema = external_exports.object({
4280
4298
  tables: external_exports.array(tableSchema)
4281
4299
  }).superRefine((manifest, ctx) => {
4282
4300
  const tableNames = /* @__PURE__ */ new Set();
4301
+ const tablesByName = /* @__PURE__ */ new Map();
4283
4302
  for (const t of manifest.tables) {
4284
4303
  if (tableNames.has(t.name)) {
4285
4304
  ctx.addIssue({
@@ -4289,6 +4308,37 @@ var manifestSchema = external_exports.object({
4289
4308
  });
4290
4309
  }
4291
4310
  tableNames.add(t.name);
4311
+ tablesByName.set(t.name, t);
4312
+ if (tableKind(t) === "asset") {
4313
+ if (t.indexes.length > 0) {
4314
+ ctx.addIssue({
4315
+ code: external_exports.ZodIssueCode.custom,
4316
+ message: `${t.name} is an asset metadata table and cannot define indexes`,
4317
+ path: ["tables"]
4318
+ });
4319
+ }
4320
+ if (t.searchIndexes.length > 0) {
4321
+ ctx.addIssue({
4322
+ code: external_exports.ZodIssueCode.custom,
4323
+ message: `${t.name} is an asset metadata table and cannot define search indexes`,
4324
+ path: ["tables"]
4325
+ });
4326
+ }
4327
+ if (t.displayTemplates !== void 0) {
4328
+ ctx.addIssue({
4329
+ code: external_exports.ZodIssueCode.custom,
4330
+ message: `${t.name} is an asset metadata table and cannot define display templates`,
4331
+ path: ["tables"]
4332
+ });
4333
+ }
4334
+ if (t.color !== void 0) {
4335
+ ctx.addIssue({
4336
+ code: external_exports.ZodIssueCode.custom,
4337
+ message: `${t.name} is an asset metadata table and cannot define a color`,
4338
+ path: ["tables"]
4339
+ });
4340
+ }
4341
+ }
4292
4342
  const fieldNames = /* @__PURE__ */ new Set();
4293
4343
  for (const f of t.fields) {
4294
4344
  if (fieldNames.has(f.name)) {
@@ -4299,36 +4349,43 @@ var manifestSchema = external_exports.object({
4299
4349
  });
4300
4350
  }
4301
4351
  fieldNames.add(f.name);
4352
+ assertAssetBindingAllowed(ctx, t, f);
4302
4353
  }
4303
4354
  }
4304
4355
  for (const t of manifest.tables) {
4305
4356
  for (const f of t.fields) {
4306
- const danglingRef = findDanglingRef(f.type, tableNames);
4307
- if (danglingRef) {
4357
+ const invalidRef = findInvalidReference(f.type, tablesByName);
4358
+ if (invalidRef) {
4308
4359
  ctx.addIssue({
4309
4360
  code: external_exports.ZodIssueCode.custom,
4310
- message: `${t.name}.${f.name} references unknown table: ${danglingRef}`,
4361
+ message: `${t.name}.${f.name} ${invalidRef}`,
4311
4362
  path: ["tables"]
4312
4363
  });
4313
4364
  }
4314
4365
  }
4315
4366
  }
4316
4367
  });
4317
- function findDanglingRef(t, known) {
4368
+ function findInvalidReference(t, tablesByName) {
4318
4369
  switch (t.kind) {
4319
- case "id":
4320
- return known.has(t.table) ? null : t.table;
4370
+ case "id": {
4371
+ const target = tablesByName.get(t.table);
4372
+ if (!target) return `references unknown table: ${t.table}`;
4373
+ if (tableKind(target) === "asset") {
4374
+ return `cannot reference asset metadata table: ${t.table}`;
4375
+ }
4376
+ return null;
4377
+ }
4321
4378
  case "array":
4322
- return findDanglingRef(t.element, known);
4379
+ return findInvalidReference(t.element, tablesByName);
4323
4380
  case "object":
4324
4381
  for (const f of t.fields) {
4325
- const r = findDanglingRef(f.type, known);
4382
+ const r = findInvalidReference(f.type, tablesByName);
4326
4383
  if (r) return r;
4327
4384
  }
4328
4385
  return null;
4329
4386
  case "union":
4330
4387
  for (const o of t.options) {
4331
- const r = findDanglingRef(o, known);
4388
+ const r = findInvalidReference(o, tablesByName);
4332
4389
  if (r) return r;
4333
4390
  }
4334
4391
  return null;
@@ -4336,6 +4393,49 @@ function findDanglingRef(t, known) {
4336
4393
  return null;
4337
4394
  }
4338
4395
  }
4396
+ function tableKind(table) {
4397
+ return table.kind ?? "record";
4398
+ }
4399
+ function isFileFieldType(t) {
4400
+ return t.kind === "file" || t.kind === "image";
4401
+ }
4402
+ function isFileArrayFieldType(t) {
4403
+ return t.kind === "array" && (t.element.kind === "file" || t.element.kind === "image");
4404
+ }
4405
+ function isStorageFieldType(t) {
4406
+ return isFileFieldType(t) || isFileArrayFieldType(t);
4407
+ }
4408
+ function assertAssetBindingAllowed(ctx, table, field) {
4409
+ if (field.asset && tableKind(table) === "asset") {
4410
+ ctx.addIssue({
4411
+ code: external_exports.ZodIssueCode.custom,
4412
+ message: `${table.name}.${field.name} asset metadata fields cannot define a Media profile`,
4413
+ path: ["tables"]
4414
+ });
4415
+ } else if (field.asset && !isStorageFieldType(field.type)) {
4416
+ ctx.addIssue({
4417
+ code: external_exports.ZodIssueCode.custom,
4418
+ message: `${table.name}.${field.name} asset profile can only be set on image/file fields`,
4419
+ path: ["tables"]
4420
+ });
4421
+ }
4422
+ assertAssetBindingsInType(ctx, table, field.type);
4423
+ }
4424
+ function assertAssetBindingsInType(ctx, table, type) {
4425
+ switch (type.kind) {
4426
+ case "array":
4427
+ assertAssetBindingsInType(ctx, table, type.element);
4428
+ return;
4429
+ case "object":
4430
+ for (const field of type.fields) assertAssetBindingAllowed(ctx, table, field);
4431
+ return;
4432
+ case "union":
4433
+ for (const option of type.options) assertAssetBindingsInType(ctx, table, option);
4434
+ return;
4435
+ default:
4436
+ return;
4437
+ }
4438
+ }
4339
4439
 
4340
4440
  // packages/@columnus/shared/src/dataTransfer.ts
4341
4441
  var COLUMNUS_DATA_TRANSFER_VERSION = 1;