@tailor-platform/sdk 1.79.0 → 1.80.1
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 +38 -0
- package/dist/{application-fjqb-Gh8.mjs → application-C1d52JP9.mjs} +241 -222
- package/dist/application-C1d52JP9.mjs.map +1 -0
- package/dist/application-Nlh9BHQf.mjs +3 -0
- package/dist/cli/commands/tailordb/migrate/bundler.d.mts +3 -2
- package/dist/cli/index.mjs +17 -21
- package/dist/cli/index.mjs.map +1 -1
- package/dist/cli/lib.mjs +3 -6
- package/dist/cli/lib.mjs.map +1 -1
- package/dist/cli/tsconfig-paths-hook.d.mts +1 -0
- package/dist/cli/tsconfig-paths-hook.mjs +153 -0
- package/dist/completion/zsh-worker.zsh +1 -1
- package/dist/configure/config/types.d.mts +5 -1
- package/dist/configure/index.d.mts +1 -1
- package/dist/configure/services/auth/types.d.mts +18 -23
- package/dist/configure/services/idp/index.d.mts +1 -1
- package/dist/configure/services/idp/types.d.mts +5 -1
- package/dist/configure/services/index.d.mts +1 -1
- package/dist/{globals-B-n_3uYu.mjs → globals-DVJ8RVvm.mjs} +8 -1
- package/dist/{globals-B-n_3uYu.mjs.map → globals-DVJ8RVvm.mjs.map} +1 -1
- package/dist/{runtime-CjMeYuPA.mjs → register-typescript-runtime-Bd4bcLbW.mjs} +398 -123
- package/dist/register-typescript-runtime-Bd4bcLbW.mjs.map +1 -0
- package/dist/{service-D12iQGcS.mjs → service-CDPatibu.mjs} +31 -17
- package/dist/service-CDPatibu.mjs.map +1 -0
- package/dist/service-Cg7Qibit.mjs +3 -0
- package/dist/vitest/environment.mjs +1 -1
- package/dist/vitest/setup.mjs +1 -1
- package/docs/cli/application.md +6 -0
- package/docs/cli-reference.md +21 -21
- package/docs/configuration.md +2 -0
- package/docs/services/auth.md +2 -2
- package/docs/testing.md +10 -4
- package/package.json +8 -7
- package/dist/application-BB6BlUfk.mjs +0 -3
- package/dist/application-fjqb-Gh8.mjs.map +0 -1
- package/dist/runtime-CjMeYuPA.mjs.map +0 -1
- package/dist/service-CghpdV-9.mjs +0 -3
- package/dist/service-D12iQGcS.mjs.map +0 -1
|
@@ -11,34 +11,48 @@ const functionSchema = z.custom((val) => typeof val === "function");
|
|
|
11
11
|
//#endregion
|
|
12
12
|
//#region src/cli/services/file-loader.ts
|
|
13
13
|
const DEFAULT_IGNORE_PATTERNS = ["**/*.test.ts", "**/*.spec.ts"];
|
|
14
|
+
const warnedFallbacks = /* @__PURE__ */ new Set();
|
|
14
15
|
/**
|
|
15
16
|
* Load files matching the given patterns, excluding files that match ignore patterns.
|
|
16
17
|
* By default, test files (*.test.ts, *.spec.ts) are excluded unless ignores is explicitly specified.
|
|
17
18
|
* @param config - Configuration with files patterns and optional ignores patterns
|
|
19
|
+
* @param baseDir - Directory relative patterns are resolved against
|
|
18
20
|
* @returns Array of absolute file paths
|
|
19
21
|
*/
|
|
20
|
-
function loadFilesWithIgnores(config) {
|
|
21
|
-
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
}
|
|
22
|
+
function loadFilesWithIgnores(config, baseDir) {
|
|
23
|
+
if (config.files.length === 0) return [];
|
|
24
|
+
const resolved = resolveFiles(config, baseDir);
|
|
25
|
+
const allPatternsAbsolute = config.files.every((pattern) => path.isAbsolute(pattern));
|
|
26
|
+
if (resolved.matchedAnyPattern || baseDir === process.cwd() || allPatternsAbsolute) return resolved.files;
|
|
27
|
+
const fallbackKey = `${baseDir}\0${config.files.join("\0")}`;
|
|
28
|
+
if (!warnedFallbacks.has(fallbackKey)) {
|
|
29
|
+
warnedFallbacks.add(fallbackKey);
|
|
30
|
+
logger.warn(`No files matched "${config.files.join(", ")}" relative to "${baseDir}"; falling back to process.cwd(). Update this config's file patterns to be relative to its own directory before v2, when this fallback will be removed.`);
|
|
30
31
|
}
|
|
32
|
+
return resolveFiles(config, process.cwd()).files;
|
|
33
|
+
}
|
|
34
|
+
function resolveFiles(config, baseDir) {
|
|
35
|
+
const isDefaultIgnores = config.ignores === void 0;
|
|
36
|
+
const ignorePatterns = config.ignores ?? DEFAULT_IGNORE_PATTERNS;
|
|
37
|
+
const resolvedIgnorePatterns = isDefaultIgnores ? ignorePatterns : ignorePatterns.map((ignorePattern) => path.resolve(baseDir, ignorePattern));
|
|
31
38
|
const files = [];
|
|
39
|
+
let matchedAnyPattern = false;
|
|
32
40
|
for (const pattern of config.files) {
|
|
33
|
-
const absolutePattern = path.resolve(
|
|
41
|
+
const absolutePattern = path.resolve(baseDir, pattern);
|
|
34
42
|
try {
|
|
35
|
-
const
|
|
43
|
+
const matchedFiles = fs.globSync(absolutePattern);
|
|
44
|
+
if (matchedFiles.length > 0) matchedAnyPattern = true;
|
|
45
|
+
const filteredFiles = matchedFiles.filter((file) => !resolvedIgnorePatterns.some((ignorePattern) => path.matchesGlob(file, ignorePattern)));
|
|
36
46
|
files.push(...filteredFiles);
|
|
37
47
|
} catch (error) {
|
|
48
|
+
matchedAnyPattern = true;
|
|
38
49
|
logger.warn(`Failed to glob pattern "${pattern}": ${String(error)}`);
|
|
39
50
|
}
|
|
40
51
|
}
|
|
41
|
-
return
|
|
52
|
+
return {
|
|
53
|
+
files,
|
|
54
|
+
matchedAnyPattern
|
|
55
|
+
};
|
|
42
56
|
}
|
|
43
57
|
|
|
44
58
|
//#endregion
|
|
@@ -256,7 +270,7 @@ const ValueOperandSchema = z.union([
|
|
|
256
270
|
z.array(z.boolean())
|
|
257
271
|
]);
|
|
258
272
|
const MachineUserSchema = z.object({
|
|
259
|
-
attributes: z.record(z.string(), ValueOperandSchema).optional(),
|
|
273
|
+
attributes: z.record(z.string(), ValueOperandSchema.nullish()).transform((attributes) => Object.fromEntries(Object.entries(attributes).filter((entry) => entry[1] != null))).optional(),
|
|
260
274
|
attributeList: z.array(z.uuid()).optional()
|
|
261
275
|
});
|
|
262
276
|
const BeforeLoginHookSchema = z.object({
|
|
@@ -397,7 +411,7 @@ const ExecutorSchema = z.object({
|
|
|
397
411
|
* @returns A new ExecutorService instance
|
|
398
412
|
*/
|
|
399
413
|
function createExecutorService(params) {
|
|
400
|
-
const { config } = params;
|
|
414
|
+
const { config, baseDir } = params;
|
|
401
415
|
const executors = {};
|
|
402
416
|
const pluginExecutors = [];
|
|
403
417
|
let loadPromise;
|
|
@@ -430,7 +444,7 @@ function createExecutorService(params) {
|
|
|
430
444
|
loadExecutors: async () => {
|
|
431
445
|
if (!loadPromise) loadPromise = (async () => {
|
|
432
446
|
if (config.files.length === 0) return;
|
|
433
|
-
const executorFiles = loadFilesWithIgnores(config);
|
|
447
|
+
const executorFiles = loadFilesWithIgnores(config, baseDir);
|
|
434
448
|
logger.newline();
|
|
435
449
|
logger.log(`Found ${styles.highlight(executorFiles.length.toString())} executor files`);
|
|
436
450
|
await Promise.all(executorFiles.map((executorFile) => loadExecutorForFile(executorFile)));
|
|
@@ -473,4 +487,4 @@ function assertUniqueExecutorNames(executors) {
|
|
|
473
487
|
|
|
474
488
|
//#endregion
|
|
475
489
|
export { TailorFieldSchema as a, AuthInvokerSchema as i, ExecutorSchema as n, loadFilesWithIgnores as o, AuthConfigSchema as r, functionSchema as s, createExecutorService as t };
|
|
476
|
-
//# sourceMappingURL=service-
|
|
490
|
+
//# sourceMappingURL=service-CDPatibu.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-CDPatibu.mjs","names":[],"sources":["../src/parser/service/common.ts","../src/cli/services/file-loader.ts","../src/parser/service/auth-connection/schema.ts","../src/parser/service/field/schema.ts","../src/parser/service/auth/schema.ts","../src/parser/service/executor/schema.ts","../src/cli/services/executor/service.ts"],"sourcesContent":["import { z } from \"zod\";\n\n// Use `z.custom` instead of `z.function`, since `z.function` changes `toString` representation.\n// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\nexport const functionSchema = z.custom<Function>((val) => typeof val === \"function\");\n","import * as fs from \"node:fs\";\nimport * as path from \"pathe\";\nimport { logger } from \"#/cli/shared/logger\";\n\nexport interface FileLoadConfig {\n files: string[];\n ignores?: string[];\n}\n\nconst DEFAULT_IGNORE_PATTERNS = [\"**/*.test.ts\", \"**/*.spec.ts\"];\n\n// loadFilesWithIgnores is called once per service/bundler, so a single\n// generate/apply run can call it multiple times for the same baseDir (once\n// per resolver/executor/tailordb/etc. config sharing that directory). Track\n// which (baseDir, patterns) pairs have already warned so each one only warns\n// once per run — keyed by patterns too, since different services sharing a\n// baseDir can have different `files` patterns each needing their own warning.\nconst warnedFallbacks = new Set<string>();\n\n/**\n * Load files matching the given patterns, excluding files that match ignore patterns.\n * By default, test files (*.test.ts, *.spec.ts) are excluded unless ignores is explicitly specified.\n * @param config - Configuration with files patterns and optional ignores patterns\n * @param baseDir - Directory relative patterns are resolved against\n * @returns Array of absolute file paths\n */\nexport function loadFilesWithIgnores(config: FileLoadConfig, baseDir: string): string[] {\n if (config.files.length === 0) {\n return [];\n }\n\n const resolved = resolveFiles(config, baseDir);\n const allPatternsAbsolute = config.files.every((pattern) => path.isAbsolute(pattern));\n if (resolved.matchedAnyPattern || baseDir === process.cwd() || allPatternsAbsolute) {\n return resolved.files;\n }\n\n // v1 compatibility fallback: pre-existing configs may have relative\n // patterns written against the invocation cwd rather than baseDir. Only\n // triggers when baseDir's patterns matched nothing at all (not merely\n // \"matched, but every hit got filtered out by ignores\") — otherwise this\n // fallback would reintroduce the same cross-app file bleed this baseDir\n // resolution is meant to prevent. Also skipped when every pattern is\n // already absolute, since baseDir can't change an absolute pattern's\n // resolution — re-running against cwd would just repeat the same glob.\n // Remove this fallback in v2, once such configs are expected to have\n // migrated.\n const fallbackKey = `${baseDir}\\0${config.files.join(\"\\0\")}`;\n if (!warnedFallbacks.has(fallbackKey)) {\n warnedFallbacks.add(fallbackKey);\n logger.warn(\n `No files matched \"${config.files.join(\", \")}\" relative to \"${baseDir}\"; falling back to ` +\n `process.cwd(). Update this config's file patterns to be relative to its own directory ` +\n `before v2, when this fallback will be removed.`,\n );\n }\n return resolveFiles(config, process.cwd()).files;\n}\n\ninterface ResolvedFiles {\n files: string[];\n /** Whether any `files` pattern matched anything under baseDir, before ignore filtering. */\n matchedAnyPattern: boolean;\n}\n\nfunction resolveFiles(config: FileLoadConfig, baseDir: string): ResolvedFiles {\n // Use user-provided patterns if specified, otherwise use defaults. Default\n // patterns are left unanchored (\"**/*.test.ts\") so they match a test file\n // regardless of which directory a `files` pattern's matches actually came\n // from — this matters when a pattern is absolute or otherwise escapes\n // baseDir. User-provided patterns are baseDir-relative, matching `files`.\n const isDefaultIgnores = config.ignores === undefined;\n const ignorePatterns = config.ignores ?? DEFAULT_IGNORE_PATTERNS;\n const resolvedIgnorePatterns = isDefaultIgnores\n ? ignorePatterns\n : ignorePatterns.map((ignorePattern) => path.resolve(baseDir, ignorePattern));\n\n const files: string[] = [];\n let matchedAnyPattern = false;\n for (const pattern of config.files) {\n const absolutePattern = path.resolve(baseDir, pattern);\n try {\n const matchedFiles = fs.globSync(absolutePattern);\n if (matchedFiles.length > 0) {\n matchedAnyPattern = true;\n }\n // Filter out ignored files\n const filteredFiles = matchedFiles.filter(\n (file) =>\n !resolvedIgnorePatterns.some((ignorePattern) => path.matchesGlob(file, ignorePattern)),\n );\n files.push(...filteredFiles);\n } catch (error) {\n // A glob failure means we don't know whether baseDir has matching\n // files, not that it has none — treat it as a match so it can't\n // trigger the v1 compatibility fallback below.\n matchedAnyPattern = true;\n logger.warn(`Failed to glob pattern \"${pattern}\": ${String(error)}`);\n }\n }\n\n return { files, matchedAnyPattern };\n}\n","import { z } from \"zod\";\n\nexport const AuthConnectionOAuth2ConfigSchema = z.object({\n providerUrl: z.string().describe(\"OAuth2 provider URL\"),\n issuerUrl: z.string().describe(\"OAuth2 issuer URL\"),\n clientId: z.string().describe(\"OAuth2 client ID\"),\n clientSecret: z.string().describe(\"OAuth2 client secret\"),\n authUrl: z.string().optional().describe(\"OAuth2 authorization endpoint override\"),\n tokenUrl: z.string().optional().describe(\"OAuth2 token endpoint override\"),\n});\n\nexport const AuthConnectionConfigSchema = z\n .object({\n type: z.literal(\"oauth2\").describe(\"Connection type\"),\n })\n .and(AuthConnectionOAuth2ConfigSchema);\n","import { z } from \"zod\";\nimport { functionSchema } from \"../common\";\n\nconst TailorFieldTypeSchema = z.enum([\n \"uuid\",\n \"string\",\n \"boolean\",\n \"integer\",\n \"float\",\n \"decimal\",\n \"enum\",\n \"date\",\n \"datetime\",\n \"time\",\n \"nested\",\n]);\n\nconst AllowedValueSchema = z.object({\n value: z.string().describe(\"The allowed value\"),\n description: z.string().optional().describe(\"Description of the allowed value\"),\n});\n\nconst FieldMetadataSchema = z.object({\n required: z.boolean().optional().describe(\"Whether the field is required\"),\n array: z.boolean().optional().describe(\"Whether the field is an array\"),\n description: z.string().optional().describe(\"Field description\"),\n allowedValues: z.array(AllowedValueSchema).optional().describe(\"Allowed values for enum fields\"),\n hooks: z\n .object({\n create: functionSchema.optional().describe(\"Hook function called on creation\"),\n update: functionSchema.optional().describe(\"Hook function called on update\"),\n })\n .optional()\n .describe(\"Lifecycle hooks\"),\n typeName: z.string().optional().describe(\"Type name for nested or enum fields\"),\n});\n\nexport const TailorFieldSchema = z.object({\n type: TailorFieldTypeSchema.describe(\"Field data type\"),\n metadata: FieldMetadataSchema.describe(\"Field metadata configuration\"),\n get fields() {\n return z.record(z.string(), TailorFieldSchema);\n },\n});\n","import { z } from \"zod\";\nimport { AuthConnectionConfigSchema } from \"#/parser/service/auth-connection/index\";\nimport { TailorFieldSchema } from \"#/parser/service/field/schema\";\nimport type { ValueOperand } from \"#/configure/services/auth/types\";\n\nexport const AuthInvokerObjectSchema = z.object({\n namespace: z.string().describe(\"Auth namespace\"),\n machineUserName: z.string().describe(\"Machine user name for authentication\"),\n});\n\nexport const AuthInvokerSchema = z.union([\n z.string().describe(\"Machine user name (namespace auto-resolved from auth service)\"),\n AuthInvokerObjectSchema,\n]);\n\nconst secretValueSchema = z.object({\n vaultName: z.string().describe(\"Vault name containing the secret\"),\n secretKey: z.string().describe(\"Key of the secret in the vault\"),\n});\n\nexport const OIDCSchema = z.object({\n name: z.string().describe(\"Identity provider name\"),\n kind: z.literal(\"OIDC\"),\n clientID: z.string().describe(\"OAuth2 client ID\"),\n clientSecret: secretValueSchema.describe(\"OAuth2 client secret\"),\n providerURL: z.string().describe(\"OIDC provider URL\"),\n issuerURL: z.string().optional().describe(\"OIDC issuer URL (defaults to providerURL)\"),\n usernameClaim: z.string().optional().describe(\"JWT claim to use as username\"),\n});\n\nexport const SAMLSchema = z\n .object({\n name: z.string().describe(\"Identity provider name\"),\n kind: z.literal(\"SAML\"),\n enableSignRequest: z.boolean().default(false).describe(\"Enable signing of SAML requests\"),\n metadataURL: z\n .string()\n .optional()\n .describe(\"URL to fetch SAML metadata (mutually exclusive with rawMetadata)\"),\n rawMetadata: z\n .string()\n .optional()\n .describe(\"Raw SAML metadata XML (mutually exclusive with metadataURL)\"),\n defaultRedirectURL: z\n .string()\n .optional()\n .describe(\"URL to redirect to when SAML ACS receives a response with an empty RelayState.\"),\n })\n .refine((value) => {\n const hasMetadata = value.metadataURL !== undefined;\n const hasRaw = value.rawMetadata !== undefined;\n return hasMetadata !== hasRaw;\n }, \"Provide either metadataURL or rawMetadata\");\n\nexport const IDTokenSchema = z.object({\n name: z.string().describe(\"Identity provider name\"),\n kind: z.literal(\"IDToken\"),\n providerURL: z.string().describe(\"ID token provider URL\"),\n issuerURL: z.string().optional().describe(\"ID token issuer URL\"),\n clientID: z.string().describe(\"Client ID for ID token validation\"),\n usernameClaim: z.string().optional().describe(\"JWT claim to use as username\"),\n});\n\nexport const BuiltinIdPSchema = z.object({\n name: z.string().describe(\"Identity provider name\"),\n kind: z.literal(\"BuiltInIdP\"),\n namespace: z.string().describe(\"IdP namespace\"),\n clientName: z.string().describe(\"OAuth2 client name in the IdP\"),\n});\n\nexport const IdProviderSchema = z.discriminatedUnion(\"kind\", [\n OIDCSchema,\n SAMLSchema,\n IDTokenSchema,\n BuiltinIdPSchema,\n]);\n\nexport const OAuth2ClientGrantTypeSchema = z\n .union([z.literal(\"authorization_code\"), z.literal(\"refresh_token\")])\n .describe(\"OAuth2 grant type\");\n\nexport const OAuth2ClientSchema = z\n .object({\n description: z.string().optional().describe(\"Client description\"),\n grantTypes: z\n .array(OAuth2ClientGrantTypeSchema)\n .default([\"authorization_code\", \"refresh_token\"])\n .describe(\"Allowed OAuth2 grant types\"),\n redirectURIs: z\n .array(\n z.union([\n z.templateLiteral([\"https://\", z.string()]),\n z.templateLiteral([\"http://\", z.string()]),\n z.templateLiteral([z.string(), \":url\"]),\n z.templateLiteral([z.string(), \":url/\", z.string()]),\n ]),\n )\n .describe(\"Allowed redirect URIs\"),\n clientType: z\n .union([z.literal(\"confidential\"), z.literal(\"public\"), z.literal(\"browser\")])\n .optional()\n .describe(\"OAuth2 client type\"),\n accessTokenLifetimeSeconds: z\n .number()\n .int()\n .min(60, \"Minimum access token lifetime is 60 seconds\")\n .max(86400, \"Maximum access token lifetime is 1 day (86400 seconds)\")\n .optional()\n .describe(\"Access token lifetime in seconds (60-86400)\")\n .transform((val) => (val ? { seconds: BigInt(val), nanos: 0 } : undefined)),\n refreshTokenLifetimeSeconds: z\n .number()\n .int()\n .min(60, \"Minimum refresh token lifetime is 60 seconds\")\n .max(604800, \"Maximum refresh token lifetime is 7 days (604800 seconds)\")\n .optional()\n .describe(\"Refresh token lifetime in seconds (60-604800)\")\n .transform((val) => (val ? { seconds: BigInt(val), nanos: 0 } : undefined)),\n requireDpop: z\n .boolean()\n .optional()\n .describe(\"Require DPoP (Demonstrating Proof-of-Possession) for token requests\"),\n })\n .refine((data) => !(data.clientType === \"browser\" && data.requireDpop === true), {\n message: \"requireDpop cannot be set to true for browser clients as they don't support DPoP\",\n path: [\"requireDpop\"],\n });\n\nexport const SCIMAuthorizationSchema = z.object({\n type: z.union([z.literal(\"oauth2\"), z.literal(\"bearer\")]).describe(\"SCIM authorization type\"),\n bearerSecret: secretValueSchema\n .optional()\n .describe(\"Bearer token secret (required for bearer type)\"),\n});\n\nexport const SCIMAttributeTypeSchema = z\n .union([\n z.literal(\"string\"),\n z.literal(\"number\"),\n z.literal(\"boolean\"),\n z.literal(\"datetime\"),\n z.literal(\"complex\"),\n ])\n .describe(\"SCIM attribute data type\");\n\nexport const SCIMAttributeSchema = z.object({\n type: SCIMAttributeTypeSchema.describe(\"Attribute data type\"),\n name: z.string().describe(\"Attribute name\"),\n description: z.string().optional().describe(\"Attribute description\"),\n mutability: z\n .union([z.literal(\"readOnly\"), z.literal(\"readWrite\"), z.literal(\"writeOnly\")])\n .optional()\n .describe(\"Attribute mutability\"),\n required: z.boolean().optional().describe(\"Whether the attribute is required\"),\n multiValued: z.boolean().optional().describe(\"Whether the attribute can have multiple values\"),\n uniqueness: z\n .union([z.literal(\"none\"), z.literal(\"server\"), z.literal(\"global\")])\n .optional()\n .describe(\"Uniqueness constraint\"),\n canonicalValues: z.array(z.string()).nullable().optional().describe(\"List of canonical values\"),\n get subAttributes() {\n return z.array(SCIMAttributeSchema).nullable().optional();\n },\n});\n\nconst SCIMSchemaSchema = z.object({\n name: z.string().describe(\"SCIM schema name\"),\n attributes: z.array(SCIMAttributeSchema).describe(\"Schema attributes\"),\n});\n\nexport const SCIMAttributeMappingSchema = z.object({\n tailorDBField: z.string().describe(\"TailorDB field name to map to\"),\n scimPath: z.string().describe(\"SCIM attribute path\"),\n});\n\nexport const SCIMResourceSchema = z.object({\n name: z.string().describe(\"SCIM resource name\"),\n tailorDBNamespace: z.string().describe(\"TailorDB namespace for the resource\"),\n tailorDBType: z.string().describe(\"TailorDB type name for the resource\"),\n coreSchema: SCIMSchemaSchema.describe(\"Core SCIM schema definition\"),\n attributeMapping: z.array(SCIMAttributeMappingSchema).describe(\"Attribute mapping configuration\"),\n});\n\nexport const SCIMSchema = z.object({\n machineUserName: z.string().describe(\"Machine user name for SCIM operations\"),\n authorization: SCIMAuthorizationSchema.describe(\"SCIM authorization configuration\"),\n resources: z.array(SCIMResourceSchema).describe(\"SCIM resource definitions\"),\n});\n\nexport const TenantProviderSchema = z.object({\n namespace: z.string().describe(\"TailorDB namespace for the tenant type\"),\n type: z.string().describe(\"TailorDB type name for tenants\"),\n signatureField: z.string().describe(\"Field used as the tenant signature\"),\n});\n\nconst UserProfileSchema = z.object({\n namespace: z.string().optional().describe(\"TailorDB namespace where the user type is defined\"),\n // FIXME: improve TailorDBInstance schema validation\n type: z.object({\n name: z.string(),\n fields: z.any(),\n metadata: z.any(),\n hooks: z.any(),\n validate: z.any(),\n features: z.any(),\n indexes: z.any(),\n files: z.any(),\n permission: z.any(),\n gqlPermission: z.any(),\n _output: z.any(),\n }),\n usernameField: z.string(),\n attributes: z.record(z.string(), z.literal(true)).optional(),\n attributeList: z.array(z.string()).optional(),\n});\n\nconst ValueOperandSchema: z.ZodType<ValueOperand> = z.union([\n z.string(),\n z.boolean(),\n z.array(z.string()),\n z.array(z.boolean()),\n]);\n\nconst MachineUserSchema = z.object({\n // null/undefined values mean \"attribute not set\" and are dropped so\n // downstream (deploy, drift diff) only ever sees concrete values.\n attributes: z\n .record(z.string(), ValueOperandSchema.nullish())\n .transform(\n (attributes): Record<string, ValueOperand> =>\n Object.fromEntries(\n Object.entries(attributes).filter(\n (entry): entry is [string, ValueOperand] => entry[1] != null,\n ),\n ),\n )\n .optional(),\n attributeList: z.array(z.uuid()).optional(),\n});\n\nconst BeforeLoginHookSchema = z.object({\n handler: z.function(),\n invoker: z.string(),\n});\n\nconst AuthConfigBaseSchema = z.object({\n name: z.string().describe(\"Auth service name\"),\n hooks: z\n .object({\n beforeLogin: BeforeLoginHookSchema.optional().describe(\"Before login auth hook\"),\n })\n .optional()\n .describe(\"Auth hooks\"),\n machineUsers: z\n .record(z.string(), MachineUserSchema)\n .optional()\n .describe(\"Machine user definitions\"),\n oauth2Clients: z\n .record(z.string(), OAuth2ClientSchema)\n .optional()\n .describe(\"OAuth2 client definitions\"),\n idProvider: IdProviderSchema.optional().describe(\"Identity provider configuration\"),\n scim: SCIMSchema.optional().describe(\"SCIM provisioning configuration\"),\n tenantProvider: TenantProviderSchema.optional().describe(\"Multi-tenant provider configuration\"),\n connections: z\n .record(z.string(), AuthConnectionConfigSchema)\n .optional()\n .describe(\"Auth connection definitions for external OAuth2 providers\"),\n publishSessionEvents: z.boolean().optional().describe(\"Enable publishing session events\"),\n});\n\nexport const AuthConfigSchema = z\n .xor(\n [\n AuthConfigBaseSchema.extend({\n userProfile: UserProfileSchema.optional().describe(\"User profile configuration\"),\n machineUserAttributes: z.undefined().optional(),\n }),\n AuthConfigBaseSchema.extend({\n userProfile: z.undefined().optional(),\n machineUserAttributes: z\n .record(z.string(), TailorFieldSchema)\n .describe(\"Machine user attribute fields\"),\n }),\n ],\n {\n error: (iss) => {\n // zod may report error codes not covered by its type definitions\n // oxlint-disable-next-line typescript/no-unnecessary-condition\n if (iss.code !== \"invalid_union\") return undefined;\n // zod may report error codes not covered by its type definitions\n // oxlint-disable-next-line typescript/no-unnecessary-condition\n if (iss.errors.length < 2) return undefined;\n const isOnlyMutexViolation = iss.errors.every((variantErrors) =>\n variantErrors.every(\n (e) =>\n e.path.length === 1 &&\n (e.path[0] === \"userProfile\" || e.path[0] === \"machineUserAttributes\"),\n ),\n );\n if (isOnlyMutexViolation) {\n return \"Specify either `userProfile` or `machineUserAttributes`, not both.\";\n }\n return undefined;\n },\n },\n )\n .brand(\"AuthConfig\");\n","import { z } from \"zod\";\nimport { AuthInvokerSchema } from \"../auth\";\nimport { functionSchema } from \"../common\";\n\nexport const TailorDBTriggerSchema = z.object({\n kind: z.literal(\"tailordb\").describe(\"TailorDB record event trigger\"),\n events: z\n .array(\n z.enum([\n \"tailordb.type_record.created\",\n \"tailordb.type_record.updated\",\n \"tailordb.type_record.deleted\",\n ]),\n )\n .min(1)\n .transform((arr) => [...new Set(arr)])\n .describe(\"TailorDB event types to trigger on\"),\n typeName: z.string().describe(\"TailorDB type name to watch for events\"),\n condition: functionSchema.optional().describe(\"Condition function to filter events\"),\n});\n\nexport const ResolverExecutedTriggerSchema = z.object({\n kind: z.literal(\"resolverExecuted\"),\n resolverName: z.string().describe(\"Name of the resolver to trigger on\"),\n condition: functionSchema.optional().describe(\"Condition function to filter events\"),\n});\n\nexport const ScheduleTriggerSchema = z.object({\n kind: z.literal(\"schedule\"),\n cron: z.string().describe(\"CRON expression for the schedule\"),\n timezone: z\n .string()\n .optional()\n .default(\"UTC\")\n .describe(\"Timezone for the CRON schedule (default: UTC)\"),\n});\n\nexport const IncomingWebhookTriggerResponseSchema = z.object({\n body: functionSchema.optional().describe(\"Function returning the response body\"),\n statusCode: z.number().int().optional().describe(\"HTTP status code for the response\"),\n});\n\nexport const IncomingWebhookTriggerSchema = z.object({\n kind: z.literal(\"incomingWebhook\"),\n response: IncomingWebhookTriggerResponseSchema.optional().describe(\"Response configuration\"),\n});\n\nexport const IdpUserTriggerSchema = z.object({\n kind: z.literal(\"idpUser\").describe(\"IdP user event trigger\"),\n events: z\n .array(z.enum([\"idp.user.created\", \"idp.user.updated\", \"idp.user.deleted\"]))\n .min(1)\n .transform((arr) => [...new Set(arr)])\n .describe(\"IdP user event types to trigger on\"),\n idp: z\n .string()\n .optional()\n .describe(\n \"IdP namespace name to subscribe to. If omitted, the project's only IdP is used; throws when multiple IdPs exist.\",\n ),\n});\n\nexport const AuthAccessTokenTriggerSchema = z.object({\n kind: z.literal(\"authAccessToken\").describe(\"Auth access token event trigger\"),\n events: z\n .array(\n z.enum([\n \"auth.access_token.issued\",\n \"auth.access_token.refreshed\",\n \"auth.access_token.revoked\",\n ]),\n )\n .min(1)\n .transform((arr) => [...new Set(arr)])\n .describe(\"Auth access token event types to trigger on\"),\n});\n\nexport const TriggerSchema = z.discriminatedUnion(\"kind\", [\n TailorDBTriggerSchema,\n ResolverExecutedTriggerSchema,\n ScheduleTriggerSchema,\n IncomingWebhookTriggerSchema,\n IdpUserTriggerSchema,\n AuthAccessTokenTriggerSchema,\n]);\n\nexport const FunctionOperationSchema = z.object({\n kind: z.enum([\"function\", \"jobFunction\"]),\n body: functionSchema.describe(\"Function implementation\"),\n authInvoker: AuthInvokerSchema.optional().describe(\"Auth invoker for the function execution\"),\n});\n\nexport const GqlOperationSchema = z.object({\n kind: z.literal(\"graphql\"),\n appName: z.string().optional().describe(\"Target application name for the GraphQL query\"),\n query: z.preprocess((val) => String(val), z.string().describe(\"GraphQL query string\")),\n variables: functionSchema.optional().describe(\"Function to compute GraphQL variables\"),\n authInvoker: AuthInvokerSchema.optional().describe(\"Auth invoker for the GraphQL execution\"),\n});\n\nexport const WebhookOperationSchema = z.object({\n kind: z.literal(\"webhook\"),\n url: functionSchema.describe(\"Function returning the webhook URL\"),\n requestBody: functionSchema.optional().describe(\"Function to compute the request body\"),\n headers: z\n .record(z.string(), z.union([z.string(), z.object({ vault: z.string(), key: z.string() })]))\n .optional()\n .describe(\"HTTP headers for the webhook request\"),\n});\n\nexport const WorkflowOperationSchema = z.preprocess(\n (val) => {\n if (\n val == null ||\n typeof val !== \"object\" ||\n !(\"workflow\" in val) ||\n typeof val.workflow !== \"object\" ||\n val.workflow === null\n ) {\n return val;\n }\n\n const { workflow, ...rest } = val as { workflow: { name: string } };\n return { ...rest, workflowName: workflow.name };\n },\n z.object({\n kind: z.literal(\"workflow\"),\n workflowName: z.string().describe(\"Name of the workflow to execute\"),\n args: z\n .union([z.record(z.string(), z.unknown()), functionSchema])\n .optional()\n .describe(\"Arguments to pass to the workflow\"),\n authInvoker: AuthInvokerSchema.optional().describe(\"Auth invoker for the workflow execution\"),\n }),\n);\n\nconst OperationSchema = z.union([\n FunctionOperationSchema,\n GqlOperationSchema,\n WebhookOperationSchema,\n WorkflowOperationSchema,\n]);\n\nexport const ExecutorSchema = z.object({\n name: z.string().describe(\"Executor name\"),\n description: z.string().optional().describe(\"Executor description\"),\n disabled: z.boolean().optional().default(false).describe(\"Whether the executor is disabled\"),\n trigger: TriggerSchema.describe(\"Event trigger configuration\"),\n operation: OperationSchema.describe(\"Operation to execute when triggered\"),\n});\n","import { pathToFileURL } from \"node:url\";\nimport * as path from \"pathe\";\nimport { loadFilesWithIgnores } from \"#/cli/services/file-loader\";\nimport { logger, styles } from \"#/cli/shared/logger\";\nimport { ExecutorSchema } from \"#/parser/service/executor/index\";\nimport { isSdkBranded } from \"#/utils/brand\";\nimport type { ExecutorServiceConfig } from \"#/configure/config/types\";\nimport type { Executor } from \"#/types/executor.generated\";\n\n/**\n * Information about a plugin-generated executor converted to Executor format\n */\nexport interface PluginExecutor {\n /** The executor in standard Executor format */\n executor: Executor;\n /** Plugin ID that generated this executor */\n pluginId: string;\n /** Source type name (for type-attached executors) */\n sourceTypeName?: string;\n}\n\nexport type ExecutorService = {\n readonly config: ExecutorServiceConfig;\n readonly executors: Record<string, Executor>;\n readonly pluginExecutors: ReadonlyArray<PluginExecutor>;\n loadExecutors: () => Promise<Record<string, Executor> | undefined>;\n loadPluginExecutorFiles: (filePaths: string[]) => Promise<void>;\n};\n\n/**\n * Parameters for creating an ExecutorService\n */\nexport interface CreateExecutorServiceParams {\n /** The executor service configuration */\n config: ExecutorServiceConfig;\n /** Directory the config's file patterns are resolved against */\n baseDir: string;\n}\n\n/**\n * Creates a new ExecutorService instance.\n * @param params - Parameters for creating the service\n * @returns A new ExecutorService instance\n */\nexport function createExecutorService(params: CreateExecutorServiceParams): ExecutorService {\n const { config, baseDir } = params;\n const executors: Record<string, Executor> = {};\n const pluginExecutors: PluginExecutor[] = [];\n let loadPromise: Promise<Record<string, Executor> | undefined> | undefined;\n\n const loadExecutorForFile = async (executorFile: string): Promise<Executor | undefined> => {\n try {\n const executorModule = await import(pathToFileURL(executorFile).href);\n const result = ExecutorSchema.safeParse(executorModule.default);\n if (result.success) {\n const relativePath = path.relative(process.cwd(), executorFile);\n logger.log(\n `Executor: ${styles.successBright(`\"${result.data.name}\"`)} loaded from ${styles.path(relativePath)}`,\n );\n executors[executorFile] = result.data;\n return result.data;\n }\n if (isSdkBranded(executorModule.default, \"executor\")) {\n throw result.error;\n }\n } catch (error) {\n const relativePath = path.relative(process.cwd(), executorFile);\n logger.error(`Failed to load executor from ${styles.bold(relativePath)}`);\n logger.error(String(error));\n throw error;\n }\n return undefined;\n };\n\n return {\n config,\n get executors() {\n return executors;\n },\n get pluginExecutors() {\n return pluginExecutors;\n },\n loadExecutors: async () => {\n if (!loadPromise) {\n loadPromise = (async () => {\n if (config.files.length === 0) {\n return undefined;\n }\n\n const executorFiles = loadFilesWithIgnores(config, baseDir);\n\n logger.newline();\n logger.log(`Found ${styles.highlight(executorFiles.length.toString())} executor files`);\n\n await Promise.all(executorFiles.map((executorFile) => loadExecutorForFile(executorFile)));\n assertUniqueExecutorNames(executors);\n return executors;\n })();\n }\n return loadPromise;\n },\n loadPluginExecutorFiles: async (filePaths: string[]) => {\n if (filePaths.length === 0) return;\n\n logger.newline();\n logger.log(\n `Loading ${styles.highlight(filePaths.length.toString())} plugin-generated executor files`,\n );\n\n for (const filePath of filePaths) {\n const executor = await loadExecutorForFile(filePath);\n if (executor) {\n // Track as plugin executor (plugin ID is extracted from file path)\n // File path format: .tailor-sdk/plugin/{executor-name}.ts\n pluginExecutors.push({\n executor,\n pluginId: \"plugin-generated\",\n sourceTypeName: undefined,\n });\n }\n }\n assertUniqueExecutorNames(executors);\n },\n };\n}\n\n/**\n * Assert that every loaded executor has a unique name.\n * Executors are stored by source file, so two files declaring the same\n * `name` would otherwise silently share a single bundle cache entry.\n * @param executors - Loaded executors keyed by source file\n */\nfunction assertUniqueExecutorNames(executors: Record<string, Executor>): void {\n const seenNames = new Map<string, string>();\n for (const [file, executor] of Object.entries(executors)) {\n const relativePath = path.relative(process.cwd(), file);\n const existing = seenNames.get(executor.name);\n if (existing) {\n throw new Error(\n `Duplicate executor name \"${executor.name}\" found:\\n` +\n ` - ${existing}\\n` +\n ` - ${relativePath}\\n` +\n `Each executor must have a unique name.`,\n );\n }\n seenNames.set(executor.name, relativePath);\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as cleanupPlatformGlobals, r as installPlatformGlobals, t as RUNTIME_FLAG_KEY } from "../globals-
|
|
1
|
+
import { n as cleanupPlatformGlobals, r as installPlatformGlobals, t as RUNTIME_FLAG_KEY } from "../globals-DVJ8RVvm.mjs";
|
|
2
2
|
import * as globals from "globals";
|
|
3
3
|
|
|
4
4
|
//#region src/vitest/environment.ts
|
package/dist/vitest/setup.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as RUNTIME_FLAG_KEY } from "../globals-
|
|
1
|
+
import { t as RUNTIME_FLAG_KEY } from "../globals-DVJ8RVvm.mjs";
|
|
2
2
|
import { t as mockSecretmanager } from "../secretmanager-IY4UvinW.mjs";
|
|
3
3
|
import { pathToFileURL } from "node:url";
|
|
4
4
|
import { afterEach, beforeAll, beforeEach } from "vitest";
|
package/docs/cli/application.md
CHANGED
|
@@ -133,6 +133,8 @@ tailor-sdk deploy --config apps/buyer/tailor.config.ts,apps/supplier/tailor.conf
|
|
|
133
133
|
|
|
134
134
|
When multiple configs are provided, `deploy` creates or updates all configured services first, then updates the applications. This lets one application reference resources owned by another config with `external: true` during the same deploy.
|
|
135
135
|
|
|
136
|
+
Each config's `files` and `ignores` patterns (see [Service Configuration](../configuration.md#service-configuration)) resolve relative to that config's own directory, not the directory you ran `deploy` from. For example, `apps/buyer/tailor.config.ts` declaring `files: ["db/**/*.ts"]` loads files from `apps/buyer/db/`, independent of where `apps/supplier/tailor.config.ts`'s patterns resolve. If a config's relative patterns match nothing under its own directory, the SDK falls back to the invocation directory and logs a warning (see [Service Configuration](../configuration.md#service-configuration) for details).
|
|
137
|
+
|
|
136
138
|
**Migration Handling:**
|
|
137
139
|
|
|
138
140
|
When migrations are configured (`db.tailordb.migration` in config), the `deploy` command automatically:
|
|
@@ -144,6 +146,10 @@ When migrations are configured (`db.tailordb.migration` in config), the `deploy`
|
|
|
144
146
|
|
|
145
147
|
See [Automatic Migration Execution](../services/tailordb-migration.md#automatic-migration-execution) for details on automatic migration execution.
|
|
146
148
|
|
|
149
|
+
**Concurrent Deploys:**
|
|
150
|
+
|
|
151
|
+
Deploys that target the same workspace and application from the same project directory are serialized while secrets and auth connections are updated: one deploy proceeds and the other waits for it to finish. A deploy that cannot proceed within 5 minutes fails with an error, which normally means another deploy is still running. If a previous deploy was interrupted, the next deploy recovers automatically within about a minute. Deploys to different workspaces or applications are not affected.
|
|
152
|
+
|
|
147
153
|
**Schema Check:**
|
|
148
154
|
|
|
149
155
|
By default, `deploy` performs two verification steps:
|
package/docs/cli-reference.md
CHANGED
|
@@ -65,27 +65,27 @@ tailor-sdk deploy --env-file .env --env-file .env.production
|
|
|
65
65
|
|
|
66
66
|
You can use environment variables to configure workspace and authentication:
|
|
67
67
|
|
|
68
|
-
| Variable | Description
|
|
69
|
-
| -------------------------------------------- |
|
|
70
|
-
| `TAILOR_PLATFORM_WORKSPACE_ID` | Workspace ID for deployment commands
|
|
71
|
-
| `TAILOR_PLATFORM_ORGANIZATION_ID` | Organization ID for organization commands
|
|
72
|
-
| `TAILOR_PLATFORM_FOLDER_ID` | Folder ID for folder commands
|
|
73
|
-
| `TAILOR_PLATFORM_TOKEN` | Authentication token (alternative to `login`)
|
|
74
|
-
| `TAILOR_TOKEN` | **Deprecated.** Use `TAILOR_PLATFORM_TOKEN` instead
|
|
75
|
-
| `TAILOR_PLATFORM_PROFILE` | Workspace profile name
|
|
76
|
-
| `TAILOR_PLATFORM_SDK_CONFIG_PATH` | Path to SDK config file
|
|
77
|
-
| `TAILOR_PLATFORM_SDK_DTS_PATH` | Output path for generated `tailor.d.ts` type definition file
|
|
78
|
-
| `TAILOR_PLATFORM_MACHINE_USER_CLIENT_ID` | Client ID for `login --machine-user`
|
|
79
|
-
| `TAILOR_PLATFORM_MACHINE_USER_CLIENT_SECRET` | Client secret for `login --machine-user`
|
|
80
|
-
| `TAILOR_PLATFORM_MACHINE_USER_NAME` | Default machine user name for `query`, `workflow start`, `function test-run`, `machineuser token`
|
|
81
|
-
| `TAILOR_PLATFORM_URL` | Platform API base URL. Saved into profiles created with `profile create --platform-url`
|
|
82
|
-
| `TAILOR_PLATFORM_OAUTH2_CLIENT_ID` | OAuth2 client ID for user login. Saved into profiles created with `profile create --oauth2-client-id`
|
|
83
|
-
| `TAILOR_PLATFORM_CONSOLE_URL` | Console base URL. Saved into profiles created with `profile create --console-url`
|
|
84
|
-
| `TAILOR_BUNDLE_CONCURRENCY` | Max concurrent bundle workers for `deploy` (resolvers/executors/workflows). Defaults to CPU count
|
|
85
|
-
| `TAILOR_APPLY_CONCURRENCY` | Max concurrent
|
|
86
|
-
| `VISUAL` / `EDITOR` | Preferred editor for commands that open files (e.g., `vim`, `code`, `nano`)
|
|
87
|
-
| `TAILOR_CRASH_REPORTS_LOCAL` | Local crash log writing: `on` (default) or `off`
|
|
88
|
-
| `TAILOR_CRASH_REPORTS_REMOTE` | Automatic crash report submission: `off` (default) or `on`
|
|
68
|
+
| Variable | Description |
|
|
69
|
+
| -------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
|
|
70
|
+
| `TAILOR_PLATFORM_WORKSPACE_ID` | Workspace ID for deployment commands |
|
|
71
|
+
| `TAILOR_PLATFORM_ORGANIZATION_ID` | Organization ID for organization commands |
|
|
72
|
+
| `TAILOR_PLATFORM_FOLDER_ID` | Folder ID for folder commands |
|
|
73
|
+
| `TAILOR_PLATFORM_TOKEN` | Authentication token (alternative to `login`) |
|
|
74
|
+
| `TAILOR_TOKEN` | **Deprecated.** Use `TAILOR_PLATFORM_TOKEN` instead |
|
|
75
|
+
| `TAILOR_PLATFORM_PROFILE` | Workspace profile name |
|
|
76
|
+
| `TAILOR_PLATFORM_SDK_CONFIG_PATH` | Path to SDK config file |
|
|
77
|
+
| `TAILOR_PLATFORM_SDK_DTS_PATH` | Output path for generated `tailor.d.ts` type definition file |
|
|
78
|
+
| `TAILOR_PLATFORM_MACHINE_USER_CLIENT_ID` | Client ID for `login --machine-user` |
|
|
79
|
+
| `TAILOR_PLATFORM_MACHINE_USER_CLIENT_SECRET` | Client secret for `login --machine-user` |
|
|
80
|
+
| `TAILOR_PLATFORM_MACHINE_USER_NAME` | Default machine user name for `query`, `workflow start`, `function test-run`, `machineuser token` |
|
|
81
|
+
| `TAILOR_PLATFORM_URL` | Platform API base URL. Saved into profiles created with `profile create --platform-url` |
|
|
82
|
+
| `TAILOR_PLATFORM_OAUTH2_CLIENT_ID` | OAuth2 client ID for user login. Saved into profiles created with `profile create --oauth2-client-id` |
|
|
83
|
+
| `TAILOR_PLATFORM_CONSOLE_URL` | Console base URL. Saved into profiles created with `profile create --console-url` |
|
|
84
|
+
| `TAILOR_BUNDLE_CONCURRENCY` | Max concurrent bundle workers for `deploy` (resolvers/executors/workflows). Defaults to CPU count |
|
|
85
|
+
| `TAILOR_APPLY_CONCURRENCY` | Max concurrent platform RPCs during `apply`/`deploy`. Defaults to 16 |
|
|
86
|
+
| `VISUAL` / `EDITOR` | Preferred editor for commands that open files (e.g., `vim`, `code`, `nano`) |
|
|
87
|
+
| `TAILOR_CRASH_REPORTS_LOCAL` | Local crash log writing: `on` (default) or `off` |
|
|
88
|
+
| `TAILOR_CRASH_REPORTS_REMOTE` | Automatic crash report submission: `off` (default) or `on` |
|
|
89
89
|
|
|
90
90
|
### Authentication Token Priority
|
|
91
91
|
|
package/docs/configuration.md
CHANGED
|
@@ -82,6 +82,8 @@ export default defineConfig({
|
|
|
82
82
|
|
|
83
83
|
**ignores**: Glob patterns to exclude files. Optional. By default, `**/*.test.ts` and `**/*.spec.ts` are automatically ignored. If you explicitly specify `ignores`, the default patterns will not be applied. Use `ignores: []` to include all files including test files.
|
|
84
84
|
|
|
85
|
+
**Pattern resolution**: `files` and `ignores` patterns are resolved relative to the directory of the `tailor.config.ts` file that declares them, not the directory you run the command from. This matters when deploying [multiple configs](./cli/application.md#deploy) together — each config's patterns only match files under its own directory. If a config's _relative_ patterns match nothing under its own directory, the SDK falls back to resolving them from the directory you ran the command from and logs a warning (this fallback doesn't apply to already-absolute patterns, since their resolution can't change). Update such patterns to be relative to the config's own directory — this fallback will be removed in v2.
|
|
86
|
+
|
|
85
87
|
### External Resources
|
|
86
88
|
|
|
87
89
|
You can reference resources managed by Terraform or other SDK projects to include them in your application's subgraph. External resources are not deployed by this project but can be used for shared access across multiple applications.
|
package/docs/services/auth.md
CHANGED
|
@@ -107,7 +107,7 @@ userProfile: {
|
|
|
107
107
|
|
|
108
108
|
**usernameField**: The field in the TailorDB type used as the username. This field must have a unique constraint (`.unique()`) since it is used to uniquely identify users.
|
|
109
109
|
|
|
110
|
-
**attributes**: Specifies which fields from the TailorDB type are used as user attributes. Set to `true` to enable a field.
|
|
110
|
+
**attributes**: Specifies which fields from the TailorDB type are used as user attributes. Set to `true` to enable a field. Machine user definitions must assign values to attributes derived from required fields; attributes derived from optional fields may be omitted (see [Machine Users](#machine-users)). Only fields with ValueOperand types (string, boolean, string[], boolean[]) can be used as attributes. The `id` field and datetime/date/time types are excluded.
|
|
111
111
|
|
|
112
112
|
## Attribute List
|
|
113
113
|
|
|
@@ -200,7 +200,7 @@ machineUsers: {
|
|
|
200
200
|
},
|
|
201
201
|
```
|
|
202
202
|
|
|
203
|
-
**attributes**: Values for attributes enabled in `userProfile.attributes` (or
|
|
203
|
+
**attributes**: Values for attributes enabled in `userProfile.attributes` (or fields defined in `machineUserAttributes` when `userProfile` is omitted). Attribute keys mirror the field's optionality: attributes derived from required fields must be set, while attributes derived from optional fields may be omitted. Setting an attribute to `null` or `undefined` is equivalent to omitting it — the attribute is deployed as unset. These values are accessible via `user.attributes`:
|
|
204
204
|
|
|
205
205
|
```typescript
|
|
206
206
|
// In a resolver
|
package/docs/testing.md
CHANGED
|
@@ -414,15 +414,17 @@ Stub the global `tailordb.Client` and queue raw query results in order. Best for
|
|
|
414
414
|
|
|
415
415
|
> If you are running with the [`tailor-runtime` Vitest environment](#runtime-environment-emulation-beta), acquire `using db = mockTailordb()` to install and drive the mock `tailordb.Client` instead of `vi.stubGlobal()`.
|
|
416
416
|
|
|
417
|
+
> The example below uses `aroundAll` / `aroundEach`, which require Vitest ≥ 4.1.
|
|
418
|
+
|
|
417
419
|
```typescript
|
|
418
420
|
import { unauthenticatedTailorUser } from "@tailor-platform/sdk/test";
|
|
419
|
-
import {
|
|
421
|
+
import { aroundAll, aroundEach, describe, expect, test, vi } from "vitest";
|
|
420
422
|
import resolver from "../src/resolver/incrementUserAge";
|
|
421
423
|
|
|
422
424
|
describe("incrementUserAge resolver", () => {
|
|
423
425
|
const mockQueryObject = vi.fn();
|
|
424
426
|
|
|
425
|
-
|
|
427
|
+
aroundAll(async (runSuite) => {
|
|
426
428
|
vi.stubGlobal("tailordb", {
|
|
427
429
|
Client: vi.fn(
|
|
428
430
|
class {
|
|
@@ -432,9 +434,13 @@ describe("incrementUserAge resolver", () => {
|
|
|
432
434
|
},
|
|
433
435
|
),
|
|
434
436
|
});
|
|
437
|
+
await runSuite();
|
|
438
|
+
vi.unstubAllGlobals();
|
|
439
|
+
});
|
|
440
|
+
aroundEach(async (runTest) => {
|
|
441
|
+
await runTest();
|
|
442
|
+
mockQueryObject.mockReset();
|
|
435
443
|
});
|
|
436
|
-
afterAll(() => vi.unstubAllGlobals());
|
|
437
|
-
afterEach(() => mockQueryObject.mockReset());
|
|
438
444
|
|
|
439
445
|
test("increments age inside a transaction", async () => {
|
|
440
446
|
// BEGIN → SELECT → UPDATE → COMMIT
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tailor-platform/sdk",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.80.1",
|
|
4
4
|
"description": "Tailor Platform SDK - The SDK to work with Tailor Platform",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -159,7 +159,7 @@
|
|
|
159
159
|
"@opentelemetry/resources": "2.9.0",
|
|
160
160
|
"@opentelemetry/sdk-trace-node": "2.9.0",
|
|
161
161
|
"@opentelemetry/semantic-conventions": "1.43.0",
|
|
162
|
-
"@oxc-project/types": "0.
|
|
162
|
+
"@oxc-project/types": "0.140.0",
|
|
163
163
|
"@standard-schema/spec": "1.1.0",
|
|
164
164
|
"@tailor-platform/function-kysely-tailordb": "0.1.3",
|
|
165
165
|
"@toiroakr/lines-db": "0.10.1",
|
|
@@ -171,10 +171,11 @@
|
|
|
171
171
|
"date-fns": "4.4.0",
|
|
172
172
|
"es-toolkit": "1.49.0",
|
|
173
173
|
"find-up-simple": "1.0.1",
|
|
174
|
+
"get-tsconfig": "4.14.0",
|
|
174
175
|
"globals": "17.7.0",
|
|
175
176
|
"graphql": "17.0.2",
|
|
176
177
|
"inflection": "3.0.2",
|
|
177
|
-
"kysely": "0.29.
|
|
178
|
+
"kysely": "0.29.4",
|
|
178
179
|
"madge": "8.0.0",
|
|
179
180
|
"mime-types": "3.0.2",
|
|
180
181
|
"open": "11.0.0",
|
|
@@ -184,13 +185,13 @@
|
|
|
184
185
|
"pgsql-ast-parser": "12.0.2",
|
|
185
186
|
"pkg-types": "2.3.1",
|
|
186
187
|
"politty": "0.11.2",
|
|
187
|
-
"rolldown": "1.
|
|
188
|
+
"rolldown": "1.2.0",
|
|
188
189
|
"semver": "7.8.5",
|
|
189
190
|
"sql-highlight": "6.1.0",
|
|
190
191
|
"std-env": "4.2.0",
|
|
191
192
|
"table": "6.9.0",
|
|
192
193
|
"ts-cron-validator": "1.1.5",
|
|
193
|
-
"tsx": "4.23.
|
|
194
|
+
"tsx": "4.23.1",
|
|
194
195
|
"type-fest": "5.8.0",
|
|
195
196
|
"undici": "8.7.0",
|
|
196
197
|
"xdg-basedir": "5.1.0",
|
|
@@ -206,9 +207,9 @@
|
|
|
206
207
|
"@vitest/coverage-v8": "4.1.10",
|
|
207
208
|
"oxfmt": "0.58.0",
|
|
208
209
|
"oxlint": "1.73.0",
|
|
209
|
-
"oxlint-tsgolint": "0.
|
|
210
|
+
"oxlint-tsgolint": "0.25.0",
|
|
210
211
|
"sonda": "0.14.0",
|
|
211
|
-
"tsdown": "0.22.
|
|
212
|
+
"tsdown": "0.22.9",
|
|
212
213
|
"typescript": "6.0.3",
|
|
213
214
|
"vitest": "4.1.10",
|
|
214
215
|
"zinfer": "0.2.5",
|