@tailor-platform/sdk 2.0.0-next.4 → 2.0.0-next.5

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 (258) hide show
  1. package/CHANGELOG.md +97 -0
  2. package/dist/{application-BX13RArL.mjs → application-Bf8wxOi6.mjs} +417 -589
  3. package/dist/application-Bf8wxOi6.mjs.map +1 -0
  4. package/dist/application-CUkjzfij.mjs +3 -0
  5. package/dist/cli/cache/bundle-cache.d.mts +2 -1
  6. package/dist/cli/cache/store.d.mts +1 -1
  7. package/dist/cli/commands/api/index.d.mts +1 -0
  8. package/dist/cli/commands/deploy/aigateway.d.mts +5 -1
  9. package/dist/cli/commands/deploy/application.d.mts +7 -1
  10. package/dist/cli/commands/deploy/apply-phases.d.mts +14 -1
  11. package/dist/cli/commands/deploy/auth.d.mts +5 -1
  12. package/dist/cli/commands/deploy/deploy.d.mts +5 -0
  13. package/dist/cli/commands/deploy/executor.d.mts +7 -1
  14. package/dist/cli/commands/deploy/function-registry.d.mts +5 -0
  15. package/dist/cli/commands/deploy/idp.d.mts +5 -1
  16. package/dist/cli/commands/deploy/resolver.d.mts +5 -1
  17. package/dist/cli/commands/deploy/secret-manager.d.mts +5 -1
  18. package/dist/cli/commands/deploy/staticwebsite.d.mts +5 -1
  19. package/dist/cli/commands/deploy/tailordb/index.d.mts +8 -1
  20. package/dist/cli/commands/deploy/types.d.mts +3 -1
  21. package/dist/cli/commands/deploy/workflow-execution-policy.d.mts +3 -1
  22. package/dist/cli/commands/deploy/workflow.d.mts +4 -1
  23. package/dist/cli/commands/executor/get.d.mts +0 -1
  24. package/dist/cli/commands/executor/jobs.d.mts +0 -1
  25. package/dist/cli/commands/executor/list.d.mts +0 -1
  26. package/dist/cli/commands/executor/transform.d.mts +1 -0
  27. package/dist/cli/commands/executor/trigger.d.mts +0 -1
  28. package/dist/cli/commands/executor/webhook.d.mts +0 -1
  29. package/dist/cli/commands/function/get.d.mts +0 -1
  30. package/dist/cli/commands/function/list.d.mts +0 -1
  31. package/dist/cli/commands/function/transform.d.mts +1 -0
  32. package/dist/cli/commands/generate/service.d.mts +5 -1
  33. package/dist/cli/commands/machineuser/list.d.mts +0 -1
  34. package/dist/cli/commands/machineuser/token.d.mts +0 -1
  35. package/dist/cli/commands/oauth2client/get.d.mts +0 -1
  36. package/dist/cli/commands/oauth2client/list.d.mts +0 -1
  37. package/dist/cli/commands/oauth2client/transform.d.mts +1 -0
  38. package/dist/cli/commands/organization/folder/create.d.mts +0 -1
  39. package/dist/cli/commands/organization/folder/delete.d.mts +0 -1
  40. package/dist/cli/commands/organization/folder/get.d.mts +0 -1
  41. package/dist/cli/commands/organization/folder/list.d.mts +0 -1
  42. package/dist/cli/commands/organization/folder/update.d.mts +0 -1
  43. package/dist/cli/commands/organization/get.d.mts +0 -1
  44. package/dist/cli/commands/organization/list.d.mts +0 -1
  45. package/dist/cli/commands/organization/transform.d.mts +2 -0
  46. package/dist/cli/commands/organization/tree.d.mts +0 -1
  47. package/dist/cli/commands/organization/update.d.mts +0 -1
  48. package/dist/cli/commands/remove.d.mts +0 -1
  49. package/dist/cli/commands/show.d.mts +9 -4
  50. package/dist/cli/commands/tailordb/migrate/config.d.mts +0 -1
  51. package/dist/cli/commands/tailordb/migrate/diff-calculator.d.mts +16 -3
  52. package/dist/cli/commands/tailordb/migrate/generate.d.mts +0 -1
  53. package/dist/cli/commands/tailordb/migrate/snapshot-types.d.mts +6 -0
  54. package/dist/cli/commands/tailordb/migrate/snapshot.d.mts +1 -1
  55. package/dist/cli/commands/tailordb/truncate.d.mts +0 -1
  56. package/dist/cli/commands/workflow/executions.d.mts +0 -1
  57. package/dist/cli/commands/workflow/get.d.mts +2 -1
  58. package/dist/cli/commands/workflow/list.d.mts +0 -1
  59. package/dist/cli/commands/workflow/resume.d.mts +0 -1
  60. package/dist/cli/commands/workflow/start.d.mts +0 -1
  61. package/dist/cli/commands/workflow/status.d.mts +1 -0
  62. package/dist/cli/commands/workflow/transform.d.mts +1 -0
  63. package/dist/cli/commands/workflow/wait.d.mts +0 -1
  64. package/dist/cli/commands/workflow/waiter.d.mts +1 -1
  65. package/dist/cli/commands/workspace/app/health.d.mts +0 -1
  66. package/dist/cli/commands/workspace/app/list.d.mts +0 -1
  67. package/dist/cli/commands/workspace/app/transform.d.mts +2 -0
  68. package/dist/cli/commands/workspace/create.d.mts +0 -1
  69. package/dist/cli/commands/workspace/delete.d.mts +0 -1
  70. package/dist/cli/commands/workspace/get.d.mts +0 -1
  71. package/dist/cli/commands/workspace/list.d.mts +0 -1
  72. package/dist/cli/commands/workspace/restore.d.mts +0 -1
  73. package/dist/cli/commands/workspace/transform.d.mts +2 -0
  74. package/dist/cli/commands/workspace/user/invite.d.mts +0 -1
  75. package/dist/cli/commands/workspace/user/list.d.mts +0 -1
  76. package/dist/cli/commands/workspace/user/remove.d.mts +0 -1
  77. package/dist/cli/commands/workspace/user/transform.d.mts +1 -0
  78. package/dist/cli/commands/workspace/user/update.d.mts +0 -1
  79. package/dist/cli/index.d.mts +6 -3
  80. package/dist/cli/index.mjs +142 -73
  81. package/dist/cli/index.mjs.map +1 -1
  82. package/dist/cli/lib.d.mts +4 -2
  83. package/dist/cli/lib.mjs +3 -3
  84. package/dist/cli/lib.mjs.map +1 -1
  85. package/dist/cli/query/index.d.mts +0 -1
  86. package/dist/cli/services/application.d.mts +12 -1
  87. package/dist/cli/services/auth/service.d.mts +2 -0
  88. package/dist/cli/services/executor/service.d.mts +1 -1
  89. package/dist/cli/services/http-adapter/bundler.d.mts +3 -1
  90. package/dist/cli/services/http-adapter/service.d.mts +2 -1
  91. package/dist/cli/services/resolver/service.d.mts +1 -1
  92. package/dist/cli/services/tailordb/service.d.mts +3 -1
  93. package/dist/cli/services/workflow/bundler.d.mts +2 -1
  94. package/dist/cli/services/workflow/service.d.mts +1 -1
  95. package/dist/cli/shared/args.d.mts +1 -1
  96. package/dist/cli/shared/client.d.mts +1 -1
  97. package/dist/cli/shared/config-loader.d.mts +0 -1
  98. package/dist/cli/shared/context.d.mts +2 -1
  99. package/dist/cli/shared/script-executor.d.mts +0 -1
  100. package/dist/cli/shared/seed-chunker.d.mts +7 -3
  101. package/dist/cli/shared/type-generator.d.mts +0 -1
  102. package/dist/completion/zsh-worker.zsh +1 -1
  103. package/dist/configure/config/index.d.mts +0 -1
  104. package/dist/configure/config/types.d.mts +2 -2
  105. package/dist/configure/index.d.mts +14 -4
  106. package/dist/configure/index.mjs +196 -2
  107. package/dist/configure/index.mjs.map +1 -1
  108. package/dist/configure/services/aigateway/index.d.mts +0 -1
  109. package/dist/configure/services/aigateway/types.d.mts +0 -1
  110. package/dist/configure/services/auth/index.d.mts +0 -1
  111. package/dist/configure/services/auth/types.d.mts +15 -14
  112. package/dist/configure/services/executor/executor.d.mts +1 -1
  113. package/dist/configure/services/executor/index.d.mts +1 -0
  114. package/dist/configure/services/executor/operation.d.mts +2 -2
  115. package/dist/configure/services/executor/trigger/event.d.mts +0 -1
  116. package/dist/configure/services/executor/trigger/index.d.mts +0 -1
  117. package/dist/configure/services/executor/trigger/schedule.d.mts +0 -1
  118. package/dist/configure/services/executor/trigger/webhook.d.mts +0 -1
  119. package/dist/configure/services/http-adapter/http-adapter.d.mts +1 -2
  120. package/dist/configure/services/idp/index.d.mts +1 -5
  121. package/dist/configure/services/idp/permission.d.mts +4 -5
  122. package/dist/configure/services/idp/types.d.mts +0 -1
  123. package/dist/configure/services/index.d.mts +5 -0
  124. package/dist/configure/services/resolver/resolver.d.mts +1 -0
  125. package/dist/configure/services/resolver/types.d.mts +0 -1
  126. package/dist/configure/services/secrets/index.d.mts +0 -1
  127. package/dist/configure/services/secrets/types.d.mts +0 -1
  128. package/dist/configure/services/staticwebsite/index.d.mts +0 -1
  129. package/dist/configure/services/staticwebsite/types.d.mts +0 -1
  130. package/dist/configure/services/tailordb/permission.d.mts +4 -5
  131. package/dist/configure/services/tailordb/schema.d.mts +85 -49
  132. package/dist/configure/services/tailordb/types.d.mts +66 -17
  133. package/dist/configure/services/workflow/execution-policy.d.mts +0 -1
  134. package/dist/configure/services/workflow/execution-policy.types.d.mts +0 -1
  135. package/dist/configure/services/workflow/index.d.mts +1 -0
  136. package/dist/configure/services/workflow/job.d.mts +0 -1
  137. package/dist/configure/services/workflow/wait-point.d.mts +0 -1
  138. package/dist/configure/services/workflow/workflow.d.mts +1 -1
  139. package/dist/configure/types/field-runtime.d.mts +0 -1
  140. package/dist/configure/types/field.d.mts +1 -2
  141. package/dist/configure/types/field.types.d.mts +6 -45
  142. package/dist/configure/types/index.d.mts +1 -0
  143. package/dist/configure/types/type.d.mts +1 -2
  144. package/dist/kysely/index.d.mts +3 -4
  145. package/dist/{kysely-type-D-zflMGf.mjs → kysely-type-DqIRgDYR.mjs} +4 -3
  146. package/dist/kysely-type-DqIRgDYR.mjs.map +1 -0
  147. package/dist/parser/service/auth/index.d.mts +1 -1
  148. package/dist/parser/service/auth/schema.d.mts +2 -0
  149. package/dist/parser/service/http-adapter/index.d.mts +1 -1
  150. package/dist/parser/service/idp/types.d.mts +1 -0
  151. package/dist/parser/service/tailordb/types.d.mts +6 -1
  152. package/dist/plugin/builtin/enum-constants/index.d.mts +0 -1
  153. package/dist/plugin/builtin/file-utils/index.d.mts +0 -1
  154. package/dist/plugin/builtin/kysely-type/index.d.mts +0 -1
  155. package/dist/plugin/builtin/kysely-type/index.mjs +1 -1
  156. package/dist/plugin/builtin/seed/index.d.mts +0 -1
  157. package/dist/plugin/get-generated-type.d.mts +0 -1
  158. package/dist/plugin/manager.d.mts +2 -1
  159. package/dist/plugin/types.d.mts +0 -1
  160. package/dist/plugin/with-context.d.mts +0 -1
  161. package/dist/{register-ts-hook-BM1caLT0.mjs → register-ts-hook-BhzVkej0.mjs} +553 -199
  162. package/dist/register-ts-hook-BhzVkej0.mjs.map +1 -0
  163. package/dist/runtime/aigateway.d.mts +0 -1
  164. package/dist/runtime/authconnection.d.mts +0 -1
  165. package/dist/runtime/context.d.mts +0 -1
  166. package/dist/runtime/globals.d.mts +0 -1
  167. package/dist/runtime/index.d.mts +0 -1
  168. package/dist/runtime/types.d.mts +9 -4
  169. package/dist/{schema-C4LYbXVG.mjs → schema-iCd1ugGp.mjs} +253 -50
  170. package/dist/schema-iCd1ugGp.mjs.map +1 -0
  171. package/dist/seed/index.d.mts +3 -2
  172. package/dist/service-BT0GPd01.mjs +3 -0
  173. package/dist/{service-ufH7sS8o.mjs → service-CzZEVrp9.mjs} +14 -9
  174. package/dist/service-CzZEVrp9.mjs.map +1 -0
  175. package/dist/{service_pb-B5w9rjPY.mjs → service_pb-Bk7dL-yT.mjs} +12 -2
  176. package/dist/{service_pb-B5w9rjPY.mjs.map → service_pb-Bk7dL-yT.mjs.map} +1 -1
  177. package/dist/{service_pb-B2FF59sP.mjs → service_pb-DZkfjB_6.mjs} +1 -1
  178. package/dist/tailor-proto/src/tailor/v1/aigateway_pb.d.mts +0 -1
  179. package/dist/tailor-proto/src/tailor/v1/aigateway_resource_pb.d.mts +0 -1
  180. package/dist/tailor-proto/src/tailor/v1/application_pb.d.mts +0 -1
  181. package/dist/tailor-proto/src/tailor/v1/application_resource_pb.d.mts +0 -1
  182. package/dist/tailor-proto/src/tailor/v1/auth_pb.d.mts +0 -1
  183. package/dist/tailor-proto/src/tailor/v1/auth_resource_pb.d.mts +0 -1
  184. package/dist/tailor-proto/src/tailor/v1/events_pb.d.mts +0 -1
  185. package/dist/tailor-proto/src/tailor/v1/events_resource_pb.d.mts +0 -1
  186. package/dist/tailor-proto/src/tailor/v1/executor_pb.d.mts +0 -1
  187. package/dist/tailor-proto/src/tailor/v1/executor_resource_pb.d.mts +0 -1
  188. package/dist/tailor-proto/src/tailor/v1/function_pb.d.mts +0 -1
  189. package/dist/tailor-proto/src/tailor/v1/function_registry_pb.d.mts +0 -1
  190. package/dist/tailor-proto/src/tailor/v1/function_resource_pb.d.mts +0 -1
  191. package/dist/tailor-proto/src/tailor/v1/http_adapter_resource_pb.d.mts +0 -1
  192. package/dist/tailor-proto/src/tailor/v1/idp_pb.d.mts +0 -1
  193. package/dist/tailor-proto/src/tailor/v1/idp_resource_pb.d.mts +0 -1
  194. package/dist/tailor-proto/src/tailor/v1/metadata_pb.d.mts +0 -1
  195. package/dist/tailor-proto/src/tailor/v1/metadata_resource_pb.d.mts +0 -1
  196. package/dist/tailor-proto/src/tailor/v1/meter_pb.d.mts +0 -1
  197. package/dist/tailor-proto/src/tailor/v1/pipeline_pb.d.mts +0 -1
  198. package/dist/tailor-proto/src/tailor/v1/pipeline_resource_pb.d.mts +0 -1
  199. package/dist/tailor-proto/src/tailor/v1/resource_pb.d.mts +0 -1
  200. package/dist/tailor-proto/src/tailor/v1/secret_manager_pb.d.mts +0 -1
  201. package/dist/tailor-proto/src/tailor/v1/secret_manager_resource_pb.d.mts +0 -1
  202. package/dist/tailor-proto/src/tailor/v1/service_pb.d.mts +0 -1
  203. package/dist/tailor-proto/src/tailor/v1/stateflow_pb.d.mts +0 -1
  204. package/dist/tailor-proto/src/tailor/v1/stateflow_resource_pb.d.mts +0 -1
  205. package/dist/tailor-proto/src/tailor/v1/staticwebsite_pb.d.mts +0 -1
  206. package/dist/tailor-proto/src/tailor/v1/staticwebsite_resource_pb.d.mts +0 -1
  207. package/dist/tailor-proto/src/tailor/v1/tailordb_pb.d.mts +0 -1
  208. package/dist/tailor-proto/src/tailor/v1/tailordb_resource_pb.d.mts +0 -1
  209. package/dist/tailor-proto/src/tailor/v1/telemetryrouter_pb.d.mts +0 -1
  210. package/dist/tailor-proto/src/tailor/v1/telemetryrouter_resource_pb.d.mts +0 -1
  211. package/dist/tailor-proto/src/tailor/v1/workflow_pb.d.mts +0 -1
  212. package/dist/tailor-proto/src/tailor/v1/workflow_resource_pb.d.mts +0 -1
  213. package/dist/tailor-proto/src/tailor/v1/workspace_pb.d.mts +0 -1
  214. package/dist/tailor-proto/src/tailor/v1/workspace_resource_pb.d.mts +0 -1
  215. package/dist/types/aigateway.generated.d.mts +5 -2
  216. package/dist/types/auth-connection.generated.d.mts +24 -11
  217. package/dist/types/auth.generated.d.mts +115 -84
  218. package/dist/types/executor.generated.d.mts +76 -84
  219. package/dist/types/helpers.d.mts +7 -6
  220. package/dist/types/http-adapter.generated.d.mts +11 -5
  221. package/dist/types/idp.generated.d.mts +536 -524
  222. package/dist/types/resolver.generated.d.mts +26 -11
  223. package/dist/types/staticwebsite.generated.d.mts +7 -3
  224. package/dist/types/tailordb.generated.d.mts +57 -29
  225. package/dist/types/workflow.generated.d.mts +9 -4
  226. package/dist/utils/test/index.d.mts +1 -2
  227. package/dist/utils/test/index.mjs +36 -10
  228. package/dist/utils/test/index.mjs.map +1 -1
  229. package/dist/utils/test/mock.d.mts +0 -1
  230. package/dist/vitest/index.d.mts +1 -1
  231. package/dist/vitest/mock-kysely.d.mts +0 -1
  232. package/dist/vitest/mocks/aigateway.d.mts +2 -2
  233. package/dist/vitest/mocks/authconnection.d.mts +2 -2
  234. package/dist/vitest/mocks/idp.d.mts +2 -2
  235. package/dist/vitest/mocks/secretmanager.d.mts +3 -1
  236. package/dist/vitest/mocks/tailordb.d.mts +6 -3
  237. package/dist/vitest/mocks/workflow.d.mts +11 -6
  238. package/dist/vitest/workflow-local.d.mts +1 -0
  239. package/docs/cli/setup.md +1 -1
  240. package/docs/cli-reference.md +7 -6
  241. package/docs/migration/v2.md +206 -0
  242. package/docs/services/aigateway.md +2 -0
  243. package/docs/services/tailordb.md +100 -68
  244. package/docs/services/workflow.md +1 -1
  245. package/package.json +22 -22
  246. package/dist/application-BO4ZF8wP.mjs +0 -3
  247. package/dist/application-BX13RArL.mjs.map +0 -1
  248. package/dist/cli/shared/trigger-context.d.mts +0 -1
  249. package/dist/field-runtime-CAnh_oow.mjs +0 -183
  250. package/dist/field-runtime-CAnh_oow.mjs.map +0 -1
  251. package/dist/kysely-type-D-zflMGf.mjs.map +0 -1
  252. package/dist/register-ts-hook-BM1caLT0.mjs.map +0 -1
  253. package/dist/schema-C4LYbXVG.mjs.map +0 -1
  254. package/dist/service-CkIwEctX.mjs +0 -3
  255. package/dist/service-ufH7sS8o.mjs.map +0 -1
  256. package/dist/types-C-lQ4se3.mjs +0 -4
  257. package/dist/types-CXF2OYdR.mjs +0 -199
  258. package/dist/types-CXF2OYdR.mjs.map +0 -1
@@ -1,13 +1,12 @@
1
+ import { FieldOptions, FieldOutput, FieldValidateInput, TailorFieldType, TailorToTs } from "../../types/field.types.mjs";
1
2
  import { InferredAttributes, TailorPrincipal } from "../../../runtime/types.mjs";
2
3
  import { InferFieldsOutput, TypeLevelError, output } from "../../../types/helpers.mjs";
3
- import { FieldOptions, FieldOutput, FieldValidateInput, TailorFieldType, TailorToTs, Validators } from "../../types/field.types.mjs";
4
- import { DBFieldMetadata, DefinedDBFieldMetadata, ExcludeNestedDBFields, Hook, Hooks, IndexDef, RelationType, SerialConfig, TailorDBField as TailorDBField$1, TailorDBType as TailorDBType$1, TypeFeatures } from "./types.mjs";
4
+ import { DBFieldMetadata, DefinedDBFieldMetadata, ExcludeDefaultedDBFields, ExcludeHookedDBFields, ExcludeNestedDBFields, Hook, IndexDef, RelationType, SerialConfig, TailorDBField as TailorDBField$1, TailorDBType as TailorDBType$1, TypeFeatures, TypeHook, TypeValidateFn } from "./types.mjs";
5
5
  import { AllowedValues, AllowedValuesOutput } from "../../types/field.mjs";
6
6
  import { FieldParseArgs, FieldParseInternalArgs } from "../../types/field-runtime.mjs";
7
7
  import { PluginConfigs } from "../../../plugin/types.mjs";
8
8
  import { TailorTypeGqlPermission, TailorTypePermission } from "./permission.mjs";
9
9
  import { StandardSchemaV1 } from "@standard-schema/spec";
10
-
11
10
  //#region src/configure/services/tailordb/schema.d.ts
12
11
  type AnyBuilderMethod = any;
13
12
  type TailorAnyDBField = Omit<TailorDBField$1<AnyBuilderMethod, AnyBuilderMethod>, "fields"> & {
@@ -21,12 +20,13 @@ type TailorAnyDBField = Omit<TailorDBField$1<AnyBuilderMethod, AnyBuilderMethod>
21
20
  index: AnyBuilderMethod;
22
21
  unique: AnyBuilderMethod;
23
22
  vector: AnyBuilderMethod;
23
+ default: AnyBuilderMethod;
24
24
  hooks: AnyBuilderMethod;
25
25
  validate: AnyBuilderMethod;
26
26
  serial: AnyBuilderMethod;
27
27
  clone: AnyBuilderMethod;
28
28
  };
29
- type TailorAnyDBType = TailorDBType<any, any>;
29
+ type TailorAnyDBType = TailorDBType<any, any, any>;
30
30
  type IsAny<T> = 0 extends 1 & T ? true : false;
31
31
  type DBFieldTypeNameMethod<Defined extends DefinedDBFieldMetadata> = IsAny<Defined> extends true ? TypeLevelError<string> : TypeLevelError<"typeName cannot be used on TailorDB fields">;
32
32
  type WithDBFieldDescription<Defined> = Defined & {
@@ -67,6 +67,9 @@ type WithDBFieldHooks<Defined, H> = Defined & {
67
67
  };
68
68
  serial: false;
69
69
  };
70
+ type WithDBFieldDefault<Defined> = Defined & {
71
+ default: true;
72
+ };
70
73
  type WithDBFieldValidate<Defined> = Defined & {
71
74
  validate: true;
72
75
  };
@@ -96,6 +99,30 @@ type DBFieldCloneOutput<Output, NewOpt extends FieldOptions> = NewOpt extends {
96
99
  } ? DBFieldCloneArrayOutput<Output, NewOpt> | null : NewOpt extends {
97
100
  optional: false;
98
101
  } ? DBFieldCloneArrayOutput<Output, NewOpt> : null extends Output ? DBFieldCloneArrayOutput<Output, NewOpt> | null : DBFieldCloneArrayOutput<Output, NewOpt>;
102
+ type DBFieldCloneOptions<Defined extends DefinedDBFieldMetadata> = Omit<FieldOptions, "array"> & {
103
+ array?: Defined extends {
104
+ validate: unknown;
105
+ } ? Defined["array"] : boolean;
106
+ };
107
+ type InvalidValidatedArrayCloneKeys<Fields extends Record<string, TailorAnyDBField>, K extends keyof Fields, Opt extends FieldOptions> = Opt extends {
108
+ array: infer ArrayOption;
109
+ } ? { [P in K]: Fields[P] extends TailorDBField<infer Defined, infer _Output> ? Defined extends {
110
+ validate: unknown;
111
+ } ? ArrayOption extends Defined["array"] ? never : P : never : never; }[K] : never;
112
+ type DBFieldsCloneOptionsGuard<Fields extends Record<string, TailorAnyDBField>, K extends keyof Fields, Opt extends FieldOptions> = [InvalidValidatedArrayCloneKeys<Fields, K, Opt>] extends [never] ? unknown : TypeLevelError<"array cannot be changed on fields with custom validation">;
113
+ type DefinedDBTypeMetadata = {
114
+ hooks?: true;
115
+ validate?: true;
116
+ features?: true;
117
+ indexes?: true;
118
+ files?: true;
119
+ permission?: true;
120
+ gqlPermission?: true;
121
+ description?: true;
122
+ };
123
+ type WithDBTypeMetadata<Defined extends DefinedDBTypeMetadata, Key extends keyof DefinedDBTypeMetadata> = Defined & Record<Key, true>;
124
+ type DBTypeDuplicateInputGuard<Defined extends DefinedDBTypeMetadata, Key extends keyof DefinedDBTypeMetadata, Input, Message extends string> = IsAny<Defined> extends true ? Input : Defined extends Record<Key, unknown> ? TypeLevelError<Message> : Input;
125
+ type DBTypeDuplicateRestGuard<Defined extends DefinedDBTypeMetadata, Key extends keyof DefinedDBTypeMetadata, Input extends unknown[], Message extends string> = IsAny<Defined> extends true ? Input : Defined extends Record<Key, unknown> ? [TypeLevelError<Message>, ...TypeLevelError<Message>[]] : Input;
99
126
  type FileKeyConflictError<Fields extends Record<string, TailorAnyDBField>, User extends object> = Partial<Record<keyof output<TailorDBType<Fields, User>> & string, TypeLevelError<"file keys cannot use existing field names">>>;
100
127
  type DBFieldDescriptionFn<Defined extends DefinedDBFieldMetadata, Output> = (description: string) => TailorDBField<WithDBFieldDescription<Defined>, Output>;
101
128
  type DBFieldRelationFn<Defined extends DefinedDBFieldMetadata, Output> = {
@@ -105,7 +132,9 @@ type DBFieldRelationFn<Defined extends DefinedDBFieldMetadata, Output> = {
105
132
  type DBFieldIndexFn<Defined extends DefinedDBFieldMetadata, Output> = () => TailorDBField<WithDBFieldIndex<Defined>, Output>;
106
133
  type DBFieldUniqueFn<Defined extends DefinedDBFieldMetadata, Output> = () => TailorDBField<WithDBFieldUnique<Defined>, Output>;
107
134
  type DBFieldVectorFn<Defined extends DefinedDBFieldMetadata, Output> = () => TailorDBField<WithDBFieldVector<Defined>, Output>;
108
- type DBFieldHooksFn<Defined extends DefinedDBFieldMetadata, Output> = <const H extends Hook<unknown, Output>>(hooks: H) => TailorDBField<WithDBFieldHooks<Defined, H>, Output>;
135
+ type DBFieldHooksFn<Defined extends DefinedDBFieldMetadata, Output> = <const H extends Hook<Output, Defined extends {
136
+ default: true;
137
+ } ? Output | null | undefined : Output>>(hooks: H) => TailorDBField<WithDBFieldHooks<Defined, H>, Output>;
109
138
  type DBFieldValidateFn<Defined extends DefinedDBFieldMetadata, Output> = (...validate: FieldValidateInput<Output>[]) => TailorDBField<WithDBFieldValidate<Defined>, Output>;
110
139
  type DBFieldSerialFn<Defined extends DefinedDBFieldMetadata, Output> = (config: SerialConfig<Defined["type"] & ("integer" | "string")>) => TailorDBField<WithDBFieldSerial<Defined>, Output>;
111
140
  type DBFieldDescriptionMethod<Defined extends DefinedDBFieldMetadata, Output> = IsAny<Defined> extends true ? DBFieldDescriptionFn<Defined, Output> : Defined extends {
@@ -114,16 +143,13 @@ type DBFieldDescriptionMethod<Defined extends DefinedDBFieldMetadata, Output> =
114
143
  type DBFieldRelationMethod<Defined extends DefinedDBFieldMetadata, Output> = IsAny<Defined> extends true ? DBFieldRelationFn<Defined, Output> : Defined extends {
115
144
  relation: unknown;
116
145
  } ? TypeLevelError<".relation() has already been set"> : DBFieldRelationFn<Defined, Output>;
146
+ type DBFieldArrayCheck<A extends boolean, Ok, Msg extends string> = A extends true ? TypeLevelError<Msg> : Ok;
117
147
  type DBFieldIndexMethod<Defined extends DefinedDBFieldMetadata, Output> = IsAny<Defined> extends true ? DBFieldIndexFn<Defined, Output> : Defined extends {
118
148
  index: unknown;
119
- } ? TypeLevelError<".index() has already been set"> : boolean extends Defined["array"] ? DBFieldIndexFn<Defined, Output> | TypeLevelError<"index cannot be set on array fields"> : Defined extends {
120
- array: true;
121
- } ? TypeLevelError<"index cannot be set on array fields"> : DBFieldIndexFn<Defined, Output>;
149
+ } ? TypeLevelError<".index() has already been set"> : DBFieldArrayCheck<Defined["array"], DBFieldIndexFn<Defined, Output>, "index cannot be set on array fields">;
122
150
  type DBFieldUniqueMethod<Defined extends DefinedDBFieldMetadata, Output> = IsAny<Defined> extends true ? DBFieldUniqueFn<Defined, Output> : Defined extends {
123
151
  unique: unknown;
124
- } ? TypeLevelError<".unique() has already been set"> : boolean extends Defined["array"] ? DBFieldUniqueFn<Defined, Output> | TypeLevelError<"unique cannot be set on array fields"> : Defined extends {
125
- array: true;
126
- } ? TypeLevelError<"unique cannot be set on array fields"> : DBFieldUniqueFn<Defined, Output>;
152
+ } ? TypeLevelError<".unique() has already been set"> : DBFieldArrayCheck<Defined["array"], DBFieldUniqueFn<Defined, Output>, "unique cannot be set on array fields">;
127
153
  type DBFieldVectorMethod<Defined extends DefinedDBFieldMetadata, Output> = IsAny<Defined> extends true ? DBFieldVectorFn<Defined, Output> : Defined extends {
128
154
  vector: unknown;
129
155
  } ? TypeLevelError<".vector() has already been set"> : Defined extends {
@@ -155,6 +181,14 @@ type DBFieldSerialMethod<Defined extends DefinedDBFieldMetadata, Output> = IsAny
155
181
  type: "integer" | "string";
156
182
  array: false;
157
183
  } ? DBFieldSerialFn<Defined, Output> : TypeLevelError<"serial can only be set on non-array integer or string fields">;
184
+ type DBFieldDefaultFn<Defined extends DefinedDBFieldMetadata, Output> = (value: Output extends null ? NonNullable<Output> : Output) => TailorDBField<WithDBFieldDefault<Defined>, Output>;
185
+ type DBFieldDefaultMethod<Defined extends DefinedDBFieldMetadata, Output> = IsAny<Defined> extends true ? DBFieldDefaultFn<Defined, Output> : Defined extends {
186
+ default: unknown;
187
+ } ? TypeLevelError<".default() has already been set"> : Defined extends {
188
+ type: "nested";
189
+ } ? TypeLevelError<"default cannot be set on nested type fields"> : Defined extends {
190
+ serial: true;
191
+ } ? TypeLevelError<"default cannot be set on serial fields"> : null extends Output ? TypeLevelError<"default cannot be set on optional fields"> : DBFieldDefaultFn<Defined, Output>;
158
192
  /**
159
193
  * Full TailorDBField interface with builder methods.
160
194
  * Extends the minimal structural interface from types/ with fluent API methods.
@@ -196,12 +230,24 @@ interface TailorDBField<Defined extends DefinedDBFieldMetadata = DefinedDBFieldM
196
230
  * Enable vector search on the field (string type only)
197
231
  */
198
232
  vector: DBFieldVectorMethod<Defined, Output>;
233
+ /**
234
+ * Set a default value for the field on create. When the field is required,
235
+ * this makes it optional in the Create input — the default fills in when
236
+ * no value (or a nullish hook result) is provided.
237
+ *
238
+ * For datetime/date/time fields, pass `"now"` to use the operation timestamp.
239
+ */
240
+ default: DBFieldDefaultMethod<Defined, Output>;
199
241
  /**
200
242
  * Add hooks for create/update operations on this field.
201
243
  */
202
244
  hooks: DBFieldHooksMethod<Defined, Output>;
203
245
  /**
204
246
  * Add validation functions to the field.
247
+ *
248
+ * Validators receive `{ value, data, user }` and run after hooks and
249
+ * built-in type validation; they are skipped when built-in validation
250
+ * fails. For array fields, `value` is the complete array.
205
251
  */
206
252
  validate: DBFieldValidateMethod<Defined, Output>;
207
253
  /**
@@ -209,30 +255,31 @@ interface TailorDBField<Defined extends DefinedDBFieldMetadata = DefinedDBFieldM
209
255
  */
210
256
  serial: DBFieldSerialMethod<Defined, Output>;
211
257
  /**
212
- * Clone the field with optional overrides for field options
258
+ * Clone the field with optional overrides for field options.
259
+ * The `array` option cannot change on fields with custom validation.
213
260
  */
214
- clone<const NewOpt extends FieldOptions>(options?: NewOpt): TailorDBField<WithDBFieldCloneOptions<Defined, NewOpt>, DBFieldCloneOutput<Output, NewOpt>>;
261
+ clone<const NewOpt extends DBFieldCloneOptions<Defined>>(options?: NewOpt): TailorDBField<WithDBFieldCloneOptions<Defined, NewOpt>, DBFieldCloneOutput<Output, NewOpt>>;
215
262
  }
216
263
  /**
217
264
  * Full TailorDBType interface with builder methods.
218
265
  * Extends the minimal structural interface from types/ with fluent API methods.
219
266
  */
220
- interface TailorDBType<Fields extends Record<string, TailorAnyDBField> = any, User extends object = InferredAttributes> extends TailorDBType$1<Fields, User> {
267
+ interface TailorDBType<Fields extends Record<string, TailorAnyDBField> = any, User extends object = InferredAttributes, Defined extends DefinedDBTypeMetadata = any> extends TailorDBType$1<Fields, User> {
221
268
  _description?: string;
222
- hooks(hooks: Hooks<Fields>): TailorDBType<Fields, User>;
223
- validate(validators: Validators<Fields>): TailorDBType<Fields, User>;
224
- features(features: Omit<TypeFeatures, "pluralForm">): TailorDBType<Fields, User>;
225
- indexes(...indexes: IndexDef<TailorDBType<Fields, User>>[]): TailorDBType<Fields, User>;
226
- files<const F extends string>(files: Record<F, string> & FileKeyConflictError<Fields, User>): TailorDBType<Fields, User>;
227
- permission<U extends object = User, P extends TailorTypePermission<U, output<TailorDBType<Fields, User>>> = TailorTypePermission<U, output<TailorDBType<Fields, User>>>>(permission: P): TailorDBType<Fields, U>;
228
- gqlPermission<U extends object = User, P extends TailorTypeGqlPermission<U> = TailorTypeGqlPermission<U>>(permission: P): TailorDBType<Fields, U>;
229
- description(description: string): TailorDBType<Fields, User>;
269
+ hooks(hook: DBTypeDuplicateInputGuard<Defined, "hooks", TypeHook<Fields>, ".hooks() has already been set">): TailorDBType<Fields, User, WithDBTypeMetadata<Defined, "hooks">>;
270
+ validate(fn: DBTypeDuplicateInputGuard<Defined, "validate", TypeValidateFn<Fields>, ".validate() has already been set">): TailorDBType<Fields, User, WithDBTypeMetadata<Defined, "validate">>;
271
+ features(features: DBTypeDuplicateInputGuard<Defined, "features", Omit<TypeFeatures, "pluralForm">, ".features() has already been set">): TailorDBType<Fields, User, WithDBTypeMetadata<Defined, "features">>;
272
+ indexes(...indexes: DBTypeDuplicateRestGuard<Defined, "indexes", IndexDef<TailorDBType<Fields, User, Defined>>[], ".indexes() has already been set">): TailorDBType<Fields, User, WithDBTypeMetadata<Defined, "indexes">>;
273
+ files<const F extends string>(files: DBTypeDuplicateInputGuard<Defined, "files", Record<F, string> & FileKeyConflictError<Fields, User>, ".files() has already been set">): TailorDBType<Fields, User, WithDBTypeMetadata<Defined, "files">>;
274
+ permission<U extends object = User, P extends TailorTypePermission<U, output<TailorDBType<Fields, User, Defined>>> = TailorTypePermission<U, output<TailorDBType<Fields, User, Defined>>>>(permission: DBTypeDuplicateInputGuard<Defined, "permission", P, ".permission() has already been set">): TailorDBType<Fields, U, WithDBTypeMetadata<Defined, "permission">>;
275
+ gqlPermission<U extends object = User, P extends TailorTypeGqlPermission<U> = TailorTypeGqlPermission<U>>(permission: DBTypeDuplicateInputGuard<Defined, "gqlPermission", P, ".gqlPermission() has already been set">): TailorDBType<Fields, U, WithDBTypeMetadata<Defined, "gqlPermission">>;
276
+ description(description: DBTypeDuplicateInputGuard<Defined, "description", string, ".description() has already been set">): TailorDBType<Fields, User, WithDBTypeMetadata<Defined, "description">>;
230
277
  pickFields<K extends keyof Fields>(keys: K[]): Pick<Fields, K>;
231
- pickFields<K extends keyof Fields, const Opt extends FieldOptions>(keys: K[], options: Opt): { [P in K]: Fields[P] extends TailorDBField<infer D, infer O> ? TailorDBField<WithDBFieldCloneOptions<D, Opt>, DBFieldCloneOutput<O, Opt>> : never };
278
+ pickFields<K extends keyof Fields, const Opt extends FieldOptions>(keys: K[], options: Opt & DBFieldsCloneOptionsGuard<Fields, K, Opt>): { [P in K]: Fields[P] extends TailorDBField<infer D, infer O> ? TailorDBField<WithDBFieldCloneOptions<D, Opt>, DBFieldCloneOutput<O, Opt>> : never; };
232
279
  omitFields<K extends keyof Fields>(keys: K[]): Omit<Fields, K>;
233
- plugin<P extends keyof PluginConfigs<keyof Fields & string>>(config: { [K in P]: PluginConfigs<keyof Fields & string>[K] }): TailorDBType<Fields, User>;
280
+ plugin<P extends keyof PluginConfigs<keyof Fields & string>>(config: { [K in P]: PluginConfigs<keyof Fields & string>[K]; }): TailorDBType<Fields, User, Defined>;
234
281
  }
235
- type TailorDBInstance<Fields extends Record<string, TailorAnyDBField> = any, User extends object = InferredAttributes> = TailorDBType<Fields, User>;
282
+ type TailorDBInstance<Fields extends Record<string, TailorAnyDBField> = any, User extends object = InferredAttributes, Defined extends DefinedDBTypeMetadata = any> = TailorDBType<Fields, User, Defined>;
236
283
  interface RelationConfig<S extends RelationType, T extends TailorDBType> {
237
284
  type: S;
238
285
  toward: {
@@ -358,7 +405,7 @@ declare function _enum<const V extends AllowedValues, const Opt extends FieldOpt
358
405
  * @example db.object({ street: db.string(), city: db.string(), zip: db.string() })
359
406
  * @example db.object({ name: db.string() }, { optional: true })
360
407
  */
361
- declare function object<const F extends Record<string, TailorAnyDBField> & ExcludeNestedDBFields<F>, const Opt extends FieldOptions>(fields: F, options?: Opt): TailorDBField<{
408
+ declare function object<const F extends Record<string, TailorAnyDBField> & ExcludeNestedDBFields<F> & ExcludeHookedDBFields<F> & ExcludeDefaultedDBFields<F>, const Opt extends FieldOptions>(fields: F, options?: Opt): TailorDBField<{
362
409
  type: "nested";
363
410
  array: Opt extends {
364
411
  array: true;
@@ -368,9 +415,9 @@ declare const idField: TailorDBFieldInstance<"uuid", FieldOptions, string>;
368
415
  type idField = typeof idField;
369
416
  type DBTable<F extends {
370
417
  id?: never;
371
- } & Record<string, TailorAnyDBField>> = TailorDBInstance<{
418
+ } & Record<string, TailorAnyDBField>, Defined extends DefinedDBTypeMetadata = DefinedDBTypeMetadata> = TailorDBInstance<{
372
419
  id: idField;
373
- } & F>;
420
+ } & F, InferredAttributes, Defined>;
374
421
  /**
375
422
  * Creates a new database table with the specified fields.
376
423
  * An `id` field (UUID) is automatically added to every table.
@@ -401,7 +448,7 @@ declare function dbTable<const F extends {
401
448
  */
402
449
  declare function dbTable<const F extends {
403
450
  id?: never;
404
- } & Record<string, TailorAnyDBField>>(name: string | [string, string], description: string, fields: F): DBTable<F>;
451
+ } & Record<string, TailorAnyDBField>>(name: string | [string, string], description: string, fields: F): DBTable<F, WithDBTypeMetadata<DefinedDBTypeMetadata, "description">>;
405
452
  /** TailorDB schema builder utilities for defining tables and fields. */
406
453
  declare const db: {
407
454
  table: typeof dbTable;
@@ -418,10 +465,9 @@ declare const db: {
418
465
  object: typeof object;
419
466
  fields: {
420
467
  /**
421
- * Creates standard timestamp fields (createdAt, updatedAt) with auto-hooks.
422
- * createdAt and updatedAt are set on create.
423
- * User-specified timestamp values are respected when provided (e.g. seeding
424
- * historical records); the current time is used only when the value is omitted.
468
+ * Creates standard timestamp fields (createdAt, updatedAt) with automatic defaults.
469
+ * Both fields default to the current time on create. updatedAt is also refreshed on update.
470
+ * User-specified values are respected when provided (e.g. seeding historical records).
425
471
  * @returns An object with createdAt and updatedAt fields
426
472
  * @example
427
473
  * const model = db.table("Model", {
@@ -430,24 +476,14 @@ declare const db: {
430
476
  * });
431
477
  */
432
478
  timestamps: () => {
433
- createdAt: TailorDBField<WithDBFieldDescription<WithDBFieldHooks<DBFieldDefined<"datetime", FieldOptions>, {
434
- readonly create: ({
435
- value
436
- }: {
437
- value: string | Date | null;
438
- data: unknown;
439
- invoker: TailorPrincipal | null;
440
- }) => string | Date;
441
- }>>, string | Date>;
442
- updatedAt: TailorDBField<WithDBFieldDescription<WithDBFieldHooks<DBFieldDefined<"datetime", FieldOptions>, {
443
- readonly create: ({
444
- value
445
- }: {
446
- value: string | Date | null;
447
- data: unknown;
479
+ createdAt: TailorDBField<WithDBFieldDescription<WithDBFieldDefault<DBFieldDefined<"datetime", FieldOptions>>>, string | Date>;
480
+ updatedAt: TailorDBField<WithDBFieldDescription<WithDBFieldHooks<WithDBFieldDefault<DBFieldDefined<"datetime", FieldOptions>>, {
481
+ readonly update: ({ input, now }: {
482
+ input: string | Date | null;
483
+ oldValue: string | Date;
448
484
  invoker: TailorPrincipal | null;
485
+ now: Date;
449
486
  }) => string | Date;
450
- readonly update: () => Date;
451
487
  }>>, string | Date>;
452
488
  };
453
489
  };
@@ -1,9 +1,7 @@
1
+ import { DefinedFieldMetadata, FieldMetadata, TailorField, TailorFieldType } from "../../types/field.types.mjs";
1
2
  import { InferredAttributes, TailorPrincipal } from "../../../runtime/types.mjs";
2
- import { InferFieldsOutput, Prettify, output } from "../../../types/helpers.mjs";
3
- import { DefinedFieldMetadata, FieldMetadata, TailorField } from "../../types/field.types.mjs";
3
+ import { DeepReadonly, InferFieldsOutput, Prettify, output } from "../../../types/helpers.mjs";
4
4
  import { DBFieldMetadata as DBFieldMetadata$1, GqlOperationsInput, RawPermissions, TailorDBServiceConfigInput } from "../../../types/tailordb.generated.mjs";
5
- import { NonEmptyObject } from "type-fest";
6
-
7
5
  //#region src/configure/services/tailordb/types.d.ts
8
6
  type SerialConfig<T extends "string" | "integer" = "string" | "integer"> = Prettify<{
9
7
  start: number;
@@ -23,6 +21,7 @@ interface DBFieldMetadata extends FieldMetadata {
23
21
  serial?: SerialConfig;
24
22
  relation?: boolean;
25
23
  scale?: number;
24
+ default?: unknown;
26
25
  }
27
26
  interface DefinedDBFieldMetadata extends DefinedFieldMetadata {
28
27
  index?: boolean;
@@ -37,6 +36,7 @@ interface DefinedDBFieldMetadata extends DefinedFieldMetadata {
37
36
  };
38
37
  serial?: boolean;
39
38
  relation?: boolean;
39
+ default?: boolean;
40
40
  }
41
41
  type GqlOperationsConfig = GqlOperationsInput;
42
42
  interface RawRelationConfig {
@@ -64,6 +64,11 @@ interface TailorDBTypeMetadata {
64
64
  fields: string[];
65
65
  unique?: boolean;
66
66
  }>;
67
+ typeHook?: {
68
+ create?: Function;
69
+ update?: Function;
70
+ };
71
+ typeValidate?: Function;
67
72
  }
68
73
  /**
69
74
  * Minimal structural interface for TailorDBField.
@@ -91,24 +96,68 @@ interface TailorDBType<Fields extends Record<string, TailorAnyDBField> = any, Us
91
96
  }
92
97
  type TailorAnyDBType = TailorDBType<any, any>;
93
98
  type TailorDBInstance<Fields extends Record<string, TailorAnyDBField> = any, User extends object = InferredAttributes> = TailorDBType<Fields, User>;
94
- type HookFn<TValue, TData, TReturn> = (args: {
95
- value: TValue;
96
- data: TData extends Record<string, unknown> ? { readonly [K in keyof TData]?: TData[K] | null | undefined } : unknown;
99
+ type HookArgs<TData> = TData extends Record<string, unknown> ? { readonly [K in keyof TData]?: DeepReadonly<TData[K]> | null | undefined; } : unknown;
100
+ type CreateHookFn<TValue, TReturn> = (args: {
101
+ input: TValue;
102
+ invoker: TailorPrincipal | null;
103
+ now: Date;
104
+ }) => TReturn;
105
+ type UpdateHookFn<TValue, TReturn> = (args: {
106
+ input: TValue;
107
+ oldValue: TReturn;
97
108
  invoker: TailorPrincipal | null;
109
+ now: Date;
98
110
  }) => TReturn;
99
- type Hook<TData, TReturn> = {
100
- create?: HookFn<TReturn | null, TData, TReturn>;
101
- update?: HookFn<TReturn | null, TData, TReturn>;
111
+ type Hook<TReturn, TCreateReturn = TReturn> = {
112
+ create?: CreateHookFn<TReturn | null, TCreateReturn>;
113
+ update?: UpdateHookFn<TReturn | null, TReturn>;
114
+ };
115
+ type DotJoin<A extends string, B extends string> = A extends "" ? B : `${A}.${B}`;
116
+ type DottedPaths<T, Prefix extends string = ""> = string extends keyof T ? string : T extends readonly (infer E)[] ? E extends Record<string, unknown> ? { [K in keyof E & string]: `${Prefix}[${number}].${K}` | DottedPaths<NonNullable<E[K]>, `${Prefix}[${number}].${K}`>; }[keyof E & string] : never : T extends Record<string, unknown> ? { [K in keyof T & string]: DotJoin<Prefix, K> | DottedPaths<NonNullable<T[K]>, DotJoin<Prefix, K>>; }[keyof T & string] : never;
117
+ type TypeValidateFn<F extends Record<string, TailorAnyDBField>, TData = { [K in keyof F]: output<F[K]>; }> = (args: {
118
+ newRecord: DeepReadonly<TData>;
119
+ oldRecord: DeepReadonly<TData> | null;
120
+ invoker: TailorPrincipal | null;
121
+ }, issues: <P extends DottedPaths<Omit<TData, "id">>>(field: P, message: string) => void) => void;
122
+ type TypeCreateHookFn<F extends Record<string, TailorAnyDBField>, TData = { [K in keyof F]: output<F[K]>; }> = (args: {
123
+ input: DeepReadonly<TData>;
124
+ invoker: TailorPrincipal | null;
125
+ now: Date;
126
+ }) => { [K in Exclude<keyof TData & string, "id">]?: TData[K] | null; };
127
+ type TypeUpdateHookFn<F extends Record<string, TailorAnyDBField>, TData = { [K in keyof F]: output<F[K]>; }> = (args: {
128
+ input: HookArgs<TData>;
129
+ oldRecord: DeepReadonly<TData>;
130
+ invoker: TailorPrincipal | null;
131
+ now: Date;
132
+ }) => { [K in Exclude<keyof TData & string, "id">]?: TData[K] | null; };
133
+ type TypeHook<F extends Record<string, TailorAnyDBField>> = {
134
+ create?: TypeCreateHookFn<F>;
135
+ update?: TypeUpdateHookFn<F>;
102
136
  };
103
- type Hooks<F extends Record<string, TailorAnyDBField>, TData = { [K in keyof F]: output<F[K]> }> = NonEmptyObject<{ [K in Exclude<keyof F, "id"> as F[K]["_defined"] extends {
104
- hooks: unknown;
105
- } ? never : F[K]["_defined"] extends {
106
- type: "nested";
107
- } ? never : K]?: Hook<TData, output<F[K]>> }>;
108
137
  type ExcludeNestedDBFields<T extends Record<string, TailorAnyDBField>> = { [K in keyof T]: T[K] extends TailorDBField<{
109
138
  type: "nested";
110
139
  array: boolean;
111
- }, any> ? never : T[K] };
140
+ }, any> ? never : T[K]; };
141
+ type ExcludeHookedDBFields<T extends Record<string, TailorAnyDBField>> = { [K in keyof T]: T[K] extends TailorDBField<{
142
+ type: TailorFieldType;
143
+ array: boolean;
144
+ hooks: {
145
+ create: true;
146
+ update: boolean;
147
+ };
148
+ }, any> ? never : T[K] extends TailorDBField<{
149
+ type: TailorFieldType;
150
+ array: boolean;
151
+ hooks: {
152
+ create: boolean;
153
+ update: true;
154
+ };
155
+ }, any> ? never : T[K]; };
156
+ type ExcludeDefaultedDBFields<T extends Record<string, TailorAnyDBField>> = { [K in keyof T]: T[K] extends TailorDBField<{
157
+ type: TailorFieldType;
158
+ array: boolean;
159
+ default: true;
160
+ }, any> ? never : T[K]; };
112
161
  interface TypeFeatures {
113
162
  pluralForm?: string;
114
163
  aggregation?: true;
@@ -146,4 +195,4 @@ type TailorDBServiceInput = {
146
195
  [namespace: string]: TailorDBServiceConfigInput | TailorDBExternalConfig;
147
196
  };
148
197
  //#endregion
149
- export { DBFieldMetadata, DefinedDBFieldMetadata, ExcludeNestedDBFields, GqlOperationsConfig, Hook, Hooks, IndexDef, PluginAttachment, RawRelationConfig, RelationType, SerialConfig, TailorAnyDBField, TailorAnyDBType, TailorDBExternalConfig, TailorDBField, TailorDBInstance, TailorDBServiceInput, TailorDBType, TailorDBTypeMetadata, TypeFeatures };
198
+ export { DBFieldMetadata, DefinedDBFieldMetadata, ExcludeDefaultedDBFields, ExcludeHookedDBFields, ExcludeNestedDBFields, GqlOperationsConfig, Hook, IndexDef, PluginAttachment, RawRelationConfig, RelationType, SerialConfig, TailorAnyDBField, TailorAnyDBType, TailorDBExternalConfig, TailorDBField, TailorDBInstance, TailorDBServiceInput, TailorDBType, TailorDBTypeMetadata, TypeFeatures, TypeHook, TypeValidateFn };
@@ -1,5 +1,4 @@
1
1
  import { ExecutionPolicyConcurrency, ExecutionPolicyDefInput, ExecutionPolicyExactInstance, ExecutionPolicyGroupOptions, ExecutionPolicyInstance, ExecutionPolicyWildcardInstance, ResolvedExecutionPolicyInstance } from "./execution-policy.types.mjs";
2
-
3
2
  //#region src/configure/services/workflow/execution-policy.d.ts
4
3
  type ResolveKey<Def, Fallback extends string> = Def extends {
5
4
  key: infer K extends string;
@@ -1,5 +1,4 @@
1
1
  import { ExecutionPolicyKey } from "../../../runtime/workflow.mjs";
2
-
3
2
  //#region src/configure/services/workflow/execution-policy.types.d.ts
4
3
  /**
5
4
  * Optional per-key concurrency cap applied to job function dispatches that
@@ -5,4 +5,5 @@ import { WorkflowJob, WorkflowJobContext, createWorkflowJob } from "./job.mjs";
5
5
  import { Workflow, WorkflowConfig, createWorkflow } from "./workflow.mjs";
6
6
  import { defineWorkflowExecutionPolicies, defineWorkflowExecutionPolicy } from "./execution-policy.mjs";
7
7
  import { WaitPointInstance, createWaitPoint, createWaitPoints } from "./wait-point.mjs";
8
+ import "./types.mjs";
8
9
  export { type ConcurrencyPolicy, type ExecutionPolicyConcurrency, type ExecutionPolicyDefInput, type ExecutionPolicyExactInstance, type ExecutionPolicyGroupOptions, type ExecutionPolicyInstance, type ExecutionPolicyWildcardInstance, type ResolvedExecutionPolicyInstance, type RetryPolicy, WaitPointInstance, Workflow, WorkflowConfig, WorkflowJob, WorkflowJobContext, type WorkflowServiceConfig, type WorkflowServiceInput, createWaitPoint, createWaitPoints, createWorkflow, createWorkflowJob, defineWorkflowExecutionPolicies, defineWorkflowExecutionPolicy };
@@ -1,7 +1,6 @@
1
1
  import { TailorEnv, TailorPrincipal } from "../../../runtime/types.mjs";
2
2
  import { JsonCompatible, TypeLevelError } from "../../../types/helpers.mjs";
3
3
  import { TriggerJobFunctionOptions } from "../../../runtime/workflow.mjs";
4
-
5
4
  //#region src/configure/services/workflow/job.d.ts
6
5
  /**
7
6
  * Context object passed as the second argument to workflow job body functions.
@@ -1,5 +1,4 @@
1
1
  import { JsonCompatible, TypeLevelError } from "../../../types/helpers.mjs";
2
-
3
2
  //#region src/configure/services/workflow/wait-point.d.ts
4
3
  /**
5
4
  * A single wait point instance with typed `.wait()` and `.resolve()` methods.
@@ -1,7 +1,7 @@
1
1
  import { MachineUserName } from "../auth/types.mjs";
2
2
  import { ConcurrencyPolicy, RetryPolicy } from "../../../types/workflow.generated.mjs";
3
+ import "../../types/machine-user.mjs";
3
4
  import { WorkflowJob } from "./job.mjs";
4
-
5
5
  //#region src/configure/services/workflow/workflow.d.ts
6
6
  interface WorkflowConfig<Job extends WorkflowJob<any, any, any> = WorkflowJob<any, any, any>> {
7
7
  name: string;
@@ -1,6 +1,5 @@
1
1
  import { TailorPrincipal } from "../../runtime/types.mjs";
2
2
  import { StandardSchemaV1 } from "@standard-schema/spec";
3
-
4
3
  //#region src/configure/types/field-runtime.d.ts
5
4
  type FieldParseArgs = {
6
5
  value: unknown;
@@ -1,8 +1,7 @@
1
1
  import { EnumValue } from "./field.types.mjs";
2
-
3
2
  //#region src/configure/types/field.d.ts
4
3
  type AllowedValues = readonly [string | EnumValue, ...(string | EnumValue)[]];
5
- type AllowedValuesOutput<V extends AllowedValues> = V[number] extends infer T ? T extends string ? T : T extends {
4
+ type AllowedValuesOutput<V extends AllowedValues> = V[number] extends (infer T) ? T extends string ? T : T extends {
6
5
  value: infer K;
7
6
  } ? K : never : never;
8
7
  //#endregion
@@ -1,7 +1,3 @@
1
- import { TailorPrincipal } from "../../runtime/types.mjs";
2
- import { InferFieldsOutput, output } from "../../types/helpers.mjs";
3
- import { NonEmptyObject } from "type-fest";
4
-
5
1
  //#region src/configure/types/field.types.d.ts
6
2
  interface EnumValue {
7
3
  value: string;
@@ -47,50 +43,15 @@ type ArrayFieldOutput<T, O extends FieldOptions> = [O] extends [{
47
43
  array: true;
48
44
  }] ? T[] : T;
49
45
  /**
50
- * Validation function type
46
+ * Field validation function. Return an error message string to fail, or void/undefined to pass.
51
47
  */
52
- type ValidateFn<O, D = unknown> = (args: {
48
+ type ValidateFn<O> = (args: {
53
49
  value: O;
54
- data: D;
55
- invoker: TailorPrincipal | null;
56
- }) => boolean;
50
+ }) => string | void;
57
51
  /**
58
- * Validation configuration with custom error message
52
+ * Input type for field validation
59
53
  */
60
- type ValidateConfig<O, D = unknown> = [ValidateFn<O, D>, string];
61
- /**
62
- * Field-level validation function
63
- */
64
- type FieldValidateFn<O> = ValidateFn<O>;
65
- /**
66
- * Field-level validation configuration
67
- */
68
- type FieldValidateConfig<O> = ValidateConfig<O>;
69
- /**
70
- * Input type for field validation - can be either a function or a tuple of [function, errorMessage]
71
- */
72
- type FieldValidateInput<O> = FieldValidateFn<O> | FieldValidateConfig<O>;
73
- /**
74
- * Base validators type for field collections
75
- * @template F - Record of fields
76
- * @template ExcludeKeys - Keys to exclude from validation (default: "id" for TailorDB)
77
- */
78
- type ValidatorsBase<F extends Record<string, {
79
- _defined: any;
80
- _output: any;
81
- [key: string]: any;
82
- }>, ExcludeKeys extends string = "id"> = NonEmptyObject<{ [K in Exclude<keyof F, ExcludeKeys> as F[K]["_defined"] extends {
83
- validate: unknown;
84
- } ? never : K]?: ValidateFn<output<F[K]>, InferFieldsOutput<F>> | ValidateConfig<output<F[K]>, InferFieldsOutput<F>> | (ValidateFn<output<F[K]>, InferFieldsOutput<F>> | ValidateConfig<output<F[K]>, InferFieldsOutput<F>>)[] }>;
85
- /**
86
- * Validators type (by default excludes "id" field for TailorDB compatibility)
87
- * Can be used with both TailorField and TailorDBField
88
- */
89
- type Validators<F extends Record<string, {
90
- _defined: any;
91
- _output: any;
92
- [key: string]: any;
93
- }>> = ValidatorsBase<F, "id">;
54
+ type FieldValidateInput<O> = ValidateFn<O>;
94
55
  /**
95
56
  * Minimal structural interface for TailorField.
96
57
  * Defines only the properties needed by parser, plugin, cli, and types layers.
@@ -106,4 +67,4 @@ interface TailorField<Defined extends DefinedFieldMetadata = DefinedFieldMetadat
106
67
  }
107
68
  type TailorAnyField = TailorField<any>;
108
69
  //#endregion
109
- export { ArrayFieldOutput, DefinedFieldMetadata, EnumValue, FieldMetadata, FieldOptions, FieldOutput, FieldValidateInput, TailorAnyField, TailorField, TailorFieldType, TailorToTs, ValidateConfig, ValidateFn, Validators };
70
+ export { ArrayFieldOutput, DefinedFieldMetadata, EnumValue, FieldMetadata, FieldOptions, FieldOutput, FieldValidateInput, TailorAnyField, TailorField, TailorFieldType, TailorToTs, ValidateFn };
@@ -1,4 +1,5 @@
1
1
  import { MachineUserName, MachineUserNameRegistry } from "../services/auth/types.mjs";
2
2
  import { AllowedValues, AllowedValuesOutput } from "./field.mjs";
3
3
  import { TailorAnyField, TailorField } from "./type.mjs";
4
+ import "./machine-user.mjs";
4
5
  export { AllowedValues, AllowedValuesOutput, type MachineUserName, type MachineUserNameRegistry, TailorAnyField, TailorField };
@@ -1,8 +1,7 @@
1
- import { TypeLevelError } from "../../types/helpers.mjs";
2
1
  import { DefinedFieldMetadata, FieldMetadata, FieldValidateInput, TailorField as TailorField$1, TailorFieldType } from "./field.types.mjs";
2
+ import { TypeLevelError } from "../../types/helpers.mjs";
3
3
  import { FieldParseArgs, FieldParseInternalArgs } from "./field-runtime.mjs";
4
4
  import { StandardSchemaV1 } from "@standard-schema/spec";
5
-
6
5
  //#region src/configure/types/type.d.ts
7
6
  type AnyBuilderMethod = any;
8
7
  type TailorAnyField = Omit<TailorField$1<AnyBuilderMethod, AnyBuilderMethod, FieldMetadata, TailorFieldType>, "fields"> & {
@@ -1,12 +1,11 @@
1
1
  import { ColumnType, ColumnType as ColumnType$1, Insertable, Insertable as Insertable$1, Kysely, Kysely as Kysely$1, KyselyConfig, KyselyConfig as KyselyConfig$1, Selectable, Selectable as Selectable$1, Transaction, Transaction as Transaction$1, Updateable, Updateable as Updateable$1, sql } from "kysely";
2
2
  import { TailordbDialect } from "@tailor-platform/function-kysely-tailordb";
3
-
4
3
  //#region src/kysely/index.d.ts
5
4
  type Timestamp = ColumnType$1<Date, Date | string, Date | string>;
6
5
  type ResolveSelect<T> = T extends ColumnType$1<infer S, unknown, unknown> ? S : T;
7
6
  type ResolveInsert<T> = T extends ColumnType$1<unknown, infer I, unknown> ? I : T;
8
7
  type ResolveUpdate<T> = T extends ColumnType$1<unknown, unknown, infer U> ? U : T;
9
- type ObjectColumnType<T> = ColumnType$1<{ [K in keyof T]-?: Exclude<ResolveSelect<T[K]>, undefined> }, { [K in keyof T]: ResolveInsert<T[K]> }, { [K in keyof T]: ResolveUpdate<T[K]> }>;
8
+ type ObjectColumnType<T> = ColumnType$1<{ [K in keyof T]-?: Exclude<ResolveSelect<T[K]>, undefined>; }, { [K in keyof T]: ResolveInsert<T[K]>; }, { [K in keyof T]: ResolveUpdate<T[K]>; }>;
10
9
  type ArrayColumnType<T> = ColumnType$1<ResolveSelect<T>[], ResolveInsert<T>[], ResolveUpdate<T>[]>;
11
10
  type Generated<T> = T extends ColumnType$1<infer S, infer I, infer U> ? ColumnType$1<S, I | undefined, U> : ColumnType$1<T, T | undefined, T>;
12
11
  type Serial<T = string | number> = ColumnType$1<T, never, never>;
@@ -18,8 +17,8 @@ type NamespaceDB<NS, N extends keyof NS = keyof NS> = TailordbKysely<NS[N]>;
18
17
  */
19
18
  declare function createGetDB<NS>(): <const N extends keyof NS & string>(namespace: N, config?: Omit<KyselyConfig$1, "dialect">) => TailordbKysely<NS[N]>;
20
19
  type NamespaceTransaction<NS, K extends keyof NS | TailordbKysely<NS[keyof NS]> = keyof NS> = K extends TailordbKysely<infer DB> ? Transaction$1<DB> : K extends keyof NS ? Transaction$1<NS[K]> : never;
21
- type NamespaceTableName<NS> = { [N in keyof NS]: keyof NS[N] }[keyof NS];
22
- type NamespaceTable<NS, T extends NamespaceTableName<NS>> = { [N in keyof NS]: T extends keyof NS[N] ? NS[N][T] : never }[keyof NS];
20
+ type NamespaceTableName<NS> = { [N in keyof NS]: keyof NS[N]; }[keyof NS];
21
+ type NamespaceTable<NS, T extends NamespaceTableName<NS>> = { [N in keyof NS]: T extends keyof NS[N] ? NS[N][T] : never; }[keyof NS];
23
22
  type NamespaceInsertable<NS, T extends NamespaceTableName<NS>> = Insertable$1<NamespaceTable<NS, T>>;
24
23
  type NamespaceSelectable<NS, T extends NamespaceTableName<NS>> = Selectable$1<NamespaceTable<NS, T>>;
25
24
  type NamespaceUpdateable<NS, T extends NamespaceTableName<NS>> = Updateable$1<NamespaceTable<NS, T>>;
@@ -44,7 +44,8 @@ function getNestedType(fieldConfig) {
44
44
  const fieldTypes = fieldResults.map((r) => r.fieldType);
45
45
  const obj = `{\n ${fieldTypes.join(";\n ")}${fieldTypes.length > 0 ? ";" : ""}\n}`;
46
46
  const hasOptionalFields = Object.values(fields).some((config) => config.required !== true);
47
- if (aggregatedUtilityTypes.Timestamp || hasOptionalFields) return {
47
+ const hasGeneratedFields = Object.values(fields).some((config) => config.hooks?.create || config.default !== void 0);
48
+ if (aggregatedUtilityTypes.Timestamp || hasOptionalFields || hasGeneratedFields) return {
48
49
  type: `ObjectColumnType<${obj}>`,
49
50
  usedUtilityTypes: aggregatedUtilityTypes
50
51
  };
@@ -116,7 +117,7 @@ function generateFieldType(fieldConfig) {
116
117
  usedUtilityTypes.Serial = true;
117
118
  finalType = `Serial<${finalType}>`;
118
119
  }
119
- if (fieldConfig.hooks?.create) finalType = `Generated<${finalType}>`;
120
+ if (fieldConfig.hooks?.create || fieldConfig.default !== void 0) finalType = `Generated<${finalType}>`;
120
121
  return {
121
122
  type: finalType,
122
123
  usedUtilityTypes
@@ -271,4 +272,4 @@ function kyselyTypePlugin(options) {
271
272
 
272
273
  //#endregion
273
274
  export { kyselyTypePlugin as n, KyselyGeneratorID as t };
274
- //# sourceMappingURL=kysely-type-D-zflMGf.mjs.map
275
+ //# sourceMappingURL=kysely-type-DqIRgDYR.mjs.map