cubing 0.63.2 → 0.63.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/README.md +15 -1
  2. package/alg/index.d.ts +1 -1
  3. package/bluetooth/index.d.ts +1 -1
  4. package/dist/bin/chunks/{chunk-52ODPET6.js → chunk-E6RYEKYL.js} +2 -2
  5. package/dist/bin/order.js +8 -4
  6. package/dist/bin/order.js.map +2 -2
  7. package/dist/bin/puzzle-geometry-bin.js +8 -4
  8. package/dist/bin/puzzle-geometry-bin.js.map +2 -2
  9. package/dist/bin/scramble.js +8 -4
  10. package/dist/bin/scramble.js.map +2 -2
  11. package/dist/bin/svg.js +56 -0
  12. package/dist/bin/svg.js.map +7 -0
  13. package/dist/lib/cubing/alg/index.d.ts +2 -84
  14. package/dist/lib/cubing/alg/index.js +1 -1
  15. package/dist/lib/cubing/bluetooth/index.d.ts +147 -134
  16. package/dist/lib/cubing/bluetooth/index.js +29 -5
  17. package/dist/lib/cubing/bluetooth/index.js.map +2 -2
  18. package/dist/lib/cubing/chunks/{big-puzzle-orientation-ZVZQJEF5.js → big-puzzle-orientation-ADWIOX6S.js} +2 -2
  19. package/dist/lib/cubing/chunks/{chunk-M7YKTETT.js → chunk-53SI7XS4.js} +14 -4
  20. package/dist/lib/cubing/chunks/chunk-53SI7XS4.js.map +7 -0
  21. package/dist/lib/cubing/chunks/{chunk-RINY3U6G.js → chunk-5ONX3JVC.js} +7 -2
  22. package/dist/lib/cubing/chunks/{chunk-RINY3U6G.js.map → chunk-5ONX3JVC.js.map} +1 -1
  23. package/dist/lib/cubing/chunks/{chunk-ROB5TROI.js → chunk-7LXHWXCO.js} +2 -2
  24. package/dist/lib/cubing/chunks/{chunk-E3YLQC45.js → chunk-GHFBZYSV.js} +2 -2
  25. package/dist/lib/cubing/chunks/chunk-GHFBZYSV.js.map +7 -0
  26. package/dist/lib/cubing/chunks/{chunk-ZU7PSGX4.js → chunk-JCCXEYXU.js} +4 -3
  27. package/dist/lib/cubing/chunks/{chunk-ZU7PSGX4.js.map → chunk-JCCXEYXU.js.map} +1 -1
  28. package/dist/lib/cubing/chunks/{chunk-LWCBAAHO.js → chunk-LD4XJTCU.js} +28 -13
  29. package/dist/lib/cubing/chunks/chunk-LD4XJTCU.js.map +7 -0
  30. package/dist/lib/cubing/chunks/{chunk-O6HEZXGY.js → chunk-N5FJ5YIA.js} +4 -3
  31. package/dist/lib/cubing/chunks/{chunk-O6HEZXGY.js.map → chunk-N5FJ5YIA.js.map} +1 -1
  32. package/dist/lib/cubing/chunks/{chunk-NGW52SHR.js → chunk-S74APGTK.js} +3 -3
  33. package/dist/lib/cubing/chunks/{chunk-FLK6AZKB.js → chunk-VYAO5FCM.js} +7 -7
  34. package/dist/lib/cubing/chunks/{chunk-FLK6AZKB.js.map → chunk-VYAO5FCM.js.map} +2 -2
  35. package/dist/lib/cubing/chunks/{chunk-FUHYAW74.js → chunk-WBMKMQAL.js} +49 -63
  36. package/dist/lib/cubing/chunks/chunk-WBMKMQAL.js.map +7 -0
  37. package/dist/lib/cubing/chunks/{chunk-V27EM5TJ.js → chunk-XVZLWT3A.js} +44 -49
  38. package/dist/lib/cubing/chunks/chunk-XVZLWT3A.js.map +7 -0
  39. package/dist/lib/cubing/chunks/{inside-Q56GLXG4.js → inside-VUJSPBRA.js} +64 -28
  40. package/dist/lib/cubing/chunks/inside-VUJSPBRA.js.map +7 -0
  41. package/dist/lib/cubing/chunks/puzzles-dynamic-4x4x4-AIGABOAR.js +132 -0
  42. package/dist/lib/cubing/chunks/puzzles-dynamic-4x4x4-AIGABOAR.js.map +7 -0
  43. package/dist/lib/cubing/chunks/{search-dynamic-sgs-side-events-GB4WAJ7I.js → search-dynamic-sgs-side-events-LHAMZP5J.js} +6 -6
  44. package/dist/lib/cubing/chunks/{search-dynamic-sgs-unofficial-2CECFBP3.js → search-dynamic-sgs-unofficial-GXKMVR4W.js} +6 -6
  45. package/dist/lib/cubing/chunks/{search-dynamic-solve-4x4x4-E576AITS.js → search-dynamic-solve-4x4x4-N2X3RMYU.js} +7 -7
  46. package/dist/lib/cubing/chunks/{search-dynamic-solve-fto-UZMNOI6U.js → search-dynamic-solve-fto-I5ID5LXD.js} +2 -2
  47. package/dist/lib/cubing/chunks/search-dynamic-solve-kilominx-Y2D3C74Y.js +771 -0
  48. package/dist/lib/cubing/chunks/search-dynamic-solve-kilominx-Y2D3C74Y.js.map +7 -0
  49. package/dist/lib/cubing/chunks/search-worker-entry.js +7 -6
  50. package/dist/lib/cubing/chunks/search-worker-entry.js.map +2 -2
  51. package/dist/lib/cubing/chunks/{twips-YHXBF55O.js → twips-ZNMKGC5U.js} +4 -4
  52. package/dist/lib/cubing/chunks/twips_wasm_bg-TJNYGA2C-AP2O4LGG.js +10 -0
  53. package/dist/lib/cubing/chunks/twips_wasm_bg-TJNYGA2C-AP2O4LGG.js.map +7 -0
  54. package/dist/lib/cubing/chunks/{twisty-dynamic-3d-IKE4BUQG.js → twisty-dynamic-3d-LSRGWTXG.js} +105 -46
  55. package/dist/lib/cubing/chunks/twisty-dynamic-3d-LSRGWTXG.js.map +7 -0
  56. package/dist/lib/cubing/index-BXHm_6gm.d.ts +2626 -0
  57. package/dist/lib/cubing/index-Cvk652Bd.d.ts +76 -0
  58. package/dist/lib/cubing/kpuzzle/index.d.ts +2 -3
  59. package/dist/lib/cubing/kpuzzle/index.js +2 -2
  60. package/dist/lib/cubing/notation/index.d.ts +18 -17
  61. package/dist/lib/cubing/notation/index.js +4 -4
  62. package/dist/lib/cubing/outside-CwNOEuJJ.d.ts +38 -0
  63. package/dist/lib/cubing/protocol/index.d.ts +14 -14
  64. package/dist/lib/cubing/protocol/index.js +4 -4
  65. package/dist/lib/cubing/puzzle-geometry/index.d.ts +2 -8
  66. package/dist/lib/cubing/puzzle-geometry/index.js +33 -1
  67. package/dist/lib/cubing/puzzle-geometry/index.js.map +1 -1
  68. package/dist/lib/cubing/puzzles/index.d.ts +2 -45
  69. package/dist/lib/cubing/puzzles/index.js +4 -4
  70. package/dist/lib/cubing/scramble/index.d.ts +2 -4
  71. package/dist/lib/cubing/scramble/index.js +6 -6
  72. package/dist/lib/cubing/search/index.d.ts +4 -9
  73. package/dist/lib/cubing/search/index.js +6 -6
  74. package/dist/lib/cubing/stream/index.d.ts +2 -45
  75. package/dist/lib/cubing/stream/index.js +1 -1
  76. package/dist/lib/cubing/twisty/index.d.ts +2 -60
  77. package/dist/lib/cubing/twisty/index.js +101 -20
  78. package/dist/lib/cubing/twisty/index.js.map +3 -3
  79. package/kpuzzle/index.d.ts +1 -1
  80. package/notation/index.d.ts +1 -1
  81. package/package.json +19 -20
  82. package/protocol/index.d.ts +1 -1
  83. package/puzzle-geometry/index.d.ts +1 -1
  84. package/puzzles/index.d.ts +1 -1
  85. package/scramble/index.d.ts +1 -1
  86. package/search/index.d.ts +1 -1
  87. package/stream/index.d.ts +1 -1
  88. package/twisty/index.d.ts +1 -1
  89. package/dist/lib/cubing/PuzzleLoader-R-puDLmC.d.ts +0 -2352
  90. package/dist/lib/cubing/chunks/chunk-E3YLQC45.js.map +0 -7
  91. package/dist/lib/cubing/chunks/chunk-FUHYAW74.js.map +0 -7
  92. package/dist/lib/cubing/chunks/chunk-LWCBAAHO.js.map +0 -7
  93. package/dist/lib/cubing/chunks/chunk-M7YKTETT.js.map +0 -7
  94. package/dist/lib/cubing/chunks/chunk-V27EM5TJ.js.map +0 -7
  95. package/dist/lib/cubing/chunks/inside-Q56GLXG4.js.map +0 -7
  96. package/dist/lib/cubing/chunks/puzzles-dynamic-4x4x4-REUXFQJ4.js +0 -124
  97. package/dist/lib/cubing/chunks/puzzles-dynamic-4x4x4-REUXFQJ4.js.map +0 -7
  98. package/dist/lib/cubing/chunks/twips_wasm_bg-RWVQBVBA-5YCKA6O5.js +0 -10
  99. package/dist/lib/cubing/chunks/twips_wasm_bg-RWVQBVBA-5YCKA6O5.js.map +0 -7
  100. package/dist/lib/cubing/chunks/twisty-dynamic-3d-IKE4BUQG.js.map +0 -7
  101. package/dist/lib/cubing/events-IfSwQLYm.d.ts +0 -35
  102. package/dist/lib/cubing/index-btIxbuNp.d.ts +0 -33
  103. /package/dist/bin/chunks/{chunk-52ODPET6.js.map → chunk-E6RYEKYL.js.map} +0 -0
  104. /package/dist/lib/cubing/chunks/{big-puzzle-orientation-ZVZQJEF5.js.map → big-puzzle-orientation-ADWIOX6S.js.map} +0 -0
  105. /package/dist/lib/cubing/chunks/{chunk-ROB5TROI.js.map → chunk-7LXHWXCO.js.map} +0 -0
  106. /package/dist/lib/cubing/chunks/{chunk-NGW52SHR.js.map → chunk-S74APGTK.js.map} +0 -0
  107. /package/dist/lib/cubing/chunks/{search-dynamic-sgs-side-events-GB4WAJ7I.js.map → search-dynamic-sgs-side-events-LHAMZP5J.js.map} +0 -0
  108. /package/dist/lib/cubing/chunks/{search-dynamic-sgs-unofficial-2CECFBP3.js.map → search-dynamic-sgs-unofficial-GXKMVR4W.js.map} +0 -0
  109. /package/dist/lib/cubing/chunks/{search-dynamic-solve-4x4x4-E576AITS.js.map → search-dynamic-solve-4x4x4-N2X3RMYU.js.map} +0 -0
  110. /package/dist/lib/cubing/chunks/{search-dynamic-solve-fto-UZMNOI6U.js.map → search-dynamic-solve-fto-I5ID5LXD.js.map} +0 -0
  111. /package/dist/lib/cubing/chunks/{twips-YHXBF55O.js.map → twips-ZNMKGC5U.js.map} +0 -0
@@ -0,0 +1,7 @@
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", "../../../../node_modules/.bun/@cubing+comlink-everywhere@0.1.2/node_modules/@cubing/comlink-everywhere/src/comlink.ts", "../../../../node_modules/.bun/@cubing+comlink-everywhere@0.1.2/node_modules/@cubing/comlink-everywhere/src/PortableWorker.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 { LazyPromise } from \"@cubing/lazy-promise\";\n\nexport const dynamic3x3x3min2phase = new LazyPromise(\n () => import(\"./search-dynamic-solve-3x3x3\"),\n);\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", "/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n type Endpoint,\n type EventSource,\n type Message,\n MessageType,\n type PostMessageWithOrigin,\n type WireValue,\n WireValueType,\n} from \"./protocol\";\nexport type { Endpoint };\n\nexport const proxyMarker = Symbol(\"Comlink.proxy\");\nexport const createEndpoint = Symbol(\"Comlink.endpoint\");\nexport const releaseProxy = Symbol(\"Comlink.releaseProxy\");\nexport const finalizer = Symbol(\"Comlink.finalizer\");\n\nconst throwMarker = Symbol(\"Comlink.thrown\");\n\nconst REF_COUNT_BY_DEFAULT = true;\n\n// biome-ignore lint/suspicious/noExplicitAny: The API often requires us to effectively use `any`. This indicates \"we really have no type for this\".\nexport type Any = any;\n\n/**\n * Interface of values that were marked to be proxied with `comlink.proxy()`.\n * Can also be implemented by classes.\n */\nexport interface ProxyMarked {\n [proxyMarker]: true;\n}\n\n/**\n * Takes a type and wraps it in a Promise, if it not already is one.\n * This is to avoid `Promise<Promise<T>>`.\n *\n * This is the inverse of `Unpromisify<T>`.\n */\ntype Promisify<T> = T extends Promise<unknown> ? T : Promise<T>;\n/**\n * Takes a type that may be Promise and unwraps the Promise type.\n * If `P` is not a Promise, it returns `P`.\n *\n * This is the inverse of `Promisify<T>`.\n */\ntype Unpromisify<P> = P extends Promise<infer T> ? T : P;\n\n/**\n * Takes the raw type of a remote property and returns the type that is visible to the local thread on the proxy.\n *\n * Note: This needs to be its own type alias, otherwise it will not distribute over unions.\n * See https://www.typescriptlang.org/docs/handbook/advanced-types.html#distributive-conditional-types\n */\ntype RemoteProperty<T> =\n // If the value is a method, comlink will proxy it automatically.\n // Objects are only proxied if they are marked to be proxied.\n // Otherwise, the property is converted to a Promise that resolves the cloned value.\n // biome-ignore lint/complexity/noBannedTypes: This is a very general type.\n T extends Function | ProxyMarked ? Remote<T> : Promisify<T>;\n\n/**\n * Takes the raw type of a property as a remote thread would see it through a proxy (e.g. when passed in as a function\n * argument) and returns the type that the local thread has to supply.\n *\n * This is the inverse of `RemoteProperty<T>`.\n *\n * Note: This needs to be its own type alias, otherwise it will not distribute over unions. See\n * https://www.typescriptlang.org/docs/handbook/advanced-types.html#distributive-conditional-types\n */\n// biome-ignore lint/complexity/noBannedTypes: This is a very general type.\ntype LocalProperty<T> = T extends Function | ProxyMarked\n ? Local<T>\n : Unpromisify<T>;\n\n/**\n * Proxies `T` if it is a `ProxyMarked`, clones it otherwise (as handled by structured cloning and transfer handlers).\n */\nexport type ProxyOrClone<T> = T extends ProxyMarked ? Remote<T> : T;\n/**\n * Inverse of `ProxyOrClone<T>`.\n */\nexport type UnproxyOrClone<T> =\n T extends RemoteObject<ProxyMarked> ? Local<T> : T;\n\n/**\n * Takes the raw type of a remote object in the other thread and returns the type as it is visible to the local thread\n * when proxied with `Comlink.proxy()`.\n *\n * This does not handle call signatures, which is handled by the more general `Remote<T>` type.\n *\n * @template T The raw type of a remote object as seen in the other thread.\n */\nexport type RemoteObject<T> = { [P in keyof T]: RemoteProperty<T[P]> };\n/**\n * Takes the type of an object as a remote thread would see it through a proxy (e.g. when passed in as a function\n * argument) and returns the type that the local thread has to supply.\n *\n * This does not handle call signatures, which is handled by the more general `Local<T>` type.\n *\n * This is the inverse of `RemoteObject<T>`.\n *\n * @template T The type of a proxied object.\n */\nexport type LocalObject<T> = { [P in keyof T]: LocalProperty<T[P]> };\n\n/**\n * Additional special comlink methods available on each proxy returned by `Comlink.wrap()`.\n */\nexport interface ProxyMethods {\n [createEndpoint]: () => Promise<MessagePort>;\n [releaseProxy]: () => void;\n}\n\n/**\n * Takes the raw type of a remote object, function or class in the other thread and returns the type as it is visible to\n * the local thread from the proxy return value of `Comlink.wrap()` or `Comlink.proxy()`.\n */\nexport type Remote<T> =\n // Handle properties\n RemoteObject<T> &\n // Handle call signature (if present)\n (T extends (...args: infer TArguments) => infer TReturn\n ? (\n ...args: { [I in keyof TArguments]: UnproxyOrClone<TArguments[I]> }\n ) => Promisify<ProxyOrClone<Unpromisify<TReturn>>>\n : unknown) &\n // Handle construct signature (if present)\n // The return of construct signatures is always proxied (whether marked or not)\n (T extends { new (...args: infer TArguments): infer TInstance }\n ? {\n new (\n ...args: {\n [I in keyof TArguments]: UnproxyOrClone<TArguments[I]>;\n }\n ): Promisify<Remote<TInstance>>;\n }\n : unknown) &\n // Include additional special comlink methods available on the proxy.\n ProxyMethods;\n\n/**\n * Expresses that a type can be either a sync or async.\n */\ntype MaybePromise<T> = Promise<T> | T;\n\n/**\n * Takes the raw type of a remote object, function or class as a remote thread would see it through a proxy (e.g. when\n * passed in as a function argument) and returns the type the local thread has to supply.\n *\n * This is the inverse of `Remote<T>`. It takes a `Remote<T>` and returns its original input `T`.\n */\nexport type Local<T> =\n // Omit the special proxy methods (they don't need to be supplied, comlink adds them)\n Omit<LocalObject<T>, keyof ProxyMethods> &\n // Handle call signatures (if present)\n (T extends (...args: infer TArguments) => infer TReturn\n ? (\n ...args: { [I in keyof TArguments]: ProxyOrClone<TArguments[I]> }\n ) => MaybePromise<UnproxyOrClone<Unpromisify<TReturn>>> // The raw function could either be sync or async, but is always proxied automatically\n : unknown) &\n // Handle construct signature (if present)\n // The return of construct signatures is always proxied (whether marked or not)\n (T extends { new (...args: infer TArguments): infer TInstance }\n ? {\n new (\n ...args: {\n [I in keyof TArguments]: ProxyOrClone<TArguments[I]>;\n }\n ): // The raw constructor could either be sync or async, but is always proxied automatically\n MaybePromise<Local<Unpromisify<TInstance>>>;\n }\n : unknown);\n\nconst isObject = (val: unknown): val is object =>\n (typeof val === \"object\" && val !== null) || typeof val === \"function\";\n\n/**\n * Customizes the serialization of certain values as determined by `canHandle()`.\n *\n * @template T The input type being handled by this transfer handler.\n * @template S The serialized type sent over the wire.\n */\nexport interface TransferHandler<T, S> {\n /**\n * Gets called for every value to determine whether this transfer handler\n * should serialize the value, which includes checking that it is of the right\n * type (but can perform checks beyond that as well).\n */\n canHandle(value: unknown): value is T;\n\n /**\n * Gets called with the value if `canHandle()` returned `true` to produce a\n * value that can be sent in a message, consisting of structured-cloneable\n * values and/or transferrable objects.\n */\n serialize(value: T): [S, Transferable[]];\n\n /**\n * Gets called to deserialize an incoming value that was serialized in the\n * other thread with this transfer handler (known through the name it was\n * registered under).\n */\n deserialize(value: S): T;\n}\n\n/**\n * Internal transfer handle to handle objects marked to proxy.\n */\nconst proxyTransferHandler: TransferHandler<object, MessagePort> = {\n canHandle: (val): val is ProxyMarked =>\n isObject(val) && (val as ProxyMarked)[proxyMarker],\n serialize(obj) {\n const { port1, port2 } = new MessageChannel();\n expose(obj, port1);\n return [port2, [port2]];\n },\n deserialize(port) {\n port.start();\n return wrap(port);\n },\n};\n\ninterface ThrownValue {\n [throwMarker]: unknown; // just needs to be present\n value: unknown;\n}\ntype SerializedThrownValue =\n | { isError: true; value: Error }\n | { isError: false; value: unknown };\ntype PendingListenersMap = Map<\n string,\n (value: WireValue | PromiseLike<WireValue>) => void\n>;\ntype EndpointWithPendingListeners = {\n endpoint: Endpoint;\n pendingListeners: PendingListenersMap;\n};\n\n/**\n * Internal transfer handler to handle thrown exceptions.\n */\nconst throwTransferHandler: TransferHandler<\n ThrownValue,\n SerializedThrownValue\n> = {\n canHandle: (value): value is ThrownValue =>\n isObject(value) && throwMarker in value,\n serialize({ value }) {\n let serialized: SerializedThrownValue;\n if (value instanceof Error) {\n serialized = {\n isError: true,\n value: {\n message: value.message,\n name: value.name,\n stack: value.stack,\n },\n };\n } else {\n serialized = { isError: false, value };\n }\n return [serialized, []];\n },\n deserialize(serialized) {\n if (serialized.isError) {\n throw Object.assign(\n new Error(serialized.value.message),\n serialized.value,\n );\n }\n throw serialized.value;\n },\n};\n\n/**\n * Allows customizing the serialization of certain values.\n */\nexport const transferHandlers = new Map<\n string,\n TransferHandler<unknown, unknown>\n>([\n [\"proxy\", proxyTransferHandler],\n [\"throw\", throwTransferHandler],\n]);\n\nexport interface NodeEndpoint {\n postMessage(message: Any, transfer?: Any[]): void;\n on(type: string, listener: EventListenerOrEventListenerObject): void;\n off(type: string, listener: EventListenerOrEventListenerObject): void;\n ref?: () => void;\n unref?: () => void;\n start?: () => void;\n terminate?: () => void;\n close?: () => void;\n}\n\nexport function nodeEndpoint(rawEndpoint: NodeEndpoint): Endpoint {\n const listeners: {\n [event: string]:\n | WeakMap<EventListenerOrEventListenerObject, Any>\n | undefined;\n } = {};\n function removeEventListener(\n event: \"message\",\n eh: EventListenerOrEventListenerObject,\n ) {\n const l = listeners[event]?.get(eh);\n if (!l) {\n return;\n }\n rawEndpoint.off(event, l);\n listeners[event]?.delete(eh);\n }\n\n return {\n postMessage: rawEndpoint.postMessage.bind(rawEndpoint),\n addEventListener: (\n event: \"message\",\n handler,\n options?: { once: boolean },\n ) => {\n const listener = (data: Any) => {\n if (options?.once) {\n removeEventListener(event, listener);\n }\n if (\"handleEvent\" in handler) {\n handler.handleEvent({ data } as MessageEvent);\n } else {\n handler({ data } as MessageEvent);\n }\n };\n rawEndpoint.on(event, listener);\n (listeners[event] ?? new WeakMap()).set(handler, listener);\n },\n removeEventListener,\n // In theory, `node` exposes these on `Symbol.for('nodejs.ref') ` and\n // `Symbol.for('nodejs.unref') ` fields. In practice, this is not supported across all runtimes.\n ref: rawEndpoint.ref?.bind(rawEndpoint),\n unref: rawEndpoint.unref?.bind(rawEndpoint),\n start: (rawEndpoint as { start?: () => void }).start?.bind(rawEndpoint),\n terminate: (rawEndpoint as { terminate?: () => void }).terminate?.bind(\n rawEndpoint,\n ),\n close: (rawEndpoint as { close?: () => void }).close?.bind(rawEndpoint),\n };\n}\n\nfunction toEndpoint(endpoint: Endpoint | NodeEndpoint): Endpoint {\n if (\n !(\"addEventListener\" in endpoint) ||\n !(\"removeEventListener\" in endpoint)\n ) {\n return nodeEndpoint(endpoint);\n }\n return endpoint;\n}\n\nfunction isAllowedOrigin(\n allowedOrigins: (string | RegExp)[],\n origin: string,\n): boolean {\n for (const allowedOrigin of allowedOrigins) {\n if (origin === allowedOrigin || allowedOrigin === \"*\") {\n return true;\n }\n if (allowedOrigin instanceof RegExp && allowedOrigin.test(origin)) {\n return true;\n }\n }\n return false;\n}\n\nfunction defaultExposeEndpoint() {\n return (\n globalThis.process?.getBuiltinModule(\"node:worker_threads\").parentPort ??\n (globalThis as Endpoint)\n );\n}\n\nexport function expose(\n obj: Any,\n endpoint: Endpoint | NodeEndpoint = defaultExposeEndpoint(),\n allowedOrigins: (string | RegExp)[] = [\"*\"],\n) {\n const ep = toEndpoint(endpoint);\n ep.addEventListener(\"message\", function callback(ev: MessageEvent) {\n if (!ev || !ev.data) {\n return;\n }\n if (!isAllowedOrigin(allowedOrigins, ev.origin)) {\n console.warn(`Invalid origin '${ev.origin}' for comlink proxy`);\n return;\n }\n const { id, type, path } = {\n path: [] as string[],\n ...(ev.data as Message),\n };\n const argumentList = (ev.data.argumentList || []).map(fromWireValue);\n let returnValue: Any;\n try {\n const parent = path.slice(0, -1).reduce((obj, prop) => obj[prop], obj);\n const rawValue = path.reduce((obj, prop) => obj[prop], obj);\n switch (type) {\n case MessageType.GET:\n {\n returnValue = rawValue;\n }\n break;\n case MessageType.SET:\n {\n parent[path.slice(-1)[0]] = fromWireValue(ev.data.value);\n returnValue = true;\n }\n break;\n case MessageType.APPLY:\n {\n returnValue = rawValue.apply(parent, argumentList);\n }\n break;\n case MessageType.CONSTRUCT:\n {\n const value = new rawValue(...argumentList);\n returnValue = proxy(value);\n }\n break;\n case MessageType.ENDPOINT:\n {\n const { port1, port2 } = new MessageChannel();\n expose(obj, port2);\n returnValue = transfer(port1, [port1]);\n }\n break;\n case MessageType.RELEASE:\n {\n returnValue = undefined;\n }\n break;\n default:\n return;\n }\n } catch (value) {\n returnValue = { value, [throwMarker]: 0 };\n }\n // TODO: `Promise.try`?\n Promise.resolve(returnValue)\n .catch((value) => {\n return { value, [throwMarker]: 0 };\n })\n .then((returnValue) => {\n const [wireValue, transferables] = toWireValue(returnValue);\n ep.postMessage({ ...wireValue, id }, transferables);\n if (type === MessageType.RELEASE) {\n // detach and deactivate after sending release response above.\n ep.removeEventListener(\"message\", callback as Any);\n closeEndPoint(ep);\n if (finalizer in obj && typeof obj[finalizer] === \"function\") {\n obj[finalizer]();\n }\n }\n })\n .catch((_error) => {\n console.log(_error);\n // Send Serialization Error To Caller\n const [wireValue, transferables] = toWireValue({\n value: new TypeError(\"Unserializable return value\"),\n [throwMarker]: 0,\n });\n ep.postMessage({ ...wireValue, id }, transferables);\n });\n } as Any);\n ep.start?.();\n}\n\nfunction closeEndPoint(endpoint: Endpoint) {\n endpoint.close?.();\n endpoint.terminate?.();\n}\n\n/**\n * In certain runtimes like `node`, communicating with a worker will effectively\n * call `.ref()` on (i.e.\"reference\") the worker, which means that the worker\n * will keep the process from terminating by default (similar to an unresolved\n * `Promise`). It is possible to call `.unref()` on a worker to prevent this,\n * but that may allows process to exit before all the intended work is\n * completed.\n *\n * When wrapping a `node` worker, `comlink` now automatically tracks wrapped\n * calls, and calls `.unref()` on the worker whenever there are no more pending\n * calls. This is usually what you want if you are using the the worker\n * specifically for a wrapped API and nothing else. If you need manually manage\n * the worker or pass messages outside of `comlink`, pass `{ refCount: false }`\n * for `options` to disable this behaviour. Note that this makes no difference\n * for workers in web browsers.\n */\nexport function wrap<T>(\n endpoint: Endpoint | NodeEndpoint,\n target?: Any,\n options?: { refCount: boolean },\n): Remote<T> {\n const ep = toEndpoint(endpoint);\n const pendingListeners: PendingListenersMap = new Map();\n\n ep.addEventListener(\"message\", function handleMessage(ev: Event) {\n const { data } = ev as MessageEvent;\n if (!data || !data.id) {\n return;\n }\n const resolver = pendingListeners.get(data.id);\n if (!resolver) {\n return;\n }\n\n try {\n resolver(data);\n } finally {\n pendingListeners.delete(data.id);\n if (\n pendingListeners.size === 0 &&\n (options?.refCount ?? REF_COUNT_BY_DEFAULT)\n ) {\n ep.unref?.();\n }\n }\n });\n\n return createProxy<T>({ endpoint: ep, pendingListeners }, [], target) as Any;\n}\n\nfunction throwIfProxyReleased(isReleased: boolean) {\n if (isReleased) {\n throw new Error(\"Proxy has been released and is not useable\");\n }\n}\n\nfunction releaseEndpoint(epWithPendingListeners: EndpointWithPendingListeners) {\n return requestResponseMessage(epWithPendingListeners, {\n type: MessageType.RELEASE,\n }).then(() => {\n closeEndPoint(epWithPendingListeners.endpoint);\n });\n}\n\nconst proxyCounter = new WeakMap<EndpointWithPendingListeners, number>();\nconst proxyFinalizers =\n \"FinalizationRegistry\" in globalThis &&\n new FinalizationRegistry(\n (epWithPendingListeners: EndpointWithPendingListeners) => {\n const newCount = (proxyCounter.get(epWithPendingListeners) || 0) - 1;\n proxyCounter.set(epWithPendingListeners, newCount);\n if (newCount === 0) {\n void releaseEndpoint(epWithPendingListeners).finally(() => {\n epWithPendingListeners.pendingListeners.clear();\n });\n }\n },\n );\n\nfunction registerProxy(\n proxy: object,\n epWithPendingListeners: EndpointWithPendingListeners,\n) {\n const newCount = (proxyCounter.get(epWithPendingListeners) || 0) + 1;\n proxyCounter.set(epWithPendingListeners, newCount);\n if (proxyFinalizers) {\n proxyFinalizers.register(proxy, epWithPendingListeners, proxy);\n }\n}\n\nfunction unregisterProxy(proxy: object) {\n if (proxyFinalizers) {\n proxyFinalizers.unregister(proxy);\n }\n}\n\nfunction createProxy<T>(\n epWithPendingListeners: EndpointWithPendingListeners,\n path: (string | number | symbol)[] = [],\n target: object = () => {},\n): Remote<T> {\n let isProxyReleased = false;\n const proxy = new Proxy(target, {\n get(_target, prop) {\n throwIfProxyReleased(isProxyReleased);\n if (prop === releaseProxy) {\n return () => {\n unregisterProxy(proxy);\n void releaseEndpoint(epWithPendingListeners).finally(() => {\n epWithPendingListeners.pendingListeners.clear();\n });\n isProxyReleased = true;\n };\n }\n if (prop === \"then\") {\n if (path.length === 0) {\n // biome-ignore lint/suspicious/noThenProperty: TODO\n return { then: () => proxy };\n }\n const r = requestResponseMessage(epWithPendingListeners, {\n type: MessageType.GET,\n path: path.map((p) => p.toString()),\n }).then(fromWireValue);\n return r.then.bind(r);\n }\n return createProxy(epWithPendingListeners, [...path, prop]);\n },\n set(_target, prop, rawValue) {\n throwIfProxyReleased(isProxyReleased);\n // FIXME: ES6 Proxy Handler `set` methods are supposed to return a\n // boolean. To show good will, we return true asynchronously \u00AF\\_(\u30C4)_/\u00AF\n const [value, transferables] = toWireValue(rawValue);\n return requestResponseMessage(\n epWithPendingListeners,\n {\n type: MessageType.SET,\n path: [...path, prop].map((p) => p.toString()),\n value,\n },\n transferables,\n ).then(fromWireValue) as Any;\n },\n apply(_target, _thisArg, rawArgumentList) {\n throwIfProxyReleased(isProxyReleased);\n const last = path[path.length - 1];\n if ((last as Any) === createEndpoint) {\n return requestResponseMessage(epWithPendingListeners, {\n type: MessageType.ENDPOINT,\n }).then(fromWireValue);\n }\n // We just pretend that `bind()` didn\u2019t happen.\n if (last === \"bind\") {\n return createProxy(epWithPendingListeners, path.slice(0, -1));\n }\n const [argumentList, transferables] = processArguments(rawArgumentList);\n return requestResponseMessage(\n epWithPendingListeners,\n {\n type: MessageType.APPLY,\n path: path.map((p) => p.toString()),\n argumentList,\n },\n transferables,\n ).then(fromWireValue);\n },\n construct(_target, rawArgumentList) {\n throwIfProxyReleased(isProxyReleased);\n const [argumentList, transferables] = processArguments(rawArgumentList);\n return requestResponseMessage(\n epWithPendingListeners,\n {\n type: MessageType.CONSTRUCT,\n path: path.map((p) => p.toString()),\n argumentList,\n },\n transferables,\n ).then(fromWireValue);\n },\n });\n registerProxy(proxy, epWithPendingListeners);\n return proxy as Any;\n}\n\nfunction myFlat<T>(arr: (T | T[])[]): T[] {\n return Array.prototype.concat.apply([], arr);\n}\n\nfunction processArguments(argumentList: Any[]): [WireValue[], Transferable[]] {\n const processed = argumentList.map(toWireValue);\n return [processed.map((v) => v[0]), myFlat(processed.map((v) => v[1]))];\n}\n\nconst transferCache = new WeakMap<Any, Transferable[]>();\nexport function transfer<T>(obj: T, transfers: Transferable[]): T {\n transferCache.set(obj, transfers);\n return obj;\n}\n\nexport function proxy<T extends {}>(obj: T): T & ProxyMarked {\n return Object.assign(obj, { [proxyMarker]: true }) as Any;\n}\n\nexport function windowEndpoint(\n w: PostMessageWithOrigin,\n context: EventSource = globalThis,\n targetOrigin = \"*\",\n): Endpoint {\n return {\n postMessage: (msg: Any, transferables: Transferable[]) =>\n w.postMessage(msg, targetOrigin, transferables),\n addEventListener: context.addEventListener.bind(context),\n removeEventListener: context.removeEventListener.bind(context),\n };\n}\n\nfunction toWireValue(value: Any): [WireValue, Transferable[]] {\n for (const [name, handler] of transferHandlers) {\n if (handler.canHandle(value)) {\n const [serializedValue, transferables] = handler.serialize(value);\n return [\n {\n type: WireValueType.HANDLER,\n name,\n value: serializedValue,\n },\n transferables,\n ];\n }\n }\n return [\n {\n type: WireValueType.RAW,\n value,\n },\n transferCache.get(value) || [],\n ];\n}\n\nfunction fromWireValue(value: WireValue): Any {\n switch (value.type) {\n case WireValueType.HANDLER:\n // biome-ignore lint/style/noNonNullAssertion: TODO: add an assertion?\n return transferHandlers.get(value.name)!.deserialize(value.value);\n case WireValueType.RAW:\n return value.value;\n }\n}\n\nfunction requestResponseMessage(\n epWithPendingListeners: EndpointWithPendingListeners,\n msg: Message,\n transfers?: Transferable[],\n): Promise<WireValue> {\n const ep = epWithPendingListeners.endpoint;\n const pendingListeners = epWithPendingListeners.pendingListeners;\n return new Promise((resolve) => {\n const id = generateUUID();\n pendingListeners.set(id, resolve);\n ep.start?.();\n ep.ref?.();\n ep.postMessage({ id, ...msg }, transfers);\n });\n}\n\nfunction generateUUID(): string {\n return new Array(4)\n .fill(0)\n .map(() => Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString(16))\n .join(\"-\");\n}\n", "import type { Worker as NodeWorker } from \"node:worker_threads\";\n\ntype WebWorkerOptions = ConstructorParameters<typeof globalThis.Worker>[1];\ntype NodeWorkerOptions = ConstructorParameters<typeof NodeWorker>[1];\n\ntype WorkerOptions = WebWorkerOptions & NodeWorkerOptions;\n\nfunction isCrossOrigin(url: string | URL) {\n if (!globalThis.location) {\n return false;\n }\n const scriptOrigin = globalThis.location.origin;\n const workerOrigin = new URL(url, globalThis.location.href).origin;\n return scriptOrigin !== workerOrigin;\n}\n\nfunction constructPortableWebWorker(\n url: string | URL,\n workerOptions?: WebWorkerOptions,\n) {\n const useTrampoline = isCrossOrigin(url);\n\n // We could use the trampoline unconditionally, but this would require adding\n // `blob:` to the CSP unnecessarily. So we avoid it when possible.\n if (useTrampoline) {\n // Needed until something like\n // https://github.com/lgarron/worker-execution-origin or\n // https://github.com/whatwg/html/issues/6911 is available in all browser.\n const trampolineSource = `import ${JSON.stringify(url.toString())};`;\n const blob = new Blob([trampolineSource], {\n type: \"text/javascript\",\n });\n\n url = URL.createObjectURL(blob);\n }\n\n const worker = new globalThis.Worker(url, {\n ...workerOptions,\n type: \"module\",\n });\n\n if (useTrampoline) {\n const originalTerminate = worker.terminate.bind(worker);\n Object.defineProperty(worker, \"terminate\", {\n get() {\n // @ts-expect-error: TypeScript is not powerful enough to infer that `url` is always a string in this code path.\n URL.revokeObjectURL(url);\n originalTerminate();\n },\n });\n }\n\n return worker;\n}\n\nfunction constructNodeStyleWorker(\n url: URL | string,\n workerOptions?: NodeWorkerOptions,\n) {\n // We could theoretically use dynamic import, but:\n //\n // - 1. There is no synchronous way to do this conditionally. We can't do it\n // synchronously in a constructor, and while top-level `await` is\n // well-supported in runtimes it's not as easy to use with bundlers.\n // 2. `.getBuiltinModule(\u2026)` signals more clearly that these are strictly\n // runtime dependencies.\n const { Worker: NodeWorker } = globalThis.process.getBuiltinModule(\n \"node:worker_threads\",\n );\n\n // `import.meta.resolve(\u2026)` is the recommended way to get the path to a\n // relative file to pass to the worker constructor. This returns a `file://\u2026`\n // URL as a string, which `bun` and `deno` accept for the worker constructor\n // but `node` does not. We can detect this and convert it to a `URL` to allow\n // more concise, idiomatic code across all platforms.\n url =\n typeof url === \"string\" && url.startsWith(\"file://\") ? new URL(url) : url;\n\n return new NodeWorker(url, workerOptions);\n}\n\ninterface GlobalThisWithMaybeUnreffableWorker {\n Worker?: {\n prototype: {\n unref?: () => void;\n };\n };\n}\n\nfunction constructPortableWorker(\n url: string | URL,\n workerOptions?: WorkerOptions,\n): Worker | NodeWorker {\n const hasWebWorkers = globalThis.Worker;\n const hasBuiltinModules = !!globalThis.process?.getBuiltinModule;\n\n if (hasWebWorkers && !hasBuiltinModules) {\n // Browsers\n return constructPortableWebWorker(url, workerOptions) as Worker &\n Record<Exclude<keyof NodeWorker, keyof Worker>, undefined>;\n }\n\n // Note that optional chaining *should* allow us to access `.unref` rather than\n const webWorkersHaveUnref = (\n globalThis as GlobalThisWithMaybeUnreffableWorker\n ).Worker?.prototype.unref;\n\n if (hasWebWorkers && hasBuiltinModules && webWorkersHaveUnref) {\n // `bun`\n return constructPortableWebWorker(url, workerOptions);\n } else {\n // `node` and `deno`\n return constructNodeStyleWorker(url, workerOptions);\n }\n}\n\ninterface PortableWorkerConstructor {\n new (url: string | URL, workerOptions?: WorkerOptions): Worker | NodeWorker;\n}\n\n// @ts-expect-error: Type wrangling\nexport const PortableWorker: PortableWorkerConstructor =\n constructPortableWorker;\n\n/** This type is useful to cast `Worker | NodeWorker` into a type where methods like `.unref?.()` can be called. */\nexport type WebWorkerOrNodeWorker =\n | (Worker & Record<Exclude<keyof NodeWorker, keyof Worker>, undefined>)\n | (NodeWorker & Record<Exclude<keyof Worker, keyof NodeWorker>, undefined>);\n"],
5
+ "mappings": "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AAA,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;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;A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",
6
+ "names": ["randomChoice", "randomChoice", "obj", "returnValue", "proxy"]
7
+ }
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  countMoves
3
- } from "./chunk-ZU7PSGX4.js";
3
+ } from "./chunk-JCCXEYXU.js";
4
4
  import {
5
5
  addOrientationSuffix,
6
6
  expose,
@@ -10,23 +10,24 @@ import {
10
10
  random333Scramble,
11
11
  setIsInsideWorker,
12
12
  solve333
13
- } from "./chunk-V27EM5TJ.js";
13
+ } from "./chunk-XVZLWT3A.js";
14
14
  import {
15
15
  cube2x2x2,
16
- puzzles
17
- } from "./chunk-FLK6AZKB.js";
16
+ puzzles,
17
+ wcaEvents
18
+ } from "./chunk-VYAO5FCM.js";
18
19
  import {
19
- from
20
- } from "./chunk-FUHYAW74.js";
20
+ LazyPromise
21
+ } from "./chunk-WBMKMQAL.js";
21
22
  import {
22
23
  KPattern,
23
24
  KPuzzle
24
- } from "./chunk-RINY3U6G.js";
25
+ } from "./chunk-5ONX3JVC.js";
25
26
  import {
26
27
  Alg,
27
28
  AlgBuilder,
28
29
  Move
29
- } from "./chunk-O6HEZXGY.js";
30
+ } from "./chunk-N5FJ5YIA.js";
30
31
 
31
32
  // src/cubing/search/inside/solve/puzzles/2x2x2.ts
32
33
  import { randomPermuteInPlace, randomUIntBelow } from "random-uint-below";
@@ -68,6 +69,8 @@ var TrembleSolver = class {
68
69
  trembleMoveNames ?? Object.keys(this.kpuzzle.definition.moves)
69
70
  );
70
71
  }
72
+ kpuzzle;
73
+ sgs;
71
74
  searchMoves;
72
75
  // public badRandomMoves(): KSolvePuzzleState {
73
76
  // return badRandomMoves(this.moves, this.ksp);
@@ -161,7 +164,9 @@ var TrembleSolver = class {
161
164
  };
162
165
 
163
166
  // src/cubing/search/inside/solve/twips.ts
164
- var twipsPromise = from(async () => import("./twips-YHXBF55O.js"));
167
+ var twipsPromise = new LazyPromise(
168
+ async () => import("./twips-ZNMKGC5U.js")
169
+ );
165
170
  async function wasmTwips(def, pattern, options) {
166
171
  const { wasmTwips: wasmTwips2 } = await twipsPromise;
167
172
  return wasmTwips2(def, pattern, options);
@@ -180,7 +185,9 @@ async function wasmDeriveScrambleForEvent(derivationSeedHex, derivationSaltHiera
180
185
  }
181
186
 
182
187
  // src/cubing/search/inside/solve/puzzles/dynamic/sgs-side-events/index.ts
183
- var searchDynamicSideEvents = from(() => import("./search-dynamic-sgs-side-events-GB4WAJ7I.js"));
188
+ var searchDynamicSideEvents = new LazyPromise(
189
+ () => import("./search-dynamic-sgs-side-events-LHAMZP5J.js")
190
+ );
184
191
 
185
192
  // src/cubing/search/inside/solve/puzzles/2x2x2.ts
186
193
  var cachedTrembleSolver = null;
@@ -205,7 +212,9 @@ async function solve222(pattern) {
205
212
  }
206
213
 
207
214
  // src/cubing/search/inside/solve/puzzles/dynamic/4x4x4/index.ts
208
- var dynamic4x4x4Solver = from(() => import("./search-dynamic-solve-4x4x4-E576AITS.js"));
215
+ var dynamic4x4x4Solver = new LazyPromise(
216
+ () => import("./search-dynamic-solve-4x4x4-N2X3RMYU.js")
217
+ );
209
218
 
210
219
  // src/cubing/search/inside/solve/puzzles/4x4x4.ts
211
220
  var randomSuffixes = [
@@ -224,19 +233,32 @@ async function random444OrientedScramble() {
224
233
  }
225
234
 
226
235
  // src/cubing/search/inside/solve/puzzles/dynamic/fto/index.ts
227
- var dynamicFTO = from(
228
- () => import("./search-dynamic-solve-fto-UZMNOI6U.js")
236
+ var dynamicFTO = new LazyPromise(
237
+ () => import("./search-dynamic-solve-fto-I5ID5LXD.js")
229
238
  );
230
239
 
231
240
  // src/cubing/search/inside/solve/puzzles/fto.ts
232
- var dynamic = from(() => import("./search-dynamic-sgs-unofficial-2CECFBP3.js"));
241
+ var dynamic = new LazyPromise(
242
+ () => import("./search-dynamic-sgs-unofficial-GXKMVR4W.js")
243
+ );
233
244
  async function randomFTOScramble() {
234
245
  mustBeInsideWorker();
235
246
  return new Alg(await (await dynamicFTO).getRandomFTOScramble());
236
247
  }
237
248
 
249
+ // src/cubing/search/inside/solve/puzzles/dynamic/kilominx/index.ts
250
+ var dynamicKilominxSolver = new LazyPromise(() => import("./search-dynamic-solve-kilominx-Y2D3C74Y.js"));
251
+
252
+ // src/cubing/search/inside/solve/puzzles/kilominx.ts
253
+ async function randomKilominxScramble() {
254
+ mustBeInsideWorker();
255
+ return (await dynamicKilominxSolver).getRandomKilominxScramble();
256
+ }
257
+
238
258
  // src/cubing/search/inside/solve/puzzles/dynamic/master_tetraminx/index.ts
239
- var dynamicMasterTetraminxSolver = from(() => import("./search-dynamic-solve-master_tetraminx-GIS7T5B7.js"));
259
+ var dynamicMasterTetraminxSolver = new LazyPromise(
260
+ () => import("./search-dynamic-solve-master_tetraminx-GIS7T5B7.js")
261
+ );
240
262
 
241
263
  // src/cubing/search/inside/solve/puzzles/master_tetraminx.ts
242
264
  async function randomMasterTetraminxScramble() {
@@ -300,7 +322,9 @@ async function solvePyraminx(pattern) {
300
322
  }
301
323
 
302
324
  // src/cubing/search/inside/solve/puzzles/dynamic/sgs-unofficial/index.ts
303
- var searchDynamicUnofficial = from(() => import("./search-dynamic-sgs-unofficial-2CECFBP3.js"));
325
+ var searchDynamicUnofficial = new LazyPromise(
326
+ () => import("./search-dynamic-sgs-unofficial-GXKMVR4W.js")
327
+ );
304
328
 
305
329
  // src/cubing/search/inside/solve/puzzles/redi_cube.ts
306
330
  async function randomRediCubeScramble() {
@@ -352,6 +376,10 @@ var DEBUG_MEASURE_PERF = true;
352
376
  function setDebugMeasurePerf(newDebugMeasurePerf) {
353
377
  DEBUG_MEASURE_PERF = newDebugMeasurePerf;
354
378
  }
379
+ var DEBUG_FORCE_TWIPS_FOR_SCRAMBLES = false;
380
+ function setDebugForceTwipsForScrambles(forceTwipsForScrambles) {
381
+ DEBUG_FORCE_TWIPS_FOR_SCRAMBLES = forceTwipsForScrambles;
382
+ }
355
383
  function now() {
356
384
  return (typeof performance === "undefined" ? Date : performance).now();
357
385
  }
@@ -387,6 +415,13 @@ async function randomScrambleForEvent(eventID, options) {
387
415
  }
388
416
  );
389
417
  }
418
+ function twipsOverride() {
419
+ if (DEBUG_FORCE_TWIPS_FOR_SCRAMBLES && (eventID in wcaEvents || ["kilominx"].includes(eventID))) {
420
+ console.log(`Using \`twips\` override for \`${eventID}\` scramble.`);
421
+ return wasm();
422
+ }
423
+ return void 0;
424
+ }
390
425
  switch (eventID) {
391
426
  // case "333":
392
427
  case "222":
@@ -412,31 +447,25 @@ async function randomScrambleForEvent(eventID, options) {
412
447
  // case "333mbf":
413
448
  // case "fto":
414
449
  // case "master_tetraminx":
415
- case "kilominx":
450
+ // case "kilominx":
416
451
  // case "redi_cube":
417
452
  case "baby_fto":
418
453
  return wasm();
419
454
  case "333":
420
455
  case "333oh":
421
456
  case "333ft":
422
- return measurePerf("random333Scramble", random333Scramble, {
457
+ return twipsOverride() ?? measurePerf("random333Scramble", random333Scramble, {
423
458
  isPrefetch: options?.isPrefetch
424
459
  });
425
460
  case "333bf":
426
461
  case "333mbf":
427
- return measurePerf(
428
- "random333OrientedScramble",
429
- random333OrientedScramble
430
- );
462
+ return twipsOverride() ?? measurePerf("random333OrientedScramble", random333OrientedScramble);
431
463
  case "444":
432
- return measurePerf("random444Scramble", random444Scramble, {
464
+ return twipsOverride() ?? measurePerf("random444Scramble", random444Scramble, {
433
465
  isPrefetch: options?.isPrefetch
434
466
  });
435
467
  case "444bf":
436
- return measurePerf(
437
- "random444OrientedScramble",
438
- random444OrientedScramble
439
- );
468
+ return twipsOverride() ?? measurePerf("random444OrientedScramble", random444OrientedScramble);
440
469
  case "fto":
441
470
  return measurePerf("randomFTOScramble", randomFTOScramble, {
442
471
  isPrefetch: options?.isPrefetch
@@ -446,6 +475,10 @@ async function randomScrambleForEvent(eventID, options) {
446
475
  "randomMasterTetraminxScramble",
447
476
  randomMasterTetraminxScramble
448
477
  );
478
+ case "kilominx":
479
+ return twipsOverride() ?? measurePerf("randomKilominxScramble", randomKilominxScramble, {
480
+ isPrefetch: options?.isPrefetch
481
+ });
449
482
  case "redi_cube":
450
483
  return measurePerf("randomRediCubeScramble", randomRediCubeScramble, {
451
484
  isPrefetch: options?.isPrefetch
@@ -544,6 +577,9 @@ var insideAPI = {
544
577
  setDebugMeasurePerf: async (measure) => {
545
578
  setDebugMeasurePerf(measure);
546
579
  },
580
+ setDebugForceTwipsForScrambles: async (measure) => {
581
+ setDebugForceTwipsForScrambles(measure);
582
+ },
547
583
  solveTwipsToString: async (def, patternData, options) => {
548
584
  const kpuzzle = new KPuzzle(def);
549
585
  const pattern = new KPattern(kpuzzle, patternData);
@@ -553,4 +589,4 @@ var insideAPI = {
553
589
 
554
590
  // src/cubing/search/inside/index.ts
555
591
  expose(insideAPI);
556
- //# sourceMappingURL=inside-Q56GLXG4.js.map
592
+ //# sourceMappingURL=inside-VUJSPBRA.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/cubing/search/inside/solve/puzzles/2x2x2.ts", "../../../../src/cubing/search/inside/solve/tremble.ts", "../../../../src/cubing/search/inside/solve/twips.ts", "../../../../src/cubing/search/inside/solve/puzzles/dynamic/sgs-side-events/index.ts", "../../../../src/cubing/search/inside/solve/puzzles/dynamic/4x4x4/index.ts", "../../../../src/cubing/search/inside/solve/puzzles/4x4x4.ts", "../../../../src/cubing/search/inside/solve/puzzles/dynamic/fto/index.ts", "../../../../src/cubing/search/inside/solve/puzzles/fto.ts", "../../../../src/cubing/search/inside/solve/puzzles/dynamic/kilominx/index.ts", "../../../../src/cubing/search/inside/solve/puzzles/kilominx.ts", "../../../../src/cubing/search/inside/solve/puzzles/dynamic/master_tetraminx/index.ts", "../../../../src/cubing/search/inside/solve/puzzles/master_tetraminx.ts", "../../../../src/cubing/search/inside/solve/puzzles/megaminx.ts", "../../../../src/cubing/search/inside/solve/puzzles/pyraminx.ts", "../../../../src/cubing/search/inside/solve/puzzles/dynamic/sgs-unofficial/index.ts", "../../../../src/cubing/search/inside/solve/puzzles/redi_cube.ts", "../../../../src/cubing/search/inside/solve/puzzles/skewb.ts", "../../../../src/cubing/search/inside/api.ts", "../../../../src/cubing/search/inside/index.ts"],
4
+ "sourcesContent": ["import { randomPermuteInPlace, randomUIntBelow } from \"random-uint-below\";\nimport type { Alg } from \"../../../../alg\";\nimport type { KPuzzle } from \"../../../../kpuzzle\";\nimport { KPattern } from \"../../../../kpuzzle\";\nimport { cube2x2x2, puzzles } from \"../../../../puzzles\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport type { SGSCachedData } from \"../parseSGS\";\nimport { TrembleSolver } from \"../tremble\";\nimport { wasmTwips } from \"../twips\";\nimport { searchDynamicSideEvents } from \"./dynamic/sgs-side-events\";\n\nlet cachedTrembleSolver: Promise<TrembleSolver> | null = null;\nasync function getCachedTrembleSolver(): Promise<TrembleSolver> {\n return (\n cachedTrembleSolver ||\n (cachedTrembleSolver = (async (): Promise<TrembleSolver> => {\n const sgsCachedData: SGSCachedData = await (\n await searchDynamicSideEvents\n ).cachedData222();\n return new TrembleSolver(\n await puzzles[\"2x2x2\"].kpuzzle(),\n sgsCachedData,\n \"URFLBD\".split(\"\"),\n );\n })())\n );\n}\n\nexport async function preInitialize222(): Promise<void> {\n await getCachedTrembleSolver();\n}\n\n// TODO: fix def consistency.\nexport async function solve222(pattern: KPattern): Promise<Alg> {\n mustBeInsideWorker();\n return wasmTwips((await cube2x2x2.kpuzzle()).definition, pattern, {\n generatorMoves: \"UFLR\".split(\"\"),\n });\n}\n\n// TODO: factor out and test.\nfunction mutatingRandomizeOrbit(\n kpuzzle: KPuzzle,\n orbitName: string,\n pattern: KPattern,\n options?: { orientationSum?: number },\n): void {\n randomPermuteInPlace(pattern.patternData[orbitName].pieces);\n\n const orbitDefinition = kpuzzle.lookupOrbitDefinition(orbitName);\n const ori = pattern.patternData[orbitName].orientation;\n\n let sum = 0;\n for (let i = 0; i < orbitDefinition.numPieces; i++) {\n const o = randomUIntBelow(orbitDefinition.numOrientations);\n ori[i] = o;\n sum += o;\n }\n\n // console.log(\"aaaa\", options && \"orientationSum\" in options);\n if (options && \"orientationSum\" in options) {\n // console.log(\"sfdsf\", options!.orientationSum),\n ori[0] =\n (((ori[0] + options.orientationSum! - sum) %\n orbitDefinition.numOrientations) +\n orbitDefinition.numOrientations) %\n orbitDefinition.numOrientations;\n }\n}\n\n// TODO: Use SGS?\nexport async function random222Pattern(): Promise<KPattern> {\n const kpuzzle = await puzzles[\"2x2x2\"].kpuzzle();\n const patternCopy: KPattern = new KPattern(\n kpuzzle,\n structuredClone(kpuzzle.defaultPattern().patternData),\n ); // TODO\n mutatingRandomizeOrbit(kpuzzle, \"CORNERS\", patternCopy, {\n orientationSum: 0,\n });\n return patternCopy;\n}\n", "import { randomChoice } from \"random-uint-below\";\nimport { Alg, AlgBuilder, Move, type QuantumMove } from \"../../../alg\";\nimport type { KPuzzle, KTransformation } from \"../../../kpuzzle\";\nimport type { KPattern } from \"../../../kpuzzle/KPattern\";\nimport { experimentalCountMoves } from \"../../../notation\";\nimport type { SGSCachedData } from \"./parseSGS\";\n\nconst DEFAULT_STAGE1_DEPTH_LIMIT = 2; // Moderately performant default.\n\nconst DOUBLECHECK_PLACED_PIECES = true;\nconst DEBUG = false;\n\n// TODO: Take moves instead of move names?\nfunction calculateMoves(\n kpuzzle: KPuzzle,\n moveNames: string[],\n): {\n move: Move;\n transformation: KTransformation;\n}[] {\n const searchMoves: {\n move: Move;\n transformation: KTransformation;\n }[] = [];\n // const identity = identityTransformation(def); // TODO\n // TODO: Make it easy to filter moves.\n for (const moveName of moveNames) {\n const rootMove = new Move(moveName);\n if (rootMove.amount !== 1) {\n throw new Error(\n \"SGS cannot handle def moves with an amount other than 1 yet.\",\n );\n }\n let transformation = kpuzzle.identityTransformation();\n for (let i = 1; ; i++) {\n transformation = transformation.applyMove(rootMove);\n if (transformation.isIdentityTransformation()) {\n break;\n }\n searchMoves.push({\n move: rootMove.modified({ amount: i }),\n transformation,\n });\n }\n }\n return searchMoves;\n}\n\n// function badRandomMoves(moves: string[], ksp: KSolvePuzzle): KSolvePuzzleState {\n// // var sum = 0;\n// var scramble = \"\";\n// for (var i = 0; i < 1000; i++) {\n// scramble = scramble + \" \" + moves[Math.floor(moves.length * Math.random())];\n// }\n// // var sol = \"\";\n// const indexer = new TreeAlgIndexer(ksp, Alg.fromString(scramble));\n// return indexer.transformAtIndex(indexer.numMoves()) as any; // TODO\n// }\n\nexport class TrembleSolver {\n private searchMoves: {\n move: Move;\n transformation: KTransformation;\n }[];\n\n constructor(\n private kpuzzle: KPuzzle,\n private sgs: SGSCachedData,\n trembleMoveNames?: string[],\n ) {\n this.searchMoves = calculateMoves(\n this.kpuzzle,\n trembleMoveNames ?? Object.keys(this.kpuzzle.definition.moves),\n );\n }\n\n // public badRandomMoves(): KSolvePuzzleState {\n // return badRandomMoves(this.moves, this.ksp);\n // }\n\n public async solve(\n pattern: KPattern,\n stage1DepthLimit: number = DEFAULT_STAGE1_DEPTH_LIMIT,\n quantumMoveOrder?: (quantumMove: QuantumMove) => number,\n ): Promise<Alg> {\n const transformation = pattern.experimentalToTransformation();\n if (!transformation) {\n throw new Error(\n \"distinguishable pieces are not supported in tremble solver yt\",\n );\n }\n let bestAlg: Alg | null = null;\n let bestLen = 1000000;\n const recur = (\n recursiveTransformation: KTransformation, // TODO: Support KStatq1\n togo: number,\n sofar: Alg,\n ) => {\n // console.log(\"recur\");\n if (togo === 0) {\n const sgsAlg = this.sgsPhaseSolve(recursiveTransformation, bestLen);\n if (!sgsAlg) {\n return;\n }\n // console.log(\"sgs done!\", sofar.toString(), \"|\", sgsAlg.toString());\n const newAlg = sofar.concat(sgsAlg).experimentalSimplify({\n cancel: {\n directional: \"any-direction\",\n puzzleSpecificModWrap: \"canonical-centered\",\n },\n puzzleSpecificSimplifyOptions: { quantumMoveOrder },\n });\n\n const len = experimentalCountMoves(newAlg);\n if (bestAlg === null || len < bestLen) {\n if (DEBUG) {\n console.log(`New best (${len} moves): ${newAlg.toString()}`);\n console.log(`Tremble moves are: ${sofar.toString()}`);\n }\n bestAlg = newAlg;\n bestLen = len;\n }\n return;\n }\n for (const searchMove of this.searchMoves) {\n recur(\n recursiveTransformation.applyTransformation(\n searchMove.transformation,\n ),\n togo - 1,\n sofar.concat([searchMove.move]),\n );\n }\n };\n for (let d = 0; d <= stage1DepthLimit; d++) {\n recur(transformation, d, new Alg());\n }\n if (bestAlg === null) {\n throw new Error(\"SGS search failed.\");\n }\n return bestAlg;\n }\n\n private sgsPhaseSolve(\n initialTransformation: KTransformation, // TODO: Handle KPattern\n bestLenSofar: number,\n ): Alg | null {\n // const pieceNames = \"UFR URB UBL ULF DRF DFL DLB DBR\".split(\" \");\n\n // function loggo(s: string) {\n // // console.warn(s);\n // // document.body.appendChild(document.createElement(\"div\")).textContent = s;\n // }\n\n // console.log(\"sgsPhaseSolve\");\n const algBuilder = new AlgBuilder();\n let transformation = initialTransformation;\n for (const step of this.sgs.ordering) {\n const cubieSeq = step.pieceOrdering;\n let key = \"\";\n const inverseTransformation = transformation.invert();\n for (let i = 0; i < cubieSeq.length; i++) {\n const loc = cubieSeq[i];\n const orbitName = loc.orbitName;\n const idx = loc.permutationIdx;\n key += ` ${inverseTransformation.transformationData[orbitName].permutation[idx]} ${inverseTransformation.transformationData[orbitName].orientationDelta[idx]}`;\n }\n // console.log(key, step.lookup);\n const info = step.lookup[key];\n if (!info) {\n throw new Error(\"Missing algorithm in sgs or esgs?\");\n }\n algBuilder.experimentalPushAlg(info.alg);\n if (algBuilder.experimentalNumAlgNodes() >= bestLenSofar) {\n return null;\n }\n transformation = transformation.applyTransformation(info.transformation);\n if (DOUBLECHECK_PLACED_PIECES) {\n for (let i = 0; i < cubieSeq.length; i++) {\n const location = cubieSeq[i];\n const orbitName = location.orbitName;\n const idx = location.permutationIdx;\n if (\n transformation.transformationData[orbitName].permutation[idx] !==\n idx ||\n transformation.transformationData[orbitName].orientationDelta[\n idx\n ] !== 0\n ) {\n throw new Error(\"bad SGS :-(\");\n }\n }\n }\n }\n return algBuilder.toAlg();\n }\n}\n\nexport function randomPatternFromSGS(\n kpuzzle: KPuzzle,\n sgs: SGSCachedData,\n): KPattern {\n let transformation = kpuzzle.identityTransformation();\n for (const step of sgs.ordering) {\n const sgsAction = randomChoice(Object.values(step.lookup));\n transformation = transformation.applyTransformation(\n sgsAction.transformation,\n );\n }\n return transformation.toKPattern();\n}\n", "import { LazyPromise } from \"@cubing/lazy-promise\";\nimport type { Alg } from \"../../../alg\";\nimport type {\n KPattern,\n KPatternData,\n KPuzzleDefinition,\n} from \"../../../kpuzzle\";\n\nexport const twipsPromise = new LazyPromise(\n async () => import(\"../../../vendor/mpl/twips\"),\n);\n\nexport interface TwipsOptions {\n // TODO: start prune depth?\n generatorMoves?: string[];\n targetPattern?: KPatternData;\n minDepth?: number;\n maxDepth?: number;\n}\n\nexport async function wasmTwips(\n def: KPuzzleDefinition,\n pattern: KPattern,\n options?: TwipsOptions,\n): Promise<Alg> {\n const { wasmTwips } = await twipsPromise;\n return wasmTwips(def, pattern, options);\n}\n\nexport async function wasmRandomScrambleForEvent(\n eventID: string,\n): Promise<Alg> {\n const { wasmRandomScrambleForEvent } = await twipsPromise;\n return wasmRandomScrambleForEvent(eventID);\n}\n\nexport async function wasmDeriveScrambleForEvent(\n derivationSeedHex: string,\n derivationSaltHierarchy: string[],\n eventID: string,\n): Promise<Alg> {\n const { wasmDeriveScrambleForEvent } = await twipsPromise;\n return wasmDeriveScrambleForEvent(\n derivationSeedHex,\n derivationSaltHierarchy,\n eventID,\n );\n}\n", "import { LazyPromise } from \"@cubing/lazy-promise\";\n\nexport const searchDynamicSideEvents = new LazyPromise(\n () => import(\"./search-dynamic-sgs-side-events\"),\n);\n", "import { LazyPromise } from \"@cubing/lazy-promise\";\n\nexport const dynamic4x4x4Solver = new LazyPromise(\n () => import(\"./search-dynamic-solve-4x4x4\"),\n);\n", "import type { Alg } from \"../../../../alg\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport { addOrientationSuffix } from \"../addOrientationSuffix\";\nimport { dynamic4x4x4Solver } from \"./dynamic/4x4x4\";\n\nconst randomSuffixes = [\n [null, \"x\", \"x2\", \"x'\", \"z\", \"z'\"],\n [null, \"y\", \"y2\", \"y'\"],\n];\n\nexport async function initialize444(): Promise<void> {\n return (await dynamic4x4x4Solver).initialize();\n}\n\nexport async function random444Scramble(): Promise<Alg> {\n mustBeInsideWorker();\n return (await dynamic4x4x4Solver).random444Scramble();\n}\n\nexport async function random444OrientedScramble(): Promise<Alg> {\n return addOrientationSuffix(await random444Scramble(), randomSuffixes);\n}\n", "import { LazyPromise } from \"@cubing/lazy-promise\";\n\nexport const dynamicFTO = new LazyPromise(\n () => import(\"./search-dynamic-solve-fto\"),\n);\n", "import { LazyPromise } from \"@cubing/lazy-promise\";\nimport { Alg } from \"../../../../alg\";\nimport type { KPattern } from \"../../../../kpuzzle/KPattern\";\nimport { puzzles } from \"../../../../puzzles\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport type { SGSCachedData } from \"../parseSGS\";\nimport { TrembleSolver } from \"../tremble\";\nimport { dynamicFTO } from \"./dynamic/fto\";\n\nconst dynamic = new LazyPromise(\n () => import(\"./dynamic/sgs-unofficial/search-dynamic-sgs-unofficial\"),\n);\n\nconst TREMBLE_DEPTH = 3;\n\nlet cachedTrembleSolver: Promise<TrembleSolver> | null = null;\nasync function getCachedTrembleSolver(): Promise<TrembleSolver> {\n return (\n cachedTrembleSolver ||\n (cachedTrembleSolver = (async (): Promise<TrembleSolver> => {\n const json: SGSCachedData = await (await dynamic).sgsDataFTO();\n return new TrembleSolver(await puzzles[\"fto\"].kpuzzle(), json, [\n \"U\",\n \"R\",\n \"F\",\n \"L\",\n \"D\",\n \"B\",\n \"BR\",\n \"BL\",\n ]);\n })())\n );\n}\n\nexport async function preInitializeFTO(): Promise<void> {\n await getCachedTrembleSolver();\n}\n\n// TODO: centers\nexport async function solveFTO(pattern: KPattern): Promise<Alg> {\n mustBeInsideWorker();\n const trembleSolver = await getCachedTrembleSolver();\n const alg = await trembleSolver.solve(\n pattern,\n TREMBLE_DEPTH,\n () => 3, // TODO: Attach quantum move order lookup to puzzle.\n );\n return alg;\n}\n\nexport async function randomFTOScramble(): Promise<Alg> {\n mustBeInsideWorker();\n return new Alg(await (await dynamicFTO).getRandomFTOScramble());\n}\n", "import { LazyPromise } from \"@cubing/lazy-promise\";\n\nexport const dynamicKilominxSolver = new LazyPromise<\n typeof import(\"./search-dynamic-solve-kilominx\")\n>(() => import(\"./search-dynamic-solve-kilominx\"));\n", "import type { Alg } from \"../../../../alg\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport { dynamicKilominxSolver } from \"./dynamic/kilominx\";\n\nexport async function randomKilominxScramble(): Promise<Alg> {\n mustBeInsideWorker();\n return (await dynamicKilominxSolver).getRandomKilominxScramble();\n}\n", "import { LazyPromise } from \"@cubing/lazy-promise\";\n\nexport const dynamicMasterTetraminxSolver = new LazyPromise(\n () => import(\"./search-dynamic-solve-master_tetraminx\"),\n);\n", "import { Alg } from \"../../../../alg\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport { dynamicMasterTetraminxSolver } from \"./dynamic/master_tetraminx\";\n\nexport async function randomMasterTetraminxScramble(): Promise<Alg> {\n mustBeInsideWorker();\n return new Alg(\n await (\n await dynamicMasterTetraminxSolver\n ).randomMasterTetraminxScrambleString(),\n );\n}\n", "import type { Alg } from \"../../../../alg\";\nimport type { KPatternData } from \"../../../../kpuzzle\";\nimport { KPattern } from \"../../../../kpuzzle\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport type { SGSCachedData } from \"../parseSGS\";\nimport { TrembleSolver } from \"../tremble\";\nimport { searchDynamicSideEvents } from \"./dynamic/sgs-side-events\";\n\nconst TREMBLE_DEPTH = 2;\n\nlet cachedTrembleSolver: Promise<TrembleSolver> | null = null;\nasync function getCachedTrembleSolver(): Promise<TrembleSolver> {\n return (\n cachedTrembleSolver ||\n (cachedTrembleSolver = (async (): Promise<TrembleSolver> => {\n const json: SGSCachedData = await (\n await searchDynamicSideEvents\n ).cachedSGSDataMegaminx();\n return new TrembleSolver(\n await (await searchDynamicSideEvents).cachedMegaminxKPuzzleWithoutMO(),\n json,\n [\"U\", \"R\", \"F\", \"L\", \"BR\", \"BL\", \"FR\", \"FL\", \"DR\", \"DL\", \"B\", \"D\"],\n );\n })())\n );\n}\n\nexport async function preInitializeMegaminx(): Promise<void> {\n await getCachedTrembleSolver();\n}\n\n// TODO: centers\nexport async function solveMegaminx(pattern: KPattern): Promise<Alg> {\n mustBeInsideWorker();\n const trembleSolver = await getCachedTrembleSolver();\n const patternDataWithoutMO: KPatternData = structuredClone(\n pattern.patternData,\n );\n patternDataWithoutMO[\"CENTERS\"].orientation = new Array(12).fill(0);\n const patternWithoutMO = new KPattern(\n await (await searchDynamicSideEvents).cachedMegaminxKPuzzleWithoutMO(),\n patternDataWithoutMO,\n );\n const alg = await trembleSolver.solve(\n patternWithoutMO,\n TREMBLE_DEPTH,\n () => 5, // TODO: Attach quantum move order lookup to puzzle.\n );\n return alg;\n}\n", "import type { Alg } from \"../../../../alg\";\nimport type { KPattern } from \"../../../../kpuzzle/KPattern\";\nimport { puzzles } from \"../../../../puzzles\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport type { SGSCachedData } from \"../parseSGS\";\nimport { randomPatternFromSGS, TrembleSolver } from \"../tremble\";\nimport { searchDynamicSideEvents } from \"./dynamic/sgs-side-events\";\n\nconst TREMBLE_DEPTH = 3;\n\nlet cachedTrembleSolver: Promise<TrembleSolver> | null = null;\nasync function getCachedTrembleSolver(): Promise<TrembleSolver> {\n return (\n cachedTrembleSolver ||\n (cachedTrembleSolver = (async (): Promise<TrembleSolver> => {\n const json: SGSCachedData = await (\n await searchDynamicSideEvents\n ).sgsDataPyraminx();\n return new TrembleSolver(\n await puzzles[\"pyraminx\"].kpuzzle(),\n json,\n \"RLUB\".split(\"\"),\n );\n })())\n );\n}\n\nexport async function preInitializePyraminx(): Promise<void> {\n await getCachedTrembleSolver();\n}\n\nexport async function solvePyraminx(pattern: KPattern): Promise<Alg> {\n mustBeInsideWorker();\n const trembleSolver = await getCachedTrembleSolver();\n const alg = await trembleSolver.solve(pattern, TREMBLE_DEPTH, () => 3); // TODO: Attach quantum move order lookup to puzzle.\n return alg;\n}\n\nexport async function randomPyraminxPatternFixedOrientation(): Promise<KPattern> {\n mustBeInsideWorker();\n // Note: this sets all center orientations to 0.\n return randomPatternFromSGS(\n await puzzles[\"pyraminx\"].kpuzzle(),\n await (await searchDynamicSideEvents).sgsDataPyraminxFixedOrientation(),\n );\n}\n", "import { LazyPromise } from \"@cubing/lazy-promise\";\n\nexport const searchDynamicUnofficial = new LazyPromise(\n () => import(\"./search-dynamic-sgs-unofficial\"),\n);\n", "import type { Alg } from \"../../../../alg\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport { searchDynamicUnofficial } from \"./dynamic/sgs-unofficial\";\n\nexport async function randomRediCubeScramble(): Promise<Alg> {\n mustBeInsideWorker();\n return (await searchDynamicUnofficial).getRandomRediCubeScramble();\n}\n", "import type { Alg, QuantumMove } from \"../../../../alg\";\nimport { KPattern } from \"../../../../kpuzzle\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport type { SGSCachedData } from \"../parseSGS\";\nimport { TrembleSolver } from \"../tremble\";\nimport { searchDynamicSideEvents } from \"./dynamic/sgs-side-events\";\n\nconst TREMBLE_DEPTH = 3;\n\nlet cachedTrembleSolver: Promise<TrembleSolver> | null = null;\nasync function getCachedTrembleSolver(): Promise<TrembleSolver> {\n return (\n cachedTrembleSolver ||\n (cachedTrembleSolver = (async (): Promise<TrembleSolver> => {\n const json: SGSCachedData = await (\n await searchDynamicSideEvents\n ).sgsDataSkewb();\n return new TrembleSolver(\n await (await searchDynamicSideEvents).skewbKPuzzleWithoutMOCached(),\n json,\n \"RLUB\".split(\"\"),\n );\n })())\n );\n}\n\nexport async function preInitializeSkewb(): Promise<void> {\n await getCachedTrembleSolver();\n}\n\nasync function resetCenterOrientation(pattern: KPattern): Promise<KPattern> {\n return new KPattern(\n await (await searchDynamicSideEvents).skewbKPuzzleWithoutMOCached(),\n {\n CORNERS: pattern.patternData[\"CORNERS\"],\n CENTERS: {\n pieces: pattern.patternData[\"CENTERS\"].pieces,\n orientation: new Array(6).fill(0),\n },\n },\n );\n}\n\n// TODO: fix def consistency.\nexport async function solveSkewb(pattern: KPattern): Promise<Alg> {\n mustBeInsideWorker();\n const trembleSolver = await getCachedTrembleSolver();\n const alg = await trembleSolver.solve(\n await resetCenterOrientation(pattern),\n TREMBLE_DEPTH,\n (quantumMove: QuantumMove) => (quantumMove.family === \"y\" ? 4 : 3), // TODO: Attach quantum move order lookup to puzzle.\n );\n return alg;\n}\n", "import type { Alg } from \"../../alg\";\nimport {\n KPattern,\n type KPatternData,\n KPuzzle,\n type KPuzzleDefinition,\n} from \"../../kpuzzle\";\nimport { puzzles, wcaEvents } from \"../../puzzles\";\nimport { setIsInsideWorker } from \"./inside-worker\";\nimport { preInitialize222, solve222 } from \"./solve/puzzles/2x2x2\";\nimport {\n initialize333,\n random333OrientedScramble,\n random333Scramble,\n solve333,\n} from \"./solve/puzzles/3x3x3\";\nimport {\n initialize444,\n random444OrientedScramble,\n random444Scramble,\n} from \"./solve/puzzles/4x4x4\";\nimport { randomFTOScramble } from \"./solve/puzzles/fto\";\nimport { randomKilominxScramble } from \"./solve/puzzles/kilominx\";\nimport { randomMasterTetraminxScramble } from \"./solve/puzzles/master_tetraminx\";\nimport { solveMegaminx } from \"./solve/puzzles/megaminx\";\nimport { solvePyraminx } from \"./solve/puzzles/pyraminx\";\nimport { randomRediCubeScramble } from \"./solve/puzzles/redi_cube\";\nimport { solveSkewb } from \"./solve/puzzles/skewb\";\nimport {\n type TwipsOptions,\n wasmDeriveScrambleForEvent,\n wasmRandomScrambleForEvent,\n wasmTwips,\n} from \"./solve/twips\";\n\nconst IDLE_PREFETCH_TIMEOUT_MS = 1000;\n\nsetIsInsideWorker(true);\n\nlet DEBUG_MEASURE_PERF = true;\nexport function setDebugMeasurePerf(newDebugMeasurePerf: boolean): void {\n DEBUG_MEASURE_PERF = newDebugMeasurePerf;\n}\n\nlet DEBUG_FORCE_TWIPS_FOR_SCRAMBLES = false;\nexport function setDebugForceTwipsForScrambles(\n forceTwipsForScrambles: boolean,\n): void {\n DEBUG_FORCE_TWIPS_FOR_SCRAMBLES = forceTwipsForScrambles;\n}\n\nfunction now() {\n return (typeof performance === \"undefined\" ? Date : performance).now();\n}\n\nasync function measurePerf<T>(\n name: string,\n f: () => T | Promise<T>,\n options?: { isPrefetch?: boolean },\n): Promise<T> {\n if (!DEBUG_MEASURE_PERF) {\n return f();\n }\n\n const start = now();\n const result = f();\n if ((result as any)?.then) {\n await result;\n }\n const end = now();\n console.warn(\n `${name}${options?.isPrefetch ? \" (prefetched)\" : \"\"}: ${Math.round(\n end - start,\n )}ms`,\n );\n return result;\n}\n\nconst prefetchPromises: Map<string, Promise<Alg>> = new Map();\n// This would just be a number, except `node` is extremely silly and returns an object instead.\n// https://nodejs.org/api/timers.html#settimeoutcallback-delay-args\nlet queuedPrefetchTimeoutID: ReturnType<typeof setTimeout> | null = null;\n\n// This is used to ensure only one scramble is running (and measured) at a time, as interleaving scrambles within a single worker isn't supported (yet).\n// Scrambles may perform async work (e.g. loading code), and this guard this prevents unintended interleaving.\nlet scrambleActivityLock: Promise<Alg>;\n\nasync function randomScrambleForEvent(\n eventID: string,\n options?: { isPrefetch?: boolean },\n): Promise<Alg> {\n return (scrambleActivityLock = (async () => {\n await scrambleActivityLock;\n function wasm(): Promise<Alg> {\n return measurePerf(\n `wasmRandomScrambleForEvent(${JSON.stringify(eventID)})`,\n () => wasmRandomScrambleForEvent(eventID),\n {\n isPrefetch: options?.isPrefetch,\n },\n );\n }\n\n function twipsOverride(): Promise<Alg> | undefined {\n if (\n DEBUG_FORCE_TWIPS_FOR_SCRAMBLES &&\n (eventID in wcaEvents || [\"kilominx\"].includes(eventID))\n ) {\n console.log(`Using \\`twips\\` override for \\`${eventID}\\` scramble.`);\n return wasm();\n }\n return undefined;\n }\n\n switch (eventID) {\n // case \"333\":\n case \"222\":\n return (await wasm()).experimentalSimplify({\n puzzleSpecificSimplifyOptions: {\n quantumMoveOrder: () => 4,\n },\n });\n // case \"444\":\n case \"555\":\n case \"666\":\n case \"777\":\n // case \"333bf\":\n case \"333fm\":\n // case \"333oh\":\n case \"clock\":\n case \"minx\":\n case \"pyram\":\n case \"skewb\":\n case \"sq1\":\n // case \"444bf\":\n case \"555bf\":\n // case \"333mbf\":\n // case \"fto\":\n // case \"master_tetraminx\":\n // case \"kilominx\":\n // case \"redi_cube\":\n case \"baby_fto\":\n return wasm();\n case \"333\":\n case \"333oh\":\n case \"333ft\":\n return (\n twipsOverride() ??\n measurePerf(\"random333Scramble\", random333Scramble, {\n isPrefetch: options?.isPrefetch,\n })\n );\n case \"333bf\":\n case \"333mbf\":\n return (\n twipsOverride() ??\n measurePerf(\"random333OrientedScramble\", random333OrientedScramble)\n );\n case \"444\":\n return (\n twipsOverride() ??\n measurePerf(\"random444Scramble\", random444Scramble, {\n isPrefetch: options?.isPrefetch,\n })\n );\n case \"444bf\":\n return (\n twipsOverride() ??\n measurePerf(\"random444OrientedScramble\", random444OrientedScramble)\n );\n case \"fto\":\n return measurePerf(\"randomFTOScramble\", randomFTOScramble, {\n isPrefetch: options?.isPrefetch,\n });\n case \"master_tetraminx\":\n return measurePerf(\n \"randomMasterTetraminxScramble\",\n randomMasterTetraminxScramble,\n );\n case \"kilominx\":\n return (\n twipsOverride() ??\n measurePerf(\"randomKilominxScramble\", randomKilominxScramble, {\n isPrefetch: options?.isPrefetch,\n })\n );\n case \"redi_cube\":\n return measurePerf(\"randomRediCubeScramble\", randomRediCubeScramble, {\n isPrefetch: options?.isPrefetch,\n });\n default:\n throw new Error(`unsupported event: ${eventID}`);\n }\n })());\n}\n\nexport enum PrefetchLevel {\n Auto = \"auto\",\n None = \"none\",\n Immediate = \"immediate\",\n}\n\nlet currentPrefetchLevel = PrefetchLevel.Auto;\n\nexport const insideAPI = {\n initialize: async (eventID: string) => {\n switch (eventID) {\n case \"222\":\n return measurePerf(\"preInitialize222\", preInitialize222);\n case \"333\":\n case \"333oh\":\n case \"333ft\":\n return measurePerf(\"initialize333\", initialize333);\n case \"444\":\n return measurePerf(\"initialize444\", initialize444);\n default:\n throw new Error(`unsupported event: ${eventID}`);\n }\n },\n\n setScramblePrefetchLevel(prefetchLevel: `${PrefetchLevel}`) {\n currentPrefetchLevel = prefetchLevel as PrefetchLevel;\n },\n\n randomScrambleForEvent: async (eventID: string): Promise<Alg> => {\n let promise = prefetchPromises.get(eventID);\n if (promise) {\n prefetchPromises.delete(eventID);\n } else {\n promise = randomScrambleForEvent(eventID);\n }\n if (currentPrefetchLevel !== PrefetchLevel.None) {\n promise.then(() => {\n // `queuedPrefetch` could be 0, but:\n // > Passing an invalid ID to clearTimeout() silently does nothing; no exception is thrown.\n // https://developer.mozilla.org/en-US/docs/Web/API/clearTimeout#notes\n if (queuedPrefetchTimeoutID) {\n clearTimeout(queuedPrefetchTimeoutID);\n }\n queuedPrefetchTimeoutID = setTimeout(\n () => {\n prefetchPromises.set(\n eventID,\n randomScrambleForEvent(eventID, {\n isPrefetch: true,\n }),\n );\n },\n currentPrefetchLevel === PrefetchLevel.Immediate\n ? 0\n : IDLE_PREFETCH_TIMEOUT_MS,\n );\n });\n }\n return promise;\n },\n\n randomScrambleStringForEvent: async (eventID: string): Promise<string> => {\n return (await insideAPI.randomScrambleForEvent(eventID)).toString();\n },\n\n deriveScrambleStringForEvent: async (\n derivationSeedHex: string,\n derivationSaltHierarchy: string[],\n eventID: string,\n ): Promise<string> => {\n const scramble = await measurePerf(\n `deriveScrambleForEvent(\u2026, ${JSON.stringify(eventID)})`,\n () =>\n wasmDeriveScrambleForEvent(\n derivationSeedHex,\n derivationSaltHierarchy,\n eventID,\n ),\n );\n return scramble.toString();\n },\n\n solve333ToString: async (patternData: KPatternData): Promise<string> => {\n const pattern = new KPattern(await puzzles[\"3x3x3\"].kpuzzle(), patternData);\n return (await solve333(pattern)).toString();\n },\n\n solve222ToString: async (patternData: KPatternData): Promise<string> => {\n const pattern = new KPattern(await puzzles[\"2x2x2\"].kpuzzle(), patternData);\n return (await solve222(pattern)).toString();\n },\n\n solveSkewbToString: async (patternData: KPatternData): Promise<string> => {\n const pattern = new KPattern(await puzzles[\"skewb\"].kpuzzle(), patternData);\n return (await solveSkewb(pattern)).toString();\n },\n\n solvePyraminxToString: async (patternData: KPatternData): Promise<string> => {\n const pattern = new KPattern(\n await puzzles[\"pyraminx\"].kpuzzle(),\n patternData,\n );\n return (await solvePyraminx(pattern)).toString();\n },\n\n solveMegaminxToString: async (patternData: KPatternData): Promise<string> => {\n const pattern = new KPattern(\n await puzzles[\"megaminx\"].kpuzzle(),\n patternData,\n );\n return (await solveMegaminx(pattern)).toString();\n },\n\n setDebugMeasurePerf: async (measure: boolean): Promise<void> => {\n setDebugMeasurePerf(measure);\n },\n\n setDebugForceTwipsForScrambles: async (measure: boolean): Promise<void> => {\n setDebugForceTwipsForScrambles(measure);\n },\n\n solveTwipsToString: async (\n def: KPuzzleDefinition,\n patternData: KPatternData,\n options?: TwipsOptions,\n ): Promise<string> => {\n const kpuzzle = new KPuzzle(def);\n const pattern = new KPattern(kpuzzle, patternData);\n return (await wasmTwips(def, pattern, options)).toString();\n },\n};\n\nexport type WorkerAPI = typeof insideAPI;\n", "import { expose } from \"@cubing/comlink-everywhere\";\nimport { insideAPI } from \"./api\";\n\nexpose(insideAPI);\n"],
5
+ "mappings": "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",
6
+ "names": ["wasmTwips", "wasmRandomScrambleForEvent", "wasmDeriveScrambleForEvent", "cachedTrembleSolver", "getCachedTrembleSolver", "getCachedTrembleSolver", "TREMBLE_DEPTH", "cachedTrembleSolver", "getCachedTrembleSolver", "getCachedTrembleSolver", "TREMBLE_DEPTH", "TREMBLE_DEPTH", "cachedTrembleSolver", "getCachedTrembleSolver", "getCachedTrembleSolver", "TREMBLE_DEPTH"]
7
+ }