@tailor-platform/sdk 2.0.0-next.0 → 2.0.0-next.2

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 (208) hide show
  1. package/CHANGELOG.md +161 -0
  2. package/dist/application-Dtqap5jM.mjs +3 -0
  3. package/dist/{client-CobIRHl-.mjs → application-XuMWK4eq.mjs} +5869 -25
  4. package/dist/application-XuMWK4eq.mjs.map +1 -0
  5. package/dist/{assert-CKfwrmCV.mjs → assert-DBxo8jPo.mjs} +1 -2
  6. package/dist/{assert-CKfwrmCV.mjs.map → assert-DBxo8jPo.mjs.map} +1 -1
  7. package/dist/{authconnection-D8SJGMpj.mjs → authconnection-D2MhtTN5.mjs} +2 -3
  8. package/dist/{authconnection-D8SJGMpj.mjs.map → authconnection-D2MhtTN5.mjs.map} +1 -1
  9. package/dist/{authconnection-BIYzEh2p.d.mts → authconnection-DvUQAjQS.d.mts} +1 -1
  10. package/dist/{brand-DlnJ375c.mjs → brand-Eo4pLXPJ.mjs} +1 -2
  11. package/dist/{brand-DlnJ375c.mjs.map → brand-Eo4pLXPJ.mjs.map} +1 -1
  12. package/dist/cli/index.mjs +241 -237
  13. package/dist/cli/index.mjs.map +1 -1
  14. package/dist/cli/lib.d.mts +547 -620
  15. package/dist/cli/lib.mjs +9 -11
  16. package/dist/cli/lib.mjs.map +1 -1
  17. package/dist/completion/zsh-worker.zsh +4108 -0
  18. package/dist/configure/index.d.mts +9 -7
  19. package/dist/configure/index.mjs +76 -40
  20. package/dist/configure/index.mjs.map +1 -1
  21. package/dist/{context-s0lxhu8_.mjs → context-Bd266-ru.mjs} +2 -3
  22. package/dist/context-Bd266-ru.mjs.map +1 -0
  23. package/dist/{context-CUBwSBq4.d.mts → context-C2lEi9uw.d.mts} +7 -28
  24. package/dist/{crashreport-D1wKBJ8N.mjs → crashreport-BMWcxeSE.mjs} +1 -2
  25. package/dist/{crashreport-BhD0y14F.mjs → crashreport-DFq-vsU0.mjs} +21 -14
  26. package/dist/{crashreport-BhD0y14F.mjs.map → crashreport-DFq-vsU0.mjs.map} +1 -1
  27. package/dist/{enum-constants-C7DaWeQo.mjs → enum-constants-j9QBF0cB.mjs} +1 -2
  28. package/dist/enum-constants-j9QBF0cB.mjs.map +1 -0
  29. package/dist/{errors-EsY4XO6O.mjs → errors-Dtf2WPaW.mjs} +1 -2
  30. package/dist/{errors-EsY4XO6O.mjs.map → errors-Dtf2WPaW.mjs.map} +1 -1
  31. package/dist/{field-C4zdJLW5.mjs → field-DOsJCPFa.mjs} +1 -2
  32. package/dist/field-DOsJCPFa.mjs.map +1 -0
  33. package/dist/{file-B58Dm-2P.mjs → file-BbdFGdMV.mjs} +3 -12
  34. package/dist/file-BbdFGdMV.mjs.map +1 -0
  35. package/dist/{file-BzK8z3X-.d.mts → file-Dq3NIt_F.d.mts} +3 -42
  36. package/dist/{file-utils-BHPxPXmn.mjs → file-utils-CYZnO1pX.mjs} +6 -7
  37. package/dist/file-utils-CYZnO1pX.mjs.map +1 -0
  38. package/dist/{globals-ByrCoDip.mjs → globals-Cf0sxIt8.mjs} +53 -5
  39. package/dist/globals-Cf0sxIt8.mjs.map +1 -0
  40. package/dist/http-adapter.generated-DFsXDdm5.d.mts +581 -0
  41. package/dist/{iconv-kwrmd1U_.d.mts → iconv-Co-TOPuH.d.mts} +1 -1
  42. package/dist/{iconv-DreIffeM.mjs → iconv-D2vi8G36.mjs} +2 -3
  43. package/dist/{iconv-DreIffeM.mjs.map → iconv-D2vi8G36.mjs.map} +1 -1
  44. package/dist/{idp-Ch95ag8h.mjs → idp-BDbK5gjm.mjs} +2 -3
  45. package/dist/{idp-Ch95ag8h.mjs.map → idp-BDbK5gjm.mjs.map} +1 -1
  46. package/dist/{idp-BlBPtXJ-.d.mts → idp-DrhVrLmV.d.mts} +1 -1
  47. package/dist/{index-CLxubakC.d.mts → index-BI-_j9Z3.d.mts} +49 -261
  48. package/dist/{index-CPRnOjjt.d.mts → index-C4JirJH8.d.mts} +2 -2
  49. package/dist/{index-CQZVJ5SX.d.mts → index-CZfWhr0a.d.mts} +2 -2
  50. package/dist/{index-DRhMpdnA.d.mts → index-Cg8VKAdN.d.mts} +8 -8
  51. package/dist/{index-CfRFkXIO.d.mts → index-DYRjoLXD.d.mts} +2 -2
  52. package/dist/index-lFpcjHPU.d.mts +201 -0
  53. package/dist/{index-DUupuPhZ.d.mts → index-nW7hE6oE.d.mts} +2 -2
  54. package/dist/{interceptor-DOqRkCya.mjs → interceptor-D-q1rvRl.mjs} +1 -2
  55. package/dist/{interceptor-DOqRkCya.mjs.map → interceptor-D-q1rvRl.mjs.map} +1 -1
  56. package/dist/kysely/index.mjs +0 -1
  57. package/dist/kysely/index.mjs.map +1 -1
  58. package/dist/{kysely-type-D1e0Vwkd.mjs → kysely-type-DR8uzZTA.mjs} +2 -3
  59. package/dist/kysely-type-DR8uzZTA.mjs.map +1 -0
  60. package/dist/{logger-DpJyJvNz.mjs → logger-CxF-Ex5d.mjs} +1 -2
  61. package/dist/{logger-DpJyJvNz.mjs.map → logger-CxF-Ex5d.mjs.map} +1 -1
  62. package/dist/{mock-DMgIygjE.mjs → mock-FPxmnt-y.mjs} +9 -56
  63. package/dist/mock-FPxmnt-y.mjs.map +1 -0
  64. package/dist/{multiline-Cf9ODpr1.mjs → multiline-sfHpTZZK.mjs} +1 -2
  65. package/dist/{multiline-Cf9ODpr1.mjs.map → multiline-sfHpTZZK.mjs.map} +1 -1
  66. package/dist/{package-json-DcQApfPQ.mjs → package-json-8b0O9TlX.mjs} +1 -2
  67. package/dist/{package-json-DcQApfPQ.mjs.map → package-json-8b0O9TlX.mjs.map} +1 -1
  68. package/dist/package-json-Cv2Z-TqQ.mjs +3 -0
  69. package/dist/plugin/builtin/enum-constants/index.d.mts +1 -1
  70. package/dist/plugin/builtin/enum-constants/index.mjs +1 -2
  71. package/dist/plugin/builtin/file-utils/index.d.mts +1 -1
  72. package/dist/plugin/builtin/file-utils/index.mjs +1 -2
  73. package/dist/plugin/builtin/kysely-type/index.d.mts +1 -1
  74. package/dist/plugin/builtin/kysely-type/index.mjs +1 -2
  75. package/dist/plugin/builtin/seed/index.d.mts +1 -1
  76. package/dist/plugin/builtin/seed/index.mjs +1 -2
  77. package/dist/plugin/index.d.mts +4 -5
  78. package/dist/plugin/index.mjs +0 -1
  79. package/dist/plugin/index.mjs.map +1 -1
  80. package/dist/registry-DH4m7eYo.mjs +53 -0
  81. package/dist/registry-DH4m7eYo.mjs.map +1 -0
  82. package/dist/{repl-editor-CJG3sz7A.mjs → repl-editor-DmGr9zMw.mjs} +2 -3
  83. package/dist/{repl-editor-CJG3sz7A.mjs.map → repl-editor-DmGr9zMw.mjs.map} +1 -1
  84. package/dist/{chunk-BkoGK1jX.mjs → rolldown-runtime-DXywRVcq.mjs} +0 -1
  85. package/dist/runtime/authconnection.d.mts +1 -1
  86. package/dist/runtime/authconnection.mjs +1 -2
  87. package/dist/runtime/context.d.mts +1 -1
  88. package/dist/runtime/context.mjs +1 -2
  89. package/dist/runtime/file.d.mts +2 -2
  90. package/dist/runtime/file.mjs +2 -3
  91. package/dist/runtime/globals.d.mts +8 -41
  92. package/dist/runtime/globals.mjs +0 -1
  93. package/dist/runtime/iconv.d.mts +1 -1
  94. package/dist/runtime/iconv.mjs +1 -2
  95. package/dist/runtime/idp.d.mts +1 -1
  96. package/dist/runtime/idp.mjs +1 -2
  97. package/dist/runtime/index.d.mts +8 -8
  98. package/dist/runtime/index.mjs +7 -8
  99. package/dist/runtime/secretmanager.d.mts +1 -1
  100. package/dist/runtime/secretmanager.mjs +1 -2
  101. package/dist/runtime/workflow.d.mts +2 -2
  102. package/dist/runtime/workflow.mjs +1 -2
  103. package/dist/{runtime-C7qTBDD2.mjs → runtime-CY4JvrDj.mjs} +1069 -542
  104. package/dist/runtime-CY4JvrDj.mjs.map +1 -0
  105. package/dist/{schema-1msIhXwA.mjs → schema-Dtw9Orye.mjs} +18 -16
  106. package/dist/schema-Dtw9Orye.mjs.map +1 -0
  107. package/dist/{secret-file-CWzF8rry.mjs → secret-file-VSVGy1V0.mjs} +27 -3
  108. package/dist/{secret-file-CWzF8rry.mjs.map → secret-file-VSVGy1V0.mjs.map} +1 -1
  109. package/dist/{secretmanager-CKLB3wAQ.d.mts → secretmanager-B3n4KHfm.d.mts} +1 -1
  110. package/dist/{secretmanager-B9h-U_8U.mjs → secretmanager-BVxw3ih_.mjs} +2 -3
  111. package/dist/{secretmanager-B9h-U_8U.mjs.map → secretmanager-BVxw3ih_.mjs.map} +1 -1
  112. package/dist/seed/index.mjs +0 -1
  113. package/dist/seed/index.mjs.map +1 -1
  114. package/dist/{seed-BH2FbrPV.mjs → seed-izIEyP3z.mjs} +7 -19
  115. package/dist/seed-izIEyP3z.mjs.map +1 -0
  116. package/dist/service-DCqIWibD.mjs +3 -0
  117. package/dist/{service-DMohAx8a2.mjs → service-DU1mVzri2.mjs} +3 -4
  118. package/dist/{service-DMohAx8a2.mjs.map → service-DU1mVzri2.mjs.map} +1 -1
  119. package/dist/{service-wI3Hvrgx.mjs → service-DjyqbCaJ.mjs} +9 -10
  120. package/dist/service-DjyqbCaJ.mjs.map +1 -0
  121. package/dist/{telemetry-BQbbVo2t.mjs → telemetry-CdqJEzkj.mjs} +2 -3
  122. package/dist/{telemetry-BQbbVo2t.mjs.map → telemetry-CdqJEzkj.mjs.map} +1 -1
  123. package/dist/telemetry-ClwW5ohF.mjs +3 -0
  124. package/dist/test-env-key-D7UkZp99.mjs +75 -0
  125. package/dist/test-env-key-D7UkZp99.mjs.map +1 -0
  126. package/dist/type-source-DH_LH20p.mjs +13 -0
  127. package/dist/type-source-DH_LH20p.mjs.map +1 -0
  128. package/dist/types-74etvaxy.mjs +4 -0
  129. package/dist/{plugin-C_FyVSdl.d.mts → types-BDRml5C3.d.mts} +128 -188
  130. package/dist/{types-CmzfQP_m.mjs → types-BQijbo4m.mjs} +10 -11
  131. package/dist/types-BQijbo4m.mjs.map +1 -0
  132. package/dist/types-BX4q6Mo6.d.mts +339 -0
  133. package/dist/types-BZ7QKVE8.d.mts +21 -0
  134. package/dist/{tailordb-BlBGmQK-.d.mts → types-CdcQh4Z2.d.mts} +92 -242
  135. package/dist/utils/test/index.d.mts +6 -14
  136. package/dist/utils/test/index.mjs +4 -14
  137. package/dist/utils/test/index.mjs.map +1 -1
  138. package/dist/vitest/environment.mjs +1 -2
  139. package/dist/vitest/environment.mjs.map +1 -1
  140. package/dist/vitest/index.d.mts +42 -5
  141. package/dist/vitest/index.mjs +133 -4
  142. package/dist/vitest/index.mjs.map +1 -1
  143. package/dist/vitest/setup.mjs +2 -3
  144. package/dist/vitest/setup.mjs.map +1 -1
  145. package/dist/{workflow--aPbA8Uq.mjs → workflow-BOmaZwwG.mjs} +9 -5
  146. package/dist/workflow-BOmaZwwG.mjs.map +1 -0
  147. package/dist/{workflow-CMamswkK.d.mts → workflow-BVy4XWjS.d.mts} +15 -10
  148. package/dist/workflow.generated-ClEjBYhm.d.mts +671 -0
  149. package/docs/cli/application.md +0 -2
  150. package/docs/cli/completion.md +3 -0
  151. package/docs/cli/crashreport.md +0 -2
  152. package/docs/cli/executor.md +53 -0
  153. package/docs/cli/function.md +1 -1
  154. package/docs/cli/setup.md +35 -33
  155. package/docs/cli/user.md +3 -3
  156. package/docs/cli/workflow.md +157 -20
  157. package/docs/cli/workspace.md +3 -3
  158. package/docs/cli-reference.md +26 -20
  159. package/docs/configuration.md +0 -2
  160. package/docs/github-actions.md +29 -16
  161. package/docs/migration/v2.md +475 -0
  162. package/docs/plugin/custom.md +2 -2
  163. package/docs/plugin/index.md +1 -1
  164. package/docs/runtime.md +4 -4
  165. package/docs/services/aigateway.md +97 -0
  166. package/docs/services/auth.md +31 -14
  167. package/docs/services/executor.md +3 -5
  168. package/docs/services/resolver.md +8 -10
  169. package/docs/services/tailordb.md +15 -13
  170. package/docs/services/workflow.md +17 -19
  171. package/docs/testing.md +75 -56
  172. package/package.json +18 -17
  173. package/dist/actor-J2gJ0eK5.d.mts +0 -24
  174. package/dist/application-76hhIhnJ.mjs +0 -5594
  175. package/dist/application-76hhIhnJ.mjs.map +0 -1
  176. package/dist/application-av2raLs6.mjs +0 -4
  177. package/dist/cli/skills.d.mts +0 -1
  178. package/dist/cli/skills.mjs +0 -22
  179. package/dist/cli/skills.mjs.map +0 -1
  180. package/dist/client-C68VWo4g.mjs +0 -4
  181. package/dist/client-CobIRHl-.mjs.map +0 -1
  182. package/dist/context-s0lxhu8_.mjs.map +0 -1
  183. package/dist/enum-constants-C7DaWeQo.mjs.map +0 -1
  184. package/dist/env-B-g-qgE4.d.mts +0 -7
  185. package/dist/field-C4zdJLW5.mjs.map +0 -1
  186. package/dist/file-B58Dm-2P.mjs.map +0 -1
  187. package/dist/file-utils-BHPxPXmn.mjs.map +0 -1
  188. package/dist/globals-ByrCoDip.mjs.map +0 -1
  189. package/dist/job-BpsFXPbi.mjs +0 -54
  190. package/dist/job-BpsFXPbi.mjs.map +0 -1
  191. package/dist/kysely-type-D1e0Vwkd.mjs.map +0 -1
  192. package/dist/mock-DMgIygjE.mjs.map +0 -1
  193. package/dist/package-json-wzO6nV9O.mjs +0 -4
  194. package/dist/registry-D0uB0OrK.mjs +0 -178
  195. package/dist/registry-D0uB0OrK.mjs.map +0 -1
  196. package/dist/runtime-C7qTBDD2.mjs.map +0 -1
  197. package/dist/schema-1msIhXwA.mjs.map +0 -1
  198. package/dist/seed-BH2FbrPV.mjs.map +0 -1
  199. package/dist/service-BHQIerYh.mjs +0 -4
  200. package/dist/service-wI3Hvrgx.mjs.map +0 -1
  201. package/dist/telemetry-w92bvGdC.mjs +0 -4
  202. package/dist/types-2Be3wSMc.mjs +0 -5
  203. package/dist/types-CmzfQP_m.mjs.map +0 -1
  204. package/dist/workflow--aPbA8Uq.mjs.map +0 -1
  205. package/dist/workflow.generated-Bf1tWylx.d.mts +0 -1416
  206. package/docs/generator/builtin.md +0 -257
  207. package/docs/generator/custom.md +0 -147
  208. package/docs/generator/index.md +0 -66
@@ -1,153 +1,125 @@
1
- import { _ as PluginAttachment, a as TypeSourceInfoEntry, c as TailorAnyDBType, i as TailorDBType, s as TailorAnyDBField } from "./tailordb-BlBGmQK-.mjs";
1
+ import { S as EnumValue, _ as TailorDBTypeMetadata, c as RawRelationConfig, d as TailorAnyDBField, f as TailorAnyDBType, s as PluginAttachment, y as TailorDBTypeParsedSettings } from "./types-CdcQh4Z2.mjs";
2
+ import { C as IdProvider, b as ValueOperand, w as OAuth2Client } from "./types-BX4q6Mo6.mjs";
2
3
 
3
- //#region src/types/auth.generated.d.ts
4
- type AuthInvokerObject = {
5
- /** Auth namespace */namespace: string; /** Machine user name for authentication */
6
- machineUserName: string;
7
- };
8
- type AuthInvoker = AuthInvokerObject;
9
- type OIDC = {
10
- /** Identity provider name */name: string;
11
- kind: "OIDC"; /** OAuth2 client ID */
12
- clientID: string; /** OAuth2 client secret */
13
- clientSecret: {
14
- vaultName: string;
15
- secretKey: string;
16
- }; /** OIDC provider URL */
17
- providerURL: string; /** OIDC issuer URL (defaults to providerURL) */
18
- issuerURL?: string | undefined; /** JWT claim to use as username */
19
- usernameClaim?: string | undefined;
20
- };
21
- type SAML = {
22
- /** Identity provider name */name: string;
23
- kind: "SAML"; /** Enable signing of SAML requests */
24
- enableSignRequest: boolean; /** URL to fetch SAML metadata (mutually exclusive with rawMetadata) */
25
- metadataURL?: string | undefined; /** Raw SAML metadata XML (mutually exclusive with metadataURL) */
26
- rawMetadata?: string | undefined; /** URL to redirect to when SAML ACS receives a response with an empty RelayState. */
27
- defaultRedirectURL?: string | undefined;
28
- };
29
- type IDToken = {
30
- /** Identity provider name */name: string;
31
- kind: "IDToken"; /** ID token provider URL */
32
- providerURL: string; /** Client ID for ID token validation */
33
- clientID: string; /** ID token issuer URL */
34
- issuerURL?: string | undefined; /** JWT claim to use as username */
35
- usernameClaim?: string | undefined;
36
- };
37
- type BuiltinIdP = {
38
- /** Identity provider name */name: string;
39
- kind: "BuiltInIdP"; /** IdP namespace */
40
- namespace: string; /** OAuth2 client name in the IdP */
41
- clientName: string;
42
- };
43
- type IdProvider = OIDC | SAML | IDToken | BuiltinIdP;
44
- type OAuth2ClientInput = {
45
- /** Allowed redirect URIs */redirectURIs: (`https://${string}` | `http://${string}` | `${string}:url` | `${string}:url/${string}`)[]; /** Client description */
46
- description?: string | undefined; /** Allowed OAuth2 grant types */
47
- grantTypes?: ("authorization_code" | "refresh_token")[] | undefined; /** OAuth2 client type */
48
- clientType?: "confidential" | "public" | "browser" | undefined; /** Access token lifetime in seconds (60-86400) */
49
- accessTokenLifetimeSeconds?: number | undefined; /** Refresh token lifetime in seconds (60-604800) */
50
- refreshTokenLifetimeSeconds?: number | undefined; /** Require DPoP (Demonstrating Proof-of-Possession) for token requests */
51
- requireDpop?: boolean | undefined;
52
- };
53
- type OAuth2Client = {
54
- /** Allowed OAuth2 grant types */grantTypes: ("authorization_code" | "refresh_token")[]; /** Allowed redirect URIs */
55
- redirectURIs: (`https://${string}` | `http://${string}` | `${string}:url` | `${string}:url/${string}`)[]; /** Access token lifetime in seconds (60-86400) */
56
- accessTokenLifetimeSeconds: {
57
- seconds: bigint;
58
- nanos: number;
59
- } | undefined; /** Refresh token lifetime in seconds (60-604800) */
60
- refreshTokenLifetimeSeconds: {
61
- seconds: bigint;
62
- nanos: number;
63
- } | undefined; /** Client description */
64
- description?: string | undefined; /** OAuth2 client type */
65
- clientType?: "confidential" | "public" | "browser" | undefined; /** Require DPoP (Demonstrating Proof-of-Possession) for token requests */
66
- requireDpop?: boolean | undefined;
67
- };
68
- type SCIMAuthorization = {
69
- /** SCIM authorization type */type: "oauth2" | "bearer"; /** Bearer token secret (required for bearer type) */
70
- bearerSecret?: {
71
- vaultName: string;
72
- secretKey: string;
73
- } | undefined;
74
- };
75
- type SCIMAttribute = {
76
- /** Attribute data type */type: "string" | "number" | "boolean" | "datetime" | "complex"; /** Attribute name */
77
- name: string; /** Attribute description */
78
- description?: string | undefined; /** Attribute mutability */
79
- mutability?: "readOnly" | "readWrite" | "writeOnly" | undefined; /** Whether the attribute is required */
80
- required?: boolean | undefined; /** Whether the attribute can have multiple values */
81
- multiValued?: boolean | undefined; /** Uniqueness constraint */
82
- uniqueness?: "none" | "server" | "global" | undefined; /** List of canonical values */
83
- canonicalValues?: string[] | null | undefined;
84
- subAttributes?: SCIMAttribute[] | null | undefined;
4
+ //#region src/parser/service/tailordb/types.d.ts
5
+ interface UserDefinedTypeSource {
6
+ filePath: string;
7
+ exportName: string;
8
+ pluginId?: never;
9
+ }
10
+ interface PluginGeneratedTypeSource {
11
+ filePath?: never;
12
+ exportName: string;
13
+ pluginId: string;
14
+ pluginImportPath: string;
15
+ originalFilePath: string;
16
+ originalExportName: string;
17
+ generatedTypeKind?: string;
18
+ pluginConfig?: unknown;
19
+ namespace?: string;
20
+ }
21
+ type TypeSourceInfoEntry = UserDefinedTypeSource | PluginGeneratedTypeSource;
22
+ interface Script {
23
+ expr: string;
24
+ }
25
+ interface OperatorValidateConfig {
26
+ script: Script;
27
+ errorMessage: string;
28
+ }
29
+ interface OperatorFieldHook {
30
+ create?: Script;
31
+ update?: Script;
32
+ }
33
+ interface OperatorFieldConfig {
34
+ type: string;
35
+ required?: boolean;
36
+ description?: string;
37
+ allowedValues?: EnumValue[];
38
+ array?: boolean;
39
+ index?: boolean;
40
+ unique?: boolean;
41
+ vector?: boolean;
42
+ foreignKey?: boolean;
43
+ foreignKeyType?: string;
44
+ foreignKeyField?: string;
45
+ rawRelation?: RawRelationConfig;
46
+ validate?: OperatorValidateConfig[];
47
+ hooks?: OperatorFieldHook;
48
+ serial?: {
49
+ start: number;
50
+ maxValue?: number;
51
+ format?: string;
52
+ };
53
+ scale?: number;
54
+ fields?: Record<string, OperatorFieldConfig>;
55
+ }
56
+ type GqlPermissionAction = "read" | "create" | "update" | "delete" | "aggregate" | "bulkUpsert";
57
+ type StandardPermissionOperator = "eq" | "ne" | "in" | "nin" | "hasAny" | "nhasAny";
58
+ type UserOperand = {
59
+ user: string;
85
60
  };
86
- type SCIMAttributeMapping = {
87
- /** TailorDB field name to map to */tailorDBField: string; /** SCIM attribute path */
88
- scimPath: string;
61
+ type StandardRecordOperand<Update extends boolean = false> = Update extends true ? {
62
+ oldRecord: string;
63
+ } | {
64
+ newRecord: string;
65
+ } : {
66
+ record: string;
89
67
  };
90
- type SCIMResource = {
91
- /** SCIM resource name */name: string; /** TailorDB namespace for the resource */
92
- tailorDBNamespace: string; /** TailorDB type name for the resource */
93
- tailorDBType: string; /** Core SCIM schema definition */
94
- coreSchema: {
95
- /** SCIM resource name */name: string;
96
- attributes: {
97
- type: "string" | "number" | "boolean" | "datetime" | "complex"; /** SCIM resource name */
98
- name: string;
99
- description?: string | undefined;
100
- mutability?: "readOnly" | "readWrite" | "writeOnly" | undefined;
101
- required?: boolean | undefined;
102
- multiValued?: boolean | undefined;
103
- uniqueness?: "none" | "server" | "global" | undefined;
104
- canonicalValues?: string[] | null | undefined;
105
- subAttributes?: any[] | null | undefined;
106
- }[];
107
- }; /** Attribute mapping configuration */
108
- attributeMapping: {
109
- tailorDBField: string;
110
- scimPath: string;
111
- }[];
68
+ type PermissionOperand<Level extends "record" | "gql" = "record" | "gql", Update extends boolean = boolean> = UserOperand | ValueOperand | (Level extends "record" ? StandardRecordOperand<Update> : never);
69
+ type StandardPermissionCondition<Level extends "record" | "gql" = "record" | "gql", Update extends boolean = boolean> = readonly [PermissionOperand<Level, Update>, StandardPermissionOperator, PermissionOperand<Level, Update>];
70
+ type StandardActionPermission<Level extends "record" | "gql" = "record" | "gql", Update extends boolean = boolean> = {
71
+ conditions: readonly StandardPermissionCondition<Level, Update>[];
72
+ description?: string;
73
+ permit: "allow" | "deny";
112
74
  };
113
- type SCIMConfig = {
114
- /** Machine user name for SCIM operations */machineUserName: string; /** SCIM authorization configuration */
115
- authorization: {
116
- type: "oauth2" | "bearer";
117
- bearerSecret?: {
118
- vaultName: string;
119
- secretKey: string;
120
- } | undefined;
121
- }; /** SCIM resource definitions */
122
- resources: {
123
- name: string;
124
- tailorDBNamespace: string;
125
- tailorDBType: string;
126
- coreSchema: {
127
- name: string;
128
- attributes: {
129
- type: "string" | "number" | "boolean" | "datetime" | "complex";
130
- name: string;
131
- description?: string | undefined;
132
- mutability?: "readOnly" | "readWrite" | "writeOnly" | undefined;
133
- required?: boolean | undefined;
134
- multiValued?: boolean | undefined;
135
- uniqueness?: "none" | "server" | "global" | undefined;
136
- canonicalValues?: string[] | null | undefined;
137
- subAttributes?: any[] | null | undefined;
138
- }[];
139
- };
140
- attributeMapping: {
141
- tailorDBField: string;
142
- scimPath: string;
143
- }[];
144
- }[];
75
+ type StandardTailorTypePermission = {
76
+ create: readonly StandardActionPermission<"record", false>[];
77
+ read: readonly StandardActionPermission<"record", false>[];
78
+ update: readonly StandardActionPermission<"record", true>[];
79
+ delete: readonly StandardActionPermission<"record", false>[];
145
80
  };
146
- type TenantProvider = {
147
- /** TailorDB namespace for the tenant type */namespace: string; /** TailorDB type name for tenants */
148
- type: string; /** Field used as the tenant signature */
149
- signatureField: string;
81
+ type StandardGqlPermissionPolicy = {
82
+ conditions: readonly StandardPermissionCondition<"gql">[];
83
+ actions: readonly ["all"] | readonly GqlPermissionAction[];
84
+ permit: "allow" | "deny";
85
+ description?: string;
150
86
  };
87
+ type StandardTailorTypeGqlPermission = readonly StandardGqlPermissionPolicy[];
88
+ interface Permissions {
89
+ record?: StandardTailorTypePermission;
90
+ gql?: StandardTailorTypeGqlPermission;
91
+ }
92
+ interface ParsedField {
93
+ name: string;
94
+ config: OperatorFieldConfig;
95
+ relation?: {
96
+ targetType: string;
97
+ forwardName: string;
98
+ backwardName: string;
99
+ key: string;
100
+ unique: boolean;
101
+ };
102
+ }
103
+ interface ParsedRelationship {
104
+ name: string;
105
+ targetType: string;
106
+ targetField: string;
107
+ sourceField: string;
108
+ isArray: boolean;
109
+ description: string;
110
+ }
111
+ interface TailorDBType {
112
+ name: string;
113
+ pluralForm: string;
114
+ description?: string;
115
+ fields: Record<string, ParsedField>;
116
+ forwardRelationships: Record<string, ParsedRelationship>;
117
+ backwardRelationships: Record<string, ParsedRelationship>;
118
+ settings: TailorDBTypeParsedSettings;
119
+ permissions: Permissions;
120
+ indexes?: TailorDBTypeMetadata["indexes"];
121
+ files?: TailorDBTypeMetadata["files"];
122
+ }
151
123
  //#endregion
152
124
  //#region src/types/executor.generated.d.ts
153
125
  type TailorDBTrigger = {
@@ -184,8 +156,8 @@ type AuthAccessTokenTrigger = {
184
156
  };
185
157
  type FunctionOperation = {
186
158
  kind: "function" | "jobFunction"; /** Function implementation */
187
- body: Function; /** Auth invoker for the function execution */
188
- authInvoker?: string | {
159
+ body: Function; /** Invoker for the function execution */
160
+ invoker?: string | {
189
161
  namespace: string;
190
162
  machineUserName: string;
191
163
  } | undefined;
@@ -194,8 +166,8 @@ type GqlOperation = {
194
166
  kind: "graphql";
195
167
  query: string; /** Target application name for the GraphQL query */
196
168
  appName?: string | undefined; /** Function to compute GraphQL variables */
197
- variables?: Function | undefined; /** Auth invoker for the GraphQL execution */
198
- authInvoker?: string | {
169
+ variables?: Function | undefined; /** Invoker for the GraphQL execution */
170
+ invoker?: string | {
199
171
  namespace: string;
200
172
  machineUserName: string;
201
173
  } | undefined;
@@ -217,7 +189,7 @@ type WorkflowOperation = {
217
189
  args?: Function | {
218
190
  [x: string]: unknown;
219
191
  } | undefined;
220
- authInvoker?: string | {
192
+ invoker?: string | {
221
193
  namespace: string;
222
194
  machineUserName: string;
223
195
  } | undefined;
@@ -291,14 +263,14 @@ type Executor = {
291
263
  args?: Function | {
292
264
  [x: string]: unknown;
293
265
  } | undefined;
294
- authInvoker?: string | {
266
+ invoker?: string | {
295
267
  namespace: string;
296
268
  machineUserName: string;
297
269
  } | undefined;
298
270
  } | {
299
271
  kind: "function" | "jobFunction";
300
272
  body: Function;
301
- authInvoker?: string | {
273
+ invoker?: string | {
302
274
  namespace: string;
303
275
  machineUserName: string;
304
276
  } | undefined;
@@ -307,7 +279,7 @@ type Executor = {
307
279
  query: string;
308
280
  appName?: string | undefined;
309
281
  variables?: Function | undefined;
310
- authInvoker?: string | {
282
+ invoker?: string | {
311
283
  namespace: string;
312
284
  machineUserName: string;
313
285
  } | undefined;
@@ -325,36 +297,6 @@ type Executor = {
325
297
  description?: string | undefined;
326
298
  };
327
299
  //#endregion
328
- //#region src/types/generator-config.generated.d.ts
329
- type BaseGeneratorConfig = ["@tailor-platform/kysely-type", {
330
- distPath: string;
331
- }] | ["@tailor-platform/seed", {
332
- distPath: string;
333
- machineUserName?: string | undefined;
334
- disableIdpUserSync?: {
335
- userToIdp?: boolean | undefined;
336
- idpToUser?: boolean | undefined;
337
- } | undefined;
338
- }] | ["@tailor-platform/enum-constants", {
339
- distPath: string;
340
- }] | ["@tailor-platform/file-utils", {
341
- distPath: string;
342
- }] | {
343
- id: string;
344
- description: string;
345
- dependencies: ("tailordb" | "resolver" | "executor")[];
346
- aggregate: Function;
347
- processType?: Function | undefined;
348
- processResolver?: Function | undefined;
349
- processExecutor?: Function | undefined;
350
- processTailorDBNamespace?: Function | undefined;
351
- processResolverNamespace?: Function | undefined;
352
- };
353
- type BaseGeneratorConfigInput = BaseGeneratorConfig;
354
- //#endregion
355
- //#region src/types/generator-config.d.ts
356
- type GeneratorConfig = BaseGeneratorConfigInput;
357
- //#endregion
358
300
  //#region src/types/resolver.generated.d.ts
359
301
  type Resolver = {
360
302
  /** GraphQL operation type (query or mutation) */operation: "query" | "mutation"; /** Resolver name */
@@ -385,14 +327,14 @@ type Resolver = {
385
327
  [x: string]: any;
386
328
  } | undefined; /** Enable publishing events from this resolver */
387
329
  publishEvents?: boolean | undefined; /** Machine user to execute this resolver as */
388
- authInvoker?: string | {
330
+ invoker?: string | {
389
331
  namespace: string;
390
332
  machineUserName: string;
391
333
  } | undefined;
392
334
  };
393
335
  type ResolverInput = Resolver;
394
336
  //#endregion
395
- //#region src/types/plugin-generation.d.ts
337
+ //#region src/plugin/types.d.ts
396
338
  /**
397
339
  * A single generated file to write to disk.
398
340
  */
@@ -501,8 +443,6 @@ interface ExecutorReadyContext<PluginConfig = unknown> {
501
443
  /** Plugin-level configuration passed via definePlugins() */
502
444
  pluginConfig: PluginConfig;
503
445
  }
504
- //#endregion
505
- //#region src/types/plugin.d.ts
506
446
  type TypeConfigRequired<PluginConfig = unknown> = boolean | ((pluginConfig: PluginConfig | undefined) => boolean);
507
447
  /**
508
448
  * Interface for plugin configuration mapping.
@@ -630,5 +570,5 @@ interface Plugin<TypeConfig = unknown, PluginConfig = unknown> {
630
570
  onExecutorReady?(context: ExecutorReadyContext<PluginConfig>): GeneratorResult | Promise<GeneratorResult>;
631
571
  }
632
572
  //#endregion
633
- export { IdpUserTrigger as A, IdProvider as B, GeneratorConfig as C, ExecutorInput as D, Executor as E, WebhookOperation as F, SCIMAttribute as G, OAuth2ClientInput as H, WorkflowOperation as I, SCIMConfig as J, SCIMAttributeMapping as K, AuthInvoker as L, ResolverExecutedTrigger as M, ScheduleTriggerInput as N, FunctionOperation as O, TailorDBTrigger as P, BuiltinIdP as R, ResolverInput as S, AuthAccessTokenTrigger as T, OIDC as U, OAuth2Client as V, SAML as W, TenantProvider as X, SCIMResource as Y, ResolverNamespaceData as _, PluginExecutorContextBase as a, TailorDBReadyContext as b, PluginGeneratedResolver as c, PluginOutput as d, PluginProcessContext as f, GeneratorResult as g, ExecutorReadyContext as h, PluginExecutorContext as i, IncomingWebhookTrigger as j, GqlOperation as k, PluginGeneratedType as l, TypePluginOutput as m, Plugin as n, PluginGeneratedExecutor as o, TailorDBTypeForPlugin as p, SCIMAuthorization as q, PluginConfigs as r, PluginGeneratedExecutorWithFile as s, NamespacePluginOutput as t, PluginNamespaceProcessContext as u, ResolverReadyContext as v, BaseGeneratorConfig as w, Resolver as x, TailorDBNamespaceData as y, IDToken as z };
634
- //# sourceMappingURL=plugin-C_FyVSdl.d.mts.map
573
+ export { ResolverExecutedTrigger as A, AuthAccessTokenTrigger as C, GqlOperation as D, FunctionOperation as E, TailorDBType as F, TypeSourceInfoEntry as I, TailorDBTrigger as M, WebhookOperation as N, IdpUserTrigger as O, WorkflowOperation as P, ResolverInput as S, ExecutorInput as T, TailorDBNamespaceData as _, PluginConfigs as a, TypePluginOutput as b, PluginGeneratedExecutor as c, PluginGeneratedType as d, PluginNamespaceProcessContext as f, ResolverReadyContext as g, ResolverNamespaceData as h, Plugin as i, ScheduleTriggerInput as j, IncomingWebhookTrigger as k, PluginGeneratedExecutorWithFile as l, PluginProcessContext as m, GeneratorResult as n, PluginExecutorContext as o, PluginOutput as p, NamespacePluginOutput as r, PluginExecutorContextBase as s, ExecutorReadyContext as t, PluginGeneratedResolver as u, TailorDBReadyContext as v, Executor as w, Resolver as x, TailorDBTypeForPlugin as y };
574
+ //# sourceMappingURL=types-BDRml5C3.d.mts.map
@@ -1,5 +1,4 @@
1
-
2
- import { t as mapAllowedValues } from "./field-C4zdJLW5.mjs";
1
+ import { t as mapAllowedValues } from "./field-DOsJCPFa.mjs";
3
2
 
4
3
  //#region src/configure/types/type.ts
5
4
  const regex = {
@@ -36,11 +35,11 @@ function createTailorField(type, options, fields, values, metadata) {
36
35
  /**
37
36
  * Validate a single value (not an array element)
38
37
  * Used internally for array element validation
39
- * @param args - Value, context data, and user
38
+ * @param args - Value, context data, and invoker
40
39
  * @returns Array of validation issues
41
40
  */
42
41
  function validateValue(args) {
43
- const { value, data, user, pathArray } = args;
42
+ const { value, data, invoker, pathArray } = args;
44
43
  const issues = [];
45
44
  const path = pathArray.length > 0 ? pathArray : void 0;
46
45
  switch (type) {
@@ -117,7 +116,7 @@ function createTailorField(type, options, fields, values, metadata) {
117
116
  const result = nestedField._parseInternal({
118
117
  value: fieldValue,
119
118
  data,
120
- user,
119
+ invoker,
121
120
  pathArray: pathArray.concat(fieldName)
122
121
  });
123
122
  if (result.issues) issues.push(...result.issues);
@@ -136,7 +135,7 @@ function createTailorField(type, options, fields, values, metadata) {
136
135
  if (!fn({
137
136
  value,
138
137
  data,
139
- user
138
+ invoker
140
139
  })) issues.push({
141
140
  message,
142
141
  path
@@ -150,7 +149,7 @@ function createTailorField(type, options, fields, values, metadata) {
150
149
  * @returns Parse result with value or issues
151
150
  */
152
151
  function parseInternal(args) {
153
- const { value, data, user, pathArray } = args;
152
+ const { value, data, invoker, pathArray } = args;
154
153
  const issues = [];
155
154
  const path = pathArray.length > 0 ? pathArray : void 0;
156
155
  const isNullOrUndefined = value === null || value === void 0;
@@ -175,7 +174,7 @@ function createTailorField(type, options, fields, values, metadata) {
175
174
  const elementIssues = validateValue({
176
175
  value: elementValue,
177
176
  data,
178
- user,
177
+ invoker,
179
178
  pathArray: pathArray.concat(`[${i}]`)
180
179
  });
181
180
  if (elementIssues.length > 0) issues.push(...elementIssues);
@@ -186,7 +185,7 @@ function createTailorField(type, options, fields, values, metadata) {
186
185
  const valueIssues = validateValue({
187
186
  value,
188
187
  data,
189
- user,
188
+ invoker,
190
189
  pathArray
191
190
  });
192
191
  issues.push(...valueIssues);
@@ -227,7 +226,7 @@ function createTailorField(type, options, fields, values, metadata) {
227
226
  return parseInternal({
228
227
  value: args.value,
229
228
  data: args.data,
230
- user: args.user,
229
+ invoker: args.invoker,
231
230
  pathArray: []
232
231
  });
233
232
  },
@@ -369,4 +368,4 @@ const t = {
369
368
 
370
369
  //#endregion
371
370
  export { t };
372
- //# sourceMappingURL=types-CmzfQP_m.mjs.map
371
+ //# sourceMappingURL=types-BQijbo4m.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types-BQijbo4m.mjs","names":[],"sources":["../src/configure/types/type.ts"],"sourcesContent":["import { type AllowedValues, type AllowedValuesOutput, mapAllowedValues } from \"./field\";\nimport type {\n DefinedFieldMetadata,\n TailorFieldType,\n TailorToTs,\n FieldMetadata,\n FieldOptions,\n FieldOutput,\n TailorField as TailorFieldBase,\n FieldValidateInput,\n} from \"@/configure/types/field.types\";\nimport type { TailorPrincipal } from \"@/runtime/types\";\nimport type { InferFieldsOutput, Prettify } from \"@/types/helpers\";\nimport type { StandardSchemaV1 } from \"@standard-schema/spec\";\n\n// This helper type intentionally uses `any` as a placeholder for unknown field output.\n// oxlint-disable-next-line no-explicit-any\nexport type TailorAnyField = TailorField<any>;\n\n/**\n * Full TailorField interface with builder methods.\n * Extends the minimal structural interface from types/ with fluent API methods.\n */\nexport interface TailorField<\n Defined extends DefinedFieldMetadata = DefinedFieldMetadata,\n // Generic default output type (kept loose on purpose for library ergonomics).\n // oxlint-disable-next-line no-explicit-any\n Output = any,\n M extends FieldMetadata = FieldMetadata,\n T extends TailorFieldType = TailorFieldType,\n> extends TailorFieldBase<Defined, Output, M, T> {\n readonly fields: Record<string, TailorAnyField>;\n _metadata: M;\n\n /**\n * Set a description for the field\n * @param description - The description text\n * @returns The field with updated metadata\n */\n description<CurrentDefined extends Defined>(\n this: CurrentDefined extends { description: unknown }\n ? never\n : TailorField<CurrentDefined, Output>,\n description: string,\n ): TailorField<Prettify<CurrentDefined & { description: true }>, Output>;\n\n /**\n * Set a custom type name for enum or nested types\n * @param typeName - The custom type name\n * @returns The field with updated metadata\n */\n typeName<CurrentDefined extends Defined>(\n this: CurrentDefined extends { typeName: unknown }\n ? never\n : CurrentDefined extends { type: \"enum\" | \"nested\" }\n ? TailorField<CurrentDefined, Output>\n : never,\n typeName: string,\n ): TailorField<Prettify<CurrentDefined & { typeName: true }>, Output>;\n\n /**\n * Add validation functions to the field\n * @param validate - One or more validation functions\n * @returns The field with updated metadata\n */\n validate<CurrentDefined extends Defined>(\n this: CurrentDefined extends { validate: unknown }\n ? never\n : TailorField<CurrentDefined, Output>,\n ...validate: FieldValidateInput<Output>[]\n ): TailorField<Prettify<CurrentDefined & { validate: true }>, Output>;\n\n /**\n * Parse and validate a value against this field's validation rules\n * Returns StandardSchema Result type with success or failure\n * @param args - Value, context data, and invoker\n * @returns Validation result\n */\n parse(args: FieldParseArgs): StandardSchemaV1.Result<Output>;\n\n /**\n * Internal parse method that tracks field path for nested validation\n * @private\n * @param args - Parse arguments\n * @returns Validation result\n */\n _parseInternal(args: FieldParseInternalArgs): StandardSchemaV1.Result<Output>;\n}\n\n/**\n * Internal shape carried by every runtime field for clone-on-write support.\n *\n * `clone()` is intentionally kept off the public {@link TailorField} interface:\n * adding it there would force `TailorDBField` (which has a differently-typed\n * `clone`) to stop being assignable to `TailorField`, breaking the supported\n * `t.object({ field: db.string() })` usage. Every `t.*` and `db.*` field carries\n * a `clone()` at runtime, so the internal cast in `clone()` is safe.\n */\ntype CloneableField = { clone(): TailorAnyField };\n\nconst regex = {\n uuid: /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,\n date: /^(?<year>\\d{4})-(?<month>\\d{2})-(?<day>\\d{2})$/,\n time: /^(?<hour>\\d{2}):(?<minute>\\d{2})$/,\n datetime:\n /^(?<year>\\d{4})-(?<month>\\d{2})-(?<day>\\d{2})T(?<hour>\\d{2}):(?<minute>\\d{2}):(?<second>\\d{2})(.(?<millisec>\\d{3}))?Z$/,\n decimal: /^-?(\\d+\\.?\\d*|\\.\\d+)([eE][+-]?\\d+)?$/,\n} as const;\n\ntype FieldParseArgs = {\n value: unknown;\n data: unknown;\n invoker: TailorPrincipal | null;\n};\n\ntype FieldValidateValueArgs<T extends TailorFieldType> = {\n value: TailorToTs[T];\n data: unknown;\n invoker: TailorPrincipal | null;\n pathArray: string[];\n};\n\ntype FieldParseInternalArgs = {\n // Runtime input is unknown/untyped; we validate and narrow it inside the parser.\n // oxlint-disable-next-line no-explicit-any\n value: any;\n data: unknown;\n invoker: TailorPrincipal | null;\n pathArray: string[];\n};\n\n/**\n * Creates a new TailorField instance.\n * @param type - Field type\n * @param options - Field options\n * @param fields - Nested fields for object-like types\n * @param values - Allowed values for enum-like fields\n * @param metadata - Pre-built metadata to clone from (used by `clone()`); when\n * given, the mutable containers are deep-copied here and `options`/`values` are\n * ignored for metadata construction\n * @returns A new TailorField\n */\nfunction createTailorField<\n const T extends TailorFieldType,\n const TOptions extends FieldOptions,\n const OutputBase = TailorToTs[T],\n>(\n type: T,\n options?: TOptions,\n fields?: Record<string, TailorAnyField>,\n values?: AllowedValues,\n metadata?: FieldMetadata,\n): TailorField<\n { type: T; array: TOptions extends { array: true } ? true : false },\n FieldOutput<OutputBase, TOptions>\n> {\n // When cloning, take ownership of the source metadata and deep-copy its mutable\n // containers (enum value objects and `[fn, message]` validator tuples; validator\n // functions are kept by reference) so no two instances share mutable state.\n const _metadata: FieldMetadata = metadata\n ? {\n ...metadata,\n ...(metadata.allowedValues && {\n allowedValues: metadata.allowedValues.map((v) => ({ ...v })),\n }),\n ...(metadata.validate && {\n validate: metadata.validate.map((v) => (Array.isArray(v) ? ([...v] as typeof v) : v)),\n }),\n }\n : { required: true };\n\n if (!metadata) {\n if (options) {\n if (options.optional === true) {\n _metadata.required = false;\n }\n if (options.array === true) {\n _metadata.array = true;\n }\n }\n if (values) {\n _metadata.allowedValues = mapAllowedValues(values);\n }\n }\n\n /**\n * Validate a single value (not an array element)\n * Used internally for array element validation\n * @param args - Value, context data, and invoker\n * @returns Array of validation issues\n */\n function validateValue(args: FieldValidateValueArgs<T>): StandardSchemaV1.Issue[] {\n const { value, data, invoker, pathArray } = args;\n const issues: StandardSchemaV1.Issue[] = [];\n const path = pathArray.length > 0 ? pathArray : undefined;\n\n // Type-specific validation\n switch (type) {\n case \"string\":\n if (typeof value !== \"string\") {\n issues.push({\n message: `Expected a string: received ${String(value)}`,\n path,\n });\n }\n break;\n\n case \"integer\":\n if (typeof value !== \"number\" || !Number.isInteger(value)) {\n issues.push({\n message: `Expected an integer: received ${String(value)}`,\n path,\n });\n }\n break;\n\n case \"float\":\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n issues.push({\n message: `Expected a number: received ${String(value)}`,\n path,\n });\n }\n break;\n\n case \"boolean\":\n if (typeof value !== \"boolean\") {\n issues.push({\n message: `Expected a boolean: received ${String(value)}`,\n path,\n });\n }\n break;\n\n case \"uuid\":\n if (typeof value !== \"string\" || !regex.uuid.test(value)) {\n issues.push({\n message: `Expected a valid UUID: received ${String(value)}`,\n path,\n });\n }\n break;\n case \"date\":\n if (typeof value !== \"string\" || !regex.date.test(value)) {\n issues.push({\n message: `Expected to match \"yyyy-MM-dd\" format: received ${String(value)}`,\n path,\n });\n }\n break;\n case \"datetime\":\n if (typeof value !== \"string\" || !regex.datetime.test(value)) {\n issues.push({\n message: `Expected to match ISO format: received ${String(value)}`,\n path,\n });\n }\n break;\n case \"time\":\n if (typeof value !== \"string\" || !regex.time.test(value)) {\n issues.push({\n message: `Expected to match \"HH:mm\" format: received ${String(value)}`,\n path,\n });\n }\n break;\n case \"decimal\":\n if (typeof value !== \"string\" || !regex.decimal.test(value)) {\n issues.push({\n message: `Expected a decimal string: received ${String(value)}`,\n path,\n });\n }\n break;\n\n case \"enum\":\n if (field._metadata.allowedValues) {\n const allowedValues = field._metadata.allowedValues.map((v) => v.value);\n if (typeof value !== \"string\" || !allowedValues.includes(value)) {\n issues.push({\n message: `Must be one of [${allowedValues.join(\", \")}]: received ${String(value)}`,\n path,\n });\n }\n }\n break;\n\n case \"nested\":\n // Validate nested object fields\n // runtime value may not match the declared type\n // oxlint-disable typescript/no-unnecessary-condition\n if (\n typeof value !== \"object\" ||\n value === null ||\n Array.isArray(value) ||\n value instanceof Date\n ) {\n // oxlint-enable typescript/no-unnecessary-condition\n issues.push({\n message: `Expected an object: received ${String(value)}`,\n path,\n });\n } else if (Object.keys(field.fields).length > 0) {\n for (const [fieldName, nestedField] of Object.entries(field.fields)) {\n const fieldValue = (value as Record<string, unknown>)[fieldName];\n const result = nestedField._parseInternal({\n value: fieldValue,\n data,\n invoker,\n pathArray: pathArray.concat(fieldName),\n });\n if (result.issues) {\n issues.push(...result.issues);\n }\n }\n }\n break;\n }\n\n // Custom validation functions\n const validateFns = field._metadata.validate;\n if (validateFns && validateFns.length > 0) {\n for (const validateInput of validateFns) {\n const { fn, message } =\n typeof validateInput === \"function\"\n ? { fn: validateInput, message: \"Validation failed\" }\n : { fn: validateInput[0], message: validateInput[1] };\n\n if (!fn({ value, data, invoker })) {\n issues.push({\n message,\n path,\n });\n }\n }\n }\n\n return issues;\n }\n\n /**\n * Internal parse method that tracks field path for nested validation\n * @param args - Parse arguments\n * @returns Parse result with value or issues\n */\n function parseInternal(\n args: FieldParseInternalArgs,\n ): StandardSchemaV1.Result<FieldOutput<OutputBase, TOptions>> {\n const { value, data, invoker, pathArray } = args;\n const issues: StandardSchemaV1.Issue[] = [];\n const path = pathArray.length > 0 ? pathArray : undefined;\n\n // 1. Check required/optional\n const isNullOrUndefined = value === null || value === undefined;\n if (field._metadata.required && isNullOrUndefined) {\n issues.push({\n message: \"Required field is missing\",\n path,\n });\n return { issues };\n }\n\n // If optional and null/undefined, skip further validation and normalize to null\n if (!field._metadata.required && isNullOrUndefined) {\n return { value: value ?? null };\n }\n\n // 2. Check array type\n if (field._metadata.array) {\n if (!Array.isArray(value)) {\n issues.push({\n message: \"Expected an array\",\n path,\n });\n return { issues };\n }\n\n // Validate each array element (without array flag)\n for (let i = 0; i < value.length; i++) {\n const elementValue = value[i];\n const elementPath = pathArray.concat(`[${i}]`);\n\n // Validate element with same type but without array flag\n const elementIssues = validateValue({\n value: elementValue,\n data,\n invoker,\n pathArray: elementPath,\n });\n if (elementIssues.length > 0) {\n issues.push(...elementIssues);\n }\n }\n\n if (issues.length > 0) {\n return { issues };\n }\n return { value: value as FieldOutput<OutputBase, TOptions> };\n }\n\n // 3. Type-specific validation and custom validation\n const valueIssues = validateValue({ value, data, invoker, pathArray });\n issues.push(...valueIssues);\n\n if (issues.length > 0) {\n return { issues };\n }\n\n return { value };\n }\n\n /**\n * Clone the field and apply metadata updates to the clone.\n * The original instance is never mutated, so a field shared across places\n * cannot leak metadata between them.\n * @param metadataUpdates - Metadata properties to overwrite on the clone\n * @returns A new field with the updated metadata\n */\n function cloneWith(metadataUpdates: Partial<FieldMetadata>) {\n const cloned = field.clone();\n Object.assign(cloned._metadata, metadataUpdates);\n return cloned;\n }\n\n const field: TailorField<\n { type: T; array: TOptions extends { array: true } ? true : false },\n FieldOutput<OutputBase, TOptions>\n > &\n CloneableField = {\n type,\n fields: fields ?? {},\n _defined: undefined as unknown as {\n type: T;\n array: TOptions extends { array: true } ? true : false;\n },\n _output: undefined as FieldOutput<OutputBase, TOptions>,\n _metadata,\n\n get metadata() {\n return { ...this._metadata };\n },\n\n description(description: string) {\n // Clone-on-write so a shared field instance never leaks metadata.\n // oxlint-disable-next-line no-explicit-any\n return cloneWith({ description }) as any;\n },\n\n typeName(typeName: string) {\n // Clone-on-write so a shared field instance never leaks metadata.\n // oxlint-disable-next-line no-explicit-any\n return cloneWith({ typeName }) as any;\n },\n\n validate(...validateInputs: FieldValidateInput<FieldOutput<OutputBase, TOptions>>[]) {\n // Clone-on-write so a shared field instance never leaks metadata.\n // oxlint-disable-next-line no-explicit-any\n return cloneWith({ validate: validateInputs }) as any;\n },\n\n parse(args: FieldParseArgs): StandardSchemaV1.Result<FieldOutput<OutputBase, TOptions>> {\n return parseInternal({\n value: args.value,\n data: args.data,\n invoker: args.invoker,\n pathArray: [],\n });\n },\n\n _parseInternal: parseInternal,\n\n clone() {\n // Deep clone nested object fields so the new instance shares no mutable state.\n let clonedFields = fields;\n if (fields) {\n const cloned: Record<string, TailorAnyField> = {};\n for (const [key, nestedField] of Object.entries(fields)) {\n // Both t.* and db.* fields carry clone() at runtime (see CloneableField).\n cloned[key] = (nestedField as TailorAnyField & CloneableField).clone();\n }\n clonedFields = cloned;\n }\n\n // Rebuild via the factory, handing it this field's metadata so the new\n // parseInternal/validateValue closures rebind to the clone and the factory\n // owns the metadata deep-copy.\n // oxlint-disable-next-line no-explicit-any\n return createTailorField(type, options, clonedFields, values, this._metadata) as any;\n },\n };\n\n return field;\n}\n\n/**\n * Create a UUID field for resolver input/output.\n * @param options - Field configuration options\n * @returns A UUID field\n * @example t.uuid()\n */\nfunction uuid<const Opt extends FieldOptions>(options?: Opt) {\n return createTailorField(\"uuid\", options);\n}\n\n/**\n * Create a string field for resolver input/output.\n * @param options - Field configuration options\n * @returns A string field\n * @example t.string()\n * @example t.string({ optional: true })\n * @example t.string({ array: true })\n */\nfunction string<const Opt extends FieldOptions>(options?: Opt) {\n return createTailorField(\"string\", options);\n}\n\n/**\n * Create a boolean field for resolver input/output.\n * @param options - Field configuration options\n * @returns A boolean field\n * @example t.bool()\n */\nfunction bool<const Opt extends FieldOptions>(options?: Opt) {\n return createTailorField(\"boolean\", options);\n}\n\n/**\n * Create an integer field for resolver input/output.\n * @param options - Field configuration options\n * @returns An integer field\n * @example t.int()\n */\nfunction int<const Opt extends FieldOptions>(options?: Opt) {\n return createTailorField(\"integer\", options);\n}\n\n/**\n * Create a float field for resolver input/output.\n * @param options - Field configuration options\n * @returns A float field\n * @example t.float()\n */\nfunction float<const Opt extends FieldOptions>(options?: Opt) {\n return createTailorField(\"float\", options);\n}\n\n/**\n * Create a decimal field for resolver input/output (stored as string for precision).\n * @param options - Field configuration options\n * @returns A decimal field\n * @example t.decimal()\n * @example t.decimal({ optional: true })\n */\nfunction decimal<const Opt extends FieldOptions>(options?: Opt) {\n return createTailorField(\"decimal\", options);\n}\n\n/**\n * Create a date field for resolver input/output.\n * @param options - Field configuration options\n * @returns A date field\n * @example t.date()\n */\nfunction date<const Opt extends FieldOptions>(options?: Opt) {\n return createTailorField(\"date\", options);\n}\n\n/**\n * Create a datetime field for resolver input/output.\n * @param options - Field configuration options\n * @returns A datetime field\n * @example t.datetime()\n */\nfunction datetime<const Opt extends FieldOptions>(options?: Opt) {\n return createTailorField(\"datetime\", options);\n}\n\n/**\n * Create a time field for resolver input/output.\n * @param options - Field configuration options\n * @returns A time field\n * @example t.time()\n */\nfunction time<const Opt extends FieldOptions>(options?: Opt) {\n return createTailorField(\"time\", options);\n}\n\n/**\n * Create an enum field for resolver input/output.\n * @param values - Array of allowed string values\n * @param options - Field configuration options\n * @returns An enum field\n * @example t.enum([\"active\", \"inactive\"])\n */\nfunction _enum<const V extends AllowedValues, const Opt extends FieldOptions>(\n values: V,\n options?: Opt,\n): TailorField<\n { type: \"enum\"; array: Opt extends { array: true } ? true : false },\n FieldOutput<AllowedValuesOutput<V>, Opt>\n> {\n return createTailorField<\"enum\", Opt, AllowedValuesOutput<V>>(\"enum\", options, undefined, values);\n}\n\n/**\n * Create a nested object field for resolver input/output.\n * @param fields - Record of field definitions\n * @param options - Field options (optional, array)\n * @returns A nested object field\n * @example\n * // Single object:\n * output: t.object({ name: t.string(), email: t.string() })\n * @example\n * // Array of objects:\n * items: t.object({ name: t.string() }, { array: true })\n */\nfunction object<const F extends Record<string, TailorAnyField>, const Opt extends FieldOptions>(\n fields: F,\n options?: Opt,\n) {\n const objectField = createTailorField(\"nested\", options, fields) as TailorField<\n { type: \"nested\"; array: Opt extends { array: true } ? true : false },\n FieldOutput<InferFieldsOutput<F>, Opt>\n >;\n return objectField;\n}\n\nexport const t = {\n uuid,\n string,\n bool,\n int,\n float,\n decimal,\n date,\n datetime,\n time,\n enum: _enum,\n object,\n};\n"],"mappings":"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"}