@tailor-platform/sdk 2.38.0 → 2.39.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/CHANGELOG.md +64 -0
  2. package/dist/{application-Bz80INH4.mjs → application-OeNMQzOC.mjs} +1 -1
  3. package/dist/{application-CeqD1OK-.mjs → application-mNOJx9Y2.mjs} +4 -4
  4. package/dist/{application-CeqD1OK-.mjs.map → application-mNOJx9Y2.mjs.map} +1 -1
  5. package/dist/cli/commands/executor/trigger.d.mts +1 -0
  6. package/dist/cli/commands/generate/seed/bundler.d.mts +7 -5
  7. package/dist/cli/commands/workspace/transform.d.mts +1 -2
  8. package/dist/cli/lib.d.mts +4 -2
  9. package/dist/cli/lib.mjs +1 -1
  10. package/dist/cli/lib.mjs.map +1 -1
  11. package/dist/cli/main.mjs +30 -30
  12. package/dist/cli/main.mjs.map +1 -1
  13. package/dist/cli/shared/build-options.d.mts +13 -0
  14. package/dist/cli/shared/client.d.mts +1 -0
  15. package/dist/cli/shared/script-workflow.d.mts +65 -0
  16. package/dist/cli/shared/seed-chunker.d.mts +3 -3
  17. package/dist/{client-DOQv-BP8.mjs → client-CqiPQgMG.mjs} +2 -2
  18. package/dist/client-CqiPQgMG.mjs.map +1 -0
  19. package/dist/client-DO2_Xz_z.mjs +1 -0
  20. package/dist/completion/zsh-worker.zsh +61 -6
  21. package/dist/configure/index.mjs +1 -1
  22. package/dist/configure/index.mjs.map +1 -1
  23. package/dist/configure/services/auth/types.d.mts +20 -3
  24. package/dist/configure/services/executor/trigger/webhook.d.mts +8 -1
  25. package/dist/{context-OOASEQLA.mjs → context-CYBcQZyO.mjs} +1 -1
  26. package/dist/{context-DSi5kfqr.mjs → context-aAgFGDBD.mjs} +4 -4
  27. package/dist/{context-DSi5kfqr.mjs.map → context-aAgFGDBD.mjs.map} +1 -1
  28. package/dist/{register-ts-hook-CXYYYgCl.mjs → register-ts-hook-CORbtrSN.mjs} +82 -71
  29. package/dist/register-ts-hook-CORbtrSN.mjs.map +1 -0
  30. package/dist/{service-DB-RHn25.mjs → service-Bkz_TB5v.mjs} +2 -2
  31. package/dist/{service-DB-RHn25.mjs.map → service-Bkz_TB5v.mjs.map} +1 -1
  32. package/dist/service-Dffd4how.mjs +1 -0
  33. package/dist/syntax-diagnostic-BQgOV8Fz.mjs +2 -0
  34. package/dist/syntax-diagnostic-BQgOV8Fz.mjs.map +1 -0
  35. package/dist/validation-errors-ChvCG6wT.mjs +3 -0
  36. package/dist/validation-errors-ChvCG6wT.mjs.map +1 -0
  37. package/dist/vitest/index.mjs +1 -1
  38. package/dist/vitest/index.mjs.map +1 -1
  39. package/docs/cli/application.md +3 -3
  40. package/docs/cli/executor.md +13 -17
  41. package/docs/cli/function.md +1 -1
  42. package/docs/cli/workspace.md +2 -3
  43. package/docs/configuration.md +28 -0
  44. package/docs/github-actions.md +82 -15
  45. package/docs/migration/v2.md +5 -3
  46. package/docs/services/auth.md +5 -0
  47. package/docs/services/executor.md +2 -0
  48. package/docs/services/tailordb/migration.md +3 -3
  49. package/package.json +12 -12
  50. package/dist/client-CHXix4LD.mjs +0 -1
  51. package/dist/client-DOQv-BP8.mjs.map +0 -1
  52. package/dist/register-ts-hook-CXYYYgCl.mjs.map +0 -1
  53. package/dist/service-DsAWXbVX.mjs +0 -1
  54. package/dist/validation-errors-DqCeUW4L.mjs +0 -3
  55. package/dist/validation-errors-DqCeUW4L.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation-errors-ChvCG6wT.mjs","names":["internalError","isSyntaxDiagnostic","path","diagnostics","error","details","ConnectError","code","Code","issues","prefix","issue","branches","union","branchKeys","branch","shared","keys","sharedKeys","ranked","own","b","a","closest","runnerUp","expected","value","segment","params","pathPrefix","CLIError","subject","file","service","DEFINITION_LABELS","exportLabel","exportName","kind","label","placement","thrown","line","location","lineSuffix","message"],"sources":["../src/cli/shared/error-diagnostics.ts","../src/cli/shared/zod-issues.ts","../src/cli/shared/validation-errors.ts"],"sourcesContent":["import { Code, ConnectError } from \"@connectrpc/connect\";\nimport type { Jsonifiable } from \"type-fest\";\n\n/** Where a failure originated, for tooling that links to source. */\nexport interface ErrorSourceLocation {\n /** Absolute path to the file the failure points at. */\n file: string;\n /** 1-based line within `file`. */\n line?: number;\n}\n\ninterface ErrorDiagnostics {\n code?: string;\n suggestion?: string;\n context?: Readonly<Record<string, Jsonifiable | undefined>>;\n causes?: Readonly<Record<string, unknown>>;\n location?: ErrorSourceLocation;\n}\n\nconst diagnostics = new WeakMap<Error, ErrorDiagnostics>();\n\n/**\n * Attach output diagnostics without changing the error type used by callers.\n * @param error - Original error\n * @param details - Safe diagnostic fields supplied by the producer\n * @returns Original error\n */\nexport function withErrorDiagnostics<T extends Error>(error: T, details: ErrorDiagnostics): T {\n diagnostics.set(error, { ...diagnostics.get(error), ...details });\n return error;\n}\n\n/**\n * Read producer diagnostics and recovery guidance for a failure.\n * @param error - Failure being rendered\n * @returns Diagnostic fields\n */\nexport function getErrorDiagnostics(error: Error): ErrorDiagnostics {\n return {\n ...(error instanceof ConnectError ? { suggestion: rpcSuggestion(error.code) } : {}),\n ...diagnostics.get(error),\n };\n}\n\nfunction rpcSuggestion(code: Code): string | undefined {\n switch (code) {\n case Code.Unauthenticated:\n return \"Check the active token and profile with `tailor auth status` (include the same --profile option). For an environment token, replace TAILOR_PLATFORM_TOKEN; otherwise use the original browser or --machine-user login method with the same profile. See `tailor login --help`.\";\n case Code.PermissionDenied:\n return \"Check the active identity and profile with `tailor auth status` (include the same --profile option), then verify its workspace role and token permissions.\";\n case Code.Unavailable:\n case Code.DeadlineExceeded:\n return \"Check network connectivity and platform availability. A write may already have completed; inspect the current resource state before retrying.\";\n default:\n return undefined;\n }\n}\n","import type { z } from \"zod\";\n\ntype ZodIssue = z.core.$ZodIssue;\n\nexport type FlatIssue = {\n path: Array<string | number>;\n message: string;\n};\n\n/**\n * Flatten Zod issues into one entry per offending field. A failed union is\n * replaced by the issues of the branch the input came closest to matching,\n * and an invalid record key by the issues of the key schema.\n * @param issues - Issues from a failed parse\n * @param prefix - Path of the parsed value, prepended to every issue path\n * @returns Issues with absolute paths\n */\nexport function flattenZodIssues(\n issues: readonly ZodIssue[],\n prefix: readonly PropertyKey[] = [],\n): FlatIssue[] {\n return issues.flatMap((issue) => {\n const path = [...prefix, ...issue.path];\n if (issue.code === \"invalid_union\") {\n return flattenUnion(issue, path);\n }\n if (issue.code === \"invalid_key\") {\n return flattenZodIssues(issue.issues, path);\n }\n return [toFlatIssue(issue, path)];\n });\n}\n\n/**\n * Render flattened issues as an indented list, one `path: message` line each.\n * @param issues - Issues from `flattenZodIssues`\n * @returns Lines joined by newlines\n */\nexport function formatIssueList(issues: readonly FlatIssue[]): string {\n return issues\n .map((issue) => ` - ${issue.path.join(\".\") || \"(root)\"}: ${issue.message}`)\n .join(\"\\n\");\n}\n\nfunction flattenUnion(\n union: z.core.$ZodIssueInvalidUnion,\n path: readonly PropertyKey[],\n): FlatIssue[] {\n const branches: readonly (readonly ZodIssue[])[] = union.errors;\n const branchKeys = branches.map((branch) => new Set(branch.map(issueKey)));\n const shared = (branches[0] ?? []).filter((issue) =>\n branchKeys.every((keys) => keys.has(issueKey(issue))),\n );\n const sharedKeys = new Set(shared.map(issueKey));\n const ranked = branches\n .map((branch) => {\n const own = branch.filter((issue) => !sharedKeys.has(issueKey(issue)));\n const depth =\n own.length === 0 ? Infinity : Math.max(...own.map((issue) => issue.path.length));\n return { own, depth };\n })\n .toSorted((a, b) => b.depth - a.depth || a.own.length - b.own.length);\n const [closest, runnerUp] = ranked;\n if (\n closest === undefined ||\n (closest.own.length > 0 &&\n runnerUp !== undefined &&\n closest.depth === runnerUp.depth &&\n closest.own.length === runnerUp.own.length)\n ) {\n return [\n ...flattenZodIssues(shared, path),\n { ...toFlatIssue(union, path), message: tiedUnionMessage(union, ranked) },\n ];\n }\n return [...flattenZodIssues(shared, path), ...flattenZodIssues(closest.own, path)];\n}\n\n// zod's own message for a union; any other message was written for the field.\nconst DEFAULT_UNION_MESSAGE = \"Invalid input\";\n\nfunction tiedUnionMessage(\n union: z.core.$ZodIssueInvalidUnion,\n branches: readonly { own: readonly ZodIssue[] }[],\n): string {\n if (union.message !== DEFAULT_UNION_MESSAGE) {\n return union.message;\n }\n const expected = new Set<string>();\n for (const issue of branches.flatMap((branch) => branch.own)) {\n if (issue.path.length > 0) {\n return union.message;\n }\n if (issue.code === \"invalid_type\") {\n expected.add(issue.expected);\n } else if (issue.code === \"invalid_value\") {\n for (const value of issue.values) {\n expected.add(typeof value === \"string\" ? JSON.stringify(value) : String(value));\n }\n } else {\n return union.message;\n }\n }\n return expected.size === 0\n ? union.message\n : `${union.message}: expected ${[...expected].join(\" | \")}`;\n}\n\nfunction issueKey(issue: ZodIssue): string {\n return JSON.stringify([issue.path.map(String), issue.code, issue.message]);\n}\n\nfunction toFlatIssue(issue: ZodIssue, path: readonly PropertyKey[]): FlatIssue {\n return {\n path: path.map((segment) => (typeof segment === \"symbol\" ? String(segment) : segment)),\n message: issue.message,\n };\n}\n","import * as path from \"pathe\";\nimport { isSyntaxDiagnostic } from \"#/utils/syntax-diagnostic\";\nimport { withErrorDiagnostics } from \"./error-diagnostics\";\nimport { CLIError, internalError } from \"./errors\";\nimport { flattenZodIssues, formatIssueList, type FlatIssue } from \"./zod-issues\";\nimport type { AppConfig } from \"#/configure/config/types\";\nimport type { SdkBrandKind } from \"#/utils/brand\";\nimport type { z } from \"zod\";\n\ninterface ConfigServiceRef {\n /** `defineConfig` property the service is configured under. */\n configKey: keyof AppConfig;\n /** Service name, or the namespace for TailorDB. */\n name?: string;\n}\n\nexport interface ConfigInvalidErrorParams {\n /** Config file that failed validation. */\n file: string;\n /** Config module export that failed validation. */\n exportName: \"default\" | \"plugins\";\n /** What failed, as it reads after \"Invalid\", such as `Tailor config`. */\n subject: string;\n /** Validation error of the failing value. */\n error: z.ZodError;\n /** Path of the failing value within `exportName`. */\n pathPrefix?: FlatIssue[\"path\"];\n /** The service that failed, when a single service config failed. */\n service?: ConfigServiceRef;\n}\n\n/**\n * Create the error for a config file that failed validation.\n * @param params - Failed config and its validation error\n * @returns CLIError coded `CONFIG_INVALID`, located at the config file\n */\nexport function configInvalidError(params: ConfigInvalidErrorParams): CLIError {\n const { file, exportName, subject, error, pathPrefix, service } = params;\n const issues = flattenZodIssues(error.issues, pathPrefix);\n return withErrorDiagnostics(\n CLIError({\n code: \"CONFIG_INVALID\",\n message: `Invalid ${subject} in ${relativeFile(file)}:\\n${formatIssueList(issues)}`,\n context: { file, exportName, ...service, issues },\n cause: error,\n }),\n { location: { file } },\n );\n}\n\nconst DEFINITION_LABELS = {\n resolver: \"resolver\",\n executor: \"executor\",\n \"tailordb-type\": \"TailorDB type\",\n \"http-adapter\": \"HTTP adapter\",\n workflow: \"workflow\",\n \"workflow-job\": \"workflow job\",\n} as const satisfies Partial<Record<SdkBrandKind, string>>;\n\nexport interface DefinitionErrorParams {\n /** Brand kind of the exported definition. */\n kind: keyof typeof DEFINITION_LABELS;\n /** Absolute path of the file that exports the definition. */\n file: string;\n /** Export the definition was found under. */\n exportName: string;\n}\n\nexport interface DefinitionInvalidErrorParams extends DefinitionErrorParams {\n /** Validation error of the definition. */\n error: z.ZodError;\n}\n\n/**\n * Create the error for an SDK definition that failed validation.\n * @param params - Failed definition and its validation error\n * @returns CLIError coded `DEFINITION_INVALID`, located at the definition file\n */\nexport function definitionInvalidError(params: DefinitionInvalidErrorParams): CLIError {\n const { kind, file, exportName, error } = params;\n const issues = flattenZodIssues(error.issues);\n const exportLabel = exportName === \"default\" ? \"\" : ` \\`${exportName}\\``;\n return withErrorDiagnostics(\n CLIError({\n code: \"DEFINITION_INVALID\",\n message: `Invalid ${DEFINITION_LABELS[kind]}${exportLabel} in ${relativeFile(file)}:\\n${formatIssueList(issues)}`,\n context: { kind, file, exportName, issues },\n cause: error,\n }),\n { location: { file } },\n );\n}\n\n/**\n * Create the error for an SDK definition exported where its loader does not read it.\n * @param params - Misplaced definition\n * @returns CLIError coded `DEFINITION_EXPORT_INVALID`, located at the definition file\n */\nexport function definitionExportError(params: DefinitionErrorParams): CLIError {\n const { kind, file, exportName } = params;\n const label = DEFINITION_LABELS[kind];\n const subject = `${label.charAt(0).toUpperCase()}${label.slice(1)} in ${relativeFile(file)}`;\n const placement =\n exportName === \"default\"\n ? {\n message: `${subject} must not be the default export.`,\n suggestion: \"Export it under a name instead.\",\n }\n : {\n message: `${subject} must not be a named export, but it is exported as \\`${exportName}\\`.`,\n suggestion: \"Export it only as the default export.\",\n };\n return withErrorDiagnostics(\n CLIError({\n code: \"DEFINITION_EXPORT_INVALID\",\n ...placement,\n context: { kind, file, exportName },\n }),\n { location: { file } },\n );\n}\n\n/**\n * Create the error for a user module whose source does not parse.\n * @param thrown - Value thrown while importing the module\n * @returns CLIError coded `SYNTAX_INVALID`, located at the file and line the\n * source failed to parse on, or undefined when `thrown` is another failure\n */\nexport function syntaxInvalidError(thrown: unknown): CLIError | undefined {\n if (!isSyntaxDiagnostic(thrown)) return undefined;\n const { message, filename: file, startLine: line } = thrown;\n const location = line === undefined ? { file } : { file, line };\n const lineSuffix = line === undefined ? \"\" : `:${line}`;\n return withErrorDiagnostics(\n CLIError({\n code: \"SYNTAX_INVALID\",\n message: `Invalid syntax in ${relativeFile(file)}${lineSuffix}: ${message}`,\n context: location,\n cause: thrown,\n }),\n { location },\n );\n}\n\n/**\n * Create the error for SDK- or Platform-produced data that failed validation,\n * which no user action can fix.\n * @param subject - What failed, as it reads after \"Invalid\", such as `workspace context`\n * @param error - Validation error of the data\n * @returns Plain Error, reported as `UNEXPECTED_ERROR`\n */\nexport function invalidDataError(subject: string, error: z.ZodError): Error {\n return internalError(`Invalid ${subject}:\\n${formatIssueList(flattenZodIssues(error.issues))}`, {\n cause: error,\n });\n}\n\nfunction relativeFile(file: string): string {\n return path.relative(process.cwd(), file);\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{i as e,t}from"../registry-BijIDRVA.mjs";import{a as n,c as r,i,o as a,s as o,u as s}from"../wait-point-invoker-eiP-IIux.mjs";import{t as c}from"../assert-WeXvmG4j.mjs";import{n as l,r as u}from"../node-builtins-DYfhPBnz.mjs";import{n as d,r as f}from"../migration-steps-C6F3zNdQ.mjs";import{t as p}from"../platform-serialize-DkiTdHOt.mjs";import{a as m,i as h,n as g,o as _,r as v}from"../date-representation-Cr7W7Pn2.mjs";import*as y from"node:module";import{createRequire as b}from"node:module";import{isEqual as x}from"es-toolkit";import{existsSync as S}from"node:fs";import{fileURLToPath as C,pathToFileURL as w}from"node:url";import{ColumnNode as T,CompiledQuery as E,InsertQueryNode as D,Kysely as O,PGliteAdapter as ee,PostgresAdapter as te,PostgresIntrospector as k,PostgresQueryCompiler as A,PrimitiveValueListNode as j,ReferenceNode as M,UpdateQueryNode as ne,ValueListNode as re,ValueNode as ie,ValuesNode as N}from"kysely";import{dirname as P,isAbsolute as F,matchesGlob as ae,relative as I,resolve as L}from"node:path";import{vi as R}from"vitest";function isBlockedModule(e){return u(e)}function getBlockedMessage(e){return l(e)}function dateDefaultFromConfig(e){let t=e&&typeof e==`object`?e.default:void 0,n=t&&typeof t==`object`?t.defaultDateRepresentation:void 0;if(n===void 0)return`legacy`;if(n===`temporal`||n===`date`)return n;throw Error(`defaultDateRepresentation must be "temporal", "date", or omitted, but tailor.config.ts sets ${JSON.stringify(n)}.`)}let z=Promise.resolve();function serialize(e){let t=z.then(e,e);return z=t.catch(()=>void 0),t}async function importLikeCli(e){let t=w(e).href,n=f();try{if(`Bun`in globalThis||`Deno`in globalThis)return await import(t);let{resolveSync:e,loadSync:n}=await import(w(L(P(C(import.meta.url)),`../cli/ts-hook.mjs`)).href),r=y.registerHooks({resolve:e,load:n});try{return await import(t)}finally{r.deregister?.()}}finally{n()}}function isSourceParseError(e){return typeof e==`object`&&!!e&&e.code===`InvalidSyntax`}function describeError(e){return e instanceof Error?e.message:String(e)}async function loadDateDefaultFromConfig(e){if(!S(e))throw Error(`tailor-runtime: tailor.config.ts not found at ${e}. Check the \`config\` option of tailorRuntime().`);let t;try{t=await serialize(()=>importLikeCli(e))}catch(t){if(isSourceParseError(t))throw Error(`tailor-runtime could not parse ${e}: ${describeError(t)}`,{cause:t});return console.warn(`tailor-runtime could not load ${e} to read defaultDateRepresentation; t date fields use string values in this run. If the config sets "temporal" or "date", tests disagree with tailor.d.ts until the error is fixed: ${describeError(t)}`),`legacy`}return dateDefaultFromConfig(t)}const B=[`**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}`],V=/* @__PURE__ */ new Set([`ImportDeclaration`,`ExportNamedDeclaration`,`ExportAllDeclaration`]),H=/* @__PURE__ */ new Set(/* @__PURE__ */ `break.case.catch.class.const.continue.debugger.default.delete.do.else.enum.export.extends.false.finally.for.function.if.import.in.instanceof.new.null.return.super.switch.this.throw.true.try.typeof.var.void.while.with.yield.let.static.implements.interface.package.private.protected.public.await.arguments.eval`.split(`.`)),U=/^[A-Za-z_$]/,W=/^[A-Za-z0-9_$]*$/;function isSafeBindingName(e){if(H.has(e)||e.length===0)return!1;let t=e[0];return t!==void 0&&U.test(t)&&W.test(e.slice(1))}function buildBlockedReplacement(e,t){let n=JSON.stringify(t),r=`throw new Error(${n});`,i=`(() => { throw new Error(${n}); })()`;if(e.type===`ExportNamedDeclaration`){let t=e.specifiers??[],n=[];for(let e of t){let t=e.exported?.name;if(typeof t==`string`){if(t==="default")n.push(`export default ${i};`);else{if(!isSafeBindingName(t))return r;n.push(`export const ${t} = ${i};`)}}}return n.length>0?n.join(` `):r}if(e.type===`ExportAllDeclaration`){let t=e.exported?.name;return typeof t==`string`&&isSafeBindingName(t)?`export const ${t} = ${i};`:r}return r}const toFileList=e=>Array.isArray(e)?e:e?[e]:[];let G;function supportsDefaultProjectInheritance(){if(G===void 0)try{let{version:e}=b(import.meta.url)(`vitest/package.json`);G=Number.parseInt(e,10)>=5}catch{G=!1}return G}function createBlockPlugin(){let isTestFile=()=>!1,isUserSourceFile=()=>!1;return{name:`tailor-runtime-block-node`,configResolved(e){let t=e.test,n=t?.root??e.root,toAbsolutePaths=(e,t)=>toFileList(e).map(e=>L(t,e)),r=/* @__PURE__ */ new Set([...toAbsolutePaths(t?.setupFiles,n),...toAbsolutePaths(t?.globalSetup,n)]),i=[{root:n,patterns:t?.include??B}];for(let e of t?.projects??[]){let t=e.test;if(!t)continue;let a=t.root??n;for(let e of toAbsolutePaths(t.setupFiles,a))r.add(e);for(let e of toAbsolutePaths(t.globalSetup,a))r.add(e);i.push({root:a,patterns:t.include??B})}isTestFile=e=>r.has(e)?!0:i.some(({root:t,patterns:n})=>{let r=F(e)?I(t,e):e;return n.some(e=>ae(r,e))}),isUserSourceFile=e=>{if(!F(e))return!1;let t=I(n,e);return t!==``&&!t.startsWith(`..`)&&!F(t)}},transform(e,t){let n=t.search(/[?#]/),r=n===-1?t:t.slice(0,n);if(isTestFile(r)||r.includes(`node_modules`)||!isUserSourceFile(r))return;let i;try{i=this.parse(e)}catch{return}let a=[];for(let e of i.body){if(!V.has(e.type))continue;let t=e.source?.value;typeof t==`string`&&isBlockedModule(t)&&a.push({start:e.start,end:e.end,replacement:buildBlockedReplacement(e,getBlockedMessage(t))})}if(a.length===0)return;let o=e;for(let e of a.toSorted((e,t)=>t.start-e.start))o=o.slice(0,e.start)+e.replacement+o.slice(e.end);return{code:o,map:null}}}}function setConfigEnv(e,t,n){e.env={...e.env,__TAILOR_RUNTIME_CONFIG:t,__TAILOR_RUNTIME_DATE_DEFAULT:n}}function createEnvironmentPlugin(e,t=loadDateDefaultFromConfig){let n=P(C(import.meta.url)),r=L(n,`environment.mjs`),i=L(n,`setup.mjs`),a=/* @__PURE__ */ new Map,dateDefaultOf=e=>{let n=a.get(e);return n||(n=t(e),a.set(e,n)),n},selectsTailorRuntime=e=>e===`tailor-runtime`||e===r;return{name:`tailor-runtime-environment`,async config(t){let n=t.test,a=!!n&&selectsTailorRuntime(n.environment);if(n&&a&&(n.environment=r),n?.projects)for(let o of n.projects){if(typeof o==`string`)continue;let n=o.test??={};if(!(n.environment===void 0&&a&&(o.extends===!0||o.extends===void 0&&supportsDefaultProjectInheritance()))&&!selectsTailorRuntime(n.environment)){e?.config&&setConfigEnv(n,``,``);continue}n.environment=r;let s=toFileList(n.setupFiles);if(s.includes(i)||(n.setupFiles=[...s,i]),e?.config){let r=o.root??n.root??t.root??process.cwd(),i=L(r,e.config);setConfigEnv(n,i,await dateDefaultOf(i))}}if(e?.config&&n){let r=n.root??t.root??process.cwd(),i=a?L(r,e.config):``;setConfigEnv(n,i,i?await dateDefaultOf(i):``)}let o=toFileList(n?.setupFiles);return n&&typeof n.setupFiles==`string`&&(n.setupFiles=o),!a||o.includes(i)?{}:{test:{setupFiles:[i]}}}}}function mockAigateway(e={}){let t=h(),n=t.aigateway,r={...e.urls};async function defaultGet(e){let t=r[e];if(t===void 0)throw Error(`No AI Gateway registered for "${e}". Acquire mockAigateway() and call setUrls(...).`);return{url:t}}let i=R.fn(defaultGet);return t.aigateway={get:i},_({get:i,setUrls(e){r=e},setUrl(e,t){r={...r,[e]:t}},get calls(){return i.mock.calls.map(([e])=>({name:e}))},clear(){i.mockClear()},reset(){r={},i.mockReset(),i.mockImplementation(defaultGet)}},()=>{t.aigateway=n})}function mockAuthconnection(e={}){let t=h(),n=t.authconnection,r={...e.tokens};async function defaultGetConnectionToken(t){let n=r[t];if(n)return n;if(e.onUnhandled===`error`)throw Error(`No AuthConnection token configured for "${t}"`);return{access_token:`mock-token`}}let i=R.fn(defaultGetConnectionToken);return t.authconnection={getConnectionToken:i},_({getConnectionToken:i,setTokens(e){r=e},setToken(e,t){r={...r,[e]:t}},get calls(){return i.mock.calls.map(([e])=>({connectionName:e}))},clear(){i.mockClear()},reset(){r={},i.mockReset(),i.mockImplementation(defaultGetConnectionToken)}},()=>{t.authconnection=n})}const K=[`upload`,`download`,`downloadAsBase64`,`delete`,`getMetadata`,`downloadStream`,`uploadStream`],q={upload:{metadata:{fileSize:0,sha256sum:``}},download:{data:/* @__PURE__ */ new Uint8Array,metadata:{contentType:``,fileSize:0,sha256sum:``,lastUploadedAt:``}},downloadAsBase64:{data:``,metadata:{contentType:``,fileSize:0,sha256sum:``,lastUploadedAt:``}},getMetadata:{contentType:``,fileSize:0,sha256sum:``,urlPath:``},downloadStream:null,uploadStream:{metadata:{fileSize:0,sha256sum:``}}};function mockFile(e={}){let t=m(),n=t.file,{onUnhandled:r=`fallback`}=e,i=[],a=[],resolver=()=>null;function handle(e,t,n,a,o){if(i.length>0)return i.shift();let s=resolver(e,{method:e,namespace:t,tableName:n,fieldName:a,recordId:o});if(s!=null)return s;if(r===`error`)throw Error(`No File mock configured for "${e}"`);let c=q[e];return c===void 0?void 0:structuredClone(c)}let o=R.fn(async(...e)=>{let[t,n,r,i]=e;return handle(`upload`,t,n,r,i)}),s=R.fn(async(...e)=>handle(`download`,...e)),c=R.fn(async(...e)=>handle(`downloadAsBase64`,...e)),l=R.fn(async(...e)=>{handle(`delete`,...e)}),u=R.fn(async(...e)=>handle(`getMetadata`,...e)),d=R.fn(async(...e)=>handle(`downloadStream`,...e)??{body:new ReadableStream({start(e){e.close()}}),metadata:{contentType:``,fileSize:0,sha256sum:``,lastUploadedAt:``}}),f=R.fn(async(...e)=>{let[t,n,r,i]=e;return handle(`uploadStream`,t,n,r,i)}),p={upload:o,download:s,downloadAsBase64:c,delete:l,getMetadata:u,downloadStream:d,uploadStream:f};function track(e,t){return function(...n){return a.push({method:e,namespace:n[0],tableName:n[1],fieldName:n[2],recordId:n[3]}),t.apply(this,n)}}t.file={upload:track(`upload`,o),download:track(`download`,s),downloadAsBase64:track(`downloadAsBase64`,c),delete:track(`delete`,l),getMetadata:track(`getMetadata`,u),downloadStream:track(`downloadStream`,d),uploadStream:track(`uploadStream`,f)};function allMocks(){return K.map(e=>p[e])}let h={...p,setResolver(e){resolver=e},enqueueResult(e){i.push(e)},enqueueResults(...e){i.push(...e)},get calls(){return a},clear(){a.length=0;for(let e of allMocks())e.mockClear()},reset(){i.length=0,a.length=0,resolver=()=>null;for(let e of allMocks())e.mockReset()}};return _(h,()=>{t.file=n})}function isUtf8(e){return e===`UTF8`||e===`UTF-8`}function defaultIconvResult(e,t){switch(e){case`convert`:case`convertBuffer`:return isUtf8(t[2])?``:/* @__PURE__ */ new Uint8Array;case`decode`:return``;case`encode`:return isUtf8(t[1])?``:/* @__PURE__ */ new Uint8Array;case`encodings`:return[]}}function mockIconv(e={}){let t=h(),n=t.iconv,r=null,i=[];function resolve(t,n){if(r){let e=r(t,n);if(e!=null)return e}if(e.onUnhandled===`error`)throw Error(`No Iconv mock behavior configured for "${t}"`);return defaultIconvResult(t,n)}function defaultConvert(e,t,n){return resolve(`convert`,[e,t,n])}function defaultConvertBuffer(e,t,n){return resolve(`convertBuffer`,[e,t,n])}function defaultDecode(e,t){return resolve(`decode`,[e,t])}function defaultEncode(e,t){return resolve(`encode`,[e,t])}function defaultEncodings(){return resolve(`encodings`,[])}let a=R.fn(defaultConvert),o=R.fn(defaultConvertBuffer),s=R.fn(defaultDecode),c=R.fn(defaultEncode),l=R.fn(defaultEncodings);function track(e,t){return function(...n){return i.push({method:e,args:[...n]}),t.apply(this,n)}}let u=track(`convert`,a),d=track(`convertBuffer`,o),f=track(`decode`,s),p=track(`encode`,c),m=track(`encodings`,l);class MockIconv{#e;#t;constructor(e,t){this.#e=e,this.#t=t}convert(e){return u.call(this,e,this.#e,this.#t)}}t.iconv={convert:u,convertBuffer:d,decode:f,encode:p,encodings:m,Iconv:MockIconv};function clear(){i.length=0,a.mockClear(),o.mockClear(),s.mockClear(),c.mockClear(),l.mockClear()}return _({convert:a,convertBuffer:o,decode:s,encode:c,encodings:l,setResolver(e){r=e},get calls(){return i},clear,reset(){r=null,i.length=0,a.mockReset(),a.mockImplementation(defaultConvert),o.mockReset(),o.mockImplementation(defaultConvertBuffer),s.mockReset(),s.mockImplementation(defaultDecode),c.mockReset(),c.mockImplementation(defaultEncode),l.mockReset(),l.mockImplementation(defaultEncodings)}},()=>{t.iconv=n})}const oe=[`users`,`user`,`userByName`,`createUser`,`updateUser`,`deleteUser`,`sendPasswordResetEmail`,`unenrollMfa`],J={id:`mock-id`,name:`mock-user`,disabled:!1,mfaEnrolled:!1,mfaFactorIds:[],passwordUpdatedAt:null},se={users:{users:[],nextPageToken:null,totalCount:0},user:J,userByName:J,createUser:J,updateUser:J,deleteUser:!0,sendPasswordResetEmail:!0,unenrollMfa:!0};function mockIdp(e={}){let t=h(),n=t.idp,{onUnhandled:r=`fallback`}=e,i=[],a=[],resolver=()=>null,o=/* @__PURE__ */ new Map;function compatibilityArgs(e,t){return e===`users`&&t.length===0?[void 0]:t}function handle(e,t,n){if(i.length>0)return i.shift();let a=resolver(e,compatibilityArgs(e,t),n);if(a!=null)return a;if(r===`error`)throw Error(`No IdP mock configured for "${n}.${e}"`);return structuredClone(se[e])}function createNamespaceMocks(e){return{users:R.fn(async(...t)=>handle(`users`,t,e)),user:R.fn(async(...t)=>handle(`user`,t,e)),userByName:R.fn(async(...t)=>handle(`userByName`,t,e)),createUser:R.fn(async(...t)=>handle(`createUser`,t,e)),updateUser:R.fn(async(...t)=>handle(`updateUser`,t,e)),deleteUser:R.fn(async(...t)=>handle(`deleteUser`,t,e)),sendPasswordResetEmail:R.fn(async(...t)=>handle(`sendPasswordResetEmail`,t,e)),unenrollMfa:R.fn(async(...t)=>handle(`unenrollMfa`,t,e))}}function namespace(e){let t=o.get(e);if(t)return t;let n=createNamespaceMocks(e);return o.set(e,n),n}function track(e,t,n){return function(...r){return a.push({method:e,args:[...compatibilityArgs(e,r)],namespace:n}),t.apply(this,r)}}let defaultClient=function(e){let t=namespace(e.namespace);this.users=track(`users`,t.users,e.namespace),this.user=track(`user`,t.user,e.namespace),this.userByName=track(`userByName`,t.userByName,e.namespace),this.createUser=track(`createUser`,t.createUser,e.namespace),this.updateUser=track(`updateUser`,t.updateUser,e.namespace),this.deleteUser=track(`deleteUser`,t.deleteUser,e.namespace),this.sendPasswordResetEmail=track(`sendPasswordResetEmail`,t.sendPasswordResetEmail,e.namespace),this.unenrollMfa=track(`unenrollMfa`,t.unenrollMfa,e.namespace)},s=R.fn(defaultClient);t.idp={Client:s};function allMocks(){return[...o.values()].flatMap(e=>oe.map(t=>e[t]))}return _({Client:s,namespace,setResolver(e){resolver=e},enqueueResult(e){i.push(e)},enqueueResults(...e){i.push(...e)},get calls(){return a},clear(){a.length=0,s.mockClear();for(let e of allMocks())e.mockClear()},reset(){i.length=0,a.length=0,resolver=()=>null,s.mockReset(),s.mockImplementation(defaultClient);for(let e of allMocks())e.mockReset()}},()=>{t.idp=n})}function mockLogger(e={}){let t=h(),n=t.logger,r=R.fn((e,t)=>{}),i=R.fn((e,t)=>{}),a=R.fn((e,t)=>{}),o=R.fn((e,t)=>{}),s=R.fn(e=>{});t.logger={debug:r,info:i,warn:a,error:o,setAttributes:s};let c={debug:r,info:i,warn:a,error:o};return _({debug:r,info:i,warn:a,error:o,setAttributes:s,get calls(){return Object.entries(c).flatMap(([e,t])=>t.mock.calls.map((n,r)=>({order:t.mock.invocationCallOrder[r]??0,call:{severity:e,message:n[0],attributes:n[1]}}))).toSorted((e,t)=>e.order-t.order).map(e=>e.call)},clear(){r.mockClear(),i.mockClear(),a.mockClear(),o.mockClear(),s.mockClear()},reset(){r.mockReset(),i.mockReset(),a.mockReset(),o.mockReset(),s.mockReset()}},()=>{t.logger=n})}function testRegex(e,t){let n=e.lastIndex;e.lastIndex=0;try{return e.test(t)}finally{e.lastIndex=n}}var MockQueryResult=class{command;rowCount;rows;constructor(e){this.command=``,this.rowCount=e.length,this.rows=e}};function mockTailordb(e={}){let t=m(),n=t.Client,r=[],i;function matchesQuery(e,t,n){if(typeof e==`function`)return e(t,n);if(typeof e==`string`)return t===e;if(e instanceof RegExp)return testRegex(e,t);let r;if(r=typeof e.sql==`string`?t===e.sql:testRegex(e.sql,t),!r||e.params===void 0)return r;if(typeof e.params==`function`)return e.params(n);let i=e.params;return n.length===i.length&&n.every((e,t)=>x(e,i[t]))}function queryResponse(e){if(e.type===`error`)throw e.error;return new MockQueryResult(e.rows)}async function defaultQuery(t,n=[]){for(let e=r.length-1;e>=0;--e){let i=r[e];if(!i||!matchesQuery(i.matcher,t,n))continue;let a=i.once.shift();if(a)return queryResponse(a);if(i.fallback)return queryResponse(i.fallback)}if(i)return new MockQueryResult(i(t,n)??[]);if(e.onUnhandled===`error`)throw Error(`No TailorDB query behavior matched: ${t}`);return new MockQueryResult([])}let a=R.fn(defaultQuery),defaultConnect=async()=>{},o=R.fn(defaultConnect),s=[];function enqueueRowsList(e){for(let t of e)a.mockImplementationOnce(async()=>new MockQueryResult(t))}let defaultClient=function(e){let t={namespace:e?.namespace,ended:!1};s.push(t),this.connect=o,this.end=R.fn(async()=>{t.ended=!0}),this.queryObject=a,this.createTransaction=e=>{if(!e)throw Error(`Transaction name must be a non-empty string`);return{begin:async()=>{},commit:async()=>{},rollback:async()=>{},queryObject:a}}},c=R.fn(defaultClient);return t.Client=c,_({Client:c,queryObject:a,setQueryResolver(e){i=e,a.mockImplementation(defaultQuery)},onQuery(e){let t={matcher:e,once:[]};r.push(t);let n={returnsRows(e){return t.fallback={type:`rows`,rows:e},n},returnsRowsOnce(e){return t.once.push({type:`rows`,rows:e}),n},rejects(e){return t.fallback={type:`error`,error:e},n},rejectsOnce(e){return t.once.push({type:`error`,error:e}),n}};return n},enqueueResult(...e){enqueueRowsList([e])},enqueueResults(...e){enqueueRowsList(e)},enqueueRows(...e){enqueueRowsList(e)},get executedQueries(){return a.mock.calls.map(([e,t])=>({query:e,params:t??[]}))},get createdClients(){return s},clear(){a.mockClear(),o.mockClear(),c.mockClear(),s.length=0},reset(){a.mockReset(),a.mockImplementation(defaultQuery),o.mockReset(),o.mockImplementation(defaultConnect),c.mockReset(),c.mockImplementation(defaultClient),s.length=0,r.length=0,i=void 0}},()=>{t.Client=n})}const Y=/* @__PURE__ */ new WeakMap,X=/* @__PURE__ */ new WeakMap,Z=/* @__PURE__ */ new WeakMap;function replaceProcedure(e,t,n){let r=Z.get(n)??n,i=R.fn(function(...e){return Reflect.apply(r,this,e)});Z.set(i,r);let a=e;return a[t]=i,{mock:i,scoped:{mockClear:()=>i.mockClear(),mockReset:()=>i.mockReset(),restore:()=>{a[t]===i&&(a[t]=n)}}}}function replaceStart(e){return replaceProcedure(e,`start`,e.start)}function mockWorkflow(){let e=h(),a=e.workflow,c=r(),l=/* @__PURE__ */ new Map,u=/* @__PURE__ */ new Map,d=/* @__PURE__ */ new Map,f=/* @__PURE__ */ new Map,m=/* @__PURE__ */ new Set,installKeyDispatcher=e=>{let t=f.get(e);if(t)return t;let n=i(e);if(!n)throw Error(`waitPointWith expects a wait point definition created by createWaitPoint or createWaitPoints.`);let r=n,a=n.wait,o=n.resolve,s=Y.get(a)??a,c=X.get(o)??o,l={perKey:/* @__PURE__ */ new Map,originalWait:(e,t)=>s.call(n,e,t),originalResolve:(e,t,r)=>c.call(n,e,t,r)},dispatchWait=(e,t)=>{let n=l.perKey.get(e);return n?t===void 0?n.wait():n.wait(t):l.originalWait(e,t)},dispatchResolve=async(e,t,n)=>{let r=l.perKey.get(e);if(!r)return l.originalResolve(e,t,n);await r.resolve(t,n)};Y.set(dispatchWait,s),X.set(dispatchResolve,c),r.wait=dispatchWait,r.resolve=dispatchResolve;let eachSpy=e=>{for(let t of l.perKey.values()){let n=t;e(n.wait),e(n.resolve)}};return m.add({mockClear:()=>eachSpy(e=>e.mockClear()),mockReset:()=>eachSpy(e=>e.mockReset()),restore:()=>{r.wait=a,r.resolve=o,f.delete(e)}}),f.set(e,l),l},defaultExecJob=(e,t,n)=>{throw Error(`No workflow job mock for "${e}". Call mockWorkflow().setJobHandler(...) or enqueueResult(...), or use runWorkflowLocally() for local workflow execution.`)},defaultStartWorkflow=async(e,n,r)=>t,defaultResumeWorkflowExecution=async e=>e,g=R.fn(defaultExecJob),v=R.fn(defaultStartWorkflow),y=R.fn(defaultResumeWorkflowExecution),b=R.fn((e,t)=>null),x=R.fn(async(e,t,n)=>{});return e.workflow={execJobFunction:(...e)=>{let t=e.length>=3?g(e[0],p(e[1]),e[2]):g(e[0],p(e[1]));return t instanceof Promise?t.then(e=>p(e)):p(t)},startWorkflow:(...e)=>e.length>=3?v(e[0],p(e[1]),e[2]):v(e[0],p(e[1])),resumeWorkflowExecution:e=>y(e),wait:(e,t)=>b(e,p(t)),resolve:(e,t,n)=>x(e,t,e=>{let t=n(e);return t instanceof Promise?t.then(e=>p(e)):p(t)})},_({execJobFunction:g,startWorkflow:v,resumeWorkflowExecution:y,wait:b,resolve:x,job(e){let t=l.get(e);if(t)return t;let{mock:n,scoped:r}=replaceStart(e);return m.add(r),l.set(e,n),n},workflow(e){let t=u.get(e);if(t)return t;let{mock:n,scoped:r}=replaceStart(e);return u.set(e,n),m.add(r),n},waitPoint(e){let t=d.get(e);if(t)return t;let n=replaceProcedure(e,`wait`,e.wait),r=replaceProcedure(e,`resolve`,e.resolve),i=n.mock,a=r.mock;m.add(n.scoped),m.add(r.scoped);let o={wait:i,resolve:a,setResolvePayload(e){a.mockImplementation(async(t,n)=>{let r=await n(p(e));p(r)})}};return d.set(e,o),o},waitPointWith(e,t){let r=n(e.with(t));if(r===void 0)throw Error(`waitPointWith expects a wait point declared with $params. Use waitPoint() for a wait point with a fixed key.`);let i=installKeyDispatcher(e),a=i.perKey.get(r);if(a)return a;let o=R.fn(e=>Promise.resolve(i.originalWait(r,e))),s=R.fn((e,t)=>i.originalResolve(r,e,t)),c={wait:o,resolve:s,setResolvePayload(e){s.mockImplementation(async(t,n)=>{let r=await n(p(e));p(r)})}};return i.perKey.set(r,c),c},setJobHandler(e){g.mockImplementation((t,n,r)=>e(t,n,r))},enqueueResult(e){g.mockImplementationOnce(()=>e)},enqueueResults(...e){for(let t of e)g.mockImplementationOnce(()=>t)},get startedJobs(){return g.mock.calls.map(([e,t,n])=>({jobName:e,args:t,...n!==void 0&&{options:n}}))},setStartHandler(e){v.mockImplementation(typeof e==`function`?async(t,n,r)=>e(t,n,r):async()=>e)},setResumeHandler(e){y.mockImplementation(typeof e==`function`?async t=>e(t):async()=>e)},setWaitHandler:e=>{b.mockImplementation(typeof e==`function`?(t,n)=>e(t,n):()=>e)},setEnv(e){s({...e})},setResolveHandler(e){x.mockImplementation(async(t,n,r)=>{await e(t,n,r)})},get waitCalls(){return b.mock.calls.map(([e,t])=>({key:e,payload:t}))},get resolveCalls(){return x.mock.calls.map(([e,t])=>({executionId:e,key:t}))},clear(){g.mockClear(),v.mockClear(),y.mockClear(),b.mockClear(),x.mockClear();for(let e of m)e.mockClear()},reset(){g.mockReset(),g.mockImplementation(defaultExecJob),v.mockReset(),v.mockImplementation(defaultStartWorkflow),y.mockReset(),y.mockImplementation(defaultResumeWorkflowExecution),b.mockReset(),b.mockImplementation(()=>null),x.mockReset(),x.mockImplementation(async()=>{});for(let e of m)e.mockReset();o()}},()=>{for(let e of m)e.restore();e.workflow=a,c===void 0?o():s(c)})}const toPlainDate=(e,t)=>e instanceof Date?new t.PlainDate(e.getUTCFullYear(),e.getUTCMonth()+1,e.getUTCDate()):typeof e==`string`?t.PlainDate.from(e):e,toInstant=(e,t)=>e instanceof Date?t.Instant.fromEpochMilliseconds(e.getTime()):typeof e==`string`?t.Instant.fromEpochMilliseconds(t.Instant.from(e).epochMilliseconds):e,toPlainTime=(e,t)=>typeof e==`string`?t.PlainTime.from(e).round({smallestUnit:`minute`,roundingMode:`trunc`}):e;function parseArrayLiteral(e){let t=e.slice(1,-1);return t===``?[]:t.split(`,`).map(e=>e===`NULL`?null:e.startsWith(`"`)?e.slice(1,-1):e)}const eachElement=e=>(t,n)=>{let r=typeof t==`string`&&t.startsWith(`{`)?parseArrayLiteral(t):t;return Array.isArray(r)?r.map(t=>t===null?null:e(t,n)):r},ce={1082:toPlainDate,1184:toInstant,1083:toPlainTime,1182:eachElement(toPlainDate),1185:eachElement(toInstant),1183:eachElement(toPlainTime)};function hostTemporal(){return globalThis.Temporal}function serializeValue(e,t){if(e instanceof t.PlainDate)return e.toString({calendarName:`never`});if(e instanceof t.PlainTime)return`${String(e.hour).padStart(2,`0`)}:${String(e.minute).padStart(2,`0`)}`;if(e instanceof t.Instant)return t.Instant.fromEpochMilliseconds(e.epochMilliseconds).toString();if(Array.isArray(e))return e.map(e=>serializeValue(e,t));if(typeof e==`object`&&e){let n=Object.getPrototypeOf(e);if(n===Object.prototype||n===null)return Object.fromEntries(Object.entries(e).map(([e,n])=>[e,serializeValue(n,t)]))}return e}function serializeTemporalParams(e){let t=hostTemporal();return t?e.map(e=>serializeValue(e,t)):[...e]}function deserializeTemporalRows(e,t=[]){let n=t.flatMap(({name:e,dataTypeID:t})=>{let n=ce[t];return n?[{name:e,convert:n}]:[]});if(n.length===0)return e;let r=hostTemporal();if(!r)throw ReferenceError(`Temporal is unavailable. Use the SDK tailor-runtime Vitest environment to read Temporal values from PGlite.`);return e.map(e=>{let t={...e};for(let{name:e,convert:i}of n)t[e]=i(t[e],r);return t})}var TransactionLock=class{#e=null;#t=[];holds(e){return this.#e===e}async acquire(e){for(;this.#e!==null;)await new Promise(e=>this.#t.push(e));this.#e=e}release(e){this.#e===e&&(this.#e=null,this.#t.shift()?.())}};const le=/^\s*(?:begin|start\s+transaction)\b/i,ue=/^\s*(?:commit\b|rollback\b(?!(?:\s+(?:work|transaction))?\s+to\b))/i;function toQueryObjectResult(e,t){return{command:e.command??(e.affectedRows?`UPDATE`:`SELECT`),rowCount:e.rowCount??(e.affectedRows||e.rows.length),rows:t?deserializeTemporalRows(e.rows,e.fields):e.rows}}function mockTailordbWithPGlite(e){let t=m(),n=t.Client,r=[],i=[],a=/* @__PURE__ */ new Map,o=/* @__PURE__ */ new Set,assertNoOpenTransaction=e=>{if(o.size>0)throw Error(`mockTailordbWithPGlite: ${e}() cannot run while a transaction is open; commit, roll back, or end() its client first`)},defaultClient=function(t){let n=t?.namespace,s=t?.temporal??!1,c=n!==void 0&&Object.hasOwn(e.namespaces,n)?e.namespaces[n]:void 0;if(n===void 0||!c)throw Error(`mockTailordbWithPGlite: no PGlite instance registered for namespace "${n}"`);let l=a.get(c)??new TransactionLock;a.set(c,l);let u={namespace:n,ended:!1};i.push(u);let d=this,run=async(e,t)=>(r.push({namespace:n,query:e,params:t??[]}),toQueryObjectResult(await c.query(e,serializeTemporalParams(t??[])),s)),throwEnded=()=>{throw Error(`mockTailordbWithPGlite: query after end() on this client`)},acquire=async()=>{await l.acquire(d),u.ended&&(l.release(d),throwEnded())},queryObject=async(e,t)=>{if(u.ended&&throwEnded(),le.test(e)){if(l.holds(d))throw Error(`mockTailordbWithPGlite: transaction already open on this client — run nested statements on the transaction callback's trx`);await acquire();try{let n=await run(e,t);return o.add(u),n}catch(e){throw l.release(d),e}}if(ue.test(e)){if(l.holds(d))try{return await run(e,t)}finally{o.delete(u),l.release(d)}await acquire();try{return await run(e,t)}finally{l.release(d)}}if(l.holds(d))return await run(e,t);await acquire();try{return await run(e,t)}finally{l.release(d)}};this.connect=async()=>{},this.end=async()=>{if(u.ended=!0,l.holds(d))try{await run(`rollback`)}finally{o.delete(u),l.release(d)}},this.queryObject=queryObject,this.createTransaction=e=>{if(!e)throw Error(`Transaction name must be a non-empty string`);return{begin:()=>queryObject(`begin`),commit:()=>queryObject(`commit`),rollback:()=>queryObject(`rollback`),queryObject}}},s=R.fn(defaultClient);return t.Client=s,_({Client:s,get executedQueries(){return r},get createdClients(){return i},clear(){assertNoOpenTransaction(`clear`),s.mockClear(),r.length=0,i.length=0},reset(){assertNoOpenTransaction(`reset`),s.mockReset(),s.mockImplementation(defaultClient),r.length=0,i.length=0}},()=>{t.Client=n})}var PendingStart=class{jobName;args;constructor(e,t){this.jobName=e,this.args=t}};async function runWorkflowLocally(e,t,n){let i=globalThis,a=i.tailor,c=r(),l=c!==void 0,u=createLocalJobRunner();n?.env!==void 0&&s({...n.env}),i.tailor={...a,workflow:createLocalWorkflowRuntime(a?.workflow,u.execJobFunction)};try{return await u.runJob(e.mainJob.name,t)}finally{a?i.tailor=a:delete i.tailor,n?.env!==void 0&&(l?s(c):o())}}function createLocalJobRunner(){let t,execJobFunction=(e,n)=>{if(!t)throw Error(`Cannot start workflow job "${e}" outside runWorkflowLocally() job execution.`);if(t.pending)throw t.pending;let r=p(n),i=t.cursor;t.cursor+=1;let a=t.records[i];if(a){if(assertSameStart(a,e,r),a.status===`rejected`)throw a.error;return p(a.result)}let o=new PendingStart(e,r);throw t.pending=o,o},runJob=async(n,r)=>{let i=e(n);if(!i)return null;let o=[];for(;;){let e={records:o,cursor:0},s=t;t=e;try{let t=await i(p(r),a());if(e.pending){await settlePendingStart(o,e.pending,runJob);continue}if(e.cursor!==o.length)throw Error(`Workflow job start sequence changed while replaying "${n}". Expected ${o.length} start(s), but replay reached ${e.cursor}.`);return p(t)}catch(t){let n=t instanceof PendingStart?t:e.pending;if(n){await settlePendingStart(o,n,runJob);continue}throw t}finally{t=s}}};return{runJob,execJobFunction}}async function settlePendingStart(e,t,n){try{e.push({jobName:t.jobName,args:t.args,status:`fulfilled`,result:await n(t.jobName,t.args)})}catch(n){e.push({jobName:t.jobName,args:t.args,status:`rejected`,error:n})}}function assertSameStart(e,t,n){if(e.jobName!==t||JSON.stringify(e.args)!==JSON.stringify(n))throw Error(`Workflow job start sequence changed while replaying. Expected ${e.jobName}(${JSON.stringify(e.args)}), but got ${t}(${JSON.stringify(n)}).`)}function createLocalWorkflowRuntime(e,n){return{execJobFunction:n,startWorkflow:async(n,r,i)=>e?await e.startWorkflow(n,r,i):(p(r),t),resumeWorkflowExecution:async t=>e?await e.resumeWorkflowExecution(t):t,wait:(t,n)=>{if(e)return e.wait(t,n);throw Error(`No wait handler for "${t}". Acquire mockWorkflow() and call setWaitHandler(...).`)},resolve:async(t,n,r)=>{if(e)await e.resolve(t,n,r);else throw Error(`No resolve handler. Acquire mockWorkflow() and call setResolveHandler(...).`)}}}function unwrapValue(e){return ie.is(e)?e.value:e}function insertRows(e){if(!D.is(e))throw Error(`insertRows: expected InsertQueryNode, got ${e.kind}`);let t=e.columns,n=e.values;if(t===void 0||n===void 0||!N.is(n))throw Error(`insertRows: unsupported insert shape; inspect query.node instead`);return n.values.map(e=>{if(!j.is(e)&&!re.is(e))throw Error(`insertRows: unsupported insert shape; inspect query.node instead`);let n=j.is(e)?e.values:e.values.map(unwrapValue),r={};return t.forEach((e,t)=>{r[e.column.name]=n[t]}),r})}function insertValues(e){let t=insertRows(e);if(t.length!==1)throw Error(`insertValues: query inserts ${t.length} rows; use insertRows() for multi-row inserts`);return c(t[0],`insertValues: first row missing`)}function updateValues(e){if(!ne.is(e))throw Error(`updateValues: expected UpdateQueryNode, got ${e.kind}`);if(e.updates===void 0)throw Error(`updateValues: unsupported update shape; inspect query.node instead`);let t={};for(let n of e.updates){let e=n.column,r=T.is(e)?e.column.name:M.is(e)&&T.is(e.column)?e.column.column.name:void 0;if(r===void 0)throw Error(`updateValues: unsupported update shape; inspect query.node instead`);t[r]=unwrapValue(n.value)}return t}function toExecutedQuery(e){let t=e.query;return{kind:t.kind,sql:e.sql,parameters:e.parameters,node:t,insertRows:()=>insertRows(t),insertValues:()=>insertValues(t),updateValues:()=>updateValues(t)}}function toStagedResult(e){return Array.isArray(e)?{rows:e,numAffectedRows:void 0}:{rows:e.rows??[],numAffectedRows:e.numAffectedRows===void 0?void 0:BigInt(e.numAffectedRows)}}var MockState=class{executed=[];queue=[];resolver;enqueue(...e){this.queue.push(...e)}setResolver(e){this.resolver=e}next(e){let t=this.resolver?.(e);if(t!==void 0)return toStagedResult(t);let n=this.queue.shift();return n===void 0?{rows:[],numAffectedRows:void 0}:toStagedResult(n)}reset(){this.executed.length=0,this.queue.length=0,this.resolver=void 0}},MockConnection=class{state;constructor(e){this.state=e}async executeQuery(e){let t=toExecutedQuery(e);this.state.executed.push(t);let{rows:n,numAffectedRows:r}=this.state.next(t);return{rows:n,numAffectedRows:r??BigInt(n.length)}}streamQuery(){throw Error(`createKyselyMock: streaming is not supported`)}},MockDriver=class{state;constructor(e){this.state=e}async init(){}async acquireConnection(){return new MockConnection(this.state)}async beginTransaction(){}async commitTransaction(){}async rollbackTransaction(){}async releaseConnection(){}async destroy(){}};function byKind(e,t){return e.executed.filter(e=>e.kind===t)}function createKyselyMock(){let e=new MockState,t=new O({dialect:{createDriver:()=>new MockDriver(e),createQueryCompiler:()=>new A,createAdapter:()=>new te,createIntrospector:e=>new k(e)}});return{db:t,get executedQueries(){return e.executed},get selects(){return byKind(e,`SelectQueryNode`)},get inserts(){return byKind(e,`InsertQueryNode`)},get updates(){return byKind(e,`UpdateQueryNode`)},get deletes(){return byKind(e,`DeleteQueryNode`)},enqueueResult:t=>e.enqueue(t),enqueueResults:(...t)=>e.enqueue(...t),setQueryResolver:t=>e.setResolver(t),withTx:e=>t.transaction().execute(e),reset:()=>e.reset(),[Symbol.dispose]:()=>e.reset()}}var PGliteConnection=class{#e;#t;constructor(e,t){this.#e=e,this.#t=t}async executeQuery(e){let t=await this.#e.query(e.sql,serializeTemporalParams(e.parameters));return{rows:this.#t?deserializeTemporalRows(t.rows,t.fields):t.rows,numAffectedRows:BigInt(t.affectedRows??0)}}streamQuery(){throw Error(`createKyselyPGlite: streaming is not supported`)}},PGliteDriver=class{#e;#t;constructor(e,t){this.#e=e,this.#t=t}async init(){}async acquireConnection(){return new PGliteConnection(this.#e,this.#t)}async beginTransaction(e,t){let n=t.isolationLevel?[`start transaction`,`isolation level ${t.isolationLevel}`]:[`begin`];t.accessMode&&n.push(t.accessMode),await e.executeQuery(E.raw(n.join(` `)))}async commitTransaction(e){await e.executeQuery(E.raw(`commit`))}async rollbackTransaction(e){await e.executeQuery(E.raw(`rollback`))}async releaseConnection(){}async destroy(){await this.#e.close()}};function createKyselyPGlite(e,t={}){let n=t.temporal??!1;return new O({dialect:{createAdapter:()=>new ee,createDriver:()=>new PGliteDriver(e,n),createIntrospector:e=>new k(e),createQueryCompiler:()=>new A}})}const Q=`session_replication_role`,$=/* @__PURE__ */ new WeakMap;function setReplicationRole(e,t){return e.query(`SELECT set_config($1, $2, false)`,[Q,t])}async function uncheckRelations(e){let t=(await e.query(`SHOW ${Q}`)).rows[0]?.[Q];return await setReplicationRole(e,`replica`),typeof t==`string`?t:`origin`}async function prepareFixtures(e,t){let n=$.get(e)??{active:0,previous:uncheckRelations(e)};n.active+=1,$.set(e,n);let r;try{return r=await n.previous,await t()}finally{--n.active,n.active===0&&($.delete(e),r!==void 0&&await setReplicationRole(e,r))}}var MigrationStepError=class extends Error{step;completedSteps;constructor(e,t,n){super(`Migration step "${e}" failed: ${n instanceof Error?n.message:String(n)}`,{cause:n}),this.name=`MigrationStepError`,this.step=e,this.completedSteps=t}};async function runMigrationSteps(e,t){let n=d(Object.entries(e).map(([e,t])=>({name:e,dependsOn:t.dependsOn??[]}))),r=[];for(let i of n){let n=c(e[i],`Migration step "${i}" is not defined.`),a={env:structuredClone(t.env??{})};try{await t.transaction(e=>n.run(e,a))}catch(e){throw new MigrationStepError(i,[...r],e)}r.push(i)}return r}function tailorRuntime(e){return[createBlockPlugin(),createEnvironmentPlugin(e)]}export{MigrationStepError,g as applyDateRepresentation,createKyselyMock,createKyselyPGlite,mockAigateway,mockAuthconnection,mockFile,mockIconv,mockIdp,mockLogger,v as mockSecretmanager,mockTailordb,mockTailordbWithPGlite,mockWorkflow,prepareFixtures,runMigrationSteps,runWorkflowLocally,tailorRuntime};
1
+ import{i as e,t}from"../registry-BijIDRVA.mjs";import{a as n,c as r,i,o as a,s as o,u as s}from"../wait-point-invoker-eiP-IIux.mjs";import{t as c}from"../assert-WeXvmG4j.mjs";import{n as l,r as u}from"../node-builtins-DYfhPBnz.mjs";import{t as d}from"../syntax-diagnostic-BQgOV8Fz.mjs";import{n as f,r as p}from"../migration-steps-C6F3zNdQ.mjs";import{t as m}from"../platform-serialize-DkiTdHOt.mjs";import{a as h,i as g,n as _,o as v,r as y}from"../date-representation-Cr7W7Pn2.mjs";import*as b from"node:module";import{createRequire as x}from"node:module";import{isEqual as ee}from"es-toolkit";import{existsSync as te}from"node:fs";import{fileURLToPath as S,pathToFileURL as C}from"node:url";import{ColumnNode as w,CompiledQuery as T,InsertQueryNode as ne,Kysely as E,PGliteAdapter as re,PostgresAdapter as D,PostgresIntrospector as O,PostgresQueryCompiler as k,PrimitiveValueListNode as A,ReferenceNode as j,UpdateQueryNode as ie,ValueListNode as M,ValueNode as N,ValuesNode as P}from"kysely";import{dirname as F,isAbsolute as I,matchesGlob as ae,relative as L,resolve as R}from"node:path";import{vi as z}from"vitest";function isBlockedModule(e){return u(e)}function getBlockedMessage(e){return l(e)}function dateDefaultFromConfig(e){let t=e&&typeof e==`object`?e.default:void 0,n=t&&typeof t==`object`?t.defaultDateRepresentation:void 0;if(n===void 0)return`legacy`;if(n===`temporal`||n===`date`)return n;throw Error(`defaultDateRepresentation must be "temporal", "date", or omitted, but tailor.config.ts sets ${JSON.stringify(n)}.`)}let B=Promise.resolve();function serialize(e){let t=B.then(e,e);return B=t.catch(()=>void 0),t}async function importLikeCli(e){let t=C(e).href,n=p();try{if(`Bun`in globalThis||`Deno`in globalThis)return await import(t);let{resolveSync:e,loadSync:n}=await import(C(R(F(S(import.meta.url)),`../cli/ts-hook.mjs`)).href),r=b.registerHooks({resolve:e,load:n});try{return await import(t)}finally{r.deregister?.()}}finally{n()}}function isSourceParseError(e){return typeof e==`object`&&!!e&&e.code===`InvalidSyntax`}function describeError(e){return e instanceof Error?e.message:String(e)}function describeParseError(e,t){if(!d(e))return`${t}: ${describeError(e)}`;let{message:n,filename:r,startLine:i}=e;return`${r}${i===void 0?``:`:${i}`}: ${n}`}async function loadDateDefaultFromConfig(e){if(!te(e))throw Error(`tailor-runtime: tailor.config.ts not found at ${e}. Check the \`config\` option of tailorRuntime().`);let t;try{t=await serialize(()=>importLikeCli(e))}catch(t){if(isSourceParseError(t))throw Error(`tailor-runtime could not parse ${describeParseError(t,e)}`,{cause:t});return console.warn(`tailor-runtime could not load ${e} to read defaultDateRepresentation; t date fields use string values in this run. If the config sets "temporal" or "date", tests disagree with tailor.d.ts until the error is fixed: ${describeError(t)}`),`legacy`}return dateDefaultFromConfig(t)}const V=[`**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}`],H=/* @__PURE__ */ new Set([`ImportDeclaration`,`ExportNamedDeclaration`,`ExportAllDeclaration`]),U=/* @__PURE__ */ new Set(/* @__PURE__ */ `break.case.catch.class.const.continue.debugger.default.delete.do.else.enum.export.extends.false.finally.for.function.if.import.in.instanceof.new.null.return.super.switch.this.throw.true.try.typeof.var.void.while.with.yield.let.static.implements.interface.package.private.protected.public.await.arguments.eval`.split(`.`)),W=/^[A-Za-z_$]/,G=/^[A-Za-z0-9_$]*$/;function isSafeBindingName(e){if(U.has(e)||e.length===0)return!1;let t=e[0];return t!==void 0&&W.test(t)&&G.test(e.slice(1))}function buildBlockedReplacement(e,t){let n=JSON.stringify(t),r=`throw new Error(${n});`,i=`(() => { throw new Error(${n}); })()`;if(e.type===`ExportNamedDeclaration`){let t=e.specifiers??[],n=[];for(let e of t){let t=e.exported?.name;if(typeof t==`string`){if(t==="default")n.push(`export default ${i};`);else{if(!isSafeBindingName(t))return r;n.push(`export const ${t} = ${i};`)}}}return n.length>0?n.join(` `):r}if(e.type===`ExportAllDeclaration`){let t=e.exported?.name;return typeof t==`string`&&isSafeBindingName(t)?`export const ${t} = ${i};`:r}return r}const toFileList=e=>Array.isArray(e)?e:e?[e]:[];let K;function supportsDefaultProjectInheritance(){if(K===void 0)try{let{version:e}=x(import.meta.url)(`vitest/package.json`);K=Number.parseInt(e,10)>=5}catch{K=!1}return K}function createBlockPlugin(){let isTestFile=()=>!1,isUserSourceFile=()=>!1;return{name:`tailor-runtime-block-node`,configResolved(e){let t=e.test,n=t?.root??e.root,toAbsolutePaths=(e,t)=>toFileList(e).map(e=>R(t,e)),r=/* @__PURE__ */ new Set([...toAbsolutePaths(t?.setupFiles,n),...toAbsolutePaths(t?.globalSetup,n)]),i=[{root:n,patterns:t?.include??V}];for(let e of t?.projects??[]){let t=e.test;if(!t)continue;let a=t.root??n;for(let e of toAbsolutePaths(t.setupFiles,a))r.add(e);for(let e of toAbsolutePaths(t.globalSetup,a))r.add(e);i.push({root:a,patterns:t.include??V})}isTestFile=e=>r.has(e)?!0:i.some(({root:t,patterns:n})=>{let r=I(e)?L(t,e):e;return n.some(e=>ae(r,e))}),isUserSourceFile=e=>{if(!I(e))return!1;let t=L(n,e);return t!==``&&!t.startsWith(`..`)&&!I(t)}},transform(e,t){let n=t.search(/[?#]/),r=n===-1?t:t.slice(0,n);if(isTestFile(r)||r.includes(`node_modules`)||!isUserSourceFile(r))return;let i;try{i=this.parse(e)}catch{return}let a=[];for(let e of i.body){if(!H.has(e.type))continue;let t=e.source?.value;typeof t==`string`&&isBlockedModule(t)&&a.push({start:e.start,end:e.end,replacement:buildBlockedReplacement(e,getBlockedMessage(t))})}if(a.length===0)return;let o=e;for(let e of a.toSorted((e,t)=>t.start-e.start))o=o.slice(0,e.start)+e.replacement+o.slice(e.end);return{code:o,map:null}}}}function setConfigEnv(e,t,n){e.env={...e.env,__TAILOR_RUNTIME_CONFIG:t,__TAILOR_RUNTIME_DATE_DEFAULT:n}}function createEnvironmentPlugin(e,t=loadDateDefaultFromConfig){let n=F(S(import.meta.url)),r=R(n,`environment.mjs`),i=R(n,`setup.mjs`),a=/* @__PURE__ */ new Map,dateDefaultOf=e=>{let n=a.get(e);return n||(n=t(e),a.set(e,n)),n},selectsTailorRuntime=e=>e===`tailor-runtime`||e===r;return{name:`tailor-runtime-environment`,async config(t){let n=t.test,a=!!n&&selectsTailorRuntime(n.environment);if(n&&a&&(n.environment=r),n?.projects)for(let o of n.projects){if(typeof o==`string`)continue;let n=o.test??={};if(!(n.environment===void 0&&a&&(o.extends===!0||o.extends===void 0&&supportsDefaultProjectInheritance()))&&!selectsTailorRuntime(n.environment)){e?.config&&setConfigEnv(n,``,``);continue}n.environment=r;let s=toFileList(n.setupFiles);if(s.includes(i)||(n.setupFiles=[...s,i]),e?.config){let r=o.root??n.root??t.root??process.cwd(),i=R(r,e.config);setConfigEnv(n,i,await dateDefaultOf(i))}}if(e?.config&&n){let r=n.root??t.root??process.cwd(),i=a?R(r,e.config):``;setConfigEnv(n,i,i?await dateDefaultOf(i):``)}let o=toFileList(n?.setupFiles);return n&&typeof n.setupFiles==`string`&&(n.setupFiles=o),!a||o.includes(i)?{}:{test:{setupFiles:[i]}}}}}function mockAigateway(e={}){let t=g(),n=t.aigateway,r={...e.urls};async function defaultGet(e){let t=r[e];if(t===void 0)throw Error(`No AI Gateway registered for "${e}". Acquire mockAigateway() and call setUrls(...).`);return{url:t}}let i=z.fn(defaultGet);return t.aigateway={get:i},v({get:i,setUrls(e){r=e},setUrl(e,t){r={...r,[e]:t}},get calls(){return i.mock.calls.map(([e])=>({name:e}))},clear(){i.mockClear()},reset(){r={},i.mockReset(),i.mockImplementation(defaultGet)}},()=>{t.aigateway=n})}function mockAuthconnection(e={}){let t=g(),n=t.authconnection,r={...e.tokens};async function defaultGetConnectionToken(t){let n=r[t];if(n)return n;if(e.onUnhandled===`error`)throw Error(`No AuthConnection token configured for "${t}"`);return{access_token:`mock-token`}}let i=z.fn(defaultGetConnectionToken);return t.authconnection={getConnectionToken:i},v({getConnectionToken:i,setTokens(e){r=e},setToken(e,t){r={...r,[e]:t}},get calls(){return i.mock.calls.map(([e])=>({connectionName:e}))},clear(){i.mockClear()},reset(){r={},i.mockReset(),i.mockImplementation(defaultGetConnectionToken)}},()=>{t.authconnection=n})}const q=[`upload`,`download`,`downloadAsBase64`,`delete`,`getMetadata`,`downloadStream`,`uploadStream`],oe={upload:{metadata:{fileSize:0,sha256sum:``}},download:{data:/* @__PURE__ */ new Uint8Array,metadata:{contentType:``,fileSize:0,sha256sum:``,lastUploadedAt:``}},downloadAsBase64:{data:``,metadata:{contentType:``,fileSize:0,sha256sum:``,lastUploadedAt:``}},getMetadata:{contentType:``,fileSize:0,sha256sum:``,urlPath:``},downloadStream:null,uploadStream:{metadata:{fileSize:0,sha256sum:``}}};function mockFile(e={}){let t=h(),n=t.file,{onUnhandled:r=`fallback`}=e,i=[],a=[],resolver=()=>null;function handle(e,t,n,a,o){if(i.length>0)return i.shift();let s=resolver(e,{method:e,namespace:t,tableName:n,fieldName:a,recordId:o});if(s!=null)return s;if(r===`error`)throw Error(`No File mock configured for "${e}"`);let c=oe[e];return c===void 0?void 0:structuredClone(c)}let o=z.fn(async(...e)=>{let[t,n,r,i]=e;return handle(`upload`,t,n,r,i)}),s=z.fn(async(...e)=>handle(`download`,...e)),c=z.fn(async(...e)=>handle(`downloadAsBase64`,...e)),l=z.fn(async(...e)=>{handle(`delete`,...e)}),u=z.fn(async(...e)=>handle(`getMetadata`,...e)),d=z.fn(async(...e)=>handle(`downloadStream`,...e)??{body:new ReadableStream({start(e){e.close()}}),metadata:{contentType:``,fileSize:0,sha256sum:``,lastUploadedAt:``}}),f=z.fn(async(...e)=>{let[t,n,r,i]=e;return handle(`uploadStream`,t,n,r,i)}),p={upload:o,download:s,downloadAsBase64:c,delete:l,getMetadata:u,downloadStream:d,uploadStream:f};function track(e,t){return function(...n){return a.push({method:e,namespace:n[0],tableName:n[1],fieldName:n[2],recordId:n[3]}),t.apply(this,n)}}t.file={upload:track(`upload`,o),download:track(`download`,s),downloadAsBase64:track(`downloadAsBase64`,c),delete:track(`delete`,l),getMetadata:track(`getMetadata`,u),downloadStream:track(`downloadStream`,d),uploadStream:track(`uploadStream`,f)};function allMocks(){return q.map(e=>p[e])}let m={...p,setResolver(e){resolver=e},enqueueResult(e){i.push(e)},enqueueResults(...e){i.push(...e)},get calls(){return a},clear(){a.length=0;for(let e of allMocks())e.mockClear()},reset(){i.length=0,a.length=0,resolver=()=>null;for(let e of allMocks())e.mockReset()}};return v(m,()=>{t.file=n})}function isUtf8(e){return e===`UTF8`||e===`UTF-8`}function defaultIconvResult(e,t){switch(e){case`convert`:case`convertBuffer`:return isUtf8(t[2])?``:/* @__PURE__ */ new Uint8Array;case`decode`:return``;case`encode`:return isUtf8(t[1])?``:/* @__PURE__ */ new Uint8Array;case`encodings`:return[]}}function mockIconv(e={}){let t=g(),n=t.iconv,r=null,i=[];function resolve(t,n){if(r){let e=r(t,n);if(e!=null)return e}if(e.onUnhandled===`error`)throw Error(`No Iconv mock behavior configured for "${t}"`);return defaultIconvResult(t,n)}function defaultConvert(e,t,n){return resolve(`convert`,[e,t,n])}function defaultConvertBuffer(e,t,n){return resolve(`convertBuffer`,[e,t,n])}function defaultDecode(e,t){return resolve(`decode`,[e,t])}function defaultEncode(e,t){return resolve(`encode`,[e,t])}function defaultEncodings(){return resolve(`encodings`,[])}let a=z.fn(defaultConvert),o=z.fn(defaultConvertBuffer),s=z.fn(defaultDecode),c=z.fn(defaultEncode),l=z.fn(defaultEncodings);function track(e,t){return function(...n){return i.push({method:e,args:[...n]}),t.apply(this,n)}}let u=track(`convert`,a),d=track(`convertBuffer`,o),f=track(`decode`,s),p=track(`encode`,c),m=track(`encodings`,l);class MockIconv{#e;#t;constructor(e,t){this.#e=e,this.#t=t}convert(e){return u.call(this,e,this.#e,this.#t)}}t.iconv={convert:u,convertBuffer:d,decode:f,encode:p,encodings:m,Iconv:MockIconv};function clear(){i.length=0,a.mockClear(),o.mockClear(),s.mockClear(),c.mockClear(),l.mockClear()}return v({convert:a,convertBuffer:o,decode:s,encode:c,encodings:l,setResolver(e){r=e},get calls(){return i},clear,reset(){r=null,i.length=0,a.mockReset(),a.mockImplementation(defaultConvert),o.mockReset(),o.mockImplementation(defaultConvertBuffer),s.mockReset(),s.mockImplementation(defaultDecode),c.mockReset(),c.mockImplementation(defaultEncode),l.mockReset(),l.mockImplementation(defaultEncodings)}},()=>{t.iconv=n})}const se=[`users`,`user`,`userByName`,`createUser`,`updateUser`,`deleteUser`,`sendPasswordResetEmail`,`unenrollMfa`],J={id:`mock-id`,name:`mock-user`,disabled:!1,mfaEnrolled:!1,mfaFactorIds:[],passwordUpdatedAt:null},ce={users:{users:[],nextPageToken:null,totalCount:0},user:J,userByName:J,createUser:J,updateUser:J,deleteUser:!0,sendPasswordResetEmail:!0,unenrollMfa:!0};function mockIdp(e={}){let t=g(),n=t.idp,{onUnhandled:r=`fallback`}=e,i=[],a=[],resolver=()=>null,o=/* @__PURE__ */ new Map;function compatibilityArgs(e,t){return e===`users`&&t.length===0?[void 0]:t}function handle(e,t,n){if(i.length>0)return i.shift();let a=resolver(e,compatibilityArgs(e,t),n);if(a!=null)return a;if(r===`error`)throw Error(`No IdP mock configured for "${n}.${e}"`);return structuredClone(ce[e])}function createNamespaceMocks(e){return{users:z.fn(async(...t)=>handle(`users`,t,e)),user:z.fn(async(...t)=>handle(`user`,t,e)),userByName:z.fn(async(...t)=>handle(`userByName`,t,e)),createUser:z.fn(async(...t)=>handle(`createUser`,t,e)),updateUser:z.fn(async(...t)=>handle(`updateUser`,t,e)),deleteUser:z.fn(async(...t)=>handle(`deleteUser`,t,e)),sendPasswordResetEmail:z.fn(async(...t)=>handle(`sendPasswordResetEmail`,t,e)),unenrollMfa:z.fn(async(...t)=>handle(`unenrollMfa`,t,e))}}function namespace(e){let t=o.get(e);if(t)return t;let n=createNamespaceMocks(e);return o.set(e,n),n}function track(e,t,n){return function(...r){return a.push({method:e,args:[...compatibilityArgs(e,r)],namespace:n}),t.apply(this,r)}}let defaultClient=function(e){let t=namespace(e.namespace);this.users=track(`users`,t.users,e.namespace),this.user=track(`user`,t.user,e.namespace),this.userByName=track(`userByName`,t.userByName,e.namespace),this.createUser=track(`createUser`,t.createUser,e.namespace),this.updateUser=track(`updateUser`,t.updateUser,e.namespace),this.deleteUser=track(`deleteUser`,t.deleteUser,e.namespace),this.sendPasswordResetEmail=track(`sendPasswordResetEmail`,t.sendPasswordResetEmail,e.namespace),this.unenrollMfa=track(`unenrollMfa`,t.unenrollMfa,e.namespace)},s=z.fn(defaultClient);t.idp={Client:s};function allMocks(){return[...o.values()].flatMap(e=>se.map(t=>e[t]))}return v({Client:s,namespace,setResolver(e){resolver=e},enqueueResult(e){i.push(e)},enqueueResults(...e){i.push(...e)},get calls(){return a},clear(){a.length=0,s.mockClear();for(let e of allMocks())e.mockClear()},reset(){i.length=0,a.length=0,resolver=()=>null,s.mockReset(),s.mockImplementation(defaultClient);for(let e of allMocks())e.mockReset()}},()=>{t.idp=n})}function mockLogger(e={}){let t=g(),n=t.logger,r=z.fn((e,t)=>{}),i=z.fn((e,t)=>{}),a=z.fn((e,t)=>{}),o=z.fn((e,t)=>{}),s=z.fn(e=>{});t.logger={debug:r,info:i,warn:a,error:o,setAttributes:s};let c={debug:r,info:i,warn:a,error:o};return v({debug:r,info:i,warn:a,error:o,setAttributes:s,get calls(){return Object.entries(c).flatMap(([e,t])=>t.mock.calls.map((n,r)=>({order:t.mock.invocationCallOrder[r]??0,call:{severity:e,message:n[0],attributes:n[1]}}))).toSorted((e,t)=>e.order-t.order).map(e=>e.call)},clear(){r.mockClear(),i.mockClear(),a.mockClear(),o.mockClear(),s.mockClear()},reset(){r.mockReset(),i.mockReset(),a.mockReset(),o.mockReset(),s.mockReset()}},()=>{t.logger=n})}function testRegex(e,t){let n=e.lastIndex;e.lastIndex=0;try{return e.test(t)}finally{e.lastIndex=n}}var MockQueryResult=class{command;rowCount;rows;constructor(e){this.command=``,this.rowCount=e.length,this.rows=e}};function mockTailordb(e={}){let t=h(),n=t.Client,r=[],i;function matchesQuery(e,t,n){if(typeof e==`function`)return e(t,n);if(typeof e==`string`)return t===e;if(e instanceof RegExp)return testRegex(e,t);let r;if(r=typeof e.sql==`string`?t===e.sql:testRegex(e.sql,t),!r||e.params===void 0)return r;if(typeof e.params==`function`)return e.params(n);let i=e.params;return n.length===i.length&&n.every((e,t)=>ee(e,i[t]))}function queryResponse(e){if(e.type===`error`)throw e.error;return new MockQueryResult(e.rows)}async function defaultQuery(t,n=[]){for(let e=r.length-1;e>=0;--e){let i=r[e];if(!i||!matchesQuery(i.matcher,t,n))continue;let a=i.once.shift();if(a)return queryResponse(a);if(i.fallback)return queryResponse(i.fallback)}if(i)return new MockQueryResult(i(t,n)??[]);if(e.onUnhandled===`error`)throw Error(`No TailorDB query behavior matched: ${t}`);return new MockQueryResult([])}let a=z.fn(defaultQuery),defaultConnect=async()=>{},o=z.fn(defaultConnect),s=[];function enqueueRowsList(e){for(let t of e)a.mockImplementationOnce(async()=>new MockQueryResult(t))}let defaultClient=function(e){let t={namespace:e?.namespace,ended:!1};s.push(t),this.connect=o,this.end=z.fn(async()=>{t.ended=!0}),this.queryObject=a,this.createTransaction=e=>{if(!e)throw Error(`Transaction name must be a non-empty string`);return{begin:async()=>{},commit:async()=>{},rollback:async()=>{},queryObject:a}}},c=z.fn(defaultClient);return t.Client=c,v({Client:c,queryObject:a,setQueryResolver(e){i=e,a.mockImplementation(defaultQuery)},onQuery(e){let t={matcher:e,once:[]};r.push(t);let n={returnsRows(e){return t.fallback={type:`rows`,rows:e},n},returnsRowsOnce(e){return t.once.push({type:`rows`,rows:e}),n},rejects(e){return t.fallback={type:`error`,error:e},n},rejectsOnce(e){return t.once.push({type:`error`,error:e}),n}};return n},enqueueResult(...e){enqueueRowsList([e])},enqueueResults(...e){enqueueRowsList(e)},enqueueRows(...e){enqueueRowsList(e)},get executedQueries(){return a.mock.calls.map(([e,t])=>({query:e,params:t??[]}))},get createdClients(){return s},clear(){a.mockClear(),o.mockClear(),c.mockClear(),s.length=0},reset(){a.mockReset(),a.mockImplementation(defaultQuery),o.mockReset(),o.mockImplementation(defaultConnect),c.mockReset(),c.mockImplementation(defaultClient),s.length=0,r.length=0,i=void 0}},()=>{t.Client=n})}const Y=/* @__PURE__ */ new WeakMap,X=/* @__PURE__ */ new WeakMap,Z=/* @__PURE__ */ new WeakMap;function replaceProcedure(e,t,n){let r=Z.get(n)??n,i=z.fn(function(...e){return Reflect.apply(r,this,e)});Z.set(i,r);let a=e;return a[t]=i,{mock:i,scoped:{mockClear:()=>i.mockClear(),mockReset:()=>i.mockReset(),restore:()=>{a[t]===i&&(a[t]=n)}}}}function replaceStart(e){return replaceProcedure(e,`start`,e.start)}function mockWorkflow(){let e=g(),a=e.workflow,c=r(),l=/* @__PURE__ */ new Map,u=/* @__PURE__ */ new Map,d=/* @__PURE__ */ new Map,f=/* @__PURE__ */ new Map,p=/* @__PURE__ */ new Set,installKeyDispatcher=e=>{let t=f.get(e);if(t)return t;let n=i(e);if(!n)throw Error(`waitPointWith expects a wait point definition created by createWaitPoint or createWaitPoints.`);let r=n,a=n.wait,o=n.resolve,s=Y.get(a)??a,c=X.get(o)??o,l={perKey:/* @__PURE__ */ new Map,originalWait:(e,t)=>s.call(n,e,t),originalResolve:(e,t,r)=>c.call(n,e,t,r)},dispatchWait=(e,t)=>{let n=l.perKey.get(e);return n?t===void 0?n.wait():n.wait(t):l.originalWait(e,t)},dispatchResolve=async(e,t,n)=>{let r=l.perKey.get(e);if(!r)return l.originalResolve(e,t,n);await r.resolve(t,n)};Y.set(dispatchWait,s),X.set(dispatchResolve,c),r.wait=dispatchWait,r.resolve=dispatchResolve;let eachSpy=e=>{for(let t of l.perKey.values()){let n=t;e(n.wait),e(n.resolve)}};return p.add({mockClear:()=>eachSpy(e=>e.mockClear()),mockReset:()=>eachSpy(e=>e.mockReset()),restore:()=>{r.wait=a,r.resolve=o,f.delete(e)}}),f.set(e,l),l},defaultExecJob=(e,t,n)=>{throw Error(`No workflow job mock for "${e}". Call mockWorkflow().setJobHandler(...) or enqueueResult(...), or use runWorkflowLocally() for local workflow execution.`)},defaultStartWorkflow=async(e,n,r)=>t,defaultResumeWorkflowExecution=async e=>e,h=z.fn(defaultExecJob),_=z.fn(defaultStartWorkflow),y=z.fn(defaultResumeWorkflowExecution),b=z.fn((e,t)=>null),x=z.fn(async(e,t,n)=>{});return e.workflow={execJobFunction:(...e)=>{let t=e.length>=3?h(e[0],m(e[1]),e[2]):h(e[0],m(e[1]));return t instanceof Promise?t.then(e=>m(e)):m(t)},startWorkflow:(...e)=>e.length>=3?_(e[0],m(e[1]),e[2]):_(e[0],m(e[1])),resumeWorkflowExecution:e=>y(e),wait:(e,t)=>b(e,m(t)),resolve:(e,t,n)=>x(e,t,e=>{let t=n(e);return t instanceof Promise?t.then(e=>m(e)):m(t)})},v({execJobFunction:h,startWorkflow:_,resumeWorkflowExecution:y,wait:b,resolve:x,job(e){let t=l.get(e);if(t)return t;let{mock:n,scoped:r}=replaceStart(e);return p.add(r),l.set(e,n),n},workflow(e){let t=u.get(e);if(t)return t;let{mock:n,scoped:r}=replaceStart(e);return u.set(e,n),p.add(r),n},waitPoint(e){let t=d.get(e);if(t)return t;let n=replaceProcedure(e,`wait`,e.wait),r=replaceProcedure(e,`resolve`,e.resolve),i=n.mock,a=r.mock;p.add(n.scoped),p.add(r.scoped);let o={wait:i,resolve:a,setResolvePayload(e){a.mockImplementation(async(t,n)=>{let r=await n(m(e));m(r)})}};return d.set(e,o),o},waitPointWith(e,t){let r=n(e.with(t));if(r===void 0)throw Error(`waitPointWith expects a wait point declared with $params. Use waitPoint() for a wait point with a fixed key.`);let i=installKeyDispatcher(e),a=i.perKey.get(r);if(a)return a;let o=z.fn(e=>Promise.resolve(i.originalWait(r,e))),s=z.fn((e,t)=>i.originalResolve(r,e,t)),c={wait:o,resolve:s,setResolvePayload(e){s.mockImplementation(async(t,n)=>{let r=await n(m(e));m(r)})}};return i.perKey.set(r,c),c},setJobHandler(e){h.mockImplementation((t,n,r)=>e(t,n,r))},enqueueResult(e){h.mockImplementationOnce(()=>e)},enqueueResults(...e){for(let t of e)h.mockImplementationOnce(()=>t)},get startedJobs(){return h.mock.calls.map(([e,t,n])=>({jobName:e,args:t,...n!==void 0&&{options:n}}))},setStartHandler(e){_.mockImplementation(typeof e==`function`?async(t,n,r)=>e(t,n,r):async()=>e)},setResumeHandler(e){y.mockImplementation(typeof e==`function`?async t=>e(t):async()=>e)},setWaitHandler:e=>{b.mockImplementation(typeof e==`function`?(t,n)=>e(t,n):()=>e)},setEnv(e){s({...e})},setResolveHandler(e){x.mockImplementation(async(t,n,r)=>{await e(t,n,r)})},get waitCalls(){return b.mock.calls.map(([e,t])=>({key:e,payload:t}))},get resolveCalls(){return x.mock.calls.map(([e,t])=>({executionId:e,key:t}))},clear(){h.mockClear(),_.mockClear(),y.mockClear(),b.mockClear(),x.mockClear();for(let e of p)e.mockClear()},reset(){h.mockReset(),h.mockImplementation(defaultExecJob),_.mockReset(),_.mockImplementation(defaultStartWorkflow),y.mockReset(),y.mockImplementation(defaultResumeWorkflowExecution),b.mockReset(),b.mockImplementation(()=>null),x.mockReset(),x.mockImplementation(async()=>{});for(let e of p)e.mockReset();o()}},()=>{for(let e of p)e.restore();e.workflow=a,c===void 0?o():s(c)})}const toPlainDate=(e,t)=>e instanceof Date?new t.PlainDate(e.getUTCFullYear(),e.getUTCMonth()+1,e.getUTCDate()):typeof e==`string`?t.PlainDate.from(e):e,toInstant=(e,t)=>e instanceof Date?t.Instant.fromEpochMilliseconds(e.getTime()):typeof e==`string`?t.Instant.fromEpochMilliseconds(t.Instant.from(e).epochMilliseconds):e,toPlainTime=(e,t)=>typeof e==`string`?t.PlainTime.from(e).round({smallestUnit:`minute`,roundingMode:`trunc`}):e;function parseArrayLiteral(e){let t=e.slice(1,-1);return t===``?[]:t.split(`,`).map(e=>e===`NULL`?null:e.startsWith(`"`)?e.slice(1,-1):e)}const eachElement=e=>(t,n)=>{let r=typeof t==`string`&&t.startsWith(`{`)?parseArrayLiteral(t):t;return Array.isArray(r)?r.map(t=>t===null?null:e(t,n)):r},le={1082:toPlainDate,1184:toInstant,1083:toPlainTime,1182:eachElement(toPlainDate),1185:eachElement(toInstant),1183:eachElement(toPlainTime)};function hostTemporal(){return globalThis.Temporal}function serializeValue(e,t){if(e instanceof t.PlainDate)return e.toString({calendarName:`never`});if(e instanceof t.PlainTime)return`${String(e.hour).padStart(2,`0`)}:${String(e.minute).padStart(2,`0`)}`;if(e instanceof t.Instant)return t.Instant.fromEpochMilliseconds(e.epochMilliseconds).toString();if(Array.isArray(e))return e.map(e=>serializeValue(e,t));if(typeof e==`object`&&e){let n=Object.getPrototypeOf(e);if(n===Object.prototype||n===null)return Object.fromEntries(Object.entries(e).map(([e,n])=>[e,serializeValue(n,t)]))}return e}function serializeTemporalParams(e){let t=hostTemporal();return t?e.map(e=>serializeValue(e,t)):[...e]}function deserializeTemporalRows(e,t=[]){let n=t.flatMap(({name:e,dataTypeID:t})=>{let n=le[t];return n?[{name:e,convert:n}]:[]});if(n.length===0)return e;let r=hostTemporal();if(!r)throw ReferenceError(`Temporal is unavailable. Use the SDK tailor-runtime Vitest environment to read Temporal values from PGlite.`);return e.map(e=>{let t={...e};for(let{name:e,convert:i}of n)t[e]=i(t[e],r);return t})}var TransactionLock=class{#e=null;#t=[];holds(e){return this.#e===e}async acquire(e){for(;this.#e!==null;)await new Promise(e=>this.#t.push(e));this.#e=e}release(e){this.#e===e&&(this.#e=null,this.#t.shift()?.())}};const ue=/^\s*(?:begin|start\s+transaction)\b/i,de=/^\s*(?:commit\b|rollback\b(?!(?:\s+(?:work|transaction))?\s+to\b))/i;function toQueryObjectResult(e,t){return{command:e.command??(e.affectedRows?`UPDATE`:`SELECT`),rowCount:e.rowCount??(e.affectedRows||e.rows.length),rows:t?deserializeTemporalRows(e.rows,e.fields):e.rows}}function mockTailordbWithPGlite(e){let t=h(),n=t.Client,r=[],i=[],a=/* @__PURE__ */ new Map,o=/* @__PURE__ */ new Set,assertNoOpenTransaction=e=>{if(o.size>0)throw Error(`mockTailordbWithPGlite: ${e}() cannot run while a transaction is open; commit, roll back, or end() its client first`)},defaultClient=function(t){let n=t?.namespace,s=t?.temporal??!1,c=n!==void 0&&Object.hasOwn(e.namespaces,n)?e.namespaces[n]:void 0;if(n===void 0||!c)throw Error(`mockTailordbWithPGlite: no PGlite instance registered for namespace "${n}"`);let l=a.get(c)??new TransactionLock;a.set(c,l);let u={namespace:n,ended:!1};i.push(u);let d=this,run=async(e,t)=>(r.push({namespace:n,query:e,params:t??[]}),toQueryObjectResult(await c.query(e,serializeTemporalParams(t??[])),s)),throwEnded=()=>{throw Error(`mockTailordbWithPGlite: query after end() on this client`)},acquire=async()=>{await l.acquire(d),u.ended&&(l.release(d),throwEnded())},queryObject=async(e,t)=>{if(u.ended&&throwEnded(),ue.test(e)){if(l.holds(d))throw Error(`mockTailordbWithPGlite: transaction already open on this client — run nested statements on the transaction callback's trx`);await acquire();try{let n=await run(e,t);return o.add(u),n}catch(e){throw l.release(d),e}}if(de.test(e)){if(l.holds(d))try{return await run(e,t)}finally{o.delete(u),l.release(d)}await acquire();try{return await run(e,t)}finally{l.release(d)}}if(l.holds(d))return await run(e,t);await acquire();try{return await run(e,t)}finally{l.release(d)}};this.connect=async()=>{},this.end=async()=>{if(u.ended=!0,l.holds(d))try{await run(`rollback`)}finally{o.delete(u),l.release(d)}},this.queryObject=queryObject,this.createTransaction=e=>{if(!e)throw Error(`Transaction name must be a non-empty string`);return{begin:()=>queryObject(`begin`),commit:()=>queryObject(`commit`),rollback:()=>queryObject(`rollback`),queryObject}}},s=z.fn(defaultClient);return t.Client=s,v({Client:s,get executedQueries(){return r},get createdClients(){return i},clear(){assertNoOpenTransaction(`clear`),s.mockClear(),r.length=0,i.length=0},reset(){assertNoOpenTransaction(`reset`),s.mockReset(),s.mockImplementation(defaultClient),r.length=0,i.length=0}},()=>{t.Client=n})}var PendingStart=class{jobName;args;constructor(e,t){this.jobName=e,this.args=t}};async function runWorkflowLocally(e,t,n){let i=globalThis,a=i.tailor,c=r(),l=c!==void 0,u=createLocalJobRunner();n?.env!==void 0&&s({...n.env}),i.tailor={...a,workflow:createLocalWorkflowRuntime(a?.workflow,u.execJobFunction)};try{return await u.runJob(e.mainJob.name,t)}finally{a?i.tailor=a:delete i.tailor,n?.env!==void 0&&(l?s(c):o())}}function createLocalJobRunner(){let t,execJobFunction=(e,n)=>{if(!t)throw Error(`Cannot start workflow job "${e}" outside runWorkflowLocally() job execution.`);if(t.pending)throw t.pending;let r=m(n),i=t.cursor;t.cursor+=1;let a=t.records[i];if(a){if(assertSameStart(a,e,r),a.status===`rejected`)throw a.error;return m(a.result)}let o=new PendingStart(e,r);throw t.pending=o,o},runJob=async(n,r)=>{let i=e(n);if(!i)return null;let o=[];for(;;){let e={records:o,cursor:0},s=t;t=e;try{let t=await i(m(r),a());if(e.pending){await settlePendingStart(o,e.pending,runJob);continue}if(e.cursor!==o.length)throw Error(`Workflow job start sequence changed while replaying "${n}". Expected ${o.length} start(s), but replay reached ${e.cursor}.`);return m(t)}catch(t){let n=t instanceof PendingStart?t:e.pending;if(n){await settlePendingStart(o,n,runJob);continue}throw t}finally{t=s}}};return{runJob,execJobFunction}}async function settlePendingStart(e,t,n){try{e.push({jobName:t.jobName,args:t.args,status:`fulfilled`,result:await n(t.jobName,t.args)})}catch(n){e.push({jobName:t.jobName,args:t.args,status:`rejected`,error:n})}}function assertSameStart(e,t,n){if(e.jobName!==t||JSON.stringify(e.args)!==JSON.stringify(n))throw Error(`Workflow job start sequence changed while replaying. Expected ${e.jobName}(${JSON.stringify(e.args)}), but got ${t}(${JSON.stringify(n)}).`)}function createLocalWorkflowRuntime(e,n){return{execJobFunction:n,startWorkflow:async(n,r,i)=>e?await e.startWorkflow(n,r,i):(m(r),t),resumeWorkflowExecution:async t=>e?await e.resumeWorkflowExecution(t):t,wait:(t,n)=>{if(e)return e.wait(t,n);throw Error(`No wait handler for "${t}". Acquire mockWorkflow() and call setWaitHandler(...).`)},resolve:async(t,n,r)=>{if(e)await e.resolve(t,n,r);else throw Error(`No resolve handler. Acquire mockWorkflow() and call setResolveHandler(...).`)}}}function unwrapValue(e){return N.is(e)?e.value:e}function insertRows(e){if(!ne.is(e))throw Error(`insertRows: expected InsertQueryNode, got ${e.kind}`);let t=e.columns,n=e.values;if(t===void 0||n===void 0||!P.is(n))throw Error(`insertRows: unsupported insert shape; inspect query.node instead`);return n.values.map(e=>{if(!A.is(e)&&!M.is(e))throw Error(`insertRows: unsupported insert shape; inspect query.node instead`);let n=A.is(e)?e.values:e.values.map(unwrapValue),r={};return t.forEach((e,t)=>{r[e.column.name]=n[t]}),r})}function insertValues(e){let t=insertRows(e);if(t.length!==1)throw Error(`insertValues: query inserts ${t.length} rows; use insertRows() for multi-row inserts`);return c(t[0],`insertValues: first row missing`)}function updateValues(e){if(!ie.is(e))throw Error(`updateValues: expected UpdateQueryNode, got ${e.kind}`);if(e.updates===void 0)throw Error(`updateValues: unsupported update shape; inspect query.node instead`);let t={};for(let n of e.updates){let e=n.column,r=w.is(e)?e.column.name:j.is(e)&&w.is(e.column)?e.column.column.name:void 0;if(r===void 0)throw Error(`updateValues: unsupported update shape; inspect query.node instead`);t[r]=unwrapValue(n.value)}return t}function toExecutedQuery(e){let t=e.query;return{kind:t.kind,sql:e.sql,parameters:e.parameters,node:t,insertRows:()=>insertRows(t),insertValues:()=>insertValues(t),updateValues:()=>updateValues(t)}}function toStagedResult(e){return Array.isArray(e)?{rows:e,numAffectedRows:void 0}:{rows:e.rows??[],numAffectedRows:e.numAffectedRows===void 0?void 0:BigInt(e.numAffectedRows)}}var MockState=class{executed=[];queue=[];resolver;enqueue(...e){this.queue.push(...e)}setResolver(e){this.resolver=e}next(e){let t=this.resolver?.(e);if(t!==void 0)return toStagedResult(t);let n=this.queue.shift();return n===void 0?{rows:[],numAffectedRows:void 0}:toStagedResult(n)}reset(){this.executed.length=0,this.queue.length=0,this.resolver=void 0}},MockConnection=class{state;constructor(e){this.state=e}async executeQuery(e){let t=toExecutedQuery(e);this.state.executed.push(t);let{rows:n,numAffectedRows:r}=this.state.next(t);return{rows:n,numAffectedRows:r??BigInt(n.length)}}streamQuery(){throw Error(`createKyselyMock: streaming is not supported`)}},MockDriver=class{state;constructor(e){this.state=e}async init(){}async acquireConnection(){return new MockConnection(this.state)}async beginTransaction(){}async commitTransaction(){}async rollbackTransaction(){}async releaseConnection(){}async destroy(){}};function byKind(e,t){return e.executed.filter(e=>e.kind===t)}function createKyselyMock(){let e=new MockState,t=new E({dialect:{createDriver:()=>new MockDriver(e),createQueryCompiler:()=>new k,createAdapter:()=>new D,createIntrospector:e=>new O(e)}});return{db:t,get executedQueries(){return e.executed},get selects(){return byKind(e,`SelectQueryNode`)},get inserts(){return byKind(e,`InsertQueryNode`)},get updates(){return byKind(e,`UpdateQueryNode`)},get deletes(){return byKind(e,`DeleteQueryNode`)},enqueueResult:t=>e.enqueue(t),enqueueResults:(...t)=>e.enqueue(...t),setQueryResolver:t=>e.setResolver(t),withTx:e=>t.transaction().execute(e),reset:()=>e.reset(),[Symbol.dispose]:()=>e.reset()}}var PGliteConnection=class{#e;#t;constructor(e,t){this.#e=e,this.#t=t}async executeQuery(e){let t=await this.#e.query(e.sql,serializeTemporalParams(e.parameters));return{rows:this.#t?deserializeTemporalRows(t.rows,t.fields):t.rows,numAffectedRows:BigInt(t.affectedRows??0)}}streamQuery(){throw Error(`createKyselyPGlite: streaming is not supported`)}},PGliteDriver=class{#e;#t;constructor(e,t){this.#e=e,this.#t=t}async init(){}async acquireConnection(){return new PGliteConnection(this.#e,this.#t)}async beginTransaction(e,t){let n=t.isolationLevel?[`start transaction`,`isolation level ${t.isolationLevel}`]:[`begin`];t.accessMode&&n.push(t.accessMode),await e.executeQuery(T.raw(n.join(` `)))}async commitTransaction(e){await e.executeQuery(T.raw(`commit`))}async rollbackTransaction(e){await e.executeQuery(T.raw(`rollback`))}async releaseConnection(){}async destroy(){await this.#e.close()}};function createKyselyPGlite(e,t={}){let n=t.temporal??!1;return new E({dialect:{createAdapter:()=>new re,createDriver:()=>new PGliteDriver(e,n),createIntrospector:e=>new O(e),createQueryCompiler:()=>new k}})}const Q=`session_replication_role`,$=/* @__PURE__ */ new WeakMap;function setReplicationRole(e,t){return e.query(`SELECT set_config($1, $2, false)`,[Q,t])}async function uncheckRelations(e){let t=(await e.query(`SHOW ${Q}`)).rows[0]?.[Q];return await setReplicationRole(e,`replica`),typeof t==`string`?t:`origin`}async function prepareFixtures(e,t){let n=$.get(e)??{active:0,previous:uncheckRelations(e)};n.active+=1,$.set(e,n);let r;try{return r=await n.previous,await t()}finally{--n.active,n.active===0&&($.delete(e),r!==void 0&&await setReplicationRole(e,r))}}var MigrationStepError=class extends Error{step;completedSteps;constructor(e,t,n){super(`Migration step "${e}" failed: ${n instanceof Error?n.message:String(n)}`,{cause:n}),this.name=`MigrationStepError`,this.step=e,this.completedSteps=t}};async function runMigrationSteps(e,t){let n=f(Object.entries(e).map(([e,t])=>({name:e,dependsOn:t.dependsOn??[]}))),r=[];for(let i of n){let n=c(e[i],`Migration step "${i}" is not defined.`),a={env:structuredClone(t.env??{})};try{await t.transaction(e=>n.run(e,a))}catch(e){throw new MigrationStepError(i,[...r],e)}r.push(i)}return r}function tailorRuntime(e){return[createBlockPlugin(),createEnvironmentPlugin(e)]}export{MigrationStepError,_ as applyDateRepresentation,createKyselyMock,createKyselyPGlite,mockAigateway,mockAuthconnection,mockFile,mockIconv,mockIdp,mockLogger,y as mockSecretmanager,mockTailordb,mockTailordbWithPGlite,mockWorkflow,prepareFixtures,runMigrationSteps,runWorkflowLocally,tailorRuntime};
2
2
  //# sourceMappingURL=index.mjs.map