cubing 0.62.1 → 0.63.0
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/bin/chunks/{chunk-7HTSOKX4.js → chunk-MDLXCG2G.js} +2 -3
- package/dist/bin/chunks/chunk-MDLXCG2G.js.map +7 -0
- package/dist/bin/order.js +1 -1
- package/dist/bin/puzzle-geometry-bin.js +1 -1
- package/dist/bin/scramble.js +1 -1
- package/dist/lib/cubing/chunks/chunk-VOOMUOPU.js +239 -0
- package/dist/lib/cubing/chunks/chunk-VOOMUOPU.js.map +7 -0
- package/dist/lib/cubing/chunks/chunk-Z4RAYVT2.js +1065 -0
- package/dist/lib/cubing/chunks/chunk-Z4RAYVT2.js.map +7 -0
- package/dist/lib/cubing/chunks/{inside-TJAQBDDY.js → inside-HKXM4LRT.js} +4 -7
- package/dist/lib/cubing/chunks/{inside-TJAQBDDY.js.map → inside-HKXM4LRT.js.map} +2 -2
- package/dist/lib/cubing/chunks/{search-dynamic-solve-4x4x4-NRWKTCNT.js → search-dynamic-solve-4x4x4-CUTIKECO.js} +3 -4
- package/dist/lib/cubing/chunks/{search-dynamic-solve-4x4x4-NRWKTCNT.js.map → search-dynamic-solve-4x4x4-CUTIKECO.js.map} +1 -1
- package/dist/lib/cubing/chunks/search-worker-entry.js +6 -7
- package/dist/lib/cubing/chunks/search-worker-entry.js.map +2 -2
- package/dist/lib/cubing/scramble/index.js +2 -3
- package/dist/lib/cubing/search/index.js +2 -3
- package/dist/lib/cubing/search/index.js.map +1 -1
- package/package.json +2 -3
- package/dist/bin/chunks/chunk-7HTSOKX4.js.map +0 -7
- package/dist/lib/cubing/chunks/chunk-2AUSVPAU.js +0 -28
- package/dist/lib/cubing/chunks/chunk-2AUSVPAU.js.map +0 -7
- package/dist/lib/cubing/chunks/chunk-5F7JRCTP.js +0 -605
- package/dist/lib/cubing/chunks/chunk-5F7JRCTP.js.map +0 -7
- package/dist/lib/cubing/chunks/chunk-LIVDX4MD.js +0 -395
- package/dist/lib/cubing/chunks/chunk-LIVDX4MD.js.map +0 -7
- package/dist/lib/cubing/chunks/chunk-XO3JAA3V.js +0 -39
- package/dist/lib/cubing/chunks/chunk-XO3JAA3V.js.map +0 -7
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/cubing/search/inside/solve/puzzles/3x3x3/index.ts", "../../../../src/cubing/search/inside/inside-worker.ts", "../../../../src/cubing/search/inside/solve/addOrientationSuffix.ts", "../../../../src/cubing/search/inside/solve/puzzles/dynamic/3x3x3/index.ts", "../../../../src/cubing/search/inside/solve/puzzles/3x3x3/convert.ts", "../../../../src/cubing/search/inside/solve/puzzles/3x3x3/filter.ts", "../../../../src/cubing/search/inside/solve/puzzles/3x3x3/legacy-sgs.ts"],
|
|
4
|
-
"sourcesContent": ["import { randomChoice } from \"random-uint-below\";\nimport { Alg } from \"../../../../../alg\";\nimport type { KPattern } from \"../../../../../kpuzzle/KPattern\";\nimport { puzzles } from \"../../../../../puzzles\";\nimport { mustBeInsideWorker } from \"../../../inside-worker\";\nimport { addOrientationSuffix } from \"../../addOrientationSuffix\";\nimport { dynamic3x3x3min2phase } from \"../dynamic/3x3x3\";\nimport { toMin2PhasePattern } from \"./convert\";\nimport { passesFilter } from \"./filter\";\nimport { sgs3x3x3 } from \"./legacy-sgs\";\n\nexport async function random333Pattern(): Promise<KPattern> {\n const kpuzzle = await puzzles[\"3x3x3\"].kpuzzle();\n let pattern = kpuzzle.defaultPattern();\n for (const piece of sgs3x3x3) {\n pattern = pattern.applyAlg(Alg.fromString(randomChoice(piece)));\n }\n if (!passesFilter(kpuzzle, pattern)) {\n return random333Pattern();\n }\n return pattern;\n}\n\nexport async function solve333(s: KPattern): Promise<Alg> {\n mustBeInsideWorker();\n return Alg.fromString(\n (await dynamic3x3x3min2phase).solvePattern(toMin2PhasePattern(s)),\n );\n}\n\nexport async function random333Scramble(): Promise<Alg> {\n return solve333(await random333Pattern());\n}\n\nexport async function initialize333(): Promise<void> {\n (await dynamic3x3x3min2phase).initialize();\n}\n\nconst randomSuffixes = [\n [null, \"Rw\", \"Rw2\", \"Rw'\", \"Fw\", \"Fw'\"],\n [null, \"Dw\", \"Dw2\", \"Dw'\"],\n];\n\nexport async function random333OrientedScramble(): Promise<Alg> {\n return addOrientationSuffix(await random333Scramble(), randomSuffixes);\n}\n", "let isInsideWorker = false;\n\nexport function setIsInsideWorker(inside: boolean) {\n isInsideWorker = inside;\n}\n\nexport function mustBeInsideWorker(): void {\n if (!isInsideWorker) {\n throw new Error(\n \"Must be called from inside a worker, to avoid impact on page performance. Try importing from the top level of `cubing/solve`?\",\n );\n }\n}\n", "import { randomChoice } from \"random-uint-below\";\nimport { type Alg, AlgBuilder, Move } from \"../../../alg\";\n\nexport function addOrientationSuffix(\n alg: Alg,\n suffixSpec: (null | string)[][],\n): Alg {\n const algBuilder = new AlgBuilder();\n algBuilder.experimentalPushAlg(alg);\n for (const suffix of suffixSpec) {\n const choice = randomChoice(suffix);\n if (choice !== null) {\n algBuilder.push(Move.fromString(choice));\n }\n }\n return algBuilder.toAlg();\n}\n", "import { from } from \"../../../../../../vendor/mit/p-lazy/p-lazy\";\n\nexport const dynamic3x3x3min2phase = from<\n typeof import(\"./search-dynamic-solve-3x3x3\")\n>(() => import(\"./search-dynamic-solve-3x3x3\"));\n", "/*\n\nFace order:\n\n U\nLFRB\n D\n\n | 0| 1| 2|\n | 3| 4| 5|\n | 6| 7| 8|\n| 9|10|11|18|19|20|27|28|29|36|37|38|\n|12|13|14|21|22|23|30|31|32|39|40|41|\n|15|16|17|24|25|26|33|34|35|42|43|44|\n |45|46|47|\n |48|49|50|\n |51|52|53|\n*/\n\nimport type { KPattern } from \"../../../../../kpuzzle/KPattern\";\n\nconst reidEdgeOrder = \"UF UR UB UL DF DR DB DL FR FL BR BL\".split(\" \");\nconst reidCornerOrder = \"UFR URB UBL ULF DRF DFL DLB DBR\".split(\" \");\nconst centerOrder = \"U L F R B D\".split(\" \");\n\n// const stickers = [reidEdgeOrder, reidCornerOrder, centerOrder];\n\n// /*\n// |1 20|0 20|1 10|\n// |0 30|2 00|0 10|\n// |1 30|0 00|1 00|\n// |1 22|0 31|1 31|1 32|0 01|1 01|1 02|0 11|1 11|1 12|0 21|1 21|\n// |0111|2 10|0 91|0 90|2 20|0 80|0 81|2 30|0101|0100|2 40|0110|\n// |1 61|0 71|1 52|1 51|0 41|1 42|1 41|0 51|1 72|1 71|0 61|1 62|\n// |1 50|0 40|1 40|\n// |0 70|2 50|0 50|\n// |1 60|0 60|1 70|\n// */\n\nconst map: [number, number, number][] = [\n [1, 2, 0],\n [0, 2, 0],\n [1, 1, 0],\n [0, 3, 0],\n [2, 0, 0],\n [0, 1, 0],\n [1, 3, 0],\n [0, 0, 0],\n [1, 0, 0],\n [1, 0, 2],\n [0, 1, 1],\n [1, 1, 1],\n [0, 8, 1],\n [2, 3, 0],\n [0, 10, 1],\n [1, 4, 1],\n [0, 5, 1],\n [1, 7, 2],\n [1, 3, 2],\n [0, 0, 1],\n [1, 0, 1],\n [0, 9, 0],\n [2, 2, 0],\n [0, 8, 0],\n [1, 5, 1],\n [0, 4, 1],\n [1, 4, 2],\n [1, 5, 0],\n [0, 4, 0],\n [1, 4, 0],\n [0, 7, 0],\n [2, 5, 0],\n [0, 5, 0],\n [1, 6, 0],\n [0, 6, 0],\n [1, 7, 0],\n [1, 2, 2],\n [0, 3, 1],\n [1, 3, 1],\n [0, 11, 1],\n [2, 1, 0],\n [0, 9, 1],\n [1, 6, 1],\n [0, 7, 1],\n [1, 5, 2],\n [1, 1, 2],\n [0, 2, 1],\n [1, 2, 1],\n [0, 10, 0],\n [2, 4, 0],\n [0, 11, 0],\n [1, 7, 1],\n [0, 6, 1],\n [1, 6, 2],\n];\n\nfunction rotateLeft(s: string, i: number): string {\n return s.slice(i) + s.slice(0, i);\n}\n\nfunction toReid333Struct(pattern: KPattern): string[][] {\n const output: string[][] = [[], []];\n for (let i = 0; i < 6; i++) {\n if (pattern.patternData[\"CENTERS\"].pieces[i] !== i) {\n throw new Error(\"non-oriented puzzles are not supported\");\n }\n }\n for (let i = 0; i < 12; i++) {\n output[0].push(\n rotateLeft(\n reidEdgeOrder[pattern.patternData[\"EDGES\"].pieces[i]],\n pattern.patternData[\"EDGES\"].orientation[i],\n ),\n );\n }\n for (let i = 0; i < 8; i++) {\n output[1].push(\n rotateLeft(\n reidCornerOrder[pattern.patternData[\"CORNERS\"].pieces[i]],\n pattern.patternData[\"CORNERS\"].orientation[i],\n ),\n );\n }\n output.push(centerOrder);\n return output;\n}\n\n// function toReid333String(state: Transformation): string {\n// return toReid333Struct(state)\n// .map((l) => l.join(\" \"))\n// .join(\" \");\n// }\n\nexport function toMin2PhasePattern(pattern: KPattern): string {\n const reid = toReid333Struct(pattern);\n return map.map(([orbit, perm, ori]) => reid[orbit][perm][ori]).join(\"\");\n}\n", "import { Move } from \"../../../../../alg\";\nimport type { KPuzzle } from \"../../../../../kpuzzle\";\nimport { KPattern } from \"../../../../../kpuzzle\";\n\nexport function isEquivalentTranformationIgnoringCENTERS(\n t1: KPattern,\n t2: KPattern,\n): boolean {\n const t1NoCenterOri = new KPattern(t1.kpuzzle, {\n EDGES: t1.patternData[\"EDGES\"],\n CORNERS: t1.patternData[\"CORNERS\"],\n CENTERS: {\n pieces: t1.patternData[\"CENTERS\"].pieces,\n orientation: new Array(6).fill(0),\n },\n }).experimentalToTransformation()!;\n const t2NoCenterOri = new KPattern(t2.kpuzzle, {\n EDGES: t2.patternData[\"EDGES\"],\n CORNERS: t2.patternData[\"CORNERS\"],\n CENTERS: {\n pieces: t2.patternData[\"CENTERS\"].pieces,\n orientation: new Array(6).fill(0),\n },\n }).experimentalToTransformation()!;\n return t1NoCenterOri.isIdentical(t2NoCenterOri);\n}\n\nexport function passesFilter(kpuzzle: KPuzzle, pattern: KPattern): boolean {\n if (\n isEquivalentTranformationIgnoringCENTERS(kpuzzle.defaultPattern(), pattern)\n ) {\n return false;\n }\n\n for (const face of \"ULFRBD\") {\n for (let amount = 1; amount < 4; amount++) {\n const transformation = kpuzzle\n .moveToTransformation(new Move(face, amount))\n .toKPattern();\n if (isEquivalentTranformationIgnoringCENTERS(transformation, pattern)) {\n return false;\n }\n }\n }\n\n return true;\n}\n// TODO: implement tests\n// {\n// const def = await puzzles[\"3x3x3\"].def();\n// const kpuzzle = new KPuzzle(def);\n// console.log(passesFilter(def, kpuzzle.state));\n// kpuzzle.applyAlg(parse(\"R\"));\n// console.log(passesFilter(def, kpuzzle.state));\n// kpuzzle.applyAlg(parse(\"D\"));\n// console.log(passesFilter(def, kpuzzle.state));\n// kpuzzle.reset();\n// kpuzzle.applyAlg(parse(\"(R' U' R U')5\"));\n// console.log(passesFilter(def, kpuzzle.state));\n// }\n", "// TODO: Verify\nexport const sgs3x3x3: string[][] = [\n [\n \"R U'\",\n \"R2 B\", //\n \"D2 B2\",\n \"D' L B'\", //\n \"R' U'\",\n \"B\", //\n \"D B2\",\n \"R' B\", //\n \"L' U\",\n \"L2 B'\", //\n \"B2\",\n \"D L B'\", //\n \"L U\",\n \"B'\", //\n \"U'\",\n \"R B\", //\n \"D' B2\",\n \"L B'\", //\n \"U2\",\n \"U L' B'\", //\n \"\",\n \"U' L' B'\", //\n \"U\",\n \"L' B'\",\n ],\n [\n \"F2 L2\",\n \"F' L'\",\n \"R' F L2\", //\n \"D' L2\",\n \"F L2\",\n \"F2 L'\", //\n \"R' F' L'\",\n \"R2 F L2\",\n \"R2 F2 L'\", //\n \"L2\",\n \"F L'\",\n \"D' L\", //\n \"D2 L2\",\n \"R2 F' L'\",\n \"D L\", //\n \"\",\n \"L2 F L'\",\n \"L F' L2\", //\n \"L F L'\",\n \"F' L2\",\n \"L'\", //\n \"D L2\",\n \"D F L'\",\n \"L\",\n ],\n [\n \"R B U2 B'\",\n \"R2 B U' B'\", //\n \"F2 B U B'\",\n \"F B2 L' B2\", //\n \"B2 L B2\",\n \"B U' B'\", //\n \"R2 B U2 B'\",\n \"R' B U' B'\", //\n \"B2 L' B2\",\n \"F B U B'\", //\n \"B2 U' B2\",\n \"B' L B\", //\n \"L F' B D' B'\",\n \"B' U' B2 D B'\", //\n \"B U2 B'\",\n \"R B U' B'\", //\n \"B2 L2 B2\",\n \"D' B' L B\", //\n \"B U B'\",\n \"F' B2 L' B2\", //\n \"\",\n \"B2 L' B' U' B'\",\n ],\n [\n \"U F2 L2 U'\",\n \"F' U L' U'\", //\n \"F2 U L' U'\",\n \"U F L2 U'\", //\n \"U2 B2 U2\",\n \"R' U' B U\", //\n \"D2 U L U'\",\n \"D U2 B' U2\", //\n \"U L2 U'\",\n \"F U L' U'\", //\n \"D U L U'\",\n \"U2 B' U2\", //\n \"\",\n \"U2 B' U' L' U'\", //\n \"U2 L' U2\",\n \"U' B U\", //\n \"U L U'\",\n \"D' U2 B' U2\", //\n \"U L' U'\",\n \"U2 B U2\",\n ],\n [\n \"R' D' F2\",\n \"F'\", //\n \"F2\",\n \"D R F'\", //\n \"R D' F2\",\n \"R2 F'\", //\n \"D' F2\",\n \"R F'\", //\n \"F2 R' D' F2\",\n \"F\", //\n \"D2 F2\",\n \"D' R F'\", //\n \"R2 D' F2\",\n \"R' F'\", //\n \"D F2\",\n \"D2 R F'\", //\n \"\",\n \"F R' D' F2\",\n ],\n [\n \"R' D2 F' D F\",\n \"R F2 R2 F2\",\n \"R2 F' D2 F\", //\n \"F' R2 D2 F\",\n \"L D' L'\",\n \"D F' D2 F\", //\n \"F2 R2 F2\",\n \"R F' D2 F\",\n \"F' R2 D' F\", //\n \"F' R' D2 F\",\n \"F2 R' F2\",\n \"L D L'\", //\n \"F' R D' F\",\n \"F2 R F2\",\n \"F' D2 F\", //\n \"\",\n \"L D2 R D' L'\",\n \"F' D2 F' R F2\", //\n \"D2 R2 F2 R2 F2\",\n \"D F' D' F\",\n \"F' D F\",\n ],\n [\n \"U F2 U'\",\n \"R U F' U'\", //\n \"D R U F2 U'\",\n \"U F U'\", //\n \"R2 U F2 U'\",\n \"R' U F' U'\", //\n \"R U F2 U'\",\n \"R2 U F' U'\", //\n \"\",\n \"U L D L' F U'\", //\n \"F2 D' R D F2\",\n \"D2 U F U'\", //\n \"R' U F2 U'\",\n \"U F' U'\", //\n \"F2 D2 R D2 F2\",\n \"D U F U'\",\n ],\n [\n \"R2\",\n \"R' B' D B\", //\n \"D R'\",\n \"F' R2 F\", //\n \"\",\n \"R B' D B\", //\n \"R'\",\n \"B' D B\", //\n \"D' R'\",\n \"D2 F' R2 F\", //\n \"R\",\n \"R2 B' D B\", //\n \"D2 R'\",\n \"B' D' B\",\n ],\n [\n \"R2 D' R2\",\n \"F' R' F R\",\n \"R D' R2 D R'\", //\n \"D2 R2 D2 R2\",\n \"R' D' F' R F\",\n \"U F D F' U'\", //\n \"\",\n \"R2 D2 B R' B' R'\",\n \"R' F D' F2 R F\", //\n \"R2 D R2\",\n \"F2 U F U' F\",\n \"R' D F' R F\", //\n \"D R2 D2 R2\",\n \"U F D' F' U'\",\n \"D R' D2 F' R F\", //\n \"R2 D2 R2\",\n \"U F D2 F' U'\",\n \"R' D2 F' R F\",\n ],\n [\n \"B R B'\",\n \"F D F' B R2 B'\", //\n \"D B R2 B'\",\n \"D2 B R' B'\", //\n \"B R2 B'\",\n \"D B R' B'\", //\n \"D' B R2 B'\",\n \"B R' B'\", //\n \"\",\n \"B R2 B' D B R' B'\", //\n \"D2 B R2 B'\",\n \"D' B R' B'\",\n ],\n [\n \"\",\n \"R' D R F D2 F'\", //\n \"R' D R\",\n \"D F D' F'\", //\n \"R F' R' F\",\n \"F D' F'\", //\n \"R' D' R\",\n \"F D2 F'\", //\n \"R' D2 R\",\n \"F D F'\",\n ],\n [\n \"\",\n \"F2 D2 R F' R' D2 F' D2 F'\",\n \"F2 D2 F' D' F D' F' D2 F'\", //\n \"F2 D F2 D F2 D2 F2\",\n \"D2 F L D2 L' D2 F'\",\n \"D F D2 L D2 L' F'\", //\n \"R' D B' D2 B D' R\",\n \"R' D2 B' D2 B R\",\n \"F D2 F' D F D F'\", //\n \"F D' L D2 L' D F'\",\n \"B D' F D B' D' F'\",\n \"F D2 L D2 L' F'\", //\n \"F D' L D L' D F'\",\n \"F L D2 L' D2 F'\",\n \"R' B' D2 B D2 R\",\n ],\n [\n \"D'\",\n \"F L D L' D' F'\", //\n \"D2\",\n \"L B D B' D' L'\", //\n \"D\",\n \"B' L' D' L D B\", //\n \"\",\n \"D F L D L' D' F'\",\n ],\n [\n \"F' D2 F D F' D F\",\n \"F' D' R' D R F\", //\n \"F' R' D' R D F\",\n \"B D R D' R' B'\", //\n \"\",\n \"D B' D' L' D L B\",\n ],\n [\n \"D F D F' D F D2 F'\",\n \"F' U2 B' R' B U2 F' L F' L' F'\", //\n \"\",\n \"D2 L D L2 F L F2 D F\",\n ],\n [\n \"L B' L' F L B L' F'\",\n \"F2 U F' D2 F U' F' D2 F'\",\n \"D' F' D B D' F D B'\", //\n \"F L2 F R2 F' L2 F R2 F2\",\n \"D B D' F' D B' D' F\",\n \"R F L F' R' F L' F'\", //\n \"\",\n \"D2 B L' U2 L B' D2 B L' U2 L B'\",\n \"D2 F R' U2 R F' D2 F R' U2 R F'\", //\n \"R F L' F' R' F L F'\",\n \"D F D' B' D F' D' B\",\n \"L2 F2 L' B2 L F2 L' B2 L'\",\n ],\n [\n \"L B R' B' L' B R B'\",\n \"R' B R F' R' B' R F\",\n \"L D2 L U L' D2 L U' L2\", //\n \"\",\n \"D2 B' D2 F D' L2 F L2 F' D2 B D' F'\",\n \"D2 F' R' F R2 B' D2 B D2 R' F D2 F'\", //\n \"L B L' F L B' L' F'\",\n \"F' D2 F' U' F D2 F' U F2\",\n \"D' B' D F D' B D F'\",\n ],\n [\"\", \"D2 F' L U2 L' F D2 F' L U2 L' F\", \"D2 B' R U2 R' B D2 B' R U2 R' B\"],\n];\n"],
|
|
5
|
-
"mappings": "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AAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,CAAC,IAAI,mCAAmC,iCAAiC;AAC3E;;;ANvRA,eAAsB,mBAAsC;AAC1D,QAAM,UAAU,MAAM,QAAQ,OAAO,EAAE,QAAQ;AAC/C,MAAI,UAAU,QAAQ,eAAe;AACrC,aAAW,SAAS,UAAU;AAC5B,cAAU,QAAQ,SAAS,IAAI,WAAWC,cAAa,KAAK,CAAC,CAAC;AAAA,EAChE;AACA,MAAI,CAAC,aAAa,SAAS,OAAO,GAAG;AACnC,WAAO,iBAAiB;AAAA,EAC1B;AACA,SAAO;AACT;AAEA,eAAsB,SAAS,GAA2B;AACxD,qBAAmB;AACnB,SAAO,IAAI;AAAA,KACR,MAAM,uBAAuB,aAAa,mBAAmB,CAAC,CAAC;AAAA,EAClE;AACF;AAEA,eAAsB,oBAAkC;AACtD,SAAO,SAAS,MAAM,iBAAiB,CAAC;AAC1C;AAEA,eAAsB,gBAA+B;AACnD,GAAC,MAAM,uBAAuB,WAAW;AAC3C;AAEA,IAAM,iBAAiB;AAAA,EACrB,CAAC,MAAM,MAAM,OAAO,OAAO,MAAM,KAAK;AAAA,EACtC,CAAC,MAAM,MAAM,OAAO,KAAK;AAC3B;AAEA,eAAsB,4BAA0C;AAC9D,SAAO,qBAAqB,MAAM,kBAAkB,GAAG,cAAc;AACvE;",
|
|
6
|
-
"names": ["randomChoice", "randomChoice"]
|
|
7
|
-
}
|
|
@@ -1,395 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
exposeAPI
|
|
3
|
-
} from "./chunk-7GUL3OBQ.js";
|
|
4
|
-
import {
|
|
5
|
-
node_adapter_default
|
|
6
|
-
} from "./chunk-XO3JAA3V.js";
|
|
7
|
-
import {
|
|
8
|
-
Alg
|
|
9
|
-
} from "./chunk-O6HEZXGY.js";
|
|
10
|
-
|
|
11
|
-
// src/cubing/vendor/apache/comlink-everywhere/outside/index.ts
|
|
12
|
-
import { wrap } from "comlink";
|
|
13
|
-
var useNodeWorkarounds = typeof globalThis.Worker === "undefined" && typeof globalThis.WorkerNavigator === "undefined";
|
|
14
|
-
async function nodeWorker(source, options) {
|
|
15
|
-
const { Worker: NodeWorker } = globalThis.process.getBuiltinModule(
|
|
16
|
-
"node:worker_threads"
|
|
17
|
-
);
|
|
18
|
-
const worker = new NodeWorker(source, options);
|
|
19
|
-
return node_adapter_default(worker);
|
|
20
|
-
}
|
|
21
|
-
async function constructWorker(source, options) {
|
|
22
|
-
let worker;
|
|
23
|
-
if (useNodeWorkarounds) {
|
|
24
|
-
return nodeWorker(source);
|
|
25
|
-
} else {
|
|
26
|
-
worker = new globalThis.Worker(source, {
|
|
27
|
-
type: options ? options.type : void 0
|
|
28
|
-
// TODO: Is it safe to use `options?.type`?
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
return worker;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
// src/cubing/search/worker-workarounds/index.ts
|
|
35
|
-
function searchWorkerURLImportMetaResolve() {
|
|
36
|
-
return import.meta.resolve("./search-worker-entry.js");
|
|
37
|
-
}
|
|
38
|
-
function searchWorkerURLNewURLImportMetaURL() {
|
|
39
|
-
return new URL("./search-worker-entry.js", import.meta.url);
|
|
40
|
-
}
|
|
41
|
-
async function searchWorkerURLEsbuildWorkaround() {
|
|
42
|
-
exposeAPI.expose = false;
|
|
43
|
-
return (await import("./search-worker-entry.js")).WORKER_ENTRY_FILE_URL;
|
|
44
|
-
}
|
|
45
|
-
function instantiateSearchWorkerURLNewURLImportMetaURL() {
|
|
46
|
-
return new Worker(new URL("./search-worker-entry.js", import.meta.url), {
|
|
47
|
-
type: "module"
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
// src/cubing/search/instantiator.ts
|
|
52
|
-
function probablyCrossOrigin(workerEntryFileURL) {
|
|
53
|
-
try {
|
|
54
|
-
const scriptOrigin = globalThis.location?.origin;
|
|
55
|
-
const workerOrigin = workerEntryFileURL.origin;
|
|
56
|
-
return !!scriptOrigin && !!workerOrigin && scriptOrigin !== workerOrigin;
|
|
57
|
-
} catch {
|
|
58
|
-
return false;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
async function instantiateModuleWorker(workerEntryFileURL) {
|
|
62
|
-
const url = new URL(workerEntryFileURL, import.meta.url);
|
|
63
|
-
const tryTrampolineFirst = probablyCrossOrigin(url);
|
|
64
|
-
try {
|
|
65
|
-
return instantiateModuleWorkerAttempt(url, tryTrampolineFirst);
|
|
66
|
-
} catch {
|
|
67
|
-
return instantiateModuleWorkerAttempt(url, !tryTrampolineFirst);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
async function instantiateModuleWorkerAttempt(workerEntryFileURL, crossOriginTrampoline) {
|
|
71
|
-
return new Promise(async (resolve, reject) => {
|
|
72
|
-
try {
|
|
73
|
-
if (!workerEntryFileURL) {
|
|
74
|
-
reject(new Error("Could not get worker entry file URL."));
|
|
75
|
-
}
|
|
76
|
-
let url = workerEntryFileURL;
|
|
77
|
-
if (crossOriginTrampoline) {
|
|
78
|
-
const importSrc = `import ${JSON.stringify(
|
|
79
|
-
workerEntryFileURL.toString()
|
|
80
|
-
)};`;
|
|
81
|
-
const blob = new Blob([importSrc], {
|
|
82
|
-
type: "text/javascript"
|
|
83
|
-
});
|
|
84
|
-
url = new URL(URL.createObjectURL(blob));
|
|
85
|
-
}
|
|
86
|
-
const worker = await constructWorker(url, {
|
|
87
|
-
type: "module"
|
|
88
|
-
});
|
|
89
|
-
worker.unref?.();
|
|
90
|
-
const onError = (e) => {
|
|
91
|
-
reject(e);
|
|
92
|
-
};
|
|
93
|
-
const onFirstMessage = (messageData) => {
|
|
94
|
-
if (messageData === "comlink-exposed") {
|
|
95
|
-
resolve(wrapWithTerminateAndRefs(worker));
|
|
96
|
-
} else {
|
|
97
|
-
reject(
|
|
98
|
-
new Error(`wrong module instantiation message ${messageData}`)
|
|
99
|
-
);
|
|
100
|
-
}
|
|
101
|
-
};
|
|
102
|
-
if (worker.nodeWorker) {
|
|
103
|
-
worker.nodeWorker.once("message", onFirstMessage);
|
|
104
|
-
} else {
|
|
105
|
-
worker.addEventListener("error", onError, {
|
|
106
|
-
once: true
|
|
107
|
-
});
|
|
108
|
-
worker.addEventListener("message", (e) => onFirstMessage(e.data), {
|
|
109
|
-
once: true
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
} catch (e) {
|
|
113
|
-
reject(e);
|
|
114
|
-
}
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
async function instantiateModuleWorkerDirectlyForBrowser() {
|
|
118
|
-
return new Promise(async (resolve, reject) => {
|
|
119
|
-
try {
|
|
120
|
-
const worker = instantiateSearchWorkerURLNewURLImportMetaURL();
|
|
121
|
-
const onError = (e) => {
|
|
122
|
-
reject(e);
|
|
123
|
-
};
|
|
124
|
-
const onFirstMessage = (messageData) => {
|
|
125
|
-
if (messageData === "comlink-exposed") {
|
|
126
|
-
resolve(wrapWithTerminateAndRefs(worker));
|
|
127
|
-
} else {
|
|
128
|
-
reject(
|
|
129
|
-
new Error(`wrong module instantiation message ${messageData}`)
|
|
130
|
-
);
|
|
131
|
-
}
|
|
132
|
-
};
|
|
133
|
-
worker.addEventListener("error", onError, {
|
|
134
|
-
once: true
|
|
135
|
-
});
|
|
136
|
-
worker.addEventListener("message", (e) => onFirstMessage(e.data), {
|
|
137
|
-
once: true
|
|
138
|
-
});
|
|
139
|
-
} catch (e) {
|
|
140
|
-
reject(e);
|
|
141
|
-
}
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
function wrapWithTerminateAndRefs(worker) {
|
|
145
|
-
const insideAPI = wrap(worker);
|
|
146
|
-
const terminate = worker.terminate.bind(worker);
|
|
147
|
-
const nodeWorker2 = worker.nodeWorker;
|
|
148
|
-
const ref = nodeWorker2?.ref?.bind(nodeWorker2) ?? (() => {
|
|
149
|
-
});
|
|
150
|
-
const unref = nodeWorker2?.unref?.bind(nodeWorker2) ?? (() => {
|
|
151
|
-
});
|
|
152
|
-
return { insideAPI, outsideAPI: { terminate, ref, unref } };
|
|
153
|
-
}
|
|
154
|
-
var allInsideOutsideAPIPromises = [];
|
|
155
|
-
async function instantiateWorker() {
|
|
156
|
-
const insideOutsideAPIPromise = instantiateWorkerImplementation();
|
|
157
|
-
allInsideOutsideAPIPromises.push(insideOutsideAPIPromise);
|
|
158
|
-
const { insideAPI } = await insideOutsideAPIPromise;
|
|
159
|
-
insideAPI.setDebugMeasurePerf(searchOutsideDebugGlobals.logPerf);
|
|
160
|
-
insideAPI.setScramblePrefetchLevel(
|
|
161
|
-
searchOutsideDebugGlobals.scramblePrefetchLevel
|
|
162
|
-
);
|
|
163
|
-
return insideOutsideAPIPromise;
|
|
164
|
-
}
|
|
165
|
-
async function instantiateWorkerImplementation() {
|
|
166
|
-
if (globalThis.location?.protocol === "file:") {
|
|
167
|
-
console.warn(
|
|
168
|
-
"This current web page is loaded from the local filesystem (a URL that starts with `file://`). In this situation, `cubing.js` may be unable to generate scrambles or perform searches in some browsers. See: https://js.cubing.net/cubing/scramble/#file-server-required"
|
|
169
|
-
);
|
|
170
|
-
}
|
|
171
|
-
function failed(methodDescription) {
|
|
172
|
-
return `Module worker instantiation${methodDescription ? ` ${methodDescription}` : ""} failed`;
|
|
173
|
-
}
|
|
174
|
-
const importMetaResolveStrategy = [
|
|
175
|
-
async () => instantiateModuleWorker(searchWorkerURLImportMetaResolve()),
|
|
176
|
-
"using `import.meta.resolve(\u2026)",
|
|
177
|
-
null
|
|
178
|
-
];
|
|
179
|
-
const esbuildWorkaroundStrategy = [
|
|
180
|
-
async () => instantiateModuleWorker(await searchWorkerURLEsbuildWorkaround()),
|
|
181
|
-
"using the `esbuild` workaround",
|
|
182
|
-
// TODO: we will hopefully discontinue the `esbuild` workaround at some
|
|
183
|
-
// point, but `esbuild` has been stuck for 3 years on this issue. Because
|
|
184
|
-
// `esbuild` and Vite (which uses `esbuild`) are now dominating the
|
|
185
|
-
// ecosystem, this just causes a warning for a lot of devs/users that they
|
|
186
|
-
// can't do anything about. As frustrating as the situation is, the
|
|
187
|
-
// workaround is semantically fine (even if it's convoluted) and is
|
|
188
|
-
// preserved by `esbuild`-based flows in practice. So we suppress the
|
|
189
|
-
// warning in the medium-term but maintain long-term hope that we can
|
|
190
|
-
// remove it (and the other fallbacks as well).
|
|
191
|
-
null
|
|
192
|
-
];
|
|
193
|
-
const newURLStrategy = [
|
|
194
|
-
async () => instantiateModuleWorker(searchWorkerURLNewURLImportMetaURL()),
|
|
195
|
-
"using `new URL(\u2026, import.meta.url)`",
|
|
196
|
-
"will"
|
|
197
|
-
];
|
|
198
|
-
const inlineNewURLStrategy = [
|
|
199
|
-
instantiateModuleWorkerDirectlyForBrowser,
|
|
200
|
-
"using inline `new URL(\u2026, import.meta.url)`",
|
|
201
|
-
"may"
|
|
202
|
-
];
|
|
203
|
-
const fallbackOrder = searchOutsideDebugGlobals.prioritizeEsbuildWorkaroundForWorkerInstantiation ? [
|
|
204
|
-
esbuildWorkaroundStrategy,
|
|
205
|
-
importMetaResolveStrategy,
|
|
206
|
-
newURLStrategy,
|
|
207
|
-
inlineNewURLStrategy
|
|
208
|
-
] : [
|
|
209
|
-
importMetaResolveStrategy,
|
|
210
|
-
esbuildWorkaroundStrategy,
|
|
211
|
-
newURLStrategy,
|
|
212
|
-
inlineNewURLStrategy
|
|
213
|
-
];
|
|
214
|
-
for (const [fn, description, warnOnSuccess] of fallbackOrder) {
|
|
215
|
-
try {
|
|
216
|
-
const worker = await fn();
|
|
217
|
-
if (warnOnSuccess) {
|
|
218
|
-
if (searchOutsideDebugGlobals.showWorkerInstantiationWarnings) {
|
|
219
|
-
console.warn(
|
|
220
|
-
`Module worker instantiation required ${description}. \`cubing.js\` ${warnOnSuccess} not support this fallback in the future.`
|
|
221
|
-
);
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
return worker;
|
|
225
|
-
} catch {
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
throw new Error(`${failed()}. There are no more fallbacks available.`);
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
// src/cubing/search/outside.ts
|
|
232
|
-
var cachedWorkerInstance;
|
|
233
|
-
function getCachedWorkerInstance() {
|
|
234
|
-
return cachedWorkerInstance ??= instantiateWorker();
|
|
235
|
-
}
|
|
236
|
-
var leases = /* @__PURE__ */ new WeakMap();
|
|
237
|
-
async function leaseRef(api, promiseFn) {
|
|
238
|
-
if (!leases.has(api)) {
|
|
239
|
-
leases.set(api, /* @__PURE__ */ new Set());
|
|
240
|
-
}
|
|
241
|
-
const promise = promiseFn(api);
|
|
242
|
-
const leasesForWorker = leases.get(api);
|
|
243
|
-
leasesForWorker.add(promise);
|
|
244
|
-
api.outsideAPI?.ref?.();
|
|
245
|
-
try {
|
|
246
|
-
return await promise;
|
|
247
|
-
} finally {
|
|
248
|
-
leasesForWorker.delete(promise);
|
|
249
|
-
if (leasesForWorker.size === 0) {
|
|
250
|
-
api.outsideAPI?.unref();
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
async function leaseCachedWorkerInstanceRef(promiseFn) {
|
|
255
|
-
return leaseRef(await getCachedWorkerInstance(), promiseFn);
|
|
256
|
-
}
|
|
257
|
-
async function mapToAllWorkers(f) {
|
|
258
|
-
await Promise.all(
|
|
259
|
-
allInsideOutsideAPIPromises.map(async (worker) => {
|
|
260
|
-
await leaseRef(await worker, async (worker2) => f(worker2));
|
|
261
|
-
})
|
|
262
|
-
);
|
|
263
|
-
}
|
|
264
|
-
async function randomScrambleForEvent(eventID) {
|
|
265
|
-
const worker = searchOutsideDebugGlobals.forceNewWorkerForEveryScramble ? await instantiateWorker() : await getCachedWorkerInstance();
|
|
266
|
-
const scrambleString = await leaseRef(
|
|
267
|
-
worker,
|
|
268
|
-
(worker2) => worker2.insideAPI.randomScrambleStringForEvent(eventID)
|
|
269
|
-
);
|
|
270
|
-
return Alg.fromString(scrambleString);
|
|
271
|
-
}
|
|
272
|
-
async function deriveScrambleForEvent(derivationSeedHex, derivationSaltHierarchy, eventID) {
|
|
273
|
-
if (!searchOutsideDebugGlobals.allowDerivedScrambles) {
|
|
274
|
-
throw new Error("Derived scrambles are not allowed.");
|
|
275
|
-
}
|
|
276
|
-
const worker = searchOutsideDebugGlobals.forceNewWorkerForEveryScramble ? await instantiateWorker() : await getCachedWorkerInstance();
|
|
277
|
-
const scrambleString = await leaseRef(
|
|
278
|
-
worker,
|
|
279
|
-
(worker2) => worker2.insideAPI.deriveScrambleStringForEvent(
|
|
280
|
-
derivationSeedHex,
|
|
281
|
-
derivationSaltHierarchy,
|
|
282
|
-
eventID
|
|
283
|
-
)
|
|
284
|
-
);
|
|
285
|
-
return Alg.fromString(scrambleString);
|
|
286
|
-
}
|
|
287
|
-
async function experimentalSolve3x3x3IgnoringCenters(pattern) {
|
|
288
|
-
return Alg.fromString(
|
|
289
|
-
await leaseCachedWorkerInstanceRef(
|
|
290
|
-
(cwi) => cwi.insideAPI.solve333ToString(pattern.patternData)
|
|
291
|
-
)
|
|
292
|
-
);
|
|
293
|
-
}
|
|
294
|
-
async function experimentalSolve2x2x2(pattern) {
|
|
295
|
-
return Alg.fromString(
|
|
296
|
-
await leaseCachedWorkerInstanceRef(
|
|
297
|
-
(cwi) => cwi.insideAPI.solve222ToString(pattern.patternData)
|
|
298
|
-
)
|
|
299
|
-
);
|
|
300
|
-
}
|
|
301
|
-
async function solveSkewb(pattern) {
|
|
302
|
-
return Alg.fromString(
|
|
303
|
-
await leaseCachedWorkerInstanceRef(
|
|
304
|
-
(cwi) => cwi.insideAPI.solveSkewbToString(pattern.patternData)
|
|
305
|
-
)
|
|
306
|
-
);
|
|
307
|
-
}
|
|
308
|
-
async function solvePyraminx(pattern) {
|
|
309
|
-
return Alg.fromString(
|
|
310
|
-
await leaseCachedWorkerInstanceRef(
|
|
311
|
-
(cwi) => cwi.insideAPI.solvePyraminxToString(pattern.patternData)
|
|
312
|
-
)
|
|
313
|
-
);
|
|
314
|
-
}
|
|
315
|
-
async function solveMegaminx(pattern) {
|
|
316
|
-
return Alg.fromString(
|
|
317
|
-
await leaseCachedWorkerInstanceRef(
|
|
318
|
-
(cwi) => cwi.insideAPI.solveMegaminxToString(pattern.patternData)
|
|
319
|
-
)
|
|
320
|
-
);
|
|
321
|
-
}
|
|
322
|
-
async function solveTwips(kpuzzle, pattern, options) {
|
|
323
|
-
const { targetPattern, ...otherOptions } = options ?? {};
|
|
324
|
-
const apiOptions = otherOptions;
|
|
325
|
-
if (targetPattern) {
|
|
326
|
-
apiOptions.targetPattern = targetPattern.patternData;
|
|
327
|
-
}
|
|
328
|
-
const { ...def } = kpuzzle.definition;
|
|
329
|
-
delete def.experimentalIsPatternSolved;
|
|
330
|
-
const dedicatedWorker = await instantiateWorker();
|
|
331
|
-
try {
|
|
332
|
-
return Alg.fromString(
|
|
333
|
-
// TODO: unnecessary because we terminate the worker?
|
|
334
|
-
await leaseRef(
|
|
335
|
-
dedicatedWorker,
|
|
336
|
-
(worker) => worker.insideAPI.solveTwipsToString(
|
|
337
|
-
def,
|
|
338
|
-
pattern.patternData,
|
|
339
|
-
apiOptions
|
|
340
|
-
)
|
|
341
|
-
)
|
|
342
|
-
);
|
|
343
|
-
} finally {
|
|
344
|
-
console.log("Search ended, terminating dedicated `twips` worker.");
|
|
345
|
-
dedicatedWorker.outsideAPI.terminate();
|
|
346
|
-
}
|
|
347
|
-
}
|
|
348
|
-
var searchOutsideDebugGlobals = {
|
|
349
|
-
logPerf: true,
|
|
350
|
-
scramblePrefetchLevel: "auto",
|
|
351
|
-
forceNewWorkerForEveryScramble: false,
|
|
352
|
-
showWorkerInstantiationWarnings: true,
|
|
353
|
-
prioritizeEsbuildWorkaroundForWorkerInstantiation: false,
|
|
354
|
-
allowDerivedScrambles: false
|
|
355
|
-
};
|
|
356
|
-
function setSearchDebug(options) {
|
|
357
|
-
const { logPerf, scramblePrefetchLevel } = options;
|
|
358
|
-
if (typeof logPerf !== "undefined") {
|
|
359
|
-
searchOutsideDebugGlobals.logPerf = logPerf;
|
|
360
|
-
void mapToAllWorkers(
|
|
361
|
-
(worker) => worker.insideAPI.setDebugMeasurePerf(logPerf)
|
|
362
|
-
);
|
|
363
|
-
}
|
|
364
|
-
if (typeof scramblePrefetchLevel !== "undefined") {
|
|
365
|
-
searchOutsideDebugGlobals.scramblePrefetchLevel = scramblePrefetchLevel;
|
|
366
|
-
void mapToAllWorkers(
|
|
367
|
-
(worker) => worker.insideAPI.setScramblePrefetchLevel(
|
|
368
|
-
scramblePrefetchLevel
|
|
369
|
-
)
|
|
370
|
-
);
|
|
371
|
-
}
|
|
372
|
-
for (const booleanField of [
|
|
373
|
-
"forceNewWorkerForEveryScramble",
|
|
374
|
-
"showWorkerInstantiationWarnings",
|
|
375
|
-
"prioritizeEsbuildWorkaroundForWorkerInstantiation",
|
|
376
|
-
"allowDerivedScrambles"
|
|
377
|
-
]) {
|
|
378
|
-
if (booleanField in options) {
|
|
379
|
-
searchOutsideDebugGlobals[booleanField] = options[booleanField] ?? searchOutsideDebugGlobals[booleanField];
|
|
380
|
-
}
|
|
381
|
-
}
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
export {
|
|
385
|
-
randomScrambleForEvent,
|
|
386
|
-
deriveScrambleForEvent,
|
|
387
|
-
experimentalSolve3x3x3IgnoringCenters,
|
|
388
|
-
experimentalSolve2x2x2,
|
|
389
|
-
solveSkewb,
|
|
390
|
-
solvePyraminx,
|
|
391
|
-
solveMegaminx,
|
|
392
|
-
solveTwips,
|
|
393
|
-
setSearchDebug
|
|
394
|
-
};
|
|
395
|
-
//# sourceMappingURL=chunk-LIVDX4MD.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/cubing/vendor/apache/comlink-everywhere/outside/index.ts", "../../../../src/cubing/search/worker-workarounds/index.ts", "../../../../src/cubing/search/instantiator.ts", "../../../../src/cubing/search/outside.ts"],
|
|
4
|
-
"sourcesContent": ["import nodeEndpoint from \"../node-adapter\";\n\nexport { wrap } from \"comlink\";\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 } = globalThis.process.getBuiltinModule(\n \"node:worker_threads\",\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?: { type?: WorkerType },\n): Promise<Worker> {\n let worker: Worker;\n if (useNodeWorkarounds) {\n return nodeWorker(source);\n } else {\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\nexport function searchWorkerURLImportMetaResolve(): string {\n // Note:\n // - We have to hardcode the expected path of the entry file in the ESM build, due to lack of `esbuild` support: https://github.com/evanw/esbuild/issues/2866\n // - This URL is based on the assumption that the code from this file ends up in a shared chunk in the `esm` build. This is not guaranteed by `esbuild`, but it consistently happens for our codebase.\n // - We inline the value (instead of using a constant), to maximize compatibility for hardcoded syntax detection in bundlers.\n return import.meta.resolve(\"./search-worker-entry.js\");\n}\n\nexport function searchWorkerURLNewURLImportMetaURL(): URL {\n // Note:\n // - We have to hardcode the expected path of the entry file in the ESM build, due to lack of `esbuild` support: https://github.com/evanw/esbuild/issues/795\n // - This URL is based on the assumption that the code from this file ends up in a shared chunk in the `esm` build. This is not guaranteed by `esbuild`, but it consistently happens for our codebase.\n // - We inline the value (instead of using a constant), to maximize compatibility for hardcoded syntax detection in bundlers.\n return new URL(\"./search-worker-entry.js\", import.meta.url);\n}\n\n// Workaround for `esbuild`: https://github.com/evanw/esbuild/issues/312#issuecomment-1092195778\nexport async function searchWorkerURLEsbuildWorkaround(): Promise<string> {\n exposeAPI.expose = false;\n return (await import(\"./search-worker-entry.js\")).WORKER_ENTRY_FILE_URL;\n}\n\nexport function instantiateSearchWorkerURLNewURLImportMetaURL(): Worker {\n return new Worker(new URL(\"./search-worker-entry.js\", import.meta.url), {\n type: \"module\",\n });\n}\n", "import type { NodeWorker } from \"../vendor/apache/comlink-everywhere/node-adapter\";\nimport {\n constructWorker,\n wrap,\n} from \"../vendor/apache/comlink-everywhere/outside\";\nimport type { WorkerInsideAPI } from \"./inside/api\";\nimport { searchOutsideDebugGlobals } from \"./outside\";\nimport {\n instantiateSearchWorkerURLNewURLImportMetaURL,\n searchWorkerURLEsbuildWorkaround,\n searchWorkerURLImportMetaResolve,\n searchWorkerURLNewURLImportMetaURL,\n} from \"./worker-workarounds\";\n\nexport interface WorkerOutsideAPI {\n terminate: () => void; // `node` can return a `Promise` with an exit code, but we match the web worker API.\n ref: () => void;\n unref: () => void;\n}\n\nexport interface InsideOutsideAPI {\n insideAPI: WorkerInsideAPI;\n outsideAPI: WorkerOutsideAPI;\n}\n\nfunction probablyCrossOrigin(workerEntryFileURL: URL): boolean {\n try {\n const scriptOrigin = globalThis.location?.origin;\n const workerOrigin = workerEntryFileURL.origin;\n return !!scriptOrigin && !!workerOrigin && scriptOrigin !== workerOrigin;\n } catch {\n return false;\n }\n}\n\nasync function instantiateModuleWorker(\n workerEntryFileURL: string | URL,\n): Promise<InsideOutsideAPI> {\n // We need the `import.meta.url` base for `bun`.\n const url = new URL(workerEntryFileURL, import.meta.url);\n const tryTrampolineFirst = probablyCrossOrigin(url);\n try {\n return instantiateModuleWorkerAttempt(url, tryTrampolineFirst);\n } catch {\n return instantiateModuleWorkerAttempt(url, !tryTrampolineFirst);\n }\n}\n\ninterface BunWorker extends Worker {\n unref?: () => void;\n}\n\nasync function instantiateModuleWorkerAttempt(\n workerEntryFileURL: URL,\n crossOriginTrampoline: boolean,\n): Promise<InsideOutsideAPI> {\n // biome-ignore lint/suspicious/noAsyncPromiseExecutor: TODO\n return new Promise<InsideOutsideAPI>(async (resolve, reject) => {\n try {\n if (!workerEntryFileURL) {\n reject(new Error(\"Could not get worker entry file URL.\"));\n }\n let url: URL = workerEntryFileURL;\n if (crossOriginTrampoline) {\n // Standard browser-like environment.\n const importSrc = `import ${JSON.stringify(\n workerEntryFileURL.toString(),\n )};`;\n const blob = new Blob([importSrc], {\n type: \"text/javascript\",\n });\n url = new URL(URL.createObjectURL(blob));\n }\n\n const worker = (await constructWorker(url, {\n type: \"module\",\n })) as Worker & {\n nodeWorker?: NodeWorker;\n } & BunWorker;\n\n worker.unref?.(); // Unref in `bun`.\n\n const onError = (e: ErrorEvent) => {\n reject(e);\n };\n\n // TODO: Remove this once we can remove the workarounds for lack of `import.meta.resolve(\u2026)` support.\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 resolve(wrapWithTerminateAndRefs(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 quit 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\n// Maybe some day if we work really hard, this code path can work:\n// - in `node` (https://github.com/nodejs/node/issues/43583#issuecomment-1540025755)\n// - for CDNs (https://github.com/tc39/proposal-module-expressions or https://github.com/whatwg/html/issues/6911)\nexport async function instantiateModuleWorkerDirectlyForBrowser(): Promise<InsideOutsideAPI> {\n // biome-ignore lint/suspicious/noAsyncPromiseExecutor: TODO\n return new Promise<InsideOutsideAPI>(async (resolve, reject) => {\n try {\n const worker = instantiateSearchWorkerURLNewURLImportMetaURL();\n\n const onError = (e: ErrorEvent) => {\n reject(e);\n };\n\n // TODO: Remove this once we can remove the workarounds for lack of `import.meta.resolve(\u2026)` support.\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 resolve(wrapWithTerminateAndRefs(worker));\n } else {\n reject(\n new Error(`wrong module instantiation message ${messageData}`),\n );\n }\n };\n\n worker.addEventListener(\"error\", onError, {\n once: true,\n });\n worker.addEventListener(\"message\", (e) => onFirstMessage(e.data), {\n once: true,\n });\n } catch (e) {\n reject(e);\n }\n });\n}\n\nfunction wrapWithTerminateAndRefs(worker: Worker): InsideOutsideAPI {\n const insideAPI = wrap<WorkerInsideAPI>(worker);\n const terminate = worker.terminate.bind(worker);\n const nodeWorker = (worker as Worker & { nodeWorker?: NodeWorker })\n .nodeWorker;\n const ref = nodeWorker?.ref?.bind(nodeWorker) ?? (() => {});\n const unref = nodeWorker?.unref?.bind(nodeWorker) ?? (() => {});\n return { insideAPI, outsideAPI: { terminate, ref, unref } };\n}\n\nexport const allInsideOutsideAPIPromises: Promise<InsideOutsideAPI>[] = [];\n\nexport async function instantiateWorker(): Promise<InsideOutsideAPI> {\n const insideOutsideAPIPromise = instantiateWorkerImplementation();\n allInsideOutsideAPIPromises.push(insideOutsideAPIPromise);\n const { insideAPI } = await insideOutsideAPIPromise;\n insideAPI.setDebugMeasurePerf(searchOutsideDebugGlobals.logPerf);\n insideAPI.setScramblePrefetchLevel(\n searchOutsideDebugGlobals.scramblePrefetchLevel,\n );\n return insideOutsideAPIPromise;\n}\n\ntype FallbackStrategyInfo = [\n fn: () => Promise<InsideOutsideAPI>,\n description: string,\n warnOnSuccess: null | string,\n];\n\nasync function instantiateWorkerImplementation(): Promise<InsideOutsideAPI> {\n if (globalThis.location?.protocol === \"file:\") {\n console.warn(\n \"This current web page is loaded from the local filesystem (a URL that starts with `file://`). In this situation, `cubing.js` may be unable to generate scrambles or perform searches in some browsers. See: https://js.cubing.net/cubing/scramble/#file-server-required\",\n );\n }\n\n function failed(methodDescription?: string) {\n return `Module worker instantiation${\n methodDescription ? ` ${methodDescription}` : \"\"\n } failed`;\n }\n\n const importMetaResolveStrategy: FallbackStrategyInfo = [\n async () => instantiateModuleWorker(searchWorkerURLImportMetaResolve()),\n \"using `import.meta.resolve(\u2026)\",\n null,\n ];\n const esbuildWorkaroundStrategy: FallbackStrategyInfo = [\n async () =>\n instantiateModuleWorker(await searchWorkerURLEsbuildWorkaround()),\n \"using the `esbuild` workaround\",\n // TODO: we will hopefully discontinue the `esbuild` workaround at some\n // point, but `esbuild` has been stuck for 3 years on this issue. Because\n // `esbuild` and Vite (which uses `esbuild`) are now dominating the\n // ecosystem, this just causes a warning for a lot of devs/users that they\n // can't do anything about. As frustrating as the situation is, the\n // workaround is semantically fine (even if it's convoluted) and is\n // preserved by `esbuild`-based flows in practice. So we suppress the\n // warning in the medium-term but maintain long-term hope that we can\n // remove it (and the other fallbacks as well).\n null,\n ];\n const newURLStrategy: FallbackStrategyInfo = [\n async () => instantiateModuleWorker(searchWorkerURLNewURLImportMetaURL()),\n \"using `new URL(\u2026, import.meta.url)`\",\n \"will\",\n ];\n const inlineNewURLStrategy: FallbackStrategyInfo = [\n instantiateModuleWorkerDirectlyForBrowser,\n \"using inline `new URL(\u2026, import.meta.url)`\",\n \"may\",\n ];\n\n const fallbackOrder: FallbackStrategyInfo[] =\n searchOutsideDebugGlobals.prioritizeEsbuildWorkaroundForWorkerInstantiation\n ? [\n esbuildWorkaroundStrategy,\n importMetaResolveStrategy,\n newURLStrategy,\n inlineNewURLStrategy,\n ]\n : [\n importMetaResolveStrategy,\n esbuildWorkaroundStrategy,\n newURLStrategy,\n inlineNewURLStrategy,\n ];\n\n for (const [fn, description, warnOnSuccess] of fallbackOrder) {\n try {\n const worker = await fn();\n if (warnOnSuccess) {\n if (searchOutsideDebugGlobals.showWorkerInstantiationWarnings) {\n console.warn(\n `Module worker instantiation required ${description}. \\`cubing.js\\` ${warnOnSuccess} not support this fallback in the future.`,\n );\n }\n }\n return worker;\n } catch {\n // if (searchOutsideDebugGlobals.showWorkerInstantiationWarnings) {\n // console.warn(`${failed(description)}, falling back.`);\n // }\n }\n }\n\n throw new Error(`${failed()}. There are no more fallbacks available.`);\n}\n", "import { Alg } from \"../alg\";\nimport type { KPuzzle } from \"../kpuzzle\";\n// import { preInitialize222 } from \"../implementations/2x2x2\";\nimport type { KPattern } from \"../kpuzzle/KPattern\";\nimport type { PrefetchLevel } from \"./inside/api\";\nimport type { TwipsOptions } from \"./inside/solve/twips\";\nimport {\n allInsideOutsideAPIPromises,\n type InsideOutsideAPI,\n instantiateWorker,\n} from \"./instantiator\";\n\nlet cachedWorkerInstance: Promise<InsideOutsideAPI> | undefined;\nfunction getCachedWorkerInstance(): Promise<InsideOutsideAPI> {\n return (cachedWorkerInstance ??= instantiateWorker());\n}\n\n/**\n * `node` has the unfortunate semantics that:\n *\n * - Every message refs a worker.\n * - The process hangs if any reffed worker still exists.\n *\n * And we need workers with pending scrambles to be reffed to avoid\n * https://github.com/cubing/cubing.js/issues/358\n *\n * So we have to carefully track everything that can result in message\n * exchanges, and unref once the line has gone quiet (until reffed again).\n *\n * We don't technically need to ref here (just unref), but we do it because:\n *\n * - it's not hard to do,\n * - it makes the implementation more clear,\n * - it can guard against subtle race conditions to do it here synchronously.\n *\n */\n// TODO: this should be pushed to the comlink layer.\nconst leases: WeakMap<InsideOutsideAPI, Set<Promise<any>>> = new WeakMap();\nasync function leaseRef<T>(\n api: InsideOutsideAPI,\n promiseFn: (api: InsideOutsideAPI) => Promise<T>,\n) {\n if (!leases.has(api)) {\n leases.set(api, new Set());\n }\n const promise = promiseFn(api);\n const leasesForWorker = leases.get(api)!;\n leasesForWorker.add(promise);\n api.outsideAPI?.ref?.();\n try {\n // Note: the `await` is critical here.\n return await promise;\n } finally {\n leasesForWorker.delete(promise);\n if (leasesForWorker.size === 0) {\n api.outsideAPI?.unref();\n }\n }\n}\n\nasync function leaseCachedWorkerInstanceRef<T>(\n promiseFn: (cwi: InsideOutsideAPI) => Promise<T>,\n): Promise<T> {\n // TODO: typing\n return leaseRef((await getCachedWorkerInstance()) as any, promiseFn);\n}\n\nexport async function mapToAllWorkers(\n f: (worker: InsideOutsideAPI) => void,\n): Promise<void> {\n await Promise.all(\n allInsideOutsideAPIPromises.map(async (worker) => {\n await leaseRef(await worker, async (worker) => f(worker));\n }),\n );\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 \"333oh\":\n _preInitializationHintForEvent(\"333\");\n return;\n }\n void (async () => {\n await (await getCachedWorkerInstance()).insideAPI.initialize(eventID);\n })();\n}\n\nexport async function randomScrambleForEvent(eventID: string): Promise<Alg> {\n const worker = searchOutsideDebugGlobals.forceNewWorkerForEveryScramble\n ? await instantiateWorker()\n : await getCachedWorkerInstance();\n const scrambleString = await leaseRef(worker, (worker) =>\n worker.insideAPI.randomScrambleStringForEvent(eventID),\n );\n return Alg.fromString(scrambleString);\n}\n\nexport async function deriveScrambleForEvent(\n derivationSeedHex: string,\n derivationSaltHierarchy: string[],\n eventID: string,\n): Promise<Alg> {\n if (!searchOutsideDebugGlobals.allowDerivedScrambles) {\n throw new Error(\"Derived scrambles are not allowed.\");\n }\n const worker = searchOutsideDebugGlobals.forceNewWorkerForEveryScramble\n ? await instantiateWorker()\n : await getCachedWorkerInstance();\n const scrambleString = await leaseRef(worker, (worker) =>\n worker.insideAPI.deriveScrambleStringForEvent(\n derivationSeedHex,\n derivationSaltHierarchy,\n eventID,\n ),\n );\n return Alg.fromString(scrambleString);\n}\n\nexport async function experimentalSolve3x3x3IgnoringCenters(\n pattern: KPattern,\n): Promise<Alg> {\n return Alg.fromString(\n await leaseCachedWorkerInstanceRef((cwi) =>\n cwi.insideAPI.solve333ToString(pattern.patternData),\n ),\n );\n}\n\nexport async function experimentalSolve2x2x2(pattern: KPattern): Promise<Alg> {\n return Alg.fromString(\n await leaseCachedWorkerInstanceRef((cwi) =>\n cwi.insideAPI.solve222ToString(pattern.patternData),\n ),\n );\n}\n\nexport async function solveSkewb(pattern: KPattern): Promise<Alg> {\n return Alg.fromString(\n await leaseCachedWorkerInstanceRef((cwi) =>\n cwi.insideAPI.solveSkewbToString(pattern.patternData),\n ),\n );\n}\n\nexport async function solvePyraminx(pattern: KPattern): Promise<Alg> {\n return Alg.fromString(\n await leaseCachedWorkerInstanceRef((cwi) =>\n cwi.insideAPI.solvePyraminxToString(pattern.patternData),\n ),\n );\n}\n\nexport async function solveMegaminx(pattern: KPattern): Promise<Alg> {\n return Alg.fromString(\n await leaseCachedWorkerInstanceRef((cwi) =>\n cwi.insideAPI.solveMegaminxToString(pattern.patternData),\n ),\n );\n}\n\nexport interface SolveTwipsOptions {\n generatorMoves?: string[];\n targetPattern?: KPattern;\n minDepth?: number;\n maxDepth?: number;\n}\n\nexport async function solveTwips(\n kpuzzle: KPuzzle,\n pattern: KPattern,\n options?: SolveTwipsOptions,\n): Promise<Alg> {\n const { targetPattern, ...otherOptions } = options ?? {};\n const apiOptions: TwipsOptions = otherOptions;\n if (targetPattern) {\n apiOptions.targetPattern = targetPattern.patternData;\n }\n const { ...def } = kpuzzle.definition;\n delete def.experimentalIsPatternSolved;\n // delete def.derivedMoves;\n const dedicatedWorker = await instantiateWorker();\n try {\n return Alg.fromString(\n // TODO: unnecessary because we terminate the worker?\n await leaseRef(dedicatedWorker, (worker) =>\n worker.insideAPI.solveTwipsToString(\n def,\n pattern.patternData,\n apiOptions,\n ),\n ),\n );\n } finally {\n console.log(\"Search ended, terminating dedicated `twips` worker.\");\n // TODO: support re-using the same worker for multiple searches..\n dedicatedWorker.outsideAPI.terminate();\n }\n}\n\ninterface SearchOutsideDebugGlobals {\n logPerf: boolean;\n scramblePrefetchLevel: `${PrefetchLevel}`;\n forceNewWorkerForEveryScramble: boolean;\n showWorkerInstantiationWarnings: boolean;\n // This can prevent a request to `search-worker-entry.js` when it doesn't exist, if the library semantics have been mangled by `esbuild`.\n prioritizeEsbuildWorkaroundForWorkerInstantiation: boolean;\n allowDerivedScrambles: boolean;\n}\n\nexport const searchOutsideDebugGlobals: SearchOutsideDebugGlobals = {\n logPerf: true,\n scramblePrefetchLevel: \"auto\",\n forceNewWorkerForEveryScramble: false,\n showWorkerInstantiationWarnings: true,\n prioritizeEsbuildWorkaroundForWorkerInstantiation: false,\n allowDerivedScrambles: false,\n};\n\nexport function setSearchDebug(\n options: Partial<SearchOutsideDebugGlobals>,\n): void {\n const { logPerf, scramblePrefetchLevel } = options;\n if (typeof logPerf !== \"undefined\") {\n searchOutsideDebugGlobals.logPerf = logPerf;\n void mapToAllWorkers((worker) =>\n worker.insideAPI.setDebugMeasurePerf(logPerf),\n );\n }\n if (typeof scramblePrefetchLevel !== \"undefined\") {\n searchOutsideDebugGlobals.scramblePrefetchLevel = scramblePrefetchLevel;\n void mapToAllWorkers((worker) =>\n worker.insideAPI.setScramblePrefetchLevel(\n scramblePrefetchLevel as PrefetchLevel,\n ),\n );\n }\n for (const booleanField of [\n \"forceNewWorkerForEveryScramble\",\n \"showWorkerInstantiationWarnings\",\n \"prioritizeEsbuildWorkaroundForWorkerInstantiation\",\n \"allowDerivedScrambles\",\n ] as const) {\n if (booleanField in options) {\n searchOutsideDebugGlobals[booleanField] =\n options[booleanField] ?? searchOutsideDebugGlobals[booleanField];\n }\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["nodeWorker", "worker", "worker"]
|
|
7
|
-
}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
// src/cubing/vendor/apache/comlink-everywhere/node-adapter.ts
|
|
2
|
-
function nodeEndpoint(parentPort) {
|
|
3
|
-
const listeners = /* @__PURE__ */ new WeakMap();
|
|
4
|
-
const parentPortAsNodeWorker = parentPort;
|
|
5
|
-
const constructedWorker = {
|
|
6
|
-
postMessage: parentPort.postMessage.bind(parentPort),
|
|
7
|
-
addEventListener: (_, eh) => {
|
|
8
|
-
const l = (data) => {
|
|
9
|
-
if ("handleEvent" in eh) {
|
|
10
|
-
eh.handleEvent({ data });
|
|
11
|
-
} else {
|
|
12
|
-
eh({ data });
|
|
13
|
-
}
|
|
14
|
-
};
|
|
15
|
-
parentPort.on("message", l);
|
|
16
|
-
listeners.set(eh, l);
|
|
17
|
-
},
|
|
18
|
-
removeEventListener: (_, eh) => {
|
|
19
|
-
const l = listeners.get(eh);
|
|
20
|
-
if (!l) {
|
|
21
|
-
return;
|
|
22
|
-
}
|
|
23
|
-
parentPort.off("message", l);
|
|
24
|
-
listeners.delete(eh);
|
|
25
|
-
},
|
|
26
|
-
nodeWorker: parentPortAsNodeWorker,
|
|
27
|
-
terminate: () => {
|
|
28
|
-
parentPortAsNodeWorker.terminate();
|
|
29
|
-
}
|
|
30
|
-
// start: nep.start && nep.start.bind(nep),
|
|
31
|
-
};
|
|
32
|
-
return constructedWorker;
|
|
33
|
-
}
|
|
34
|
-
var node_adapter_default = nodeEndpoint;
|
|
35
|
-
|
|
36
|
-
export {
|
|
37
|
-
node_adapter_default
|
|
38
|
-
};
|
|
39
|
-
//# sourceMappingURL=chunk-XO3JAA3V.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/cubing/vendor/apache/comlink-everywhere/node-adapter.ts"],
|
|
4
|
-
"sourcesContent": ["import type {\n MessagePort as NodeMessagePort,\n Worker as NodeWorker,\n} from \"node:worker_threads\";\n\nexport type { NodeWorker };\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(parentPort: NodeMessagePort | NodeWorker): Worker & {\n nodeWorker?: import(\"node:worker_threads\").Worker;\n} {\n const listeners = new WeakMap();\n const parentPortAsNodeWorker = parentPort as NodeWorker;\n const constructedWorker = {\n postMessage: parentPort.postMessage.bind(parentPort),\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 parentPort.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 parentPort.off(\"message\", l);\n listeners.delete(eh);\n },\n nodeWorker: parentPortAsNodeWorker,\n terminate: () => {\n parentPortAsNodeWorker.terminate();\n },\n // start: nep.start && nep.start.bind(nep),\n } as Worker & {\n nodeWorker?: import(\"node:worker_threads\").Worker;\n };\n\n /** Unref the parent port to prevent `node` from hanging:\n *\n * - https://github.com/cubing/cubing.js/issues/358\n * - https://github.com/nodejs/node/issues/53036#issuecomment-2118106710\n */\n // parentPortAsNodeWorker.unref();\n\n return constructedWorker;\n}\n\nexport default nodeEndpoint;\n//# sourceMappingURL=node-adapter.mjs.map\n"],
|
|
5
|
-
"mappings": ";AAsBA,SAAS,aAAa,YAEpB;AACA,QAAM,YAAY,oBAAI,QAAQ;AAC9B,QAAM,yBAAyB;AAC/B,QAAM,oBAAoB;AAAA,IACxB,aAAa,WAAW,YAAY,KAAK,UAAU;AAAA,IACnD,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,iBAAW,GAAG,WAAW,CAAC;AAC1B,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,iBAAW,IAAI,WAAW,CAAC;AAC3B,gBAAU,OAAO,EAAE;AAAA,IACrB;AAAA,IACA,YAAY;AAAA,IACZ,WAAW,MAAM;AACf,6BAAuB,UAAU;AAAA,IACnC;AAAA;AAAA,EAEF;AAWA,SAAO;AACT;AAEA,IAAO,uBAAQ;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|