@tailor-platform/sdk 2.0.0-next.0 → 2.0.0-next.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +972 -0
- package/README.md +9 -9
- package/agent-skills/{tailor-sdk → tailor}/SKILL.md +3 -1
- package/dist/aigateway-DR4Kwuik.mjs +9 -0
- package/dist/aigateway-DR4Kwuik.mjs.map +1 -0
- package/dist/application-DArFTTJ9.mjs +3 -0
- package/dist/{application-76hhIhnJ.mjs → application-miwiXtB4.mjs} +1963 -1953
- package/dist/application-miwiXtB4.mjs.map +1 -0
- package/dist/{assert-CKfwrmCV.mjs → assert-DBxo8jPo.mjs} +1 -2
- package/dist/{assert-CKfwrmCV.mjs.map → assert-DBxo8jPo.mjs.map} +1 -1
- package/dist/authconnection-CZvi9ANm.mjs +9 -0
- package/dist/authconnection-CZvi9ANm.mjs.map +1 -0
- package/dist/{brand-DlnJ375c.mjs → brand-Eo4pLXPJ.mjs} +1 -2
- package/dist/brand-Eo4pLXPJ.mjs.map +1 -0
- package/dist/cli/cache/bundle-cache.d.mts +2 -0
- package/dist/cli/cache/store.d.mts +1 -0
- package/dist/cli/cache/types.d.mts +1 -0
- package/dist/cli/commands/api/api-call.d.mts +19 -0
- package/dist/cli/commands/api/index.d.mts +4 -0
- package/dist/cli/commands/deploy/aigateway.d.mts +5 -0
- package/dist/cli/commands/deploy/application.d.mts +7 -0
- package/dist/cli/commands/deploy/apply-phases.d.mts +14 -0
- package/dist/cli/commands/deploy/auth.d.mts +5 -0
- package/dist/cli/commands/deploy/deploy.d.mts +34 -0
- package/dist/cli/commands/deploy/executor.d.mts +7 -0
- package/dist/cli/commands/deploy/function-registry-types.d.mts +12 -0
- package/dist/cli/commands/deploy/function-registry.d.mts +7 -0
- package/dist/cli/commands/deploy/idp.d.mts +5 -0
- package/dist/cli/commands/deploy/resolver.d.mts +5 -0
- package/dist/cli/commands/deploy/secret-manager.d.mts +5 -0
- package/dist/cli/commands/deploy/staticwebsite.d.mts +5 -0
- package/dist/cli/commands/deploy/tailordb/index.d.mts +9 -0
- package/dist/cli/commands/deploy/types.d.mts +3 -0
- package/dist/cli/commands/deploy/workflow-execution-policy.d.mts +3 -0
- package/dist/cli/commands/deploy/workflow.d.mts +4 -0
- package/dist/cli/commands/executor/get.d.mts +28 -0
- package/dist/cli/commands/executor/jobs.d.mts +122 -0
- package/dist/cli/commands/executor/list.d.mts +18 -0
- package/dist/cli/commands/executor/transform.d.mts +42 -0
- package/dist/cli/commands/executor/trigger.d.mts +40 -0
- package/dist/cli/commands/executor/webhook.d.mts +21 -0
- package/dist/cli/commands/function/get.d.mts +17 -0
- package/dist/cli/commands/function/list.d.mts +21 -0
- package/dist/cli/commands/function/transform.d.mts +12 -0
- package/dist/cli/commands/generate/options.d.mts +6 -0
- package/dist/cli/commands/generate/seed/bundler.d.mts +26 -0
- package/dist/cli/commands/generate/service.d.mts +15 -0
- package/dist/cli/commands/machineuser/list.d.mts +26 -0
- package/dist/cli/commands/machineuser/token.d.mts +21 -0
- package/dist/cli/commands/oauth2client/get.d.mts +17 -0
- package/dist/cli/commands/oauth2client/list.d.mts +19 -0
- package/dist/cli/commands/oauth2client/transform.d.mts +21 -0
- package/dist/cli/commands/organization/folder/create.d.mts +17 -0
- package/dist/cli/commands/organization/folder/delete.d.mts +15 -0
- package/dist/cli/commands/organization/folder/get.d.mts +16 -0
- package/dist/cli/commands/organization/folder/list.d.mts +21 -0
- package/dist/cli/commands/organization/folder/update.d.mts +17 -0
- package/dist/cli/commands/organization/get.d.mts +15 -0
- package/dist/cli/commands/organization/list.d.mts +14 -0
- package/dist/cli/commands/organization/transform.d.mts +29 -0
- package/dist/cli/commands/organization/tree.d.mts +24 -0
- package/dist/cli/commands/organization/update.d.mts +16 -0
- package/dist/cli/commands/remove.d.mts +15 -0
- package/dist/cli/commands/show.d.mts +39 -0
- package/dist/cli/commands/staticwebsite/deploy.d.mts +19 -0
- package/dist/cli/commands/tailordb/migrate/bundler.d.mts +29 -0
- package/dist/cli/commands/tailordb/migrate/config.d.mts +18 -0
- package/dist/cli/commands/tailordb/migrate/diff-calculator.d.mts +246 -0
- package/dist/cli/commands/tailordb/migrate/generate.d.mts +16 -0
- package/dist/cli/commands/tailordb/migrate/snapshot-types.d.mts +208 -0
- package/dist/cli/commands/tailordb/migrate/snapshot.d.mts +98 -0
- package/dist/cli/commands/tailordb/migrate/types.d.mts +7 -0
- package/dist/cli/commands/tailordb/truncate.d.mts +18 -0
- package/dist/cli/commands/workflow/executions.d.mts +74 -0
- package/dist/cli/commands/workflow/get.d.mts +30 -0
- package/dist/cli/commands/workflow/list.d.mts +18 -0
- package/dist/cli/commands/workflow/resume.d.mts +22 -0
- package/dist/cli/commands/workflow/start.d.mts +60 -0
- package/dist/cli/commands/workflow/status.d.mts +6 -0
- package/dist/cli/commands/workflow/transform.d.mts +34 -0
- package/dist/cli/commands/workflow/wait.d.mts +15 -0
- package/dist/cli/commands/workflow/waiter.d.mts +23 -0
- package/dist/cli/commands/workspace/app/health.d.mts +17 -0
- package/dist/cli/commands/workspace/app/list.d.mts +21 -0
- package/dist/cli/commands/workspace/app/transform.d.mts +20 -0
- package/dist/cli/commands/workspace/create.d.mts +27 -0
- package/dist/cli/commands/workspace/delete.d.mts +14 -0
- package/dist/cli/commands/workspace/get.d.mts +16 -0
- package/dist/cli/commands/workspace/list.d.mts +17 -0
- package/dist/cli/commands/workspace/restore.d.mts +14 -0
- package/dist/cli/commands/workspace/transform.d.mts +20 -0
- package/dist/cli/commands/workspace/user/invite.d.mts +21 -0
- package/dist/cli/commands/workspace/user/list.d.mts +21 -0
- package/dist/cli/commands/workspace/user/remove.d.mts +16 -0
- package/dist/cli/commands/workspace/user/transform.d.mts +9 -0
- package/dist/cli/commands/workspace/user/update.d.mts +21 -0
- package/dist/cli/index.mjs +12 -5534
- package/dist/cli/lib.d.mts +90 -21180
- package/dist/cli/lib.mjs +157 -16
- package/dist/cli/lib.mjs.map +1 -1
- package/dist/cli/main.d.mts +23 -0
- package/dist/cli/main.mjs +6583 -0
- package/dist/cli/main.mjs.map +1 -0
- package/dist/cli/query/index.d.mts +38 -0
- package/dist/cli/services/application.d.mts +12 -0
- package/dist/cli/services/auth/service.d.mts +3 -0
- package/dist/cli/services/executor/service.d.mts +1 -0
- package/dist/cli/services/http-adapter/bundler.d.mts +3 -0
- package/dist/cli/services/http-adapter/service.d.mts +2 -0
- package/dist/cli/services/resolver/service.d.mts +1 -0
- package/dist/cli/services/tailordb/service.d.mts +3 -0
- package/dist/cli/services/workflow/bundler.d.mts +2 -0
- package/dist/cli/services/workflow/service.d.mts +1 -0
- package/dist/cli/shared/args.d.mts +13 -0
- package/dist/cli/shared/client.d.mts +1273 -0
- package/dist/cli/shared/config-loader.d.mts +25 -0
- package/dist/cli/shared/context.d.mts +29 -0
- package/dist/cli/shared/error-json.d.mts +23 -0
- package/dist/cli/shared/readonly-guard.d.mts +25 -0
- package/dist/cli/shared/script-executor.d.mts +77 -0
- package/dist/cli/shared/seed-chunker.d.mts +45 -0
- package/dist/cli/shared/seed-context.d.mts +49 -0
- package/dist/cli/shared/tailordb-namespaces.d.mts +40 -0
- package/dist/cli/shared/type-generator.d.mts +19 -0
- package/dist/cli/shared/workspace-name.d.mts +1 -0
- package/dist/cli/ts-hook.d.mts +4 -0
- package/dist/cli/ts-hook.mjs +333 -0
- package/dist/completion/zsh-worker.zsh +4223 -0
- package/dist/configure/config/index.d.mts +20 -0
- package/dist/configure/config/types.d.mts +111 -0
- package/dist/configure/index.d.mts +135 -7
- package/dist/configure/index.mjs +409 -56
- package/dist/configure/index.mjs.map +1 -1
- package/dist/configure/services/aigateway/index.d.mts +16 -0
- package/dist/configure/services/aigateway/types.d.mts +10 -0
- package/dist/configure/services/auth/index.d.mts +33 -0
- package/dist/configure/services/auth/types.d.mts +168 -0
- package/dist/configure/services/executor/executor.d.mts +70 -0
- package/dist/configure/services/executor/index.d.mts +9 -0
- package/dist/configure/services/executor/operation.d.mts +50 -0
- package/dist/configure/services/executor/trigger/event.d.mts +271 -0
- package/dist/configure/services/executor/trigger/index.d.mts +7 -0
- package/dist/configure/services/executor/trigger/schedule.d.mts +24 -0
- package/dist/configure/services/executor/trigger/webhook.d.mts +43 -0
- package/dist/configure/services/executor/types.d.mts +2 -0
- package/dist/configure/services/http-adapter/http-adapter.d.mts +124 -0
- package/dist/configure/services/http-adapter/index.d.mts +2 -0
- package/dist/configure/services/idp/index.d.mts +60 -0
- package/dist/configure/services/idp/permission.d.mts +64 -0
- package/dist/configure/services/idp/types.d.mts +23 -0
- package/dist/configure/services/index.d.mts +40 -0
- package/dist/configure/services/resolver/index.d.mts +6 -0
- package/dist/configure/services/resolver/permission.d.mts +64 -0
- package/dist/configure/services/resolver/resolver.d.mts +88 -0
- package/dist/configure/services/resolver/types.d.mts +5 -0
- package/dist/configure/services/secrets/index.d.mts +37 -0
- package/dist/configure/services/secrets/types.d.mts +10 -0
- package/dist/configure/services/staticwebsite/index.d.mts +18 -0
- package/dist/configure/services/staticwebsite/types.d.mts +10 -0
- package/dist/configure/services/tailordb/index.d.mts +4 -0
- package/dist/configure/services/tailordb/permission.d.mts +103 -0
- package/dist/configure/services/tailordb/schema.d.mts +486 -0
- package/dist/configure/services/tailordb/types.d.mts +198 -0
- package/dist/configure/services/workflow/execution-policy.d.mts +70 -0
- package/dist/configure/services/workflow/execution-policy.types.d.mts +103 -0
- package/dist/configure/services/workflow/index.d.mts +9 -0
- package/dist/configure/services/workflow/job.d.mts +83 -0
- package/dist/configure/services/workflow/types.d.mts +2 -0
- package/dist/configure/services/workflow/wait-point.d.mts +72 -0
- package/dist/configure/services/workflow/workflow.d.mts +56 -0
- package/dist/configure/types/aigateway-name.d.mts +12 -0
- package/dist/configure/types/connection-name.d.mts +12 -0
- package/dist/configure/types/field.d.mts +8 -0
- package/dist/configure/types/field.types.d.mts +70 -0
- package/dist/configure/types/idp-name.d.mts +12 -0
- package/dist/configure/types/index.d.mts +5 -0
- package/dist/configure/types/machine-user.d.mts +2 -0
- package/dist/configure/types/permission-operand.types.d.mts +20 -0
- package/dist/configure/types/type.d.mts +73 -0
- package/dist/{context-s0lxhu8_.mjs → context-DYQVYWqZ.mjs} +4 -6
- package/dist/context-DYQVYWqZ.mjs.map +1 -0
- package/dist/{crashreport-BhD0y14F.mjs → crashreport-B5LqCTfF.mjs} +25 -17
- package/dist/{crashreport-BhD0y14F.mjs.map → crashreport-B5LqCTfF.mjs.map} +1 -1
- package/dist/{crashreport-D1wKBJ8N.mjs → crashreport-eI7ty7ok.mjs} +1 -2
- package/dist/{enum-constants-C7DaWeQo.mjs → enum-constants-j9QBF0cB.mjs} +1 -2
- package/dist/enum-constants-j9QBF0cB.mjs.map +1 -0
- package/dist/{errors-EsY4XO6O.mjs → errors-D7583Zz7.mjs} +18 -3
- package/dist/errors-D7583Zz7.mjs.map +1 -0
- package/dist/{file-B58Dm-2P.mjs → file-BUcmVIH2.mjs} +12 -23
- package/dist/file-BUcmVIH2.mjs.map +1 -0
- package/dist/{file-utils-BHPxPXmn.mjs → file-utils-yEiIS4nJ.mjs} +7 -8
- package/dist/file-utils-yEiIS4nJ.mjs.map +1 -0
- package/dist/{globals-ByrCoDip.mjs → globals-DQotNuwK.mjs} +32 -6
- package/dist/globals-DQotNuwK.mjs.map +1 -0
- package/dist/iconv-QWaZh0TT.mjs +38 -0
- package/dist/iconv-QWaZh0TT.mjs.map +1 -0
- package/dist/{idp-Ch95ag8h.mjs → idp-RA_swu-h.mjs} +12 -6
- package/dist/idp-RA_swu-h.mjs.map +1 -0
- package/dist/{interceptor-DOqRkCya.mjs → interceptor-e33JtsC-.mjs} +2 -3
- package/dist/interceptor-e33JtsC-.mjs.map +1 -0
- package/dist/kysely/index.d.mts +5 -7
- package/dist/kysely/index.mjs +0 -1
- package/dist/kysely/index.mjs.map +1 -1
- package/dist/{kysely-type-D1e0Vwkd.mjs → kysely-type-DqIRgDYR.mjs} +6 -6
- package/dist/kysely-type-DqIRgDYR.mjs.map +1 -0
- package/dist/logger-BtX0suGY.mjs +48 -0
- package/dist/logger-BtX0suGY.mjs.map +1 -0
- package/dist/logger-CXQq9YIp.mjs +317 -0
- package/dist/logger-CXQq9YIp.mjs.map +1 -0
- package/dist/{multiline-Cf9ODpr1.mjs → multiline-sfHpTZZK.mjs} +1 -2
- package/dist/{multiline-Cf9ODpr1.mjs.map → multiline-sfHpTZZK.mjs.map} +1 -1
- package/dist/{package-json-DcQApfPQ.mjs → package-json-8b0O9TlX.mjs} +1 -2
- package/dist/{package-json-DcQApfPQ.mjs.map → package-json-8b0O9TlX.mjs.map} +1 -1
- package/dist/package-json-Cv2Z-TqQ.mjs +3 -0
- package/dist/parser/service/auth/index.d.mts +1 -0
- package/dist/parser/service/auth/schema.d.mts +3 -0
- package/dist/parser/service/http-adapter/index.d.mts +1 -0
- package/dist/parser/service/http-adapter/schema.d.mts +1 -0
- package/dist/parser/service/idp/types.d.mts +5 -0
- package/dist/parser/service/tailordb/type-source.d.mts +10 -0
- package/dist/parser/service/tailordb/types.d.mts +131 -0
- package/dist/platform-serialize-RoRtBS0v.mjs +46 -0
- package/dist/platform-serialize-RoRtBS0v.mjs.map +1 -0
- package/dist/plugin/builtin/enum-constants/index.d.mts +15 -1
- package/dist/plugin/builtin/enum-constants/index.mjs +1 -2
- package/dist/plugin/builtin/file-utils/index.d.mts +15 -1
- package/dist/plugin/builtin/file-utils/index.mjs +1 -2
- package/dist/plugin/builtin/kysely-type/index.d.mts +15 -1
- package/dist/plugin/builtin/kysely-type/index.mjs +1 -2
- package/dist/plugin/builtin/seed/index.d.mts +46 -2
- package/dist/plugin/builtin/seed/index.mjs +1 -2
- package/dist/plugin/builtin/seed/seed-type-processor.d.mts +19 -0
- package/dist/plugin/builtin/seed/types.d.mts +2 -0
- package/dist/plugin/get-generated-type.d.mts +16 -0
- package/dist/plugin/index.d.mts +3 -119
- package/dist/plugin/index.mjs +1 -2
- package/dist/plugin/index.mjs.map +1 -1
- package/dist/plugin/manager.d.mts +2 -0
- package/dist/plugin/types.d.mts +242 -0
- package/dist/plugin/with-context.d.mts +101 -0
- package/dist/{runtime-C7qTBDD2.mjs → register-ts-hook-BAHMwxfG.mjs} +12374 -8672
- package/dist/register-ts-hook-BAHMwxfG.mjs.map +1 -0
- package/dist/registry-BIGVUrMB.mjs +54 -0
- package/dist/registry-BIGVUrMB.mjs.map +1 -0
- package/dist/{repl-editor-CJG3sz7A.mjs → repl-editor-BCozyiNq.mjs} +7 -7
- package/dist/{repl-editor-CJG3sz7A.mjs.map → repl-editor-BCozyiNq.mjs.map} +1 -1
- package/dist/runtime/aigateway.d.mts +25 -0
- package/dist/runtime/aigateway.mjs +3 -0
- package/dist/runtime/authconnection.d.mts +21 -2
- package/dist/runtime/authconnection.mjs +2 -3
- package/dist/runtime/context.d.mts +54 -2
- package/dist/runtime/context.mjs +2 -3
- package/dist/runtime/field-parse.d.mts +10 -0
- package/dist/runtime/file.d.mts +170 -2
- package/dist/runtime/file.mjs +2 -3
- package/dist/runtime/globals.d.mts +38 -53
- package/dist/runtime/globals.mjs +0 -1
- package/dist/runtime/iconv.d.mts +73 -2
- package/dist/runtime/iconv.mjs +2 -3
- package/dist/runtime/idp.d.mts +129 -2
- package/dist/runtime/idp.mjs +2 -3
- package/dist/runtime/index.d.mts +48 -9
- package/dist/runtime/index.mjs +10 -9
- package/dist/runtime/logger.d.mts +98 -0
- package/dist/runtime/logger.mjs +3 -0
- package/dist/runtime/secretmanager.d.mts +41 -2
- package/dist/runtime/secretmanager.mjs +2 -3
- package/dist/runtime/types.d.mts +25 -0
- package/dist/runtime/workflow.d.mts +124 -2
- package/dist/runtime/workflow.mjs +2 -3
- package/dist/{schema-1msIhXwA.mjs → schema--xYWRGfe.mjs} +289 -231
- package/dist/schema--xYWRGfe.mjs.map +1 -0
- package/dist/{secret-file-CWzF8rry.mjs → secret-file-C3J4Gy8r.mjs} +2 -3
- package/dist/{secret-file-CWzF8rry.mjs.map → secret-file-C3J4Gy8r.mjs.map} +1 -1
- package/dist/secretmanager-CYlpffsz.mjs +13 -0
- package/dist/secretmanager-CYlpffsz.mjs.map +1 -0
- package/dist/secretmanager-IY4UvinW.mjs +131 -0
- package/dist/secretmanager-IY4UvinW.mjs.map +1 -0
- package/dist/seed/index.d.mts +4 -4
- package/dist/seed/index.mjs +0 -1
- package/dist/seed/index.mjs.map +1 -1
- package/dist/seed-LUVr7jHL.mjs +444 -0
- package/dist/seed-LUVr7jHL.mjs.map +1 -0
- package/dist/{service-DMohAx8a2.mjs → service-B5WynBHQ.mjs} +3 -4
- package/dist/service-B5WynBHQ.mjs.map +1 -0
- package/dist/service-BNtPsK9Q.mjs +837 -0
- package/dist/service-BNtPsK9Q.mjs.map +1 -0
- package/dist/service-D5jn05ZI.mjs +3 -0
- package/dist/service_pb-BwZRiNug.mjs +167 -0
- package/dist/service_pb-BwZRiNug.mjs.map +1 -0
- package/dist/service_pb-wRkxUta6.mjs +3 -0
- package/dist/tailor-proto/src/tailor/v1/aigateway_pb.d.mts +203 -0
- package/dist/tailor-proto/src/tailor/v1/aigateway_resource_pb.d.mts +57 -0
- package/dist/tailor-proto/src/tailor/v1/application_pb.d.mts +315 -0
- package/dist/tailor-proto/src/tailor/v1/application_resource_pb.d.mts +160 -0
- package/dist/tailor-proto/src/tailor/v1/auth_pb.d.mts +2069 -0
- package/dist/tailor-proto/src/tailor/v1/auth_resource_pb.d.mts +865 -0
- package/dist/tailor-proto/src/tailor/v1/events_pb.d.mts +111 -0
- package/dist/tailor-proto/src/tailor/v1/events_resource_pb.d.mts +68 -0
- package/dist/tailor-proto/src/tailor/v1/executor_pb.d.mts +438 -0
- package/dist/tailor-proto/src/tailor/v1/executor_resource_pb.d.mts +563 -0
- package/dist/tailor-proto/src/tailor/v1/function_pb.d.mts +144 -0
- package/dist/tailor-proto/src/tailor/v1/function_registry_pb.d.mts +450 -0
- package/dist/tailor-proto/src/tailor/v1/function_resource_pb.d.mts +191 -0
- package/dist/tailor-proto/src/tailor/v1/http_adapter_resource_pb.d.mts +49 -0
- package/dist/tailor-proto/src/tailor/v1/idp_pb.d.mts +406 -0
- package/dist/tailor-proto/src/tailor/v1/idp_resource_pb.d.mts +429 -0
- package/dist/tailor-proto/src/tailor/v1/metadata_pb.d.mts +72 -0
- package/dist/tailor-proto/src/tailor/v1/metadata_resource_pb.d.mts +16 -0
- package/dist/tailor-proto/src/tailor/v1/meter_pb.d.mts +308 -0
- package/dist/tailor-proto/src/tailor/v1/pipeline_pb.d.mts +590 -0
- package/dist/tailor-proto/src/tailor/v1/pipeline_resource_pb.d.mts +329 -0
- package/dist/tailor-proto/src/tailor/v1/resource_pb.d.mts +112 -0
- package/dist/tailor-proto/src/tailor/v1/secret_manager_pb.d.mts +345 -0
- package/dist/tailor-proto/src/tailor/v1/secret_manager_resource_pb.d.mts +53 -0
- package/dist/tailor-proto/src/tailor/v1/service_pb.d.mts +3575 -0
- package/dist/tailor-proto/src/tailor/v1/stateflow_pb.d.mts +186 -0
- package/dist/tailor-proto/src/tailor/v1/stateflow_resource_pb.d.mts +28 -0
- package/dist/tailor-proto/src/tailor/v1/staticwebsite_pb.d.mts +428 -0
- package/dist/tailor-proto/src/tailor/v1/staticwebsite_resource_pb.d.mts +89 -0
- package/dist/tailor-proto/src/tailor/v1/tailordb_pb.d.mts +683 -0
- package/dist/tailor-proto/src/tailor/v1/tailordb_resource_pb.d.mts +796 -0
- package/dist/tailor-proto/src/tailor/v1/telemetryrouter_pb.d.mts +329 -0
- package/dist/tailor-proto/src/tailor/v1/telemetryrouter_resource_pb.d.mts +182 -0
- package/dist/tailor-proto/src/tailor/v1/workflow_pb.d.mts +861 -0
- package/dist/tailor-proto/src/tailor/v1/workflow_resource_pb.d.mts +309 -0
- package/dist/tailor-proto/src/tailor/v1/workspace_pb.d.mts +2014 -0
- package/dist/tailor-proto/src/tailor/v1/workspace_resource_pb.d.mts +482 -0
- package/dist/{telemetry-BQbbVo2t.mjs → telemetry-BRVdwh14.mjs} +4 -5
- package/dist/telemetry-BRVdwh14.mjs.map +1 -0
- package/dist/telemetry-CkbkeJxl.mjs +3 -0
- package/dist/test-env-key-D7UkZp99.mjs +75 -0
- package/dist/test-env-key-D7UkZp99.mjs.map +1 -0
- package/dist/type-source-DH_LH20p.mjs +13 -0
- package/dist/type-source-DH_LH20p.mjs.map +1 -0
- package/dist/types/aigateway.generated.d.mts +12 -0
- package/dist/types/app-config.generated.d.mts +4 -0
- package/dist/types/auth-connection.generated.d.mts +33 -0
- package/dist/types/auth.generated.d.mts +188 -0
- package/dist/types/executor.generated.d.mts +209 -0
- package/dist/types/helpers.d.mts +40 -0
- package/dist/types/http-adapter.generated.d.mts +28 -0
- package/dist/types/idp.generated.d.mts +626 -0
- package/dist/types/resolver.generated.d.mts +82 -0
- package/dist/types/secrets.generated.d.mts +14 -0
- package/dist/types/staticwebsite.generated.d.mts +14 -0
- package/dist/types/tailordb.generated.d.mts +468 -0
- package/dist/types/workflow.generated.d.mts +17 -0
- package/dist/user-agent-Bgsszb5I.mjs +28 -0
- package/dist/user-agent-Bgsszb5I.mjs.map +1 -0
- package/dist/utils/test/index.d.mts +6 -99
- package/dist/utils/test/index.mjs +60 -40
- package/dist/utils/test/index.mjs.map +1 -1
- package/dist/utils/test/mock.d.mts +86 -0
- package/dist/vitest/environment.d.mts +1 -2
- package/dist/vitest/environment.mjs +2 -3
- package/dist/vitest/environment.mjs.map +1 -1
- package/dist/vitest/index.d.mts +15 -392
- package/dist/vitest/index.mjs +1347 -9
- package/dist/vitest/index.mjs.map +1 -1
- package/dist/vitest/mock-kysely.d.mts +61 -0
- package/dist/vitest/mock.d.mts +10 -0
- package/dist/vitest/mocks/aigateway.d.mts +40 -0
- package/dist/vitest/mocks/authconnection.d.mts +38 -0
- package/dist/vitest/mocks/file.d.mts +58 -0
- package/dist/vitest/mocks/iconv.d.mts +51 -0
- package/dist/vitest/mocks/idp.d.mts +60 -0
- package/dist/vitest/mocks/logger.d.mts +45 -0
- package/dist/vitest/mocks/secretmanager.d.mts +44 -0
- package/dist/vitest/mocks/tailordb.d.mts +115 -0
- package/dist/vitest/mocks/workflow.d.mts +157 -0
- package/dist/vitest/setup.d.mts +1 -2
- package/dist/vitest/setup.mjs +2 -3
- package/dist/vitest/setup.mjs.map +1 -1
- package/dist/vitest/workflow-local.d.mts +41 -0
- package/dist/workflow-CsaQ9qK-.mjs +42 -0
- package/dist/workflow-CsaQ9qK-.mjs.map +1 -0
- package/dist/{client-CobIRHl-.mjs → workspace_resource_pb-UGK1SSn_.mjs} +55 -616
- package/dist/workspace_resource_pb-UGK1SSn_.mjs.map +1 -0
- package/docs/cli/application.md +150 -252
- package/docs/cli/auth.md +51 -295
- package/docs/cli/completion.md +4 -25
- package/docs/cli/crashreport.md +3 -63
- package/docs/cli/executor.md +72 -183
- package/docs/cli/function.md +17 -133
- package/docs/cli/organization.md +11 -221
- package/docs/cli/plugin.md +29 -0
- package/docs/cli/query.md +2 -22
- package/docs/cli/secret.md +71 -251
- package/docs/cli/setup.md +138 -40
- package/docs/cli/skills.md +50 -39
- package/docs/cli/staticwebsite.md +32 -180
- package/docs/cli/tailordb.md +71 -427
- package/docs/cli/upgrade.md +2 -22
- package/docs/cli/user.md +78 -247
- package/docs/cli/workflow.md +150 -172
- package/docs/cli/workspace.md +167 -538
- package/docs/cli-reference.md +213 -96
- package/docs/configuration.md +40 -8
- package/docs/github-actions.md +72 -24
- package/docs/migration/v2.md +1316 -0
- package/docs/multi-environment.md +29 -7
- package/docs/plugin/custom.md +6 -6
- package/docs/plugin/index.md +9 -9
- package/docs/quickstart.md +8 -7
- package/docs/runtime.md +21 -12
- package/docs/services/aigateway.md +115 -0
- package/docs/services/auth.md +70 -61
- package/docs/services/executor.md +8 -5
- package/docs/services/http-adapter.md +16 -1
- package/docs/services/idp.md +55 -2
- package/docs/services/resolver.md +63 -11
- package/docs/services/secret.md +11 -11
- package/docs/services/staticwebsite.md +8 -2
- package/docs/services/tailordb-migration.md +43 -28
- package/docs/services/tailordb.md +200 -99
- package/docs/services/workflow.md +135 -59
- package/docs/testing.md +253 -145
- package/package.json +61 -47
- package/postinstall.mjs +4 -6
- package/dist/actor-J2gJ0eK5.d.mts +0 -24
- package/dist/application-76hhIhnJ.mjs.map +0 -1
- package/dist/application-av2raLs6.mjs +0 -4
- package/dist/authconnection-BIYzEh2p.d.mts +0 -39
- package/dist/authconnection-D8SJGMpj.mjs +0 -16
- package/dist/authconnection-D8SJGMpj.mjs.map +0 -1
- package/dist/brand-DlnJ375c.mjs.map +0 -1
- package/dist/chunk-BkoGK1jX.mjs +0 -21
- package/dist/cli/erd-viewer-assets/app.js +0 -1181
- package/dist/cli/erd-viewer-assets/index.html +0 -73
- package/dist/cli/erd-viewer-assets/serve.json +0 -13
- package/dist/cli/erd-viewer-assets/styles.css +0 -789
- package/dist/cli/index.d.mts +0 -5
- package/dist/cli/index.mjs.map +0 -1
- package/dist/cli/skills.d.mts +0 -1
- package/dist/cli/skills.mjs +0 -22
- package/dist/cli/skills.mjs.map +0 -1
- package/dist/client-C68VWo4g.mjs +0 -4
- package/dist/client-CobIRHl-.mjs.map +0 -1
- package/dist/context-CUBwSBq4.d.mts +0 -68
- package/dist/context-s0lxhu8_.mjs.map +0 -1
- package/dist/enum-constants-C7DaWeQo.mjs.map +0 -1
- package/dist/env-B-g-qgE4.d.mts +0 -7
- package/dist/errors-EsY4XO6O.mjs.map +0 -1
- package/dist/field-C4zdJLW5.mjs +0 -23
- package/dist/field-C4zdJLW5.mjs.map +0 -1
- package/dist/file-B58Dm-2P.mjs.map +0 -1
- package/dist/file-BzK8z3X-.d.mts +0 -250
- package/dist/file-utils-BHPxPXmn.mjs.map +0 -1
- package/dist/globals-ByrCoDip.mjs.map +0 -1
- package/dist/iconv-DreIffeM.mjs +0 -64
- package/dist/iconv-DreIffeM.mjs.map +0 -1
- package/dist/iconv-kwrmd1U_.d.mts +0 -122
- package/dist/idp-BlBPtXJ-.d.mts +0 -160
- package/dist/idp-Ch95ag8h.mjs.map +0 -1
- package/dist/index-CLxubakC.d.mts +0 -1225
- package/dist/index-CPRnOjjt.d.mts +0 -18
- package/dist/index-CQZVJ5SX.d.mts +0 -18
- package/dist/index-CfRFkXIO.d.mts +0 -47
- package/dist/index-DRhMpdnA.d.mts +0 -46
- package/dist/index-DUupuPhZ.d.mts +0 -18
- package/dist/interceptor-DOqRkCya.mjs.map +0 -1
- package/dist/job-BpsFXPbi.mjs +0 -54
- package/dist/job-BpsFXPbi.mjs.map +0 -1
- package/dist/kysely-type-D1e0Vwkd.mjs.map +0 -1
- package/dist/logger-DpJyJvNz.mjs +0 -221
- package/dist/logger-DpJyJvNz.mjs.map +0 -1
- package/dist/mock-DMgIygjE.mjs +0 -806
- package/dist/mock-DMgIygjE.mjs.map +0 -1
- package/dist/package-json-wzO6nV9O.mjs +0 -4
- package/dist/plugin-C_FyVSdl.d.mts +0 -634
- package/dist/registry-D0uB0OrK.mjs +0 -178
- package/dist/registry-D0uB0OrK.mjs.map +0 -1
- package/dist/runtime-C7qTBDD2.mjs.map +0 -1
- package/dist/schema-1msIhXwA.mjs.map +0 -1
- package/dist/secretmanager-B9h-U_8U.mjs +0 -25
- package/dist/secretmanager-B9h-U_8U.mjs.map +0 -1
- package/dist/secretmanager-CKLB3wAQ.d.mts +0 -55
- package/dist/seed-BH2FbrPV.mjs +0 -1171
- package/dist/seed-BH2FbrPV.mjs.map +0 -1
- package/dist/service-BHQIerYh.mjs +0 -4
- package/dist/service-DMohAx8a2.mjs.map +0 -1
- package/dist/service-wI3Hvrgx.mjs +0 -460
- package/dist/service-wI3Hvrgx.mjs.map +0 -1
- package/dist/tailordb-BlBGmQK-.d.mts +0 -863
- package/dist/telemetry-BQbbVo2t.mjs.map +0 -1
- package/dist/telemetry-w92bvGdC.mjs +0 -4
- package/dist/types-2Be3wSMc.mjs +0 -5
- package/dist/types-CmzfQP_m.mjs +0 -372
- package/dist/types-CmzfQP_m.mjs.map +0 -1
- package/dist/workflow--aPbA8Uq.mjs +0 -39
- package/dist/workflow--aPbA8Uq.mjs.map +0 -1
- package/dist/workflow-CMamswkK.d.mts +0 -96
- package/dist/workflow.generated-Bf1tWylx.d.mts +0 -1416
- package/docs/generator/builtin.md +0 -257
- package/docs/generator/custom.md +0 -147
- package/docs/generator/index.md +0 -66
|
@@ -29,7 +29,7 @@ Define TailorDB Types in files matching glob patterns specified in `tailor.confi
|
|
|
29
29
|
import { db } from "@tailor-platform/sdk";
|
|
30
30
|
|
|
31
31
|
// Export both value and type
|
|
32
|
-
export const user = db.
|
|
32
|
+
export const user = db.table("User", {
|
|
33
33
|
name: db.string(),
|
|
34
34
|
email: db.string().unique(),
|
|
35
35
|
age: db.int(),
|
|
@@ -38,7 +38,7 @@ export const user = db.type("User", {
|
|
|
38
38
|
export type user = typeof user;
|
|
39
39
|
|
|
40
40
|
// You can define multiple types in the same file
|
|
41
|
-
export const role = db.
|
|
41
|
+
export const role = db.table("Role", {
|
|
42
42
|
name: db.string().unique(),
|
|
43
43
|
});
|
|
44
44
|
export type role = typeof role;
|
|
@@ -47,7 +47,7 @@ export type role = typeof role;
|
|
|
47
47
|
Specify plural form by passing an array as first argument:
|
|
48
48
|
|
|
49
49
|
```typescript
|
|
50
|
-
db.
|
|
50
|
+
db.table(["User", "UserList"], {
|
|
51
51
|
name: db.string(),
|
|
52
52
|
});
|
|
53
53
|
```
|
|
@@ -55,7 +55,7 @@ db.type(["User", "UserList"], {
|
|
|
55
55
|
Pass a description as second argument:
|
|
56
56
|
|
|
57
57
|
```typescript
|
|
58
|
-
db.
|
|
58
|
+
db.table("User", "User in the system", {
|
|
59
59
|
name: db.string(),
|
|
60
60
|
});
|
|
61
61
|
```
|
|
@@ -174,11 +174,11 @@ db.string().unique();
|
|
|
174
174
|
Add a relation to field with automatic index and foreign key constraint:
|
|
175
175
|
|
|
176
176
|
```typescript
|
|
177
|
-
const role = db.
|
|
177
|
+
const role = db.table("Role", {
|
|
178
178
|
name: db.string(),
|
|
179
179
|
});
|
|
180
180
|
|
|
181
|
-
const user = db.
|
|
181
|
+
const user = db.table("User", {
|
|
182
182
|
name: db.string(),
|
|
183
183
|
roleId: db.uuid().relation({
|
|
184
184
|
type: "n-1",
|
|
@@ -190,7 +190,7 @@ const user = db.type("User", {
|
|
|
190
190
|
For one-to-one relations, use `type: "1-1"`:
|
|
191
191
|
|
|
192
192
|
```typescript
|
|
193
|
-
const userProfile = db.
|
|
193
|
+
const userProfile = db.table("UserProfile", {
|
|
194
194
|
userId: db.uuid().relation({
|
|
195
195
|
type: "1-1",
|
|
196
196
|
toward: { type: user },
|
|
@@ -202,7 +202,7 @@ const userProfile = db.type("UserProfile", {
|
|
|
202
202
|
For foreign key constraint without creating a relation, use `type: "keyOnly"`:
|
|
203
203
|
|
|
204
204
|
```typescript
|
|
205
|
-
const user = db.
|
|
205
|
+
const user = db.table("User", {
|
|
206
206
|
roleId: db.uuid().relation({
|
|
207
207
|
type: "keyOnly",
|
|
208
208
|
toward: { type: role },
|
|
@@ -213,22 +213,25 @@ const user = db.type("User", {
|
|
|
213
213
|
Create relations against different fields using `toward.key`:
|
|
214
214
|
|
|
215
215
|
```typescript
|
|
216
|
-
const user = db.
|
|
216
|
+
const user = db.table("User", {
|
|
217
217
|
email: db.string().unique(),
|
|
218
218
|
});
|
|
219
219
|
|
|
220
|
-
const userProfile = db.
|
|
220
|
+
const userProfile = db.table("UserProfile", {
|
|
221
221
|
userEmail: db.string().relation({
|
|
222
222
|
type: "1-1",
|
|
223
|
-
toward: { type: user, key: "email" },
|
|
223
|
+
toward: { type: user, key: "email", as: "user" },
|
|
224
224
|
}),
|
|
225
225
|
});
|
|
226
226
|
```
|
|
227
227
|
|
|
228
|
+
`userEmail` does not end in `ID`, `Id`, or `id`, so this example specifies the forward relation
|
|
229
|
+
name with `toward.as`.
|
|
230
|
+
|
|
228
231
|
Customize relation names using `toward.as` / `backward` options:
|
|
229
232
|
|
|
230
233
|
```typescript
|
|
231
|
-
const userProfile = db.
|
|
234
|
+
const userProfile = db.table("UserProfile", {
|
|
232
235
|
userId: db.uuid().relation({
|
|
233
236
|
type: "1-1",
|
|
234
237
|
toward: { type: user, as: "base" },
|
|
@@ -254,132 +257,166 @@ type User {
|
|
|
254
257
|
- `toward.as` - Customizes the field name for accessing the related type from this type
|
|
255
258
|
- `backward` - Customizes the field name for accessing this type from the related type
|
|
256
259
|
|
|
257
|
-
|
|
260
|
+
Relation names share the same GraphQL field namespace as fields, files, and other relations on
|
|
261
|
+
the table. The SDK rejects duplicate or empty relation names. When `toward.as` is omitted, the
|
|
262
|
+
default forward name comes from the relation field name with a trailing `ID`, `Id`, or `id`
|
|
263
|
+
removed. This lets multiple fields point to the same target table with distinct forward names:
|
|
258
264
|
|
|
259
|
-
|
|
265
|
+
```typescript
|
|
266
|
+
const post = db.table("Post", {
|
|
267
|
+
authorID: db.uuid().relation({
|
|
268
|
+
type: "n-1",
|
|
269
|
+
toward: { type: user },
|
|
270
|
+
backward: "authoredPosts",
|
|
271
|
+
}),
|
|
272
|
+
reviewerID: db.uuid().relation({
|
|
273
|
+
type: "n-1",
|
|
274
|
+
toward: { type: user },
|
|
275
|
+
backward: "reviewedPosts",
|
|
276
|
+
}),
|
|
277
|
+
});
|
|
278
|
+
```
|
|
260
279
|
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
280
|
+
These fields generate the forward names `author` and `reviewer`. A relation field without one of
|
|
281
|
+
the recognized ID suffixes needs an explicit `toward.as`, because its generated forward name
|
|
282
|
+
would conflict with the field itself.
|
|
283
|
+
|
|
284
|
+
Use `toward.as` or `backward` when a generated relation name would conflict with an existing
|
|
285
|
+
field, files entry, or relation on the same table.
|
|
286
|
+
|
|
287
|
+
### Hooks
|
|
288
|
+
|
|
289
|
+
Add hooks to execute functions during data creation or update.
|
|
264
290
|
|
|
265
291
|
#### Field-level Hooks
|
|
266
292
|
|
|
267
|
-
Set hooks directly on individual fields
|
|
293
|
+
Set hooks directly on individual fields.
|
|
294
|
+
|
|
295
|
+
Create hooks receive:
|
|
296
|
+
|
|
297
|
+
- `input`: The field value from the input (null when not provided)
|
|
298
|
+
- `invoker`: Principal performing the operation
|
|
299
|
+
- `now`: Operation timestamp (`Date`), shared across all hooks in the same operation
|
|
300
|
+
|
|
301
|
+
Update hooks receive the same arguments plus:
|
|
302
|
+
|
|
303
|
+
- `oldValue`: The previous field value (null only for optional fields)
|
|
268
304
|
|
|
269
305
|
```typescript
|
|
270
306
|
db.string().hooks({
|
|
271
|
-
create: ({
|
|
272
|
-
update: ({
|
|
307
|
+
create: ({ invoker }) => invoker?.id ?? "",
|
|
308
|
+
update: ({ input, oldValue }) => input ?? oldValue,
|
|
273
309
|
});
|
|
274
310
|
```
|
|
275
311
|
|
|
276
|
-
|
|
312
|
+
Field-level hooks operate on a single field and cannot access other fields. Use type-level hooks for cross-field logic.
|
|
277
313
|
|
|
278
314
|
#### Type-level Hooks
|
|
279
315
|
|
|
280
|
-
Set hooks
|
|
316
|
+
Set hooks across multiple fields using `db.table().hooks()`. The hook returns an object with the fields to override. When both field-level and type-level hooks exist for the same field, type-level hooks take priority.
|
|
317
|
+
|
|
318
|
+
Create hooks receive:
|
|
319
|
+
|
|
320
|
+
- `input`: The submitted record data. When field-level hooks or defaults exist, `input` reflects their applied results
|
|
321
|
+
- `invoker`: Principal performing the operation
|
|
322
|
+
- `now`: Operation timestamp (`Date`), shared across all hooks in the same operation
|
|
323
|
+
|
|
324
|
+
Update hooks receive the same arguments plus:
|
|
325
|
+
|
|
326
|
+
- `oldRecord`: The existing record (non-null)
|
|
281
327
|
|
|
282
328
|
```typescript
|
|
283
329
|
export const customer = db
|
|
284
|
-
.
|
|
330
|
+
.table("Customer", {
|
|
285
331
|
firstName: db.string(),
|
|
286
332
|
lastName: db.string(),
|
|
287
333
|
fullName: db.string(),
|
|
288
334
|
})
|
|
289
335
|
.hooks({
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
}
|
|
336
|
+
create: ({ input }) => ({
|
|
337
|
+
fullName: `${input.firstName} ${input.lastName}`,
|
|
338
|
+
}),
|
|
339
|
+
update: ({ input, oldRecord }) => ({
|
|
340
|
+
fullName: `${input.firstName ?? oldRecord.firstName} ${input.lastName ?? oldRecord.lastName}`,
|
|
341
|
+
}),
|
|
294
342
|
});
|
|
295
343
|
```
|
|
296
344
|
|
|
297
|
-
|
|
345
|
+
Use `now` to stamp several fields with the exact same instant:
|
|
298
346
|
|
|
299
347
|
```typescript
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
348
|
+
export const order = db
|
|
349
|
+
.table("Order", {
|
|
350
|
+
createdAt: db.datetime(),
|
|
351
|
+
updatedAt: db.datetime(),
|
|
304
352
|
})
|
|
305
353
|
.hooks({
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
// OK - set hooks on different fields
|
|
310
|
-
export const user = db
|
|
311
|
-
.type("User", {
|
|
312
|
-
firstName: db.string().hooks({ create: () => "John" }), // Field-level on firstName
|
|
313
|
-
lastName: db.string(),
|
|
314
|
-
})
|
|
315
|
-
.hooks({
|
|
316
|
-
lastName: { create: () => "Doe" }, // Type-level on lastName
|
|
354
|
+
create: ({ now }) => ({ createdAt: now, updatedAt: now }),
|
|
355
|
+
update: ({ now }) => ({ updatedAt: now }),
|
|
317
356
|
});
|
|
318
357
|
```
|
|
319
358
|
|
|
359
|
+
**Note:** `.hooks()` can only be called once on a type. Duplicate type-level calls fail at compile time and throw at runtime.
|
|
360
|
+
|
|
320
361
|
### Validation
|
|
321
362
|
|
|
322
|
-
Add validation rules to fields. Validators
|
|
363
|
+
Add validation rules to fields. Validators run after hooks.
|
|
323
364
|
|
|
324
|
-
- `value
|
|
325
|
-
- `data`: Entire record data after hook transformations (for accessing other field values)
|
|
326
|
-
- `user`: User performing the operation
|
|
365
|
+
**Note:** Custom validators run only when built-in type validation succeeds, so `value` always has the field's declared type. For array fields, the validator is called once with the complete array, not per element:
|
|
327
366
|
|
|
328
|
-
|
|
367
|
+
```typescript
|
|
368
|
+
// value is string[], not string
|
|
369
|
+
db.string({ array: true }).validate(({ value }) => value.length >= 2);
|
|
370
|
+
```
|
|
329
371
|
|
|
330
372
|
#### Field-level Validation
|
|
331
373
|
|
|
332
|
-
Set validators directly on individual fields:
|
|
374
|
+
Set validators directly on individual fields. Each validator receives `{ value }` (the field value after hooks) and returns an error message string to fail, or void to pass:
|
|
333
375
|
|
|
334
376
|
```typescript
|
|
335
377
|
db.string().validate(
|
|
336
|
-
({ value }) => value.includes("@"),
|
|
337
|
-
|
|
378
|
+
({ value }) => (value.includes("@") ? undefined : "Must contain @"),
|
|
379
|
+
({ value }) => (value.length >= 5 ? undefined : "Must be at least 5 characters"),
|
|
338
380
|
);
|
|
339
381
|
```
|
|
340
382
|
|
|
341
383
|
#### Type-level Validation
|
|
342
384
|
|
|
343
|
-
Set
|
|
385
|
+
Set a validator across all fields using `db.table().validate()`. The validator receives `{ newRecord, oldRecord, invoker }` and an `issues()` callback to report errors per field:
|
|
344
386
|
|
|
345
387
|
```typescript
|
|
346
388
|
export const user = db
|
|
347
|
-
.
|
|
389
|
+
.table("User", {
|
|
348
390
|
name: db.string(),
|
|
349
391
|
email: db.string(),
|
|
350
392
|
})
|
|
351
|
-
.validate({
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
393
|
+
.validate(({ newRecord }, issues) => {
|
|
394
|
+
if (newRecord.name.length <= 5) {
|
|
395
|
+
issues("name", "Name must be longer than 5 characters");
|
|
396
|
+
}
|
|
397
|
+
if (!newRecord.email.includes("@")) {
|
|
398
|
+
issues("email", "Must contain @");
|
|
399
|
+
}
|
|
357
400
|
});
|
|
358
401
|
```
|
|
359
402
|
|
|
360
|
-
|
|
403
|
+
### Defaults
|
|
404
|
+
|
|
405
|
+
Set a default value for a required field on create. The field becomes optional in the create input — the default fills in when no value is provided:
|
|
361
406
|
|
|
362
407
|
```typescript
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
name: db.string().validate(({ value }) => value.length > 0), // Field-level
|
|
367
|
-
})
|
|
368
|
-
.validate({
|
|
369
|
-
name: [({ value }) => value.length < 100, "Too long"], // Type-level - ERROR
|
|
370
|
-
});
|
|
408
|
+
db.int().default(0);
|
|
409
|
+
db.string().default("pending");
|
|
410
|
+
```
|
|
371
411
|
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
email: db.string(),
|
|
377
|
-
})
|
|
378
|
-
.validate({
|
|
379
|
-
email: [({ value }) => value.includes("@"), "Invalid email"], // Type-level on email
|
|
380
|
-
});
|
|
412
|
+
For datetime/date/time fields, pass `"now"` to use the operation timestamp:
|
|
413
|
+
|
|
414
|
+
```typescript
|
|
415
|
+
db.datetime().default("now");
|
|
381
416
|
```
|
|
382
417
|
|
|
418
|
+
**Note:** `.validate()` can only be called once on a type. Duplicate type-level calls fail at compile time and throw at runtime.
|
|
419
|
+
|
|
383
420
|
### Vector Search
|
|
384
421
|
|
|
385
422
|
```typescript
|
|
@@ -403,18 +440,36 @@ db.string().serial({
|
|
|
403
440
|
### Common Fields
|
|
404
441
|
|
|
405
442
|
```typescript
|
|
406
|
-
export const user = db.
|
|
443
|
+
export const user = db.table("User", {
|
|
407
444
|
name: db.string(),
|
|
408
445
|
...db.fields.timestamps(),
|
|
409
446
|
});
|
|
410
447
|
```
|
|
411
448
|
|
|
449
|
+
`db.fields.timestamps()` adds non-null `createdAt` and `updatedAt` datetime fields. Both fields are populated when a record is created; provided values are preserved so seed data can use historical timestamps. `updatedAt` is also refreshed automatically when a record is updated.
|
|
450
|
+
|
|
412
451
|
## Type Modifiers
|
|
413
452
|
|
|
453
|
+
Type builder methods that set one type-level configuration can be called only once on the same type. Duplicate calls fail at compile time and throw at runtime. This applies to `.description()`, `.hooks()`, `.validate()`, `.features()`, `.indexes()`, `.files()`, `.permission()`, and `.gqlPermission()`.
|
|
454
|
+
|
|
455
|
+
Conditional assignment is still supported when only one branch calls the method:
|
|
456
|
+
|
|
457
|
+
```typescript
|
|
458
|
+
let user = db.type("User", {
|
|
459
|
+
name: db.string(),
|
|
460
|
+
});
|
|
461
|
+
|
|
462
|
+
if (enableFiles) {
|
|
463
|
+
user = user.files({
|
|
464
|
+
avatar: "profile image",
|
|
465
|
+
});
|
|
466
|
+
}
|
|
467
|
+
```
|
|
468
|
+
|
|
414
469
|
### Composite Indexes
|
|
415
470
|
|
|
416
471
|
```typescript
|
|
417
|
-
db.
|
|
472
|
+
db.table("User", {
|
|
418
473
|
firstName: db.string(),
|
|
419
474
|
lastName: db.string(),
|
|
420
475
|
}).indexes({
|
|
@@ -427,7 +482,7 @@ db.type("User", {
|
|
|
427
482
|
### File Fields
|
|
428
483
|
|
|
429
484
|
```typescript
|
|
430
|
-
db.
|
|
485
|
+
db.table("User", {
|
|
431
486
|
name: db.string(),
|
|
432
487
|
}).files({
|
|
433
488
|
avatar: "profile image",
|
|
@@ -437,7 +492,7 @@ db.type("User", {
|
|
|
437
492
|
### Features
|
|
438
493
|
|
|
439
494
|
```typescript
|
|
440
|
-
db.
|
|
495
|
+
db.table("User", {
|
|
441
496
|
name: db.string(),
|
|
442
497
|
}).features({
|
|
443
498
|
aggregation: true,
|
|
@@ -450,7 +505,7 @@ db.type("User", {
|
|
|
450
505
|
Enable event publishing for a type to trigger executors on record changes:
|
|
451
506
|
|
|
452
507
|
```typescript
|
|
453
|
-
db.
|
|
508
|
+
db.table("User", {
|
|
454
509
|
name: db.string(),
|
|
455
510
|
}).features({
|
|
456
511
|
publishEvents: true,
|
|
@@ -461,7 +516,7 @@ db.type("User", {
|
|
|
461
516
|
|
|
462
517
|
- When `publishEvents: true`, record creation/update/deletion events are published
|
|
463
518
|
- When not specified, it is **automatically set to `true`** if an executor uses this type with `recordCreatedTrigger`, `recordUpdatedTrigger`, or `recordDeletedTrigger`
|
|
464
|
-
- When explicitly set to `false` while an executor uses this type, an error is thrown during `tailor
|
|
519
|
+
- When explicitly set to `false` while an executor uses this type, an error is thrown during `tailor deploy`
|
|
465
520
|
|
|
466
521
|
**Use cases:**
|
|
467
522
|
|
|
@@ -469,7 +524,7 @@ db.type("User", {
|
|
|
469
524
|
|
|
470
525
|
```typescript
|
|
471
526
|
// publishEvents is automatically enabled because an executor uses this type
|
|
472
|
-
export const order = db.
|
|
527
|
+
export const order = db.table("Order", {
|
|
473
528
|
status: db.string(),
|
|
474
529
|
});
|
|
475
530
|
|
|
@@ -483,7 +538,7 @@ db.type("User", {
|
|
|
483
538
|
2. **Manual enable**: Enable event publishing for external consumers or debugging
|
|
484
539
|
|
|
485
540
|
```typescript
|
|
486
|
-
db.
|
|
541
|
+
db.table("AuditLog", {
|
|
487
542
|
action: db.string(),
|
|
488
543
|
}).features({
|
|
489
544
|
publishEvents: true, // Enable even without executor triggers
|
|
@@ -493,13 +548,55 @@ db.type("User", {
|
|
|
493
548
|
3. **Explicit disable**: Disable event publishing for a type that doesn't need it (error if executor uses it)
|
|
494
549
|
|
|
495
550
|
```typescript
|
|
496
|
-
db.
|
|
551
|
+
db.table("TempData", {
|
|
497
552
|
data: db.string(),
|
|
498
553
|
}).features({
|
|
499
554
|
publishEvents: false, // Explicitly disable
|
|
500
555
|
});
|
|
501
556
|
```
|
|
502
557
|
|
|
558
|
+
#### GraphQL Operations
|
|
559
|
+
|
|
560
|
+
Control which GraphQL operations (`create`, `update`, `delete`, `read`) are exposed for a type. All operations are enabled by default.
|
|
561
|
+
|
|
562
|
+
```typescript
|
|
563
|
+
db.type("Order", {
|
|
564
|
+
status: db.string(),
|
|
565
|
+
}).features({
|
|
566
|
+
gqlOperations: {
|
|
567
|
+
delete: false, // Disable the delete mutation
|
|
568
|
+
},
|
|
569
|
+
});
|
|
570
|
+
```
|
|
571
|
+
|
|
572
|
+
Use the `"query"` alias to disable all mutations at once (read-only type: `create`/`update`/`delete` false, `read` true):
|
|
573
|
+
|
|
574
|
+
```typescript
|
|
575
|
+
db.type("AuditLog", {
|
|
576
|
+
action: db.string(),
|
|
577
|
+
}).features({
|
|
578
|
+
gqlOperations: "query",
|
|
579
|
+
});
|
|
580
|
+
```
|
|
581
|
+
|
|
582
|
+
**Namespace-level default**
|
|
583
|
+
|
|
584
|
+
Set a default for every type in a TailorDB namespace in `tailor.config.ts`. A type's own `.features({ gqlOperations })` always takes precedence over this default.
|
|
585
|
+
|
|
586
|
+
```typescript
|
|
587
|
+
// tailor.config.ts
|
|
588
|
+
export default defineConfig({
|
|
589
|
+
db: {
|
|
590
|
+
tailordb: {
|
|
591
|
+
files: ["./tailordb/*.ts"],
|
|
592
|
+
gqlOperations: { delete: false }, // Default for every type in this namespace
|
|
593
|
+
},
|
|
594
|
+
},
|
|
595
|
+
});
|
|
596
|
+
```
|
|
597
|
+
|
|
598
|
+
This default is re-evaluated on every `tailor deploy`, so changing it also updates types that already exist on the platform, not only newly created ones.
|
|
599
|
+
|
|
503
600
|
### Field Extraction (`pickFields` / `omitFields`)
|
|
504
601
|
|
|
505
602
|
Extract subsets of fields from a `TailorDBType` for reuse in resolvers, executors, seed schemas, etc.
|
|
@@ -509,15 +606,15 @@ Extract subsets of fields from a `TailorDBType` for reuse in resolvers, executor
|
|
|
509
606
|
Select specific fields and optionally modify their properties:
|
|
510
607
|
|
|
511
608
|
```typescript
|
|
512
|
-
const user = db.
|
|
609
|
+
const user = db.table("User", {
|
|
513
610
|
id: db.uuid(),
|
|
514
611
|
name: db.string(),
|
|
515
612
|
email: db.string().unique(),
|
|
516
613
|
...db.fields.timestamps(),
|
|
517
614
|
});
|
|
518
615
|
|
|
519
|
-
// Pick id and
|
|
520
|
-
user.pickFields(["id", "createdAt"], { optional: true });
|
|
616
|
+
// Pick id, createdAt, and updatedAt, making them optional
|
|
617
|
+
user.pickFields(["id", "createdAt", "updatedAt"], { optional: true });
|
|
521
618
|
```
|
|
522
619
|
|
|
523
620
|
Available options:
|
|
@@ -527,13 +624,15 @@ Available options:
|
|
|
527
624
|
| `optional` | Makes the selected fields optional |
|
|
528
625
|
| `array` | Makes the selected fields array types |
|
|
529
626
|
|
|
627
|
+
**Note:** The `array` option cannot change fields with custom validation — their validators expect the original value shape. Define a new field with a matching validator instead.
|
|
628
|
+
|
|
530
629
|
#### `omitFields(keys)`
|
|
531
630
|
|
|
532
631
|
Return all fields except the specified ones:
|
|
533
632
|
|
|
534
633
|
```typescript
|
|
535
|
-
// All fields except id and
|
|
536
|
-
user.omitFields(["id", "createdAt"]);
|
|
634
|
+
// All fields except id, createdAt, and updatedAt
|
|
635
|
+
user.omitFields(["id", "createdAt", "updatedAt"]);
|
|
537
636
|
```
|
|
538
637
|
|
|
539
638
|
#### Common Pattern: Input Schema Composition
|
|
@@ -548,9 +647,9 @@ export default createResolver({
|
|
|
548
647
|
name: "createUser",
|
|
549
648
|
operation: "mutation",
|
|
550
649
|
input: {
|
|
551
|
-
// id/createdAt are optional (auto-generated), other fields are required
|
|
552
|
-
...user.pickFields(["id", "createdAt"], { optional: true }),
|
|
553
|
-
...user.omitFields(["id", "createdAt"]),
|
|
650
|
+
// id/createdAt/updatedAt are optional (auto-generated), other fields are required
|
|
651
|
+
...user.pickFields(["id", "createdAt", "updatedAt"], { optional: true }),
|
|
652
|
+
...user.omitFields(["id", "createdAt", "updatedAt"]),
|
|
554
653
|
},
|
|
555
654
|
output: t.object({ id: t.uuid() }),
|
|
556
655
|
body: async (context) => {
|
|
@@ -567,8 +666,8 @@ import { t } from "@tailor-platform/sdk";
|
|
|
567
666
|
import { invoice } from "../../tailordb/invoice";
|
|
568
667
|
|
|
569
668
|
const schemaType = t.object({
|
|
570
|
-
...invoice.pickFields(["id", "createdAt"], { optional: true }),
|
|
571
|
-
...invoice.omitFields(["id", "createdAt", "invoiceNumber", "sequentialId"]),
|
|
669
|
+
...invoice.pickFields(["id", "createdAt", "updatedAt"], { optional: true }),
|
|
670
|
+
...invoice.omitFields(["id", "createdAt", "updatedAt", "invoiceNumber", "sequentialId"]),
|
|
572
671
|
});
|
|
573
672
|
```
|
|
574
673
|
|
|
@@ -578,8 +677,10 @@ Configure Permission and GQLPermission. For details, see the [TailorDB Permissio
|
|
|
578
677
|
|
|
579
678
|
**Important**: Following the secure-by-default principle, all operations are denied if permissions are not configured. You must explicitly grant permissions for each operation (create, read, update, delete).
|
|
580
679
|
|
|
680
|
+
`generate`/`deploy` reject a type that has no `.permission()`, or no `.gqlPermission()` while GraphQL operations are enabled for it (see [GraphQL Operations](#graphql-operations) above). Disable GraphQL exposure entirely with `.features({ gqlOperations: { create: false, update: false, delete: false, read: false } })` if a type only needs record-level permission.
|
|
681
|
+
|
|
581
682
|
```typescript
|
|
582
|
-
db.
|
|
683
|
+
db.table("User", {
|
|
583
684
|
name: db.string(),
|
|
584
685
|
role: db.enum(["admin", "user"]).index(),
|
|
585
686
|
})
|
|
@@ -609,7 +710,7 @@ import {
|
|
|
609
710
|
unsafeAllowAllGqlPermission,
|
|
610
711
|
} from "@tailor-platform/sdk";
|
|
611
712
|
|
|
612
|
-
db.
|
|
713
|
+
db.table("User", {
|
|
613
714
|
name: db.string(),
|
|
614
715
|
})
|
|
615
716
|
.permission(unsafeAllowAllTypePermission)
|
|
@@ -620,6 +721,6 @@ db.type("User", {
|
|
|
620
721
|
|
|
621
722
|
## Migrations
|
|
622
723
|
|
|
623
|
-
When you change a TailorDB type definition, the SDK can generate a migration that captures the diff and, for breaking changes, runs a data transformation script during `tailor
|
|
724
|
+
When you change a TailorDB type definition, the SDK can generate a migration that captures the diff and, for breaking changes, runs a data transformation script during `tailor deploy`. See the [TailorDB Migrations guide](./tailordb-migration.md) for the full workflow, configuration, supported change types, team coordination, and troubleshooting.
|
|
624
725
|
|
|
625
726
|
For the CLI command reference, see [`tailordb migration`](../cli/tailordb.md#tailordb-migration).
|