nfkit 1.0.18 → 1.0.20

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 CHANGED
@@ -807,10 +807,10 @@ var DynamicMiddlewareDispatcher = class {
807
807
  return void 0;
808
808
  }
809
809
  nextCalled = true;
810
- return dispatch(
811
- i + 1,
812
- passedArgs.length === 0 ? useArgs : passedArgs
813
- );
810
+ return dispatch(i + 1, [
811
+ ...passedArgs,
812
+ ...useArgs.slice(passedArgs.length)
813
+ ]);
814
814
  };
815
815
  const runMw = async (cb) => {
816
816
  const res = await cb();
@@ -886,7 +886,7 @@ var ProtoMiddlewareDispatcher = class extends DynamicMiddlewareDispatcher {
886
886
  }
887
887
  async buildMiddlewares(...args) {
888
888
  if (args.length === 0) return [];
889
- const inst = args[args.length - 1];
889
+ const inst = args[0];
890
890
  if (!inst || typeof inst !== "object") return [];
891
891
  const chain = [];
892
892
  let cur = inst.constructor;
@@ -909,8 +909,8 @@ var ProtoMiddlewareDispatcher = class extends DynamicMiddlewareDispatcher {
909
909
  result.push(...mws);
910
910
  }
911
911
  }
912
- result.push((...args2) => {
913
- return args2[args2.length - 2];
912
+ result.push((inst2, ...args2) => {
913
+ return inst2;
914
914
  });
915
915
  return result;
916
916
  }
@@ -1043,36 +1043,44 @@ var patchStringInObject = async (obj, cb) => {
1043
1043
  };
1044
1044
 
1045
1045
  // src/i18n/i18n.ts
1046
- var I18n = class {
1047
- constructor(options) {
1048
- this.options = options;
1049
- this.locales = new Set(this.options.locales);
1050
- this.defaultLocale = this.options.defaultLocale ?? this.options.locales[0];
1051
- this.mw = new MiddlewareDispatcher({
1046
+ var I18nMiddlewareDispatcher = class extends DynamicMiddlewareDispatcher {
1047
+ constructor() {
1048
+ super({
1052
1049
  acceptResult: (res) => res != null,
1053
1050
  errorHandler: (e) => {
1054
1051
  throw e;
1055
1052
  }
1056
1053
  });
1057
- this.shadowMiddlewares = [];
1054
+ this.middlewares = [];
1055
+ }
1056
+ async buildMiddlewares() {
1057
+ return this.middlewares.map(
1058
+ (mw) => (locale, text, ...args) => {
1059
+ const ex = args.slice(0, -1);
1060
+ const next = args[args.length - 1];
1061
+ return mw(locale, text, next, ...ex);
1062
+ }
1063
+ );
1064
+ }
1065
+ };
1066
+ var I18n = class {
1067
+ constructor(options) {
1068
+ this.options = options;
1069
+ this.locales = new Set(this.options.locales);
1070
+ this.defaultLocale = this.options.defaultLocale ?? this.options.locales[0];
1071
+ this.mw = new I18nMiddlewareDispatcher();
1058
1072
  }
1059
1073
  middleware(mw, prior = false) {
1060
- this.mw.middleware((locale, text, ...args) => {
1061
- const ex = args.slice(0, -1);
1062
- const next = args[args.length - 1];
1063
- return mw(locale, text, next, ...ex);
1064
- }, prior);
1065
1074
  if (prior) {
1066
- this.shadowMiddlewares.unshift(mw);
1075
+ this.mw.middlewares.unshift(mw);
1067
1076
  } else {
1068
- this.shadowMiddlewares.push(mw);
1077
+ this.mw.middlewares.push(mw);
1069
1078
  }
1070
1079
  return this;
1071
1080
  }
1072
1081
  removeMiddleware(mw) {
1073
- const idx = this.shadowMiddlewares.indexOf(mw);
1082
+ const idx = this.mw.middlewares.indexOf(mw);
1074
1083
  if (idx >= 0) {
1075
- this.shadowMiddlewares.splice(idx, 1);
1076
1084
  this.mw.middlewares.splice(idx, 1);
1077
1085
  }
1078
1086
  return this;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
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/dynamic-middleware-dispatcher.ts", "../src/middleware-dispatcher/middleware-dispatcher.ts", "../src/middleware-dispatcher/proto-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 {\n AnyFunc,\n MiddlewareDispatcherOptions,\n Middleware,\n MiddlewareResult,\n MiddlewareAcceptResult,\n MiddlewareErrorHandler,\n MiddlewareReturn,\n MiddlewareNextArgs,\n} from './types';\n\nexport class DynamicMiddlewareDispatcher<F extends AnyFunc> {\n constructor(protected options: MiddlewareDispatcherOptions<F> = {}) {}\n\n async buildMiddlewares(...args: Parameters<F>): Promise<Middleware<F>[]> {\n return [];\n }\n\n async dispatch(...args: Parameters<F>): MiddlewareResult<F> {\n const mws = await this.buildMiddlewares(...args);\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 (\n i: number,\n useArgs: Parameters<F>,\n ): MiddlewareResult<F> => {\n if (i >= mws.length) return undefined;\n\n const mw = mws[i];\n let nextCalled = false;\n\n const next = async (\n ...passedArgs: MiddlewareNextArgs<F>\n ): MiddlewareResult<F> => {\n if (nextCalled) {\n return undefined;\n }\n nextCalled = true;\n return dispatch(\n i + 1,\n passedArgs.length === 0 ? useArgs : (passedArgs as Parameters<F>),\n );\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, useArgs);\n }\n return res;\n };\n\n try {\n return await runMw(() => mw(...useArgs, next));\n } catch (e) {\n return await runMw(() => errorHandler(e, useArgs, next));\n }\n };\n return dispatch(0, args);\n }\n}\n", "import { AnyFunc, Middleware } from './types';\nimport { DynamicMiddlewareDispatcher } from './dynamic-middleware-dispatcher';\n\nexport class MiddlewareDispatcher<\n F extends AnyFunc,\n> extends DynamicMiddlewareDispatcher<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 async buildMiddlewares(...args: Parameters<F>): Promise<Middleware<F>[]> {\n return this.middlewares;\n }\n}\n", "import { Middleware, MiddlewareResult } from './types';\nimport { AnyClass, ClassType } from '../types';\nimport { DynamicMiddlewareDispatcher } from './dynamic-middleware-dispatcher';\n\nexport type ProtoMiddlewareArgs<A extends any[], T = any> = [\n ...args: A,\n inst: T,\n];\nexport type ProtoMiddlewareFunc<A extends any[], T = any> = (\n ...args: ProtoMiddlewareArgs<A, T>\n) => T;\n\nexport class ProtoMiddlewareDispatcher<\n A extends any[],\n> extends DynamicMiddlewareDispatcher<ProtoMiddlewareFunc<A>> {\n private middlewareProtoMap = new Map<\n AnyClass,\n Middleware<ProtoMiddlewareFunc<A>>[]\n >();\n private middlewareProtoMapPrior = new Map<\n AnyClass,\n Middleware<ProtoMiddlewareFunc<A>>[]\n >();\n\n middleware<T>(\n cls: ClassType<T>,\n mw: Middleware<ProtoMiddlewareFunc<A, T>>,\n prior = false,\n ) {\n const map = prior ? this.middlewareProtoMapPrior : this.middlewareProtoMap;\n const mws = map.get(cls) || [];\n mws.push(mw);\n map.set(cls, mws);\n return this;\n }\n\n removeMiddleware<T>(\n cls: ClassType<T>,\n mw: Middleware<ProtoMiddlewareFunc<A, T>>,\n ) {\n for (const map of [this.middlewareProtoMap, this.middlewareProtoMapPrior]) {\n const mws = map.get(cls);\n if (mws) {\n const index = mws.indexOf(mw);\n if (index >= 0) {\n mws.splice(index, 1);\n }\n }\n }\n return this;\n }\n\n async dispatch<T>(\n ...args: ProtoMiddlewareArgs<A, T>\n ): MiddlewareResult<ProtoMiddlewareFunc<A, T>> {\n return super.dispatch(...args);\n }\n\n async buildMiddlewares(...args: ProtoMiddlewareArgs<A>) {\n // buildMiddlewares \u53EA\u9700\u8981\u77E5\u9053 inst\n if (args.length === 0) return [];\n\n const inst = args[args.length - 1];\n if (!inst || typeof inst !== 'object') return [];\n\n // 1. \u6536\u96C6\u539F\u578B\u94FE\uFF08Base \u2192 Sub\uFF09\n const chain: AnyClass[] = [];\n let cur: any = inst.constructor;\n\n while (cur && cur !== Object) {\n chain.push(cur);\n cur = Object.getPrototypeOf(cur.prototype)?.constructor;\n }\n\n chain.reverse();\n\n const result: Middleware<ProtoMiddlewareFunc<A>>[] = [];\n\n // 2. prior\uFF1ABase \u2192 Sub\n for (const cls of chain) {\n const mws = this.middlewareProtoMapPrior.get(cls);\n if (mws) {\n result.push(...[...mws].reverse());\n }\n }\n\n // 3. normal\uFF1ASub \u2192 Base\n for (let i = chain.length - 1; i >= 0; i--) {\n const cls = chain[i];\n const mws = this.middlewareProtoMap.get(cls);\n if (mws) {\n result.push(...mws);\n }\n }\n\n result.push((...args) => {\n return args[args.length - 2]; // inst\n });\n\n return result;\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/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
- "names": ["args", "args", "locale"]
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 {\n AnyFunc,\n MiddlewareDispatcherOptions,\n Middleware,\n MiddlewareResult,\n MiddlewareAcceptResult,\n MiddlewareErrorHandler,\n MiddlewareReturn,\n MiddlewareNextArgs,\n} from './types';\n\nexport class DynamicMiddlewareDispatcher<F extends AnyFunc> {\n constructor(protected options: MiddlewareDispatcherOptions<F> = {}) {}\n\n async buildMiddlewares(...args: Parameters<F>): Promise<Middleware<F>[]> {\n return [];\n }\n\n async dispatch(...args: Parameters<F>): MiddlewareResult<F> {\n const mws = await this.buildMiddlewares(...args);\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 (\n i: number,\n useArgs: Parameters<F>,\n ): MiddlewareResult<F> => {\n if (i >= mws.length) return undefined;\n\n const mw = mws[i];\n let nextCalled = false;\n\n const next = async (\n ...passedArgs: MiddlewareNextArgs<F>\n ): MiddlewareResult<F> => {\n if (nextCalled) {\n return undefined;\n }\n nextCalled = true;\n return dispatch(i + 1, [\n ...passedArgs,\n ...useArgs.slice(passedArgs.length),\n ] as Parameters<F>);\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, useArgs);\n }\n return res;\n };\n\n try {\n return await runMw(() => mw(...useArgs, next));\n } catch (e) {\n return await runMw(() => errorHandler(e, useArgs, next));\n }\n };\n return dispatch(0, args);\n }\n}\n", "import { AnyFunc, Middleware } from './types';\nimport { DynamicMiddlewareDispatcher } from './dynamic-middleware-dispatcher';\n\nexport class MiddlewareDispatcher<\n F extends AnyFunc,\n> extends DynamicMiddlewareDispatcher<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 async buildMiddlewares(...args: Parameters<F>): Promise<Middleware<F>[]> {\n return this.middlewares;\n }\n}\n", "import { Middleware, MiddlewareResult } from './types';\nimport { AnyClass, ClassType } from '../types';\nimport { DynamicMiddlewareDispatcher } from './dynamic-middleware-dispatcher';\n\nexport type ProtoMiddlewareArgs<A extends any[] = [], T = any> = [\n inst: T,\n ...args: A,\n];\nexport type ProtoMiddlewareFunc<A extends any[] = [], T = any> = (\n ...args: ProtoMiddlewareArgs<A, T>\n) => T;\n\nexport class ProtoMiddlewareDispatcher<\n A extends any[] = [],\n> extends DynamicMiddlewareDispatcher<ProtoMiddlewareFunc<A>> {\n private middlewareProtoMap = new Map<\n AnyClass,\n Middleware<ProtoMiddlewareFunc<A>>[]\n >();\n private middlewareProtoMapPrior = new Map<\n AnyClass,\n Middleware<ProtoMiddlewareFunc<A>>[]\n >();\n\n middleware<T>(\n cls: ClassType<T>,\n mw: Middleware<ProtoMiddlewareFunc<A, T>>,\n prior = false,\n ) {\n const map = prior ? this.middlewareProtoMapPrior : this.middlewareProtoMap;\n const mws = map.get(cls) || [];\n mws.push(mw);\n map.set(cls, mws);\n return this;\n }\n\n removeMiddleware<T>(\n cls: ClassType<T>,\n mw: Middleware<ProtoMiddlewareFunc<A, T>>,\n ) {\n for (const map of [this.middlewareProtoMap, this.middlewareProtoMapPrior]) {\n const mws = map.get(cls);\n if (mws) {\n const index = mws.indexOf(mw);\n if (index >= 0) {\n mws.splice(index, 1);\n }\n }\n }\n return this;\n }\n\n async dispatch<T>(\n ...args: ProtoMiddlewareArgs<A, T>\n ): MiddlewareResult<ProtoMiddlewareFunc<A, T>> {\n return super.dispatch(...args);\n }\n\n async buildMiddlewares(...args: ProtoMiddlewareArgs<A>) {\n // buildMiddlewares \u53EA\u9700\u8981\u77E5\u9053 inst\n if (args.length === 0) return [];\n\n const inst = args[0];\n if (!inst || typeof inst !== 'object') return [];\n\n // 1. \u6536\u96C6\u539F\u578B\u94FE\uFF08Base \u2192 Sub\uFF09\n const chain: AnyClass[] = [];\n let cur: any = inst.constructor;\n\n while (cur && cur !== Object) {\n chain.push(cur);\n cur = Object.getPrototypeOf(cur.prototype)?.constructor;\n }\n\n chain.reverse();\n\n const result: Middleware<ProtoMiddlewareFunc<A>>[] = [];\n\n // 2. prior\uFF1ABase \u2192 Sub\n for (const cls of chain) {\n const mws = this.middlewareProtoMapPrior.get(cls);\n if (mws) {\n result.push(...[...mws].reverse());\n }\n }\n\n // 3. normal\uFF1ASub \u2192 Base\n for (let i = chain.length - 1; i >= 0; i--) {\n const cls = chain[i];\n const mws = this.middlewareProtoMap.get(cls);\n if (mws) {\n result.push(...mws);\n }\n }\n\n result.push((inst, ...args) => {\n return inst;\n });\n\n return result;\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 { parseI18n } from '../utility/parse-i18n';\nimport {\n I18nMiddleware,\n I18nMiddlewareFunc,\n I18nMiddlewareNext,\n I18nOptions,\n} from './types';\nimport { patchStringInObject } from '../patch-string-in-object';\nimport { DynamicMiddlewareDispatcher } from '../middleware-dispatcher';\n\nclass I18nMiddlewareDispatcher<\n Ex extends any[],\n> extends DynamicMiddlewareDispatcher<I18nMiddlewareFunc<Ex>> {\n constructor() {\n super({\n acceptResult: (res) => res != null,\n errorHandler: (e) => {\n throw e;\n },\n });\n }\n\n middlewares: I18nMiddleware<Ex>[] = [];\n\n async buildMiddlewares() {\n return this.middlewares.map(\n (mw) =>\n (locale: string, text: string, ...args: any[]) => {\n const ex = args.slice(0, -1) as Ex;\n const next = args[args.length - 1] as I18nMiddlewareNext<Ex>;\n return mw(locale, text, next, ...ex);\n },\n );\n }\n}\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 I18nMiddlewareDispatcher();\n\n middleware(mw: I18nMiddleware<Ex>, prior = false) {\n if (prior) {\n this.mw.middlewares.unshift(mw);\n } else {\n this.mw.middlewares.push(mw);\n }\n return this;\n }\n\n removeMiddleware(mw: I18nMiddleware<Ex>) {\n const idx = this.mw.middlewares.indexOf(mw);\n if (idx >= 0) {\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
+ "names": ["args", "inst", "args", "locale"]
7
7
  }
package/dist/index.mjs CHANGED
@@ -766,10 +766,10 @@ var DynamicMiddlewareDispatcher = class {
766
766
  return void 0;
767
767
  }
768
768
  nextCalled = true;
769
- return dispatch(
770
- i + 1,
771
- passedArgs.length === 0 ? useArgs : passedArgs
772
- );
769
+ return dispatch(i + 1, [
770
+ ...passedArgs,
771
+ ...useArgs.slice(passedArgs.length)
772
+ ]);
773
773
  };
774
774
  const runMw = async (cb) => {
775
775
  const res = await cb();
@@ -845,7 +845,7 @@ var ProtoMiddlewareDispatcher = class extends DynamicMiddlewareDispatcher {
845
845
  }
846
846
  async buildMiddlewares(...args) {
847
847
  if (args.length === 0) return [];
848
- const inst = args[args.length - 1];
848
+ const inst = args[0];
849
849
  if (!inst || typeof inst !== "object") return [];
850
850
  const chain = [];
851
851
  let cur = inst.constructor;
@@ -868,8 +868,8 @@ var ProtoMiddlewareDispatcher = class extends DynamicMiddlewareDispatcher {
868
868
  result.push(...mws);
869
869
  }
870
870
  }
871
- result.push((...args2) => {
872
- return args2[args2.length - 2];
871
+ result.push((inst2, ...args2) => {
872
+ return inst2;
873
873
  });
874
874
  return result;
875
875
  }
@@ -1002,36 +1002,44 @@ var patchStringInObject = async (obj, cb) => {
1002
1002
  };
1003
1003
 
1004
1004
  // src/i18n/i18n.ts
1005
- var I18n = class {
1006
- constructor(options) {
1007
- this.options = options;
1008
- this.locales = new Set(this.options.locales);
1009
- this.defaultLocale = this.options.defaultLocale ?? this.options.locales[0];
1010
- this.mw = new MiddlewareDispatcher({
1005
+ var I18nMiddlewareDispatcher = class extends DynamicMiddlewareDispatcher {
1006
+ constructor() {
1007
+ super({
1011
1008
  acceptResult: (res) => res != null,
1012
1009
  errorHandler: (e) => {
1013
1010
  throw e;
1014
1011
  }
1015
1012
  });
1016
- this.shadowMiddlewares = [];
1013
+ this.middlewares = [];
1014
+ }
1015
+ async buildMiddlewares() {
1016
+ return this.middlewares.map(
1017
+ (mw) => (locale, text, ...args) => {
1018
+ const ex = args.slice(0, -1);
1019
+ const next = args[args.length - 1];
1020
+ return mw(locale, text, next, ...ex);
1021
+ }
1022
+ );
1023
+ }
1024
+ };
1025
+ var I18n = class {
1026
+ constructor(options) {
1027
+ this.options = options;
1028
+ this.locales = new Set(this.options.locales);
1029
+ this.defaultLocale = this.options.defaultLocale ?? this.options.locales[0];
1030
+ this.mw = new I18nMiddlewareDispatcher();
1017
1031
  }
1018
1032
  middleware(mw, prior = false) {
1019
- this.mw.middleware((locale, text, ...args) => {
1020
- const ex = args.slice(0, -1);
1021
- const next = args[args.length - 1];
1022
- return mw(locale, text, next, ...ex);
1023
- }, prior);
1024
1033
  if (prior) {
1025
- this.shadowMiddlewares.unshift(mw);
1034
+ this.mw.middlewares.unshift(mw);
1026
1035
  } else {
1027
- this.shadowMiddlewares.push(mw);
1036
+ this.mw.middlewares.push(mw);
1028
1037
  }
1029
1038
  return this;
1030
1039
  }
1031
1040
  removeMiddleware(mw) {
1032
- const idx = this.shadowMiddlewares.indexOf(mw);
1041
+ const idx = this.mw.middlewares.indexOf(mw);
1033
1042
  if (idx >= 0) {
1034
- this.shadowMiddlewares.splice(idx, 1);
1035
1043
  this.mw.middlewares.splice(idx, 1);
1036
1044
  }
1037
1045
  return this;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/workflow.ts", "../src/dual-object.ts", "../src/workflow-dispatcher.ts", "../src/round-robin.ts", "../src/abortable.ts", "../src/middleware-dispatcher/dynamic-middleware-dispatcher.ts", "../src/middleware-dispatcher/middleware-dispatcher.ts", "../src/middleware-dispatcher/proto-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 {\n AnyFunc,\n MiddlewareDispatcherOptions,\n Middleware,\n MiddlewareResult,\n MiddlewareAcceptResult,\n MiddlewareErrorHandler,\n MiddlewareReturn,\n MiddlewareNextArgs,\n} from './types';\n\nexport class DynamicMiddlewareDispatcher<F extends AnyFunc> {\n constructor(protected options: MiddlewareDispatcherOptions<F> = {}) {}\n\n async buildMiddlewares(...args: Parameters<F>): Promise<Middleware<F>[]> {\n return [];\n }\n\n async dispatch(...args: Parameters<F>): MiddlewareResult<F> {\n const mws = await this.buildMiddlewares(...args);\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 (\n i: number,\n useArgs: Parameters<F>,\n ): MiddlewareResult<F> => {\n if (i >= mws.length) return undefined;\n\n const mw = mws[i];\n let nextCalled = false;\n\n const next = async (\n ...passedArgs: MiddlewareNextArgs<F>\n ): MiddlewareResult<F> => {\n if (nextCalled) {\n return undefined;\n }\n nextCalled = true;\n return dispatch(\n i + 1,\n passedArgs.length === 0 ? useArgs : (passedArgs as Parameters<F>),\n );\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, useArgs);\n }\n return res;\n };\n\n try {\n return await runMw(() => mw(...useArgs, next));\n } catch (e) {\n return await runMw(() => errorHandler(e, useArgs, next));\n }\n };\n return dispatch(0, args);\n }\n}\n", "import { AnyFunc, Middleware } from './types';\nimport { DynamicMiddlewareDispatcher } from './dynamic-middleware-dispatcher';\n\nexport class MiddlewareDispatcher<\n F extends AnyFunc,\n> extends DynamicMiddlewareDispatcher<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 async buildMiddlewares(...args: Parameters<F>): Promise<Middleware<F>[]> {\n return this.middlewares;\n }\n}\n", "import { Middleware, MiddlewareResult } from './types';\nimport { AnyClass, ClassType } from '../types';\nimport { DynamicMiddlewareDispatcher } from './dynamic-middleware-dispatcher';\n\nexport type ProtoMiddlewareArgs<A extends any[], T = any> = [\n ...args: A,\n inst: T,\n];\nexport type ProtoMiddlewareFunc<A extends any[], T = any> = (\n ...args: ProtoMiddlewareArgs<A, T>\n) => T;\n\nexport class ProtoMiddlewareDispatcher<\n A extends any[],\n> extends DynamicMiddlewareDispatcher<ProtoMiddlewareFunc<A>> {\n private middlewareProtoMap = new Map<\n AnyClass,\n Middleware<ProtoMiddlewareFunc<A>>[]\n >();\n private middlewareProtoMapPrior = new Map<\n AnyClass,\n Middleware<ProtoMiddlewareFunc<A>>[]\n >();\n\n middleware<T>(\n cls: ClassType<T>,\n mw: Middleware<ProtoMiddlewareFunc<A, T>>,\n prior = false,\n ) {\n const map = prior ? this.middlewareProtoMapPrior : this.middlewareProtoMap;\n const mws = map.get(cls) || [];\n mws.push(mw);\n map.set(cls, mws);\n return this;\n }\n\n removeMiddleware<T>(\n cls: ClassType<T>,\n mw: Middleware<ProtoMiddlewareFunc<A, T>>,\n ) {\n for (const map of [this.middlewareProtoMap, this.middlewareProtoMapPrior]) {\n const mws = map.get(cls);\n if (mws) {\n const index = mws.indexOf(mw);\n if (index >= 0) {\n mws.splice(index, 1);\n }\n }\n }\n return this;\n }\n\n async dispatch<T>(\n ...args: ProtoMiddlewareArgs<A, T>\n ): MiddlewareResult<ProtoMiddlewareFunc<A, T>> {\n return super.dispatch(...args);\n }\n\n async buildMiddlewares(...args: ProtoMiddlewareArgs<A>) {\n // buildMiddlewares \u53EA\u9700\u8981\u77E5\u9053 inst\n if (args.length === 0) return [];\n\n const inst = args[args.length - 1];\n if (!inst || typeof inst !== 'object') return [];\n\n // 1. \u6536\u96C6\u539F\u578B\u94FE\uFF08Base \u2192 Sub\uFF09\n const chain: AnyClass[] = [];\n let cur: any = inst.constructor;\n\n while (cur && cur !== Object) {\n chain.push(cur);\n cur = Object.getPrototypeOf(cur.prototype)?.constructor;\n }\n\n chain.reverse();\n\n const result: Middleware<ProtoMiddlewareFunc<A>>[] = [];\n\n // 2. prior\uFF1ABase \u2192 Sub\n for (const cls of chain) {\n const mws = this.middlewareProtoMapPrior.get(cls);\n if (mws) {\n result.push(...[...mws].reverse());\n }\n }\n\n // 3. normal\uFF1ASub \u2192 Base\n for (let i = chain.length - 1; i >= 0; i--) {\n const cls = chain[i];\n const mws = this.middlewareProtoMap.get(cls);\n if (mws) {\n result.push(...mws);\n }\n }\n\n result.push((...args) => {\n return args[args.length - 2]; // inst\n });\n\n return result;\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/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
- "names": ["args", "args", "locale"]
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 {\n AnyFunc,\n MiddlewareDispatcherOptions,\n Middleware,\n MiddlewareResult,\n MiddlewareAcceptResult,\n MiddlewareErrorHandler,\n MiddlewareReturn,\n MiddlewareNextArgs,\n} from './types';\n\nexport class DynamicMiddlewareDispatcher<F extends AnyFunc> {\n constructor(protected options: MiddlewareDispatcherOptions<F> = {}) {}\n\n async buildMiddlewares(...args: Parameters<F>): Promise<Middleware<F>[]> {\n return [];\n }\n\n async dispatch(...args: Parameters<F>): MiddlewareResult<F> {\n const mws = await this.buildMiddlewares(...args);\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 (\n i: number,\n useArgs: Parameters<F>,\n ): MiddlewareResult<F> => {\n if (i >= mws.length) return undefined;\n\n const mw = mws[i];\n let nextCalled = false;\n\n const next = async (\n ...passedArgs: MiddlewareNextArgs<F>\n ): MiddlewareResult<F> => {\n if (nextCalled) {\n return undefined;\n }\n nextCalled = true;\n return dispatch(i + 1, [\n ...passedArgs,\n ...useArgs.slice(passedArgs.length),\n ] as Parameters<F>);\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, useArgs);\n }\n return res;\n };\n\n try {\n return await runMw(() => mw(...useArgs, next));\n } catch (e) {\n return await runMw(() => errorHandler(e, useArgs, next));\n }\n };\n return dispatch(0, args);\n }\n}\n", "import { AnyFunc, Middleware } from './types';\nimport { DynamicMiddlewareDispatcher } from './dynamic-middleware-dispatcher';\n\nexport class MiddlewareDispatcher<\n F extends AnyFunc,\n> extends DynamicMiddlewareDispatcher<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 async buildMiddlewares(...args: Parameters<F>): Promise<Middleware<F>[]> {\n return this.middlewares;\n }\n}\n", "import { Middleware, MiddlewareResult } from './types';\nimport { AnyClass, ClassType } from '../types';\nimport { DynamicMiddlewareDispatcher } from './dynamic-middleware-dispatcher';\n\nexport type ProtoMiddlewareArgs<A extends any[] = [], T = any> = [\n inst: T,\n ...args: A,\n];\nexport type ProtoMiddlewareFunc<A extends any[] = [], T = any> = (\n ...args: ProtoMiddlewareArgs<A, T>\n) => T;\n\nexport class ProtoMiddlewareDispatcher<\n A extends any[] = [],\n> extends DynamicMiddlewareDispatcher<ProtoMiddlewareFunc<A>> {\n private middlewareProtoMap = new Map<\n AnyClass,\n Middleware<ProtoMiddlewareFunc<A>>[]\n >();\n private middlewareProtoMapPrior = new Map<\n AnyClass,\n Middleware<ProtoMiddlewareFunc<A>>[]\n >();\n\n middleware<T>(\n cls: ClassType<T>,\n mw: Middleware<ProtoMiddlewareFunc<A, T>>,\n prior = false,\n ) {\n const map = prior ? this.middlewareProtoMapPrior : this.middlewareProtoMap;\n const mws = map.get(cls) || [];\n mws.push(mw);\n map.set(cls, mws);\n return this;\n }\n\n removeMiddleware<T>(\n cls: ClassType<T>,\n mw: Middleware<ProtoMiddlewareFunc<A, T>>,\n ) {\n for (const map of [this.middlewareProtoMap, this.middlewareProtoMapPrior]) {\n const mws = map.get(cls);\n if (mws) {\n const index = mws.indexOf(mw);\n if (index >= 0) {\n mws.splice(index, 1);\n }\n }\n }\n return this;\n }\n\n async dispatch<T>(\n ...args: ProtoMiddlewareArgs<A, T>\n ): MiddlewareResult<ProtoMiddlewareFunc<A, T>> {\n return super.dispatch(...args);\n }\n\n async buildMiddlewares(...args: ProtoMiddlewareArgs<A>) {\n // buildMiddlewares \u53EA\u9700\u8981\u77E5\u9053 inst\n if (args.length === 0) return [];\n\n const inst = args[0];\n if (!inst || typeof inst !== 'object') return [];\n\n // 1. \u6536\u96C6\u539F\u578B\u94FE\uFF08Base \u2192 Sub\uFF09\n const chain: AnyClass[] = [];\n let cur: any = inst.constructor;\n\n while (cur && cur !== Object) {\n chain.push(cur);\n cur = Object.getPrototypeOf(cur.prototype)?.constructor;\n }\n\n chain.reverse();\n\n const result: Middleware<ProtoMiddlewareFunc<A>>[] = [];\n\n // 2. prior\uFF1ABase \u2192 Sub\n for (const cls of chain) {\n const mws = this.middlewareProtoMapPrior.get(cls);\n if (mws) {\n result.push(...[...mws].reverse());\n }\n }\n\n // 3. normal\uFF1ASub \u2192 Base\n for (let i = chain.length - 1; i >= 0; i--) {\n const cls = chain[i];\n const mws = this.middlewareProtoMap.get(cls);\n if (mws) {\n result.push(...mws);\n }\n }\n\n result.push((inst, ...args) => {\n return inst;\n });\n\n return result;\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 { parseI18n } from '../utility/parse-i18n';\nimport {\n I18nMiddleware,\n I18nMiddlewareFunc,\n I18nMiddlewareNext,\n I18nOptions,\n} from './types';\nimport { patchStringInObject } from '../patch-string-in-object';\nimport { DynamicMiddlewareDispatcher } from '../middleware-dispatcher';\n\nclass I18nMiddlewareDispatcher<\n Ex extends any[],\n> extends DynamicMiddlewareDispatcher<I18nMiddlewareFunc<Ex>> {\n constructor() {\n super({\n acceptResult: (res) => res != null,\n errorHandler: (e) => {\n throw e;\n },\n });\n }\n\n middlewares: I18nMiddleware<Ex>[] = [];\n\n async buildMiddlewares() {\n return this.middlewares.map(\n (mw) =>\n (locale: string, text: string, ...args: any[]) => {\n const ex = args.slice(0, -1) as Ex;\n const next = args[args.length - 1] as I18nMiddlewareNext<Ex>;\n return mw(locale, text, next, ...ex);\n },\n );\n }\n}\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 I18nMiddlewareDispatcher();\n\n middleware(mw: I18nMiddleware<Ex>, prior = false) {\n if (prior) {\n this.mw.middlewares.unshift(mw);\n } else {\n this.mw.middlewares.push(mw);\n }\n return this;\n }\n\n removeMiddleware(mw: I18nMiddleware<Ex>) {\n const idx = this.mw.middlewares.indexOf(mw);\n if (idx >= 0) {\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
+ "names": ["args", "inst", "args", "locale"]
7
7
  }
@@ -5,7 +5,6 @@ export declare class I18n<Ex extends any[] = []> {
5
5
  locales: Set<string>;
6
6
  defaultLocale: string;
7
7
  private mw;
8
- private shadowMiddlewares;
9
8
  middleware(mw: I18nMiddleware<Ex>, prior?: boolean): this;
10
9
  removeMiddleware(mw: I18nMiddleware<Ex>): this;
11
10
  getExactLocale(locale: string): string;
@@ -1,5 +1,8 @@
1
+ import { MiddlewareNext } from '../middleware-dispatcher';
1
2
  import { Awaitable } from '../types';
2
- export type I18nMiddleware<Ex extends any[] = []> = (locale: string, text: string, next: () => Promise<string | undefined>, ...ex: Ex) => Awaitable<string | undefined>;
3
+ export type I18nMiddlewareFunc<Ex extends any[] = []> = (locale: string, text: string, ...ex: Ex) => string | undefined;
4
+ export type I18nMiddlewareNext<Ex extends any[] = []> = MiddlewareNext<I18nMiddlewareFunc<Ex>>;
5
+ export type I18nMiddleware<Ex extends any[] = []> = (locale: string, text: string, next: I18nMiddlewareNext<Ex>, ...ex: Ex) => Awaitable<string | undefined>;
3
6
  export interface I18nOptions {
4
7
  locales: string[];
5
8
  defaultLocale?: string;
@@ -1,12 +1,12 @@
1
1
  import { Middleware, MiddlewareResult } from './types';
2
2
  import { ClassType } from '../types';
3
3
  import { DynamicMiddlewareDispatcher } from './dynamic-middleware-dispatcher';
4
- export type ProtoMiddlewareArgs<A extends any[], T = any> = [
5
- ...args: A,
6
- inst: T
4
+ export type ProtoMiddlewareArgs<A extends any[] = [], T = any> = [
5
+ inst: T,
6
+ ...args: A
7
7
  ];
8
- export type ProtoMiddlewareFunc<A extends any[], T = any> = (...args: ProtoMiddlewareArgs<A, T>) => T;
9
- export declare class ProtoMiddlewareDispatcher<A extends any[]> extends DynamicMiddlewareDispatcher<ProtoMiddlewareFunc<A>> {
8
+ export type ProtoMiddlewareFunc<A extends any[] = [], T = any> = (...args: ProtoMiddlewareArgs<A, T>) => T;
9
+ export declare class ProtoMiddlewareDispatcher<A extends any[] = []> extends DynamicMiddlewareDispatcher<ProtoMiddlewareFunc<A>> {
10
10
  private middlewareProtoMap;
11
11
  private middlewareProtoMapPrior;
12
12
  middleware<T>(cls: ClassType<T>, mw: Middleware<ProtoMiddlewareFunc<A, T>>, prior?: boolean): this;
@@ -2,7 +2,8 @@ import { Awaitable } from '../types';
2
2
  export type AnyFunc = (...args: any[]) => any;
3
3
  export type MiddlewareValue<F extends AnyFunc> = Awaited<ReturnType<F>>;
4
4
  export type MiddlewareResult<F extends AnyFunc> = Promise<MiddlewareValue<F>>;
5
- export type MiddlewareNextArgs<F extends AnyFunc> = Parameters<F> | [];
5
+ type StaircaseParams<A extends any[]> = A extends [] ? [] : A extends [...infer Rest, any] ? A | StaircaseParams<Rest> : never;
6
+ export type MiddlewareNextArgs<F extends AnyFunc> = StaircaseParams<Parameters<F>> | [];
6
7
  export type MiddlewareNext<F extends AnyFunc> = (...args: MiddlewareNextArgs<F>) => MiddlewareResult<F>;
7
8
  export type MiddlewareArgs<F extends AnyFunc> = [
8
9
  ...args: Parameters<F>,
@@ -16,3 +17,4 @@ export interface MiddlewareDispatcherOptions<F extends AnyFunc> {
16
17
  acceptResult?: MiddlewareAcceptResult<F>;
17
18
  errorHandler?: MiddlewareErrorHandler<F>;
18
19
  }
20
+ export {};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "nfkit",
3
3
  "description": "Common kits",
4
- "version": "1.0.18",
4
+ "version": "1.0.20",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.mjs",
7
7
  "types": "dist/index.d.ts",