@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.
- package/CHANGELOG.md +161 -0
- package/dist/application-Dtqap5jM.mjs +3 -0
- package/dist/{client-CobIRHl-.mjs → application-XuMWK4eq.mjs} +5869 -25
- package/dist/application-XuMWK4eq.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-D8SJGMpj.mjs → authconnection-D2MhtTN5.mjs} +2 -3
- package/dist/{authconnection-D8SJGMpj.mjs.map → authconnection-D2MhtTN5.mjs.map} +1 -1
- package/dist/{authconnection-BIYzEh2p.d.mts → authconnection-DvUQAjQS.d.mts} +1 -1
- package/dist/{brand-DlnJ375c.mjs → brand-Eo4pLXPJ.mjs} +1 -2
- package/dist/{brand-DlnJ375c.mjs.map → brand-Eo4pLXPJ.mjs.map} +1 -1
- package/dist/cli/index.mjs +241 -237
- package/dist/cli/index.mjs.map +1 -1
- package/dist/cli/lib.d.mts +547 -620
- package/dist/cli/lib.mjs +9 -11
- package/dist/cli/lib.mjs.map +1 -1
- package/dist/completion/zsh-worker.zsh +4108 -0
- package/dist/configure/index.d.mts +9 -7
- package/dist/configure/index.mjs +76 -40
- package/dist/configure/index.mjs.map +1 -1
- package/dist/{context-s0lxhu8_.mjs → context-Bd266-ru.mjs} +2 -3
- package/dist/context-Bd266-ru.mjs.map +1 -0
- package/dist/{context-CUBwSBq4.d.mts → context-C2lEi9uw.d.mts} +7 -28
- package/dist/{crashreport-D1wKBJ8N.mjs → crashreport-BMWcxeSE.mjs} +1 -2
- package/dist/{crashreport-BhD0y14F.mjs → crashreport-DFq-vsU0.mjs} +21 -14
- package/dist/{crashreport-BhD0y14F.mjs.map → crashreport-DFq-vsU0.mjs.map} +1 -1
- 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-Dtf2WPaW.mjs} +1 -2
- package/dist/{errors-EsY4XO6O.mjs.map → errors-Dtf2WPaW.mjs.map} +1 -1
- package/dist/{field-C4zdJLW5.mjs → field-DOsJCPFa.mjs} +1 -2
- package/dist/field-DOsJCPFa.mjs.map +1 -0
- package/dist/{file-B58Dm-2P.mjs → file-BbdFGdMV.mjs} +3 -12
- package/dist/file-BbdFGdMV.mjs.map +1 -0
- package/dist/{file-BzK8z3X-.d.mts → file-Dq3NIt_F.d.mts} +3 -42
- package/dist/{file-utils-BHPxPXmn.mjs → file-utils-CYZnO1pX.mjs} +6 -7
- package/dist/file-utils-CYZnO1pX.mjs.map +1 -0
- package/dist/{globals-ByrCoDip.mjs → globals-Cf0sxIt8.mjs} +53 -5
- package/dist/globals-Cf0sxIt8.mjs.map +1 -0
- package/dist/http-adapter.generated-DFsXDdm5.d.mts +581 -0
- package/dist/{iconv-kwrmd1U_.d.mts → iconv-Co-TOPuH.d.mts} +1 -1
- package/dist/{iconv-DreIffeM.mjs → iconv-D2vi8G36.mjs} +2 -3
- package/dist/{iconv-DreIffeM.mjs.map → iconv-D2vi8G36.mjs.map} +1 -1
- package/dist/{idp-Ch95ag8h.mjs → idp-BDbK5gjm.mjs} +2 -3
- package/dist/{idp-Ch95ag8h.mjs.map → idp-BDbK5gjm.mjs.map} +1 -1
- package/dist/{idp-BlBPtXJ-.d.mts → idp-DrhVrLmV.d.mts} +1 -1
- package/dist/{index-CLxubakC.d.mts → index-BI-_j9Z3.d.mts} +49 -261
- package/dist/{index-CPRnOjjt.d.mts → index-C4JirJH8.d.mts} +2 -2
- package/dist/{index-CQZVJ5SX.d.mts → index-CZfWhr0a.d.mts} +2 -2
- package/dist/{index-DRhMpdnA.d.mts → index-Cg8VKAdN.d.mts} +8 -8
- package/dist/{index-CfRFkXIO.d.mts → index-DYRjoLXD.d.mts} +2 -2
- package/dist/index-lFpcjHPU.d.mts +201 -0
- package/dist/{index-DUupuPhZ.d.mts → index-nW7hE6oE.d.mts} +2 -2
- package/dist/{interceptor-DOqRkCya.mjs → interceptor-D-q1rvRl.mjs} +1 -2
- package/dist/{interceptor-DOqRkCya.mjs.map → interceptor-D-q1rvRl.mjs.map} +1 -1
- package/dist/kysely/index.mjs +0 -1
- package/dist/kysely/index.mjs.map +1 -1
- package/dist/{kysely-type-D1e0Vwkd.mjs → kysely-type-DR8uzZTA.mjs} +2 -3
- package/dist/kysely-type-DR8uzZTA.mjs.map +1 -0
- package/dist/{logger-DpJyJvNz.mjs → logger-CxF-Ex5d.mjs} +1 -2
- package/dist/{logger-DpJyJvNz.mjs.map → logger-CxF-Ex5d.mjs.map} +1 -1
- package/dist/{mock-DMgIygjE.mjs → mock-FPxmnt-y.mjs} +9 -56
- package/dist/mock-FPxmnt-y.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/plugin/builtin/enum-constants/index.d.mts +1 -1
- package/dist/plugin/builtin/enum-constants/index.mjs +1 -2
- package/dist/plugin/builtin/file-utils/index.d.mts +1 -1
- package/dist/plugin/builtin/file-utils/index.mjs +1 -2
- package/dist/plugin/builtin/kysely-type/index.d.mts +1 -1
- package/dist/plugin/builtin/kysely-type/index.mjs +1 -2
- package/dist/plugin/builtin/seed/index.d.mts +1 -1
- package/dist/plugin/builtin/seed/index.mjs +1 -2
- package/dist/plugin/index.d.mts +4 -5
- package/dist/plugin/index.mjs +0 -1
- package/dist/plugin/index.mjs.map +1 -1
- package/dist/registry-DH4m7eYo.mjs +53 -0
- package/dist/registry-DH4m7eYo.mjs.map +1 -0
- package/dist/{repl-editor-CJG3sz7A.mjs → repl-editor-DmGr9zMw.mjs} +2 -3
- package/dist/{repl-editor-CJG3sz7A.mjs.map → repl-editor-DmGr9zMw.mjs.map} +1 -1
- package/dist/{chunk-BkoGK1jX.mjs → rolldown-runtime-DXywRVcq.mjs} +0 -1
- package/dist/runtime/authconnection.d.mts +1 -1
- package/dist/runtime/authconnection.mjs +1 -2
- package/dist/runtime/context.d.mts +1 -1
- package/dist/runtime/context.mjs +1 -2
- package/dist/runtime/file.d.mts +2 -2
- package/dist/runtime/file.mjs +2 -3
- package/dist/runtime/globals.d.mts +8 -41
- package/dist/runtime/globals.mjs +0 -1
- package/dist/runtime/iconv.d.mts +1 -1
- package/dist/runtime/iconv.mjs +1 -2
- package/dist/runtime/idp.d.mts +1 -1
- package/dist/runtime/idp.mjs +1 -2
- package/dist/runtime/index.d.mts +8 -8
- package/dist/runtime/index.mjs +7 -8
- package/dist/runtime/secretmanager.d.mts +1 -1
- package/dist/runtime/secretmanager.mjs +1 -2
- package/dist/runtime/workflow.d.mts +2 -2
- package/dist/runtime/workflow.mjs +1 -2
- package/dist/{runtime-C7qTBDD2.mjs → runtime-CY4JvrDj.mjs} +1069 -542
- package/dist/runtime-CY4JvrDj.mjs.map +1 -0
- package/dist/{schema-1msIhXwA.mjs → schema-Dtw9Orye.mjs} +18 -16
- package/dist/schema-Dtw9Orye.mjs.map +1 -0
- package/dist/{secret-file-CWzF8rry.mjs → secret-file-VSVGy1V0.mjs} +27 -3
- package/dist/{secret-file-CWzF8rry.mjs.map → secret-file-VSVGy1V0.mjs.map} +1 -1
- package/dist/{secretmanager-CKLB3wAQ.d.mts → secretmanager-B3n4KHfm.d.mts} +1 -1
- package/dist/{secretmanager-B9h-U_8U.mjs → secretmanager-BVxw3ih_.mjs} +2 -3
- package/dist/{secretmanager-B9h-U_8U.mjs.map → secretmanager-BVxw3ih_.mjs.map} +1 -1
- package/dist/seed/index.mjs +0 -1
- package/dist/seed/index.mjs.map +1 -1
- package/dist/{seed-BH2FbrPV.mjs → seed-izIEyP3z.mjs} +7 -19
- package/dist/seed-izIEyP3z.mjs.map +1 -0
- package/dist/service-DCqIWibD.mjs +3 -0
- package/dist/{service-DMohAx8a2.mjs → service-DU1mVzri2.mjs} +3 -4
- package/dist/{service-DMohAx8a2.mjs.map → service-DU1mVzri2.mjs.map} +1 -1
- package/dist/{service-wI3Hvrgx.mjs → service-DjyqbCaJ.mjs} +9 -10
- package/dist/service-DjyqbCaJ.mjs.map +1 -0
- package/dist/{telemetry-BQbbVo2t.mjs → telemetry-CdqJEzkj.mjs} +2 -3
- package/dist/{telemetry-BQbbVo2t.mjs.map → telemetry-CdqJEzkj.mjs.map} +1 -1
- package/dist/telemetry-ClwW5ohF.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-74etvaxy.mjs +4 -0
- package/dist/{plugin-C_FyVSdl.d.mts → types-BDRml5C3.d.mts} +128 -188
- package/dist/{types-CmzfQP_m.mjs → types-BQijbo4m.mjs} +10 -11
- package/dist/types-BQijbo4m.mjs.map +1 -0
- package/dist/types-BX4q6Mo6.d.mts +339 -0
- package/dist/types-BZ7QKVE8.d.mts +21 -0
- package/dist/{tailordb-BlBGmQK-.d.mts → types-CdcQh4Z2.d.mts} +92 -242
- package/dist/utils/test/index.d.mts +6 -14
- package/dist/utils/test/index.mjs +4 -14
- package/dist/utils/test/index.mjs.map +1 -1
- package/dist/vitest/environment.mjs +1 -2
- package/dist/vitest/environment.mjs.map +1 -1
- package/dist/vitest/index.d.mts +42 -5
- package/dist/vitest/index.mjs +133 -4
- package/dist/vitest/index.mjs.map +1 -1
- package/dist/vitest/setup.mjs +2 -3
- package/dist/vitest/setup.mjs.map +1 -1
- package/dist/{workflow--aPbA8Uq.mjs → workflow-BOmaZwwG.mjs} +9 -5
- package/dist/workflow-BOmaZwwG.mjs.map +1 -0
- package/dist/{workflow-CMamswkK.d.mts → workflow-BVy4XWjS.d.mts} +15 -10
- package/dist/workflow.generated-ClEjBYhm.d.mts +671 -0
- package/docs/cli/application.md +0 -2
- package/docs/cli/completion.md +3 -0
- package/docs/cli/crashreport.md +0 -2
- package/docs/cli/executor.md +53 -0
- package/docs/cli/function.md +1 -1
- package/docs/cli/setup.md +35 -33
- package/docs/cli/user.md +3 -3
- package/docs/cli/workflow.md +157 -20
- package/docs/cli/workspace.md +3 -3
- package/docs/cli-reference.md +26 -20
- package/docs/configuration.md +0 -2
- package/docs/github-actions.md +29 -16
- package/docs/migration/v2.md +475 -0
- package/docs/plugin/custom.md +2 -2
- package/docs/plugin/index.md +1 -1
- package/docs/runtime.md +4 -4
- package/docs/services/aigateway.md +97 -0
- package/docs/services/auth.md +31 -14
- package/docs/services/executor.md +3 -5
- package/docs/services/resolver.md +8 -10
- package/docs/services/tailordb.md +15 -13
- package/docs/services/workflow.md +17 -19
- package/docs/testing.md +75 -56
- package/package.json +18 -17
- package/dist/actor-J2gJ0eK5.d.mts +0 -24
- package/dist/application-76hhIhnJ.mjs +0 -5594
- package/dist/application-76hhIhnJ.mjs.map +0 -1
- package/dist/application-av2raLs6.mjs +0 -4
- 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-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/field-C4zdJLW5.mjs.map +0 -1
- package/dist/file-B58Dm-2P.mjs.map +0 -1
- package/dist/file-utils-BHPxPXmn.mjs.map +0 -1
- package/dist/globals-ByrCoDip.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/mock-DMgIygjE.mjs.map +0 -1
- package/dist/package-json-wzO6nV9O.mjs +0 -4
- 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/seed-BH2FbrPV.mjs.map +0 -1
- package/dist/service-BHQIerYh.mjs +0 -4
- package/dist/service-wI3Hvrgx.mjs.map +0 -1
- package/dist/telemetry-w92bvGdC.mjs +0 -4
- package/dist/types-2Be3wSMc.mjs +0 -5
- package/dist/types-CmzfQP_m.mjs.map +0 -1
- package/dist/workflow--aPbA8Uq.mjs.map +0 -1
- 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
|
@@ -1,153 +1,125 @@
|
|
|
1
|
-
import {
|
|
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
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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
|
|
87
|
-
|
|
88
|
-
|
|
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
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
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
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
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
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
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; /**
|
|
188
|
-
|
|
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; /**
|
|
198
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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 {
|
|
634
|
-
//# sourceMappingURL=
|
|
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
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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-
|
|
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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"}
|