nfkit 1.0.13 → 1.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +7 -0
- package/dist/index.cjs.map +3 -3
- package/dist/index.d.ts +1 -0
- package/dist/index.mjs +6 -0
- package/dist/index.mjs.map +3 -3
- package/dist/src/may-be-array.d.ts +2 -0
- package/index.ts +1 -0
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -30,6 +30,7 @@ __export(index_exports, {
|
|
|
30
30
|
abortable: () => abortable,
|
|
31
31
|
createI18nLookupMiddleware: () => createI18nLookupMiddleware,
|
|
32
32
|
dualizeAny: () => dualizeAny,
|
|
33
|
+
makeArray: () => makeArray,
|
|
33
34
|
observeDiff: () => observeDiff,
|
|
34
35
|
patchStringInObject: () => patchStringInObject,
|
|
35
36
|
workflow: () => workflow
|
|
@@ -1175,6 +1176,11 @@ var Memorize = () => {
|
|
|
1175
1176
|
}
|
|
1176
1177
|
};
|
|
1177
1178
|
};
|
|
1179
|
+
|
|
1180
|
+
// src/may-be-array.ts
|
|
1181
|
+
var makeArray = (value) => {
|
|
1182
|
+
return Array.isArray(value) ? value : [value];
|
|
1183
|
+
};
|
|
1178
1184
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1179
1185
|
0 && (module.exports = {
|
|
1180
1186
|
AbortedError,
|
|
@@ -1188,6 +1194,7 @@ var Memorize = () => {
|
|
|
1188
1194
|
abortable,
|
|
1189
1195
|
createI18nLookupMiddleware,
|
|
1190
1196
|
dualizeAny,
|
|
1197
|
+
makeArray,
|
|
1191
1198
|
observeDiff,
|
|
1192
1199
|
patchStringInObject,
|
|
1193
1200
|
workflow
|
package/dist/index.cjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../index.ts", "../src/workflow.ts", "../src/dual-object.ts", "../src/workflow-dispatcher.ts", "../src/round-robin.ts", "../src/abortable.ts", "../src/middleware-dispatcher.ts", "../src/utility/parse-i18n.ts", "../src/patch-string-in-object.ts", "../src/i18n/i18n.ts", "../src/i18n/middlewares/lookup.ts", "../src/observe-diff.ts", "../src/memorize.ts"],
|
|
4
|
-
"sourcesContent": ["export * from './src/workflow';\nexport * from './src/dual-object';\nexport * from './src/workflow-dispatcher';\nexport * from './src/round-robin';\nexport * from './src/abortable';\nexport * from './src/types';\nexport * from './src/middleware-dispatcher';\nexport * from './src/i18n';\nexport * from './src/patch-string-in-object';\nexport * from './src/observe-diff';\nexport * from './src/memorize';\n", "// ========== \u7C7B\u578B\u5DE5\u5177 ==========\ntype AwaitedLike<T> = T extends Promise<infer R> ? R : T;\ntype AnyFn = (...args: any[]) => any;\n\ntype Chain<T> = Promise<AwaitedLike<T>> &\n (T extends AnyFn\n ? (...a: Parameters<T>) => Chain<AwaitedLike<ReturnType<T>>>\n : {}) & {\n [K in keyof T]: T[K] extends (...a: infer A) => infer R\n ? (...a: A) => Chain<AwaitedLike<R>>\n : Chain<AwaitedLike<T[K]>>;\n };\n\n// ========== \u6838\u5FC3\uFF1A\u4E0D\u53EF\u53D8\u8282\u70B9 ==========\nclass Node {\n private memo?: Promise<any>;\n constructor(\n private readonly source: any, // \u53EA\u6709\u6839\u8282\u70B9\u6709\u610F\u4E49\uFF1B\u5B50\u8282\u70B9\u53EF\u590D\u7528\u6839\u7684 source\n private readonly parent: Node | null, // \u524D\u7F00\n private readonly op: ((x: any) => any) | null, // \u4ECE parent \u7ED3\u679C\u5230\u672C\u8282\u70B9\u7ED3\u679C\u7684\u53D8\u6362\n ) {}\n\n run(): Promise<any> {\n if (!this.memo) {\n this.memo = (async () => {\n if (!this.parent) {\n // \u6839\uFF1A\u628A source \u89E3\u4E00\u6B21\u5373\u53EF\n return await this.source;\n }\n // \u5148\u62FF\u5230\u7236\u8282\u70B9\u7ED3\u679C\uFF08\u4F1A\u8BB0\u5FC6\u5316\uFF09\n const base = await this.parent.run();\n // \u5E94\u7528\u672C\u8282\u70B9\u7684\u53D8\u6362\uFF08\u5141\u8BB8\u8FD4\u56DE\u540C\u6B65\u6216\u5F02\u6B65\uFF09\n return this.op ? this.op(base) : base;\n })();\n }\n return this.memo;\n }\n\n // \u5DE5\u5382\uFF1A\u884D\u751F\u5B50\u8282\u70B9\uFF08\u5206\u53C9 = \u590D\u7528\u540C\u4E00\u4E2A parent\uFF09\n child(op: (x: any) => any): Node {\n return new Node(this.source, this, op);\n }\n\n // \u62FF\u5230\u201C\u76F8\u540C\u8282\u70B9\u201D\u7684\u53E5\u67C4\uFF08\u663E\u5F0F fork\uFF09\n fork(): Node {\n return new Node(this.source, this.parent, this.op);\n }\n}\n\nexport const WF_NODE = Symbol('@@workflow/node');\n\nfunction isWorkflowChain(x: any): x is Chain<any> {\n return !!x && typeof x === 'function' && x[WF_NODE] instanceof Node;\n}\n\n// ========== \u5BF9\u5916 API\uFF1Aworkflow ==========\nexport function workflow<T>(source: T | Promise<T>): Chain<T> {\n if (isWorkflowChain(source)) {\n return source as unknown as Chain<T>;\n }\n const root = new Node(source, null, null);\n return makeProxy<T>(root) as any;\n}\n\n// ========== \u4EE3\u7406\u5C42\uFF1A\u628A Node \u66B4\u9732\u6210\u94FE\u5F0F API ==========\nfunction makeProxy<T>(node: Node): Chain<T> {\n const runOnce = () => node.run(); // \u8BB0\u5FC6\u5316\u5728 Node \u5185\u90E8\n\n const rootHandler: ProxyHandler<any> = {\n get(_t, prop) {\n if (prop === WF_NODE) return node;\n // \u7ED3\u675F\u4FE1\u53F7\uFF1A\u6240\u6709 then/catch/finally \u590D\u7528\u540C\u4E00\u4E2A Promise\n if (prop === 'then')\n return (res: any, rej?: any) => runOnce().then(res, rej);\n if (prop === 'catch') return (rej: any) => runOnce().catch(rej);\n if (prop === 'finally') return (fin: any) => runOnce().finally(fin);\n\n // \u8BBF\u95EE\u4E00\u4E2A\u5C5E\u6027\uFF1A\u751F\u6210\u4E00\u4E2A\u201CGet\u201D\u5B50\u8282\u70B9\uFF0C\u4F46\u4E0D\u6267\u884C\n return linkProxy(prop);\n },\n // \u652F\u6301\u5BF9\u201C\u5F53\u524D\u503C\u201D\u76F4\u63A5\u4E8C\u6B21\u8C03\u7528\uFF1A foo()()\n apply(_t, _this, argArray) {\n const child = node.child((cur: any) => {\n if (typeof cur !== 'function')\n throw new TypeError('Current value is not callable');\n return cur(...argArray);\n });\n return makeProxy<any>(child);\n },\n };\n\n const linkProxy = (prop: PropertyKey) =>\n new Proxy(function () {}, {\n // \u628A \u201C.foo(\u2026args)\u201D \u8BB0\u5F55\u4E3A Call\n apply(_t, _this, argArray) {\n const child = node.child((cur: any) => {\n const fn = (cur as any)[prop];\n if (typeof fn !== 'function') {\n throw new TypeError(`${String(prop)} is not a function`);\n }\n return fn.apply(cur, argArray);\n });\n return makeProxy<any>(child);\n },\n // \u628A \u201C.bar\u201D \u8BB0\u5F55\u4E3A Get\uFF1B\u7EE7\u7EED\u6DF1\u5165\u65F6\u5728\u8FD9\u4E2A Get \u7684\u7ED3\u679C\u4E0A\u518D\u5904\u7406\n get(_t, next) {\n if (next === WF_NODE) return node;\n if (next === 'then')\n return (r: any, j?: any) =>\n node\n .child((cur: any) => (cur as any)[prop])\n .run()\n .then(r, j);\n if (next === 'catch')\n return (rej: any) =>\n node\n .child((cur: any) => (cur as any)[prop])\n .run()\n .catch(rej);\n if (next === 'finally')\n return (fin: any) =>\n node\n .child((cur: any) => (cur as any)[prop])\n .run()\n .finally(fin);\n\n const child = node.child((cur: any) => (cur as any)[prop]);\n return (makeProxy as any)(child)[next];\n },\n });\n\n return new Proxy(function () {}, rootHandler) as any;\n}\n", "// dual-unified.ts\nexport type Dual<T> = T & PromiseLike<T>;\n\ntype ThenKey = 'then' | 'catch' | 'finally';\nconst isThenKey = (k: PropertyKey): k is ThenKey =>\n k === 'then' || k === 'catch' || k === 'finally';\n\ntype State = 'undecided' | 'pending' | 'fulfilled' | 'rejected';\n\n/** \u4EC5\u5141\u8BB8\u586B\u5165 \u201C\u8FD4\u56DE Promise \u7684\u65B9\u6CD5\u540D\u201D */\nexport type AsyncMethodKeys<T> = {\n [K in keyof T]-?: T[K] extends (...args: any[]) => Promise<any> ? K : never;\n}[keyof T];\n\nexport interface DualizeOptions<T> {\n /** \u8FD9\u4E9B\u65B9\u6CD5\u5728 undecided/pending \u65F6\u4F1A\u8FD4\u56DE\u4E00\u4E2A\u5EF6\u8FDF\u6267\u884C\u51FD\u6570\uFF0C\u7B49\u5F85\u5BF9\u8C61 Promise \u5B8C\u6210\u540E\u518D\u8C03\u7528 */\n asyncMethods?: readonly AsyncMethodKeys<T>[];\n}\n\nexport function dualizeAny<T>(\n sync: () => T, // \u540C\u6B65\u6784\u9020\uFF1B\u82E5\u629B\u9519\u5219\u89C6\u4E3A rejected\n asyncFn: () => Promise<T>, // \u5F02\u6B65\u6784\u9020\n options?: DualizeOptions<T>,\n): Dual<T> {\n let state: State = 'undecided';\n\n let value!: T; // fulfilled \u65F6\u7684\u503C\uFF08\u542B\u6765\u81EA sync \u6216 async\uFF09\n let reason: any; // rejected \u7684\u9519\u8BEF\n let p!: Promise<T>; // \u7F13\u5B58 Promise\uFF08resolved/rejected/\u8FDB\u884C\u4E2D\uFF09\n\n const asyncMethodSet = new Set<PropertyKey>(\n (options?.asyncMethods ?? []) as readonly PropertyKey[],\n );\n\n const startAsync = () => {\n if (!p || state === 'undecided') {\n state = 'pending';\n p = Promise.resolve()\n .then(asyncFn)\n .then(\n (v) => {\n value = v;\n state = 'fulfilled';\n return v;\n },\n (e) => {\n reason = e;\n state = 'rejected';\n throw e;\n },\n );\n }\n return p;\n };\n\n const ensureSync = () => {\n if (state === 'undecided') {\n try {\n value = sync();\n state = 'fulfilled';\n } catch (e) {\n reason = e;\n state = 'rejected';\n }\n }\n };\n\n /** \u5728\u201C\u5BF9\u8C61\u53EF\u7528\u201D\u540E\u8C03\u7528\u67D0\u4E2A\u5F02\u6B65\u65B9\u6CD5\uFF08\u7531 asyncMethods \u58F0\u660E\uFF09 */\n const makeDeferredAsyncMethod =\n (prop: PropertyKey) =>\n (...args: any[]) =>\n startAsync().then((obj) => {\n const fn = (obj as any)[prop];\n return fn.apply(obj, args);\n });\n\n // \u4ECE\u67D0\u4E2A\u503C\u4E0A\u53D6\u5C5E\u6027\uFF08\u539F\u59CB\u503C\u4F1A\u88C5\u7BB1\uFF09\uFF0C\u5E76\u7ED1\u5B9A this\n const getFrom = (v: unknown, prop: PropertyKey) => {\n if (prop === Symbol.toPrimitive) {\n return (hint: 'default' | 'number' | 'string') => {\n const x: any = v;\n if (hint === 'number') return Number(x);\n if (hint === 'string') return String(x);\n if (typeof x === 'string') return x;\n const n = Number(x);\n return Number.isNaN(n) ? String(x) : n;\n };\n }\n if (prop === 'valueOf') return () => v as any;\n if (prop === 'toString') return () => String(v);\n\n const boxed: any =\n v !== null && (typeof v === 'object' || typeof v === 'function')\n ? v\n : Object(v as any);\n const out = boxed[prop];\n return typeof out === 'function' ? out.bind(boxed) : out;\n };\n\n const proxy = new Proxy(Object.create(null) as any, {\n get(_t, prop) {\n // then/catch/finally\uFF1A\u8D70 Promise \u901A\u9053\n if (isThenKey(prop)) {\n if (state === 'undecided') {\n startAsync();\n } else if (state === 'fulfilled') {\n // \u82E5\u5DF2 fulfilled\uFF08\u6765\u81EA sync \u6216 async\uFF09\uFF0C\u8865\u4E00\u4E2A\u5DF2\u5B8C\u6210\u7684 Promise\n p ||= Promise.resolve(value);\n } else if (state === 'rejected') {\n p ||= Promise.reject(reason);\n } else {\n // pending\uFF1A\u5DF2\u6709 p\n startAsync();\n }\n const anyP: any = p;\n const m = anyP[prop];\n return typeof m === 'function' ? m.bind(anyP) : m;\n }\n\n // \u58F0\u660E\u4E3A\u5F02\u6B65\u65B9\u6CD5\u7684\u952E\uFF1A\u5728 undecided/pending \u65F6\u8FD4\u56DE\u201C\u5EF6\u8FDF\u51FD\u6570\u201D\n if (asyncMethodSet.has(prop)) {\n if (state === 'undecided' || state === 'pending') {\n startAsync();\n return makeDeferredAsyncMethod(prop);\n }\n if (state === 'fulfilled') {\n return getFrom(value, prop); // \u540C\u6B65\u53EF\u76F4\u63A5\u53D6\u5230\u65B9\u6CD5\uFF08\u5176\u672C\u8EAB\u8FD4\u56DE Promise\uFF09\n }\n if (state === 'rejected') {\n // \u8BBF\u95EE\u5373\u629B\uFF1B\u4E5F\u53EF\u4EE5\u9009\u62E9\u8FD4\u56DE () => Promise.reject(reason)\n throw reason;\n }\n }\n\n // \u5176\u5B83\u5C5E\u6027\u8BBF\u95EE\uFF1A\u9075\u5FAA\u72B6\u6001\u673A\n switch (state) {\n case 'undecided': {\n ensureSync();\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n if (state === 'fulfilled') return getFrom(value, prop);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n if (state === 'rejected') throw reason;\n // \u7406\u8BBA\u4E0A\u4E0D\u4F1A\u5230\u8FD9\u91CC\n throw new TypeError('Invalid state transition');\n }\n case 'pending': {\n // \u975E asyncMethods \u7684\u5C5E\u6027\u5728 pending \u65F6\u4E0D\u53EF\u540C\u6B65\u8BFB\u53D6\n throw new TypeError('Value is not ready yet. Please await it first.');\n }\n case 'fulfilled': {\n return getFrom(value, prop);\n }\n case 'rejected': {\n throw reason;\n }\n }\n },\n\n has(_t, key) {\n if (state === 'undecided') {\n ensureSync();\n }\n if (state === 'fulfilled') return key in Object(value as any);\n return false; // pending/rejected\uFF1A\u4FDD\u5B88\u5904\u7406\n },\n\n ownKeys() {\n if (state === 'undecided') ensureSync();\n if (state === 'fulfilled') return Reflect.ownKeys(Object(value as any));\n return [];\n },\n\n getOwnPropertyDescriptor(_t, key) {\n if (state === 'undecided') ensureSync();\n if (state === 'fulfilled')\n return Object.getOwnPropertyDescriptor(Object(value as any), key);\n return undefined;\n },\n });\n\n return proxy as Dual<T>;\n}\n", "export interface DispatcherOptions {\n /** Max attempts per task. Default 3. */\n maxAttempts?: number;\n /** Backoff base in ms. backoff = base * 2^failCount. Default 1000. */\n backoffBaseMs?: number;\n}\n\n// Internal task record\ntype Task<F extends (...args: any[]) => Promise<any>> = {\n args: Parameters<F>;\n resolve: (v: Awaited<ReturnType<F>>) => void;\n reject: (e: any) => void;\n attempts: number;\n lastError?: any;\n triedWorkers: Set<number>; // for global dispatch\n specificWorkerIndex?: number; // for dispatchSpecific only\n};\n\ntype WorkerState = {\n running: boolean;\n failCount: number;\n nextAvailableAt: number;\n totalRuns: number;\n};\n\ntype RemovalWaiter = () => void;\n\ntype ActiveSlot<F extends (...args: any[]) => Promise<any>> = {\n kind: 'active';\n fn: F;\n state: WorkerState;\n queue: Task<F>[];\n removalWaiters: RemovalWaiter[];\n removed?: boolean; // marker when removed while running; retained for completion callback\n};\n\ntype PendingSlot<F extends (...args: any[]) => Promise<any>> = {\n kind: 'pending';\n promise: Promise<F>;\n queue: Task<F>[];\n removalWaiters: RemovalWaiter[];\n error?: any;\n removed?: boolean; // if removed before resolved\n};\n\ntype RejectedSlot<F extends (...args: any[]) => Promise<any>> = {\n kind: 'rejected';\n error: any;\n queue: Task<F>[];\n removalWaiters: RemovalWaiter[];\n removed?: boolean;\n};\n\ntype Slot<F extends (...args: any[]) => Promise<any>> =\n | ActiveSlot<F>\n | PendingSlot<F>\n | RejectedSlot<F>;\n\nexport type WorkerSnapshot<F extends (...args: any[]) => Promise<any>> =\n | {\n index: number;\n status: 'active';\n fn: F;\n running: boolean;\n failCount: number;\n totalRuns: number;\n blockedMs: number;\n specificQueue: number;\n }\n | {\n index: number;\n status: 'pending';\n promise: Promise<F>;\n specificQueue: number;\n }\n | {\n index: number;\n status: 'rejected';\n error: string;\n specificQueue: number;\n };\n\nexport class WorkflowDispatcher<F extends (...args: any[]) => Promise<any>> {\n private readonly maxAttempts: number;\n private readonly backoffBaseMs: number;\n\n private readonly slots: Slot<F>[] = [];\n private readonly globalQueue: Task<F>[] = [];\n\n private pendingInits = 0;\n private everActivated = false;\n private drainScheduled = false;\n\n constructor(\n workersOrPromises: Array<F | Promise<F>>,\n options: DispatcherOptions = {},\n ) {\n // if (!workersOrPromises?.length) throw new Error('workers cannot be empty');\n\n this.maxAttempts = options.maxAttempts ?? 3;\n this.backoffBaseMs = options.backoffBaseMs ?? 1000;\n\n for (let i = 0; i < workersOrPromises.length; i++) {\n const w = workersOrPromises[i];\n if (typeof w === 'function') {\n const slot: ActiveSlot<F> = {\n kind: 'active',\n fn: w,\n state: {\n running: false,\n failCount: 0,\n nextAvailableAt: 0,\n totalRuns: 0,\n },\n queue: [],\n removalWaiters: [],\n };\n this.slots.push(slot);\n this.everActivated = true;\n } else {\n // Create a stable slot object and mutate it in-place on resolve/reject.\n this.pendingInits++;\n const slot: PendingSlot<F> = {\n kind: 'pending',\n promise: Promise.resolve(w),\n queue: [],\n removalWaiters: [],\n };\n this.slots.push(slot);\n\n slot.promise\n .then((fn) => {\n if (slot.removed) return; // was removed; ignore resolution\n // mutate in-place to active\n (slot as any).kind = 'active';\n (slot as any).fn = fn;\n (slot as any).state = {\n running: false,\n failCount: 0,\n nextAvailableAt: 0,\n totalRuns: 0,\n };\n this.everActivated = true;\n // keep queue & removalWaiters arrays as-is\n })\n .catch((err) => {\n if (slot.removed) return; // was removed; ignore\n // mutate in-place to rejected (keep queue/waiters)\n (slot as any).kind = 'rejected';\n (slot as any).error = err;\n })\n .finally(() => {\n this.pendingInits--;\n this.drain();\n if (this.pendingInits === 0 && !this.hasAnyActive()) {\n const err = new Error(\n 'No workers available (all failed to initialize).',\n );\n setTimeout(() => this.rejectAllQueued(err), 0);\n }\n });\n }\n }\n\n if (this.everActivated) this.drain();\n }\n\n /** Dispatch: choose eligible active with least totalRuns; retry across workers on failure. */\n dispatch(...args: Parameters<F>): Promise<Awaited<ReturnType<F>>> {\n return new Promise((resolve, reject) => {\n const task: Task<F> = {\n args,\n resolve,\n reject,\n attempts: 0,\n triedWorkers: new Set(),\n };\n this.globalQueue.push(task);\n this.drain();\n });\n }\n\n /** Dispatch to a specific worker (ignore backoff), wait until it is free; retry on the same worker. */\n dispatchSpecific(\n index: number,\n ...args: Parameters<F>\n ): Promise<Awaited<ReturnType<F>>> {\n if (index < 0 || index >= this.slots.length) {\n return Promise.reject(new Error(`worker index out of range: ${index}`));\n }\n return new Promise((resolve, reject) => {\n const task: Task<F> = {\n args,\n resolve,\n reject,\n attempts: 0,\n triedWorkers: new Set(),\n specificWorkerIndex: index,\n };\n const slot = this.slots[index];\n slot.queue.push(task);\n this.drain();\n });\n }\n\n /** Replace a worker at index with a new active worker function. */\n public replaceWorker(index: number, fn: F): void {\n if (index < 0 || index >= this.slots.length) {\n throw new Error(`worker index out of range: ${index}`);\n }\n const prevHadActive = this.hasAnyActive();\n const slot = this.slots[index];\n\n // Preserve queue & removal waiters; reset failure/backoff; keep totalRuns to avoid skew.\n const preservedQueue = slot.queue;\n const preservedWaiters = slot.removalWaiters ?? [];\n\n const next: ActiveSlot<F> = {\n kind: 'active',\n fn,\n state: {\n running: false,\n failCount: 0,\n nextAvailableAt: 0,\n totalRuns: (slot as any).state?.totalRuns ?? 0,\n },\n queue: preservedQueue,\n removalWaiters: preservedWaiters,\n };\n\n // Mutate in-place if possible (keeps references stable), else replace array entry.\n Object.assign(slot as any, next);\n (slot as any).kind = 'active';\n (slot as any).fn = fn;\n (slot as any).state.failCount = 0;\n (slot as any).state.nextAvailableAt = 0;\n\n this.everActivated = true;\n if (!prevHadActive && this.hasAnyActive()) {\n this.drain();\n } else {\n this.drain();\n }\n }\n\n /** Add a new active worker at the tail; return its index. */\n public addWorker(fn: F): number {\n const slot: ActiveSlot<F> = {\n kind: 'active',\n fn,\n state: { running: false, failCount: 0, nextAvailableAt: 0, totalRuns: 0 },\n queue: [],\n removalWaiters: [],\n };\n const index = this.slots.length;\n this.slots.push(slot);\n this.everActivated = true;\n this.drain();\n return index;\n }\n\n /**\n * Remove a worker completely (splice). It becomes unavailable immediately.\n * Returns a Promise that resolves when its last running task (if any) finishes.\n */\n public removeWorker(index: number): Promise<void> {\n if (index < 0 || index >= this.slots.length) {\n return Promise.reject(new Error(`worker index out of range: ${index}`));\n }\n\n const slot = this.slots[index];\n\n // Reject all queued specific tasks on this worker (macro-task to avoid unhandled)\n const queued = slot.queue.splice(0);\n const removalErr = new Error(`Worker[${index}] removed`);\n setTimeout(() => {\n for (const t of queued) t.reject(removalErr);\n }, 0);\n\n // Decide completion promise:\n let completion: Promise<void>;\n const isRunning = slot.kind === 'active' && slot.state.running;\n if (!isRunning) {\n completion = Promise.resolve();\n } else {\n completion = new Promise<void>((resolve) => {\n slot.removalWaiters.push(resolve);\n });\n }\n\n // Mark as removed (so any pending init resolution is ignored)\n (slot as any).removed = true;\n\n // Physically remove the slot\n this.slots.splice(index, 1);\n\n // Re-map indices in all remaining tasks:\n // 1) Fix specificWorkerIndex in every remaining slot.queue\n for (let i = 0; i < this.slots.length; i++) {\n const s = this.slots[i];\n for (const t of s.queue) {\n if (typeof t.specificWorkerIndex === 'number') {\n if (t.specificWorkerIndex === index) {\n // This should not happen because we just removed and flushed its queue,\n // but guard anyway.\n t.reject(new Error(`Worker[${index}] no longer exists`));\n } else if (t.specificWorkerIndex > index) {\n t.specificWorkerIndex -= 1;\n }\n }\n }\n }\n // 2) Fix triedWorkers sets in globalQueue\n for (const t of this.globalQueue) {\n if (t.triedWorkers.has(index)) t.triedWorkers.delete(index);\n const next = new Set<number>();\n for (const w of t.triedWorkers) {\n next.add(w > index ? w - 1 : w);\n }\n t.triedWorkers = next;\n }\n\n // Trigger scheduling for the remaining system\n this.drain();\n\n return completion;\n }\n\n snapshot(): WorkerSnapshot<F>[] {\n const now = Date.now();\n\n return this.slots.map((slot, i) => {\n switch (slot.kind) {\n case 'active': {\n const s = slot.state;\n return {\n index: i,\n status: 'active' as const,\n fn: slot.fn,\n running: s.running,\n failCount: s.failCount,\n totalRuns: s.totalRuns,\n blockedMs: Math.max(0, s.nextAvailableAt - now),\n specificQueue: slot.queue.length,\n };\n }\n\n case 'pending':\n return {\n index: i,\n status: 'pending' as const,\n promise: slot.promise,\n specificQueue: slot.queue.length,\n };\n\n case 'rejected':\n return {\n index: i,\n status: 'rejected' as const,\n error: String(slot.error ?? 'unknown error'),\n specificQueue: slot.queue.length,\n };\n }\n });\n }\n\n get pending(): number {\n return this.globalQueue.length;\n }\n\n // ---------------- scheduling ----------------\n\n private drain() {\n if (this.drainScheduled) return;\n this.drainScheduled = true;\n queueMicrotask(() => {\n this.drainScheduled = false;\n this._drainLoop();\n });\n }\n\n private _drainLoop() {\n // If no active workers and still initializing, wait; if all inited and none active, constructor already rejects all.\n if (!this.hasAnyActive()) {\n if (this.pendingInits > 0) return;\n return;\n }\n\n // First: flush rejected workers' specific queues (macro-task rejection)\n for (let i = 0; i < this.slots.length; i++) {\n const slot = this.slots[i];\n if (slot.kind === 'rejected' && slot.queue.length > 0) {\n const q = slot.queue.splice(0);\n const err = new Error(\n `Worker[${i}] failed to initialize: ${String(slot.error ?? 'unknown error')}`,\n );\n setTimeout(() => {\n for (const t of q) t.reject(err);\n }, 0);\n }\n }\n\n let progressed = true;\n while (progressed) {\n progressed = false;\n\n // 1) Run specific queues for active workers (ignore backoff)\n for (let i = 0; i < this.slots.length; i++) {\n const slot = this.slots[i];\n if (slot.kind !== 'active') continue;\n const st = slot.state;\n if (!st.running && slot.queue.length > 0) {\n const task = slot.queue.shift()!;\n this.startTaskOnActiveSlot(i, slot, task, /*fromSpecific*/ true);\n progressed = true;\n }\n }\n\n // 2) Run global queue (choose eligible active with least totalRuns)\n if (this.globalQueue.length > 0) {\n const idx = this.pickBestActiveForGlobal();\n if (idx !== -1) {\n const slot = this.slots[idx] as ActiveSlot<F>;\n const task = this.globalQueue.shift()!;\n this.startTaskOnActiveSlot(idx, slot, task, /*fromSpecific*/ false);\n progressed = true;\n }\n }\n }\n }\n\n private hasAnyActive() {\n return this.slots.some((s) => s.kind === 'active');\n }\n\n private rejectAllQueued(err: any) {\n while (this.globalQueue.length) this.globalQueue.shift()!.reject(err);\n for (const slot of this.slots) {\n while (slot.queue.length) slot.queue.shift()!.reject(err);\n }\n }\n\n private isEligibleActive(i: number, now: number) {\n const slot = this.slots[i] as ActiveSlot<F>;\n const slotGood = (s: ActiveSlot<F>) =>\n s.kind === 'active' && !s.state?.running;\n if (!slotGood(slot)) return false;\n if (now >= slot.state.nextAvailableAt) return true;\n return !this.slots.some((other: ActiveSlot<F>, j) => {\n if (j === i) return false;\n if (!slotGood(other)) return false;\n return now >= other.state.nextAvailableAt;\n });\n }\n\n private pickBestActiveForGlobal(): number {\n const now = Date.now();\n const task = this.globalQueue[0];\n\n // Prefer actives not tried yet\n let best = -1,\n bestRuns = Infinity;\n for (let i = 0; i < this.slots.length; i++) {\n if (!this.isEligibleActive(i, now)) continue;\n if (task?.triedWorkers.has(i)) continue;\n const slot = this.slots[i] as ActiveSlot<F>;\n if (slot.state.totalRuns < bestRuns) {\n bestRuns = slot.state.totalRuns;\n best = i;\n }\n }\n if (best !== -1) return best;\n\n // Allow already-tried actives\n best = -1;\n bestRuns = Infinity;\n for (let i = 0; i < this.slots.length; i++) {\n if (!this.isEligibleActive(i, now)) continue;\n const slot = this.slots[i] as ActiveSlot<F>;\n if (slot.state.totalRuns < bestRuns) {\n bestRuns = slot.state.totalRuns;\n best = i;\n }\n }\n return best;\n }\n\n private startTaskOnActiveSlot(\n index: number,\n slot: ActiveSlot<F>,\n task: Task<F>,\n fromSpecific: boolean,\n ) {\n const st = slot.state;\n st.running = true;\n st.totalRuns += 1;\n\n const finalize = () => {\n st.running = false;\n // If someone is waiting for this worker to finish (removeWorker), resolve them when idle.\n if (\n slot.removalWaiters.length > 0 &&\n !st.running &&\n slot.queue.length === 0\n ) {\n const list = slot.removalWaiters.splice(0);\n for (const w of list) w();\n }\n this.drain();\n };\n\n (async () => {\n try {\n const result = await slot.fn(...task.args);\n st.failCount = Math.max(0, st.failCount - 1);\n task.resolve(result as Awaited<ReturnType<F>>);\n } catch (err) {\n task.lastError = err;\n st.failCount += 1;\n st.nextAvailableAt =\n Date.now() + this.backoffBaseMs * Math.pow(2, st.failCount);\n\n if (fromSpecific) {\n task.attempts += 1;\n if (task.attempts >= this.maxAttempts) {\n task.reject(task.lastError);\n } else {\n // retry on the same worker (ignore backoff)\n slot.queue.push(task);\n }\n } else {\n task.attempts += 1;\n task.triedWorkers.add(index);\n const activeCount = this.slots.filter(\n (s) => s.kind === 'active',\n ).length;\n const allActiveTriedOnce = task.triedWorkers.size >= activeCount;\n const attemptsLimitReached = task.attempts >= this.maxAttempts;\n\n if (allActiveTriedOnce || attemptsLimitReached) {\n task.reject(task.lastError);\n } else {\n this.globalQueue.push(task);\n }\n }\n } finally {\n finalize();\n }\n })();\n }\n}\n", "export class RoundRobin<T> {\n private index = 0;\n\n constructor(public items: T[]) {\n if (items.length === 0) {\n throw new Error('RoundRobin requires at least one item');\n }\n }\n\n next(): T {\n const nextIndex = this.index % this.items.length;\n this.index = (this.index + 1) % this.items.length;\n return this.items[nextIndex];\n }\n}\n", "export class AbortedError extends Error {\n name = 'AbortError';\n constructor(\n msg = 'Operation aborted',\n public cause?: unknown,\n ) {\n super(msg);\n }\n}\n\ntype AnyFunc = (...args: any[]) => any;\nconst isObjectLike = (v: unknown): v is object | AnyFunc =>\n (typeof v === 'object' && v !== null) || typeof v === 'function';\n\nfunction boxPrimitive(v: unknown): object {\n return Object(v as any);\n}\n\nexport interface AbortableOpts {\n /** \u662F\u5426\u628A\u539F\u59CB\u503C\u88C5\u7BB1\u540E\u518D\u4EE3\u7406\uFF08\u4F1A\u6539\u53D8 typeof/=== \u8BED\u4E49\uFF0C\u9ED8\u8BA4 false\uFF09 */\n boxPrimitives?: boolean;\n /** \u4E0D\u9012\u5F52\u4EE3\u7406\u5B50\u5BF9\u8C61\uFF08\u4EC5\u4EE3\u7406\u9876\u5C42\u5BF9\u8C61/\u51FD\u6570\uFF0C\u9ED8\u8BA4 false\uFF09 */\n noRecursive?: boolean;\n}\n\nexport function abortable<T>(\n obj: T,\n signal: AbortSignal,\n opts?: AbortableOpts,\n): T {\n const { boxPrimitives = false, noRecursive = false } = opts ?? {};\n\n const throwIfAborted = () => {\n if (signal.aborted) {\n const r = (signal as any).reason;\n if (r instanceof Error) throw r;\n throw new AbortedError('Operation aborted', r);\n }\n };\n\n throwIfAborted();\n\n const targetToProxy = new WeakMap<object, any>();\n const proxyToTarget = new WeakMap<object, any>();\n\n const wrapNativePromise = <V>(pLike: PromiseLike<V>): Promise<V> => {\n const base = pLike instanceof Promise ? pLike : Promise.resolve(pLike);\n return base.then(\n async (v) => {\n throwIfAborted();\n return proxify(v);\n },\n async (e) => {\n throwIfAborted();\n throw e;\n },\n );\n };\n\n let shortCircuit = false;\n\n const proxify = <V>(value: V): V => {\n if (noRecursive) {\n if (shortCircuit) {\n return value;\n } else {\n shortCircuit = true;\n }\n }\n\n // Promise\uFF1A\u6309\u201C\u771F Promise + \u4EE3\u7406\u201D\u7684\u65B9\u6848\u5904\u7406\n if (typeof (value as any)?.then === 'function') {\n return wrapNativePromise(value as any) as unknown as V;\n }\n\n // \u539F\u59CB\u503C\n if (!isObjectLike(value)) {\n if (!boxPrimitives) return value;\n return proxify(boxPrimitive(value) as unknown as V);\n }\n\n // \u590D\u7528\n const cached = targetToProxy.get(value as object);\n if (cached) return cached;\n\n const handler: ProxyHandler<any> = {\n get(target, p, receiver) {\n throwIfAborted();\n const out = Reflect.get(target, p, receiver);\n return proxify(out);\n },\n set(target, p, val, receiver) {\n throwIfAborted();\n return Reflect.set(target, p, val, receiver);\n },\n apply(target, thisArg, argArray) {\n throwIfAborted();\n const unwrappedThis =\n (isObjectLike(thisArg) && proxyToTarget.get(thisArg as any)) ||\n thisArg;\n const ret = Reflect.apply(target as AnyFunc, unwrappedThis, argArray);\n return proxify(ret);\n },\n construct(target, argArray, newTarget) {\n throwIfAborted();\n const instance = Reflect.construct(\n target as AnyFunc,\n argArray,\n newTarget,\n );\n return proxify(instance);\n },\n defineProperty(t, p, attrs) {\n throwIfAborted();\n return Reflect.defineProperty(t, p, attrs);\n },\n deleteProperty(t, p) {\n throwIfAborted();\n return Reflect.deleteProperty(t, p);\n },\n getOwnPropertyDescriptor(t, p) {\n throwIfAborted();\n return Reflect.getOwnPropertyDescriptor(t, p);\n },\n getPrototypeOf(t) {\n throwIfAborted();\n return Reflect.getPrototypeOf(t);\n },\n setPrototypeOf(t, proto) {\n throwIfAborted();\n return Reflect.setPrototypeOf(t, proto);\n },\n has(t, p) {\n throwIfAborted();\n return Reflect.has(t, p);\n },\n isExtensible(t) {\n throwIfAborted();\n return Reflect.isExtensible(t);\n },\n ownKeys(t) {\n throwIfAborted();\n return Reflect.ownKeys(t);\n },\n preventExtensions(t) {\n throwIfAborted();\n return Reflect.preventExtensions(t);\n },\n };\n\n const proxy = new Proxy(value as any, handler);\n targetToProxy.set(value as object, proxy);\n proxyToTarget.set(proxy, value);\n return proxy;\n };\n\n return proxify(obj);\n}\n", "import { Awaitable } from './types';\n\ntype AnyFunc = (...args: any[]) => any;\n\ntype MiddlewareValue<F extends AnyFunc> = Awaited<ReturnType<F>>;\ntype MiddlewareResult<F extends AnyFunc> = Promise<MiddlewareValue<F>>;\ntype MiddlewareNext<F extends AnyFunc> = () => MiddlewareResult<F>;\ntype MiddlewareArgs<F extends AnyFunc> = [\n ...args: Parameters<F>,\n next: MiddlewareNext<F>,\n];\ntype MiddlewareReturn<F extends AnyFunc> = Awaitable<MiddlewareValue<F>>;\n\nexport type Middleware<F extends AnyFunc> = (\n ...args: MiddlewareArgs<F>\n) => MiddlewareReturn<F>;\n\nexport type MiddlewareAcceptResult<F extends AnyFunc> = (\n s: MiddlewareValue<F>,\n) => Awaitable<boolean>;\nexport type MiddlewareErrorHandler<F extends AnyFunc> = (\n e: any,\n args: Parameters<F>,\n next: MiddlewareNext<F>,\n) => Awaitable<MiddlewareValue<F>>;\n\nexport interface MiddlewareDispatcherOptions<F extends AnyFunc> {\n acceptResult?: MiddlewareAcceptResult<F>;\n errorHandler?: MiddlewareErrorHandler<F>;\n}\n\nexport class MiddlewareDispatcher<F extends AnyFunc> {\n constructor(private options: MiddlewareDispatcherOptions<F> = {}) {}\n middlewares: Middleware<F>[] = [];\n\n middleware(mw: Middleware<F>, prior = false) {\n if (prior) {\n this.middlewares.unshift(mw);\n } else {\n this.middlewares.push(mw);\n }\n return this;\n }\n\n removeMiddleware(mw: Middleware<F>) {\n const index = this.middlewares.indexOf(mw);\n if (index >= 0) {\n this.middlewares.splice(index, 1);\n }\n return this;\n }\n\n dispatch(...args: Parameters<F>): MiddlewareResult<F> {\n const mws = this.middlewares;\n const acceptResult: MiddlewareAcceptResult<F> =\n this.options.acceptResult || ((res) => res != null);\n const errorHandler: MiddlewareErrorHandler<F> =\n this.options.errorHandler || ((e, args, next) => next());\n const dispatch = async (i: number): MiddlewareResult<F> => {\n if (i >= mws.length) return undefined;\n\n const mw = mws[i];\n let nextCalled = false;\n\n const next = async (): MiddlewareResult<F> => {\n if (nextCalled) {\n return undefined;\n }\n nextCalled = true;\n return dispatch(i + 1);\n };\n\n const runMw = async (cb: () => MiddlewareReturn<F>) => {\n const res = await cb();\n if (!nextCalled && !(await acceptResult(res))) {\n return dispatch(i + 1);\n }\n return res;\n };\n\n try {\n return await runMw(() => mw(...args, next));\n } catch (e) {\n return await runMw(() => errorHandler(e, args, next));\n }\n };\n return dispatch(0);\n }\n}\n", "// \u2014\u2014 \u89E3\u6790\u7ED3\u679C\u7ED3\u6784 \u2014\u2014 //\nexport type I18nPiece =\n | { type: 'raw'; value: string }\n | { type: 'ph'; rawInner: string; key: string };\n\n/**\n * \u6808\u5F0F\u89E3\u6790 #{ ... } \u5360\u4F4D\u3002\u652F\u6301\u5185\u90E8\u6210\u5BF9\u82B1\u62EC\u53F7\uFF0C\u5982 #{ foo {{ bar }} }\u3002\n * - \u672A\u95ED\u5408\u65F6\uFF1A\u628A\u4ECE\u4E0A\u6B21\u4F4D\u7F6E i \u5230\u7ED3\u5C3E\u6574\u4F53\u4F5C\u4E3A raw \u653E\u56DE\uFF08\u907F\u514D\u88AB\u62C6\u6210\u4E24\u6BB5\uFF09\n * - key = trim(rawInner)\n */\nexport const parseI18n = (text: string): I18nPiece[] => {\n const pieces: I18nPiece[] = [];\n if (!text) return pieces;\n\n let i = 0;\n const n = text.length;\n\n while (i < n) {\n const start = text.indexOf('#{', i);\n if (start === -1) {\n // \u6CA1\u6709\u66F4\u591A\u5360\u4F4D\u7B26\n if (i < n) pieces.push({ type: 'raw', value: text.slice(i) });\n break;\n }\n\n // \u5148\u5C1D\u8BD5\u5339\u914D\u8FD9\u4E2A\u5360\u4F4D\u7B26\u662F\u5426\u95ED\u5408\uFF08\u6B64\u65F6\u4E0D\u7ACB\u5373\u63A8\u5165\u524D\u5BFC raw\uFF09\n let j = start + 2; // \u6307\u5411 '#{' \u540E\u7B2C\u4E00\u4E2A\u5B57\u7B26\n let depth = 1;\n while (j < n && depth > 0) {\n const ch = text.charCodeAt(j);\n if (ch === 123 /* '{' */) depth++;\n else if (ch === 125 /* '}' */) depth--;\n j++;\n }\n\n if (depth !== 0) {\n // \u672A\u95ED\u5408\uFF1A\u628A\u4ECE i \u5230\u672B\u5C3E\u6574\u4F53\u5F53\u4F5C raw\uFF08\u5305\u542B\u524D\u5BFC + '#{' \u5C3E\u5DF4\uFF09\n pieces.push({ type: 'raw', value: text.slice(i) });\n break;\n }\n\n // \u5230\u8FD9\u91CC\u8BF4\u660E\u5360\u4F4D\u95ED\u5408\uFF1A\u5148\u63A8\u5165\u524D\u5BFC raw\uFF0C\u518D\u63A8\u5360\u4F4D\u7247\u6BB5\n if (start > i) {\n pieces.push({ type: 'raw', value: text.slice(i, start) });\n }\n\n const rawInner = text.slice(start + 2, j - 1);\n const key = rawInner.trim();\n pieces.push({ type: 'ph', rawInner, key });\n\n i = j; // \u7EE7\u7EED\u5411\u540E\u626B\u63CF\n }\n\n return pieces;\n};\n", "import { Awaitable } from './types';\n\nexport const patchStringInObject = async <T>(\n obj: T,\n cb: (s: string) => Awaitable<string>,\n): Promise<T> => {\n const visited = new WeakSet<object>();\n\n const isSpecialObject = (v: any): boolean => {\n if (v == null || typeof v !== 'object') return false;\n if (\n v instanceof Date ||\n v instanceof RegExp ||\n v instanceof Map ||\n v instanceof Set ||\n v instanceof WeakMap ||\n v instanceof WeakSet ||\n v instanceof ArrayBuffer ||\n v instanceof DataView ||\n ArrayBuffer.isView(v)\n ) {\n return true;\n }\n\n const tag = Object.prototype.toString.call(v);\n switch (tag) {\n case '[object URL]':\n case '[object URLSearchParams]':\n case '[object Error]':\n case '[object Blob]':\n case '[object File]':\n case '[object FormData]':\n return true;\n default:\n return false;\n }\n };\n\n const checkValue = (\n v: any,\n ): { ok: false } | { ok: true; kind: 'string' | 'object' } => {\n if (!v) return { ok: false };\n\n const t = typeof v;\n if (\n t === 'number' ||\n t === 'bigint' ||\n t === 'symbol' ||\n t === 'function'\n ) {\n return { ok: false };\n }\n if (t === 'string') return { ok: true, kind: 'string' };\n if (t === 'object') return { ok: true, kind: 'object' };\n\n return { ok: false };\n };\n\n const rebuildObject = async (value: any): Promise<any> => {\n const proto = Object.getPrototypeOf(value);\n const out = Object.create(proto);\n\n const keys = Reflect.ownKeys(value);\n\n await Promise.all(\n keys.map(async (key) => {\n const desc = Object.getOwnPropertyDescriptor(value, key as any);\n if (!desc) return;\n\n if ('value' in desc) {\n const newVal = await walk(desc.value);\n Object.defineProperty(out, key, { ...desc, value: newVal });\n return;\n }\n\n Object.defineProperty(out, key, desc);\n\n let current: any = undefined;\n if (typeof desc.get === 'function') {\n try {\n current = desc.get.call(value);\n } catch {}\n }\n if (current === undefined) return;\n\n try {\n const newVal = await walk(current);\n if (typeof desc.set === 'function') {\n try {\n desc.set.call(out, newVal);\n } catch {}\n }\n } catch {}\n }),\n );\n\n return out;\n };\n\n const walk = async (value: any): Promise<any> => {\n const check = checkValue(value);\n\n if (!check.ok) return value;\n\n if (check.kind === 'string') {\n return cb(value);\n }\n\n if (value instanceof Promise) {\n return value.then((resolved) => walk(resolved));\n }\n\n if (typeof value === 'object') {\n if (!Array.isArray(value) && isSpecialObject(value)) return value;\n\n if (visited.has(value)) return value;\n visited.add(value);\n\n if (Array.isArray(value)) {\n const out = await Promise.all(value.map((v) => walk(v)));\n return out as any;\n }\n\n return rebuildObject(value);\n }\n\n return value;\n };\n\n return walk(obj);\n};\n", "import { MiddlewareDispatcher } from '../middleware-dispatcher';\nimport { parseI18n } from '../utility/parse-i18n';\nimport { I18nMiddleware, I18nOptions } from './types';\nimport { patchStringInObject } from '../patch-string-in-object';\n\nexport class I18n<Ex extends any[] = []> {\n constructor(private options: I18nOptions) {}\n\n locales = new Set(this.options.locales);\n defaultLocale = this.options.defaultLocale ?? this.options.locales[0];\n\n private mw = new MiddlewareDispatcher<\n (locale: string, text: string, ...ex: Ex) => string | undefined\n >({\n acceptResult: (res) => res != null,\n errorHandler: (e) => {\n throw e;\n },\n });\n\n private shadowMiddlewares: I18nMiddleware<Ex>[] = [];\n\n middleware(mw: I18nMiddleware<Ex>, prior = false) {\n this.mw.middleware((locale, text, ...args) => {\n const ex = args.slice(0, -1) as Ex;\n const next = args[args.length - 1] as () => Promise<string | undefined>;\n return mw(locale, text, next, ...ex);\n }, prior);\n if (prior) {\n this.shadowMiddlewares.unshift(mw);\n } else {\n this.shadowMiddlewares.push(mw);\n }\n return this;\n }\n\n removeMiddleware(mw: I18nMiddleware<Ex>) {\n const idx = this.shadowMiddlewares.indexOf(mw);\n if (idx >= 0) {\n this.shadowMiddlewares.splice(idx, 1);\n this.mw.middlewares.splice(idx, 1);\n }\n return this;\n }\n\n getExactLocale(locale: string) {\n const input = (locale ?? '').trim();\n if (!input) return this.defaultLocale;\n\n if (this.locales.has(input)) return input;\n\n // \u5C0F\u5199\u5316\u6BD4\u8F83\uFF0C\u4FDD\u7559\u539F\u5927\u5C0F\u5199\n const entries = Array.from(this.locales).map((l) => ({\n orig: l,\n lower: l.toLowerCase(),\n }));\n const lower = input.toLowerCase();\n\n // 1) \u7CBE\u786E\u5339\u914D\uFF08\u5927\u5C0F\u5199\u4E0D\u654F\u611F\uFF09\n const exact = entries.find((e) => e.lower === lower);\n if (exact) return exact.orig;\n\n // 2) \u6309 '-' \u62C6\u5206\uFF0C\u4F9D\u6B21\u5C1D\u8BD5\u53BB\u6389\u6700\u53F3\u8FB9\u7684\u6BB5\n // zh-Hans-CN \u2192 zh-Hans \u2192 zh\n const parts = lower.split('-');\n while (parts.length > 1) {\n parts.pop();\n const candidate = parts.join('-');\n const hit = entries.find((e) => e.lower === candidate);\n if (hit) return hit.orig;\n }\n\n // 3) \u515C\u5E95\n return this.defaultLocale;\n }\n\n private buildFallbackChain(locale: string): string[] {\n const best = this.getExactLocale(locale); // \u4F60\u7684\u201C\u6700\u957F\u5339\u914D\u201D\u51FD\u6570\n // \u62C6\u5206 zh-Hans-CN -> ['zh-Hans-CN','zh-Hans','zh']\n const parts: string[] = [];\n const segs = best.split('-');\n for (let i = segs.length; i > 1; i--)\n parts.push(segs.slice(0, i).join('-'));\n parts.push(segs[0]); // 'zh'\n // \u9644\u52A0\u9ED8\u8BA4\u8BED\u8A00\n if (!parts.includes(this.defaultLocale)) parts.push(this.defaultLocale);\n // \u53BB\u91CD\n return Array.from(new Set(parts)).filter((p) => this.locales.has(p));\n }\n\n private async applyMiddlewares(\n locale: string,\n text: string,\n ...ex: Ex\n ): Promise<string | undefined> {\n const tryLocale = (locale: string) => this.mw.dispatch(locale, text, ...ex);\n\n for (const loc of this.buildFallbackChain(locale)) {\n const result = await tryLocale(loc);\n if (result != null) {\n return result;\n }\n }\n return undefined;\n }\n\n async translateString(\n locale: string,\n text: string,\n ...ex: Ex\n ): Promise<string> {\n if (!text) return text;\n\n locale = this.getExactLocale(locale);\n\n const pieces = parseI18n(text);\n if (!pieces.some((p) => p.type === 'ph')) {\n return pieces\n .map((p) => (p.type === 'raw' ? p.value : `#{${p.rawInner}}`))\n .join('');\n }\n\n const promises: Array<Promise<string | undefined | null>> = [];\n\n for (const p of pieces) {\n if (p.type === 'ph') {\n promises.push(this.applyMiddlewares(locale, p.key, ...ex));\n }\n }\n\n const results = await Promise.all(promises);\n\n let out = '';\n let k = 0;\n for (const p of pieces) {\n if (p.type === 'raw') {\n out += p.value;\n } else {\n const r = results[k++];\n out += r == null ? `#{${p.rawInner}}` : r;\n }\n }\n return out;\n }\n\n async translate<T>(locale: string, obj: T, ...ex: Ex): Promise<T> {\n return patchStringInObject(obj, (s) =>\n this.translateString(locale, s, ...ex),\n );\n }\n}\n", "import { I18nMiddleware } from '../types';\nimport { Awaitable } from '../../types';\n\nexport type I18nDictionary = Record<string, Record<string, string>>;\n\ntype MatchType = 'exact' | 'hierarchy' | 'startsWith';\n\nexport const I18nLookupMiddleware = <Ex extends any[] = []>(\n dict:\n | I18nDictionary\n | ((locale: string, key: string, ...ex: Ex) => Awaitable<I18nDictionary>),\n options?: { matchType?: MatchType },\n): I18nMiddleware<Ex> => {\n const matchType: MatchType = options?.matchType ?? 'exact';\n const dictFactory = typeof dict === 'function' ? dict : () => dict;\n\n // \u57FA\u4E8E locales \u5217\u8868\u505A\u201C\u7CBE\u786E\u2192\u5C42\u7EA7\u56DE\u9000(zh-Hans-CN\u2192zh-Hans\u2192zh)\u201D\u7684\u6700\u957F\u5339\u914D\n const pickBestByHierarchy = (\n input: string,\n locales: string[],\n ): string | undefined => {\n if (!input) return undefined;\n const entries = locales.map((l) => ({ orig: l, lower: l.toLowerCase() }));\n const lower = input.toLowerCase();\n\n // \u7CBE\u786E\u5339\u914D\uFF08\u5927\u5C0F\u5199\u4E0D\u654F\u611F\uFF09\n const exact = entries.find((e) => e.lower === lower);\n if (exact) return exact.orig;\n\n // \u9010\u7EA7\u56DE\u9000\uFF1Azh-Hans-CN -> zh-Hans -> zh\n const parts = lower.split('-');\n while (parts.length > 1) {\n parts.pop();\n const candidate = parts.join('-');\n const hit = entries.find((e) => e.lower === candidate);\n if (hit) return hit.orig;\n }\n return undefined;\n };\n\n return async (locale, key, next, ...ex) => {\n const dictResolved = await dictFactory(locale, key, ...ex);\n\n let dictionary = dictResolved[locale];\n\n if (!dictionary) {\n if (matchType === 'hierarchy') {\n const best = pickBestByHierarchy(locale, Object.keys(dictResolved));\n if (best) dictionary = dictResolved[best];\n } else if (matchType === 'startsWith') {\n const keys = Object.keys(dictResolved).filter((k) =>\n locale.startsWith(k),\n );\n if (keys.length) {\n const best = keys.reduce((a, b) => (b.length > a.length ? b : a));\n dictionary = dictResolved[best];\n }\n }\n }\n\n // \u547D\u4E2D\u5224\u65AD\uFF1A\u5141\u8BB8\u7A7A\u5B57\u7B26\u4E32 ''\uFF1B\u4EC5 null/undefined \u89C6\u4E3A\u672A\u547D\u4E2D\n if (dictionary && Object.prototype.hasOwnProperty.call(dictionary, key)) {\n const val = dictionary[key];\n if (val != null) {\n return val;\n }\n }\n\n return next();\n };\n};\n\nexport const createI18nLookupMiddleware = <Ex extends any[]>() =>\n I18nLookupMiddleware as typeof I18nLookupMiddleware<Ex>;\n", "export const observeDiff = <T>(\n obj: T,\n cb: <K extends keyof T>(change: {\n type: 'add' | 'update' | 'delete';\n key: K;\n oldValue: T[K] | undefined;\n newValue: T[K] | undefined;\n }) => any,\n): T => {\n return new Proxy(obj as any, {\n set(target, key: string | symbol, value) {\n const oldValue = target[key];\n const type = Object.prototype.hasOwnProperty.call(target, key)\n ? 'update'\n : 'add';\n target[key] = value;\n cb({ type, key: key as any, oldValue, newValue: value });\n return true;\n },\n deleteProperty(target, key: string | symbol) {\n if (Object.prototype.hasOwnProperty.call(target, key)) {\n const oldValue = target[key];\n delete target[key];\n cb({ type: 'delete', key: key as any, oldValue, newValue: undefined });\n return true;\n }\n return false;\n },\n });\n};\n", "export const Memorize = () => {\n const cache = new WeakMap<object, any>();\n\n const isPromiseLike = (v: any): v is Promise<unknown> =>\n v != null && typeof v.then === 'function' && typeof v.catch === 'function';\n\n const getOrSet = (instance: object, compute: () => any) => {\n if (cache.has(instance)) return cache.get(instance);\n\n const result = compute();\n\n if (isPromiseLike(result)) {\n const wrapped = result.catch((err) => {\n cache.delete(instance); // \u4E0B\u6B21\u8FD8\u80FD\u91CD\u65B0\u7B97\n throw err;\n });\n cache.set(instance, wrapped);\n return wrapped;\n }\n\n cache.set(instance, result);\n return result;\n };\n\n return function (\n _target: any,\n _propertyKey: string,\n descriptor: PropertyDescriptor,\n ) {\n // getter\n if (typeof descriptor.get === 'function') {\n const originalGetter = descriptor.get;\n descriptor.get = function () {\n return getOrSet(this, () => originalGetter.call(this));\n };\n return;\n }\n\n // method\n if (typeof descriptor.value === 'function') {\n const originalMethod = descriptor.value;\n descriptor.value = function (...args: any[]) {\n return getOrSet(this, () => originalMethod.apply(this, args));\n };\n return;\n }\n };\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
3
|
+
"sources": ["../index.ts", "../src/workflow.ts", "../src/dual-object.ts", "../src/workflow-dispatcher.ts", "../src/round-robin.ts", "../src/abortable.ts", "../src/middleware-dispatcher.ts", "../src/utility/parse-i18n.ts", "../src/patch-string-in-object.ts", "../src/i18n/i18n.ts", "../src/i18n/middlewares/lookup.ts", "../src/observe-diff.ts", "../src/memorize.ts", "../src/may-be-array.ts"],
|
|
4
|
+
"sourcesContent": ["export * from './src/workflow';\nexport * from './src/dual-object';\nexport * from './src/workflow-dispatcher';\nexport * from './src/round-robin';\nexport * from './src/abortable';\nexport * from './src/types';\nexport * from './src/middleware-dispatcher';\nexport * from './src/i18n';\nexport * from './src/patch-string-in-object';\nexport * from './src/observe-diff';\nexport * from './src/memorize';\nexport * from './src/may-be-array';\n", "// ========== \u7C7B\u578B\u5DE5\u5177 ==========\ntype AwaitedLike<T> = T extends Promise<infer R> ? R : T;\ntype AnyFn = (...args: any[]) => any;\n\ntype Chain<T> = Promise<AwaitedLike<T>> &\n (T extends AnyFn\n ? (...a: Parameters<T>) => Chain<AwaitedLike<ReturnType<T>>>\n : {}) & {\n [K in keyof T]: T[K] extends (...a: infer A) => infer R\n ? (...a: A) => Chain<AwaitedLike<R>>\n : Chain<AwaitedLike<T[K]>>;\n };\n\n// ========== \u6838\u5FC3\uFF1A\u4E0D\u53EF\u53D8\u8282\u70B9 ==========\nclass Node {\n private memo?: Promise<any>;\n constructor(\n private readonly source: any, // \u53EA\u6709\u6839\u8282\u70B9\u6709\u610F\u4E49\uFF1B\u5B50\u8282\u70B9\u53EF\u590D\u7528\u6839\u7684 source\n private readonly parent: Node | null, // \u524D\u7F00\n private readonly op: ((x: any) => any) | null, // \u4ECE parent \u7ED3\u679C\u5230\u672C\u8282\u70B9\u7ED3\u679C\u7684\u53D8\u6362\n ) {}\n\n run(): Promise<any> {\n if (!this.memo) {\n this.memo = (async () => {\n if (!this.parent) {\n // \u6839\uFF1A\u628A source \u89E3\u4E00\u6B21\u5373\u53EF\n return await this.source;\n }\n // \u5148\u62FF\u5230\u7236\u8282\u70B9\u7ED3\u679C\uFF08\u4F1A\u8BB0\u5FC6\u5316\uFF09\n const base = await this.parent.run();\n // \u5E94\u7528\u672C\u8282\u70B9\u7684\u53D8\u6362\uFF08\u5141\u8BB8\u8FD4\u56DE\u540C\u6B65\u6216\u5F02\u6B65\uFF09\n return this.op ? this.op(base) : base;\n })();\n }\n return this.memo;\n }\n\n // \u5DE5\u5382\uFF1A\u884D\u751F\u5B50\u8282\u70B9\uFF08\u5206\u53C9 = \u590D\u7528\u540C\u4E00\u4E2A parent\uFF09\n child(op: (x: any) => any): Node {\n return new Node(this.source, this, op);\n }\n\n // \u62FF\u5230\u201C\u76F8\u540C\u8282\u70B9\u201D\u7684\u53E5\u67C4\uFF08\u663E\u5F0F fork\uFF09\n fork(): Node {\n return new Node(this.source, this.parent, this.op);\n }\n}\n\nexport const WF_NODE = Symbol('@@workflow/node');\n\nfunction isWorkflowChain(x: any): x is Chain<any> {\n return !!x && typeof x === 'function' && x[WF_NODE] instanceof Node;\n}\n\n// ========== \u5BF9\u5916 API\uFF1Aworkflow ==========\nexport function workflow<T>(source: T | Promise<T>): Chain<T> {\n if (isWorkflowChain(source)) {\n return source as unknown as Chain<T>;\n }\n const root = new Node(source, null, null);\n return makeProxy<T>(root) as any;\n}\n\n// ========== \u4EE3\u7406\u5C42\uFF1A\u628A Node \u66B4\u9732\u6210\u94FE\u5F0F API ==========\nfunction makeProxy<T>(node: Node): Chain<T> {\n const runOnce = () => node.run(); // \u8BB0\u5FC6\u5316\u5728 Node \u5185\u90E8\n\n const rootHandler: ProxyHandler<any> = {\n get(_t, prop) {\n if (prop === WF_NODE) return node;\n // \u7ED3\u675F\u4FE1\u53F7\uFF1A\u6240\u6709 then/catch/finally \u590D\u7528\u540C\u4E00\u4E2A Promise\n if (prop === 'then')\n return (res: any, rej?: any) => runOnce().then(res, rej);\n if (prop === 'catch') return (rej: any) => runOnce().catch(rej);\n if (prop === 'finally') return (fin: any) => runOnce().finally(fin);\n\n // \u8BBF\u95EE\u4E00\u4E2A\u5C5E\u6027\uFF1A\u751F\u6210\u4E00\u4E2A\u201CGet\u201D\u5B50\u8282\u70B9\uFF0C\u4F46\u4E0D\u6267\u884C\n return linkProxy(prop);\n },\n // \u652F\u6301\u5BF9\u201C\u5F53\u524D\u503C\u201D\u76F4\u63A5\u4E8C\u6B21\u8C03\u7528\uFF1A foo()()\n apply(_t, _this, argArray) {\n const child = node.child((cur: any) => {\n if (typeof cur !== 'function')\n throw new TypeError('Current value is not callable');\n return cur(...argArray);\n });\n return makeProxy<any>(child);\n },\n };\n\n const linkProxy = (prop: PropertyKey) =>\n new Proxy(function () {}, {\n // \u628A \u201C.foo(\u2026args)\u201D \u8BB0\u5F55\u4E3A Call\n apply(_t, _this, argArray) {\n const child = node.child((cur: any) => {\n const fn = (cur as any)[prop];\n if (typeof fn !== 'function') {\n throw new TypeError(`${String(prop)} is not a function`);\n }\n return fn.apply(cur, argArray);\n });\n return makeProxy<any>(child);\n },\n // \u628A \u201C.bar\u201D \u8BB0\u5F55\u4E3A Get\uFF1B\u7EE7\u7EED\u6DF1\u5165\u65F6\u5728\u8FD9\u4E2A Get \u7684\u7ED3\u679C\u4E0A\u518D\u5904\u7406\n get(_t, next) {\n if (next === WF_NODE) return node;\n if (next === 'then')\n return (r: any, j?: any) =>\n node\n .child((cur: any) => (cur as any)[prop])\n .run()\n .then(r, j);\n if (next === 'catch')\n return (rej: any) =>\n node\n .child((cur: any) => (cur as any)[prop])\n .run()\n .catch(rej);\n if (next === 'finally')\n return (fin: any) =>\n node\n .child((cur: any) => (cur as any)[prop])\n .run()\n .finally(fin);\n\n const child = node.child((cur: any) => (cur as any)[prop]);\n return (makeProxy as any)(child)[next];\n },\n });\n\n return new Proxy(function () {}, rootHandler) as any;\n}\n", "// dual-unified.ts\nexport type Dual<T> = T & PromiseLike<T>;\n\ntype ThenKey = 'then' | 'catch' | 'finally';\nconst isThenKey = (k: PropertyKey): k is ThenKey =>\n k === 'then' || k === 'catch' || k === 'finally';\n\ntype State = 'undecided' | 'pending' | 'fulfilled' | 'rejected';\n\n/** \u4EC5\u5141\u8BB8\u586B\u5165 \u201C\u8FD4\u56DE Promise \u7684\u65B9\u6CD5\u540D\u201D */\nexport type AsyncMethodKeys<T> = {\n [K in keyof T]-?: T[K] extends (...args: any[]) => Promise<any> ? K : never;\n}[keyof T];\n\nexport interface DualizeOptions<T> {\n /** \u8FD9\u4E9B\u65B9\u6CD5\u5728 undecided/pending \u65F6\u4F1A\u8FD4\u56DE\u4E00\u4E2A\u5EF6\u8FDF\u6267\u884C\u51FD\u6570\uFF0C\u7B49\u5F85\u5BF9\u8C61 Promise \u5B8C\u6210\u540E\u518D\u8C03\u7528 */\n asyncMethods?: readonly AsyncMethodKeys<T>[];\n}\n\nexport function dualizeAny<T>(\n sync: () => T, // \u540C\u6B65\u6784\u9020\uFF1B\u82E5\u629B\u9519\u5219\u89C6\u4E3A rejected\n asyncFn: () => Promise<T>, // \u5F02\u6B65\u6784\u9020\n options?: DualizeOptions<T>,\n): Dual<T> {\n let state: State = 'undecided';\n\n let value!: T; // fulfilled \u65F6\u7684\u503C\uFF08\u542B\u6765\u81EA sync \u6216 async\uFF09\n let reason: any; // rejected \u7684\u9519\u8BEF\n let p!: Promise<T>; // \u7F13\u5B58 Promise\uFF08resolved/rejected/\u8FDB\u884C\u4E2D\uFF09\n\n const asyncMethodSet = new Set<PropertyKey>(\n (options?.asyncMethods ?? []) as readonly PropertyKey[],\n );\n\n const startAsync = () => {\n if (!p || state === 'undecided') {\n state = 'pending';\n p = Promise.resolve()\n .then(asyncFn)\n .then(\n (v) => {\n value = v;\n state = 'fulfilled';\n return v;\n },\n (e) => {\n reason = e;\n state = 'rejected';\n throw e;\n },\n );\n }\n return p;\n };\n\n const ensureSync = () => {\n if (state === 'undecided') {\n try {\n value = sync();\n state = 'fulfilled';\n } catch (e) {\n reason = e;\n state = 'rejected';\n }\n }\n };\n\n /** \u5728\u201C\u5BF9\u8C61\u53EF\u7528\u201D\u540E\u8C03\u7528\u67D0\u4E2A\u5F02\u6B65\u65B9\u6CD5\uFF08\u7531 asyncMethods \u58F0\u660E\uFF09 */\n const makeDeferredAsyncMethod =\n (prop: PropertyKey) =>\n (...args: any[]) =>\n startAsync().then((obj) => {\n const fn = (obj as any)[prop];\n return fn.apply(obj, args);\n });\n\n // \u4ECE\u67D0\u4E2A\u503C\u4E0A\u53D6\u5C5E\u6027\uFF08\u539F\u59CB\u503C\u4F1A\u88C5\u7BB1\uFF09\uFF0C\u5E76\u7ED1\u5B9A this\n const getFrom = (v: unknown, prop: PropertyKey) => {\n if (prop === Symbol.toPrimitive) {\n return (hint: 'default' | 'number' | 'string') => {\n const x: any = v;\n if (hint === 'number') return Number(x);\n if (hint === 'string') return String(x);\n if (typeof x === 'string') return x;\n const n = Number(x);\n return Number.isNaN(n) ? String(x) : n;\n };\n }\n if (prop === 'valueOf') return () => v as any;\n if (prop === 'toString') return () => String(v);\n\n const boxed: any =\n v !== null && (typeof v === 'object' || typeof v === 'function')\n ? v\n : Object(v as any);\n const out = boxed[prop];\n return typeof out === 'function' ? out.bind(boxed) : out;\n };\n\n const proxy = new Proxy(Object.create(null) as any, {\n get(_t, prop) {\n // then/catch/finally\uFF1A\u8D70 Promise \u901A\u9053\n if (isThenKey(prop)) {\n if (state === 'undecided') {\n startAsync();\n } else if (state === 'fulfilled') {\n // \u82E5\u5DF2 fulfilled\uFF08\u6765\u81EA sync \u6216 async\uFF09\uFF0C\u8865\u4E00\u4E2A\u5DF2\u5B8C\u6210\u7684 Promise\n p ||= Promise.resolve(value);\n } else if (state === 'rejected') {\n p ||= Promise.reject(reason);\n } else {\n // pending\uFF1A\u5DF2\u6709 p\n startAsync();\n }\n const anyP: any = p;\n const m = anyP[prop];\n return typeof m === 'function' ? m.bind(anyP) : m;\n }\n\n // \u58F0\u660E\u4E3A\u5F02\u6B65\u65B9\u6CD5\u7684\u952E\uFF1A\u5728 undecided/pending \u65F6\u8FD4\u56DE\u201C\u5EF6\u8FDF\u51FD\u6570\u201D\n if (asyncMethodSet.has(prop)) {\n if (state === 'undecided' || state === 'pending') {\n startAsync();\n return makeDeferredAsyncMethod(prop);\n }\n if (state === 'fulfilled') {\n return getFrom(value, prop); // \u540C\u6B65\u53EF\u76F4\u63A5\u53D6\u5230\u65B9\u6CD5\uFF08\u5176\u672C\u8EAB\u8FD4\u56DE Promise\uFF09\n }\n if (state === 'rejected') {\n // \u8BBF\u95EE\u5373\u629B\uFF1B\u4E5F\u53EF\u4EE5\u9009\u62E9\u8FD4\u56DE () => Promise.reject(reason)\n throw reason;\n }\n }\n\n // \u5176\u5B83\u5C5E\u6027\u8BBF\u95EE\uFF1A\u9075\u5FAA\u72B6\u6001\u673A\n switch (state) {\n case 'undecided': {\n ensureSync();\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n if (state === 'fulfilled') return getFrom(value, prop);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n if (state === 'rejected') throw reason;\n // \u7406\u8BBA\u4E0A\u4E0D\u4F1A\u5230\u8FD9\u91CC\n throw new TypeError('Invalid state transition');\n }\n case 'pending': {\n // \u975E asyncMethods \u7684\u5C5E\u6027\u5728 pending \u65F6\u4E0D\u53EF\u540C\u6B65\u8BFB\u53D6\n throw new TypeError('Value is not ready yet. Please await it first.');\n }\n case 'fulfilled': {\n return getFrom(value, prop);\n }\n case 'rejected': {\n throw reason;\n }\n }\n },\n\n has(_t, key) {\n if (state === 'undecided') {\n ensureSync();\n }\n if (state === 'fulfilled') return key in Object(value as any);\n return false; // pending/rejected\uFF1A\u4FDD\u5B88\u5904\u7406\n },\n\n ownKeys() {\n if (state === 'undecided') ensureSync();\n if (state === 'fulfilled') return Reflect.ownKeys(Object(value as any));\n return [];\n },\n\n getOwnPropertyDescriptor(_t, key) {\n if (state === 'undecided') ensureSync();\n if (state === 'fulfilled')\n return Object.getOwnPropertyDescriptor(Object(value as any), key);\n return undefined;\n },\n });\n\n return proxy as Dual<T>;\n}\n", "export interface DispatcherOptions {\n /** Max attempts per task. Default 3. */\n maxAttempts?: number;\n /** Backoff base in ms. backoff = base * 2^failCount. Default 1000. */\n backoffBaseMs?: number;\n}\n\n// Internal task record\ntype Task<F extends (...args: any[]) => Promise<any>> = {\n args: Parameters<F>;\n resolve: (v: Awaited<ReturnType<F>>) => void;\n reject: (e: any) => void;\n attempts: number;\n lastError?: any;\n triedWorkers: Set<number>; // for global dispatch\n specificWorkerIndex?: number; // for dispatchSpecific only\n};\n\ntype WorkerState = {\n running: boolean;\n failCount: number;\n nextAvailableAt: number;\n totalRuns: number;\n};\n\ntype RemovalWaiter = () => void;\n\ntype ActiveSlot<F extends (...args: any[]) => Promise<any>> = {\n kind: 'active';\n fn: F;\n state: WorkerState;\n queue: Task<F>[];\n removalWaiters: RemovalWaiter[];\n removed?: boolean; // marker when removed while running; retained for completion callback\n};\n\ntype PendingSlot<F extends (...args: any[]) => Promise<any>> = {\n kind: 'pending';\n promise: Promise<F>;\n queue: Task<F>[];\n removalWaiters: RemovalWaiter[];\n error?: any;\n removed?: boolean; // if removed before resolved\n};\n\ntype RejectedSlot<F extends (...args: any[]) => Promise<any>> = {\n kind: 'rejected';\n error: any;\n queue: Task<F>[];\n removalWaiters: RemovalWaiter[];\n removed?: boolean;\n};\n\ntype Slot<F extends (...args: any[]) => Promise<any>> =\n | ActiveSlot<F>\n | PendingSlot<F>\n | RejectedSlot<F>;\n\nexport type WorkerSnapshot<F extends (...args: any[]) => Promise<any>> =\n | {\n index: number;\n status: 'active';\n fn: F;\n running: boolean;\n failCount: number;\n totalRuns: number;\n blockedMs: number;\n specificQueue: number;\n }\n | {\n index: number;\n status: 'pending';\n promise: Promise<F>;\n specificQueue: number;\n }\n | {\n index: number;\n status: 'rejected';\n error: string;\n specificQueue: number;\n };\n\nexport class WorkflowDispatcher<F extends (...args: any[]) => Promise<any>> {\n private readonly maxAttempts: number;\n private readonly backoffBaseMs: number;\n\n private readonly slots: Slot<F>[] = [];\n private readonly globalQueue: Task<F>[] = [];\n\n private pendingInits = 0;\n private everActivated = false;\n private drainScheduled = false;\n\n constructor(\n workersOrPromises: Array<F | Promise<F>>,\n options: DispatcherOptions = {},\n ) {\n // if (!workersOrPromises?.length) throw new Error('workers cannot be empty');\n\n this.maxAttempts = options.maxAttempts ?? 3;\n this.backoffBaseMs = options.backoffBaseMs ?? 1000;\n\n for (let i = 0; i < workersOrPromises.length; i++) {\n const w = workersOrPromises[i];\n if (typeof w === 'function') {\n const slot: ActiveSlot<F> = {\n kind: 'active',\n fn: w,\n state: {\n running: false,\n failCount: 0,\n nextAvailableAt: 0,\n totalRuns: 0,\n },\n queue: [],\n removalWaiters: [],\n };\n this.slots.push(slot);\n this.everActivated = true;\n } else {\n // Create a stable slot object and mutate it in-place on resolve/reject.\n this.pendingInits++;\n const slot: PendingSlot<F> = {\n kind: 'pending',\n promise: Promise.resolve(w),\n queue: [],\n removalWaiters: [],\n };\n this.slots.push(slot);\n\n slot.promise\n .then((fn) => {\n if (slot.removed) return; // was removed; ignore resolution\n // mutate in-place to active\n (slot as any).kind = 'active';\n (slot as any).fn = fn;\n (slot as any).state = {\n running: false,\n failCount: 0,\n nextAvailableAt: 0,\n totalRuns: 0,\n };\n this.everActivated = true;\n // keep queue & removalWaiters arrays as-is\n })\n .catch((err) => {\n if (slot.removed) return; // was removed; ignore\n // mutate in-place to rejected (keep queue/waiters)\n (slot as any).kind = 'rejected';\n (slot as any).error = err;\n })\n .finally(() => {\n this.pendingInits--;\n this.drain();\n if (this.pendingInits === 0 && !this.hasAnyActive()) {\n const err = new Error(\n 'No workers available (all failed to initialize).',\n );\n setTimeout(() => this.rejectAllQueued(err), 0);\n }\n });\n }\n }\n\n if (this.everActivated) this.drain();\n }\n\n /** Dispatch: choose eligible active with least totalRuns; retry across workers on failure. */\n dispatch(...args: Parameters<F>): Promise<Awaited<ReturnType<F>>> {\n return new Promise((resolve, reject) => {\n const task: Task<F> = {\n args,\n resolve,\n reject,\n attempts: 0,\n triedWorkers: new Set(),\n };\n this.globalQueue.push(task);\n this.drain();\n });\n }\n\n /** Dispatch to a specific worker (ignore backoff), wait until it is free; retry on the same worker. */\n dispatchSpecific(\n index: number,\n ...args: Parameters<F>\n ): Promise<Awaited<ReturnType<F>>> {\n if (index < 0 || index >= this.slots.length) {\n return Promise.reject(new Error(`worker index out of range: ${index}`));\n }\n return new Promise((resolve, reject) => {\n const task: Task<F> = {\n args,\n resolve,\n reject,\n attempts: 0,\n triedWorkers: new Set(),\n specificWorkerIndex: index,\n };\n const slot = this.slots[index];\n slot.queue.push(task);\n this.drain();\n });\n }\n\n /** Replace a worker at index with a new active worker function. */\n public replaceWorker(index: number, fn: F): void {\n if (index < 0 || index >= this.slots.length) {\n throw new Error(`worker index out of range: ${index}`);\n }\n const prevHadActive = this.hasAnyActive();\n const slot = this.slots[index];\n\n // Preserve queue & removal waiters; reset failure/backoff; keep totalRuns to avoid skew.\n const preservedQueue = slot.queue;\n const preservedWaiters = slot.removalWaiters ?? [];\n\n const next: ActiveSlot<F> = {\n kind: 'active',\n fn,\n state: {\n running: false,\n failCount: 0,\n nextAvailableAt: 0,\n totalRuns: (slot as any).state?.totalRuns ?? 0,\n },\n queue: preservedQueue,\n removalWaiters: preservedWaiters,\n };\n\n // Mutate in-place if possible (keeps references stable), else replace array entry.\n Object.assign(slot as any, next);\n (slot as any).kind = 'active';\n (slot as any).fn = fn;\n (slot as any).state.failCount = 0;\n (slot as any).state.nextAvailableAt = 0;\n\n this.everActivated = true;\n if (!prevHadActive && this.hasAnyActive()) {\n this.drain();\n } else {\n this.drain();\n }\n }\n\n /** Add a new active worker at the tail; return its index. */\n public addWorker(fn: F): number {\n const slot: ActiveSlot<F> = {\n kind: 'active',\n fn,\n state: { running: false, failCount: 0, nextAvailableAt: 0, totalRuns: 0 },\n queue: [],\n removalWaiters: [],\n };\n const index = this.slots.length;\n this.slots.push(slot);\n this.everActivated = true;\n this.drain();\n return index;\n }\n\n /**\n * Remove a worker completely (splice). It becomes unavailable immediately.\n * Returns a Promise that resolves when its last running task (if any) finishes.\n */\n public removeWorker(index: number): Promise<void> {\n if (index < 0 || index >= this.slots.length) {\n return Promise.reject(new Error(`worker index out of range: ${index}`));\n }\n\n const slot = this.slots[index];\n\n // Reject all queued specific tasks on this worker (macro-task to avoid unhandled)\n const queued = slot.queue.splice(0);\n const removalErr = new Error(`Worker[${index}] removed`);\n setTimeout(() => {\n for (const t of queued) t.reject(removalErr);\n }, 0);\n\n // Decide completion promise:\n let completion: Promise<void>;\n const isRunning = slot.kind === 'active' && slot.state.running;\n if (!isRunning) {\n completion = Promise.resolve();\n } else {\n completion = new Promise<void>((resolve) => {\n slot.removalWaiters.push(resolve);\n });\n }\n\n // Mark as removed (so any pending init resolution is ignored)\n (slot as any).removed = true;\n\n // Physically remove the slot\n this.slots.splice(index, 1);\n\n // Re-map indices in all remaining tasks:\n // 1) Fix specificWorkerIndex in every remaining slot.queue\n for (let i = 0; i < this.slots.length; i++) {\n const s = this.slots[i];\n for (const t of s.queue) {\n if (typeof t.specificWorkerIndex === 'number') {\n if (t.specificWorkerIndex === index) {\n // This should not happen because we just removed and flushed its queue,\n // but guard anyway.\n t.reject(new Error(`Worker[${index}] no longer exists`));\n } else if (t.specificWorkerIndex > index) {\n t.specificWorkerIndex -= 1;\n }\n }\n }\n }\n // 2) Fix triedWorkers sets in globalQueue\n for (const t of this.globalQueue) {\n if (t.triedWorkers.has(index)) t.triedWorkers.delete(index);\n const next = new Set<number>();\n for (const w of t.triedWorkers) {\n next.add(w > index ? w - 1 : w);\n }\n t.triedWorkers = next;\n }\n\n // Trigger scheduling for the remaining system\n this.drain();\n\n return completion;\n }\n\n snapshot(): WorkerSnapshot<F>[] {\n const now = Date.now();\n\n return this.slots.map((slot, i) => {\n switch (slot.kind) {\n case 'active': {\n const s = slot.state;\n return {\n index: i,\n status: 'active' as const,\n fn: slot.fn,\n running: s.running,\n failCount: s.failCount,\n totalRuns: s.totalRuns,\n blockedMs: Math.max(0, s.nextAvailableAt - now),\n specificQueue: slot.queue.length,\n };\n }\n\n case 'pending':\n return {\n index: i,\n status: 'pending' as const,\n promise: slot.promise,\n specificQueue: slot.queue.length,\n };\n\n case 'rejected':\n return {\n index: i,\n status: 'rejected' as const,\n error: String(slot.error ?? 'unknown error'),\n specificQueue: slot.queue.length,\n };\n }\n });\n }\n\n get pending(): number {\n return this.globalQueue.length;\n }\n\n // ---------------- scheduling ----------------\n\n private drain() {\n if (this.drainScheduled) return;\n this.drainScheduled = true;\n queueMicrotask(() => {\n this.drainScheduled = false;\n this._drainLoop();\n });\n }\n\n private _drainLoop() {\n // If no active workers and still initializing, wait; if all inited and none active, constructor already rejects all.\n if (!this.hasAnyActive()) {\n if (this.pendingInits > 0) return;\n return;\n }\n\n // First: flush rejected workers' specific queues (macro-task rejection)\n for (let i = 0; i < this.slots.length; i++) {\n const slot = this.slots[i];\n if (slot.kind === 'rejected' && slot.queue.length > 0) {\n const q = slot.queue.splice(0);\n const err = new Error(\n `Worker[${i}] failed to initialize: ${String(slot.error ?? 'unknown error')}`,\n );\n setTimeout(() => {\n for (const t of q) t.reject(err);\n }, 0);\n }\n }\n\n let progressed = true;\n while (progressed) {\n progressed = false;\n\n // 1) Run specific queues for active workers (ignore backoff)\n for (let i = 0; i < this.slots.length; i++) {\n const slot = this.slots[i];\n if (slot.kind !== 'active') continue;\n const st = slot.state;\n if (!st.running && slot.queue.length > 0) {\n const task = slot.queue.shift()!;\n this.startTaskOnActiveSlot(i, slot, task, /*fromSpecific*/ true);\n progressed = true;\n }\n }\n\n // 2) Run global queue (choose eligible active with least totalRuns)\n if (this.globalQueue.length > 0) {\n const idx = this.pickBestActiveForGlobal();\n if (idx !== -1) {\n const slot = this.slots[idx] as ActiveSlot<F>;\n const task = this.globalQueue.shift()!;\n this.startTaskOnActiveSlot(idx, slot, task, /*fromSpecific*/ false);\n progressed = true;\n }\n }\n }\n }\n\n private hasAnyActive() {\n return this.slots.some((s) => s.kind === 'active');\n }\n\n private rejectAllQueued(err: any) {\n while (this.globalQueue.length) this.globalQueue.shift()!.reject(err);\n for (const slot of this.slots) {\n while (slot.queue.length) slot.queue.shift()!.reject(err);\n }\n }\n\n private isEligibleActive(i: number, now: number) {\n const slot = this.slots[i] as ActiveSlot<F>;\n const slotGood = (s: ActiveSlot<F>) =>\n s.kind === 'active' && !s.state?.running;\n if (!slotGood(slot)) return false;\n if (now >= slot.state.nextAvailableAt) return true;\n return !this.slots.some((other: ActiveSlot<F>, j) => {\n if (j === i) return false;\n if (!slotGood(other)) return false;\n return now >= other.state.nextAvailableAt;\n });\n }\n\n private pickBestActiveForGlobal(): number {\n const now = Date.now();\n const task = this.globalQueue[0];\n\n // Prefer actives not tried yet\n let best = -1,\n bestRuns = Infinity;\n for (let i = 0; i < this.slots.length; i++) {\n if (!this.isEligibleActive(i, now)) continue;\n if (task?.triedWorkers.has(i)) continue;\n const slot = this.slots[i] as ActiveSlot<F>;\n if (slot.state.totalRuns < bestRuns) {\n bestRuns = slot.state.totalRuns;\n best = i;\n }\n }\n if (best !== -1) return best;\n\n // Allow already-tried actives\n best = -1;\n bestRuns = Infinity;\n for (let i = 0; i < this.slots.length; i++) {\n if (!this.isEligibleActive(i, now)) continue;\n const slot = this.slots[i] as ActiveSlot<F>;\n if (slot.state.totalRuns < bestRuns) {\n bestRuns = slot.state.totalRuns;\n best = i;\n }\n }\n return best;\n }\n\n private startTaskOnActiveSlot(\n index: number,\n slot: ActiveSlot<F>,\n task: Task<F>,\n fromSpecific: boolean,\n ) {\n const st = slot.state;\n st.running = true;\n st.totalRuns += 1;\n\n const finalize = () => {\n st.running = false;\n // If someone is waiting for this worker to finish (removeWorker), resolve them when idle.\n if (\n slot.removalWaiters.length > 0 &&\n !st.running &&\n slot.queue.length === 0\n ) {\n const list = slot.removalWaiters.splice(0);\n for (const w of list) w();\n }\n this.drain();\n };\n\n (async () => {\n try {\n const result = await slot.fn(...task.args);\n st.failCount = Math.max(0, st.failCount - 1);\n task.resolve(result as Awaited<ReturnType<F>>);\n } catch (err) {\n task.lastError = err;\n st.failCount += 1;\n st.nextAvailableAt =\n Date.now() + this.backoffBaseMs * Math.pow(2, st.failCount);\n\n if (fromSpecific) {\n task.attempts += 1;\n if (task.attempts >= this.maxAttempts) {\n task.reject(task.lastError);\n } else {\n // retry on the same worker (ignore backoff)\n slot.queue.push(task);\n }\n } else {\n task.attempts += 1;\n task.triedWorkers.add(index);\n const activeCount = this.slots.filter(\n (s) => s.kind === 'active',\n ).length;\n const allActiveTriedOnce = task.triedWorkers.size >= activeCount;\n const attemptsLimitReached = task.attempts >= this.maxAttempts;\n\n if (allActiveTriedOnce || attemptsLimitReached) {\n task.reject(task.lastError);\n } else {\n this.globalQueue.push(task);\n }\n }\n } finally {\n finalize();\n }\n })();\n }\n}\n", "export class RoundRobin<T> {\n private index = 0;\n\n constructor(public items: T[]) {\n if (items.length === 0) {\n throw new Error('RoundRobin requires at least one item');\n }\n }\n\n next(): T {\n const nextIndex = this.index % this.items.length;\n this.index = (this.index + 1) % this.items.length;\n return this.items[nextIndex];\n }\n}\n", "export class AbortedError extends Error {\n name = 'AbortError';\n constructor(\n msg = 'Operation aborted',\n public cause?: unknown,\n ) {\n super(msg);\n }\n}\n\ntype AnyFunc = (...args: any[]) => any;\nconst isObjectLike = (v: unknown): v is object | AnyFunc =>\n (typeof v === 'object' && v !== null) || typeof v === 'function';\n\nfunction boxPrimitive(v: unknown): object {\n return Object(v as any);\n}\n\nexport interface AbortableOpts {\n /** \u662F\u5426\u628A\u539F\u59CB\u503C\u88C5\u7BB1\u540E\u518D\u4EE3\u7406\uFF08\u4F1A\u6539\u53D8 typeof/=== \u8BED\u4E49\uFF0C\u9ED8\u8BA4 false\uFF09 */\n boxPrimitives?: boolean;\n /** \u4E0D\u9012\u5F52\u4EE3\u7406\u5B50\u5BF9\u8C61\uFF08\u4EC5\u4EE3\u7406\u9876\u5C42\u5BF9\u8C61/\u51FD\u6570\uFF0C\u9ED8\u8BA4 false\uFF09 */\n noRecursive?: boolean;\n}\n\nexport function abortable<T>(\n obj: T,\n signal: AbortSignal,\n opts?: AbortableOpts,\n): T {\n const { boxPrimitives = false, noRecursive = false } = opts ?? {};\n\n const throwIfAborted = () => {\n if (signal.aborted) {\n const r = (signal as any).reason;\n if (r instanceof Error) throw r;\n throw new AbortedError('Operation aborted', r);\n }\n };\n\n throwIfAborted();\n\n const targetToProxy = new WeakMap<object, any>();\n const proxyToTarget = new WeakMap<object, any>();\n\n const wrapNativePromise = <V>(pLike: PromiseLike<V>): Promise<V> => {\n const base = pLike instanceof Promise ? pLike : Promise.resolve(pLike);\n return base.then(\n async (v) => {\n throwIfAborted();\n return proxify(v);\n },\n async (e) => {\n throwIfAborted();\n throw e;\n },\n );\n };\n\n let shortCircuit = false;\n\n const proxify = <V>(value: V): V => {\n if (noRecursive) {\n if (shortCircuit) {\n return value;\n } else {\n shortCircuit = true;\n }\n }\n\n // Promise\uFF1A\u6309\u201C\u771F Promise + \u4EE3\u7406\u201D\u7684\u65B9\u6848\u5904\u7406\n if (typeof (value as any)?.then === 'function') {\n return wrapNativePromise(value as any) as unknown as V;\n }\n\n // \u539F\u59CB\u503C\n if (!isObjectLike(value)) {\n if (!boxPrimitives) return value;\n return proxify(boxPrimitive(value) as unknown as V);\n }\n\n // \u590D\u7528\n const cached = targetToProxy.get(value as object);\n if (cached) return cached;\n\n const handler: ProxyHandler<any> = {\n get(target, p, receiver) {\n throwIfAborted();\n const out = Reflect.get(target, p, receiver);\n return proxify(out);\n },\n set(target, p, val, receiver) {\n throwIfAborted();\n return Reflect.set(target, p, val, receiver);\n },\n apply(target, thisArg, argArray) {\n throwIfAborted();\n const unwrappedThis =\n (isObjectLike(thisArg) && proxyToTarget.get(thisArg as any)) ||\n thisArg;\n const ret = Reflect.apply(target as AnyFunc, unwrappedThis, argArray);\n return proxify(ret);\n },\n construct(target, argArray, newTarget) {\n throwIfAborted();\n const instance = Reflect.construct(\n target as AnyFunc,\n argArray,\n newTarget,\n );\n return proxify(instance);\n },\n defineProperty(t, p, attrs) {\n throwIfAborted();\n return Reflect.defineProperty(t, p, attrs);\n },\n deleteProperty(t, p) {\n throwIfAborted();\n return Reflect.deleteProperty(t, p);\n },\n getOwnPropertyDescriptor(t, p) {\n throwIfAborted();\n return Reflect.getOwnPropertyDescriptor(t, p);\n },\n getPrototypeOf(t) {\n throwIfAborted();\n return Reflect.getPrototypeOf(t);\n },\n setPrototypeOf(t, proto) {\n throwIfAborted();\n return Reflect.setPrototypeOf(t, proto);\n },\n has(t, p) {\n throwIfAborted();\n return Reflect.has(t, p);\n },\n isExtensible(t) {\n throwIfAborted();\n return Reflect.isExtensible(t);\n },\n ownKeys(t) {\n throwIfAborted();\n return Reflect.ownKeys(t);\n },\n preventExtensions(t) {\n throwIfAborted();\n return Reflect.preventExtensions(t);\n },\n };\n\n const proxy = new Proxy(value as any, handler);\n targetToProxy.set(value as object, proxy);\n proxyToTarget.set(proxy, value);\n return proxy;\n };\n\n return proxify(obj);\n}\n", "import { Awaitable } from './types';\n\ntype AnyFunc = (...args: any[]) => any;\n\ntype MiddlewareValue<F extends AnyFunc> = Awaited<ReturnType<F>>;\ntype MiddlewareResult<F extends AnyFunc> = Promise<MiddlewareValue<F>>;\ntype MiddlewareNext<F extends AnyFunc> = () => MiddlewareResult<F>;\ntype MiddlewareArgs<F extends AnyFunc> = [\n ...args: Parameters<F>,\n next: MiddlewareNext<F>,\n];\ntype MiddlewareReturn<F extends AnyFunc> = Awaitable<MiddlewareValue<F>>;\n\nexport type Middleware<F extends AnyFunc> = (\n ...args: MiddlewareArgs<F>\n) => MiddlewareReturn<F>;\n\nexport type MiddlewareAcceptResult<F extends AnyFunc> = (\n s: MiddlewareValue<F>,\n) => Awaitable<boolean>;\nexport type MiddlewareErrorHandler<F extends AnyFunc> = (\n e: any,\n args: Parameters<F>,\n next: MiddlewareNext<F>,\n) => Awaitable<MiddlewareValue<F>>;\n\nexport interface MiddlewareDispatcherOptions<F extends AnyFunc> {\n acceptResult?: MiddlewareAcceptResult<F>;\n errorHandler?: MiddlewareErrorHandler<F>;\n}\n\nexport class MiddlewareDispatcher<F extends AnyFunc> {\n constructor(private options: MiddlewareDispatcherOptions<F> = {}) {}\n middlewares: Middleware<F>[] = [];\n\n middleware(mw: Middleware<F>, prior = false) {\n if (prior) {\n this.middlewares.unshift(mw);\n } else {\n this.middlewares.push(mw);\n }\n return this;\n }\n\n removeMiddleware(mw: Middleware<F>) {\n const index = this.middlewares.indexOf(mw);\n if (index >= 0) {\n this.middlewares.splice(index, 1);\n }\n return this;\n }\n\n dispatch(...args: Parameters<F>): MiddlewareResult<F> {\n const mws = this.middlewares;\n const acceptResult: MiddlewareAcceptResult<F> =\n this.options.acceptResult || ((res) => res != null);\n const errorHandler: MiddlewareErrorHandler<F> =\n this.options.errorHandler || ((e, args, next) => next());\n const dispatch = async (i: number): MiddlewareResult<F> => {\n if (i >= mws.length) return undefined;\n\n const mw = mws[i];\n let nextCalled = false;\n\n const next = async (): MiddlewareResult<F> => {\n if (nextCalled) {\n return undefined;\n }\n nextCalled = true;\n return dispatch(i + 1);\n };\n\n const runMw = async (cb: () => MiddlewareReturn<F>) => {\n const res = await cb();\n if (!nextCalled && !(await acceptResult(res))) {\n return dispatch(i + 1);\n }\n return res;\n };\n\n try {\n return await runMw(() => mw(...args, next));\n } catch (e) {\n return await runMw(() => errorHandler(e, args, next));\n }\n };\n return dispatch(0);\n }\n}\n", "// \u2014\u2014 \u89E3\u6790\u7ED3\u679C\u7ED3\u6784 \u2014\u2014 //\nexport type I18nPiece =\n | { type: 'raw'; value: string }\n | { type: 'ph'; rawInner: string; key: string };\n\n/**\n * \u6808\u5F0F\u89E3\u6790 #{ ... } \u5360\u4F4D\u3002\u652F\u6301\u5185\u90E8\u6210\u5BF9\u82B1\u62EC\u53F7\uFF0C\u5982 #{ foo {{ bar }} }\u3002\n * - \u672A\u95ED\u5408\u65F6\uFF1A\u628A\u4ECE\u4E0A\u6B21\u4F4D\u7F6E i \u5230\u7ED3\u5C3E\u6574\u4F53\u4F5C\u4E3A raw \u653E\u56DE\uFF08\u907F\u514D\u88AB\u62C6\u6210\u4E24\u6BB5\uFF09\n * - key = trim(rawInner)\n */\nexport const parseI18n = (text: string): I18nPiece[] => {\n const pieces: I18nPiece[] = [];\n if (!text) return pieces;\n\n let i = 0;\n const n = text.length;\n\n while (i < n) {\n const start = text.indexOf('#{', i);\n if (start === -1) {\n // \u6CA1\u6709\u66F4\u591A\u5360\u4F4D\u7B26\n if (i < n) pieces.push({ type: 'raw', value: text.slice(i) });\n break;\n }\n\n // \u5148\u5C1D\u8BD5\u5339\u914D\u8FD9\u4E2A\u5360\u4F4D\u7B26\u662F\u5426\u95ED\u5408\uFF08\u6B64\u65F6\u4E0D\u7ACB\u5373\u63A8\u5165\u524D\u5BFC raw\uFF09\n let j = start + 2; // \u6307\u5411 '#{' \u540E\u7B2C\u4E00\u4E2A\u5B57\u7B26\n let depth = 1;\n while (j < n && depth > 0) {\n const ch = text.charCodeAt(j);\n if (ch === 123 /* '{' */) depth++;\n else if (ch === 125 /* '}' */) depth--;\n j++;\n }\n\n if (depth !== 0) {\n // \u672A\u95ED\u5408\uFF1A\u628A\u4ECE i \u5230\u672B\u5C3E\u6574\u4F53\u5F53\u4F5C raw\uFF08\u5305\u542B\u524D\u5BFC + '#{' \u5C3E\u5DF4\uFF09\n pieces.push({ type: 'raw', value: text.slice(i) });\n break;\n }\n\n // \u5230\u8FD9\u91CC\u8BF4\u660E\u5360\u4F4D\u95ED\u5408\uFF1A\u5148\u63A8\u5165\u524D\u5BFC raw\uFF0C\u518D\u63A8\u5360\u4F4D\u7247\u6BB5\n if (start > i) {\n pieces.push({ type: 'raw', value: text.slice(i, start) });\n }\n\n const rawInner = text.slice(start + 2, j - 1);\n const key = rawInner.trim();\n pieces.push({ type: 'ph', rawInner, key });\n\n i = j; // \u7EE7\u7EED\u5411\u540E\u626B\u63CF\n }\n\n return pieces;\n};\n", "import { Awaitable } from './types';\n\nexport const patchStringInObject = async <T>(\n obj: T,\n cb: (s: string) => Awaitable<string>,\n): Promise<T> => {\n const visited = new WeakSet<object>();\n\n const isSpecialObject = (v: any): boolean => {\n if (v == null || typeof v !== 'object') return false;\n if (\n v instanceof Date ||\n v instanceof RegExp ||\n v instanceof Map ||\n v instanceof Set ||\n v instanceof WeakMap ||\n v instanceof WeakSet ||\n v instanceof ArrayBuffer ||\n v instanceof DataView ||\n ArrayBuffer.isView(v)\n ) {\n return true;\n }\n\n const tag = Object.prototype.toString.call(v);\n switch (tag) {\n case '[object URL]':\n case '[object URLSearchParams]':\n case '[object Error]':\n case '[object Blob]':\n case '[object File]':\n case '[object FormData]':\n return true;\n default:\n return false;\n }\n };\n\n const checkValue = (\n v: any,\n ): { ok: false } | { ok: true; kind: 'string' | 'object' } => {\n if (!v) return { ok: false };\n\n const t = typeof v;\n if (\n t === 'number' ||\n t === 'bigint' ||\n t === 'symbol' ||\n t === 'function'\n ) {\n return { ok: false };\n }\n if (t === 'string') return { ok: true, kind: 'string' };\n if (t === 'object') return { ok: true, kind: 'object' };\n\n return { ok: false };\n };\n\n const rebuildObject = async (value: any): Promise<any> => {\n const proto = Object.getPrototypeOf(value);\n const out = Object.create(proto);\n\n const keys = Reflect.ownKeys(value);\n\n await Promise.all(\n keys.map(async (key) => {\n const desc = Object.getOwnPropertyDescriptor(value, key as any);\n if (!desc) return;\n\n if ('value' in desc) {\n const newVal = await walk(desc.value);\n Object.defineProperty(out, key, { ...desc, value: newVal });\n return;\n }\n\n Object.defineProperty(out, key, desc);\n\n let current: any = undefined;\n if (typeof desc.get === 'function') {\n try {\n current = desc.get.call(value);\n } catch {}\n }\n if (current === undefined) return;\n\n try {\n const newVal = await walk(current);\n if (typeof desc.set === 'function') {\n try {\n desc.set.call(out, newVal);\n } catch {}\n }\n } catch {}\n }),\n );\n\n return out;\n };\n\n const walk = async (value: any): Promise<any> => {\n const check = checkValue(value);\n\n if (!check.ok) return value;\n\n if (check.kind === 'string') {\n return cb(value);\n }\n\n if (value instanceof Promise) {\n return value.then((resolved) => walk(resolved));\n }\n\n if (typeof value === 'object') {\n if (!Array.isArray(value) && isSpecialObject(value)) return value;\n\n if (visited.has(value)) return value;\n visited.add(value);\n\n if (Array.isArray(value)) {\n const out = await Promise.all(value.map((v) => walk(v)));\n return out as any;\n }\n\n return rebuildObject(value);\n }\n\n return value;\n };\n\n return walk(obj);\n};\n", "import { MiddlewareDispatcher } from '../middleware-dispatcher';\nimport { parseI18n } from '../utility/parse-i18n';\nimport { I18nMiddleware, I18nOptions } from './types';\nimport { patchStringInObject } from '../patch-string-in-object';\n\nexport class I18n<Ex extends any[] = []> {\n constructor(private options: I18nOptions) {}\n\n locales = new Set(this.options.locales);\n defaultLocale = this.options.defaultLocale ?? this.options.locales[0];\n\n private mw = new MiddlewareDispatcher<\n (locale: string, text: string, ...ex: Ex) => string | undefined\n >({\n acceptResult: (res) => res != null,\n errorHandler: (e) => {\n throw e;\n },\n });\n\n private shadowMiddlewares: I18nMiddleware<Ex>[] = [];\n\n middleware(mw: I18nMiddleware<Ex>, prior = false) {\n this.mw.middleware((locale, text, ...args) => {\n const ex = args.slice(0, -1) as Ex;\n const next = args[args.length - 1] as () => Promise<string | undefined>;\n return mw(locale, text, next, ...ex);\n }, prior);\n if (prior) {\n this.shadowMiddlewares.unshift(mw);\n } else {\n this.shadowMiddlewares.push(mw);\n }\n return this;\n }\n\n removeMiddleware(mw: I18nMiddleware<Ex>) {\n const idx = this.shadowMiddlewares.indexOf(mw);\n if (idx >= 0) {\n this.shadowMiddlewares.splice(idx, 1);\n this.mw.middlewares.splice(idx, 1);\n }\n return this;\n }\n\n getExactLocale(locale: string) {\n const input = (locale ?? '').trim();\n if (!input) return this.defaultLocale;\n\n if (this.locales.has(input)) return input;\n\n // \u5C0F\u5199\u5316\u6BD4\u8F83\uFF0C\u4FDD\u7559\u539F\u5927\u5C0F\u5199\n const entries = Array.from(this.locales).map((l) => ({\n orig: l,\n lower: l.toLowerCase(),\n }));\n const lower = input.toLowerCase();\n\n // 1) \u7CBE\u786E\u5339\u914D\uFF08\u5927\u5C0F\u5199\u4E0D\u654F\u611F\uFF09\n const exact = entries.find((e) => e.lower === lower);\n if (exact) return exact.orig;\n\n // 2) \u6309 '-' \u62C6\u5206\uFF0C\u4F9D\u6B21\u5C1D\u8BD5\u53BB\u6389\u6700\u53F3\u8FB9\u7684\u6BB5\n // zh-Hans-CN \u2192 zh-Hans \u2192 zh\n const parts = lower.split('-');\n while (parts.length > 1) {\n parts.pop();\n const candidate = parts.join('-');\n const hit = entries.find((e) => e.lower === candidate);\n if (hit) return hit.orig;\n }\n\n // 3) \u515C\u5E95\n return this.defaultLocale;\n }\n\n private buildFallbackChain(locale: string): string[] {\n const best = this.getExactLocale(locale); // \u4F60\u7684\u201C\u6700\u957F\u5339\u914D\u201D\u51FD\u6570\n // \u62C6\u5206 zh-Hans-CN -> ['zh-Hans-CN','zh-Hans','zh']\n const parts: string[] = [];\n const segs = best.split('-');\n for (let i = segs.length; i > 1; i--)\n parts.push(segs.slice(0, i).join('-'));\n parts.push(segs[0]); // 'zh'\n // \u9644\u52A0\u9ED8\u8BA4\u8BED\u8A00\n if (!parts.includes(this.defaultLocale)) parts.push(this.defaultLocale);\n // \u53BB\u91CD\n return Array.from(new Set(parts)).filter((p) => this.locales.has(p));\n }\n\n private async applyMiddlewares(\n locale: string,\n text: string,\n ...ex: Ex\n ): Promise<string | undefined> {\n const tryLocale = (locale: string) => this.mw.dispatch(locale, text, ...ex);\n\n for (const loc of this.buildFallbackChain(locale)) {\n const result = await tryLocale(loc);\n if (result != null) {\n return result;\n }\n }\n return undefined;\n }\n\n async translateString(\n locale: string,\n text: string,\n ...ex: Ex\n ): Promise<string> {\n if (!text) return text;\n\n locale = this.getExactLocale(locale);\n\n const pieces = parseI18n(text);\n if (!pieces.some((p) => p.type === 'ph')) {\n return pieces\n .map((p) => (p.type === 'raw' ? p.value : `#{${p.rawInner}}`))\n .join('');\n }\n\n const promises: Array<Promise<string | undefined | null>> = [];\n\n for (const p of pieces) {\n if (p.type === 'ph') {\n promises.push(this.applyMiddlewares(locale, p.key, ...ex));\n }\n }\n\n const results = await Promise.all(promises);\n\n let out = '';\n let k = 0;\n for (const p of pieces) {\n if (p.type === 'raw') {\n out += p.value;\n } else {\n const r = results[k++];\n out += r == null ? `#{${p.rawInner}}` : r;\n }\n }\n return out;\n }\n\n async translate<T>(locale: string, obj: T, ...ex: Ex): Promise<T> {\n return patchStringInObject(obj, (s) =>\n this.translateString(locale, s, ...ex),\n );\n }\n}\n", "import { I18nMiddleware } from '../types';\nimport { Awaitable } from '../../types';\n\nexport type I18nDictionary = Record<string, Record<string, string>>;\n\ntype MatchType = 'exact' | 'hierarchy' | 'startsWith';\n\nexport const I18nLookupMiddleware = <Ex extends any[] = []>(\n dict:\n | I18nDictionary\n | ((locale: string, key: string, ...ex: Ex) => Awaitable<I18nDictionary>),\n options?: { matchType?: MatchType },\n): I18nMiddleware<Ex> => {\n const matchType: MatchType = options?.matchType ?? 'exact';\n const dictFactory = typeof dict === 'function' ? dict : () => dict;\n\n // \u57FA\u4E8E locales \u5217\u8868\u505A\u201C\u7CBE\u786E\u2192\u5C42\u7EA7\u56DE\u9000(zh-Hans-CN\u2192zh-Hans\u2192zh)\u201D\u7684\u6700\u957F\u5339\u914D\n const pickBestByHierarchy = (\n input: string,\n locales: string[],\n ): string | undefined => {\n if (!input) return undefined;\n const entries = locales.map((l) => ({ orig: l, lower: l.toLowerCase() }));\n const lower = input.toLowerCase();\n\n // \u7CBE\u786E\u5339\u914D\uFF08\u5927\u5C0F\u5199\u4E0D\u654F\u611F\uFF09\n const exact = entries.find((e) => e.lower === lower);\n if (exact) return exact.orig;\n\n // \u9010\u7EA7\u56DE\u9000\uFF1Azh-Hans-CN -> zh-Hans -> zh\n const parts = lower.split('-');\n while (parts.length > 1) {\n parts.pop();\n const candidate = parts.join('-');\n const hit = entries.find((e) => e.lower === candidate);\n if (hit) return hit.orig;\n }\n return undefined;\n };\n\n return async (locale, key, next, ...ex) => {\n const dictResolved = await dictFactory(locale, key, ...ex);\n\n let dictionary = dictResolved[locale];\n\n if (!dictionary) {\n if (matchType === 'hierarchy') {\n const best = pickBestByHierarchy(locale, Object.keys(dictResolved));\n if (best) dictionary = dictResolved[best];\n } else if (matchType === 'startsWith') {\n const keys = Object.keys(dictResolved).filter((k) =>\n locale.startsWith(k),\n );\n if (keys.length) {\n const best = keys.reduce((a, b) => (b.length > a.length ? b : a));\n dictionary = dictResolved[best];\n }\n }\n }\n\n // \u547D\u4E2D\u5224\u65AD\uFF1A\u5141\u8BB8\u7A7A\u5B57\u7B26\u4E32 ''\uFF1B\u4EC5 null/undefined \u89C6\u4E3A\u672A\u547D\u4E2D\n if (dictionary && Object.prototype.hasOwnProperty.call(dictionary, key)) {\n const val = dictionary[key];\n if (val != null) {\n return val;\n }\n }\n\n return next();\n };\n};\n\nexport const createI18nLookupMiddleware = <Ex extends any[]>() =>\n I18nLookupMiddleware as typeof I18nLookupMiddleware<Ex>;\n", "export const observeDiff = <T>(\n obj: T,\n cb: <K extends keyof T>(change: {\n type: 'add' | 'update' | 'delete';\n key: K;\n oldValue: T[K] | undefined;\n newValue: T[K] | undefined;\n }) => any,\n): T => {\n return new Proxy(obj as any, {\n set(target, key: string | symbol, value) {\n const oldValue = target[key];\n const type = Object.prototype.hasOwnProperty.call(target, key)\n ? 'update'\n : 'add';\n target[key] = value;\n cb({ type, key: key as any, oldValue, newValue: value });\n return true;\n },\n deleteProperty(target, key: string | symbol) {\n if (Object.prototype.hasOwnProperty.call(target, key)) {\n const oldValue = target[key];\n delete target[key];\n cb({ type: 'delete', key: key as any, oldValue, newValue: undefined });\n return true;\n }\n return false;\n },\n });\n};\n", "export const Memorize = () => {\n const cache = new WeakMap<object, any>();\n\n const isPromiseLike = (v: any): v is Promise<unknown> =>\n v != null && typeof v.then === 'function' && typeof v.catch === 'function';\n\n const getOrSet = (instance: object, compute: () => any) => {\n if (cache.has(instance)) return cache.get(instance);\n\n const result = compute();\n\n if (isPromiseLike(result)) {\n const wrapped = result.catch((err) => {\n cache.delete(instance); // \u4E0B\u6B21\u8FD8\u80FD\u91CD\u65B0\u7B97\n throw err;\n });\n cache.set(instance, wrapped);\n return wrapped;\n }\n\n cache.set(instance, result);\n return result;\n };\n\n return function (\n _target: any,\n _propertyKey: string,\n descriptor: PropertyDescriptor,\n ) {\n // getter\n if (typeof descriptor.get === 'function') {\n const originalGetter = descriptor.get;\n descriptor.get = function () {\n return getOrSet(this, () => originalGetter.call(this));\n };\n return;\n }\n\n // method\n if (typeof descriptor.value === 'function') {\n const originalMethod = descriptor.value;\n descriptor.value = function (...args: any[]) {\n return getOrSet(this, () => originalMethod.apply(this, args));\n };\n return;\n }\n };\n};\n", "export type MayBeArray<T> = T | T[];\n\nexport const makeArray = <T>(value: MayBeArray<T>): T[] => {\n return Array.isArray(value) ? value : [value];\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["args", "locale"]
|
|
7
7
|
}
|
package/dist/index.d.ts
CHANGED
package/dist/index.mjs
CHANGED
|
@@ -1137,6 +1137,11 @@ var Memorize = () => {
|
|
|
1137
1137
|
}
|
|
1138
1138
|
};
|
|
1139
1139
|
};
|
|
1140
|
+
|
|
1141
|
+
// src/may-be-array.ts
|
|
1142
|
+
var makeArray = (value) => {
|
|
1143
|
+
return Array.isArray(value) ? value : [value];
|
|
1144
|
+
};
|
|
1140
1145
|
export {
|
|
1141
1146
|
AbortedError,
|
|
1142
1147
|
I18n,
|
|
@@ -1149,6 +1154,7 @@ export {
|
|
|
1149
1154
|
abortable,
|
|
1150
1155
|
createI18nLookupMiddleware,
|
|
1151
1156
|
dualizeAny,
|
|
1157
|
+
makeArray,
|
|
1152
1158
|
observeDiff,
|
|
1153
1159
|
patchStringInObject,
|
|
1154
1160
|
workflow
|
package/dist/index.mjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/workflow.ts", "../src/dual-object.ts", "../src/workflow-dispatcher.ts", "../src/round-robin.ts", "../src/abortable.ts", "../src/middleware-dispatcher.ts", "../src/utility/parse-i18n.ts", "../src/patch-string-in-object.ts", "../src/i18n/i18n.ts", "../src/i18n/middlewares/lookup.ts", "../src/observe-diff.ts", "../src/memorize.ts"],
|
|
4
|
-
"sourcesContent": ["// ========== \u7C7B\u578B\u5DE5\u5177 ==========\ntype AwaitedLike<T> = T extends Promise<infer R> ? R : T;\ntype AnyFn = (...args: any[]) => any;\n\ntype Chain<T> = Promise<AwaitedLike<T>> &\n (T extends AnyFn\n ? (...a: Parameters<T>) => Chain<AwaitedLike<ReturnType<T>>>\n : {}) & {\n [K in keyof T]: T[K] extends (...a: infer A) => infer R\n ? (...a: A) => Chain<AwaitedLike<R>>\n : Chain<AwaitedLike<T[K]>>;\n };\n\n// ========== \u6838\u5FC3\uFF1A\u4E0D\u53EF\u53D8\u8282\u70B9 ==========\nclass Node {\n private memo?: Promise<any>;\n constructor(\n private readonly source: any, // \u53EA\u6709\u6839\u8282\u70B9\u6709\u610F\u4E49\uFF1B\u5B50\u8282\u70B9\u53EF\u590D\u7528\u6839\u7684 source\n private readonly parent: Node | null, // \u524D\u7F00\n private readonly op: ((x: any) => any) | null, // \u4ECE parent \u7ED3\u679C\u5230\u672C\u8282\u70B9\u7ED3\u679C\u7684\u53D8\u6362\n ) {}\n\n run(): Promise<any> {\n if (!this.memo) {\n this.memo = (async () => {\n if (!this.parent) {\n // \u6839\uFF1A\u628A source \u89E3\u4E00\u6B21\u5373\u53EF\n return await this.source;\n }\n // \u5148\u62FF\u5230\u7236\u8282\u70B9\u7ED3\u679C\uFF08\u4F1A\u8BB0\u5FC6\u5316\uFF09\n const base = await this.parent.run();\n // \u5E94\u7528\u672C\u8282\u70B9\u7684\u53D8\u6362\uFF08\u5141\u8BB8\u8FD4\u56DE\u540C\u6B65\u6216\u5F02\u6B65\uFF09\n return this.op ? this.op(base) : base;\n })();\n }\n return this.memo;\n }\n\n // \u5DE5\u5382\uFF1A\u884D\u751F\u5B50\u8282\u70B9\uFF08\u5206\u53C9 = \u590D\u7528\u540C\u4E00\u4E2A parent\uFF09\n child(op: (x: any) => any): Node {\n return new Node(this.source, this, op);\n }\n\n // \u62FF\u5230\u201C\u76F8\u540C\u8282\u70B9\u201D\u7684\u53E5\u67C4\uFF08\u663E\u5F0F fork\uFF09\n fork(): Node {\n return new Node(this.source, this.parent, this.op);\n }\n}\n\nexport const WF_NODE = Symbol('@@workflow/node');\n\nfunction isWorkflowChain(x: any): x is Chain<any> {\n return !!x && typeof x === 'function' && x[WF_NODE] instanceof Node;\n}\n\n// ========== \u5BF9\u5916 API\uFF1Aworkflow ==========\nexport function workflow<T>(source: T | Promise<T>): Chain<T> {\n if (isWorkflowChain(source)) {\n return source as unknown as Chain<T>;\n }\n const root = new Node(source, null, null);\n return makeProxy<T>(root) as any;\n}\n\n// ========== \u4EE3\u7406\u5C42\uFF1A\u628A Node \u66B4\u9732\u6210\u94FE\u5F0F API ==========\nfunction makeProxy<T>(node: Node): Chain<T> {\n const runOnce = () => node.run(); // \u8BB0\u5FC6\u5316\u5728 Node \u5185\u90E8\n\n const rootHandler: ProxyHandler<any> = {\n get(_t, prop) {\n if (prop === WF_NODE) return node;\n // \u7ED3\u675F\u4FE1\u53F7\uFF1A\u6240\u6709 then/catch/finally \u590D\u7528\u540C\u4E00\u4E2A Promise\n if (prop === 'then')\n return (res: any, rej?: any) => runOnce().then(res, rej);\n if (prop === 'catch') return (rej: any) => runOnce().catch(rej);\n if (prop === 'finally') return (fin: any) => runOnce().finally(fin);\n\n // \u8BBF\u95EE\u4E00\u4E2A\u5C5E\u6027\uFF1A\u751F\u6210\u4E00\u4E2A\u201CGet\u201D\u5B50\u8282\u70B9\uFF0C\u4F46\u4E0D\u6267\u884C\n return linkProxy(prop);\n },\n // \u652F\u6301\u5BF9\u201C\u5F53\u524D\u503C\u201D\u76F4\u63A5\u4E8C\u6B21\u8C03\u7528\uFF1A foo()()\n apply(_t, _this, argArray) {\n const child = node.child((cur: any) => {\n if (typeof cur !== 'function')\n throw new TypeError('Current value is not callable');\n return cur(...argArray);\n });\n return makeProxy<any>(child);\n },\n };\n\n const linkProxy = (prop: PropertyKey) =>\n new Proxy(function () {}, {\n // \u628A \u201C.foo(\u2026args)\u201D \u8BB0\u5F55\u4E3A Call\n apply(_t, _this, argArray) {\n const child = node.child((cur: any) => {\n const fn = (cur as any)[prop];\n if (typeof fn !== 'function') {\n throw new TypeError(`${String(prop)} is not a function`);\n }\n return fn.apply(cur, argArray);\n });\n return makeProxy<any>(child);\n },\n // \u628A \u201C.bar\u201D \u8BB0\u5F55\u4E3A Get\uFF1B\u7EE7\u7EED\u6DF1\u5165\u65F6\u5728\u8FD9\u4E2A Get \u7684\u7ED3\u679C\u4E0A\u518D\u5904\u7406\n get(_t, next) {\n if (next === WF_NODE) return node;\n if (next === 'then')\n return (r: any, j?: any) =>\n node\n .child((cur: any) => (cur as any)[prop])\n .run()\n .then(r, j);\n if (next === 'catch')\n return (rej: any) =>\n node\n .child((cur: any) => (cur as any)[prop])\n .run()\n .catch(rej);\n if (next === 'finally')\n return (fin: any) =>\n node\n .child((cur: any) => (cur as any)[prop])\n .run()\n .finally(fin);\n\n const child = node.child((cur: any) => (cur as any)[prop]);\n return (makeProxy as any)(child)[next];\n },\n });\n\n return new Proxy(function () {}, rootHandler) as any;\n}\n", "// dual-unified.ts\nexport type Dual<T> = T & PromiseLike<T>;\n\ntype ThenKey = 'then' | 'catch' | 'finally';\nconst isThenKey = (k: PropertyKey): k is ThenKey =>\n k === 'then' || k === 'catch' || k === 'finally';\n\ntype State = 'undecided' | 'pending' | 'fulfilled' | 'rejected';\n\n/** \u4EC5\u5141\u8BB8\u586B\u5165 \u201C\u8FD4\u56DE Promise \u7684\u65B9\u6CD5\u540D\u201D */\nexport type AsyncMethodKeys<T> = {\n [K in keyof T]-?: T[K] extends (...args: any[]) => Promise<any> ? K : never;\n}[keyof T];\n\nexport interface DualizeOptions<T> {\n /** \u8FD9\u4E9B\u65B9\u6CD5\u5728 undecided/pending \u65F6\u4F1A\u8FD4\u56DE\u4E00\u4E2A\u5EF6\u8FDF\u6267\u884C\u51FD\u6570\uFF0C\u7B49\u5F85\u5BF9\u8C61 Promise \u5B8C\u6210\u540E\u518D\u8C03\u7528 */\n asyncMethods?: readonly AsyncMethodKeys<T>[];\n}\n\nexport function dualizeAny<T>(\n sync: () => T, // \u540C\u6B65\u6784\u9020\uFF1B\u82E5\u629B\u9519\u5219\u89C6\u4E3A rejected\n asyncFn: () => Promise<T>, // \u5F02\u6B65\u6784\u9020\n options?: DualizeOptions<T>,\n): Dual<T> {\n let state: State = 'undecided';\n\n let value!: T; // fulfilled \u65F6\u7684\u503C\uFF08\u542B\u6765\u81EA sync \u6216 async\uFF09\n let reason: any; // rejected \u7684\u9519\u8BEF\n let p!: Promise<T>; // \u7F13\u5B58 Promise\uFF08resolved/rejected/\u8FDB\u884C\u4E2D\uFF09\n\n const asyncMethodSet = new Set<PropertyKey>(\n (options?.asyncMethods ?? []) as readonly PropertyKey[],\n );\n\n const startAsync = () => {\n if (!p || state === 'undecided') {\n state = 'pending';\n p = Promise.resolve()\n .then(asyncFn)\n .then(\n (v) => {\n value = v;\n state = 'fulfilled';\n return v;\n },\n (e) => {\n reason = e;\n state = 'rejected';\n throw e;\n },\n );\n }\n return p;\n };\n\n const ensureSync = () => {\n if (state === 'undecided') {\n try {\n value = sync();\n state = 'fulfilled';\n } catch (e) {\n reason = e;\n state = 'rejected';\n }\n }\n };\n\n /** \u5728\u201C\u5BF9\u8C61\u53EF\u7528\u201D\u540E\u8C03\u7528\u67D0\u4E2A\u5F02\u6B65\u65B9\u6CD5\uFF08\u7531 asyncMethods \u58F0\u660E\uFF09 */\n const makeDeferredAsyncMethod =\n (prop: PropertyKey) =>\n (...args: any[]) =>\n startAsync().then((obj) => {\n const fn = (obj as any)[prop];\n return fn.apply(obj, args);\n });\n\n // \u4ECE\u67D0\u4E2A\u503C\u4E0A\u53D6\u5C5E\u6027\uFF08\u539F\u59CB\u503C\u4F1A\u88C5\u7BB1\uFF09\uFF0C\u5E76\u7ED1\u5B9A this\n const getFrom = (v: unknown, prop: PropertyKey) => {\n if (prop === Symbol.toPrimitive) {\n return (hint: 'default' | 'number' | 'string') => {\n const x: any = v;\n if (hint === 'number') return Number(x);\n if (hint === 'string') return String(x);\n if (typeof x === 'string') return x;\n const n = Number(x);\n return Number.isNaN(n) ? String(x) : n;\n };\n }\n if (prop === 'valueOf') return () => v as any;\n if (prop === 'toString') return () => String(v);\n\n const boxed: any =\n v !== null && (typeof v === 'object' || typeof v === 'function')\n ? v\n : Object(v as any);\n const out = boxed[prop];\n return typeof out === 'function' ? out.bind(boxed) : out;\n };\n\n const proxy = new Proxy(Object.create(null) as any, {\n get(_t, prop) {\n // then/catch/finally\uFF1A\u8D70 Promise \u901A\u9053\n if (isThenKey(prop)) {\n if (state === 'undecided') {\n startAsync();\n } else if (state === 'fulfilled') {\n // \u82E5\u5DF2 fulfilled\uFF08\u6765\u81EA sync \u6216 async\uFF09\uFF0C\u8865\u4E00\u4E2A\u5DF2\u5B8C\u6210\u7684 Promise\n p ||= Promise.resolve(value);\n } else if (state === 'rejected') {\n p ||= Promise.reject(reason);\n } else {\n // pending\uFF1A\u5DF2\u6709 p\n startAsync();\n }\n const anyP: any = p;\n const m = anyP[prop];\n return typeof m === 'function' ? m.bind(anyP) : m;\n }\n\n // \u58F0\u660E\u4E3A\u5F02\u6B65\u65B9\u6CD5\u7684\u952E\uFF1A\u5728 undecided/pending \u65F6\u8FD4\u56DE\u201C\u5EF6\u8FDF\u51FD\u6570\u201D\n if (asyncMethodSet.has(prop)) {\n if (state === 'undecided' || state === 'pending') {\n startAsync();\n return makeDeferredAsyncMethod(prop);\n }\n if (state === 'fulfilled') {\n return getFrom(value, prop); // \u540C\u6B65\u53EF\u76F4\u63A5\u53D6\u5230\u65B9\u6CD5\uFF08\u5176\u672C\u8EAB\u8FD4\u56DE Promise\uFF09\n }\n if (state === 'rejected') {\n // \u8BBF\u95EE\u5373\u629B\uFF1B\u4E5F\u53EF\u4EE5\u9009\u62E9\u8FD4\u56DE () => Promise.reject(reason)\n throw reason;\n }\n }\n\n // \u5176\u5B83\u5C5E\u6027\u8BBF\u95EE\uFF1A\u9075\u5FAA\u72B6\u6001\u673A\n switch (state) {\n case 'undecided': {\n ensureSync();\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n if (state === 'fulfilled') return getFrom(value, prop);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n if (state === 'rejected') throw reason;\n // \u7406\u8BBA\u4E0A\u4E0D\u4F1A\u5230\u8FD9\u91CC\n throw new TypeError('Invalid state transition');\n }\n case 'pending': {\n // \u975E asyncMethods \u7684\u5C5E\u6027\u5728 pending \u65F6\u4E0D\u53EF\u540C\u6B65\u8BFB\u53D6\n throw new TypeError('Value is not ready yet. Please await it first.');\n }\n case 'fulfilled': {\n return getFrom(value, prop);\n }\n case 'rejected': {\n throw reason;\n }\n }\n },\n\n has(_t, key) {\n if (state === 'undecided') {\n ensureSync();\n }\n if (state === 'fulfilled') return key in Object(value as any);\n return false; // pending/rejected\uFF1A\u4FDD\u5B88\u5904\u7406\n },\n\n ownKeys() {\n if (state === 'undecided') ensureSync();\n if (state === 'fulfilled') return Reflect.ownKeys(Object(value as any));\n return [];\n },\n\n getOwnPropertyDescriptor(_t, key) {\n if (state === 'undecided') ensureSync();\n if (state === 'fulfilled')\n return Object.getOwnPropertyDescriptor(Object(value as any), key);\n return undefined;\n },\n });\n\n return proxy as Dual<T>;\n}\n", "export interface DispatcherOptions {\n /** Max attempts per task. Default 3. */\n maxAttempts?: number;\n /** Backoff base in ms. backoff = base * 2^failCount. Default 1000. */\n backoffBaseMs?: number;\n}\n\n// Internal task record\ntype Task<F extends (...args: any[]) => Promise<any>> = {\n args: Parameters<F>;\n resolve: (v: Awaited<ReturnType<F>>) => void;\n reject: (e: any) => void;\n attempts: number;\n lastError?: any;\n triedWorkers: Set<number>; // for global dispatch\n specificWorkerIndex?: number; // for dispatchSpecific only\n};\n\ntype WorkerState = {\n running: boolean;\n failCount: number;\n nextAvailableAt: number;\n totalRuns: number;\n};\n\ntype RemovalWaiter = () => void;\n\ntype ActiveSlot<F extends (...args: any[]) => Promise<any>> = {\n kind: 'active';\n fn: F;\n state: WorkerState;\n queue: Task<F>[];\n removalWaiters: RemovalWaiter[];\n removed?: boolean; // marker when removed while running; retained for completion callback\n};\n\ntype PendingSlot<F extends (...args: any[]) => Promise<any>> = {\n kind: 'pending';\n promise: Promise<F>;\n queue: Task<F>[];\n removalWaiters: RemovalWaiter[];\n error?: any;\n removed?: boolean; // if removed before resolved\n};\n\ntype RejectedSlot<F extends (...args: any[]) => Promise<any>> = {\n kind: 'rejected';\n error: any;\n queue: Task<F>[];\n removalWaiters: RemovalWaiter[];\n removed?: boolean;\n};\n\ntype Slot<F extends (...args: any[]) => Promise<any>> =\n | ActiveSlot<F>\n | PendingSlot<F>\n | RejectedSlot<F>;\n\nexport type WorkerSnapshot<F extends (...args: any[]) => Promise<any>> =\n | {\n index: number;\n status: 'active';\n fn: F;\n running: boolean;\n failCount: number;\n totalRuns: number;\n blockedMs: number;\n specificQueue: number;\n }\n | {\n index: number;\n status: 'pending';\n promise: Promise<F>;\n specificQueue: number;\n }\n | {\n index: number;\n status: 'rejected';\n error: string;\n specificQueue: number;\n };\n\nexport class WorkflowDispatcher<F extends (...args: any[]) => Promise<any>> {\n private readonly maxAttempts: number;\n private readonly backoffBaseMs: number;\n\n private readonly slots: Slot<F>[] = [];\n private readonly globalQueue: Task<F>[] = [];\n\n private pendingInits = 0;\n private everActivated = false;\n private drainScheduled = false;\n\n constructor(\n workersOrPromises: Array<F | Promise<F>>,\n options: DispatcherOptions = {},\n ) {\n // if (!workersOrPromises?.length) throw new Error('workers cannot be empty');\n\n this.maxAttempts = options.maxAttempts ?? 3;\n this.backoffBaseMs = options.backoffBaseMs ?? 1000;\n\n for (let i = 0; i < workersOrPromises.length; i++) {\n const w = workersOrPromises[i];\n if (typeof w === 'function') {\n const slot: ActiveSlot<F> = {\n kind: 'active',\n fn: w,\n state: {\n running: false,\n failCount: 0,\n nextAvailableAt: 0,\n totalRuns: 0,\n },\n queue: [],\n removalWaiters: [],\n };\n this.slots.push(slot);\n this.everActivated = true;\n } else {\n // Create a stable slot object and mutate it in-place on resolve/reject.\n this.pendingInits++;\n const slot: PendingSlot<F> = {\n kind: 'pending',\n promise: Promise.resolve(w),\n queue: [],\n removalWaiters: [],\n };\n this.slots.push(slot);\n\n slot.promise\n .then((fn) => {\n if (slot.removed) return; // was removed; ignore resolution\n // mutate in-place to active\n (slot as any).kind = 'active';\n (slot as any).fn = fn;\n (slot as any).state = {\n running: false,\n failCount: 0,\n nextAvailableAt: 0,\n totalRuns: 0,\n };\n this.everActivated = true;\n // keep queue & removalWaiters arrays as-is\n })\n .catch((err) => {\n if (slot.removed) return; // was removed; ignore\n // mutate in-place to rejected (keep queue/waiters)\n (slot as any).kind = 'rejected';\n (slot as any).error = err;\n })\n .finally(() => {\n this.pendingInits--;\n this.drain();\n if (this.pendingInits === 0 && !this.hasAnyActive()) {\n const err = new Error(\n 'No workers available (all failed to initialize).',\n );\n setTimeout(() => this.rejectAllQueued(err), 0);\n }\n });\n }\n }\n\n if (this.everActivated) this.drain();\n }\n\n /** Dispatch: choose eligible active with least totalRuns; retry across workers on failure. */\n dispatch(...args: Parameters<F>): Promise<Awaited<ReturnType<F>>> {\n return new Promise((resolve, reject) => {\n const task: Task<F> = {\n args,\n resolve,\n reject,\n attempts: 0,\n triedWorkers: new Set(),\n };\n this.globalQueue.push(task);\n this.drain();\n });\n }\n\n /** Dispatch to a specific worker (ignore backoff), wait until it is free; retry on the same worker. */\n dispatchSpecific(\n index: number,\n ...args: Parameters<F>\n ): Promise<Awaited<ReturnType<F>>> {\n if (index < 0 || index >= this.slots.length) {\n return Promise.reject(new Error(`worker index out of range: ${index}`));\n }\n return new Promise((resolve, reject) => {\n const task: Task<F> = {\n args,\n resolve,\n reject,\n attempts: 0,\n triedWorkers: new Set(),\n specificWorkerIndex: index,\n };\n const slot = this.slots[index];\n slot.queue.push(task);\n this.drain();\n });\n }\n\n /** Replace a worker at index with a new active worker function. */\n public replaceWorker(index: number, fn: F): void {\n if (index < 0 || index >= this.slots.length) {\n throw new Error(`worker index out of range: ${index}`);\n }\n const prevHadActive = this.hasAnyActive();\n const slot = this.slots[index];\n\n // Preserve queue & removal waiters; reset failure/backoff; keep totalRuns to avoid skew.\n const preservedQueue = slot.queue;\n const preservedWaiters = slot.removalWaiters ?? [];\n\n const next: ActiveSlot<F> = {\n kind: 'active',\n fn,\n state: {\n running: false,\n failCount: 0,\n nextAvailableAt: 0,\n totalRuns: (slot as any).state?.totalRuns ?? 0,\n },\n queue: preservedQueue,\n removalWaiters: preservedWaiters,\n };\n\n // Mutate in-place if possible (keeps references stable), else replace array entry.\n Object.assign(slot as any, next);\n (slot as any).kind = 'active';\n (slot as any).fn = fn;\n (slot as any).state.failCount = 0;\n (slot as any).state.nextAvailableAt = 0;\n\n this.everActivated = true;\n if (!prevHadActive && this.hasAnyActive()) {\n this.drain();\n } else {\n this.drain();\n }\n }\n\n /** Add a new active worker at the tail; return its index. */\n public addWorker(fn: F): number {\n const slot: ActiveSlot<F> = {\n kind: 'active',\n fn,\n state: { running: false, failCount: 0, nextAvailableAt: 0, totalRuns: 0 },\n queue: [],\n removalWaiters: [],\n };\n const index = this.slots.length;\n this.slots.push(slot);\n this.everActivated = true;\n this.drain();\n return index;\n }\n\n /**\n * Remove a worker completely (splice). It becomes unavailable immediately.\n * Returns a Promise that resolves when its last running task (if any) finishes.\n */\n public removeWorker(index: number): Promise<void> {\n if (index < 0 || index >= this.slots.length) {\n return Promise.reject(new Error(`worker index out of range: ${index}`));\n }\n\n const slot = this.slots[index];\n\n // Reject all queued specific tasks on this worker (macro-task to avoid unhandled)\n const queued = slot.queue.splice(0);\n const removalErr = new Error(`Worker[${index}] removed`);\n setTimeout(() => {\n for (const t of queued) t.reject(removalErr);\n }, 0);\n\n // Decide completion promise:\n let completion: Promise<void>;\n const isRunning = slot.kind === 'active' && slot.state.running;\n if (!isRunning) {\n completion = Promise.resolve();\n } else {\n completion = new Promise<void>((resolve) => {\n slot.removalWaiters.push(resolve);\n });\n }\n\n // Mark as removed (so any pending init resolution is ignored)\n (slot as any).removed = true;\n\n // Physically remove the slot\n this.slots.splice(index, 1);\n\n // Re-map indices in all remaining tasks:\n // 1) Fix specificWorkerIndex in every remaining slot.queue\n for (let i = 0; i < this.slots.length; i++) {\n const s = this.slots[i];\n for (const t of s.queue) {\n if (typeof t.specificWorkerIndex === 'number') {\n if (t.specificWorkerIndex === index) {\n // This should not happen because we just removed and flushed its queue,\n // but guard anyway.\n t.reject(new Error(`Worker[${index}] no longer exists`));\n } else if (t.specificWorkerIndex > index) {\n t.specificWorkerIndex -= 1;\n }\n }\n }\n }\n // 2) Fix triedWorkers sets in globalQueue\n for (const t of this.globalQueue) {\n if (t.triedWorkers.has(index)) t.triedWorkers.delete(index);\n const next = new Set<number>();\n for (const w of t.triedWorkers) {\n next.add(w > index ? w - 1 : w);\n }\n t.triedWorkers = next;\n }\n\n // Trigger scheduling for the remaining system\n this.drain();\n\n return completion;\n }\n\n snapshot(): WorkerSnapshot<F>[] {\n const now = Date.now();\n\n return this.slots.map((slot, i) => {\n switch (slot.kind) {\n case 'active': {\n const s = slot.state;\n return {\n index: i,\n status: 'active' as const,\n fn: slot.fn,\n running: s.running,\n failCount: s.failCount,\n totalRuns: s.totalRuns,\n blockedMs: Math.max(0, s.nextAvailableAt - now),\n specificQueue: slot.queue.length,\n };\n }\n\n case 'pending':\n return {\n index: i,\n status: 'pending' as const,\n promise: slot.promise,\n specificQueue: slot.queue.length,\n };\n\n case 'rejected':\n return {\n index: i,\n status: 'rejected' as const,\n error: String(slot.error ?? 'unknown error'),\n specificQueue: slot.queue.length,\n };\n }\n });\n }\n\n get pending(): number {\n return this.globalQueue.length;\n }\n\n // ---------------- scheduling ----------------\n\n private drain() {\n if (this.drainScheduled) return;\n this.drainScheduled = true;\n queueMicrotask(() => {\n this.drainScheduled = false;\n this._drainLoop();\n });\n }\n\n private _drainLoop() {\n // If no active workers and still initializing, wait; if all inited and none active, constructor already rejects all.\n if (!this.hasAnyActive()) {\n if (this.pendingInits > 0) return;\n return;\n }\n\n // First: flush rejected workers' specific queues (macro-task rejection)\n for (let i = 0; i < this.slots.length; i++) {\n const slot = this.slots[i];\n if (slot.kind === 'rejected' && slot.queue.length > 0) {\n const q = slot.queue.splice(0);\n const err = new Error(\n `Worker[${i}] failed to initialize: ${String(slot.error ?? 'unknown error')}`,\n );\n setTimeout(() => {\n for (const t of q) t.reject(err);\n }, 0);\n }\n }\n\n let progressed = true;\n while (progressed) {\n progressed = false;\n\n // 1) Run specific queues for active workers (ignore backoff)\n for (let i = 0; i < this.slots.length; i++) {\n const slot = this.slots[i];\n if (slot.kind !== 'active') continue;\n const st = slot.state;\n if (!st.running && slot.queue.length > 0) {\n const task = slot.queue.shift()!;\n this.startTaskOnActiveSlot(i, slot, task, /*fromSpecific*/ true);\n progressed = true;\n }\n }\n\n // 2) Run global queue (choose eligible active with least totalRuns)\n if (this.globalQueue.length > 0) {\n const idx = this.pickBestActiveForGlobal();\n if (idx !== -1) {\n const slot = this.slots[idx] as ActiveSlot<F>;\n const task = this.globalQueue.shift()!;\n this.startTaskOnActiveSlot(idx, slot, task, /*fromSpecific*/ false);\n progressed = true;\n }\n }\n }\n }\n\n private hasAnyActive() {\n return this.slots.some((s) => s.kind === 'active');\n }\n\n private rejectAllQueued(err: any) {\n while (this.globalQueue.length) this.globalQueue.shift()!.reject(err);\n for (const slot of this.slots) {\n while (slot.queue.length) slot.queue.shift()!.reject(err);\n }\n }\n\n private isEligibleActive(i: number, now: number) {\n const slot = this.slots[i] as ActiveSlot<F>;\n const slotGood = (s: ActiveSlot<F>) =>\n s.kind === 'active' && !s.state?.running;\n if (!slotGood(slot)) return false;\n if (now >= slot.state.nextAvailableAt) return true;\n return !this.slots.some((other: ActiveSlot<F>, j) => {\n if (j === i) return false;\n if (!slotGood(other)) return false;\n return now >= other.state.nextAvailableAt;\n });\n }\n\n private pickBestActiveForGlobal(): number {\n const now = Date.now();\n const task = this.globalQueue[0];\n\n // Prefer actives not tried yet\n let best = -1,\n bestRuns = Infinity;\n for (let i = 0; i < this.slots.length; i++) {\n if (!this.isEligibleActive(i, now)) continue;\n if (task?.triedWorkers.has(i)) continue;\n const slot = this.slots[i] as ActiveSlot<F>;\n if (slot.state.totalRuns < bestRuns) {\n bestRuns = slot.state.totalRuns;\n best = i;\n }\n }\n if (best !== -1) return best;\n\n // Allow already-tried actives\n best = -1;\n bestRuns = Infinity;\n for (let i = 0; i < this.slots.length; i++) {\n if (!this.isEligibleActive(i, now)) continue;\n const slot = this.slots[i] as ActiveSlot<F>;\n if (slot.state.totalRuns < bestRuns) {\n bestRuns = slot.state.totalRuns;\n best = i;\n }\n }\n return best;\n }\n\n private startTaskOnActiveSlot(\n index: number,\n slot: ActiveSlot<F>,\n task: Task<F>,\n fromSpecific: boolean,\n ) {\n const st = slot.state;\n st.running = true;\n st.totalRuns += 1;\n\n const finalize = () => {\n st.running = false;\n // If someone is waiting for this worker to finish (removeWorker), resolve them when idle.\n if (\n slot.removalWaiters.length > 0 &&\n !st.running &&\n slot.queue.length === 0\n ) {\n const list = slot.removalWaiters.splice(0);\n for (const w of list) w();\n }\n this.drain();\n };\n\n (async () => {\n try {\n const result = await slot.fn(...task.args);\n st.failCount = Math.max(0, st.failCount - 1);\n task.resolve(result as Awaited<ReturnType<F>>);\n } catch (err) {\n task.lastError = err;\n st.failCount += 1;\n st.nextAvailableAt =\n Date.now() + this.backoffBaseMs * Math.pow(2, st.failCount);\n\n if (fromSpecific) {\n task.attempts += 1;\n if (task.attempts >= this.maxAttempts) {\n task.reject(task.lastError);\n } else {\n // retry on the same worker (ignore backoff)\n slot.queue.push(task);\n }\n } else {\n task.attempts += 1;\n task.triedWorkers.add(index);\n const activeCount = this.slots.filter(\n (s) => s.kind === 'active',\n ).length;\n const allActiveTriedOnce = task.triedWorkers.size >= activeCount;\n const attemptsLimitReached = task.attempts >= this.maxAttempts;\n\n if (allActiveTriedOnce || attemptsLimitReached) {\n task.reject(task.lastError);\n } else {\n this.globalQueue.push(task);\n }\n }\n } finally {\n finalize();\n }\n })();\n }\n}\n", "export class RoundRobin<T> {\n private index = 0;\n\n constructor(public items: T[]) {\n if (items.length === 0) {\n throw new Error('RoundRobin requires at least one item');\n }\n }\n\n next(): T {\n const nextIndex = this.index % this.items.length;\n this.index = (this.index + 1) % this.items.length;\n return this.items[nextIndex];\n }\n}\n", "export class AbortedError extends Error {\n name = 'AbortError';\n constructor(\n msg = 'Operation aborted',\n public cause?: unknown,\n ) {\n super(msg);\n }\n}\n\ntype AnyFunc = (...args: any[]) => any;\nconst isObjectLike = (v: unknown): v is object | AnyFunc =>\n (typeof v === 'object' && v !== null) || typeof v === 'function';\n\nfunction boxPrimitive(v: unknown): object {\n return Object(v as any);\n}\n\nexport interface AbortableOpts {\n /** \u662F\u5426\u628A\u539F\u59CB\u503C\u88C5\u7BB1\u540E\u518D\u4EE3\u7406\uFF08\u4F1A\u6539\u53D8 typeof/=== \u8BED\u4E49\uFF0C\u9ED8\u8BA4 false\uFF09 */\n boxPrimitives?: boolean;\n /** \u4E0D\u9012\u5F52\u4EE3\u7406\u5B50\u5BF9\u8C61\uFF08\u4EC5\u4EE3\u7406\u9876\u5C42\u5BF9\u8C61/\u51FD\u6570\uFF0C\u9ED8\u8BA4 false\uFF09 */\n noRecursive?: boolean;\n}\n\nexport function abortable<T>(\n obj: T,\n signal: AbortSignal,\n opts?: AbortableOpts,\n): T {\n const { boxPrimitives = false, noRecursive = false } = opts ?? {};\n\n const throwIfAborted = () => {\n if (signal.aborted) {\n const r = (signal as any).reason;\n if (r instanceof Error) throw r;\n throw new AbortedError('Operation aborted', r);\n }\n };\n\n throwIfAborted();\n\n const targetToProxy = new WeakMap<object, any>();\n const proxyToTarget = new WeakMap<object, any>();\n\n const wrapNativePromise = <V>(pLike: PromiseLike<V>): Promise<V> => {\n const base = pLike instanceof Promise ? pLike : Promise.resolve(pLike);\n return base.then(\n async (v) => {\n throwIfAborted();\n return proxify(v);\n },\n async (e) => {\n throwIfAborted();\n throw e;\n },\n );\n };\n\n let shortCircuit = false;\n\n const proxify = <V>(value: V): V => {\n if (noRecursive) {\n if (shortCircuit) {\n return value;\n } else {\n shortCircuit = true;\n }\n }\n\n // Promise\uFF1A\u6309\u201C\u771F Promise + \u4EE3\u7406\u201D\u7684\u65B9\u6848\u5904\u7406\n if (typeof (value as any)?.then === 'function') {\n return wrapNativePromise(value as any) as unknown as V;\n }\n\n // \u539F\u59CB\u503C\n if (!isObjectLike(value)) {\n if (!boxPrimitives) return value;\n return proxify(boxPrimitive(value) as unknown as V);\n }\n\n // \u590D\u7528\n const cached = targetToProxy.get(value as object);\n if (cached) return cached;\n\n const handler: ProxyHandler<any> = {\n get(target, p, receiver) {\n throwIfAborted();\n const out = Reflect.get(target, p, receiver);\n return proxify(out);\n },\n set(target, p, val, receiver) {\n throwIfAborted();\n return Reflect.set(target, p, val, receiver);\n },\n apply(target, thisArg, argArray) {\n throwIfAborted();\n const unwrappedThis =\n (isObjectLike(thisArg) && proxyToTarget.get(thisArg as any)) ||\n thisArg;\n const ret = Reflect.apply(target as AnyFunc, unwrappedThis, argArray);\n return proxify(ret);\n },\n construct(target, argArray, newTarget) {\n throwIfAborted();\n const instance = Reflect.construct(\n target as AnyFunc,\n argArray,\n newTarget,\n );\n return proxify(instance);\n },\n defineProperty(t, p, attrs) {\n throwIfAborted();\n return Reflect.defineProperty(t, p, attrs);\n },\n deleteProperty(t, p) {\n throwIfAborted();\n return Reflect.deleteProperty(t, p);\n },\n getOwnPropertyDescriptor(t, p) {\n throwIfAborted();\n return Reflect.getOwnPropertyDescriptor(t, p);\n },\n getPrototypeOf(t) {\n throwIfAborted();\n return Reflect.getPrototypeOf(t);\n },\n setPrototypeOf(t, proto) {\n throwIfAborted();\n return Reflect.setPrototypeOf(t, proto);\n },\n has(t, p) {\n throwIfAborted();\n return Reflect.has(t, p);\n },\n isExtensible(t) {\n throwIfAborted();\n return Reflect.isExtensible(t);\n },\n ownKeys(t) {\n throwIfAborted();\n return Reflect.ownKeys(t);\n },\n preventExtensions(t) {\n throwIfAborted();\n return Reflect.preventExtensions(t);\n },\n };\n\n const proxy = new Proxy(value as any, handler);\n targetToProxy.set(value as object, proxy);\n proxyToTarget.set(proxy, value);\n return proxy;\n };\n\n return proxify(obj);\n}\n", "import { Awaitable } from './types';\n\ntype AnyFunc = (...args: any[]) => any;\n\ntype MiddlewareValue<F extends AnyFunc> = Awaited<ReturnType<F>>;\ntype MiddlewareResult<F extends AnyFunc> = Promise<MiddlewareValue<F>>;\ntype MiddlewareNext<F extends AnyFunc> = () => MiddlewareResult<F>;\ntype MiddlewareArgs<F extends AnyFunc> = [\n ...args: Parameters<F>,\n next: MiddlewareNext<F>,\n];\ntype MiddlewareReturn<F extends AnyFunc> = Awaitable<MiddlewareValue<F>>;\n\nexport type Middleware<F extends AnyFunc> = (\n ...args: MiddlewareArgs<F>\n) => MiddlewareReturn<F>;\n\nexport type MiddlewareAcceptResult<F extends AnyFunc> = (\n s: MiddlewareValue<F>,\n) => Awaitable<boolean>;\nexport type MiddlewareErrorHandler<F extends AnyFunc> = (\n e: any,\n args: Parameters<F>,\n next: MiddlewareNext<F>,\n) => Awaitable<MiddlewareValue<F>>;\n\nexport interface MiddlewareDispatcherOptions<F extends AnyFunc> {\n acceptResult?: MiddlewareAcceptResult<F>;\n errorHandler?: MiddlewareErrorHandler<F>;\n}\n\nexport class MiddlewareDispatcher<F extends AnyFunc> {\n constructor(private options: MiddlewareDispatcherOptions<F> = {}) {}\n middlewares: Middleware<F>[] = [];\n\n middleware(mw: Middleware<F>, prior = false) {\n if (prior) {\n this.middlewares.unshift(mw);\n } else {\n this.middlewares.push(mw);\n }\n return this;\n }\n\n removeMiddleware(mw: Middleware<F>) {\n const index = this.middlewares.indexOf(mw);\n if (index >= 0) {\n this.middlewares.splice(index, 1);\n }\n return this;\n }\n\n dispatch(...args: Parameters<F>): MiddlewareResult<F> {\n const mws = this.middlewares;\n const acceptResult: MiddlewareAcceptResult<F> =\n this.options.acceptResult || ((res) => res != null);\n const errorHandler: MiddlewareErrorHandler<F> =\n this.options.errorHandler || ((e, args, next) => next());\n const dispatch = async (i: number): MiddlewareResult<F> => {\n if (i >= mws.length) return undefined;\n\n const mw = mws[i];\n let nextCalled = false;\n\n const next = async (): MiddlewareResult<F> => {\n if (nextCalled) {\n return undefined;\n }\n nextCalled = true;\n return dispatch(i + 1);\n };\n\n const runMw = async (cb: () => MiddlewareReturn<F>) => {\n const res = await cb();\n if (!nextCalled && !(await acceptResult(res))) {\n return dispatch(i + 1);\n }\n return res;\n };\n\n try {\n return await runMw(() => mw(...args, next));\n } catch (e) {\n return await runMw(() => errorHandler(e, args, next));\n }\n };\n return dispatch(0);\n }\n}\n", "// \u2014\u2014 \u89E3\u6790\u7ED3\u679C\u7ED3\u6784 \u2014\u2014 //\nexport type I18nPiece =\n | { type: 'raw'; value: string }\n | { type: 'ph'; rawInner: string; key: string };\n\n/**\n * \u6808\u5F0F\u89E3\u6790 #{ ... } \u5360\u4F4D\u3002\u652F\u6301\u5185\u90E8\u6210\u5BF9\u82B1\u62EC\u53F7\uFF0C\u5982 #{ foo {{ bar }} }\u3002\n * - \u672A\u95ED\u5408\u65F6\uFF1A\u628A\u4ECE\u4E0A\u6B21\u4F4D\u7F6E i \u5230\u7ED3\u5C3E\u6574\u4F53\u4F5C\u4E3A raw \u653E\u56DE\uFF08\u907F\u514D\u88AB\u62C6\u6210\u4E24\u6BB5\uFF09\n * - key = trim(rawInner)\n */\nexport const parseI18n = (text: string): I18nPiece[] => {\n const pieces: I18nPiece[] = [];\n if (!text) return pieces;\n\n let i = 0;\n const n = text.length;\n\n while (i < n) {\n const start = text.indexOf('#{', i);\n if (start === -1) {\n // \u6CA1\u6709\u66F4\u591A\u5360\u4F4D\u7B26\n if (i < n) pieces.push({ type: 'raw', value: text.slice(i) });\n break;\n }\n\n // \u5148\u5C1D\u8BD5\u5339\u914D\u8FD9\u4E2A\u5360\u4F4D\u7B26\u662F\u5426\u95ED\u5408\uFF08\u6B64\u65F6\u4E0D\u7ACB\u5373\u63A8\u5165\u524D\u5BFC raw\uFF09\n let j = start + 2; // \u6307\u5411 '#{' \u540E\u7B2C\u4E00\u4E2A\u5B57\u7B26\n let depth = 1;\n while (j < n && depth > 0) {\n const ch = text.charCodeAt(j);\n if (ch === 123 /* '{' */) depth++;\n else if (ch === 125 /* '}' */) depth--;\n j++;\n }\n\n if (depth !== 0) {\n // \u672A\u95ED\u5408\uFF1A\u628A\u4ECE i \u5230\u672B\u5C3E\u6574\u4F53\u5F53\u4F5C raw\uFF08\u5305\u542B\u524D\u5BFC + '#{' \u5C3E\u5DF4\uFF09\n pieces.push({ type: 'raw', value: text.slice(i) });\n break;\n }\n\n // \u5230\u8FD9\u91CC\u8BF4\u660E\u5360\u4F4D\u95ED\u5408\uFF1A\u5148\u63A8\u5165\u524D\u5BFC raw\uFF0C\u518D\u63A8\u5360\u4F4D\u7247\u6BB5\n if (start > i) {\n pieces.push({ type: 'raw', value: text.slice(i, start) });\n }\n\n const rawInner = text.slice(start + 2, j - 1);\n const key = rawInner.trim();\n pieces.push({ type: 'ph', rawInner, key });\n\n i = j; // \u7EE7\u7EED\u5411\u540E\u626B\u63CF\n }\n\n return pieces;\n};\n", "import { Awaitable } from './types';\n\nexport const patchStringInObject = async <T>(\n obj: T,\n cb: (s: string) => Awaitable<string>,\n): Promise<T> => {\n const visited = new WeakSet<object>();\n\n const isSpecialObject = (v: any): boolean => {\n if (v == null || typeof v !== 'object') return false;\n if (\n v instanceof Date ||\n v instanceof RegExp ||\n v instanceof Map ||\n v instanceof Set ||\n v instanceof WeakMap ||\n v instanceof WeakSet ||\n v instanceof ArrayBuffer ||\n v instanceof DataView ||\n ArrayBuffer.isView(v)\n ) {\n return true;\n }\n\n const tag = Object.prototype.toString.call(v);\n switch (tag) {\n case '[object URL]':\n case '[object URLSearchParams]':\n case '[object Error]':\n case '[object Blob]':\n case '[object File]':\n case '[object FormData]':\n return true;\n default:\n return false;\n }\n };\n\n const checkValue = (\n v: any,\n ): { ok: false } | { ok: true; kind: 'string' | 'object' } => {\n if (!v) return { ok: false };\n\n const t = typeof v;\n if (\n t === 'number' ||\n t === 'bigint' ||\n t === 'symbol' ||\n t === 'function'\n ) {\n return { ok: false };\n }\n if (t === 'string') return { ok: true, kind: 'string' };\n if (t === 'object') return { ok: true, kind: 'object' };\n\n return { ok: false };\n };\n\n const rebuildObject = async (value: any): Promise<any> => {\n const proto = Object.getPrototypeOf(value);\n const out = Object.create(proto);\n\n const keys = Reflect.ownKeys(value);\n\n await Promise.all(\n keys.map(async (key) => {\n const desc = Object.getOwnPropertyDescriptor(value, key as any);\n if (!desc) return;\n\n if ('value' in desc) {\n const newVal = await walk(desc.value);\n Object.defineProperty(out, key, { ...desc, value: newVal });\n return;\n }\n\n Object.defineProperty(out, key, desc);\n\n let current: any = undefined;\n if (typeof desc.get === 'function') {\n try {\n current = desc.get.call(value);\n } catch {}\n }\n if (current === undefined) return;\n\n try {\n const newVal = await walk(current);\n if (typeof desc.set === 'function') {\n try {\n desc.set.call(out, newVal);\n } catch {}\n }\n } catch {}\n }),\n );\n\n return out;\n };\n\n const walk = async (value: any): Promise<any> => {\n const check = checkValue(value);\n\n if (!check.ok) return value;\n\n if (check.kind === 'string') {\n return cb(value);\n }\n\n if (value instanceof Promise) {\n return value.then((resolved) => walk(resolved));\n }\n\n if (typeof value === 'object') {\n if (!Array.isArray(value) && isSpecialObject(value)) return value;\n\n if (visited.has(value)) return value;\n visited.add(value);\n\n if (Array.isArray(value)) {\n const out = await Promise.all(value.map((v) => walk(v)));\n return out as any;\n }\n\n return rebuildObject(value);\n }\n\n return value;\n };\n\n return walk(obj);\n};\n", "import { MiddlewareDispatcher } from '../middleware-dispatcher';\nimport { parseI18n } from '../utility/parse-i18n';\nimport { I18nMiddleware, I18nOptions } from './types';\nimport { patchStringInObject } from '../patch-string-in-object';\n\nexport class I18n<Ex extends any[] = []> {\n constructor(private options: I18nOptions) {}\n\n locales = new Set(this.options.locales);\n defaultLocale = this.options.defaultLocale ?? this.options.locales[0];\n\n private mw = new MiddlewareDispatcher<\n (locale: string, text: string, ...ex: Ex) => string | undefined\n >({\n acceptResult: (res) => res != null,\n errorHandler: (e) => {\n throw e;\n },\n });\n\n private shadowMiddlewares: I18nMiddleware<Ex>[] = [];\n\n middleware(mw: I18nMiddleware<Ex>, prior = false) {\n this.mw.middleware((locale, text, ...args) => {\n const ex = args.slice(0, -1) as Ex;\n const next = args[args.length - 1] as () => Promise<string | undefined>;\n return mw(locale, text, next, ...ex);\n }, prior);\n if (prior) {\n this.shadowMiddlewares.unshift(mw);\n } else {\n this.shadowMiddlewares.push(mw);\n }\n return this;\n }\n\n removeMiddleware(mw: I18nMiddleware<Ex>) {\n const idx = this.shadowMiddlewares.indexOf(mw);\n if (idx >= 0) {\n this.shadowMiddlewares.splice(idx, 1);\n this.mw.middlewares.splice(idx, 1);\n }\n return this;\n }\n\n getExactLocale(locale: string) {\n const input = (locale ?? '').trim();\n if (!input) return this.defaultLocale;\n\n if (this.locales.has(input)) return input;\n\n // \u5C0F\u5199\u5316\u6BD4\u8F83\uFF0C\u4FDD\u7559\u539F\u5927\u5C0F\u5199\n const entries = Array.from(this.locales).map((l) => ({\n orig: l,\n lower: l.toLowerCase(),\n }));\n const lower = input.toLowerCase();\n\n // 1) \u7CBE\u786E\u5339\u914D\uFF08\u5927\u5C0F\u5199\u4E0D\u654F\u611F\uFF09\n const exact = entries.find((e) => e.lower === lower);\n if (exact) return exact.orig;\n\n // 2) \u6309 '-' \u62C6\u5206\uFF0C\u4F9D\u6B21\u5C1D\u8BD5\u53BB\u6389\u6700\u53F3\u8FB9\u7684\u6BB5\n // zh-Hans-CN \u2192 zh-Hans \u2192 zh\n const parts = lower.split('-');\n while (parts.length > 1) {\n parts.pop();\n const candidate = parts.join('-');\n const hit = entries.find((e) => e.lower === candidate);\n if (hit) return hit.orig;\n }\n\n // 3) \u515C\u5E95\n return this.defaultLocale;\n }\n\n private buildFallbackChain(locale: string): string[] {\n const best = this.getExactLocale(locale); // \u4F60\u7684\u201C\u6700\u957F\u5339\u914D\u201D\u51FD\u6570\n // \u62C6\u5206 zh-Hans-CN -> ['zh-Hans-CN','zh-Hans','zh']\n const parts: string[] = [];\n const segs = best.split('-');\n for (let i = segs.length; i > 1; i--)\n parts.push(segs.slice(0, i).join('-'));\n parts.push(segs[0]); // 'zh'\n // \u9644\u52A0\u9ED8\u8BA4\u8BED\u8A00\n if (!parts.includes(this.defaultLocale)) parts.push(this.defaultLocale);\n // \u53BB\u91CD\n return Array.from(new Set(parts)).filter((p) => this.locales.has(p));\n }\n\n private async applyMiddlewares(\n locale: string,\n text: string,\n ...ex: Ex\n ): Promise<string | undefined> {\n const tryLocale = (locale: string) => this.mw.dispatch(locale, text, ...ex);\n\n for (const loc of this.buildFallbackChain(locale)) {\n const result = await tryLocale(loc);\n if (result != null) {\n return result;\n }\n }\n return undefined;\n }\n\n async translateString(\n locale: string,\n text: string,\n ...ex: Ex\n ): Promise<string> {\n if (!text) return text;\n\n locale = this.getExactLocale(locale);\n\n const pieces = parseI18n(text);\n if (!pieces.some((p) => p.type === 'ph')) {\n return pieces\n .map((p) => (p.type === 'raw' ? p.value : `#{${p.rawInner}}`))\n .join('');\n }\n\n const promises: Array<Promise<string | undefined | null>> = [];\n\n for (const p of pieces) {\n if (p.type === 'ph') {\n promises.push(this.applyMiddlewares(locale, p.key, ...ex));\n }\n }\n\n const results = await Promise.all(promises);\n\n let out = '';\n let k = 0;\n for (const p of pieces) {\n if (p.type === 'raw') {\n out += p.value;\n } else {\n const r = results[k++];\n out += r == null ? `#{${p.rawInner}}` : r;\n }\n }\n return out;\n }\n\n async translate<T>(locale: string, obj: T, ...ex: Ex): Promise<T> {\n return patchStringInObject(obj, (s) =>\n this.translateString(locale, s, ...ex),\n );\n }\n}\n", "import { I18nMiddleware } from '../types';\nimport { Awaitable } from '../../types';\n\nexport type I18nDictionary = Record<string, Record<string, string>>;\n\ntype MatchType = 'exact' | 'hierarchy' | 'startsWith';\n\nexport const I18nLookupMiddleware = <Ex extends any[] = []>(\n dict:\n | I18nDictionary\n | ((locale: string, key: string, ...ex: Ex) => Awaitable<I18nDictionary>),\n options?: { matchType?: MatchType },\n): I18nMiddleware<Ex> => {\n const matchType: MatchType = options?.matchType ?? 'exact';\n const dictFactory = typeof dict === 'function' ? dict : () => dict;\n\n // \u57FA\u4E8E locales \u5217\u8868\u505A\u201C\u7CBE\u786E\u2192\u5C42\u7EA7\u56DE\u9000(zh-Hans-CN\u2192zh-Hans\u2192zh)\u201D\u7684\u6700\u957F\u5339\u914D\n const pickBestByHierarchy = (\n input: string,\n locales: string[],\n ): string | undefined => {\n if (!input) return undefined;\n const entries = locales.map((l) => ({ orig: l, lower: l.toLowerCase() }));\n const lower = input.toLowerCase();\n\n // \u7CBE\u786E\u5339\u914D\uFF08\u5927\u5C0F\u5199\u4E0D\u654F\u611F\uFF09\n const exact = entries.find((e) => e.lower === lower);\n if (exact) return exact.orig;\n\n // \u9010\u7EA7\u56DE\u9000\uFF1Azh-Hans-CN -> zh-Hans -> zh\n const parts = lower.split('-');\n while (parts.length > 1) {\n parts.pop();\n const candidate = parts.join('-');\n const hit = entries.find((e) => e.lower === candidate);\n if (hit) return hit.orig;\n }\n return undefined;\n };\n\n return async (locale, key, next, ...ex) => {\n const dictResolved = await dictFactory(locale, key, ...ex);\n\n let dictionary = dictResolved[locale];\n\n if (!dictionary) {\n if (matchType === 'hierarchy') {\n const best = pickBestByHierarchy(locale, Object.keys(dictResolved));\n if (best) dictionary = dictResolved[best];\n } else if (matchType === 'startsWith') {\n const keys = Object.keys(dictResolved).filter((k) =>\n locale.startsWith(k),\n );\n if (keys.length) {\n const best = keys.reduce((a, b) => (b.length > a.length ? b : a));\n dictionary = dictResolved[best];\n }\n }\n }\n\n // \u547D\u4E2D\u5224\u65AD\uFF1A\u5141\u8BB8\u7A7A\u5B57\u7B26\u4E32 ''\uFF1B\u4EC5 null/undefined \u89C6\u4E3A\u672A\u547D\u4E2D\n if (dictionary && Object.prototype.hasOwnProperty.call(dictionary, key)) {\n const val = dictionary[key];\n if (val != null) {\n return val;\n }\n }\n\n return next();\n };\n};\n\nexport const createI18nLookupMiddleware = <Ex extends any[]>() =>\n I18nLookupMiddleware as typeof I18nLookupMiddleware<Ex>;\n", "export const observeDiff = <T>(\n obj: T,\n cb: <K extends keyof T>(change: {\n type: 'add' | 'update' | 'delete';\n key: K;\n oldValue: T[K] | undefined;\n newValue: T[K] | undefined;\n }) => any,\n): T => {\n return new Proxy(obj as any, {\n set(target, key: string | symbol, value) {\n const oldValue = target[key];\n const type = Object.prototype.hasOwnProperty.call(target, key)\n ? 'update'\n : 'add';\n target[key] = value;\n cb({ type, key: key as any, oldValue, newValue: value });\n return true;\n },\n deleteProperty(target, key: string | symbol) {\n if (Object.prototype.hasOwnProperty.call(target, key)) {\n const oldValue = target[key];\n delete target[key];\n cb({ type: 'delete', key: key as any, oldValue, newValue: undefined });\n return true;\n }\n return false;\n },\n });\n};\n", "export const Memorize = () => {\n const cache = new WeakMap<object, any>();\n\n const isPromiseLike = (v: any): v is Promise<unknown> =>\n v != null && typeof v.then === 'function' && typeof v.catch === 'function';\n\n const getOrSet = (instance: object, compute: () => any) => {\n if (cache.has(instance)) return cache.get(instance);\n\n const result = compute();\n\n if (isPromiseLike(result)) {\n const wrapped = result.catch((err) => {\n cache.delete(instance); // \u4E0B\u6B21\u8FD8\u80FD\u91CD\u65B0\u7B97\n throw err;\n });\n cache.set(instance, wrapped);\n return wrapped;\n }\n\n cache.set(instance, result);\n return result;\n };\n\n return function (\n _target: any,\n _propertyKey: string,\n descriptor: PropertyDescriptor,\n ) {\n // getter\n if (typeof descriptor.get === 'function') {\n const originalGetter = descriptor.get;\n descriptor.get = function () {\n return getOrSet(this, () => originalGetter.call(this));\n };\n return;\n }\n\n // method\n if (typeof descriptor.value === 'function') {\n const originalMethod = descriptor.value;\n descriptor.value = function (...args: any[]) {\n return getOrSet(this, () => originalMethod.apply(this, args));\n };\n return;\n }\n };\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
3
|
+
"sources": ["../src/workflow.ts", "../src/dual-object.ts", "../src/workflow-dispatcher.ts", "../src/round-robin.ts", "../src/abortable.ts", "../src/middleware-dispatcher.ts", "../src/utility/parse-i18n.ts", "../src/patch-string-in-object.ts", "../src/i18n/i18n.ts", "../src/i18n/middlewares/lookup.ts", "../src/observe-diff.ts", "../src/memorize.ts", "../src/may-be-array.ts"],
|
|
4
|
+
"sourcesContent": ["// ========== \u7C7B\u578B\u5DE5\u5177 ==========\ntype AwaitedLike<T> = T extends Promise<infer R> ? R : T;\ntype AnyFn = (...args: any[]) => any;\n\ntype Chain<T> = Promise<AwaitedLike<T>> &\n (T extends AnyFn\n ? (...a: Parameters<T>) => Chain<AwaitedLike<ReturnType<T>>>\n : {}) & {\n [K in keyof T]: T[K] extends (...a: infer A) => infer R\n ? (...a: A) => Chain<AwaitedLike<R>>\n : Chain<AwaitedLike<T[K]>>;\n };\n\n// ========== \u6838\u5FC3\uFF1A\u4E0D\u53EF\u53D8\u8282\u70B9 ==========\nclass Node {\n private memo?: Promise<any>;\n constructor(\n private readonly source: any, // \u53EA\u6709\u6839\u8282\u70B9\u6709\u610F\u4E49\uFF1B\u5B50\u8282\u70B9\u53EF\u590D\u7528\u6839\u7684 source\n private readonly parent: Node | null, // \u524D\u7F00\n private readonly op: ((x: any) => any) | null, // \u4ECE parent \u7ED3\u679C\u5230\u672C\u8282\u70B9\u7ED3\u679C\u7684\u53D8\u6362\n ) {}\n\n run(): Promise<any> {\n if (!this.memo) {\n this.memo = (async () => {\n if (!this.parent) {\n // \u6839\uFF1A\u628A source \u89E3\u4E00\u6B21\u5373\u53EF\n return await this.source;\n }\n // \u5148\u62FF\u5230\u7236\u8282\u70B9\u7ED3\u679C\uFF08\u4F1A\u8BB0\u5FC6\u5316\uFF09\n const base = await this.parent.run();\n // \u5E94\u7528\u672C\u8282\u70B9\u7684\u53D8\u6362\uFF08\u5141\u8BB8\u8FD4\u56DE\u540C\u6B65\u6216\u5F02\u6B65\uFF09\n return this.op ? this.op(base) : base;\n })();\n }\n return this.memo;\n }\n\n // \u5DE5\u5382\uFF1A\u884D\u751F\u5B50\u8282\u70B9\uFF08\u5206\u53C9 = \u590D\u7528\u540C\u4E00\u4E2A parent\uFF09\n child(op: (x: any) => any): Node {\n return new Node(this.source, this, op);\n }\n\n // \u62FF\u5230\u201C\u76F8\u540C\u8282\u70B9\u201D\u7684\u53E5\u67C4\uFF08\u663E\u5F0F fork\uFF09\n fork(): Node {\n return new Node(this.source, this.parent, this.op);\n }\n}\n\nexport const WF_NODE = Symbol('@@workflow/node');\n\nfunction isWorkflowChain(x: any): x is Chain<any> {\n return !!x && typeof x === 'function' && x[WF_NODE] instanceof Node;\n}\n\n// ========== \u5BF9\u5916 API\uFF1Aworkflow ==========\nexport function workflow<T>(source: T | Promise<T>): Chain<T> {\n if (isWorkflowChain(source)) {\n return source as unknown as Chain<T>;\n }\n const root = new Node(source, null, null);\n return makeProxy<T>(root) as any;\n}\n\n// ========== \u4EE3\u7406\u5C42\uFF1A\u628A Node \u66B4\u9732\u6210\u94FE\u5F0F API ==========\nfunction makeProxy<T>(node: Node): Chain<T> {\n const runOnce = () => node.run(); // \u8BB0\u5FC6\u5316\u5728 Node \u5185\u90E8\n\n const rootHandler: ProxyHandler<any> = {\n get(_t, prop) {\n if (prop === WF_NODE) return node;\n // \u7ED3\u675F\u4FE1\u53F7\uFF1A\u6240\u6709 then/catch/finally \u590D\u7528\u540C\u4E00\u4E2A Promise\n if (prop === 'then')\n return (res: any, rej?: any) => runOnce().then(res, rej);\n if (prop === 'catch') return (rej: any) => runOnce().catch(rej);\n if (prop === 'finally') return (fin: any) => runOnce().finally(fin);\n\n // \u8BBF\u95EE\u4E00\u4E2A\u5C5E\u6027\uFF1A\u751F\u6210\u4E00\u4E2A\u201CGet\u201D\u5B50\u8282\u70B9\uFF0C\u4F46\u4E0D\u6267\u884C\n return linkProxy(prop);\n },\n // \u652F\u6301\u5BF9\u201C\u5F53\u524D\u503C\u201D\u76F4\u63A5\u4E8C\u6B21\u8C03\u7528\uFF1A foo()()\n apply(_t, _this, argArray) {\n const child = node.child((cur: any) => {\n if (typeof cur !== 'function')\n throw new TypeError('Current value is not callable');\n return cur(...argArray);\n });\n return makeProxy<any>(child);\n },\n };\n\n const linkProxy = (prop: PropertyKey) =>\n new Proxy(function () {}, {\n // \u628A \u201C.foo(\u2026args)\u201D \u8BB0\u5F55\u4E3A Call\n apply(_t, _this, argArray) {\n const child = node.child((cur: any) => {\n const fn = (cur as any)[prop];\n if (typeof fn !== 'function') {\n throw new TypeError(`${String(prop)} is not a function`);\n }\n return fn.apply(cur, argArray);\n });\n return makeProxy<any>(child);\n },\n // \u628A \u201C.bar\u201D \u8BB0\u5F55\u4E3A Get\uFF1B\u7EE7\u7EED\u6DF1\u5165\u65F6\u5728\u8FD9\u4E2A Get \u7684\u7ED3\u679C\u4E0A\u518D\u5904\u7406\n get(_t, next) {\n if (next === WF_NODE) return node;\n if (next === 'then')\n return (r: any, j?: any) =>\n node\n .child((cur: any) => (cur as any)[prop])\n .run()\n .then(r, j);\n if (next === 'catch')\n return (rej: any) =>\n node\n .child((cur: any) => (cur as any)[prop])\n .run()\n .catch(rej);\n if (next === 'finally')\n return (fin: any) =>\n node\n .child((cur: any) => (cur as any)[prop])\n .run()\n .finally(fin);\n\n const child = node.child((cur: any) => (cur as any)[prop]);\n return (makeProxy as any)(child)[next];\n },\n });\n\n return new Proxy(function () {}, rootHandler) as any;\n}\n", "// dual-unified.ts\nexport type Dual<T> = T & PromiseLike<T>;\n\ntype ThenKey = 'then' | 'catch' | 'finally';\nconst isThenKey = (k: PropertyKey): k is ThenKey =>\n k === 'then' || k === 'catch' || k === 'finally';\n\ntype State = 'undecided' | 'pending' | 'fulfilled' | 'rejected';\n\n/** \u4EC5\u5141\u8BB8\u586B\u5165 \u201C\u8FD4\u56DE Promise \u7684\u65B9\u6CD5\u540D\u201D */\nexport type AsyncMethodKeys<T> = {\n [K in keyof T]-?: T[K] extends (...args: any[]) => Promise<any> ? K : never;\n}[keyof T];\n\nexport interface DualizeOptions<T> {\n /** \u8FD9\u4E9B\u65B9\u6CD5\u5728 undecided/pending \u65F6\u4F1A\u8FD4\u56DE\u4E00\u4E2A\u5EF6\u8FDF\u6267\u884C\u51FD\u6570\uFF0C\u7B49\u5F85\u5BF9\u8C61 Promise \u5B8C\u6210\u540E\u518D\u8C03\u7528 */\n asyncMethods?: readonly AsyncMethodKeys<T>[];\n}\n\nexport function dualizeAny<T>(\n sync: () => T, // \u540C\u6B65\u6784\u9020\uFF1B\u82E5\u629B\u9519\u5219\u89C6\u4E3A rejected\n asyncFn: () => Promise<T>, // \u5F02\u6B65\u6784\u9020\n options?: DualizeOptions<T>,\n): Dual<T> {\n let state: State = 'undecided';\n\n let value!: T; // fulfilled \u65F6\u7684\u503C\uFF08\u542B\u6765\u81EA sync \u6216 async\uFF09\n let reason: any; // rejected \u7684\u9519\u8BEF\n let p!: Promise<T>; // \u7F13\u5B58 Promise\uFF08resolved/rejected/\u8FDB\u884C\u4E2D\uFF09\n\n const asyncMethodSet = new Set<PropertyKey>(\n (options?.asyncMethods ?? []) as readonly PropertyKey[],\n );\n\n const startAsync = () => {\n if (!p || state === 'undecided') {\n state = 'pending';\n p = Promise.resolve()\n .then(asyncFn)\n .then(\n (v) => {\n value = v;\n state = 'fulfilled';\n return v;\n },\n (e) => {\n reason = e;\n state = 'rejected';\n throw e;\n },\n );\n }\n return p;\n };\n\n const ensureSync = () => {\n if (state === 'undecided') {\n try {\n value = sync();\n state = 'fulfilled';\n } catch (e) {\n reason = e;\n state = 'rejected';\n }\n }\n };\n\n /** \u5728\u201C\u5BF9\u8C61\u53EF\u7528\u201D\u540E\u8C03\u7528\u67D0\u4E2A\u5F02\u6B65\u65B9\u6CD5\uFF08\u7531 asyncMethods \u58F0\u660E\uFF09 */\n const makeDeferredAsyncMethod =\n (prop: PropertyKey) =>\n (...args: any[]) =>\n startAsync().then((obj) => {\n const fn = (obj as any)[prop];\n return fn.apply(obj, args);\n });\n\n // \u4ECE\u67D0\u4E2A\u503C\u4E0A\u53D6\u5C5E\u6027\uFF08\u539F\u59CB\u503C\u4F1A\u88C5\u7BB1\uFF09\uFF0C\u5E76\u7ED1\u5B9A this\n const getFrom = (v: unknown, prop: PropertyKey) => {\n if (prop === Symbol.toPrimitive) {\n return (hint: 'default' | 'number' | 'string') => {\n const x: any = v;\n if (hint === 'number') return Number(x);\n if (hint === 'string') return String(x);\n if (typeof x === 'string') return x;\n const n = Number(x);\n return Number.isNaN(n) ? String(x) : n;\n };\n }\n if (prop === 'valueOf') return () => v as any;\n if (prop === 'toString') return () => String(v);\n\n const boxed: any =\n v !== null && (typeof v === 'object' || typeof v === 'function')\n ? v\n : Object(v as any);\n const out = boxed[prop];\n return typeof out === 'function' ? out.bind(boxed) : out;\n };\n\n const proxy = new Proxy(Object.create(null) as any, {\n get(_t, prop) {\n // then/catch/finally\uFF1A\u8D70 Promise \u901A\u9053\n if (isThenKey(prop)) {\n if (state === 'undecided') {\n startAsync();\n } else if (state === 'fulfilled') {\n // \u82E5\u5DF2 fulfilled\uFF08\u6765\u81EA sync \u6216 async\uFF09\uFF0C\u8865\u4E00\u4E2A\u5DF2\u5B8C\u6210\u7684 Promise\n p ||= Promise.resolve(value);\n } else if (state === 'rejected') {\n p ||= Promise.reject(reason);\n } else {\n // pending\uFF1A\u5DF2\u6709 p\n startAsync();\n }\n const anyP: any = p;\n const m = anyP[prop];\n return typeof m === 'function' ? m.bind(anyP) : m;\n }\n\n // \u58F0\u660E\u4E3A\u5F02\u6B65\u65B9\u6CD5\u7684\u952E\uFF1A\u5728 undecided/pending \u65F6\u8FD4\u56DE\u201C\u5EF6\u8FDF\u51FD\u6570\u201D\n if (asyncMethodSet.has(prop)) {\n if (state === 'undecided' || state === 'pending') {\n startAsync();\n return makeDeferredAsyncMethod(prop);\n }\n if (state === 'fulfilled') {\n return getFrom(value, prop); // \u540C\u6B65\u53EF\u76F4\u63A5\u53D6\u5230\u65B9\u6CD5\uFF08\u5176\u672C\u8EAB\u8FD4\u56DE Promise\uFF09\n }\n if (state === 'rejected') {\n // \u8BBF\u95EE\u5373\u629B\uFF1B\u4E5F\u53EF\u4EE5\u9009\u62E9\u8FD4\u56DE () => Promise.reject(reason)\n throw reason;\n }\n }\n\n // \u5176\u5B83\u5C5E\u6027\u8BBF\u95EE\uFF1A\u9075\u5FAA\u72B6\u6001\u673A\n switch (state) {\n case 'undecided': {\n ensureSync();\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n if (state === 'fulfilled') return getFrom(value, prop);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n if (state === 'rejected') throw reason;\n // \u7406\u8BBA\u4E0A\u4E0D\u4F1A\u5230\u8FD9\u91CC\n throw new TypeError('Invalid state transition');\n }\n case 'pending': {\n // \u975E asyncMethods \u7684\u5C5E\u6027\u5728 pending \u65F6\u4E0D\u53EF\u540C\u6B65\u8BFB\u53D6\n throw new TypeError('Value is not ready yet. Please await it first.');\n }\n case 'fulfilled': {\n return getFrom(value, prop);\n }\n case 'rejected': {\n throw reason;\n }\n }\n },\n\n has(_t, key) {\n if (state === 'undecided') {\n ensureSync();\n }\n if (state === 'fulfilled') return key in Object(value as any);\n return false; // pending/rejected\uFF1A\u4FDD\u5B88\u5904\u7406\n },\n\n ownKeys() {\n if (state === 'undecided') ensureSync();\n if (state === 'fulfilled') return Reflect.ownKeys(Object(value as any));\n return [];\n },\n\n getOwnPropertyDescriptor(_t, key) {\n if (state === 'undecided') ensureSync();\n if (state === 'fulfilled')\n return Object.getOwnPropertyDescriptor(Object(value as any), key);\n return undefined;\n },\n });\n\n return proxy as Dual<T>;\n}\n", "export interface DispatcherOptions {\n /** Max attempts per task. Default 3. */\n maxAttempts?: number;\n /** Backoff base in ms. backoff = base * 2^failCount. Default 1000. */\n backoffBaseMs?: number;\n}\n\n// Internal task record\ntype Task<F extends (...args: any[]) => Promise<any>> = {\n args: Parameters<F>;\n resolve: (v: Awaited<ReturnType<F>>) => void;\n reject: (e: any) => void;\n attempts: number;\n lastError?: any;\n triedWorkers: Set<number>; // for global dispatch\n specificWorkerIndex?: number; // for dispatchSpecific only\n};\n\ntype WorkerState = {\n running: boolean;\n failCount: number;\n nextAvailableAt: number;\n totalRuns: number;\n};\n\ntype RemovalWaiter = () => void;\n\ntype ActiveSlot<F extends (...args: any[]) => Promise<any>> = {\n kind: 'active';\n fn: F;\n state: WorkerState;\n queue: Task<F>[];\n removalWaiters: RemovalWaiter[];\n removed?: boolean; // marker when removed while running; retained for completion callback\n};\n\ntype PendingSlot<F extends (...args: any[]) => Promise<any>> = {\n kind: 'pending';\n promise: Promise<F>;\n queue: Task<F>[];\n removalWaiters: RemovalWaiter[];\n error?: any;\n removed?: boolean; // if removed before resolved\n};\n\ntype RejectedSlot<F extends (...args: any[]) => Promise<any>> = {\n kind: 'rejected';\n error: any;\n queue: Task<F>[];\n removalWaiters: RemovalWaiter[];\n removed?: boolean;\n};\n\ntype Slot<F extends (...args: any[]) => Promise<any>> =\n | ActiveSlot<F>\n | PendingSlot<F>\n | RejectedSlot<F>;\n\nexport type WorkerSnapshot<F extends (...args: any[]) => Promise<any>> =\n | {\n index: number;\n status: 'active';\n fn: F;\n running: boolean;\n failCount: number;\n totalRuns: number;\n blockedMs: number;\n specificQueue: number;\n }\n | {\n index: number;\n status: 'pending';\n promise: Promise<F>;\n specificQueue: number;\n }\n | {\n index: number;\n status: 'rejected';\n error: string;\n specificQueue: number;\n };\n\nexport class WorkflowDispatcher<F extends (...args: any[]) => Promise<any>> {\n private readonly maxAttempts: number;\n private readonly backoffBaseMs: number;\n\n private readonly slots: Slot<F>[] = [];\n private readonly globalQueue: Task<F>[] = [];\n\n private pendingInits = 0;\n private everActivated = false;\n private drainScheduled = false;\n\n constructor(\n workersOrPromises: Array<F | Promise<F>>,\n options: DispatcherOptions = {},\n ) {\n // if (!workersOrPromises?.length) throw new Error('workers cannot be empty');\n\n this.maxAttempts = options.maxAttempts ?? 3;\n this.backoffBaseMs = options.backoffBaseMs ?? 1000;\n\n for (let i = 0; i < workersOrPromises.length; i++) {\n const w = workersOrPromises[i];\n if (typeof w === 'function') {\n const slot: ActiveSlot<F> = {\n kind: 'active',\n fn: w,\n state: {\n running: false,\n failCount: 0,\n nextAvailableAt: 0,\n totalRuns: 0,\n },\n queue: [],\n removalWaiters: [],\n };\n this.slots.push(slot);\n this.everActivated = true;\n } else {\n // Create a stable slot object and mutate it in-place on resolve/reject.\n this.pendingInits++;\n const slot: PendingSlot<F> = {\n kind: 'pending',\n promise: Promise.resolve(w),\n queue: [],\n removalWaiters: [],\n };\n this.slots.push(slot);\n\n slot.promise\n .then((fn) => {\n if (slot.removed) return; // was removed; ignore resolution\n // mutate in-place to active\n (slot as any).kind = 'active';\n (slot as any).fn = fn;\n (slot as any).state = {\n running: false,\n failCount: 0,\n nextAvailableAt: 0,\n totalRuns: 0,\n };\n this.everActivated = true;\n // keep queue & removalWaiters arrays as-is\n })\n .catch((err) => {\n if (slot.removed) return; // was removed; ignore\n // mutate in-place to rejected (keep queue/waiters)\n (slot as any).kind = 'rejected';\n (slot as any).error = err;\n })\n .finally(() => {\n this.pendingInits--;\n this.drain();\n if (this.pendingInits === 0 && !this.hasAnyActive()) {\n const err = new Error(\n 'No workers available (all failed to initialize).',\n );\n setTimeout(() => this.rejectAllQueued(err), 0);\n }\n });\n }\n }\n\n if (this.everActivated) this.drain();\n }\n\n /** Dispatch: choose eligible active with least totalRuns; retry across workers on failure. */\n dispatch(...args: Parameters<F>): Promise<Awaited<ReturnType<F>>> {\n return new Promise((resolve, reject) => {\n const task: Task<F> = {\n args,\n resolve,\n reject,\n attempts: 0,\n triedWorkers: new Set(),\n };\n this.globalQueue.push(task);\n this.drain();\n });\n }\n\n /** Dispatch to a specific worker (ignore backoff), wait until it is free; retry on the same worker. */\n dispatchSpecific(\n index: number,\n ...args: Parameters<F>\n ): Promise<Awaited<ReturnType<F>>> {\n if (index < 0 || index >= this.slots.length) {\n return Promise.reject(new Error(`worker index out of range: ${index}`));\n }\n return new Promise((resolve, reject) => {\n const task: Task<F> = {\n args,\n resolve,\n reject,\n attempts: 0,\n triedWorkers: new Set(),\n specificWorkerIndex: index,\n };\n const slot = this.slots[index];\n slot.queue.push(task);\n this.drain();\n });\n }\n\n /** Replace a worker at index with a new active worker function. */\n public replaceWorker(index: number, fn: F): void {\n if (index < 0 || index >= this.slots.length) {\n throw new Error(`worker index out of range: ${index}`);\n }\n const prevHadActive = this.hasAnyActive();\n const slot = this.slots[index];\n\n // Preserve queue & removal waiters; reset failure/backoff; keep totalRuns to avoid skew.\n const preservedQueue = slot.queue;\n const preservedWaiters = slot.removalWaiters ?? [];\n\n const next: ActiveSlot<F> = {\n kind: 'active',\n fn,\n state: {\n running: false,\n failCount: 0,\n nextAvailableAt: 0,\n totalRuns: (slot as any).state?.totalRuns ?? 0,\n },\n queue: preservedQueue,\n removalWaiters: preservedWaiters,\n };\n\n // Mutate in-place if possible (keeps references stable), else replace array entry.\n Object.assign(slot as any, next);\n (slot as any).kind = 'active';\n (slot as any).fn = fn;\n (slot as any).state.failCount = 0;\n (slot as any).state.nextAvailableAt = 0;\n\n this.everActivated = true;\n if (!prevHadActive && this.hasAnyActive()) {\n this.drain();\n } else {\n this.drain();\n }\n }\n\n /** Add a new active worker at the tail; return its index. */\n public addWorker(fn: F): number {\n const slot: ActiveSlot<F> = {\n kind: 'active',\n fn,\n state: { running: false, failCount: 0, nextAvailableAt: 0, totalRuns: 0 },\n queue: [],\n removalWaiters: [],\n };\n const index = this.slots.length;\n this.slots.push(slot);\n this.everActivated = true;\n this.drain();\n return index;\n }\n\n /**\n * Remove a worker completely (splice). It becomes unavailable immediately.\n * Returns a Promise that resolves when its last running task (if any) finishes.\n */\n public removeWorker(index: number): Promise<void> {\n if (index < 0 || index >= this.slots.length) {\n return Promise.reject(new Error(`worker index out of range: ${index}`));\n }\n\n const slot = this.slots[index];\n\n // Reject all queued specific tasks on this worker (macro-task to avoid unhandled)\n const queued = slot.queue.splice(0);\n const removalErr = new Error(`Worker[${index}] removed`);\n setTimeout(() => {\n for (const t of queued) t.reject(removalErr);\n }, 0);\n\n // Decide completion promise:\n let completion: Promise<void>;\n const isRunning = slot.kind === 'active' && slot.state.running;\n if (!isRunning) {\n completion = Promise.resolve();\n } else {\n completion = new Promise<void>((resolve) => {\n slot.removalWaiters.push(resolve);\n });\n }\n\n // Mark as removed (so any pending init resolution is ignored)\n (slot as any).removed = true;\n\n // Physically remove the slot\n this.slots.splice(index, 1);\n\n // Re-map indices in all remaining tasks:\n // 1) Fix specificWorkerIndex in every remaining slot.queue\n for (let i = 0; i < this.slots.length; i++) {\n const s = this.slots[i];\n for (const t of s.queue) {\n if (typeof t.specificWorkerIndex === 'number') {\n if (t.specificWorkerIndex === index) {\n // This should not happen because we just removed and flushed its queue,\n // but guard anyway.\n t.reject(new Error(`Worker[${index}] no longer exists`));\n } else if (t.specificWorkerIndex > index) {\n t.specificWorkerIndex -= 1;\n }\n }\n }\n }\n // 2) Fix triedWorkers sets in globalQueue\n for (const t of this.globalQueue) {\n if (t.triedWorkers.has(index)) t.triedWorkers.delete(index);\n const next = new Set<number>();\n for (const w of t.triedWorkers) {\n next.add(w > index ? w - 1 : w);\n }\n t.triedWorkers = next;\n }\n\n // Trigger scheduling for the remaining system\n this.drain();\n\n return completion;\n }\n\n snapshot(): WorkerSnapshot<F>[] {\n const now = Date.now();\n\n return this.slots.map((slot, i) => {\n switch (slot.kind) {\n case 'active': {\n const s = slot.state;\n return {\n index: i,\n status: 'active' as const,\n fn: slot.fn,\n running: s.running,\n failCount: s.failCount,\n totalRuns: s.totalRuns,\n blockedMs: Math.max(0, s.nextAvailableAt - now),\n specificQueue: slot.queue.length,\n };\n }\n\n case 'pending':\n return {\n index: i,\n status: 'pending' as const,\n promise: slot.promise,\n specificQueue: slot.queue.length,\n };\n\n case 'rejected':\n return {\n index: i,\n status: 'rejected' as const,\n error: String(slot.error ?? 'unknown error'),\n specificQueue: slot.queue.length,\n };\n }\n });\n }\n\n get pending(): number {\n return this.globalQueue.length;\n }\n\n // ---------------- scheduling ----------------\n\n private drain() {\n if (this.drainScheduled) return;\n this.drainScheduled = true;\n queueMicrotask(() => {\n this.drainScheduled = false;\n this._drainLoop();\n });\n }\n\n private _drainLoop() {\n // If no active workers and still initializing, wait; if all inited and none active, constructor already rejects all.\n if (!this.hasAnyActive()) {\n if (this.pendingInits > 0) return;\n return;\n }\n\n // First: flush rejected workers' specific queues (macro-task rejection)\n for (let i = 0; i < this.slots.length; i++) {\n const slot = this.slots[i];\n if (slot.kind === 'rejected' && slot.queue.length > 0) {\n const q = slot.queue.splice(0);\n const err = new Error(\n `Worker[${i}] failed to initialize: ${String(slot.error ?? 'unknown error')}`,\n );\n setTimeout(() => {\n for (const t of q) t.reject(err);\n }, 0);\n }\n }\n\n let progressed = true;\n while (progressed) {\n progressed = false;\n\n // 1) Run specific queues for active workers (ignore backoff)\n for (let i = 0; i < this.slots.length; i++) {\n const slot = this.slots[i];\n if (slot.kind !== 'active') continue;\n const st = slot.state;\n if (!st.running && slot.queue.length > 0) {\n const task = slot.queue.shift()!;\n this.startTaskOnActiveSlot(i, slot, task, /*fromSpecific*/ true);\n progressed = true;\n }\n }\n\n // 2) Run global queue (choose eligible active with least totalRuns)\n if (this.globalQueue.length > 0) {\n const idx = this.pickBestActiveForGlobal();\n if (idx !== -1) {\n const slot = this.slots[idx] as ActiveSlot<F>;\n const task = this.globalQueue.shift()!;\n this.startTaskOnActiveSlot(idx, slot, task, /*fromSpecific*/ false);\n progressed = true;\n }\n }\n }\n }\n\n private hasAnyActive() {\n return this.slots.some((s) => s.kind === 'active');\n }\n\n private rejectAllQueued(err: any) {\n while (this.globalQueue.length) this.globalQueue.shift()!.reject(err);\n for (const slot of this.slots) {\n while (slot.queue.length) slot.queue.shift()!.reject(err);\n }\n }\n\n private isEligibleActive(i: number, now: number) {\n const slot = this.slots[i] as ActiveSlot<F>;\n const slotGood = (s: ActiveSlot<F>) =>\n s.kind === 'active' && !s.state?.running;\n if (!slotGood(slot)) return false;\n if (now >= slot.state.nextAvailableAt) return true;\n return !this.slots.some((other: ActiveSlot<F>, j) => {\n if (j === i) return false;\n if (!slotGood(other)) return false;\n return now >= other.state.nextAvailableAt;\n });\n }\n\n private pickBestActiveForGlobal(): number {\n const now = Date.now();\n const task = this.globalQueue[0];\n\n // Prefer actives not tried yet\n let best = -1,\n bestRuns = Infinity;\n for (let i = 0; i < this.slots.length; i++) {\n if (!this.isEligibleActive(i, now)) continue;\n if (task?.triedWorkers.has(i)) continue;\n const slot = this.slots[i] as ActiveSlot<F>;\n if (slot.state.totalRuns < bestRuns) {\n bestRuns = slot.state.totalRuns;\n best = i;\n }\n }\n if (best !== -1) return best;\n\n // Allow already-tried actives\n best = -1;\n bestRuns = Infinity;\n for (let i = 0; i < this.slots.length; i++) {\n if (!this.isEligibleActive(i, now)) continue;\n const slot = this.slots[i] as ActiveSlot<F>;\n if (slot.state.totalRuns < bestRuns) {\n bestRuns = slot.state.totalRuns;\n best = i;\n }\n }\n return best;\n }\n\n private startTaskOnActiveSlot(\n index: number,\n slot: ActiveSlot<F>,\n task: Task<F>,\n fromSpecific: boolean,\n ) {\n const st = slot.state;\n st.running = true;\n st.totalRuns += 1;\n\n const finalize = () => {\n st.running = false;\n // If someone is waiting for this worker to finish (removeWorker), resolve them when idle.\n if (\n slot.removalWaiters.length > 0 &&\n !st.running &&\n slot.queue.length === 0\n ) {\n const list = slot.removalWaiters.splice(0);\n for (const w of list) w();\n }\n this.drain();\n };\n\n (async () => {\n try {\n const result = await slot.fn(...task.args);\n st.failCount = Math.max(0, st.failCount - 1);\n task.resolve(result as Awaited<ReturnType<F>>);\n } catch (err) {\n task.lastError = err;\n st.failCount += 1;\n st.nextAvailableAt =\n Date.now() + this.backoffBaseMs * Math.pow(2, st.failCount);\n\n if (fromSpecific) {\n task.attempts += 1;\n if (task.attempts >= this.maxAttempts) {\n task.reject(task.lastError);\n } else {\n // retry on the same worker (ignore backoff)\n slot.queue.push(task);\n }\n } else {\n task.attempts += 1;\n task.triedWorkers.add(index);\n const activeCount = this.slots.filter(\n (s) => s.kind === 'active',\n ).length;\n const allActiveTriedOnce = task.triedWorkers.size >= activeCount;\n const attemptsLimitReached = task.attempts >= this.maxAttempts;\n\n if (allActiveTriedOnce || attemptsLimitReached) {\n task.reject(task.lastError);\n } else {\n this.globalQueue.push(task);\n }\n }\n } finally {\n finalize();\n }\n })();\n }\n}\n", "export class RoundRobin<T> {\n private index = 0;\n\n constructor(public items: T[]) {\n if (items.length === 0) {\n throw new Error('RoundRobin requires at least one item');\n }\n }\n\n next(): T {\n const nextIndex = this.index % this.items.length;\n this.index = (this.index + 1) % this.items.length;\n return this.items[nextIndex];\n }\n}\n", "export class AbortedError extends Error {\n name = 'AbortError';\n constructor(\n msg = 'Operation aborted',\n public cause?: unknown,\n ) {\n super(msg);\n }\n}\n\ntype AnyFunc = (...args: any[]) => any;\nconst isObjectLike = (v: unknown): v is object | AnyFunc =>\n (typeof v === 'object' && v !== null) || typeof v === 'function';\n\nfunction boxPrimitive(v: unknown): object {\n return Object(v as any);\n}\n\nexport interface AbortableOpts {\n /** \u662F\u5426\u628A\u539F\u59CB\u503C\u88C5\u7BB1\u540E\u518D\u4EE3\u7406\uFF08\u4F1A\u6539\u53D8 typeof/=== \u8BED\u4E49\uFF0C\u9ED8\u8BA4 false\uFF09 */\n boxPrimitives?: boolean;\n /** \u4E0D\u9012\u5F52\u4EE3\u7406\u5B50\u5BF9\u8C61\uFF08\u4EC5\u4EE3\u7406\u9876\u5C42\u5BF9\u8C61/\u51FD\u6570\uFF0C\u9ED8\u8BA4 false\uFF09 */\n noRecursive?: boolean;\n}\n\nexport function abortable<T>(\n obj: T,\n signal: AbortSignal,\n opts?: AbortableOpts,\n): T {\n const { boxPrimitives = false, noRecursive = false } = opts ?? {};\n\n const throwIfAborted = () => {\n if (signal.aborted) {\n const r = (signal as any).reason;\n if (r instanceof Error) throw r;\n throw new AbortedError('Operation aborted', r);\n }\n };\n\n throwIfAborted();\n\n const targetToProxy = new WeakMap<object, any>();\n const proxyToTarget = new WeakMap<object, any>();\n\n const wrapNativePromise = <V>(pLike: PromiseLike<V>): Promise<V> => {\n const base = pLike instanceof Promise ? pLike : Promise.resolve(pLike);\n return base.then(\n async (v) => {\n throwIfAborted();\n return proxify(v);\n },\n async (e) => {\n throwIfAborted();\n throw e;\n },\n );\n };\n\n let shortCircuit = false;\n\n const proxify = <V>(value: V): V => {\n if (noRecursive) {\n if (shortCircuit) {\n return value;\n } else {\n shortCircuit = true;\n }\n }\n\n // Promise\uFF1A\u6309\u201C\u771F Promise + \u4EE3\u7406\u201D\u7684\u65B9\u6848\u5904\u7406\n if (typeof (value as any)?.then === 'function') {\n return wrapNativePromise(value as any) as unknown as V;\n }\n\n // \u539F\u59CB\u503C\n if (!isObjectLike(value)) {\n if (!boxPrimitives) return value;\n return proxify(boxPrimitive(value) as unknown as V);\n }\n\n // \u590D\u7528\n const cached = targetToProxy.get(value as object);\n if (cached) return cached;\n\n const handler: ProxyHandler<any> = {\n get(target, p, receiver) {\n throwIfAborted();\n const out = Reflect.get(target, p, receiver);\n return proxify(out);\n },\n set(target, p, val, receiver) {\n throwIfAborted();\n return Reflect.set(target, p, val, receiver);\n },\n apply(target, thisArg, argArray) {\n throwIfAborted();\n const unwrappedThis =\n (isObjectLike(thisArg) && proxyToTarget.get(thisArg as any)) ||\n thisArg;\n const ret = Reflect.apply(target as AnyFunc, unwrappedThis, argArray);\n return proxify(ret);\n },\n construct(target, argArray, newTarget) {\n throwIfAborted();\n const instance = Reflect.construct(\n target as AnyFunc,\n argArray,\n newTarget,\n );\n return proxify(instance);\n },\n defineProperty(t, p, attrs) {\n throwIfAborted();\n return Reflect.defineProperty(t, p, attrs);\n },\n deleteProperty(t, p) {\n throwIfAborted();\n return Reflect.deleteProperty(t, p);\n },\n getOwnPropertyDescriptor(t, p) {\n throwIfAborted();\n return Reflect.getOwnPropertyDescriptor(t, p);\n },\n getPrototypeOf(t) {\n throwIfAborted();\n return Reflect.getPrototypeOf(t);\n },\n setPrototypeOf(t, proto) {\n throwIfAborted();\n return Reflect.setPrototypeOf(t, proto);\n },\n has(t, p) {\n throwIfAborted();\n return Reflect.has(t, p);\n },\n isExtensible(t) {\n throwIfAborted();\n return Reflect.isExtensible(t);\n },\n ownKeys(t) {\n throwIfAborted();\n return Reflect.ownKeys(t);\n },\n preventExtensions(t) {\n throwIfAborted();\n return Reflect.preventExtensions(t);\n },\n };\n\n const proxy = new Proxy(value as any, handler);\n targetToProxy.set(value as object, proxy);\n proxyToTarget.set(proxy, value);\n return proxy;\n };\n\n return proxify(obj);\n}\n", "import { Awaitable } from './types';\n\ntype AnyFunc = (...args: any[]) => any;\n\ntype MiddlewareValue<F extends AnyFunc> = Awaited<ReturnType<F>>;\ntype MiddlewareResult<F extends AnyFunc> = Promise<MiddlewareValue<F>>;\ntype MiddlewareNext<F extends AnyFunc> = () => MiddlewareResult<F>;\ntype MiddlewareArgs<F extends AnyFunc> = [\n ...args: Parameters<F>,\n next: MiddlewareNext<F>,\n];\ntype MiddlewareReturn<F extends AnyFunc> = Awaitable<MiddlewareValue<F>>;\n\nexport type Middleware<F extends AnyFunc> = (\n ...args: MiddlewareArgs<F>\n) => MiddlewareReturn<F>;\n\nexport type MiddlewareAcceptResult<F extends AnyFunc> = (\n s: MiddlewareValue<F>,\n) => Awaitable<boolean>;\nexport type MiddlewareErrorHandler<F extends AnyFunc> = (\n e: any,\n args: Parameters<F>,\n next: MiddlewareNext<F>,\n) => Awaitable<MiddlewareValue<F>>;\n\nexport interface MiddlewareDispatcherOptions<F extends AnyFunc> {\n acceptResult?: MiddlewareAcceptResult<F>;\n errorHandler?: MiddlewareErrorHandler<F>;\n}\n\nexport class MiddlewareDispatcher<F extends AnyFunc> {\n constructor(private options: MiddlewareDispatcherOptions<F> = {}) {}\n middlewares: Middleware<F>[] = [];\n\n middleware(mw: Middleware<F>, prior = false) {\n if (prior) {\n this.middlewares.unshift(mw);\n } else {\n this.middlewares.push(mw);\n }\n return this;\n }\n\n removeMiddleware(mw: Middleware<F>) {\n const index = this.middlewares.indexOf(mw);\n if (index >= 0) {\n this.middlewares.splice(index, 1);\n }\n return this;\n }\n\n dispatch(...args: Parameters<F>): MiddlewareResult<F> {\n const mws = this.middlewares;\n const acceptResult: MiddlewareAcceptResult<F> =\n this.options.acceptResult || ((res) => res != null);\n const errorHandler: MiddlewareErrorHandler<F> =\n this.options.errorHandler || ((e, args, next) => next());\n const dispatch = async (i: number): MiddlewareResult<F> => {\n if (i >= mws.length) return undefined;\n\n const mw = mws[i];\n let nextCalled = false;\n\n const next = async (): MiddlewareResult<F> => {\n if (nextCalled) {\n return undefined;\n }\n nextCalled = true;\n return dispatch(i + 1);\n };\n\n const runMw = async (cb: () => MiddlewareReturn<F>) => {\n const res = await cb();\n if (!nextCalled && !(await acceptResult(res))) {\n return dispatch(i + 1);\n }\n return res;\n };\n\n try {\n return await runMw(() => mw(...args, next));\n } catch (e) {\n return await runMw(() => errorHandler(e, args, next));\n }\n };\n return dispatch(0);\n }\n}\n", "// \u2014\u2014 \u89E3\u6790\u7ED3\u679C\u7ED3\u6784 \u2014\u2014 //\nexport type I18nPiece =\n | { type: 'raw'; value: string }\n | { type: 'ph'; rawInner: string; key: string };\n\n/**\n * \u6808\u5F0F\u89E3\u6790 #{ ... } \u5360\u4F4D\u3002\u652F\u6301\u5185\u90E8\u6210\u5BF9\u82B1\u62EC\u53F7\uFF0C\u5982 #{ foo {{ bar }} }\u3002\n * - \u672A\u95ED\u5408\u65F6\uFF1A\u628A\u4ECE\u4E0A\u6B21\u4F4D\u7F6E i \u5230\u7ED3\u5C3E\u6574\u4F53\u4F5C\u4E3A raw \u653E\u56DE\uFF08\u907F\u514D\u88AB\u62C6\u6210\u4E24\u6BB5\uFF09\n * - key = trim(rawInner)\n */\nexport const parseI18n = (text: string): I18nPiece[] => {\n const pieces: I18nPiece[] = [];\n if (!text) return pieces;\n\n let i = 0;\n const n = text.length;\n\n while (i < n) {\n const start = text.indexOf('#{', i);\n if (start === -1) {\n // \u6CA1\u6709\u66F4\u591A\u5360\u4F4D\u7B26\n if (i < n) pieces.push({ type: 'raw', value: text.slice(i) });\n break;\n }\n\n // \u5148\u5C1D\u8BD5\u5339\u914D\u8FD9\u4E2A\u5360\u4F4D\u7B26\u662F\u5426\u95ED\u5408\uFF08\u6B64\u65F6\u4E0D\u7ACB\u5373\u63A8\u5165\u524D\u5BFC raw\uFF09\n let j = start + 2; // \u6307\u5411 '#{' \u540E\u7B2C\u4E00\u4E2A\u5B57\u7B26\n let depth = 1;\n while (j < n && depth > 0) {\n const ch = text.charCodeAt(j);\n if (ch === 123 /* '{' */) depth++;\n else if (ch === 125 /* '}' */) depth--;\n j++;\n }\n\n if (depth !== 0) {\n // \u672A\u95ED\u5408\uFF1A\u628A\u4ECE i \u5230\u672B\u5C3E\u6574\u4F53\u5F53\u4F5C raw\uFF08\u5305\u542B\u524D\u5BFC + '#{' \u5C3E\u5DF4\uFF09\n pieces.push({ type: 'raw', value: text.slice(i) });\n break;\n }\n\n // \u5230\u8FD9\u91CC\u8BF4\u660E\u5360\u4F4D\u95ED\u5408\uFF1A\u5148\u63A8\u5165\u524D\u5BFC raw\uFF0C\u518D\u63A8\u5360\u4F4D\u7247\u6BB5\n if (start > i) {\n pieces.push({ type: 'raw', value: text.slice(i, start) });\n }\n\n const rawInner = text.slice(start + 2, j - 1);\n const key = rawInner.trim();\n pieces.push({ type: 'ph', rawInner, key });\n\n i = j; // \u7EE7\u7EED\u5411\u540E\u626B\u63CF\n }\n\n return pieces;\n};\n", "import { Awaitable } from './types';\n\nexport const patchStringInObject = async <T>(\n obj: T,\n cb: (s: string) => Awaitable<string>,\n): Promise<T> => {\n const visited = new WeakSet<object>();\n\n const isSpecialObject = (v: any): boolean => {\n if (v == null || typeof v !== 'object') return false;\n if (\n v instanceof Date ||\n v instanceof RegExp ||\n v instanceof Map ||\n v instanceof Set ||\n v instanceof WeakMap ||\n v instanceof WeakSet ||\n v instanceof ArrayBuffer ||\n v instanceof DataView ||\n ArrayBuffer.isView(v)\n ) {\n return true;\n }\n\n const tag = Object.prototype.toString.call(v);\n switch (tag) {\n case '[object URL]':\n case '[object URLSearchParams]':\n case '[object Error]':\n case '[object Blob]':\n case '[object File]':\n case '[object FormData]':\n return true;\n default:\n return false;\n }\n };\n\n const checkValue = (\n v: any,\n ): { ok: false } | { ok: true; kind: 'string' | 'object' } => {\n if (!v) return { ok: false };\n\n const t = typeof v;\n if (\n t === 'number' ||\n t === 'bigint' ||\n t === 'symbol' ||\n t === 'function'\n ) {\n return { ok: false };\n }\n if (t === 'string') return { ok: true, kind: 'string' };\n if (t === 'object') return { ok: true, kind: 'object' };\n\n return { ok: false };\n };\n\n const rebuildObject = async (value: any): Promise<any> => {\n const proto = Object.getPrototypeOf(value);\n const out = Object.create(proto);\n\n const keys = Reflect.ownKeys(value);\n\n await Promise.all(\n keys.map(async (key) => {\n const desc = Object.getOwnPropertyDescriptor(value, key as any);\n if (!desc) return;\n\n if ('value' in desc) {\n const newVal = await walk(desc.value);\n Object.defineProperty(out, key, { ...desc, value: newVal });\n return;\n }\n\n Object.defineProperty(out, key, desc);\n\n let current: any = undefined;\n if (typeof desc.get === 'function') {\n try {\n current = desc.get.call(value);\n } catch {}\n }\n if (current === undefined) return;\n\n try {\n const newVal = await walk(current);\n if (typeof desc.set === 'function') {\n try {\n desc.set.call(out, newVal);\n } catch {}\n }\n } catch {}\n }),\n );\n\n return out;\n };\n\n const walk = async (value: any): Promise<any> => {\n const check = checkValue(value);\n\n if (!check.ok) return value;\n\n if (check.kind === 'string') {\n return cb(value);\n }\n\n if (value instanceof Promise) {\n return value.then((resolved) => walk(resolved));\n }\n\n if (typeof value === 'object') {\n if (!Array.isArray(value) && isSpecialObject(value)) return value;\n\n if (visited.has(value)) return value;\n visited.add(value);\n\n if (Array.isArray(value)) {\n const out = await Promise.all(value.map((v) => walk(v)));\n return out as any;\n }\n\n return rebuildObject(value);\n }\n\n return value;\n };\n\n return walk(obj);\n};\n", "import { MiddlewareDispatcher } from '../middleware-dispatcher';\nimport { parseI18n } from '../utility/parse-i18n';\nimport { I18nMiddleware, I18nOptions } from './types';\nimport { patchStringInObject } from '../patch-string-in-object';\n\nexport class I18n<Ex extends any[] = []> {\n constructor(private options: I18nOptions) {}\n\n locales = new Set(this.options.locales);\n defaultLocale = this.options.defaultLocale ?? this.options.locales[0];\n\n private mw = new MiddlewareDispatcher<\n (locale: string, text: string, ...ex: Ex) => string | undefined\n >({\n acceptResult: (res) => res != null,\n errorHandler: (e) => {\n throw e;\n },\n });\n\n private shadowMiddlewares: I18nMiddleware<Ex>[] = [];\n\n middleware(mw: I18nMiddleware<Ex>, prior = false) {\n this.mw.middleware((locale, text, ...args) => {\n const ex = args.slice(0, -1) as Ex;\n const next = args[args.length - 1] as () => Promise<string | undefined>;\n return mw(locale, text, next, ...ex);\n }, prior);\n if (prior) {\n this.shadowMiddlewares.unshift(mw);\n } else {\n this.shadowMiddlewares.push(mw);\n }\n return this;\n }\n\n removeMiddleware(mw: I18nMiddleware<Ex>) {\n const idx = this.shadowMiddlewares.indexOf(mw);\n if (idx >= 0) {\n this.shadowMiddlewares.splice(idx, 1);\n this.mw.middlewares.splice(idx, 1);\n }\n return this;\n }\n\n getExactLocale(locale: string) {\n const input = (locale ?? '').trim();\n if (!input) return this.defaultLocale;\n\n if (this.locales.has(input)) return input;\n\n // \u5C0F\u5199\u5316\u6BD4\u8F83\uFF0C\u4FDD\u7559\u539F\u5927\u5C0F\u5199\n const entries = Array.from(this.locales).map((l) => ({\n orig: l,\n lower: l.toLowerCase(),\n }));\n const lower = input.toLowerCase();\n\n // 1) \u7CBE\u786E\u5339\u914D\uFF08\u5927\u5C0F\u5199\u4E0D\u654F\u611F\uFF09\n const exact = entries.find((e) => e.lower === lower);\n if (exact) return exact.orig;\n\n // 2) \u6309 '-' \u62C6\u5206\uFF0C\u4F9D\u6B21\u5C1D\u8BD5\u53BB\u6389\u6700\u53F3\u8FB9\u7684\u6BB5\n // zh-Hans-CN \u2192 zh-Hans \u2192 zh\n const parts = lower.split('-');\n while (parts.length > 1) {\n parts.pop();\n const candidate = parts.join('-');\n const hit = entries.find((e) => e.lower === candidate);\n if (hit) return hit.orig;\n }\n\n // 3) \u515C\u5E95\n return this.defaultLocale;\n }\n\n private buildFallbackChain(locale: string): string[] {\n const best = this.getExactLocale(locale); // \u4F60\u7684\u201C\u6700\u957F\u5339\u914D\u201D\u51FD\u6570\n // \u62C6\u5206 zh-Hans-CN -> ['zh-Hans-CN','zh-Hans','zh']\n const parts: string[] = [];\n const segs = best.split('-');\n for (let i = segs.length; i > 1; i--)\n parts.push(segs.slice(0, i).join('-'));\n parts.push(segs[0]); // 'zh'\n // \u9644\u52A0\u9ED8\u8BA4\u8BED\u8A00\n if (!parts.includes(this.defaultLocale)) parts.push(this.defaultLocale);\n // \u53BB\u91CD\n return Array.from(new Set(parts)).filter((p) => this.locales.has(p));\n }\n\n private async applyMiddlewares(\n locale: string,\n text: string,\n ...ex: Ex\n ): Promise<string | undefined> {\n const tryLocale = (locale: string) => this.mw.dispatch(locale, text, ...ex);\n\n for (const loc of this.buildFallbackChain(locale)) {\n const result = await tryLocale(loc);\n if (result != null) {\n return result;\n }\n }\n return undefined;\n }\n\n async translateString(\n locale: string,\n text: string,\n ...ex: Ex\n ): Promise<string> {\n if (!text) return text;\n\n locale = this.getExactLocale(locale);\n\n const pieces = parseI18n(text);\n if (!pieces.some((p) => p.type === 'ph')) {\n return pieces\n .map((p) => (p.type === 'raw' ? p.value : `#{${p.rawInner}}`))\n .join('');\n }\n\n const promises: Array<Promise<string | undefined | null>> = [];\n\n for (const p of pieces) {\n if (p.type === 'ph') {\n promises.push(this.applyMiddlewares(locale, p.key, ...ex));\n }\n }\n\n const results = await Promise.all(promises);\n\n let out = '';\n let k = 0;\n for (const p of pieces) {\n if (p.type === 'raw') {\n out += p.value;\n } else {\n const r = results[k++];\n out += r == null ? `#{${p.rawInner}}` : r;\n }\n }\n return out;\n }\n\n async translate<T>(locale: string, obj: T, ...ex: Ex): Promise<T> {\n return patchStringInObject(obj, (s) =>\n this.translateString(locale, s, ...ex),\n );\n }\n}\n", "import { I18nMiddleware } from '../types';\nimport { Awaitable } from '../../types';\n\nexport type I18nDictionary = Record<string, Record<string, string>>;\n\ntype MatchType = 'exact' | 'hierarchy' | 'startsWith';\n\nexport const I18nLookupMiddleware = <Ex extends any[] = []>(\n dict:\n | I18nDictionary\n | ((locale: string, key: string, ...ex: Ex) => Awaitable<I18nDictionary>),\n options?: { matchType?: MatchType },\n): I18nMiddleware<Ex> => {\n const matchType: MatchType = options?.matchType ?? 'exact';\n const dictFactory = typeof dict === 'function' ? dict : () => dict;\n\n // \u57FA\u4E8E locales \u5217\u8868\u505A\u201C\u7CBE\u786E\u2192\u5C42\u7EA7\u56DE\u9000(zh-Hans-CN\u2192zh-Hans\u2192zh)\u201D\u7684\u6700\u957F\u5339\u914D\n const pickBestByHierarchy = (\n input: string,\n locales: string[],\n ): string | undefined => {\n if (!input) return undefined;\n const entries = locales.map((l) => ({ orig: l, lower: l.toLowerCase() }));\n const lower = input.toLowerCase();\n\n // \u7CBE\u786E\u5339\u914D\uFF08\u5927\u5C0F\u5199\u4E0D\u654F\u611F\uFF09\n const exact = entries.find((e) => e.lower === lower);\n if (exact) return exact.orig;\n\n // \u9010\u7EA7\u56DE\u9000\uFF1Azh-Hans-CN -> zh-Hans -> zh\n const parts = lower.split('-');\n while (parts.length > 1) {\n parts.pop();\n const candidate = parts.join('-');\n const hit = entries.find((e) => e.lower === candidate);\n if (hit) return hit.orig;\n }\n return undefined;\n };\n\n return async (locale, key, next, ...ex) => {\n const dictResolved = await dictFactory(locale, key, ...ex);\n\n let dictionary = dictResolved[locale];\n\n if (!dictionary) {\n if (matchType === 'hierarchy') {\n const best = pickBestByHierarchy(locale, Object.keys(dictResolved));\n if (best) dictionary = dictResolved[best];\n } else if (matchType === 'startsWith') {\n const keys = Object.keys(dictResolved).filter((k) =>\n locale.startsWith(k),\n );\n if (keys.length) {\n const best = keys.reduce((a, b) => (b.length > a.length ? b : a));\n dictionary = dictResolved[best];\n }\n }\n }\n\n // \u547D\u4E2D\u5224\u65AD\uFF1A\u5141\u8BB8\u7A7A\u5B57\u7B26\u4E32 ''\uFF1B\u4EC5 null/undefined \u89C6\u4E3A\u672A\u547D\u4E2D\n if (dictionary && Object.prototype.hasOwnProperty.call(dictionary, key)) {\n const val = dictionary[key];\n if (val != null) {\n return val;\n }\n }\n\n return next();\n };\n};\n\nexport const createI18nLookupMiddleware = <Ex extends any[]>() =>\n I18nLookupMiddleware as typeof I18nLookupMiddleware<Ex>;\n", "export const observeDiff = <T>(\n obj: T,\n cb: <K extends keyof T>(change: {\n type: 'add' | 'update' | 'delete';\n key: K;\n oldValue: T[K] | undefined;\n newValue: T[K] | undefined;\n }) => any,\n): T => {\n return new Proxy(obj as any, {\n set(target, key: string | symbol, value) {\n const oldValue = target[key];\n const type = Object.prototype.hasOwnProperty.call(target, key)\n ? 'update'\n : 'add';\n target[key] = value;\n cb({ type, key: key as any, oldValue, newValue: value });\n return true;\n },\n deleteProperty(target, key: string | symbol) {\n if (Object.prototype.hasOwnProperty.call(target, key)) {\n const oldValue = target[key];\n delete target[key];\n cb({ type: 'delete', key: key as any, oldValue, newValue: undefined });\n return true;\n }\n return false;\n },\n });\n};\n", "export const Memorize = () => {\n const cache = new WeakMap<object, any>();\n\n const isPromiseLike = (v: any): v is Promise<unknown> =>\n v != null && typeof v.then === 'function' && typeof v.catch === 'function';\n\n const getOrSet = (instance: object, compute: () => any) => {\n if (cache.has(instance)) return cache.get(instance);\n\n const result = compute();\n\n if (isPromiseLike(result)) {\n const wrapped = result.catch((err) => {\n cache.delete(instance); // \u4E0B\u6B21\u8FD8\u80FD\u91CD\u65B0\u7B97\n throw err;\n });\n cache.set(instance, wrapped);\n return wrapped;\n }\n\n cache.set(instance, result);\n return result;\n };\n\n return function (\n _target: any,\n _propertyKey: string,\n descriptor: PropertyDescriptor,\n ) {\n // getter\n if (typeof descriptor.get === 'function') {\n const originalGetter = descriptor.get;\n descriptor.get = function () {\n return getOrSet(this, () => originalGetter.call(this));\n };\n return;\n }\n\n // method\n if (typeof descriptor.value === 'function') {\n const originalMethod = descriptor.value;\n descriptor.value = function (...args: any[]) {\n return getOrSet(this, () => originalMethod.apply(this, args));\n };\n return;\n }\n };\n};\n", "export type MayBeArray<T> = T | T[];\n\nexport const makeArray = <T>(value: MayBeArray<T>): T[] => {\n return Array.isArray(value) ? value : [value];\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["args", "locale"]
|
|
7
7
|
}
|
package/index.ts
CHANGED