cubing 0.25.8 → 0.25.11
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/esm/{2x2x2.sgs.json-IO3JG72M.js → 2x2x2.sgs.json-CLGNVWIM.js} +2 -2
- package/dist/esm/{2x2x2.sgs.json-IO3JG72M.js.map → 2x2x2.sgs.json-CLGNVWIM.js.map} +0 -0
- package/dist/esm/{3d-dynamic-HS4RJWAT.js → 3d-dynamic-5LHE6HI6.js} +3 -3
- package/dist/esm/{3d-dynamic-HS4RJWAT.js.map → 3d-dynamic-5LHE6HI6.js.map} +0 -0
- package/dist/esm/{444-solver-4R3P6TGG.js → 444-solver-SFZ7V6NL.js} +4 -4
- package/dist/esm/{444-solver-4R3P6TGG.js.map → 444-solver-SFZ7V6NL.js.map} +0 -0
- package/dist/esm/bluetooth/index.js +1 -1
- package/dist/esm/{chunk-RENZB7QN.js → chunk-43SBQEWR.js} +5 -2
- package/dist/esm/chunk-43SBQEWR.js.map +7 -0
- package/dist/esm/{chunk-Q7QSEHWH.js → chunk-4SXK3FSU.js} +2 -2
- package/dist/esm/{chunk-Q7QSEHWH.js.map → chunk-4SXK3FSU.js.map} +0 -0
- package/dist/esm/{chunk-S4BNBAS2.js → chunk-BXHL3MDG.js} +29 -20
- package/dist/esm/chunk-BXHL3MDG.js.map +7 -0
- package/dist/esm/{chunk-YCLG3ZLR.js → chunk-QKEGKHT5.js} +4 -1
- package/dist/esm/{chunk-YCLG3ZLR.js.map → chunk-QKEGKHT5.js.map} +2 -2
- package/dist/esm/{chunk-LYU3GNBG.js → chunk-RREJ3MSB.js} +2 -2
- package/dist/esm/{chunk-LYU3GNBG.js.map → chunk-RREJ3MSB.js.map} +0 -0
- package/dist/esm/{chunk-33FD473T.js → chunk-Z35CBICW.js} +3 -3
- package/dist/esm/{chunk-33FD473T.js.map → chunk-Z35CBICW.js.map} +0 -0
- package/dist/esm/{chunk-CS6S3OZ5.js → chunk-ZPAGJE7S.js} +5 -2
- package/dist/esm/{chunk-CS6S3OZ5.js.map → chunk-ZPAGJE7S.js.map} +2 -2
- package/dist/esm/{fto-solver-E6YEK26S.js → fto-solver-TOOJNOZB.js} +2 -2
- package/dist/esm/{fto-solver-E6YEK26S.js.map → fto-solver-TOOJNOZB.js.map} +0 -0
- package/dist/esm/{fto.dynamic-TCAH2G3H.js → fto.dynamic-3MSUIE4Q.js} +3 -3
- package/dist/esm/{fto.dynamic-TCAH2G3H.js.map → fto.dynamic-3MSUIE4Q.js.map} +0 -0
- package/dist/esm/fto.kpuzzle.svg-H2RJX6UR.js +102 -0
- package/dist/esm/fto.kpuzzle.svg-H2RJX6UR.js.map +7 -0
- package/dist/esm/{kilosolver-IQ4LB7VP.js → kilosolver-A3MNW2DJ.js} +2 -2
- package/dist/esm/{kilosolver-IQ4LB7VP.js.map → kilosolver-A3MNW2DJ.js.map} +0 -0
- package/dist/esm/{master_tetraminx-solver-JQSMYUQN.js → master_tetraminx-solver-QSJNGET5.js} +2 -2
- package/dist/esm/{master_tetraminx-solver-JQSMYUQN.js.map → master_tetraminx-solver-QSJNGET5.js.map} +0 -0
- package/dist/esm/puzzles/index.js +1 -1
- package/dist/esm/{pyraminx.sgs.json-Z5KUYMLD.js → pyraminx.sgs.json-NTELD4DU.js} +3 -3
- package/dist/esm/{pyraminx.sgs.json-Z5KUYMLD.js.map → pyraminx.sgs.json-NTELD4DU.js.map} +0 -0
- package/dist/esm/{redi_cube-S63AVKYL.js → redi_cube-FYRLEZZH.js} +2 -2
- package/dist/esm/{redi_cube-S63AVKYL.js.map → redi_cube-FYRLEZZH.js.map} +0 -0
- package/dist/esm/scramble/index.js +4 -11
- package/dist/esm/search/index.js +4 -15
- package/dist/esm/{chunk-Z6SI4Q5T.js → search-worker-js-entry-32MQILEZ.js} +30 -31
- package/dist/esm/{chunk-Z6SI4Q5T.js.map → search-worker-js-entry-32MQILEZ.js.map} +3 -3
- package/dist/esm/{search-worker-ts-entry-KIQL3MSC.js → search-worker-ts-entry-IJRN7GQV.js} +3 -3
- package/dist/esm/{search-worker-ts-entry-KIQL3MSC.js.map → search-worker-ts-entry-IJRN7GQV.js.map} +0 -0
- package/dist/esm/{sq1-solver-NJ7B44MA.js → sq1-solver-KMN2GSOU.js} +2 -2
- package/dist/esm/{sq1-solver-NJ7B44MA.js.map → sq1-solver-KMN2GSOU.js.map} +0 -0
- package/dist/esm/twisty/index.js +2 -2
- package/dist/esm/{worker-inside-generated-string-JYZKHSA6.js → worker-inside-generated-string-JGML54CI.js} +118 -24
- package/dist/esm/worker-inside-generated-string-JGML54CI.js.map +7 -0
- package/dist/types/puzzles/implementations/fto/fto.kpuzzle.svg.d.ts +1 -0
- package/dist/types/puzzles/implementations/fto/index.d.ts +1 -0
- package/dist/types/search/index.d.ts +1 -1
- package/dist/types/search/instantiator.d.ts +1 -0
- package/dist/types/search/outside.d.ts +3 -3
- package/dist/types/search/worker-inside-generated-string.d.ts +1 -1
- package/package.json +1 -1
- package/dist/esm/chunk-RENZB7QN.js.map +0 -7
- package/dist/esm/chunk-S4BNBAS2.js.map +0 -7
- package/dist/esm/search-worker-js-entry-OHPC5KIV.js +0 -23
- package/dist/esm/search-worker-js-entry-OHPC5KIV.js.map +0 -7
- package/dist/esm/worker-inside-generated-string-JYZKHSA6.js.map +0 -7
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-FB7SFELN.js";
|
|
4
4
|
import {
|
|
5
5
|
cube2x2x2
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-QKEGKHT5.js";
|
|
7
7
|
import "./chunk-YAOUFM4D.js";
|
|
8
8
|
import "./chunk-DO7GZAW4.js";
|
|
9
9
|
import "./chunk-MGJA5U5O.js";
|
|
@@ -119,4 +119,4 @@ export {
|
|
|
119
119
|
cachedData222,
|
|
120
120
|
data222
|
|
121
121
|
};
|
|
122
|
-
//# sourceMappingURL=2x2x2.sgs.json-
|
|
122
|
+
//# sourceMappingURL=2x2x2.sgs.json-CLGNVWIM.js.map
|
|
File without changes
|
|
@@ -3,12 +3,12 @@ import {
|
|
|
3
3
|
THREEJS,
|
|
4
4
|
experimentalStickerings,
|
|
5
5
|
hintFaceletStyles
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-4SXK3FSU.js";
|
|
7
7
|
import {
|
|
8
8
|
cube3x3x3,
|
|
9
9
|
getFaceletAppearance,
|
|
10
10
|
puzzles
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-QKEGKHT5.js";
|
|
12
12
|
import "./chunk-YAOUFM4D.js";
|
|
13
13
|
import {
|
|
14
14
|
Move
|
|
@@ -1496,4 +1496,4 @@ export {
|
|
|
1496
1496
|
cube3DShim,
|
|
1497
1497
|
pg3dShim
|
|
1498
1498
|
};
|
|
1499
|
-
//# sourceMappingURL=3d-dynamic-
|
|
1499
|
+
//# sourceMappingURL=3d-dynamic-5LHE6HI6.js.map
|
|
File without changes
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
mustBeInsideWorker,
|
|
3
3
|
random333Scramble
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-Z35CBICW.js";
|
|
5
5
|
import {
|
|
6
6
|
randomUIntBelowFactory
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-
|
|
7
|
+
} from "./chunk-43SBQEWR.js";
|
|
8
|
+
import "./chunk-QKEGKHT5.js";
|
|
9
9
|
import "./chunk-YAOUFM4D.js";
|
|
10
10
|
import {
|
|
11
11
|
Alg
|
|
@@ -2570,4 +2570,4 @@ export {
|
|
|
2570
2570
|
initialize,
|
|
2571
2571
|
random444Scramble
|
|
2572
2572
|
};
|
|
2573
|
-
//# sourceMappingURL=444-solver-
|
|
2573
|
+
//# sourceMappingURL=444-solver-SFZ7V6NL.js.map
|
|
File without changes
|
|
@@ -4,7 +4,10 @@ var cryptoMangled = "cr-yp-to";
|
|
|
4
4
|
var cryptoUnmangled = () => cryptoMangled.replace(/-/g, "");
|
|
5
5
|
async function getRandomValuesFactory() {
|
|
6
6
|
if (!globalThis?.crypto?.getRandomValues) {
|
|
7
|
-
const nodeWebcrypto = (await (cryptoPromise ?? (cryptoPromise = import(
|
|
7
|
+
const nodeWebcrypto = (await (cryptoPromise ?? (cryptoPromise = import(
|
|
8
|
+
/* @vite-ignore */
|
|
9
|
+
cryptoUnmangled()
|
|
10
|
+
)))).webcrypto;
|
|
8
11
|
return nodeWebcrypto.getRandomValues;
|
|
9
12
|
} else {
|
|
10
13
|
return crypto.getRandomValues.bind(crypto);
|
|
@@ -65,4 +68,4 @@ export {
|
|
|
65
68
|
randomChoiceFactory,
|
|
66
69
|
randomPermute
|
|
67
70
|
};
|
|
68
|
-
//# sourceMappingURL=chunk-
|
|
71
|
+
//# sourceMappingURL=chunk-43SBQEWR.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/cubing/vendor/random-uint-below/get-random-values.ts", "../../src/cubing/vendor/random-uint-below/random53BitValue.ts", "../../src/cubing/vendor/random-uint-below/random-choice.ts", "../../src/cubing/vendor/random-uint-below/index.ts"],
|
|
4
|
+
"sourcesContent": ["export type GetRandomValuesFunction = (arr: Uint32Array) => void;\n\n// This is a workaround for a `node` segfault.\n// In theory, imports are cached and safe to import multiple times: https://nodejs.org/api/esm.html#esm_urls\n// In practice, a rapid series of inline imports inside a worker causes a segfault(!) in `node`.\n// So we cache a single import reference. We avoid populating it until we first need it, so that we don't attempt to perform the import in environments that don't need or have it (e.g. browsers, `deno`).\nlet cryptoPromise: Promise<typeof import(\"crypto\")> | null = null;\n\n// `@types/node` is... lacking. This type may cause an error in the future, at which point we can hopefully use `@types/node` directly.\ntype NodeWebCrypto = typeof import(\"crypto\").webcrypto & {\n getRandomValues: GetRandomValuesFunction;\n};\n\n// Mangled so that bundlers don't try to inline the source.\nconst cryptoMangled = \"cr-yp-to\";\nconst cryptoUnmangled = () => cryptoMangled.replace(/-/g, \"\");\n\n// We could use top-level await to define this more statically, but that has limited transpilation support.\nexport async function getRandomValuesFactory(): Promise<GetRandomValuesFunction> {\n if (!globalThis?.crypto?.getRandomValues) {\n const nodeWebcrypto = (\n await (cryptoPromise ??= import(/* @vite-ignore */ cryptoUnmangled()))\n ).webcrypto as NodeWebCrypto;\n return nodeWebcrypto.getRandomValues;\n } else {\n return crypto.getRandomValues.bind(crypto) as GetRandomValuesFunction;\n }\n}\n", "import {\n getRandomValuesFactory,\n GetRandomValuesFunction,\n} from \"./get-random-values\";\n\n/*\n * randomInt.below(max) returns a random non-negative integer less than max (0 <= output < max).\n * `max` must be at most 2^53.\n */\n\nconst MAX_JS_PRECISE_INT = 9007199254740992;\n\nconst UPPER_HALF_MULTIPLIER = 2097152; // 2^21. We have to use multiplication because bit shifts truncate to 32 bits.\nconst LOWER_HALF_DIVIDER = 2048;\n\nfunction random53BitValue(getRandomValues: GetRandomValuesFunction): number {\n // Construct a random 53-bit value from a 32-bit upper half and a 21-bit lower half.\n const arr = new Uint32Array(2);\n getRandomValues(arr);\n const upper = arr[0];\n const lower = arr[1];\n return (\n Math.floor(upper * UPPER_HALF_MULTIPLIER) +\n Math.floor(lower / LOWER_HALF_DIVIDER)\n );\n}\n\nfunction validateMax(max: number): void {\n if (typeof max !== \"number\" || max < 0 || Math.floor(max) !== max) {\n throw new Error(\n \"randomInt.below() not called with a positive integer value.\",\n );\n }\n if (max > MAX_JS_PRECISE_INT) {\n throw new Error(\n `Called randomInt.below() with max == ${max}, which is larger than JavaScript can handle with integer precision.`,\n );\n }\n}\n\n// TODO: cache generated `randomUIntBelow`?\nexport async function randomUIntBelowFactory(): Promise<\n (max: number) => number\n> {\n const getRandomValues = await getRandomValuesFactory();\n const randomUIntBelow = (max: number): number => {\n validateMax(max);\n\n const val = random53BitValue(getRandomValues);\n const maxUniformSamplingRange = Math.floor(MAX_JS_PRECISE_INT / max) * max;\n\n // Rejection sampling:\n if (val < maxUniformSamplingRange) {\n return val % max;\n } else {\n // val % max would produce a biased result. This bias an be very bad if `max` is on the order of MAX_JS_PRECISE_INT. We have to try again, so just call ourselves recursively.\n // For some values of `max` just above 9007199254740992 / 2, this happens about once on average. For other values of `max`, it's less than that (and for small values of `max` it's extremely unlikely).\n\n // TODO: Use more bits of accuracy instead of rejection sampling to avoid DoS.\n return randomUIntBelow(max);\n }\n };\n return randomUIntBelow;\n}\n", "import { randomUIntBelowFactory } from \"./random53BitValue\";\n\n// Inspired by https://reference.wolfram.com/language/ref/RandomChoice.html\n// This library itself should be kept small, but a wrapper library may want to implement selecting multiple element without replacement as with replacement:\n// https://reference.wolfram.com/language/ref/RandomSample.html\nexport async function randomChoiceFactory<T>(): Promise<(arr: Array<T>) => T> {\n const randomUIntBelow = await randomUIntBelowFactory();\n return (arr: Array<T>): T => arr[randomUIntBelow(arr.length)];\n}\n", "export { randomChoiceFactory } from \"./random-choice\";\nexport { randomUIntBelowFactory } from \"./random53BitValue\";\n\n// TODO: reuse factory properly, move this to a separate file, add to impl.\nimport { randomUIntBelowFactory } from \"./random53BitValue\";\nconst randomUIntBelowPromise = randomUIntBelowFactory();\nexport async function randomPermute<T>(list: T[]): Promise<void> {\n for (let i = 1; i < list.length; i++) {\n const j = (await randomUIntBelowPromise)(i);\n [list[i], list[j]] = [list[j], list[i]];\n }\n}\n"],
|
|
5
|
+
"mappings": ";AAMA,IAAI,gBAAyD;AAQ7D,IAAM,gBAAgB;AACtB,IAAM,kBAAkB,MAAM,cAAc,QAAQ,MAAM;AAG1D,wCAAiF;AAC/E,MAAI,CAAC,YAAY,QAAQ,iBAAiB;AACxC,UAAM,gBACJ,OAAO,mCAAkB;AAAA;AAAA,MAA0B;AAAA,SACnD;AACF,WAAO,cAAc;AAAA,SAChB;AACL,WAAO,OAAO,gBAAgB,KAAK;AAAA;AAAA;;;ACfvC,IAAM,qBAAqB;AAE3B,IAAM,wBAAwB;AAC9B,IAAM,qBAAqB;AAE3B,0BAA0B,iBAAkD;AAE1E,QAAM,MAAM,IAAI,YAAY;AAC5B,kBAAgB;AAChB,QAAM,QAAQ,IAAI;AAClB,QAAM,QAAQ,IAAI;AAClB,SACE,KAAK,MAAM,QAAQ,yBACnB,KAAK,MAAM,QAAQ;AAAA;AAIvB,qBAAqB,KAAmB;AACtC,MAAI,OAAO,QAAQ,YAAY,MAAM,KAAK,KAAK,MAAM,SAAS,KAAK;AACjE,UAAM,IAAI,MACR;AAAA;AAGJ,MAAI,MAAM,oBAAoB;AAC5B,UAAM,IAAI,MACR,wCAAwC;AAAA;AAAA;AAM9C,wCAEE;AACA,QAAM,kBAAkB,MAAM;AAC9B,QAAM,kBAAkB,CAAC,QAAwB;AAC/C,gBAAY;AAEZ,UAAM,MAAM,iBAAiB;AAC7B,UAAM,0BAA0B,KAAK,MAAM,qBAAqB,OAAO;AAGvE,QAAI,MAAM,yBAAyB;AACjC,aAAO,MAAM;AAAA,WACR;AAKL,aAAO,gBAAgB;AAAA;AAAA;AAG3B,SAAO;AAAA;;;ACzDT,qCAA8E;AAC5E,QAAM,kBAAkB,MAAM;AAC9B,SAAO,CAAC,QAAqB,IAAI,gBAAgB,IAAI;AAAA;;;ACFvD,IAAM,yBAAyB;AAC/B,6BAAuC,MAA0B;AAC/D,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,UAAM,IAAK,OAAM,wBAAwB;AACzC,KAAC,KAAK,IAAI,KAAK,MAAM,CAAC,KAAK,IAAI,KAAK;AAAA;AAAA;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -405,7 +405,7 @@ var DEGREES_PER_RADIAN = 360 / TAU;
|
|
|
405
405
|
// src/cubing/twisty/heavy-code-imports/3d.ts
|
|
406
406
|
var cachedConstructorProxy = null;
|
|
407
407
|
async function proxy3D() {
|
|
408
|
-
return cachedConstructorProxy ?? (cachedConstructorProxy = import("./3d-dynamic-
|
|
408
|
+
return cachedConstructorProxy ?? (cachedConstructorProxy = import("./3d-dynamic-5LHE6HI6.js"));
|
|
409
409
|
}
|
|
410
410
|
var THREEJS = from(async () => (await proxy3D()).T3I);
|
|
411
411
|
|
|
@@ -425,4 +425,4 @@ export {
|
|
|
425
425
|
proxy3D,
|
|
426
426
|
THREEJS
|
|
427
427
|
};
|
|
428
|
-
//# sourceMappingURL=chunk-
|
|
428
|
+
//# sourceMappingURL=chunk-4SXK3FSU.js.map
|
|
File without changes
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
PrefetchLevel
|
|
3
|
-
} from "./chunk-Z6SI4Q5T.js";
|
|
4
1
|
import {
|
|
5
2
|
exposeAPI
|
|
6
3
|
} from "./chunk-BEXHMXCT.js";
|
|
@@ -9,7 +6,7 @@ import {
|
|
|
9
6
|
} from "./chunk-GBMX6FHY.js";
|
|
10
7
|
import {
|
|
11
8
|
randomUIntBelowFactory
|
|
12
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-43SBQEWR.js";
|
|
13
10
|
import {
|
|
14
11
|
Alg
|
|
15
12
|
} from "./chunk-DO7GZAW4.js";
|
|
@@ -85,7 +82,10 @@ var worker_threads_mangled = "w-orker-_threa-ds";
|
|
|
85
82
|
var worker_threads_unmangled = () => worker_threads_mangled.replace(/-/g, "");
|
|
86
83
|
var useNodeWorkarounds = typeof globalThis.Worker === "undefined" && typeof globalThis.WorkerNavigator === "undefined";
|
|
87
84
|
async function nodeWorker(source, options) {
|
|
88
|
-
const { Worker: NodeWorker } = await import(
|
|
85
|
+
const { Worker: NodeWorker } = await import(
|
|
86
|
+
/* @vite-ignore */
|
|
87
|
+
worker_threads_unmangled()
|
|
88
|
+
);
|
|
89
89
|
const worker = new NodeWorker(source, options);
|
|
90
90
|
worker.unref();
|
|
91
91
|
return node_adapter_default(worker);
|
|
@@ -111,11 +111,15 @@ async function constructWorker(source, options) {
|
|
|
111
111
|
// src/cubing/search/inside/search-worker-ts-entry-path-getter.ts
|
|
112
112
|
exposeAPI.expose = false;
|
|
113
113
|
async function getWorkerEntryFileURL() {
|
|
114
|
-
return (await import("./search-worker-ts-entry-
|
|
114
|
+
return (await import("./search-worker-ts-entry-IJRN7GQV.js")).WORKER_ENTRY_FILE_URL;
|
|
115
115
|
}
|
|
116
116
|
|
|
117
117
|
// src/cubing/search/instantiator.ts
|
|
118
118
|
var MODULE_WORKER_TIMEOUT_MILLISECONDS = 5e3;
|
|
119
|
+
var forceStringWorker = false;
|
|
120
|
+
function setForceStringWorker(force) {
|
|
121
|
+
forceStringWorker = force;
|
|
122
|
+
}
|
|
119
123
|
async function instantiateModuleWorker() {
|
|
120
124
|
return new Promise(async (resolve, reject) => {
|
|
121
125
|
const timeoutID = setTimeout(() => {
|
|
@@ -167,14 +171,21 @@ async function instantiateModuleWorker() {
|
|
|
167
171
|
}
|
|
168
172
|
});
|
|
169
173
|
}
|
|
174
|
+
async function instantiateClassicWorker() {
|
|
175
|
+
const { workerSource } = await import("./worker-inside-generated-string-JGML54CI.js");
|
|
176
|
+
const worker = await constructWorker(workerSource, { eval: true });
|
|
177
|
+
return wrap(worker);
|
|
178
|
+
}
|
|
170
179
|
async function instantiateWorker() {
|
|
180
|
+
if (forceStringWorker) {
|
|
181
|
+
console.warn("Using the `forceStringWorker` workaround for search worker instantiation. This will require downloading significantly more code than necessary, but the functionality will be the same.");
|
|
182
|
+
return instantiateClassicWorker();
|
|
183
|
+
}
|
|
171
184
|
try {
|
|
172
185
|
return await instantiateModuleWorker();
|
|
173
186
|
} catch (e) {
|
|
174
|
-
console.warn("Could not instantiate module worker (this
|
|
175
|
-
|
|
176
|
-
const worker = await constructWorker(workerSource, { eval: true });
|
|
177
|
-
return wrap(worker);
|
|
187
|
+
console.warn("Could not instantiate module worker (this may happen in Firefox, with `bundle-global`, or when using Parcel). Falling back to string worker.", e);
|
|
188
|
+
return instantiateClassicWorker();
|
|
178
189
|
}
|
|
179
190
|
}
|
|
180
191
|
|
|
@@ -183,12 +194,6 @@ var cachedWorkerInstance = null;
|
|
|
183
194
|
async function getCachedWorkerInstance() {
|
|
184
195
|
return await (cachedWorkerInstance ?? (cachedWorkerInstance = instantiateWorker()));
|
|
185
196
|
}
|
|
186
|
-
function experimentalSetScramblePrefetchLevel(prefetchLevel) {
|
|
187
|
-
(async () => {
|
|
188
|
-
(await getCachedWorkerInstance()).setScramblePrefetchLevel(prefetchLevel);
|
|
189
|
-
})();
|
|
190
|
-
}
|
|
191
|
-
var ExperimentalPrefetchLevel = PrefetchLevel;
|
|
192
197
|
async function randomScrambleForEvent(eventID) {
|
|
193
198
|
switch (eventID) {
|
|
194
199
|
case "clock":
|
|
@@ -225,15 +230,19 @@ async function solveMegaminx(state) {
|
|
|
225
230
|
return Alg.fromString(await cwi.solveMegaminxToString(state.stateData));
|
|
226
231
|
}
|
|
227
232
|
function setDebug(options) {
|
|
228
|
-
const { logPerf } = options;
|
|
233
|
+
const { logPerf, scramblePrefetchLevel } = options;
|
|
229
234
|
if (typeof logPerf !== "undefined") {
|
|
230
235
|
getCachedWorkerInstance().then((cwi) => cwi.setDebugMeasurePerf(logPerf));
|
|
231
236
|
}
|
|
237
|
+
if (typeof scramblePrefetchLevel !== "undefined") {
|
|
238
|
+
getCachedWorkerInstance().then((cwi) => cwi.setScramblePrefetchLevel(scramblePrefetchLevel));
|
|
239
|
+
}
|
|
240
|
+
if ("forceStringWorker" in options) {
|
|
241
|
+
setForceStringWorker(options.forceStringWorker);
|
|
242
|
+
}
|
|
232
243
|
}
|
|
233
244
|
|
|
234
245
|
export {
|
|
235
|
-
experimentalSetScramblePrefetchLevel,
|
|
236
|
-
ExperimentalPrefetchLevel,
|
|
237
246
|
randomScrambleForEvent,
|
|
238
247
|
experimentalSolve3x3x3IgnoringCenters,
|
|
239
248
|
experimentalSolve2x2x2,
|
|
@@ -242,4 +251,4 @@ export {
|
|
|
242
251
|
solveMegaminx,
|
|
243
252
|
setDebug
|
|
244
253
|
};
|
|
245
|
-
//# sourceMappingURL=chunk-
|
|
254
|
+
//# sourceMappingURL=chunk-BXHL3MDG.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 { randomUIntBelowFactory } from \"../../../../vendor/random-uint-below\";\n\nconst pins = [\"UR\", \"DR\", \"DL\", \"UL\"];\nconst backMoves = [\"U\", \"R\", \"D\", \"L\", \"ALL\"];\nconst frontMoves = pins.concat(backMoves);\n\nconst randomUIntBelowPromise = randomUIntBelowFactory();\n\nexport async function randomClockScrambleString(): Promise<string> {\n const randomUIntBelow = await randomUIntBelowPromise;\n\n let filteringMoveCount = 0;\n\n async function randomSuffix(randomUIntBelow: (max: number) => number) {\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 async function side(families: string[]): Promise<void> {\n for (const family of families) {\n moves.push(`${family}${await randomSuffix(randomUIntBelow)}`);\n }\n }\n\n await side(frontMoves);\n moves.push(\"y2\");\n await 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 { randomUIntBelowFactory } from \"../../../../vendor/random-uint-below\";\n\nconst randomUIntBelowPromise = randomUIntBelowFactory();\n\nconst suffixes = [\"++\", \"--\"];\n\nexport async function randomMegaminxScrambleString(): Promise<string> {\n const randomUIntBelow = await randomUIntBelowPromise;\n\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 = \"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 type { WorkerInsideAPI } from \"./inside/api\";\nimport { getWorkerEntryFileURL } from \"./inside/search-worker-ts-entry-path-getter\";\n\nconst MODULE_WORKER_TIMEOUT_MILLISECONDS = 5000;\n\nlet forceStringWorker: boolean = false;\nexport function setForceStringWorker(force: boolean): void {\n forceStringWorker = force;\n}\n\nexport async function instantiateModuleWorker(): Promise<WorkerInsideAPI> {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise<WorkerInsideAPI>(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 // This happens in `bundle-global`.\n reject(new Error(\"Could not get worker entry file URL.\"));\n }\n let url: string | URL;\n if (globalThis.Blob) {\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` doesn't have `Blob`. We can keep the original entry file URL there, but we have to wrap it.\n // Needed for `node`\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(wrap<WorkerInsideAPI>(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\nasync function instantiateClassicWorker(): Promise<WorkerInsideAPI> {\n const { workerSource } = await import(\"./worker-inside-generated-string.js\");\n const worker = await constructWorker(workerSource, { eval: true });\n return wrap(worker);\n}\n\nexport async function instantiateWorker(): Promise<WorkerInsideAPI> {\n if (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 console.warn(\n \"Could not instantiate module worker (this may happen in Firefox, with `bundle-global`, or when using Parcel). Falling back to string worker.\",\n e,\n );\n return instantiateClassicWorker();\n }\n}\n", "import { Alg } from \"../alg\";\n// import { preInitialize222 } from \"../implementations/2x2x2\";\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 { instantiateWorker, setForceStringWorker } from \"./instantiator\";\nimport type { PrefetchLevel, WorkerInsideAPI } from \"./inside/api\";\nimport type { KState } from \"../kpuzzle/KState\";\n\nlet cachedWorkerInstance: Promise<WorkerInsideAPI> | null = null;\nasync function getCachedWorkerInstance(): Promise<WorkerInsideAPI> {\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()).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 const cwi = await getCachedWorkerInstance();\n return cwi.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.solve333ToString(state.stateData));\n}\n\nexport async function experimentalSolve2x2x2(state: KState): Promise<Alg> {\n const cwi = await getCachedWorkerInstance();\n return Alg.fromString(await cwi.solve222ToString(state.stateData));\n}\n\nexport async function solveSkewb(state: KState): Promise<Alg> {\n const cwi = await getCachedWorkerInstance();\n return Alg.fromString(await cwi.solveSkewbToString(state.stateData));\n}\n\nexport async function solvePyraminx(state: KState): Promise<Alg> {\n const cwi = await getCachedWorkerInstance();\n return Alg.fromString(await cwi.solvePyraminxToString(state.stateData));\n}\n\nexport async function solveMegaminx(state: KState): Promise<Alg> {\n const cwi = await getCachedWorkerInstance();\n return Alg.fromString(await cwi.solveMegaminxToString(state.stateData));\n}\n\nexport function setDebug(options: {\n logPerf?: boolean;\n scramblePrefetchLevel?: `${PrefetchLevel}`;\n forceStringWorker: boolean;\n}): void {\n const { logPerf, scramblePrefetchLevel } = options;\n if (typeof logPerf !== \"undefined\") {\n getCachedWorkerInstance().then((cwi) => cwi.setDebugMeasurePerf(logPerf));\n }\n if (typeof scramblePrefetchLevel !== \"undefined\") {\n getCachedWorkerInstance().then((cwi) =>\n cwi.setScramblePrefetchLevel(scramblePrefetchLevel as PrefetchLevel),\n );\n }\n if (\"forceStringWorker\" in options) {\n setForceStringWorker(options.forceStringWorker);\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -717,6 +717,9 @@ var FTOPuzzleLoader = class extends PGPuzzleLoader {
|
|
|
717
717
|
inventionYear: 1983
|
|
718
718
|
});
|
|
719
719
|
this.stickerings = ftoStickerings;
|
|
720
|
+
this.svg = getCached(async () => {
|
|
721
|
+
return (await import("./fto.kpuzzle.svg-H2RJX6UR.js")).ftoSVG;
|
|
722
|
+
});
|
|
720
723
|
}
|
|
721
724
|
appearance(stickering) {
|
|
722
725
|
return ftoStickering(this, stickering);
|
|
@@ -882,4 +885,4 @@ export {
|
|
|
882
885
|
cube3x3x3,
|
|
883
886
|
puzzles
|
|
884
887
|
};
|
|
885
|
-
//# sourceMappingURL=chunk-
|
|
888
|
+
//# sourceMappingURL=chunk-QKEGKHT5.js.map
|