cubing 0.33.5 → 0.34.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -0
- package/dist/esm/alg/index.d.ts +1 -0
- package/dist/esm/bluetooth/index.d.ts +1 -0
- package/dist/esm/{chunk-2IZUSAXQ.js → chunk-DFZ2CYSE.js} +2 -2
- package/dist/esm/{chunk-2IZUSAXQ.js.map → chunk-DFZ2CYSE.js.map} +0 -0
- package/dist/esm/{chunk-4PMIYWH6.js → chunk-JP5K75RS.js} +65 -25
- package/dist/esm/chunk-JP5K75RS.js.map +7 -0
- package/dist/esm/{chunk-ZB3P5AZN.js → chunk-KJUHIZ2G.js} +5 -2
- package/dist/esm/{chunk-ZB3P5AZN.js.map → chunk-KJUHIZ2G.js.map} +2 -2
- package/dist/esm/{search-worker-js-entry-HOSYFG74.js → chunk-YVAFBRBY.js} +39 -15
- package/dist/esm/{search-worker-js-entry-HOSYFG74.js.map → chunk-YVAFBRBY.js.map} +3 -3
- package/dist/esm/kpuzzle/index.d.ts +1 -0
- package/dist/esm/notation/index.d.ts +1 -0
- package/dist/esm/protocol/index.d.ts +1 -0
- package/dist/esm/puzzle-geometry/index.d.ts +1 -0
- package/dist/esm/puzzles/index.d.ts +1 -0
- package/dist/esm/scramble/index.d.ts +1 -0
- package/dist/esm/scramble/index.js +8 -2
- package/dist/esm/search/index.d.ts +1 -0
- package/dist/esm/search/index.js +13 -9
- package/dist/esm/search-worker-inside-generated-string-DMDMZ2CN.js +4068 -0
- package/dist/esm/search-worker-inside-generated-string-DMDMZ2CN.js.map +7 -0
- package/dist/esm/search-worker-js-entry-GX4FDVEU.js +17 -0
- package/dist/esm/search-worker-js-entry-GX4FDVEU.js.map +7 -0
- package/dist/esm/{search-worker-ts-entry-5EA5JZUZ.js → search-worker-ts-entry-T74L3KPK.js} +4 -4
- package/dist/esm/{search-worker-ts-entry-5EA5JZUZ.js.map → search-worker-ts-entry-T74L3KPK.js.map} +0 -0
- package/dist/esm/stream/index.d.ts +1 -0
- package/dist/esm/twisty/index.d.ts +1 -0
- package/dist/esm/twsearch-AX3PCK5B-2AJ4BG2P.js +3163 -0
- package/dist/esm/twsearch-AX3PCK5B-2AJ4BG2P.js.map +7 -0
- package/dist/esm/twsearch-HSPUII33.js +121 -0
- package/dist/esm/twsearch-HSPUII33.js.map +7 -0
- package/dist/types/{Alg-8b4e9255.d.ts → Alg-3c1c16f6.d.ts} +6 -6
- package/dist/types/{KState-0da22515.d.ts → KState-82c7bd49.d.ts} +17 -17
- package/dist/types/{TwizzleLink-f790571d.d.ts → TwizzleLink-adf00931.d.ts} +59 -59
- package/dist/types/alg/index.d.ts +4 -4
- package/dist/types/bluetooth/index.d.ts +6 -6
- package/dist/types/{bluetooth-puzzle-62e2b423.d.ts → bluetooth-puzzle-084aff86.d.ts} +2 -2
- package/dist/types/kpuzzle/index.d.ts +2 -2
- package/dist/types/notation/index.d.ts +1 -1
- package/dist/types/{outside-58bc5f1a.d.ts → outside-603398e2.d.ts} +8 -3
- package/dist/types/parseAlg-e1af1cb1.d.ts +9 -0
- package/dist/types/protocol/index.d.ts +3 -3
- package/dist/types/puzzle-geometry/index.d.ts +3 -3
- package/dist/types/puzzles/index.d.ts +5 -5
- package/dist/types/scramble/index.d.ts +3 -3
- package/dist/types/search/index.d.ts +3 -3
- package/dist/types/stream/index.d.ts +5 -5
- package/dist/types/twisty/index.d.ts +5 -5
- package/package.json +5 -3
- package/dist/esm/chunk-4PMIYWH6.js.map +0 -7
- package/dist/esm/search-worker-inside-generated-string-BQOV7WQF.js +0 -4063
- package/dist/esm/search-worker-inside-generated-string-BQOV7WQF.js.map +0 -7
- package/dist/types/parseAlg-2dd4194b.d.ts +0 -9
package/README.md
CHANGED
|
@@ -52,6 +52,10 @@ make dev
|
|
|
52
52
|
|
|
53
53
|
To quickly check any changes for issues, try `make test-fast`. Run `make test` for more thorough testing options.
|
|
54
54
|
|
|
55
|
+
### Developing on Windows
|
|
56
|
+
|
|
57
|
+
We recommend using Microsoft's [Windows Subsystem for Linux (WSL)](https://learn.microsoft.com/en-us/windows/wsl/about) to develop `cubing.js` on Windows.
|
|
58
|
+
|
|
55
59
|
## Acknowledgments
|
|
56
60
|
|
|
57
61
|
As of this time, `cubing.js` primarily contains code by [Lucas Garron (@lgarron)](https://github.com/lgarron) and [Tom Rokicki (@rokicki)](https://github.com/rokicki). Significant parts of the cubing code also are from:
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "../../types/alg";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "../../types/bluetooth";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
node_adapter_default
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-KJUHIZ2G.js";
|
|
4
4
|
|
|
5
5
|
// src/cubing/vendor/comlink-everywhere/inside/index.ts
|
|
6
6
|
import { expose as comlinkExpose } from "comlink";
|
|
@@ -28,4 +28,4 @@ export {
|
|
|
28
28
|
nodeEndpointPort,
|
|
29
29
|
expose
|
|
30
30
|
};
|
|
31
|
-
//# sourceMappingURL=chunk-
|
|
31
|
+
//# sourceMappingURL=chunk-DFZ2CYSE.js.map
|
|
File without changes
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
+
import {
|
|
2
|
+
insideAPI
|
|
3
|
+
} from "./chunk-YVAFBRBY.js";
|
|
1
4
|
import {
|
|
2
5
|
exposeAPI
|
|
3
6
|
} from "./chunk-RHC3DIN3.js";
|
|
4
7
|
import {
|
|
5
8
|
node_adapter_default
|
|
6
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-KJUHIZ2G.js";
|
|
7
10
|
import {
|
|
8
11
|
Alg
|
|
9
12
|
} from "./chunk-IJP4IAGZ.js";
|
|
@@ -106,7 +109,7 @@ async function constructWorker(source, options) {
|
|
|
106
109
|
// src/cubing/search/inside/search-worker-ts-entry-path-getter.ts
|
|
107
110
|
exposeAPI.expose = false;
|
|
108
111
|
async function getWorkerEntryFileURL() {
|
|
109
|
-
return (await import("./search-worker-ts-entry-
|
|
112
|
+
return (await import("./search-worker-ts-entry-T74L3KPK.js")).WORKER_ENTRY_FILE_URL;
|
|
110
113
|
}
|
|
111
114
|
|
|
112
115
|
// src/cubing/search/instantiator.ts
|
|
@@ -142,7 +145,7 @@ async function instantiateModuleWorker() {
|
|
|
142
145
|
const onFirstMessage = (messageData) => {
|
|
143
146
|
if (messageData === "comlink-exposed") {
|
|
144
147
|
clearTimeout(timeoutID);
|
|
145
|
-
resolve(
|
|
148
|
+
resolve(wrapWithTerminate(worker));
|
|
146
149
|
} else {
|
|
147
150
|
reject(
|
|
148
151
|
new Error(`wrong module instantiation message ${messageData}`)
|
|
@@ -164,25 +167,30 @@ async function instantiateModuleWorker() {
|
|
|
164
167
|
}
|
|
165
168
|
});
|
|
166
169
|
}
|
|
170
|
+
function wrapWithTerminate(worker) {
|
|
171
|
+
const insideAPI2 = wrap(worker);
|
|
172
|
+
const terminate = worker.terminate.bind(worker);
|
|
173
|
+
return { insideAPI: insideAPI2, outsideAPI: { terminate } };
|
|
174
|
+
}
|
|
167
175
|
async function instantiateClassicWorker() {
|
|
168
|
-
const { workerSource } = await import("./search-worker-inside-generated-string-
|
|
176
|
+
const { workerSource } = await import("./search-worker-inside-generated-string-DMDMZ2CN.js");
|
|
169
177
|
const worker = await constructWorker(workerSource, { eval: true });
|
|
170
|
-
return
|
|
178
|
+
return wrapWithTerminate(worker);
|
|
171
179
|
}
|
|
172
|
-
var
|
|
180
|
+
var allInsideOutsideAPIPromises = [];
|
|
173
181
|
async function instantiateWorker() {
|
|
174
|
-
const
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
});
|
|
182
|
-
return workerPromise;
|
|
182
|
+
const insideOutsideAPIPromise = instantiateWorkerImplementation();
|
|
183
|
+
allInsideOutsideAPIPromises.push(insideOutsideAPIPromise);
|
|
184
|
+
insideAPI.setDebugMeasurePerf(searchOutsideDebugGlobals.logPerf);
|
|
185
|
+
insideAPI.setScramblePrefetchLevel(
|
|
186
|
+
searchOutsideDebugGlobals.scramblePrefetchLevel
|
|
187
|
+
);
|
|
188
|
+
return insideOutsideAPIPromise;
|
|
183
189
|
}
|
|
184
190
|
async function mapToAllWorkers(f) {
|
|
185
|
-
await Promise.all(
|
|
191
|
+
await Promise.all(
|
|
192
|
+
allInsideOutsideAPIPromises.map((worker) => worker.then(f))
|
|
193
|
+
);
|
|
186
194
|
}
|
|
187
195
|
async function instantiateWorkerImplementation() {
|
|
188
196
|
if (searchOutsideDebugGlobals.forceStringWorker) {
|
|
@@ -227,27 +235,56 @@ async function _randomScrambleStringForEvent(eventID) {
|
|
|
227
235
|
if (searchOutsideDebugGlobals.forceNewWorkerForEveryScramble) {
|
|
228
236
|
}
|
|
229
237
|
const worker = searchOutsideDebugGlobals.forceNewWorkerForEveryScramble ? await instantiateWorker() : await getCachedWorkerInstance();
|
|
230
|
-
return worker.randomScrambleStringForEvent(eventID);
|
|
238
|
+
return worker.insideAPI.randomScrambleStringForEvent(eventID);
|
|
231
239
|
}
|
|
232
240
|
async function experimentalSolve3x3x3IgnoringCenters(state) {
|
|
233
241
|
const cwi = await getCachedWorkerInstance();
|
|
234
|
-
return Alg.fromString(await cwi.solve333ToString(state.stateData));
|
|
242
|
+
return Alg.fromString(await cwi.insideAPI.solve333ToString(state.stateData));
|
|
235
243
|
}
|
|
236
244
|
async function experimentalSolve2x2x2(state) {
|
|
237
245
|
const cwi = await getCachedWorkerInstance();
|
|
238
|
-
return Alg.fromString(await cwi.solve222ToString(state.stateData));
|
|
246
|
+
return Alg.fromString(await cwi.insideAPI.solve222ToString(state.stateData));
|
|
239
247
|
}
|
|
240
248
|
async function solveSkewb(state) {
|
|
241
249
|
const cwi = await getCachedWorkerInstance();
|
|
242
|
-
return Alg.fromString(
|
|
250
|
+
return Alg.fromString(
|
|
251
|
+
await cwi.insideAPI.solveSkewbToString(state.stateData)
|
|
252
|
+
);
|
|
243
253
|
}
|
|
244
254
|
async function solvePyraminx(state) {
|
|
245
255
|
const cwi = await getCachedWorkerInstance();
|
|
246
|
-
return Alg.fromString(
|
|
256
|
+
return Alg.fromString(
|
|
257
|
+
await cwi.insideAPI.solvePyraminxToString(state.stateData)
|
|
258
|
+
);
|
|
247
259
|
}
|
|
248
260
|
async function solveMegaminx(state) {
|
|
249
261
|
const cwi = await getCachedWorkerInstance();
|
|
250
|
-
return Alg.fromString(
|
|
262
|
+
return Alg.fromString(
|
|
263
|
+
await cwi.insideAPI.solveMegaminxToString(state.stateData)
|
|
264
|
+
);
|
|
265
|
+
}
|
|
266
|
+
async function solveTwsearch(kpuzzle, state, options) {
|
|
267
|
+
const { startState, ...otherOptions } = options ?? {};
|
|
268
|
+
const apiOptions = otherOptions;
|
|
269
|
+
if (startState) {
|
|
270
|
+
apiOptions.startState = startState.experimentalToTransformation().transformationData;
|
|
271
|
+
}
|
|
272
|
+
const { ...def } = kpuzzle.definition;
|
|
273
|
+
delete def.experimentalIsStateSolved;
|
|
274
|
+
delete def.experimentalDerivedMoves;
|
|
275
|
+
const dedicatedWorker = await instantiateWorker();
|
|
276
|
+
try {
|
|
277
|
+
return Alg.fromString(
|
|
278
|
+
await dedicatedWorker.insideAPI.solveTwsearch(
|
|
279
|
+
def,
|
|
280
|
+
state.experimentalToTransformation().transformationData,
|
|
281
|
+
apiOptions
|
|
282
|
+
)
|
|
283
|
+
);
|
|
284
|
+
} finally {
|
|
285
|
+
console.log("Search ended, terminating dedicated `twsearch` worker.");
|
|
286
|
+
await dedicatedWorker.outsideAPI.terminate();
|
|
287
|
+
}
|
|
251
288
|
}
|
|
252
289
|
var searchOutsideDebugGlobals = {
|
|
253
290
|
logPerf: false,
|
|
@@ -260,12 +297,14 @@ function setDebug(options) {
|
|
|
260
297
|
const { logPerf, scramblePrefetchLevel } = options;
|
|
261
298
|
if (typeof logPerf !== "undefined") {
|
|
262
299
|
searchOutsideDebugGlobals.logPerf = logPerf;
|
|
263
|
-
mapToAllWorkers((worker) => worker.setDebugMeasurePerf(logPerf));
|
|
300
|
+
mapToAllWorkers((worker) => worker.insideAPI.setDebugMeasurePerf(logPerf));
|
|
264
301
|
}
|
|
265
302
|
if (typeof scramblePrefetchLevel !== "undefined") {
|
|
266
303
|
searchOutsideDebugGlobals.scramblePrefetchLevel = scramblePrefetchLevel;
|
|
267
304
|
mapToAllWorkers(
|
|
268
|
-
(worker) => worker.setScramblePrefetchLevel(
|
|
305
|
+
(worker) => worker.insideAPI.setScramblePrefetchLevel(
|
|
306
|
+
scramblePrefetchLevel
|
|
307
|
+
)
|
|
269
308
|
);
|
|
270
309
|
}
|
|
271
310
|
if ("forceStringWorker" in options) {
|
|
@@ -286,6 +325,7 @@ export {
|
|
|
286
325
|
solveSkewb,
|
|
287
326
|
solvePyraminx,
|
|
288
327
|
solveMegaminx,
|
|
328
|
+
solveTwsearch,
|
|
289
329
|
setDebug
|
|
290
330
|
};
|
|
291
|
-
//# sourceMappingURL=chunk-
|
|
331
|
+
//# sourceMappingURL=chunk-JP5K75RS.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/cubing/search/inside/solve/puzzles/clock.ts", "../../src/cubing/search/inside/solve/puzzles/wca-minx.ts", "../../src/cubing/vendor/comlink-everywhere/outside/index.ts", "../../src/cubing/search/inside/search-worker-ts-entry-path-getter.ts", "../../src/cubing/search/instantiator.ts", "../../src/cubing/search/outside.ts"],
|
|
4
|
+
"sourcesContent": ["import { randomUIntBelow } from \"random-uint-below\";\n\nconst pins = [\"UR\", \"DR\", \"DL\", \"UL\"];\nconst backMoves = [\"U\", \"R\", \"D\", \"L\", \"ALL\"];\nconst frontMoves = pins.concat(backMoves);\n\nexport function randomClockScrambleString(): string {\n let filteringMoveCount = 0;\n\n function randomSuffix() {\n const amount = randomUIntBelow(12);\n if (amount !== 0) {\n filteringMoveCount++;\n }\n if (amount <= 6) {\n return `${amount}+`;\n } else {\n return `${12 - amount}-`;\n }\n }\n\n const moves = [];\n function side(families: string[]): void {\n for (const family of families) {\n moves.push(`${family}${randomSuffix()}`);\n }\n }\n\n side(frontMoves);\n moves.push(\"y2\");\n side(backMoves);\n\n // https://www.worldcubeassociation.org/regulations/#4b3\n if (filteringMoveCount < 2) {\n return randomClockScrambleString();\n }\n\n for (const pin of pins) {\n if (randomUIntBelow(2) === 0) {\n moves.push(pin);\n }\n }\n return moves.join(\" \");\n}\n", "import { randomUIntBelow } from \"random-uint-below\";\n\nconst suffixes = [\"++\", \"--\"];\n\nexport function randomMegaminxScrambleString(): string {\n function rdPair(): string {\n return `R${suffixes[randomUIntBelow(2)]} D${suffixes[randomUIntBelow(2)]}`;\n }\n\n function randomU(): string {\n return `U${[\"\", \"'\"][randomUIntBelow(2)]}`;\n }\n\n function row(): string {\n const chunks = [];\n for (let i = 0; i < 5; i++) {\n chunks.push(rdPair());\n }\n chunks.push(randomU());\n return chunks.join(\" \");\n }\n\n const chunks = [];\n for (let i = 0; i < 6; i++) {\n chunks.push(row());\n }\n return chunks.join(\"\\n\");\n}\n", "import nodeEndpoint from \"../node-adapter\";\n\nexport { wrap } from \"comlink\";\n// Mangled so that bundlers don't try to inline the source.\n\nconst worker_threads_mangled = \"node:w-orker-_threa-ds\";\nconst worker_threads_unmangled = () => worker_threads_mangled.replace(/-/g, \"\");\n\nconst useNodeWorkarounds =\n typeof globalThis.Worker === \"undefined\" &&\n typeof (globalThis as any).WorkerNavigator === \"undefined\";\n\nasync function nodeWorker(\n source: string | URL,\n options?: { eval?: boolean },\n): Promise<Worker> {\n const { Worker: NodeWorker } = await import(\n /* @vite-ignore */ worker_threads_unmangled()\n );\n const worker = new NodeWorker(source, options);\n worker.unref();\n return nodeEndpoint(worker);\n}\n\nexport async function constructWorker(\n source: string | URL,\n options?: { eval?: boolean; type?: WorkerType },\n): Promise<Worker> {\n let worker;\n if (useNodeWorkarounds) {\n return nodeWorker(source, { eval: options?.eval });\n } else {\n if (options?.eval) {\n const blob = new Blob([source as string], {\n type: \"application/javascript\",\n });\n source = URL.createObjectURL(blob);\n }\n worker = new globalThis.Worker(source, {\n type: options ? options.type : undefined, // TODO: Is it safe to use `options?.type`?\n });\n }\n return worker;\n}\n", "import { exposeAPI } from \"./worker-guard\";\n\nexposeAPI.expose = false;\nexport async function getWorkerEntryFileURL() {\n return (await import(\"./search-worker-ts-entry\")).WORKER_ENTRY_FILE_URL;\n}\n", "import { constructWorker, wrap } from \"../vendor/comlink-everywhere/outside\";\nimport { insideAPI, WorkerInsideAPI } from \"./inside/api\";\nimport { getWorkerEntryFileURL } from \"./inside/search-worker-ts-entry-path-getter\";\nimport { searchOutsideDebugGlobals } from \"./outside\";\n\nconst MODULE_WORKER_TIMEOUT_MILLISECONDS = 5000;\n\nexport interface WorkerOutsideAPI {\n terminate: () => void; // `node` can return a `Promise` with an exit code, but we match the web worker API.\n}\nexport interface InsideOutsideAPI {\n insideAPI: WorkerInsideAPI;\n outsideAPI: WorkerOutsideAPI;\n}\n\nexport async function instantiateModuleWorker(): Promise<InsideOutsideAPI> {\n // rome-ignore lint(correctness/noAsyncPromiseExecutor): TODO\n return new Promise<InsideOutsideAPI>(async (resolve, reject) => {\n const timeoutID = setTimeout(() => {\n reject(new Error(\"module instantiation timeout\"));\n }, MODULE_WORKER_TIMEOUT_MILLISECONDS);\n\n try {\n const workerEntryFileURL = await getWorkerEntryFileURL();\n if (!workerEntryFileURL) {\n reject(new Error(\"Could not get worker entry file URL.\"));\n }\n let url: string | URL;\n if (globalThis.Worker) {\n // Standard browser-like environment.\n const importSrc = `import \"${workerEntryFileURL}\";`;\n const blob = new Blob([importSrc], {\n type: \"text/javascript\",\n });\n url = URL.createObjectURL(blob);\n } else {\n // `node` < 18 doesn't have `Blob`:\n // https://nodejs.org/ko/blog/announcements/v18-release-announce/#other-global-apis\n // But `node` will not let us construct a worker from a `blob:` URL either.\n //\n // We need to keep the original entry file URL, but we have to wrap it in the `URL` class.\n url = new URL(workerEntryFileURL);\n }\n\n const worker = (await constructWorker(url, {\n type: \"module\",\n })) as Worker & {\n nodeWorker?: import(\"worker_threads\").Worker;\n };\n\n const onError = (e: ErrorEvent) => {\n // TODO: Remove fallback when Firefox implements module workers: https://bugzilla.mozilla.org/show_bug.cgi?id=1247687\n if (e.message?.startsWith(\"SyntaxError\")) {\n reject(e);\n }\n };\n\n const onFirstMessage = (messageData: string) => {\n if (messageData === \"comlink-exposed\") {\n // We need to clear the timeout so that we don't prevent `node` from exiting in the meantime.\n clearTimeout(timeoutID);\n resolve(wrapWithTerminate(worker));\n } else {\n reject(\n new Error(`wrong module instantiation message ${messageData}`),\n );\n }\n };\n\n if (worker.nodeWorker) {\n // We have to use `once` so the `unref()` from `comlink-everywhere` allows the process to quite as expected.\n worker.nodeWorker.once(\"message\", onFirstMessage);\n } else {\n worker.addEventListener(\"error\", onError, {\n once: true,\n });\n worker.addEventListener(\"message\", (e) => onFirstMessage(e.data), {\n once: true,\n });\n }\n } catch (e) {\n reject(e);\n }\n });\n}\n\nfunction wrapWithTerminate(worker: Worker): InsideOutsideAPI {\n const insideAPI = wrap<WorkerInsideAPI>(worker);\n const terminate = worker.terminate.bind(worker);\n return { insideAPI, outsideAPI: { terminate } };\n}\n\nasync function instantiateClassicWorker(): Promise<InsideOutsideAPI> {\n const { workerSource } = await import(\n \"./search-worker-inside-generated-string.js\"\n );\n const worker = await constructWorker(workerSource, { eval: true });\n return wrapWithTerminate(worker);\n}\n\nexport const allInsideOutsideAPIPromises: Promise<InsideOutsideAPI>[] = [];\n\nexport async function instantiateWorker(): Promise<InsideOutsideAPI> {\n const insideOutsideAPIPromise = instantiateWorkerImplementation();\n allInsideOutsideAPIPromises.push(insideOutsideAPIPromise);\n insideAPI.setDebugMeasurePerf(searchOutsideDebugGlobals.logPerf);\n insideAPI.setScramblePrefetchLevel(\n searchOutsideDebugGlobals.scramblePrefetchLevel,\n );\n return insideOutsideAPIPromise;\n}\n\nexport async function mapToAllWorkers(\n f: (worker: InsideOutsideAPI) => void,\n): Promise<void> {\n await Promise.all(\n allInsideOutsideAPIPromises.map((worker) => worker.then(f)),\n );\n}\n\nasync function instantiateWorkerImplementation(): Promise<InsideOutsideAPI> {\n if (searchOutsideDebugGlobals.forceStringWorker) {\n console.warn(\n \"Using the `forceStringWorker` workaround for search worker instantiation. This will require downloading significantly more code than necessary, but the functionality will be the same.\",\n );\n return instantiateClassicWorker();\n }\n try {\n // `await` is important for `catch` to work.\n return await instantiateModuleWorker();\n } catch (e) {\n const commonErrorPrefix =\n \"Could not instantiate module worker (this may happen in Firefox, or when using Parcel).\";\n if (searchOutsideDebugGlobals.disableStringWorker) {\n console.error(\n `${commonErrorPrefix} Fallback to string worker is disabled.`,\n e,\n );\n throw new Error(\"Module worker instantiation failed.\");\n }\n console.warn(`${commonErrorPrefix} Falling back to string worker.`, e);\n return instantiateClassicWorker();\n }\n}\n", "import { Alg } from \"../alg\";\nimport type { KPuzzle } from \"../kpuzzle\";\n// import { preInitialize222 } from \"../implementations/2x2x2\";\nimport type { KState } from \"../kpuzzle/KState\";\nimport type { PrefetchLevel, TwsearchOptions } from \"./inside/api\";\nimport { randomClockScrambleString } from \"./inside/solve/puzzles/clock\"; // TODO: don't reach into `inside` code.\nimport { randomMegaminxScrambleString } from \"./inside/solve/puzzles/wca-minx\"; // TODO: don't reach into `inside` code.\nimport {\n InsideOutsideAPI,\n instantiateWorker,\n mapToAllWorkers,\n} from \"./instantiator\";\n\nlet cachedWorkerInstance: Promise<InsideOutsideAPI> | null = null;\nasync function getCachedWorkerInstance(): Promise<InsideOutsideAPI> {\n return await (cachedWorkerInstance ??= instantiateWorker());\n}\n\n// Pre-initialize the scrambler for the given event. (Otherwise, an event is\n// initialized the first time you ask for a scramble for that event.)\n//\n// Some typical numbers for a fast computer:\n// - 3x3x3 initialization: 200ms\n// - Each 3x3x3 scramble: 50ms\n// - 4x4x4 initialization: 2500ms\n// - Each 4x4x4 scramble: 300ms to 800ms\n//\n// It is safe to immediately call for a scramble\n// any time after starting pre-initialization, or to call for them without\n// pre-initializing. Pre-initializing essentially gives the scramble worker a\n// head start in case a scramble doesn't get requested immediately.\n//\n// Note that events cannot be pre-initialized in parallel. Attempting to\n// pre-initialize multiple events will initialize them consecutively. Scrambles\n// for a given event cannot be computed while another event is being initialized.\nexport function _preInitializationHintForEvent(\n eventID: string,\n // callback?: () => void\n): void {\n switch (eventID) {\n case \"clock\":\n case \"minx\":\n return;\n case \"333oh\":\n return _preInitializationHintForEvent(\"333\");\n }\n (async () => {\n await (await getCachedWorkerInstance()).insideAPI.initialize(eventID);\n })();\n}\n\nexport async function randomScrambleForEvent(eventID: string): Promise<Alg> {\n switch (eventID) {\n case \"clock\":\n return Alg.fromString(await randomClockScrambleString());\n case \"minx\":\n return Alg.fromString(await randomMegaminxScrambleString());\n }\n const prom = _randomScrambleStringForEvent(eventID);\n const wat = await prom;\n return Alg.fromString(wat);\n}\n\nexport async function _randomScrambleStringForEvent(\n eventID: string,\n): Promise<string> {\n if (searchOutsideDebugGlobals.forceNewWorkerForEveryScramble) {\n }\n const worker = searchOutsideDebugGlobals.forceNewWorkerForEveryScramble\n ? await instantiateWorker()\n : await getCachedWorkerInstance();\n return worker.insideAPI.randomScrambleStringForEvent(eventID);\n}\n\nexport async function randomScrambleStringForEvent(\n eventID: string,\n): Promise<string> {\n switch (eventID) {\n case \"clock\":\n return randomClockScrambleString();\n case \"minx\":\n return randomMegaminxScrambleString();\n }\n return await _randomScrambleStringForEvent(eventID);\n}\n\nexport async function experimentalSolve3x3x3IgnoringCenters(\n state: KState,\n): Promise<Alg> {\n const cwi = await getCachedWorkerInstance();\n return Alg.fromString(await cwi.insideAPI.solve333ToString(state.stateData));\n}\n\nexport async function experimentalSolve2x2x2(state: KState): Promise<Alg> {\n const cwi = await getCachedWorkerInstance();\n return Alg.fromString(await cwi.insideAPI.solve222ToString(state.stateData));\n}\n\nexport async function solveSkewb(state: KState): Promise<Alg> {\n const cwi = await getCachedWorkerInstance();\n return Alg.fromString(\n await cwi.insideAPI.solveSkewbToString(state.stateData),\n );\n}\n\nexport async function solvePyraminx(state: KState): Promise<Alg> {\n const cwi = await getCachedWorkerInstance();\n return Alg.fromString(\n await cwi.insideAPI.solvePyraminxToString(state.stateData),\n );\n}\n\nexport async function solveMegaminx(state: KState): Promise<Alg> {\n const cwi = await getCachedWorkerInstance();\n return Alg.fromString(\n await cwi.insideAPI.solveMegaminxToString(state.stateData),\n );\n}\n\nexport async function solveTwsearch(\n kpuzzle: KPuzzle,\n state: KState,\n options?: { moveSubset?: string[]; startState?: KState; minDepth?: number },\n): Promise<Alg> {\n const { startState, ...otherOptions } = options ?? {};\n const apiOptions: TwsearchOptions = otherOptions;\n if (startState) {\n apiOptions.startState =\n startState.experimentalToTransformation()!.transformationData;\n }\n const { ...def } = kpuzzle.definition;\n delete def.experimentalIsStateSolved;\n delete def.experimentalDerivedMoves;\n const dedicatedWorker = await instantiateWorker();\n try {\n return Alg.fromString(\n await dedicatedWorker.insideAPI.solveTwsearch(\n def,\n state.experimentalToTransformation()!.transformationData,\n apiOptions,\n ),\n );\n } finally {\n console.log(\"Search ended, terminating dedicated `twsearch` worker.\");\n // TODO: support re-using the same worker for multiple searches..\n await dedicatedWorker.outsideAPI.terminate();\n }\n}\n\ninterface SearchOutsideDebugGlobals {\n logPerf: boolean;\n scramblePrefetchLevel: `${PrefetchLevel}`;\n forceStringWorker: boolean;\n disableStringWorker: boolean;\n forceNewWorkerForEveryScramble: boolean;\n}\nexport const searchOutsideDebugGlobals: SearchOutsideDebugGlobals = {\n logPerf: false,\n scramblePrefetchLevel: \"auto\",\n forceStringWorker: false,\n disableStringWorker: false,\n forceNewWorkerForEveryScramble: false,\n};\n\nexport function setDebug(options: Partial<SearchOutsideDebugGlobals>): void {\n const { logPerf, scramblePrefetchLevel } = options;\n if (typeof logPerf !== \"undefined\") {\n searchOutsideDebugGlobals.logPerf = logPerf;\n mapToAllWorkers((worker) => worker.insideAPI.setDebugMeasurePerf(logPerf));\n }\n if (typeof scramblePrefetchLevel !== \"undefined\") {\n searchOutsideDebugGlobals.scramblePrefetchLevel = scramblePrefetchLevel;\n mapToAllWorkers((worker) =>\n worker.insideAPI.setScramblePrefetchLevel(\n scramblePrefetchLevel as PrefetchLevel,\n ),\n );\n }\n if (\"forceStringWorker\" in options) {\n searchOutsideDebugGlobals.forceStringWorker = !!options.forceStringWorker;\n }\n if (\"disableStringWorker\" in options) {\n searchOutsideDebugGlobals.disableStringWorker =\n !!options.disableStringWorker;\n }\n if (\"forceNewWorkerForEveryScramble\" in options) {\n searchOutsideDebugGlobals.forceNewWorkerForEveryScramble =\n !!options.forceNewWorkerForEveryScramble;\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["randomUIntBelow", "chunks", "insideAPI"]
|
|
7
|
+
}
|
|
@@ -22,7 +22,10 @@ function nodeEndpoint(nep) {
|
|
|
22
22
|
nep.off("message", l);
|
|
23
23
|
listeners.delete(eh);
|
|
24
24
|
},
|
|
25
|
-
nodeWorker: nep
|
|
25
|
+
nodeWorker: nep,
|
|
26
|
+
terminate: () => {
|
|
27
|
+
nep.terminate();
|
|
28
|
+
}
|
|
26
29
|
};
|
|
27
30
|
}
|
|
28
31
|
var node_adapter_default = nodeEndpoint;
|
|
@@ -30,4 +33,4 @@ var node_adapter_default = nodeEndpoint;
|
|
|
30
33
|
export {
|
|
31
34
|
node_adapter_default
|
|
32
35
|
};
|
|
33
|
-
//# sourceMappingURL=chunk-
|
|
36
|
+
//# sourceMappingURL=chunk-KJUHIZ2G.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/cubing/vendor/comlink-everywhere/node-adapter.ts"],
|
|
4
|
-
"sourcesContent": ["import type { Worker as NodeWorker } from \"worker_threads\";\n\n/**\n * Copyright 2019 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * http://www.apache.org/licenses/LICENSE-2.0\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\ntype EventHandler = EventListenerObject | ((event: any) => void);\n\nfunction nodeEndpoint(nep: NodeWorker): Worker & {\n nodeWorker?: import(\"worker_threads\").Worker;\n} {\n const listeners = new WeakMap();\n return {\n postMessage: nep.postMessage.bind(nep),\n addEventListener: (_: string, eh: EventHandler) => {\n const l = (data: Event) => {\n if (\"handleEvent\" in eh) {\n eh.handleEvent({ data } as any);\n } else {\n eh({ data });\n }\n };\n nep.on(\"message\", l);\n listeners.set(eh, l);\n },\n removeEventListener: (_: string, eh: EventHandler) => {\n const l = listeners.get(eh);\n if (!l) {\n return;\n }\n nep.off(\"message\", l);\n listeners.delete(eh);\n },\n nodeWorker: nep,\n // start: nep.start && nep.start.bind(nep),\n } as Worker & {\n nodeWorker?: import(\"worker_threads\").Worker;\n };\n}\n\nexport default nodeEndpoint;\n//# sourceMappingURL=node-adapter.mjs.map\n"],
|
|
5
|
-
"mappings": ";AAiBA,SAAS,aAAa,KAEpB;AACA,QAAM,YAAY,oBAAI,QAAQ;AAC9B,SAAO;AAAA,IACL,aAAa,IAAI,YAAY,KAAK,GAAG;AAAA,IACrC,kBAAkB,CAAC,GAAW,OAAqB;AACjD,YAAM,IAAI,CAAC,SAAgB;AACzB,YAAI,iBAAiB,IAAI;AACvB,aAAG,YAAY,EAAE,KAAK,CAAQ;AAAA,QAChC,OAAO;AACL,aAAG,EAAE,KAAK,CAAC;AAAA,QACb;AAAA,MACF;AACA,UAAI,GAAG,WAAW,CAAC;AACnB,gBAAU,IAAI,IAAI,CAAC;AAAA,IACrB;AAAA,IACA,qBAAqB,CAAC,GAAW,OAAqB;AACpD,YAAM,IAAI,UAAU,IAAI,EAAE;AAC1B,UAAI,CAAC,GAAG;AACN;AAAA,MACF;AACA,UAAI,IAAI,WAAW,CAAC;AACpB,gBAAU,OAAO,EAAE;AAAA,IACrB;AAAA,IACA,YAAY;AAAA,
|
|
4
|
+
"sourcesContent": ["import type { Worker as NodeWorker } from \"worker_threads\";\n\n/**\n * Copyright 2019 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * http://www.apache.org/licenses/LICENSE-2.0\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\ntype EventHandler = EventListenerObject | ((event: any) => void);\n\nfunction nodeEndpoint(nep: NodeWorker): Worker & {\n nodeWorker?: import(\"worker_threads\").Worker;\n} {\n const listeners = new WeakMap();\n return {\n postMessage: nep.postMessage.bind(nep),\n addEventListener: (_: string, eh: EventHandler) => {\n const l = (data: Event) => {\n if (\"handleEvent\" in eh) {\n eh.handleEvent({ data } as any);\n } else {\n eh({ data });\n }\n };\n nep.on(\"message\", l);\n listeners.set(eh, l);\n },\n removeEventListener: (_: string, eh: EventHandler) => {\n const l = listeners.get(eh);\n if (!l) {\n return;\n }\n nep.off(\"message\", l);\n listeners.delete(eh);\n },\n nodeWorker: nep,\n terminate: () => {\n nep.terminate();\n },\n // start: nep.start && nep.start.bind(nep),\n } as Worker & {\n nodeWorker?: import(\"worker_threads\").Worker;\n };\n}\n\nexport default nodeEndpoint;\n//# sourceMappingURL=node-adapter.mjs.map\n"],
|
|
5
|
+
"mappings": ";AAiBA,SAAS,aAAa,KAEpB;AACA,QAAM,YAAY,oBAAI,QAAQ;AAC9B,SAAO;AAAA,IACL,aAAa,IAAI,YAAY,KAAK,GAAG;AAAA,IACrC,kBAAkB,CAAC,GAAW,OAAqB;AACjD,YAAM,IAAI,CAAC,SAAgB;AACzB,YAAI,iBAAiB,IAAI;AACvB,aAAG,YAAY,EAAE,KAAK,CAAQ;AAAA,QAChC,OAAO;AACL,aAAG,EAAE,KAAK,CAAC;AAAA,QACb;AAAA,MACF;AACA,UAAI,GAAG,WAAW,CAAC;AACnB,gBAAU,IAAI,IAAI,CAAC;AAAA,IACrB;AAAA,IACA,qBAAqB,CAAC,GAAW,OAAqB;AACpD,YAAM,IAAI,UAAU,IAAI,EAAE;AAC1B,UAAI,CAAC,GAAG;AACN;AAAA,MACF;AACA,UAAI,IAAI,WAAW,CAAC;AACpB,gBAAU,OAAO,EAAE;AAAA,IACrB;AAAA,IACA,YAAY;AAAA,IACZ,WAAW,MAAM;AACf,UAAI,UAAU;AAAA,IAChB;AAAA,EAEF;AAGF;AAEA,IAAO,uBAAQ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
expose
|
|
3
|
-
} from "./chunk-2IZUSAXQ.js";
|
|
4
1
|
import {
|
|
5
2
|
addOrientationSuffix,
|
|
6
3
|
initialize333,
|
|
@@ -21,9 +18,9 @@ import {
|
|
|
21
18
|
from
|
|
22
19
|
} from "./chunk-W6D5GKZQ.js";
|
|
23
20
|
import {
|
|
21
|
+
KPuzzle,
|
|
24
22
|
KState
|
|
25
23
|
} from "./chunk-AUF56UEH.js";
|
|
26
|
-
import "./chunk-ZB3P5AZN.js";
|
|
27
24
|
import {
|
|
28
25
|
Alg,
|
|
29
26
|
AlgBuilder,
|
|
@@ -424,20 +421,23 @@ async function getCachedTrembleSolver4() {
|
|
|
424
421
|
);
|
|
425
422
|
})());
|
|
426
423
|
}
|
|
427
|
-
function resetCenterOrientation(state) {
|
|
428
|
-
return new KState(
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
424
|
+
async function resetCenterOrientation(state) {
|
|
425
|
+
return new KState(
|
|
426
|
+
await (await searchDynamicSideEvents).skewbKPuzzleWithoutMOCached(),
|
|
427
|
+
{
|
|
428
|
+
CORNERS: state.stateData.CORNERS,
|
|
429
|
+
CENTERS: {
|
|
430
|
+
pieces: state.stateData.CENTERS.pieces,
|
|
431
|
+
orientation: new Array(6).fill(0)
|
|
432
|
+
}
|
|
433
433
|
}
|
|
434
|
-
|
|
434
|
+
);
|
|
435
435
|
}
|
|
436
436
|
async function solveSkewb(state) {
|
|
437
437
|
mustBeInsideWorker();
|
|
438
438
|
const trembleSolver = await getCachedTrembleSolver4();
|
|
439
439
|
const alg = await trembleSolver.solve(
|
|
440
|
-
resetCenterOrientation(state),
|
|
440
|
+
await resetCenterOrientation(state),
|
|
441
441
|
TREMBLE_DEPTH4,
|
|
442
442
|
(quantumMove) => quantumMove.family === "y" ? 4 : 3
|
|
443
443
|
);
|
|
@@ -577,6 +577,7 @@ async function randomScrambleForEvent(eventID, options) {
|
|
|
577
577
|
}
|
|
578
578
|
}
|
|
579
579
|
var currentPrefetchLevel = "auto" /* Auto */;
|
|
580
|
+
var twsearchPromise = from(async () => import("./twsearch-HSPUII33.js"));
|
|
580
581
|
var insideAPI = {
|
|
581
582
|
initialize: async (eventID) => {
|
|
582
583
|
switch (eventID) {
|
|
@@ -647,9 +648,32 @@ var insideAPI = {
|
|
|
647
648
|
},
|
|
648
649
|
setDebugMeasurePerf: async (measure) => {
|
|
649
650
|
setDebugMeasurePerf(measure);
|
|
651
|
+
},
|
|
652
|
+
solveTwsearch: async (def, stateData, options) => {
|
|
653
|
+
const {
|
|
654
|
+
setArg,
|
|
655
|
+
setKPuzzleDefString,
|
|
656
|
+
serializeDefToTws,
|
|
657
|
+
solveState,
|
|
658
|
+
serializeKTransformationDataToTws
|
|
659
|
+
} = await twsearchPromise;
|
|
660
|
+
const kpuzzle = new KPuzzle(def);
|
|
661
|
+
if (options && "minDepth" in options) {
|
|
662
|
+
const { minDepth } = options;
|
|
663
|
+
if (typeof minDepth !== "number" || !Number.isInteger(minDepth) || minDepth < 0) {
|
|
664
|
+
throw new Error(`Invalid min depth: ${minDepth}`);
|
|
665
|
+
}
|
|
666
|
+
setArg("--randomstart");
|
|
667
|
+
setArg(`--mindepth ${minDepth}`);
|
|
668
|
+
}
|
|
669
|
+
await setKPuzzleDefString(serializeDefToTws(kpuzzle, options));
|
|
670
|
+
return (await solveState(
|
|
671
|
+
serializeKTransformationDataToTws("SearchState", stateData, true)
|
|
672
|
+
)).toString();
|
|
650
673
|
}
|
|
651
674
|
};
|
|
652
675
|
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
676
|
+
export {
|
|
677
|
+
insideAPI
|
|
678
|
+
};
|
|
679
|
+
//# sourceMappingURL=chunk-YVAFBRBY.js.map
|