zeldhash-miner 0.2.3 → 0.2.4
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.js +266 -413
- package/dist/index.js.map +1 -1
- package/dist/nonce.js +158 -0
- package/dist/nonce.js.map +1 -0
- package/dist/worker.d.ts +1 -0
- package/dist/worker.js +206 -0
- package/dist/worker.js.map +1 -0
- package/package.json +1 -1
- package/wasm/zeldhash_miner_wasm_bg.wasm +0 -0
package/dist/worker.js
ADDED
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import { Z as r, l as C, s as U, a as V } from "./nonce.js";
|
|
2
|
+
if (typeof globalThis.__ZELDMINER_WASM_BASE__ > "u")
|
|
3
|
+
try {
|
|
4
|
+
const t = typeof self < "u" && self.location?.origin ? self.location.origin : "http://localhost";
|
|
5
|
+
globalThis.__ZELDMINER_WASM_BASE__ = new URL("/wasm/", t).href;
|
|
6
|
+
} catch {
|
|
7
|
+
globalThis.__ZELDMINER_WASM_BASE__ = "/wasm/";
|
|
8
|
+
}
|
|
9
|
+
const w = self, G = w.name ?? void 0, R = (t) => t instanceof Error ? t.message : String(t);
|
|
10
|
+
let m = "cpu", f = null;
|
|
11
|
+
const g = (t) => {
|
|
12
|
+
w.postMessage({ ...t, workerId: G });
|
|
13
|
+
}, b = (t, e = r.WORKER_ERROR, n) => {
|
|
14
|
+
g({ type: "error", message: t, code: e, details: n });
|
|
15
|
+
}, D = (t) => typeof t == "object" && t !== null && "ok" in t, F = (t) => typeof t == "object" && t !== null && "nonce" in t && "txid" in t, K = (t) => {
|
|
16
|
+
const e = BigInt(Number.MAX_SAFE_INTEGER);
|
|
17
|
+
return t > e ? Number.MAX_SAFE_INTEGER : t < -e ? -Number.MAX_SAFE_INTEGER : Number(t);
|
|
18
|
+
}, Z = (t) => ({
|
|
19
|
+
nonceLength: t.nonceLength,
|
|
20
|
+
prefix: new Uint8Array(t.prefix),
|
|
21
|
+
suffix: new Uint8Array(t.suffix),
|
|
22
|
+
useCborNonce: t.useCborNonce
|
|
23
|
+
}), M = (t, e) => {
|
|
24
|
+
t.set(e.nonceLength, Z(e));
|
|
25
|
+
}, $ = async (t, e, n, s, i) => {
|
|
26
|
+
const u = t.get(s.nonceLength);
|
|
27
|
+
if (u)
|
|
28
|
+
return u;
|
|
29
|
+
const p = e.build_mining_template(
|
|
30
|
+
n.inputs,
|
|
31
|
+
n.outputs,
|
|
32
|
+
i,
|
|
33
|
+
BigInt(n.satsPerVbyte),
|
|
34
|
+
s.start,
|
|
35
|
+
s.size,
|
|
36
|
+
n.distribution ?? null
|
|
37
|
+
), a = {
|
|
38
|
+
...p,
|
|
39
|
+
nonceLength: s.nonceLength,
|
|
40
|
+
useCborNonce: p.useCborNonce ?? n.useCborNonce
|
|
41
|
+
};
|
|
42
|
+
return M(t, a), a;
|
|
43
|
+
}, X = async (t, e, n, s, i, u, p, a) => {
|
|
44
|
+
if (e === "gpu") {
|
|
45
|
+
if (!t.mine_batch_gpu)
|
|
46
|
+
throw new Error("GPU mining requested but mine_batch_gpu is unavailable");
|
|
47
|
+
return t.mine_batch_gpu(
|
|
48
|
+
n,
|
|
49
|
+
s,
|
|
50
|
+
i,
|
|
51
|
+
u,
|
|
52
|
+
p,
|
|
53
|
+
a
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
return t.mine_batch_wasm(
|
|
57
|
+
n,
|
|
58
|
+
s,
|
|
59
|
+
i,
|
|
60
|
+
u,
|
|
61
|
+
p,
|
|
62
|
+
a
|
|
63
|
+
);
|
|
64
|
+
}, j = async (t, e) => {
|
|
65
|
+
let n;
|
|
66
|
+
try {
|
|
67
|
+
if (n = await C(), m === "gpu") {
|
|
68
|
+
if (!n.mine_batch_gpu) {
|
|
69
|
+
b(
|
|
70
|
+
"GPU mining requested but mine_batch_gpu is unavailable",
|
|
71
|
+
r.WEBGPU_NOT_AVAILABLE
|
|
72
|
+
);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
n.init_gpu && await n.init_gpu();
|
|
76
|
+
}
|
|
77
|
+
} catch (d) {
|
|
78
|
+
const _ = R(d), h = m === "gpu" ? r.WEBGPU_NOT_AVAILABLE : r.WORKER_ERROR;
|
|
79
|
+
b(`Failed to initialize WASM: ${_}`, h);
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
const s = /* @__PURE__ */ new Map(), i = t.template.useCborNonce ?? !!(t.distribution && t.distribution.length > 0);
|
|
83
|
+
M(s, { ...t.template, useCborNonce: i });
|
|
84
|
+
const u = t.nonceStep ?? BigInt(t.batchSize), p = t.network === "signet" ? "testnet" : t.network;
|
|
85
|
+
let a = t.startNonce, N = 0n;
|
|
86
|
+
const T = performance.now();
|
|
87
|
+
for (; !e.signal.aborted; ) {
|
|
88
|
+
const d = a;
|
|
89
|
+
let _ = t.batchSize, h = 0n;
|
|
90
|
+
for (; _ > 0 && !e.signal.aborted; ) {
|
|
91
|
+
const B = d + h;
|
|
92
|
+
let o;
|
|
93
|
+
try {
|
|
94
|
+
o = (i ? U(B, _) : V(B, _))[0];
|
|
95
|
+
} catch (l) {
|
|
96
|
+
b(
|
|
97
|
+
`Invalid nonce range: ${R(l)}`,
|
|
98
|
+
r.INVALID_INPUT
|
|
99
|
+
), e.abort();
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
let I;
|
|
103
|
+
try {
|
|
104
|
+
I = await $(
|
|
105
|
+
s,
|
|
106
|
+
n,
|
|
107
|
+
{
|
|
108
|
+
inputs: t.inputs,
|
|
109
|
+
outputs: t.outputs,
|
|
110
|
+
satsPerVbyte: t.satsPerVbyte,
|
|
111
|
+
distribution: t.distribution,
|
|
112
|
+
useCborNonce: i
|
|
113
|
+
},
|
|
114
|
+
o,
|
|
115
|
+
p
|
|
116
|
+
);
|
|
117
|
+
} catch (l) {
|
|
118
|
+
b(
|
|
119
|
+
`Failed to build mining template: ${R(l)}`,
|
|
120
|
+
r.WORKER_ERROR
|
|
121
|
+
), e.abort();
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
let c;
|
|
125
|
+
const O = performance.now();
|
|
126
|
+
try {
|
|
127
|
+
c = await X(
|
|
128
|
+
n,
|
|
129
|
+
m,
|
|
130
|
+
I.prefix,
|
|
131
|
+
I.suffix,
|
|
132
|
+
o.start,
|
|
133
|
+
o.size,
|
|
134
|
+
t.targetZeros,
|
|
135
|
+
i
|
|
136
|
+
);
|
|
137
|
+
} catch (l) {
|
|
138
|
+
const E = R(l);
|
|
139
|
+
b(
|
|
140
|
+
`Batch mining failed: ${E}`,
|
|
141
|
+
r.WORKER_ERROR
|
|
142
|
+
), e.abort();
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
const S = performance.now() - O;
|
|
146
|
+
if (D(c)) {
|
|
147
|
+
if (!c.ok) {
|
|
148
|
+
b(
|
|
149
|
+
c.error ?? "Validation failed",
|
|
150
|
+
r.INVALID_INPUT
|
|
151
|
+
), e.abort();
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
} else if (F(c)) {
|
|
155
|
+
const l = N + h, E = BigInt(c.nonce) - o.start + 1n, A = l + E, y = performance.now() - T, L = y > 0 ? K(A) / (y / 1e3) : 0, P = o.start + E - 1n, x = {
|
|
156
|
+
psbt: "",
|
|
157
|
+
txid: c.txid,
|
|
158
|
+
nonce: BigInt(c.nonce),
|
|
159
|
+
attempts: A,
|
|
160
|
+
duration: y,
|
|
161
|
+
hashRate: L
|
|
162
|
+
};
|
|
163
|
+
g({
|
|
164
|
+
type: "found",
|
|
165
|
+
result: x,
|
|
166
|
+
hashesProcessed: A,
|
|
167
|
+
hashRate: L,
|
|
168
|
+
lastNonce: P
|
|
169
|
+
}), e.abort();
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
N += BigInt(o.size), h += BigInt(o.size), _ -= o.size;
|
|
173
|
+
const W = S > 0 ? o.size / (S / 1e3) : o.size, k = o.start + BigInt(o.size) - 1n;
|
|
174
|
+
g({ type: "progress", hashesProcessed: N, hashRate: W, lastNonce: k });
|
|
175
|
+
}
|
|
176
|
+
if (e.signal.aborted)
|
|
177
|
+
break;
|
|
178
|
+
const z = d + BigInt(t.batchSize) - 1n;
|
|
179
|
+
g({ type: "batch_complete", lastNonce: z }), a = d + u;
|
|
180
|
+
}
|
|
181
|
+
}, q = (t) => {
|
|
182
|
+
const e = new AbortController();
|
|
183
|
+
f?.abort(), f = e, j(t, e).finally(() => {
|
|
184
|
+
f === e && (f = null);
|
|
185
|
+
});
|
|
186
|
+
};
|
|
187
|
+
w.addEventListener("message", (t) => {
|
|
188
|
+
const e = t.data;
|
|
189
|
+
switch (e.type) {
|
|
190
|
+
case "init":
|
|
191
|
+
m = e.mode, g({ type: "ready" });
|
|
192
|
+
break;
|
|
193
|
+
case "mine":
|
|
194
|
+
q(e);
|
|
195
|
+
break;
|
|
196
|
+
case "stop":
|
|
197
|
+
f?.abort();
|
|
198
|
+
break;
|
|
199
|
+
default:
|
|
200
|
+
b(
|
|
201
|
+
`Unknown message type: ${e.type}`,
|
|
202
|
+
r.WORKER_ERROR
|
|
203
|
+
);
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
//# sourceMappingURL=worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.js","sources":["../src/worker.ts"],"sourcesContent":["// Bootstrap: define a sensible default for WASM base path in worker context.\n// Workers don't have `window`, but `self` provides location. This must run\n// before any import that calls resolveWasmBase().\nif (typeof (globalThis as { __ZELDMINER_WASM_BASE__?: unknown }).__ZELDMINER_WASM_BASE__ === \"undefined\") {\n try {\n const origin =\n typeof self !== \"undefined\" && (self as { location?: { origin?: string } }).location?.origin\n ? (self as { location?: { origin?: string } }).location!.origin\n : \"http://localhost\";\n (globalThis as { __ZELDMINER_WASM_BASE__?: string }).__ZELDMINER_WASM_BASE__ = new URL(\"/wasm/\", origin!).href;\n } catch {\n (globalThis as { __ZELDMINER_WASM_BASE__?: string }).__ZELDMINER_WASM_BASE__ = \"/wasm/\";\n }\n}\n\nimport type {\n MineResult,\n ValidationResult,\n WasmExports,\n WorkerMessage,\n WorkerMode,\n WorkerTemplate,\n WorkerResponse,\n} from \"./types\";\nimport { ZeldMinerErrorCode } from \"./types\";\nimport { splitNonceSegments, splitNonceSegmentsCbor } from \"./nonce\";\nimport { loadWasm } from \"./wasm\";\n\ntype MineMessage = Extract<WorkerMessage, { type: \"mine\" }>;\n\nconst ctx = self as unknown as DedicatedWorkerGlobalScope;\nconst workerId =\n (ctx as DedicatedWorkerGlobalScope & { name?: string }).name ?? undefined;\n\nconst formatError = (err: unknown): string =>\n err instanceof Error ? err.message : String(err);\n\nlet currentMode: WorkerMode = \"cpu\";\nlet miningAbort: AbortController | null = null;\nlet miningPromise: Promise<void> | null = null;\n\nconst post = (message: WorkerResponse): void => {\n ctx.postMessage({ ...message, workerId });\n};\n\nconst postError = (\n message: string,\n code: ZeldMinerErrorCode = ZeldMinerErrorCode.WORKER_ERROR,\n details?: Record<string, unknown>\n): void => {\n post({ type: \"error\", message, code, details });\n};\n\nconst isValidationResult = (val: unknown): val is ValidationResult =>\n typeof val === \"object\" && val !== null && \"ok\" in (val as object);\n\nconst isMineResult = (\n val: unknown\n): val is { nonce: bigint; txid: string } =>\n typeof val === \"object\" &&\n val !== null &&\n \"nonce\" in (val as object) &&\n \"txid\" in (val as object);\n\nconst safeBigIntToNumber = (value: bigint): number => {\n const max = BigInt(Number.MAX_SAFE_INTEGER);\n if (value > max) return Number.MAX_SAFE_INTEGER;\n if (value < -max) return -Number.MAX_SAFE_INTEGER;\n return Number(value);\n};\n\ntype TemplateCache = Map<number, WorkerTemplate>;\n\nconst cloneTemplate = (template: WorkerTemplate): WorkerTemplate => ({\n nonceLength: template.nonceLength,\n prefix: new Uint8Array(template.prefix),\n suffix: new Uint8Array(template.suffix),\n useCborNonce: template.useCborNonce,\n});\n\nconst cacheTemplate = (cache: TemplateCache, template: WorkerTemplate): void => {\n cache.set(template.nonceLength, cloneTemplate(template));\n};\n\nconst ensureTemplateForSegment = async (\n cache: TemplateCache,\n wasm: WasmExports,\n params: {\n inputs: MineMessage[\"inputs\"];\n outputs: MineMessage[\"outputs\"];\n satsPerVbyte: number;\n distribution?: bigint[];\n useCborNonce: boolean;\n },\n segment: { start: bigint; size: number; nonceLength: number },\n normalizedNetwork: MineMessage[\"network\"]\n): Promise<WorkerTemplate> => {\n const cached = cache.get(segment.nonceLength);\n if (cached) {\n return cached;\n }\n\n const template = wasm.build_mining_template(\n params.inputs,\n params.outputs,\n normalizedNetwork,\n BigInt(params.satsPerVbyte),\n segment.start,\n segment.size,\n params.distribution ?? null\n );\n\n const built: WorkerTemplate = {\n ...template,\n nonceLength: segment.nonceLength,\n useCborNonce: template.useCborNonce ?? params.useCborNonce,\n };\n\n cacheTemplate(cache, built);\n return built;\n};\n\nconst runBatch = async (\n wasm: WasmExports,\n mode: WorkerMode,\n prefix: Uint8Array,\n suffix: Uint8Array,\n startNonce: bigint,\n batchSize: number,\n targetZeros: number,\n useCborNonce: boolean\n): Promise<unknown> => {\n if (mode === \"gpu\") {\n if (!wasm.mine_batch_gpu) {\n throw new Error(\"GPU mining requested but mine_batch_gpu is unavailable\");\n }\n return wasm.mine_batch_gpu(\n prefix,\n suffix,\n startNonce,\n batchSize,\n targetZeros,\n useCborNonce\n );\n }\n\n return wasm.mine_batch_wasm(\n prefix,\n suffix,\n startNonce,\n batchSize,\n targetZeros,\n useCborNonce\n );\n};\n\nconst mineLoop = async (msg: MineMessage, abort: AbortController): Promise<void> => {\n let wasm: WasmExports;\n try {\n wasm = await loadWasm();\n if (currentMode === \"gpu\") {\n if (!wasm.mine_batch_gpu) {\n postError(\n \"GPU mining requested but mine_batch_gpu is unavailable\",\n ZeldMinerErrorCode.WEBGPU_NOT_AVAILABLE\n );\n return;\n }\n if (wasm.init_gpu) {\n await wasm.init_gpu();\n }\n }\n } catch (err) {\n const message = formatError(err);\n const code =\n currentMode === \"gpu\"\n ? ZeldMinerErrorCode.WEBGPU_NOT_AVAILABLE\n : ZeldMinerErrorCode.WORKER_ERROR;\n postError(`Failed to initialize WASM: ${message}`, code);\n return;\n }\n\n const templateCache: TemplateCache = new Map();\n const useCborNonce =\n msg.template.useCborNonce ?? Boolean(msg.distribution && msg.distribution.length > 0);\n cacheTemplate(templateCache, { ...msg.template, useCborNonce });\n\n const stride = msg.nonceStep ?? BigInt(msg.batchSize);\n const normalizedNetwork = msg.network === \"signet\" ? \"testnet\" : msg.network;\n let nextNonce = msg.startNonce;\n let hashesProcessed = 0n;\n const startedAt = performance.now();\n\n while (!abort.signal.aborted) {\n const iterationStart = nextNonce;\n let remaining = msg.batchSize;\n let processedInIteration = 0n;\n\n while (remaining > 0 && !abort.signal.aborted) {\n const segmentStart = iterationStart + processedInIteration;\n let segment: { start: bigint; size: number; nonceLength: number };\n\n try {\n const segments = useCborNonce\n ? splitNonceSegmentsCbor(segmentStart, remaining)\n : splitNonceSegments(segmentStart, remaining);\n segment = segments[0];\n } catch (err) {\n postError(\n `Invalid nonce range: ${formatError(err)}`,\n ZeldMinerErrorCode.INVALID_INPUT\n );\n abort.abort();\n return;\n }\n\n let template: WorkerTemplate;\n try {\n template = await ensureTemplateForSegment(\n templateCache,\n wasm,\n {\n inputs: msg.inputs,\n outputs: msg.outputs,\n satsPerVbyte: msg.satsPerVbyte,\n distribution: msg.distribution,\n useCborNonce,\n },\n segment,\n normalizedNetwork\n );\n } catch (err) {\n postError(\n `Failed to build mining template: ${formatError(err)}`,\n ZeldMinerErrorCode.WORKER_ERROR\n );\n abort.abort();\n return;\n }\n\n let output: unknown;\n const batchStartedAt = performance.now();\n try {\n output = await runBatch(\n wasm,\n currentMode,\n template.prefix,\n template.suffix,\n segment.start,\n segment.size,\n msg.targetZeros,\n useCborNonce\n );\n } catch (err) {\n const message = formatError(err);\n postError(\n `Batch mining failed: ${message}`,\n ZeldMinerErrorCode.WORKER_ERROR\n );\n abort.abort();\n return;\n }\n\n const batchDurationMs = performance.now() - batchStartedAt;\n\n if (isValidationResult(output)) {\n if (!output.ok) {\n postError(\n output.error ?? \"Validation failed\",\n ZeldMinerErrorCode.INVALID_INPUT\n );\n abort.abort();\n return;\n }\n } else if (isMineResult(output)) {\n const attemptsBefore = hashesProcessed + processedInIteration;\n const attemptsInSegment = BigInt(output.nonce) - segment.start + 1n;\n const totalAttempts = attemptsBefore + attemptsInSegment;\n const elapsedMs = performance.now() - startedAt;\n const hashRate =\n elapsedMs > 0\n ? safeBigIntToNumber(totalAttempts) / (elapsedMs / 1000)\n : 0;\n const lastNonce = segment.start + attemptsInSegment - 1n;\n\n const result: MineResult = {\n psbt: \"\",\n txid: output.txid,\n nonce: BigInt(output.nonce),\n attempts: totalAttempts,\n duration: elapsedMs,\n hashRate,\n };\n\n post({\n type: \"found\",\n result,\n hashesProcessed: totalAttempts,\n hashRate,\n lastNonce,\n });\n abort.abort();\n return;\n }\n\n hashesProcessed += BigInt(segment.size);\n processedInIteration += BigInt(segment.size);\n remaining -= segment.size;\n\n const hashRate =\n batchDurationMs > 0\n ? segment.size / (batchDurationMs / 1000)\n : segment.size;\n const lastNonce = segment.start + BigInt(segment.size) - 1n;\n\n post({ type: \"progress\", hashesProcessed, hashRate, lastNonce });\n }\n\n if (abort.signal.aborted) {\n break;\n }\n\n const lastNonce = iterationStart + BigInt(msg.batchSize) - 1n;\n post({ type: \"batch_complete\", lastNonce });\n\n nextNonce = iterationStart + stride;\n }\n};\n\nconst startMining = (msg: MineMessage): void => {\n const abort = new AbortController();\n miningAbort?.abort();\n miningAbort = abort;\n\n const promise = mineLoop(msg, abort).finally(() => {\n if (miningAbort === abort) {\n miningAbort = null;\n }\n if (miningPromise === promise) {\n miningPromise = null;\n }\n });\n\n miningPromise = promise;\n};\n\nctx.addEventListener(\"message\", (event: MessageEvent<WorkerMessage>) => {\n const data = event.data;\n\n switch (data.type) {\n case \"init\":\n currentMode = data.mode;\n post({ type: \"ready\" });\n break;\n case \"mine\":\n startMining(data);\n break;\n case \"stop\":\n miningAbort?.abort();\n break;\n default:\n postError(\n `Unknown message type: ${(data as { type?: string }).type}`,\n ZeldMinerErrorCode.WORKER_ERROR\n );\n }\n});\n\n"],"names":["origin","ctx","workerId","formatError","err","currentMode","miningAbort","post","message","postError","code","ZeldMinerErrorCode","details","isValidationResult","val","isMineResult","safeBigIntToNumber","value","max","cloneTemplate","template","cacheTemplate","cache","ensureTemplateForSegment","wasm","params","segment","normalizedNetwork","cached","built","runBatch","mode","prefix","suffix","startNonce","batchSize","targetZeros","useCborNonce","mineLoop","msg","abort","loadWasm","templateCache","stride","nextNonce","hashesProcessed","startedAt","iterationStart","remaining","processedInIteration","segmentStart","splitNonceSegmentsCbor","splitNonceSegments","output","batchStartedAt","batchDurationMs","attemptsBefore","attemptsInSegment","totalAttempts","elapsedMs","hashRate","lastNonce","result","startMining","event","data"],"mappings":";AAGA,IAAI,OAAQ,WAAqD,0BAA4B;AAC3F,MAAI;AACF,UAAMA,IACJ,OAAO,OAAS,OAAgB,KAA4C,UAAU,SACjF,KAA4C,SAAU,SACvD;AACL,eAAoD,0BAA0B,IAAI,IAAI,UAAUA,CAAO,EAAE;AAAA,EAC5G,QAAQ;AACL,eAAoD,0BAA0B;AAAA,EACjF;AAkBF,MAAMC,IAAM,MACNC,IACHD,EAAuD,QAAQ,QAE5DE,IAAc,CAACC,MACnBA,aAAe,QAAQA,EAAI,UAAU,OAAOA,CAAG;AAEjD,IAAIC,IAA0B,OAC1BC,IAAsC;AAG1C,MAAMC,IAAO,CAACC,MAAkC;AAC9C,EAAAP,EAAI,YAAY,EAAE,GAAGO,GAAS,UAAAN,GAAU;AAC1C,GAEMO,IAAY,CAChBD,GACAE,IAA2BC,EAAmB,cAC9CC,MACS;AACT,EAAAL,EAAK,EAAE,MAAM,SAAS,SAAAC,GAAS,MAAAE,GAAM,SAAAE,GAAS;AAChD,GAEMC,IAAqB,CAACC,MAC1B,OAAOA,KAAQ,YAAYA,MAAQ,QAAQ,QAASA,GAEhDC,IAAe,CACnBD,MAEA,OAAOA,KAAQ,YACfA,MAAQ,QACR,WAAYA,KACZ,UAAWA,GAEPE,IAAqB,CAACC,MAA0B;AACpD,QAAMC,IAAM,OAAO,OAAO,gBAAgB;AAC1C,SAAID,IAAQC,IAAY,OAAO,mBAC3BD,IAAQ,CAACC,IAAY,CAAC,OAAO,mBAC1B,OAAOD,CAAK;AACrB,GAIME,IAAgB,CAACC,OAA8C;AAAA,EACnE,aAAaA,EAAS;AAAA,EACtB,QAAQ,IAAI,WAAWA,EAAS,MAAM;AAAA,EACtC,QAAQ,IAAI,WAAWA,EAAS,MAAM;AAAA,EACtC,cAAcA,EAAS;AACzB,IAEMC,IAAgB,CAACC,GAAsBF,MAAmC;AAC9E,EAAAE,EAAM,IAAIF,EAAS,aAAaD,EAAcC,CAAQ,CAAC;AACzD,GAEMG,IAA2B,OAC/BD,GACAE,GACAC,GAOAC,GACAC,MAC4B;AAC5B,QAAMC,IAASN,EAAM,IAAII,EAAQ,WAAW;AAC5C,MAAIE;AACF,WAAOA;AAGT,QAAMR,IAAWI,EAAK;AAAA,IACpBC,EAAO;AAAA,IACPA,EAAO;AAAA,IACPE;AAAA,IACA,OAAOF,EAAO,YAAY;AAAA,IAC1BC,EAAQ;AAAA,IACRA,EAAQ;AAAA,IACRD,EAAO,gBAAgB;AAAA,EAAA,GAGnBI,IAAwB;AAAA,IAC5B,GAAGT;AAAA,IACH,aAAaM,EAAQ;AAAA,IACrB,cAAcN,EAAS,gBAAgBK,EAAO;AAAA,EAAA;AAGhD,SAAAJ,EAAcC,GAAOO,CAAK,GACnBA;AACT,GAEMC,IAAW,OACfN,GACAO,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,MACqB;AACrB,MAAIN,MAAS,OAAO;AAClB,QAAI,CAACP,EAAK;AACR,YAAM,IAAI,MAAM,wDAAwD;AAE1E,WAAOA,EAAK;AAAA,MACVQ;AAAA,MACAC;AAAA,MACAC;AAAA,MACAC;AAAA,MACAC;AAAA,MACAC;AAAA,IAAA;AAAA,EAEJ;AAEA,SAAOb,EAAK;AAAA,IACVQ;AAAA,IACAC;AAAA,IACAC;AAAA,IACAC;AAAA,IACAC;AAAA,IACAC;AAAA,EAAA;AAEJ,GAEMC,IAAW,OAAOC,GAAkBC,MAA0C;AAClF,MAAIhB;AACJ,MAAI;AAEF,QADAA,IAAO,MAAMiB,EAAA,GACTpC,MAAgB,OAAO;AACzB,UAAI,CAACmB,EAAK,gBAAgB;AACxB,QAAAf;AAAA,UACE;AAAA,UACAE,EAAmB;AAAA,QAAA;AAErB;AAAA,MACF;AACA,MAAIa,EAAK,YACP,MAAMA,EAAK,SAAA;AAAA,IAEf;AAAA,EACF,SAASpB,GAAK;AACZ,UAAMI,IAAUL,EAAYC,CAAG,GACzBM,IACJL,MAAgB,QACZM,EAAmB,uBACnBA,EAAmB;AACzB,IAAAF,EAAU,8BAA8BD,CAAO,IAAIE,CAAI;AACvD;AAAA,EACF;AAEA,QAAMgC,wBAAmC,IAAA,GACnCL,IACJE,EAAI,SAAS,gBAAgB,GAAQA,EAAI,gBAAgBA,EAAI,aAAa,SAAS;AACrF,EAAAlB,EAAcqB,GAAe,EAAE,GAAGH,EAAI,UAAU,cAAAF,GAAc;AAE9D,QAAMM,IAASJ,EAAI,aAAa,OAAOA,EAAI,SAAS,GAC9CZ,IAAoBY,EAAI,YAAY,WAAW,YAAYA,EAAI;AACrE,MAAIK,IAAYL,EAAI,YAChBM,IAAkB;AACtB,QAAMC,IAAY,YAAY,IAAA;AAE9B,SAAO,CAACN,EAAM,OAAO,WAAS;AAC5B,UAAMO,IAAiBH;AACvB,QAAII,IAAYT,EAAI,WAChBU,IAAuB;AAE3B,WAAOD,IAAY,KAAK,CAACR,EAAM,OAAO,WAAS;AAC7C,YAAMU,IAAeH,IAAiBE;AACtC,UAAIvB;AAEJ,UAAI;AAIF,QAAAA,KAHiBW,IACbc,EAAuBD,GAAcF,CAAS,IAC9CI,EAAmBF,GAAcF,CAAS,GAC3B,CAAC;AAAA,MACtB,SAAS5C,GAAK;AACZ,QAAAK;AAAA,UACE,wBAAwBN,EAAYC,CAAG,CAAC;AAAA,UACxCO,EAAmB;AAAA,QAAA,GAErB6B,EAAM,MAAA;AACN;AAAA,MACF;AAEA,UAAIpB;AACJ,UAAI;AACF,QAAAA,IAAW,MAAMG;AAAA,UACfmB;AAAA,UACAlB;AAAA,UACA;AAAA,YACE,QAAQe,EAAI;AAAA,YACZ,SAASA,EAAI;AAAA,YACb,cAAcA,EAAI;AAAA,YAClB,cAAcA,EAAI;AAAA,YAClB,cAAAF;AAAA,UAAA;AAAA,UAEFX;AAAA,UACAC;AAAA,QAAA;AAAA,MAEJ,SAASvB,GAAK;AACZ,QAAAK;AAAA,UACE,oCAAoCN,EAAYC,CAAG,CAAC;AAAA,UACpDO,EAAmB;AAAA,QAAA,GAErB6B,EAAM,MAAA;AACN;AAAA,MACF;AAEA,UAAIa;AACJ,YAAMC,IAAiB,YAAY,IAAA;AACnC,UAAI;AACF,QAAAD,IAAS,MAAMvB;AAAA,UACbN;AAAA,UACAnB;AAAA,UACAe,EAAS;AAAA,UACTA,EAAS;AAAA,UACTM,EAAQ;AAAA,UACRA,EAAQ;AAAA,UACRa,EAAI;AAAA,UACJF;AAAA,QAAA;AAAA,MAEJ,SAASjC,GAAK;AACZ,cAAMI,IAAUL,EAAYC,CAAG;AAC/B,QAAAK;AAAA,UACE,wBAAwBD,CAAO;AAAA,UAC/BG,EAAmB;AAAA,QAAA,GAErB6B,EAAM,MAAA;AACN;AAAA,MACF;AAEA,YAAMe,IAAkB,YAAY,IAAA,IAAQD;AAE5C,UAAIzC,EAAmBwC,CAAM;AAC3B,YAAI,CAACA,EAAO,IAAI;AACd,UAAA5C;AAAA,YACE4C,EAAO,SAAS;AAAA,YAChB1C,EAAmB;AAAA,UAAA,GAErB6B,EAAM,MAAA;AACN;AAAA,QACF;AAAA,iBACSzB,EAAasC,CAAM,GAAG;AAC/B,cAAMG,IAAiBX,IAAkBI,GACnCQ,IAAoB,OAAOJ,EAAO,KAAK,IAAI3B,EAAQ,QAAQ,IAC3DgC,IAAgBF,IAAiBC,GACjCE,IAAY,YAAY,IAAA,IAAQb,GAChCc,IACJD,IAAY,IACR3C,EAAmB0C,CAAa,KAAKC,IAAY,OACjD,GACAE,IAAYnC,EAAQ,QAAQ+B,IAAoB,IAEhDK,IAAqB;AAAA,UACzB,MAAM;AAAA,UACN,MAAMT,EAAO;AAAA,UACb,OAAO,OAAOA,EAAO,KAAK;AAAA,UAC1B,UAAUK;AAAA,UACV,UAAUC;AAAA,UACV,UAAAC;AAAAA,QAAA;AAGF,QAAArD,EAAK;AAAA,UACH,MAAM;AAAA,UACN,QAAAuD;AAAA,UACA,iBAAiBJ;AAAA,UACjB,UAAAE;AAAAA,UACA,WAAAC;AAAAA,QAAA,CACD,GACDrB,EAAM,MAAA;AACN;AAAA,MACF;AAEA,MAAAK,KAAmB,OAAOnB,EAAQ,IAAI,GACtCuB,KAAwB,OAAOvB,EAAQ,IAAI,GAC3CsB,KAAatB,EAAQ;AAErB,YAAMkC,IACJL,IAAkB,IACd7B,EAAQ,QAAQ6B,IAAkB,OAClC7B,EAAQ,MACRmC,IAAYnC,EAAQ,QAAQ,OAAOA,EAAQ,IAAI,IAAI;AAEzD,MAAAnB,EAAK,EAAE,MAAM,YAAY,iBAAAsC,GAAiB,UAAAe,GAAU,WAAAC,GAAW;AAAA,IACjE;AAEA,QAAIrB,EAAM,OAAO;AACf;AAGF,UAAMqB,IAAYd,IAAiB,OAAOR,EAAI,SAAS,IAAI;AAC3D,IAAAhC,EAAK,EAAE,MAAM,kBAAkB,WAAAsD,EAAA,CAAW,GAE1CjB,IAAYG,IAAiBJ;AAAA,EAC/B;AACF,GAEMoB,IAAc,CAACxB,MAA2B;AAC9C,QAAMC,IAAQ,IAAI,gBAAA;AAClB,EAAAlC,GAAa,MAAA,GACbA,IAAckC,GAEEF,EAASC,GAAKC,CAAK,EAAE,QAAQ,MAAM;AACjD,IAAIlC,MAAgBkC,MAClBlC,IAAc;AAAA,EAKlB,CAAC;AAGH;AAEAL,EAAI,iBAAiB,WAAW,CAAC+D,MAAuC;AACtE,QAAMC,IAAOD,EAAM;AAEnB,UAAQC,EAAK,MAAA;AAAA,IACX,KAAK;AACH,MAAA5D,IAAc4D,EAAK,MACnB1D,EAAK,EAAE,MAAM,SAAS;AACtB;AAAA,IACF,KAAK;AACH,MAAAwD,EAAYE,CAAI;AAChB;AAAA,IACF,KAAK;AACH,MAAA3D,GAAa,MAAA;AACb;AAAA,IACF;AACE,MAAAG;AAAA,QACE,yBAA0BwD,EAA2B,IAAI;AAAA,QACzDtD,EAAmB;AAAA,MAAA;AAAA,EACrB;AAEN,CAAC;"}
|
package/package.json
CHANGED
|
Binary file
|