@trigger.dev/core 3.0.13 → 3.1.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.
Files changed (193) hide show
  1. package/dist/commonjs/v3/apiClient/core.d.ts +1 -1
  2. package/dist/commonjs/v3/apiClient/core.js +9 -1
  3. package/dist/commonjs/v3/apiClient/core.js.map +1 -1
  4. package/dist/commonjs/v3/apiClient/index.d.ts +64 -36
  5. package/dist/commonjs/v3/apiClient/index.js +100 -4
  6. package/dist/commonjs/v3/apiClient/index.js.map +1 -1
  7. package/dist/commonjs/v3/apiClient/runStream.d.ts +50 -0
  8. package/dist/commonjs/v3/apiClient/runStream.js +159 -0
  9. package/dist/commonjs/v3/apiClient/runStream.js.map +1 -0
  10. package/dist/commonjs/v3/apiClient/stream.d.ts +9 -0
  11. package/dist/commonjs/v3/apiClient/stream.js +37 -0
  12. package/dist/commonjs/v3/apiClient/stream.js.map +1 -0
  13. package/dist/commonjs/v3/apiClient/types.d.ts +4 -0
  14. package/dist/commonjs/v3/apiClientManager/index.d.ts +2 -1
  15. package/dist/commonjs/v3/apiClientManager/index.js +18 -7
  16. package/dist/commonjs/v3/apiClientManager/index.js.map +1 -1
  17. package/dist/commonjs/v3/apiClientManager/types.d.ts +7 -0
  18. package/dist/commonjs/v3/apps/process.d.ts +2 -0
  19. package/dist/commonjs/v3/apps/process.js +2 -0
  20. package/dist/commonjs/v3/apps/process.js.map +1 -1
  21. package/dist/commonjs/v3/errors.d.ts +5 -0
  22. package/dist/commonjs/v3/errors.js +193 -30
  23. package/dist/commonjs/v3/errors.js.map +1 -1
  24. package/dist/commonjs/v3/index.d.ts +2 -1
  25. package/dist/commonjs/v3/index.js +4 -3
  26. package/dist/commonjs/v3/index.js.map +1 -1
  27. package/dist/commonjs/v3/jwt.d.ts +10 -0
  28. package/dist/commonjs/v3/jwt.js +34 -0
  29. package/dist/commonjs/v3/jwt.js.map +1 -0
  30. package/dist/commonjs/v3/links.d.ts +3 -0
  31. package/dist/commonjs/v3/links.js +3 -0
  32. package/dist/commonjs/v3/links.js.map +1 -1
  33. package/dist/commonjs/v3/otel/index.d.ts +2 -3
  34. package/dist/commonjs/v3/otel/index.js +15 -21
  35. package/dist/commonjs/v3/otel/index.js.map +1 -1
  36. package/dist/commonjs/v3/otel/utils.d.ts +2 -0
  37. package/dist/commonjs/v3/otel/utils.js +24 -0
  38. package/dist/commonjs/v3/otel/utils.js.map +1 -0
  39. package/dist/commonjs/v3/runMetadata/index.d.ts +8 -6
  40. package/dist/commonjs/v3/runMetadata/index.js +18 -39
  41. package/dist/commonjs/v3/runMetadata/index.js.map +1 -1
  42. package/dist/commonjs/v3/runMetadata/manager.d.ts +17 -0
  43. package/dist/commonjs/v3/runMetadata/manager.js +116 -0
  44. package/dist/commonjs/v3/runMetadata/manager.js.map +1 -0
  45. package/dist/commonjs/v3/runMetadata/noopManager.d.ts +12 -0
  46. package/dist/commonjs/v3/runMetadata/noopManager.js +26 -0
  47. package/dist/commonjs/v3/runMetadata/noopManager.js.map +1 -0
  48. package/dist/commonjs/v3/runMetadata/types.d.ts +11 -0
  49. package/dist/commonjs/v3/runMetadata/types.js +3 -0
  50. package/dist/commonjs/v3/runMetadata/types.js.map +1 -0
  51. package/dist/commonjs/v3/runtime/noopRuntimeManager.js +5 -1
  52. package/dist/commonjs/v3/runtime/noopRuntimeManager.js.map +1 -1
  53. package/dist/commonjs/v3/schemas/api.d.ts +193 -64
  54. package/dist/commonjs/v3/schemas/api.js +34 -4
  55. package/dist/commonjs/v3/schemas/api.js.map +1 -1
  56. package/dist/commonjs/v3/schemas/build.d.ts +12 -12
  57. package/dist/commonjs/v3/schemas/common.d.ts +24 -24
  58. package/dist/commonjs/v3/schemas/common.js +3 -0
  59. package/dist/commonjs/v3/schemas/common.js.map +1 -1
  60. package/dist/commonjs/v3/schemas/messages.d.ts +124 -123
  61. package/dist/commonjs/v3/schemas/messages.js +1 -0
  62. package/dist/commonjs/v3/schemas/messages.js.map +1 -1
  63. package/dist/commonjs/v3/schemas/schemas.d.ts +2 -2
  64. package/dist/commonjs/v3/tracer.js +2 -2
  65. package/dist/commonjs/v3/types/idempotencyKeys.d.ts +7 -0
  66. package/dist/commonjs/v3/types/idempotencyKeys.js +3 -0
  67. package/dist/commonjs/v3/types/idempotencyKeys.js.map +1 -0
  68. package/dist/commonjs/v3/types/index.d.ts +9 -63
  69. package/dist/commonjs/v3/types/index.js +2 -0
  70. package/dist/commonjs/v3/types/index.js.map +1 -1
  71. package/dist/commonjs/v3/types/schemas.d.ts +44 -0
  72. package/dist/commonjs/v3/types/schemas.js +41 -0
  73. package/dist/commonjs/v3/types/schemas.js.map +1 -0
  74. package/dist/commonjs/v3/types/tasks.d.ts +474 -0
  75. package/dist/commonjs/v3/types/tasks.js +42 -0
  76. package/dist/commonjs/v3/types/tasks.js.map +1 -0
  77. package/dist/commonjs/v3/utils/flattenAttributes.d.ts +2 -1
  78. package/dist/commonjs/v3/utils/flattenAttributes.js +39 -16
  79. package/dist/commonjs/v3/utils/flattenAttributes.js.map +1 -1
  80. package/dist/commonjs/v3/utils/getEnv.d.ts +1 -0
  81. package/dist/commonjs/v3/utils/getEnv.js +12 -0
  82. package/dist/commonjs/v3/utils/getEnv.js.map +1 -1
  83. package/dist/commonjs/v3/utils/globals.d.ts +2 -2
  84. package/dist/commonjs/v3/utils/globals.js.map +1 -1
  85. package/dist/commonjs/v3/utils/ioSerialization.d.ts +1 -0
  86. package/dist/commonjs/v3/utils/ioSerialization.js +21 -3
  87. package/dist/commonjs/v3/utils/ioSerialization.js.map +1 -1
  88. package/dist/commonjs/v3/utils/safeAsyncLocalStorage.d.ts +1 -0
  89. package/dist/commonjs/v3/utils/safeAsyncLocalStorage.js +3 -0
  90. package/dist/commonjs/v3/utils/safeAsyncLocalStorage.js.map +1 -1
  91. package/dist/commonjs/v3/workers/index.d.ts +2 -1
  92. package/dist/commonjs/v3/workers/index.js +4 -1
  93. package/dist/commonjs/v3/workers/index.js.map +1 -1
  94. package/dist/commonjs/v3/workers/taskExecutor.js +43 -9
  95. package/dist/commonjs/v3/workers/taskExecutor.js.map +1 -1
  96. package/dist/commonjs/version.js +1 -1
  97. package/dist/esm/v3/apiClient/core.d.ts +1 -1
  98. package/dist/esm/v3/apiClient/core.js +9 -1
  99. package/dist/esm/v3/apiClient/core.js.map +1 -1
  100. package/dist/esm/v3/apiClient/index.d.ts +64 -36
  101. package/dist/esm/v3/apiClient/index.js +100 -4
  102. package/dist/esm/v3/apiClient/index.js.map +1 -1
  103. package/dist/esm/v3/apiClient/runStream.d.ts +50 -0
  104. package/dist/esm/v3/apiClient/runStream.js +154 -0
  105. package/dist/esm/v3/apiClient/runStream.js.map +1 -0
  106. package/dist/esm/v3/apiClient/stream.d.ts +9 -0
  107. package/dist/esm/v3/apiClient/stream.js +33 -0
  108. package/dist/esm/v3/apiClient/stream.js.map +1 -0
  109. package/dist/esm/v3/apiClient/types.d.ts +4 -0
  110. package/dist/esm/v3/apiClientManager/index.d.ts +2 -1
  111. package/dist/esm/v3/apiClientManager/index.js +18 -7
  112. package/dist/esm/v3/apiClientManager/index.js.map +1 -1
  113. package/dist/esm/v3/apiClientManager/types.d.ts +7 -0
  114. package/dist/esm/v3/apps/process.d.ts +2 -0
  115. package/dist/esm/v3/apps/process.js +2 -0
  116. package/dist/esm/v3/apps/process.js.map +1 -1
  117. package/dist/esm/v3/errors.d.ts +5 -0
  118. package/dist/esm/v3/errors.js +190 -29
  119. package/dist/esm/v3/errors.js.map +1 -1
  120. package/dist/esm/v3/index.d.ts +2 -1
  121. package/dist/esm/v3/index.js +2 -1
  122. package/dist/esm/v3/index.js.map +1 -1
  123. package/dist/esm/v3/jwt.d.ts +10 -0
  124. package/dist/esm/v3/jwt.js +29 -0
  125. package/dist/esm/v3/jwt.js.map +1 -0
  126. package/dist/esm/v3/links.d.ts +3 -0
  127. package/dist/esm/v3/links.js +3 -0
  128. package/dist/esm/v3/links.js.map +1 -1
  129. package/dist/esm/v3/otel/index.d.ts +2 -3
  130. package/dist/esm/v3/otel/index.js +1 -20
  131. package/dist/esm/v3/otel/index.js.map +1 -1
  132. package/dist/esm/v3/otel/utils.d.ts +2 -0
  133. package/dist/esm/v3/otel/utils.js +21 -0
  134. package/dist/esm/v3/otel/utils.js.map +1 -0
  135. package/dist/esm/v3/runMetadata/index.d.ts +8 -6
  136. package/dist/esm/v3/runMetadata/index.js +20 -41
  137. package/dist/esm/v3/runMetadata/index.js.map +1 -1
  138. package/dist/esm/v3/runMetadata/manager.d.ts +17 -0
  139. package/dist/esm/v3/runMetadata/manager.js +112 -0
  140. package/dist/esm/v3/runMetadata/manager.js.map +1 -0
  141. package/dist/esm/v3/runMetadata/noopManager.d.ts +12 -0
  142. package/dist/esm/v3/runMetadata/noopManager.js +22 -0
  143. package/dist/esm/v3/runMetadata/noopManager.js.map +1 -0
  144. package/dist/esm/v3/runMetadata/types.d.ts +11 -0
  145. package/dist/esm/v3/runMetadata/types.js +2 -0
  146. package/dist/esm/v3/runMetadata/types.js.map +1 -0
  147. package/dist/esm/v3/runtime/noopRuntimeManager.js +5 -1
  148. package/dist/esm/v3/runtime/noopRuntimeManager.js.map +1 -1
  149. package/dist/esm/v3/schemas/api.d.ts +193 -64
  150. package/dist/esm/v3/schemas/api.js +33 -3
  151. package/dist/esm/v3/schemas/api.js.map +1 -1
  152. package/dist/esm/v3/schemas/build.d.ts +12 -12
  153. package/dist/esm/v3/schemas/common.d.ts +24 -24
  154. package/dist/esm/v3/schemas/common.js +3 -0
  155. package/dist/esm/v3/schemas/common.js.map +1 -1
  156. package/dist/esm/v3/schemas/messages.d.ts +124 -123
  157. package/dist/esm/v3/schemas/messages.js +1 -0
  158. package/dist/esm/v3/schemas/messages.js.map +1 -1
  159. package/dist/esm/v3/schemas/schemas.d.ts +2 -2
  160. package/dist/esm/v3/tracer.js +1 -1
  161. package/dist/esm/v3/types/idempotencyKeys.d.ts +7 -0
  162. package/dist/esm/v3/types/idempotencyKeys.js +2 -0
  163. package/dist/esm/v3/types/idempotencyKeys.js.map +1 -0
  164. package/dist/esm/v3/types/index.d.ts +9 -63
  165. package/dist/esm/v3/types/index.js +2 -0
  166. package/dist/esm/v3/types/index.js.map +1 -1
  167. package/dist/esm/v3/types/schemas.d.ts +44 -0
  168. package/dist/esm/v3/types/schemas.js +38 -0
  169. package/dist/esm/v3/types/schemas.js.map +1 -0
  170. package/dist/esm/v3/types/tasks.d.ts +474 -0
  171. package/dist/esm/v3/types/tasks.js +37 -0
  172. package/dist/esm/v3/types/tasks.js.map +1 -0
  173. package/dist/esm/v3/utils/flattenAttributes.d.ts +2 -1
  174. package/dist/esm/v3/utils/flattenAttributes.js +38 -15
  175. package/dist/esm/v3/utils/flattenAttributes.js.map +1 -1
  176. package/dist/esm/v3/utils/getEnv.d.ts +1 -0
  177. package/dist/esm/v3/utils/getEnv.js +11 -0
  178. package/dist/esm/v3/utils/getEnv.js.map +1 -1
  179. package/dist/esm/v3/utils/globals.d.ts +2 -2
  180. package/dist/esm/v3/utils/globals.js.map +1 -1
  181. package/dist/esm/v3/utils/ioSerialization.d.ts +1 -0
  182. package/dist/esm/v3/utils/ioSerialization.js +20 -3
  183. package/dist/esm/v3/utils/ioSerialization.js.map +1 -1
  184. package/dist/esm/v3/utils/safeAsyncLocalStorage.d.ts +1 -0
  185. package/dist/esm/v3/utils/safeAsyncLocalStorage.js +3 -0
  186. package/dist/esm/v3/utils/safeAsyncLocalStorage.js.map +1 -1
  187. package/dist/esm/v3/workers/index.d.ts +2 -1
  188. package/dist/esm/v3/workers/index.js +2 -1
  189. package/dist/esm/v3/workers/index.js.map +1 -1
  190. package/dist/esm/v3/workers/taskExecutor.js +44 -10
  191. package/dist/esm/v3/workers/taskExecutor.js.map +1 -1
  192. package/dist/esm/version.js +1 -1
  193. package/package.json +35 -1
@@ -0,0 +1,474 @@
1
+ import { SerializableJson } from "../../schemas/json.js";
2
+ import { RunTags } from "../schemas/api.js";
3
+ import { QueueOptions } from "../schemas/schemas.js";
4
+ import { IdempotencyKey } from "./idempotencyKeys.js";
5
+ import { MachineCpu, MachineMemory, RetryOptions, TaskMetadata, TaskRunContext } from "../schemas/index.js";
6
+ import { Prettify } from "./utils.js";
7
+ import { AnySchemaParseFn, inferSchemaOut, Schema } from "./schemas.js";
8
+ import { TriggerApiRequestOptions } from "../apiClient/index.js";
9
+ type RequireOne<T, K extends keyof T> = {
10
+ [X in Exclude<keyof T, K>]?: T[X];
11
+ } & {
12
+ [P in K]-?: T[P];
13
+ };
14
+ export type Queue = RequireOne<QueueOptions, "name">;
15
+ export type TaskSchema = Schema;
16
+ export type { inferSchemaIn } from "./schemas.js";
17
+ type TaskRunConcurrencyOptions = Queue;
18
+ export declare class SubtaskUnwrapError extends Error {
19
+ readonly taskId: string;
20
+ readonly runId: string;
21
+ readonly cause?: unknown;
22
+ constructor(taskId: string, runId: string, subtaskError: unknown);
23
+ }
24
+ export declare class TaskRunPromise<T> extends Promise<TaskRunResult<T>> {
25
+ private readonly taskId;
26
+ constructor(executor: (resolve: (value: TaskRunResult<T> | PromiseLike<TaskRunResult<T>>) => void, reject: (reason?: any) => void) => void, taskId: string);
27
+ unwrap(): Promise<T>;
28
+ }
29
+ export type InitOutput = Record<string, any> | void | undefined;
30
+ export type RunFnParams<TInitOutput extends InitOutput> = Prettify<{
31
+ /** Metadata about the task, run, attempt, queue, environment, organization, project and batch. */
32
+ ctx: Context;
33
+ /** If you use the `init` function, this will be whatever you returned. */
34
+ init?: TInitOutput;
35
+ /** Abort signal that is aborted when a task run exceeds it's maxDuration. Can be used to automatically cancel downstream requests */
36
+ signal?: AbortSignal;
37
+ }>;
38
+ export type MiddlewareFnParams = Prettify<{
39
+ ctx: Context;
40
+ next: () => Promise<void>;
41
+ /** Abort signal that is aborted when a task run exceeds it's maxDuration. Can be used to automatically cancel downstream requests */
42
+ signal?: AbortSignal;
43
+ }>;
44
+ export type InitFnParams = Prettify<{
45
+ ctx: Context;
46
+ /** Abort signal that is aborted when a task run exceeds it's maxDuration. Can be used to automatically cancel downstream requests */
47
+ signal?: AbortSignal;
48
+ }>;
49
+ export type StartFnParams = Prettify<{
50
+ ctx: Context;
51
+ /** Abort signal that is aborted when a task run exceeds it's maxDuration. Can be used to automatically cancel downstream requests */
52
+ signal?: AbortSignal;
53
+ }>;
54
+ export type Context = TaskRunContext;
55
+ export type SuccessFnParams<TInitOutput extends InitOutput> = RunFnParams<TInitOutput>;
56
+ export type FailureFnParams<TInitOutput extends InitOutput> = RunFnParams<TInitOutput>;
57
+ export type HandleErrorFnParams<TInitOutput extends InitOutput> = RunFnParams<TInitOutput> & Prettify<{
58
+ retry?: RetryOptions;
59
+ retryAt?: Date;
60
+ retryDelayInMs?: number;
61
+ }>;
62
+ export type HandleErrorModificationOptions = {
63
+ skipRetrying?: boolean | undefined;
64
+ retryAt?: Date | undefined;
65
+ retryDelayInMs?: number | undefined;
66
+ retry?: RetryOptions | undefined;
67
+ error?: unknown;
68
+ };
69
+ export type HandleErrorResult = undefined | void | HandleErrorModificationOptions | Promise<undefined | void | HandleErrorModificationOptions>;
70
+ export type HandleErrorArgs = {
71
+ ctx: Context;
72
+ init: unknown;
73
+ retry?: RetryOptions;
74
+ retryAt?: Date;
75
+ retryDelayInMs?: number;
76
+ /** Abort signal that is aborted when a task run exceeds it's maxDuration. Can be used to automatically cancel downstream requests */
77
+ signal?: AbortSignal;
78
+ };
79
+ export type HandleErrorFunction = (payload: any, error: unknown, params: HandleErrorArgs) => HandleErrorResult;
80
+ type CommonTaskOptions<TIdentifier extends string, TPayload = void, TOutput = unknown, TInitOutput extends InitOutput = any> = {
81
+ /** An id for your task. This must be unique inside your project and not change between versions. */
82
+ id: TIdentifier;
83
+ /** The retry settings when an uncaught error is thrown.
84
+ *
85
+ * If omitted it will use the values in your `trigger.config.ts` file.
86
+ *
87
+ * @example
88
+ *
89
+ * ```
90
+ * export const taskWithRetries = task({
91
+ id: "task-with-retries",
92
+ retry: {
93
+ maxAttempts: 10,
94
+ factor: 1.8,
95
+ minTimeoutInMs: 500,
96
+ maxTimeoutInMs: 30_000,
97
+ randomize: false,
98
+ },
99
+ run: async ({ payload, ctx }) => {
100
+ //...
101
+ },
102
+ });
103
+ * ```
104
+ * */
105
+ retry?: RetryOptions;
106
+ /** Used to configure what should happen when more than one run is triggered at the same time.
107
+ *
108
+ * @example
109
+ * one at a time execution
110
+ *
111
+ * ```ts
112
+ * export const oneAtATime = task({
113
+ id: "one-at-a-time",
114
+ queue: {
115
+ concurrencyLimit: 1,
116
+ },
117
+ run: async ({ payload, ctx }) => {
118
+ //...
119
+ },
120
+ });
121
+ * ```
122
+ */
123
+ queue?: QueueOptions;
124
+ /** Configure the spec of the machine you want your task to run on.
125
+ *
126
+ * @example
127
+ *
128
+ * ```ts
129
+ * export const heavyTask = task({
130
+ id: "heavy-task",
131
+ machine: {
132
+ cpu: 2,
133
+ memory: 4,
134
+ },
135
+ run: async ({ payload, ctx }) => {
136
+ //...
137
+ },
138
+ });
139
+ * ```
140
+ */
141
+ machine?: {
142
+ /** vCPUs. The default is 0.5.
143
+ *
144
+ * Possible values:
145
+ * - 0.25
146
+ * - 0.5
147
+ * - 1
148
+ * - 2
149
+ * - 4
150
+ * @deprecated use preset instead
151
+ */
152
+ cpu?: MachineCpu;
153
+ /** In GBs of RAM. The default is 1.
154
+ *
155
+ * Possible values:
156
+ * - 0.25
157
+ * - 0.5
158
+ * - 1
159
+ * - 2
160
+ * - 4
161
+ * - 8
162
+ * * @deprecated use preset instead
163
+ */
164
+ memory?: MachineMemory;
165
+ /** Preset to use for the machine. Defaults to small-1x */
166
+ preset?: "micro" | "small-1x" | "small-2x" | "medium-1x" | "medium-2x" | "large-1x" | "large-2x";
167
+ };
168
+ /**
169
+ * The maximum duration in compute-time seconds that a task run is allowed to run. If the task run exceeds this duration, it will be stopped.
170
+ *
171
+ * Minimum value is 5 seconds
172
+ */
173
+ maxDuration?: number;
174
+ /** This gets called when a task is triggered. It's where you put the code you want to execute.
175
+ *
176
+ * @param payload - The payload that is passed to your task when it's triggered. This must be JSON serializable.
177
+ * @param params - Metadata about the run.
178
+ */
179
+ run: (payload: TPayload, params: RunFnParams<TInitOutput>) => Promise<TOutput>;
180
+ /**
181
+ * init is called before the run function is called. It's useful for setting up any global state.
182
+ */
183
+ init?: (payload: TPayload, params: InitFnParams) => Promise<TInitOutput>;
184
+ /**
185
+ * cleanup is called after the run function has completed.
186
+ */
187
+ cleanup?: (payload: TPayload, params: RunFnParams<TInitOutput>) => Promise<void>;
188
+ /**
189
+ * handleError is called when the run function throws an error. It can be used to modify the error or return new retry options.
190
+ */
191
+ handleError?: (payload: TPayload, error: unknown, params: HandleErrorFnParams<TInitOutput>) => HandleErrorResult;
192
+ /**
193
+ * middleware allows you to run code "around" the run function. This can be useful for logging, metrics, or other cross-cutting concerns.
194
+ *
195
+ * When writing middleware, you should always call `next()` to continue the execution of the task:
196
+ *
197
+ * ```ts
198
+ * export const middlewareTask = task({
199
+ * id: "middleware-task",
200
+ * middleware: async (payload, { ctx, next }) => {
201
+ * console.log("Before run");
202
+ * await next();
203
+ * console.log("After run");
204
+ * },
205
+ * run: async (payload, { ctx }) => {}
206
+ * });
207
+ * ```
208
+ */
209
+ middleware?: (payload: TPayload, params: MiddlewareFnParams) => Promise<void>;
210
+ /**
211
+ * onStart is called the first time a task is executed in a run (not before every retry)
212
+ */
213
+ onStart?: (payload: TPayload, params: StartFnParams) => Promise<void>;
214
+ /**
215
+ * onSuccess is called after the run function has successfully completed.
216
+ */
217
+ onSuccess?: (payload: TPayload, output: TOutput, params: SuccessFnParams<TInitOutput>) => Promise<void>;
218
+ /**
219
+ * onFailure is called after a task run has failed (meaning the run function threw an error and won't be retried anymore)
220
+ */
221
+ onFailure?: (payload: TPayload, error: unknown, params: FailureFnParams<TInitOutput>) => Promise<void>;
222
+ };
223
+ export type TaskOptions<TIdentifier extends string, TPayload = void, TOutput = unknown, TInitOutput extends InitOutput = any> = CommonTaskOptions<TIdentifier, TPayload, TOutput, TInitOutput>;
224
+ export type TaskWithSchemaOptions<TIdentifier extends string, TSchema extends TaskSchema | undefined = undefined, TOutput = unknown, TInitOutput extends InitOutput = any> = CommonTaskOptions<TIdentifier, inferSchemaOut<TSchema>, TOutput, TInitOutput> & {
225
+ schema?: TSchema;
226
+ };
227
+ declare const __output: unique symbol;
228
+ declare const __payload: unique symbol;
229
+ type BrandRun<P, O> = {
230
+ [__output]: O;
231
+ [__payload]: P;
232
+ };
233
+ export type BrandedRun<T, P, O> = T & BrandRun<O, P>;
234
+ export type RunHandle<TTaskIdentifier extends string, TPayload, TOutput> = BrandedRun<{
235
+ id: string;
236
+ /**
237
+ * An auto-generated JWT that can be used to access the run
238
+ */
239
+ publicAccessToken: string;
240
+ taskIdentifier: TTaskIdentifier;
241
+ }, TPayload, TOutput>;
242
+ export type AnyRunHandle = RunHandle<string, any, any>;
243
+ /**
244
+ * A BatchRunHandle can be used to retrieve the runs of a batch trigger in a typesafe manner.
245
+ */
246
+ export type BatchRunHandle<TTaskIdentifier extends string, TPayload, TOutput> = BrandedRun<{
247
+ batchId: string;
248
+ runs: Array<RunHandle<TTaskIdentifier, TPayload, TOutput>>;
249
+ publicAccessToken: string;
250
+ taskIdentifier: TTaskIdentifier;
251
+ }, TOutput, TPayload>;
252
+ export type RunHandleOutput<TRunHandle> = TRunHandle extends RunHandle<string, any, infer TOutput> ? TOutput : never;
253
+ export type RunHandlePayload<TRunHandle> = TRunHandle extends RunHandle<string, infer TPayload, any> ? TPayload : never;
254
+ export type RunHandleTaskIdentifier<TRunHandle> = TRunHandle extends RunHandle<infer TTaskIdentifier, any, any> ? TTaskIdentifier : never;
255
+ export type TaskRunResult<TOutput = any> = {
256
+ ok: true;
257
+ id: string;
258
+ output: TOutput;
259
+ } | {
260
+ ok: false;
261
+ id: string;
262
+ error: unknown;
263
+ };
264
+ export type BatchResult<TOutput = any> = {
265
+ id: string;
266
+ runs: TaskRunResult<TOutput>[];
267
+ };
268
+ export type BatchItem<TInput> = TInput extends void ? {
269
+ payload?: TInput;
270
+ options?: TaskRunOptions;
271
+ } : {
272
+ payload: TInput;
273
+ options?: TaskRunOptions;
274
+ };
275
+ export interface Task<TIdentifier extends string, TInput = void, TOutput = any> {
276
+ /**
277
+ * The id of the task.
278
+ */
279
+ id: TIdentifier;
280
+ /**
281
+ * Trigger a task with the given payload, and continue without waiting for the result. If you want to wait for the result, use `triggerAndWait`. Returns the id of the triggered task run.
282
+ * @param payload
283
+ * @param options
284
+ * @returns RunHandle
285
+ * - `id` - The id of the triggered task run.
286
+ */
287
+ trigger: (payload: TInput, options?: TaskRunOptions, requestOptions?: TriggerApiRequestOptions) => Promise<RunHandle<TIdentifier, TInput, TOutput>>;
288
+ /**
289
+ * Batch trigger multiple task runs with the given payloads, and continue without waiting for the results. If you want to wait for the results, use `batchTriggerAndWait`. Returns the id of the triggered batch.
290
+ * @param items
291
+ * @returns InvokeBatchHandle
292
+ * - `batchId` - The id of the triggered batch.
293
+ * - `runs` - The ids of the triggered task runs.
294
+ */
295
+ batchTrigger: (items: Array<BatchItem<TInput>>, requestOptions?: TriggerApiRequestOptions) => Promise<BatchRunHandle<TIdentifier, TInput, TOutput>>;
296
+ /**
297
+ * Trigger a task with the given payload, and wait for the result. Returns the result of the task run
298
+ * @param payload
299
+ * @param options - Options for the task run
300
+ * @returns TaskRunResult
301
+ * @example
302
+ * ```
303
+ * const result = await task.triggerAndWait({ foo: "bar" });
304
+ *
305
+ * if (result.ok) {
306
+ * console.log(result.output);
307
+ * } else {
308
+ * console.error(result.error);
309
+ * }
310
+ * ```
311
+ */
312
+ triggerAndWait: (payload: TInput, options?: TaskRunOptions) => TaskRunPromise<TOutput>;
313
+ /**
314
+ * Batch trigger multiple task runs with the given payloads, and wait for the results. Returns the results of the task runs.
315
+ * @param items
316
+ * @returns BatchResult
317
+ * @example
318
+ * ```
319
+ * const result = await task.batchTriggerAndWait([
320
+ * { payload: { foo: "bar" } },
321
+ * { payload: { foo: "baz" } },
322
+ * ]);
323
+ *
324
+ * for (const run of result.runs) {
325
+ * if (run.ok) {
326
+ * console.log(run.output);
327
+ * } else {
328
+ * console.error(run.error);
329
+ * }
330
+ * }
331
+ * ```
332
+ */
333
+ batchTriggerAndWait: (items: Array<BatchItem<TInput>>) => Promise<BatchResult<TOutput>>;
334
+ }
335
+ export type AnyTask = Task<string, any, any>;
336
+ export type TaskPayload<TTask extends AnyTask> = TTask extends Task<string, infer TInput, any> ? TInput : never;
337
+ export type TaskOutput<TTask extends AnyTask> = TTask extends Task<string, any, infer TOutput> ? TOutput : never;
338
+ export type TaskOutputHandle<TTask extends AnyTask> = TTask extends Task<infer TIdentifier, infer TInput, infer TOutput> ? RunHandle<TIdentifier, TOutput, TInput> : never;
339
+ export type TaskBatchOutputHandle<TTask extends AnyTask> = TTask extends Task<infer TIdentifier, infer TInput, infer TOutput> ? BatchRunHandle<TIdentifier, TOutput, TInput> : never;
340
+ export type TaskIdentifier<TTask extends AnyTask> = TTask extends Task<infer TIdentifier, any, any> ? TIdentifier : never;
341
+ export type TriggerJwtOptions = {
342
+ /**
343
+ * The expiration time of the JWT. This can be a string like "1h" or a Date object.
344
+ *
345
+ * Defaults to 1 hour.
346
+ */
347
+ expirationTime?: number | Date | string;
348
+ };
349
+ export type TaskRunOptions = {
350
+ /**
351
+ * A unique key that can be used to ensure that a task is only triggered once per key.
352
+ *
353
+ * You can use `idempotencyKeys.create` to create an idempotency key first, and then pass it to the task options.
354
+ *
355
+ * @example
356
+ *
357
+ * ```typescript
358
+ * import { idempotencyKeys, task } from "@trigger.dev/sdk/v3";
359
+ *
360
+ * export const myTask = task({
361
+ * id: "my-task",
362
+ * run: async (payload: any) => {
363
+ * // scoped to the task run by default
364
+ * const idempotencyKey = await idempotencyKeys.create("my-task-key");
365
+ *
366
+ * // Use the idempotency key when triggering child tasks
367
+ * await childTask.triggerAndWait(payload, { idempotencyKey });
368
+ *
369
+ * // scoped globally, does not include the task run ID
370
+ * const globalIdempotencyKey = await idempotencyKeys.create("my-task-key", { scope: "global" });
371
+ *
372
+ * await childTask.triggerAndWait(payload, { idempotencyKey: globalIdempotencyKey });
373
+ *
374
+ * // You can also pass a string directly, which is the same as a global idempotency key
375
+ * await childTask.triggerAndWait(payload, { idempotencyKey: "my-very-unique-key" });
376
+ * }
377
+ * });
378
+ * ```
379
+ *
380
+ * When triggering a task inside another task, we automatically inject the run ID into the key material.
381
+ *
382
+ * If you are triggering a task from your backend, ensure you include some sufficiently unique key material to prevent collisions.
383
+ *
384
+ * @example
385
+ *
386
+ * ```typescript
387
+ * import { idempotencyKeys, tasks } from "@trigger.dev/sdk/v3";
388
+ *
389
+ * // Somewhere in your backend
390
+ * const idempotencyKey = await idempotenceKeys.create(["my-task-trigger", "user-123"]);
391
+ * await tasks.trigger("my-task", { foo: "bar" }, { idempotencyKey });
392
+ * ```
393
+ *
394
+ */
395
+ idempotencyKey?: IdempotencyKey | string | string[];
396
+ maxAttempts?: number;
397
+ queue?: TaskRunConcurrencyOptions;
398
+ concurrencyKey?: string;
399
+ /**
400
+ * The delay before the task is executed. This can be a string like "1h" or a Date object.
401
+ *
402
+ * @example
403
+ * "1h" - 1 hour
404
+ * "30d" - 30 days
405
+ * "15m" - 15 minutes
406
+ * "2w" - 2 weeks
407
+ * "60s" - 60 seconds
408
+ * new Date("2025-01-01T00:00:00Z")
409
+ */
410
+ delay?: string | Date;
411
+ /**
412
+ * Set a time-to-live for this run. If the run is not executed within this time, it will be removed from the queue and never execute.
413
+ *
414
+ * @example
415
+ *
416
+ * ```ts
417
+ * await myTask.trigger({ foo: "bar" }, { ttl: "1h" });
418
+ * await myTask.trigger({ foo: "bar" }, { ttl: 60 * 60 }); // 1 hour
419
+ * ```
420
+ *
421
+ * The minimum value is 1 second. Setting the `ttl` to `0` will disable the TTL and the run will never expire.
422
+ *
423
+ * **Note:** Runs in development have a default `ttl` of 10 minutes. You can override this by setting the `ttl` option.
424
+ */
425
+ ttl?: string | number;
426
+ /**
427
+ * Tags to attach to the run. Tags can be used to filter runs in the dashboard and using the SDK.
428
+ *
429
+ * You can set up to 10 tags per run, they must be less than 128 characters each.
430
+ *
431
+ * We recommend prefixing tags with a namespace using an underscore or colon, like `user_1234567` or `org:9876543`.
432
+ *
433
+ * @example
434
+ *
435
+ * ```ts
436
+ * await myTask.trigger({ foo: "bar" }, { tags: ["user:1234567", "org:9876543"] });
437
+ * ```
438
+ */
439
+ tags?: RunTags;
440
+ /**
441
+ * Metadata to attach to the run. Metadata can be used to store additional information about the run. Limited to 4KB.
442
+ */
443
+ metadata?: Record<string, SerializableJson>;
444
+ /**
445
+ * The maximum duration in compute-time seconds that a task run is allowed to run. If the task run exceeds this duration, it will be stopped.
446
+ *
447
+ * This will override the task's maxDuration.
448
+ *
449
+ * Minimum value is 5 seconds
450
+ */
451
+ maxDuration?: number;
452
+ };
453
+ export type TaskMetadataWithFunctions = TaskMetadata & {
454
+ fns: {
455
+ run: (payload: any, params: RunFnParams<any>) => Promise<any>;
456
+ init?: (payload: any, params: InitFnParams) => Promise<InitOutput>;
457
+ cleanup?: (payload: any, params: RunFnParams<any>) => Promise<void>;
458
+ middleware?: (payload: any, params: MiddlewareFnParams) => Promise<void>;
459
+ handleError?: (payload: any, error: unknown, params: HandleErrorFnParams<any>) => HandleErrorResult;
460
+ onSuccess?: (payload: any, output: any, params: SuccessFnParams<any>) => Promise<void>;
461
+ onFailure?: (payload: any, error: unknown, params: FailureFnParams<any>) => Promise<void>;
462
+ onStart?: (payload: any, params: StartFnParams) => Promise<void>;
463
+ parsePayload?: AnySchemaParseFn;
464
+ };
465
+ };
466
+ export type RunTypes<TTaskIdentifier extends string, TPayload, TOutput> = {
467
+ output: TOutput;
468
+ payload: TPayload;
469
+ taskIdentifier: TTaskIdentifier;
470
+ };
471
+ export type AnyRunTypes = RunTypes<string, any, any>;
472
+ export type InferRunTypes<T> = T extends RunHandle<infer TTaskIdentifier, infer TPayload, infer TOutput> ? RunTypes<TTaskIdentifier, TPayload, TOutput> : T extends Task<infer TTaskIdentifier, infer TPayload, infer TOutput> ? RunTypes<TTaskIdentifier, TPayload, TOutput> : AnyRunTypes;
473
+ export type RunHandleFromTypes<TRunTypes extends AnyRunTypes> = RunHandle<TRunTypes["taskIdentifier"], TRunTypes["payload"], TRunTypes["output"]>;
474
+ export type BatchRunHandleFromTypes<TRunTypes extends AnyRunTypes> = BatchRunHandle<TRunTypes["taskIdentifier"], TRunTypes["payload"], TRunTypes["output"]>;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TaskRunPromise = exports.SubtaskUnwrapError = void 0;
4
+ class SubtaskUnwrapError extends Error {
5
+ taskId;
6
+ runId;
7
+ cause;
8
+ constructor(taskId, runId, subtaskError) {
9
+ if (subtaskError instanceof Error) {
10
+ super(`Error in ${taskId}: ${subtaskError.message}`);
11
+ this.cause = subtaskError;
12
+ this.name = "SubtaskUnwrapError";
13
+ }
14
+ else {
15
+ super(`Error in ${taskId}`);
16
+ this.name = "SubtaskUnwrapError";
17
+ this.cause = subtaskError;
18
+ }
19
+ this.taskId = taskId;
20
+ this.runId = runId;
21
+ }
22
+ }
23
+ exports.SubtaskUnwrapError = SubtaskUnwrapError;
24
+ class TaskRunPromise extends Promise {
25
+ taskId;
26
+ constructor(executor, taskId) {
27
+ super(executor);
28
+ this.taskId = taskId;
29
+ }
30
+ unwrap() {
31
+ return this.then((result) => {
32
+ if (result.ok) {
33
+ return result.output;
34
+ }
35
+ else {
36
+ throw new SubtaskUnwrapError(this.taskId, result.id, result.error);
37
+ }
38
+ });
39
+ }
40
+ }
41
+ exports.TaskRunPromise = TaskRunPromise;
42
+ //# sourceMappingURL=tasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../../../src/v3/types/tasks.ts"],"names":[],"mappings":";;;AA2BA,MAAa,kBAAmB,SAAQ,KAAK;IAC3B,MAAM,CAAS;IACf,KAAK,CAAS;IACd,KAAK,CAAW;IAEhC,YAAY,MAAc,EAAE,KAAa,EAAE,YAAqB;QAC9D,IAAI,YAAY,YAAY,KAAK,EAAE,CAAC;YAClC,KAAK,CAAC,YAAY,MAAM,KAAK,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC;YACrD,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC;YAC1B,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,YAAY,MAAM,EAAE,CAAC,CAAC;YAC5B,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;YACjC,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC;QAC5B,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF;AAnBD,gDAmBC;AAED,MAAa,cAAkB,SAAQ,OAAyB;IAM3C;IALnB,YACE,QAGS,EACQ,MAAc;QAE/B,KAAK,CAAC,QAAQ,CAAC,CAAC;QAFC,WAAM,GAAN,MAAM,CAAQ;IAGjC,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YAC1B,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;gBACd,OAAO,MAAM,CAAC,MAAM,CAAC;YACvB,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YACrE,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AApBD,wCAoBC"}
@@ -1,5 +1,6 @@
1
1
  import { Attributes } from "@opentelemetry/api";
2
2
  export declare const NULL_SENTINEL = "$@null((";
3
- export declare function flattenAttributes(obj: Record<string, unknown> | Array<unknown> | string | boolean | number | null | undefined, prefix?: string): Attributes;
3
+ export declare const CIRCULAR_REFERENCE_SENTINEL = "$@circular((";
4
+ export declare function flattenAttributes(obj: Record<string, unknown> | Array<unknown> | string | boolean | number | null | undefined, prefix?: string, seen?: WeakSet<object>): Attributes;
4
5
  export declare function unflattenAttributes(obj: Attributes): Record<string, unknown> | string | number | boolean | null | undefined;
5
6
  export declare function primitiveValueOrflattenedAttributes(obj: Record<string, unknown> | Array<unknown> | string | boolean | number | undefined, prefix: string | undefined): Attributes | string | number | boolean | undefined;
@@ -1,11 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.NULL_SENTINEL = void 0;
3
+ exports.CIRCULAR_REFERENCE_SENTINEL = exports.NULL_SENTINEL = void 0;
4
4
  exports.flattenAttributes = flattenAttributes;
5
5
  exports.unflattenAttributes = unflattenAttributes;
6
6
  exports.primitiveValueOrflattenedAttributes = primitiveValueOrflattenedAttributes;
7
7
  exports.NULL_SENTINEL = "$@null((";
8
- function flattenAttributes(obj, prefix) {
8
+ exports.CIRCULAR_REFERENCE_SENTINEL = "$@circular((";
9
+ function flattenAttributes(obj, prefix, seen = new WeakSet()) {
9
10
  const result = {};
10
11
  // Check if obj is null or undefined
11
12
  if (obj === undefined) {
@@ -31,13 +32,22 @@ function flattenAttributes(obj, prefix) {
31
32
  result[prefix || ""] = obj.toISOString();
32
33
  return result;
33
34
  }
35
+ // Check for circular reference
36
+ if (obj !== null && typeof obj === "object" && seen.has(obj)) {
37
+ result[prefix || ""] = exports.CIRCULAR_REFERENCE_SENTINEL;
38
+ return result;
39
+ }
40
+ // Add object to seen set
41
+ if (obj !== null && typeof obj === "object") {
42
+ seen.add(obj);
43
+ }
34
44
  for (const [key, value] of Object.entries(obj)) {
35
45
  const newPrefix = `${prefix ? `${prefix}.` : ""}${Array.isArray(obj) ? `[${key}]` : key}`;
36
46
  if (Array.isArray(value)) {
37
47
  for (let i = 0; i < value.length; i++) {
38
48
  if (typeof value[i] === "object" && value[i] !== null) {
39
49
  // update null check here as well
40
- Object.assign(result, flattenAttributes(value[i], `${newPrefix}.[${i}]`));
50
+ Object.assign(result, flattenAttributes(value[i], `${newPrefix}.[${i}]`, seen));
41
51
  }
42
52
  else {
43
53
  if (value[i] === null) {
@@ -51,7 +61,7 @@ function flattenAttributes(obj, prefix) {
51
61
  }
52
62
  else if (isRecord(value)) {
53
63
  // update null check here
54
- Object.assign(result, flattenAttributes(value, newPrefix));
64
+ Object.assign(result, flattenAttributes(value, newPrefix, seen));
55
65
  }
56
66
  else {
57
67
  if (typeof value === "number" || typeof value === "string" || typeof value === "boolean") {
@@ -83,10 +93,16 @@ function unflattenAttributes(obj) {
83
93
  const result = {};
84
94
  for (const [key, value] of Object.entries(obj)) {
85
95
  const parts = key.split(".").reduce((acc, part) => {
86
- if (part.includes("[")) {
87
- // Handling nested array indices
88
- const subparts = part.split(/\[|\]/).filter((p) => p !== "");
89
- acc.push(...subparts);
96
+ if (part.startsWith("[") && part.endsWith("]")) {
97
+ // Handle array indices more precisely
98
+ const match = part.match(/^\[(\d+)\]$/);
99
+ if (match && match[1]) {
100
+ acc.push(parseInt(match[1]));
101
+ }
102
+ else {
103
+ // Remove brackets for non-numeric array keys
104
+ acc.push(part.slice(1, -1));
105
+ }
90
106
  }
91
107
  else {
92
108
  acc.push(part);
@@ -96,22 +112,23 @@ function unflattenAttributes(obj) {
96
112
  let current = result;
97
113
  for (let i = 0; i < parts.length - 1; i++) {
98
114
  const part = parts[i];
99
- if (!part) {
115
+ const nextPart = parts[i + 1];
116
+ if (!part && part !== 0) {
100
117
  continue;
101
118
  }
102
- const nextPart = parts[i + 1];
103
- const isArray = nextPart && /^\d+$/.test(nextPart);
104
- if (isArray && !Array.isArray(current[part])) {
105
- current[part] = [];
119
+ if (typeof nextPart === "number") {
120
+ // Ensure we create an array for numeric indices
121
+ current[part] = Array.isArray(current[part]) ? current[part] : [];
106
122
  }
107
- else if (!isArray && current[part] === undefined) {
123
+ else if (current[part] === undefined) {
124
+ // Create an object for non-numeric paths
108
125
  current[part] = {};
109
126
  }
110
127
  current = current[part];
111
128
  }
112
129
  const lastPart = parts[parts.length - 1];
113
- if (lastPart) {
114
- current[lastPart] = rehydrateNull(value);
130
+ if (lastPart !== undefined) {
131
+ current[lastPart] = rehydrateNull(rehydrateCircular(value));
115
132
  }
116
133
  }
117
134
  // Convert the result to an array if all top-level keys are numeric indices
@@ -125,6 +142,12 @@ function unflattenAttributes(obj) {
125
142
  }
126
143
  return result;
127
144
  }
145
+ function rehydrateCircular(value) {
146
+ if (value === exports.CIRCULAR_REFERENCE_SENTINEL) {
147
+ return "[Circular Reference]";
148
+ }
149
+ return value;
150
+ }
128
151
  function primitiveValueOrflattenedAttributes(obj, prefix) {
129
152
  if (typeof obj === "string" ||
130
153
  typeof obj === "number" ||
@@ -1 +1 @@
1
- {"version":3,"file":"flattenAttributes.js","sourceRoot":"","sources":["../../../../src/v3/utils/flattenAttributes.ts"],"names":[],"mappings":";;;AAIA,8CAgEC;AAMD,kDAoEC;AAED,kFAyBC;AAvKY,QAAA,aAAa,GAAG,UAAU,CAAC;AAExC,SAAgB,iBAAiB,CAC/B,GAA4F,EAC5F,MAAe;IAEf,MAAM,MAAM,GAAe,EAAE,CAAC;IAE9B,oCAAoC;IACpC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,GAAG,qBAAa,CAAC;QACrC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC;QAC3B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC;QAC3B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,OAAO,GAAG,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC;QAC3B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,GAAG,YAAY,IAAI,EAAE,CAAC;QACxB,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QACzC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,MAAM,SAAS,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QAC1F,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;oBACtD,iCAAiC;oBACjC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC5E,CAAC;qBAAM,CAAC;oBACN,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;wBACtB,MAAM,CAAC,GAAG,SAAS,KAAK,CAAC,GAAG,CAAC,GAAG,qBAAa,CAAC;oBAChD,CAAC;yBAAM,CAAC;wBACN,MAAM,CAAC,GAAG,SAAS,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC3C,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,yBAAyB;YACzB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;QAC7D,CAAC;aAAM,CAAC;YACN,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;gBACzF,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;YAC5B,CAAC;iBAAM,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBAC1B,MAAM,CAAC,SAAS,CAAC,GAAG,qBAAa,CAAC;YACpC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAgB,mBAAmB,CACjC,GAAe;IAEf,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAClE,OAAO,GAAG,CAAC;IACb,CAAC;IAED,IACE,OAAO,GAAG,KAAK,QAAQ;QACvB,GAAG,KAAK,IAAI;QACZ,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAC1B,CAAC;QACD,OAAO,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAQ,CAAC;IACvC,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAA4B,EAAE,CAAC;IAE3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YAChD,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvB,gCAAgC;gBAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;gBAC7D,GAAG,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAc,CAAC,CAAC;QAEnB,IAAI,OAAO,GAAQ,MAAM,CAAC;QAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAEtB,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,SAAS;YACX,CAAC;YAED,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9B,MAAM,OAAO,GAAG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACnD,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;gBAC7C,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YACrB,CAAC;iBAAM,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;gBACnD,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YACrB,CAAC;YACD,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QACD,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACzC,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,2EAA2E;IAC3E,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QACxC,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,WAAkB,CAAC;IAC5B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,mCAAmC,CACjD,GAAqF,EACrF,MAA0B;IAE1B,IACE,OAAO,GAAG,KAAK,QAAQ;QACvB,OAAO,GAAG,KAAK,QAAQ;QACvB,OAAO,GAAG,KAAK,SAAS;QACxB,GAAG,KAAK,IAAI;QACZ,GAAG,KAAK,SAAS,EACjB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,UAAU,GAAG,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAElD,IACE,MAAM,KAAK,SAAS;QACpB,OAAO,UAAU,CAAC,MAAM,CAAC,KAAK,WAAW;QACzC,UAAU,CAAC,MAAM,CAAC,KAAK,IAAI,EAC3B,CAAC;QACD,OAAO,UAAU,CAAC,MAAM,CAA0B,CAAC;IACrD,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,aAAa,CAAC,KAAU;IAC/B,IAAI,KAAK,KAAK,qBAAa,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"flattenAttributes.js","sourceRoot":"","sources":["../../../../src/v3/utils/flattenAttributes.ts"],"names":[],"mappings":";;;AAKA,8CA6EC;AAMD,kDAiFC;AASD,kFAyBC;AAzMY,QAAA,aAAa,GAAG,UAAU,CAAC;AAC3B,QAAA,2BAA2B,GAAG,cAAc,CAAC;AAE1D,SAAgB,iBAAiB,CAC/B,GAA4F,EAC5F,MAAe,EACf,OAAwB,IAAI,OAAO,EAAE;IAErC,MAAM,MAAM,GAAe,EAAE,CAAC;IAE9B,oCAAoC;IACpC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,GAAG,qBAAa,CAAC;QACrC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC;QAC3B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC;QAC3B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,OAAO,GAAG,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC;QAC3B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,GAAG,YAAY,IAAI,EAAE,CAAC;QACxB,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QACzC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,+BAA+B;IAC/B,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7D,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,GAAG,mCAA2B,CAAC;QACnD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,yBAAyB;IACzB,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5C,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChB,CAAC;IAGD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,MAAM,SAAS,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QAC1F,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;oBACtD,iCAAiC;oBACjC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,KAAK,CAAC,GAAG,EAAC,IAAI,CAAC,CAAC,CAAC;gBACjF,CAAC;qBAAM,CAAC;oBACN,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;wBACtB,MAAM,CAAC,GAAG,SAAS,KAAK,CAAC,GAAG,CAAC,GAAG,qBAAa,CAAC;oBAChD,CAAC;yBAAM,CAAC;wBACN,MAAM,CAAC,GAAG,SAAS,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC3C,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,yBAAyB;YACzB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;QACnE,CAAC;aAAM,CAAC;YACN,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;gBACzF,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;YAC5B,CAAC;iBAAM,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBAC1B,MAAM,CAAC,SAAS,CAAC,GAAG,qBAAa,CAAC;YACpC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAgB,mBAAmB,CACjC,GAAe;IAEf,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAClE,OAAO,GAAG,CAAC;IACb,CAAC;IAED,IACE,OAAO,GAAG,KAAK,QAAQ;QACvB,GAAG,KAAK,IAAI;QACZ,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAC1B,CAAC;QACD,OAAO,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAQ,CAAC;IACvC,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAA4B,EAAE,CAAC;IAE3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CACjC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YACZ,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/C,sCAAsC;gBACtC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;gBACxC,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;oBACtB,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/B,CAAC;qBAAM,CAAC;oBACN,6CAA6C;oBAC7C,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC,EACD,EAAyB,CAC1B,CAAC;QAEF,IAAI,OAAO,GAAQ,MAAM,CAAC;QAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAE9B,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACxB,SAAS;YACX,CAAC;YAED,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACjC,gDAAgD;gBAChD,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACpE,CAAC;iBAAM,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;gBACvC,yCAAyC;gBACzC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YACrB,CAAC;YAED,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAED,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAEzC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;QAE9D,CAAC;IACH,CAAC;IAED,2EAA2E;IAC3E,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QACxC,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,WAAkB,CAAC;IAC5B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAU;IACnC,IAAI,KAAK,KAAK,mCAA2B,EAAE,CAAC;QAC1C,OAAO,sBAAsB,CAAC;IAChC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,mCAAmC,CACjD,GAAqF,EACrF,MAA0B;IAE1B,IACE,OAAO,GAAG,KAAK,QAAQ;QACvB,OAAO,GAAG,KAAK,QAAQ;QACvB,OAAO,GAAG,KAAK,SAAS;QACxB,GAAG,KAAK,IAAI;QACZ,GAAG,KAAK,SAAS,EACjB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,UAAU,GAAG,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAElD,IACE,MAAM,KAAK,SAAS;QACpB,OAAO,UAAU,CAAC,MAAM,CAAC,KAAK,WAAW;QACzC,UAAU,CAAC,MAAM,CAAC,KAAK,IAAI,EAC3B,CAAC;QACD,OAAO,UAAU,CAAC,MAAM,CAA0B,CAAC;IACrD,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,aAAa,CAAC,KAAU;IAC/B,IAAI,KAAK,KAAK,qBAAa,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}