cubing 0.25.5 → 0.25.9

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 (126) hide show
  1. package/dist/esm/{2x2x2.kpuzzle.json-RUB44MJV.js → 2x2x2.kpuzzle.json-BHTFIME6.js} +2 -2
  2. package/dist/esm/{2x2x2.kpuzzle.json-RUB44MJV.js.map → 2x2x2.kpuzzle.json-BHTFIME6.js.map} +0 -0
  3. package/dist/esm/{2x2x2.kpuzzle.svg-CQF2FTV7.js → 2x2x2.kpuzzle.svg-CYX37VBY.js} +2 -2
  4. package/dist/esm/{2x2x2.kpuzzle.svg-CQF2FTV7.js.map → 2x2x2.kpuzzle.svg-CYX37VBY.js.map} +0 -0
  5. package/dist/esm/{2x2x2.sgs.json-FBJ4RQ4C.js → 2x2x2.sgs.json-IO3JG72M.js} +6 -6
  6. package/dist/esm/{2x2x2.sgs.json-FBJ4RQ4C.js.map → 2x2x2.sgs.json-IO3JG72M.js.map} +0 -0
  7. package/dist/esm/{3d-dynamic-TNYERP4O.js → 3d-dynamic-HS4RJWAT.js} +8 -8
  8. package/dist/esm/{3d-dynamic-TNYERP4O.js.map → 3d-dynamic-HS4RJWAT.js.map} +1 -1
  9. package/dist/esm/{3x3x3-ll.kpuzzle.svg-53CBPG5O.js → 3x3x3-ll.kpuzzle.svg-KZNSV76X.js} +2 -2
  10. package/dist/esm/{3x3x3-ll.kpuzzle.svg-53CBPG5O.js.map → 3x3x3-ll.kpuzzle.svg-KZNSV76X.js.map} +0 -0
  11. package/dist/esm/{3x3x3-min2phase-FPRJ5PCJ.js → 3x3x3-min2phase-UBW46KDU.js} +2 -2
  12. package/dist/esm/{3x3x3-min2phase-FPRJ5PCJ.js.map → 3x3x3-min2phase-UBW46KDU.js.map} +0 -0
  13. package/dist/esm/{3x3x3.kpuzzle.svg-ERSSH66P.js → 3x3x3.kpuzzle.svg-5U7LUACF.js} +2 -2
  14. package/dist/esm/{3x3x3.kpuzzle.svg-ERSSH66P.js.map → 3x3x3.kpuzzle.svg-5U7LUACF.js.map} +0 -0
  15. package/dist/esm/{444-solver-YZ6PC54L.js → 444-solver-4R3P6TGG.js} +6 -6
  16. package/dist/esm/{444-solver-YZ6PC54L.js.map → 444-solver-4R3P6TGG.js.map} +0 -0
  17. package/dist/esm/alg/index.js +2 -2
  18. package/dist/esm/bluetooth/index.js +5 -5
  19. package/dist/esm/{chunk-JLNFWJIT.js → chunk-2YDIR5JL.js} +9 -6
  20. package/dist/esm/{chunk-JLNFWJIT.js.map → chunk-2YDIR5JL.js.map} +2 -2
  21. package/dist/esm/{chunk-LGM2HUUG.js → chunk-33FD473T.js} +5 -5
  22. package/dist/esm/{chunk-LGM2HUUG.js.map → chunk-33FD473T.js.map} +0 -0
  23. package/dist/esm/{chunk-TXTMBIUR.js → chunk-6BUCXDZU.js} +3 -3
  24. package/dist/esm/{chunk-TXTMBIUR.js.map → chunk-6BUCXDZU.js.map} +0 -0
  25. package/dist/esm/{chunk-QEDC2QTN.js → chunk-C6I4KFI2.js} +4 -4
  26. package/dist/esm/{chunk-QEDC2QTN.js.map → chunk-C6I4KFI2.js.map} +0 -0
  27. package/dist/esm/{chunk-WDJDRVZZ.js → chunk-CS6S3OZ5.js} +2 -2
  28. package/dist/esm/{chunk-WDJDRVZZ.js.map → chunk-CS6S3OZ5.js.map} +0 -0
  29. package/dist/esm/{chunk-EWRBHQFX.js → chunk-DO7GZAW4.js} +35 -35
  30. package/dist/esm/{chunk-EWRBHQFX.js.map → chunk-DO7GZAW4.js.map} +1 -1
  31. package/dist/esm/{chunk-27KJGD3S.js → chunk-FB7SFELN.js} +2 -2
  32. package/dist/esm/{chunk-27KJGD3S.js.map → chunk-FB7SFELN.js.map} +0 -0
  33. package/dist/esm/{chunk-IVQ4ITE2.js → chunk-GBMX6FHY.js} +2 -2
  34. package/dist/esm/{chunk-IVQ4ITE2.js.map → chunk-GBMX6FHY.js.map} +1 -1
  35. package/dist/esm/{chunk-RJSX2HO4.js → chunk-LYU3GNBG.js} +3 -3
  36. package/dist/esm/{chunk-RJSX2HO4.js.map → chunk-LYU3GNBG.js.map} +0 -0
  37. package/dist/esm/{chunk-WO2AXYFE.js → chunk-MGJA5U5O.js} +1 -1
  38. package/dist/esm/{chunk-WO2AXYFE.js.map → chunk-MGJA5U5O.js.map} +0 -0
  39. package/dist/esm/{chunk-U2TSTTDG.js → chunk-NSLR2SC4.js} +2 -2
  40. package/dist/esm/{chunk-U2TSTTDG.js.map → chunk-NSLR2SC4.js.map} +0 -0
  41. package/dist/esm/{chunk-F5WNHV7V.js → chunk-ODQRVWJB.js} +3 -3
  42. package/dist/esm/{chunk-F5WNHV7V.js.map → chunk-ODQRVWJB.js.map} +1 -1
  43. package/dist/esm/{chunk-KJZNEDOV.js → chunk-OFGQQQBY.js} +4 -4
  44. package/dist/esm/{chunk-KJZNEDOV.js.map → chunk-OFGQQQBY.js.map} +0 -0
  45. package/dist/esm/{chunk-4VNM5SER.js → chunk-Q7QSEHWH.js} +6 -6
  46. package/dist/esm/{chunk-4VNM5SER.js.map → chunk-Q7QSEHWH.js.map} +1 -1
  47. package/dist/esm/{chunk-Y32HHZUY.js → chunk-YAOUFM4D.js} +24 -6
  48. package/dist/esm/chunk-YAOUFM4D.js.map +7 -0
  49. package/dist/esm/{chunk-V5K5JN2N.js → chunk-YCLG3ZLR.js} +119 -102
  50. package/dist/esm/chunk-YCLG3ZLR.js.map +7 -0
  51. package/dist/esm/{clock.kpuzzle.json-BQKNKV3G.js → clock.kpuzzle.json-PYHONPBY.js} +2 -2
  52. package/dist/esm/{clock.kpuzzle.json-BQKNKV3G.js.map → clock.kpuzzle.json-PYHONPBY.js.map} +0 -0
  53. package/dist/esm/{clock.kpuzzle.svg-B7TMN3SY.js → clock.kpuzzle.svg-JSRDCSQF.js} +2 -2
  54. package/dist/esm/{clock.kpuzzle.svg-B7TMN3SY.js.map → clock.kpuzzle.svg-JSRDCSQF.js.map} +0 -0
  55. package/dist/esm/{fto-solver-HI6NIV74.js → fto-solver-E6YEK26S.js} +2 -2
  56. package/dist/esm/{fto-solver-HI6NIV74.js.map → fto-solver-E6YEK26S.js.map} +0 -0
  57. package/dist/esm/{fto.dynamic-RAXDXLKL.js → fto.dynamic-TCAH2G3H.js} +7 -7
  58. package/dist/esm/{fto.dynamic-RAXDXLKL.js.map → fto.dynamic-TCAH2G3H.js.map} +0 -0
  59. package/dist/esm/{kilominx.kpuzzle.svg-7XJBOKFU.js → kilominx.kpuzzle.svg-ZLRTRUTM.js} +2 -2
  60. package/dist/esm/{kilominx.kpuzzle.svg-7XJBOKFU.js.map → kilominx.kpuzzle.svg-ZLRTRUTM.js.map} +0 -0
  61. package/dist/esm/{kilosolver-N6JM5PUY.js → kilosolver-IQ4LB7VP.js} +5 -4
  62. package/dist/esm/{kilosolver-N6JM5PUY.js.map → kilosolver-IQ4LB7VP.js.map} +1 -1
  63. package/dist/esm/kpuzzle/index.js +3 -3
  64. package/dist/esm/{master_tetraminx-solver-KBQJGW4A.js → master_tetraminx-solver-JQSMYUQN.js} +5 -4
  65. package/dist/esm/{master_tetraminx-solver-KBQJGW4A.js.map → master_tetraminx-solver-JQSMYUQN.js.map} +1 -1
  66. package/dist/esm/megaminx.sgs.json-O2B5OU3T.js +16 -0
  67. package/dist/esm/{megaminx.sgs.json-3ZEDZMWF.js.map → megaminx.sgs.json-O2B5OU3T.js.map} +0 -0
  68. package/dist/esm/notation/index.js +3 -3
  69. package/dist/esm/protocol/index.js +4 -4
  70. package/dist/esm/puzzle-geometry/index.js +3 -3
  71. package/dist/esm/puzzles/index.js +4 -4
  72. package/dist/esm/{pyraminx.kpuzzle.svg-QBBMZVDY.js → pyraminx.kpuzzle.svg-UHDZCBET.js} +2 -2
  73. package/dist/esm/{pyraminx.kpuzzle.svg-QBBMZVDY.js.map → pyraminx.kpuzzle.svg-UHDZCBET.js.map} +0 -0
  74. package/dist/esm/pyraminx.sgs.json-Z5KUYMLD.js +14 -0
  75. package/dist/esm/{pyraminx.sgs.json-AUUH6ELM.js.map → pyraminx.sgs.json-Z5KUYMLD.js.map} +0 -0
  76. package/dist/esm/redi_cube-S63AVKYL.js +565 -0
  77. package/dist/esm/redi_cube-S63AVKYL.js.map +7 -0
  78. package/dist/esm/redi_cube.kpuzzle.json-43CP47Z6.js +66 -0
  79. package/dist/esm/redi_cube.kpuzzle.json-43CP47Z6.js.map +7 -0
  80. package/dist/esm/redi_cube.kpuzzle.svg-3DWDYE3O.js +160 -0
  81. package/dist/esm/redi_cube.kpuzzle.svg-3DWDYE3O.js.map +7 -0
  82. package/dist/esm/scramble/index.js +7 -7
  83. package/dist/esm/search/index.js +7 -7
  84. package/dist/esm/{search-worker-js-entry-B76LGKC2.js → search-worker-js-entry-YV4TZPNY.js} +120 -69
  85. package/dist/esm/search-worker-js-entry-YV4TZPNY.js.map +7 -0
  86. package/dist/esm/{search-worker-ts-entry-JZTMF3AC.js → search-worker-ts-entry-ZHRSIMXB.js} +5 -5
  87. package/dist/esm/{search-worker-ts-entry-JZTMF3AC.js.map → search-worker-ts-entry-ZHRSIMXB.js.map} +0 -0
  88. package/dist/esm/skewb.sgs.json-GISOONJZ.js +16 -0
  89. package/dist/esm/{skewb.sgs.json-6NDFH63U.js.map → skewb.sgs.json-GISOONJZ.js.map} +0 -0
  90. package/dist/esm/{sq1-hyperorbit.kpuzzle.json-4XS5YACO.js → sq1-hyperorbit.kpuzzle.json-AMXAFQCM.js} +2 -2
  91. package/dist/esm/{sq1-hyperorbit.kpuzzle.json-4XS5YACO.js.map → sq1-hyperorbit.kpuzzle.json-AMXAFQCM.js.map} +0 -0
  92. package/dist/esm/{sq1-hyperorbit.kpuzzle.svg-ID57EER7.js → sq1-hyperorbit.kpuzzle.svg-MNHJTJ6V.js} +2 -2
  93. package/dist/esm/{sq1-hyperorbit.kpuzzle.svg-ID57EER7.js.map → sq1-hyperorbit.kpuzzle.svg-MNHJTJ6V.js.map} +0 -0
  94. package/dist/esm/{sq1-solver-P3IWWET7.js → sq1-solver-NJ7B44MA.js} +2 -2
  95. package/dist/esm/{sq1-solver-P3IWWET7.js.map → sq1-solver-NJ7B44MA.js.map} +0 -0
  96. package/dist/esm/stream/index.js +2 -2
  97. package/dist/esm/twisty/index.js +542 -534
  98. package/dist/esm/twisty/index.js.map +3 -3
  99. package/dist/esm/worker-inside-generated-string-JYZKHSA6.js +3674 -0
  100. package/dist/esm/worker-inside-generated-string-JYZKHSA6.js.map +7 -0
  101. package/dist/types/kpuzzle/KPuzzleDefinition.d.ts +1 -0
  102. package/dist/types/kpuzzle/KState.d.ts +1 -0
  103. package/dist/types/kpuzzle/KTransformation.d.ts +1 -0
  104. package/dist/types/puzzles/implementations/redi-cube/index.d.ts +2 -0
  105. package/dist/types/puzzles/implementations/redi-cube/redi_cube.kpuzzle.json.d.ts +2 -0
  106. package/dist/types/puzzles/implementations/redi-cube/redi_cube.kpuzzle.svg.d.ts +1 -0
  107. package/dist/types/search/inside/api.d.ts +6 -0
  108. package/dist/types/search/inside/solve/puzzles/redi_cube.d.ts +2 -0
  109. package/dist/types/search/outside.d.ts +2 -0
  110. package/dist/types/search/worker-inside-generated-string.d.ts +1 -1
  111. package/dist/types/twisty/model/TwistyPlayerModel.d.ts +27 -46
  112. package/dist/types/twisty/model/TwistySceneModel.d.ts +27 -0
  113. package/dist/types/twisty/model/props/puzzle/structure/PuzzleIDRequestProp.d.ts +1 -0
  114. package/dist/types/twisty/views/2D/Twisty2DSceneWrapper.d.ts +3 -3
  115. package/dist/types/vendor/xyzzy/fto-solver-original.d.ts +1 -30
  116. package/dist/types/vendor/xyzzy/redi_cube.d.ts +2 -0
  117. package/package.json +21 -22
  118. package/dist/esm/chunk-V5K5JN2N.js.map +0 -7
  119. package/dist/esm/chunk-Y32HHZUY.js.map +0 -7
  120. package/dist/esm/megaminx.sgs.json-3ZEDZMWF.js +0 -16
  121. package/dist/esm/pyraminx.sgs.json-AUUH6ELM.js +0 -14
  122. package/dist/esm/search-worker-js-entry-B76LGKC2.js.map +0 -7
  123. package/dist/esm/skewb.sgs.json-6NDFH63U.js +0 -16
  124. package/dist/esm/worker-inside-generated-string-QVH4RRM7.js +0 -3522
  125. package/dist/esm/worker-inside-generated-string-QVH4RRM7.js.map +0 -7
  126. package/dist/types/vendor/xyzzy/rediscrambler.d.ts +0 -72
@@ -1,22 +1,22 @@
1
+ import {
2
+ sgsDataSkewbFixedCorner,
3
+ skewbKPuzzleWithoutMOCached
4
+ } from "./chunk-C6I4KFI2.js";
1
5
  import {
2
6
  expose
3
- } from "./chunk-WDJDRVZZ.js";
7
+ } from "./chunk-CS6S3OZ5.js";
4
8
  import {
5
9
  cachedMegaminxKPuzzleWithoutMO
6
- } from "./chunk-KJZNEDOV.js";
10
+ } from "./chunk-OFGQQQBY.js";
7
11
  import {
8
12
  sgsDataPyraminxFixedOrientation
9
- } from "./chunk-RJSX2HO4.js";
10
- import {
11
- sgsDataSkewbFixedCorner,
12
- skewbKPuzzleWithoutMOCached
13
- } from "./chunk-QEDC2QTN.js";
14
- import "./chunk-27KJGD3S.js";
13
+ } from "./chunk-LYU3GNBG.js";
14
+ import "./chunk-FB7SFELN.js";
15
15
  import {
16
16
  countMoves
17
- } from "./chunk-U2TSTTDG.js";
18
- import "./chunk-F5WNHV7V.js";
19
- import "./chunk-IVQ4ITE2.js";
17
+ } from "./chunk-NSLR2SC4.js";
18
+ import "./chunk-ODQRVWJB.js";
19
+ import "./chunk-GBMX6FHY.js";
20
20
  import {
21
21
  addOrientationSuffix,
22
22
  initialize333,
@@ -26,7 +26,7 @@ import {
26
26
  random333Scramble,
27
27
  setIsInsideWorker,
28
28
  solve333
29
- } from "./chunk-LGM2HUUG.js";
29
+ } from "./chunk-33FD473T.js";
30
30
  import {
31
31
  randomChoiceFactory,
32
32
  randomPermute,
@@ -34,17 +34,17 @@ import {
34
34
  } from "./chunk-RENZB7QN.js";
35
35
  import {
36
36
  puzzles
37
- } from "./chunk-V5K5JN2N.js";
37
+ } from "./chunk-YCLG3ZLR.js";
38
38
  import {
39
39
  KState
40
- } from "./chunk-Y32HHZUY.js";
40
+ } from "./chunk-YAOUFM4D.js";
41
41
  import {
42
42
  Alg,
43
43
  AlgBuilder,
44
44
  Move,
45
45
  QuantumMove
46
- } from "./chunk-EWRBHQFX.js";
47
- import "./chunk-WO2AXYFE.js";
46
+ } from "./chunk-DO7GZAW4.js";
47
+ import "./chunk-MGJA5U5O.js";
48
48
 
49
49
  // src/cubing/search/inside/solve/tremble.ts
50
50
  var DEFAULT_STAGE1_DEPTH_LIMIT = 2;
@@ -165,7 +165,7 @@ var TREMBLE_DEPTH = 3;
165
165
  var cachedTrembleSolver = null;
166
166
  async function getCachedTrembleSolver() {
167
167
  return cachedTrembleSolver || (cachedTrembleSolver = (async () => {
168
- const sgsCachedData = await (await import("./2x2x2.sgs.json-FBJ4RQ4C.js")).cachedData222();
168
+ const sgsCachedData = await (await import("./2x2x2.sgs.json-IO3JG72M.js")).cachedData222();
169
169
  return new TrembleSolver(await puzzles["2x2x2"].kpuzzle(), sgsCachedData, "URFLBD".split(""));
170
170
  })());
171
171
  }
@@ -212,7 +212,7 @@ var randomSuffixes = [
212
212
  ];
213
213
  var cachedImport = null;
214
214
  function dynamicScramble444() {
215
- return cachedImport ?? (cachedImport = import("./444-solver-YZ6PC54L.js"));
215
+ return cachedImport ?? (cachedImport = import("./444-solver-4R3P6TGG.js"));
216
216
  }
217
217
  async function initialize444() {
218
218
  return (await dynamicScramble444()).initialize();
@@ -240,7 +240,7 @@ var axesFaces = [
240
240
  ["L", "R"],
241
241
  ["F", "B"]
242
242
  ];
243
- var axesMovesCache = new Map();
243
+ var axesMovesCache = /* @__PURE__ */ new Map();
244
244
  function cachedAxesMoves(n) {
245
245
  const existing = axesMovesCache.get(n);
246
246
  if (existing) {
@@ -271,7 +271,7 @@ async function bigCubeRandomMoves(n) {
271
271
  const cachedNumMoves = numMoves(n);
272
272
  const algBuilder = new AlgBuilder();
273
273
  let currentAxisIdx = 0;
274
- const currentAxisQuantumMoves = new Set();
274
+ const currentAxisQuantumMoves = /* @__PURE__ */ new Set();
275
275
  while (algBuilder.experimentalNumUnits() < cachedNumMoves) {
276
276
  const newAxisIdx = randomUintBelow(3);
277
277
  if (newAxisIdx !== currentAxisIdx) {
@@ -301,20 +301,20 @@ async function oriented555RandomMoves() {
301
301
  // src/cubing/search/inside/solve/puzzles/fto.ts
302
302
  async function randomFTOScramble() {
303
303
  mustBeInsideWorker();
304
- const { randomFTOScrambleString } = await import("./fto.dynamic-RAXDXLKL.js");
304
+ const { randomFTOScrambleString } = await import("./fto.dynamic-TCAH2G3H.js");
305
305
  return new Alg(await randomFTOScrambleString());
306
306
  }
307
307
 
308
308
  // src/cubing/search/inside/solve/puzzles/kilominx.ts
309
309
  async function randomKilominxScramble() {
310
310
  mustBeInsideWorker();
311
- const { getRandomKilominxScramble } = await import("./kilosolver-N6JM5PUY.js");
312
- return await getRandomKilominxScramble();
311
+ const { getRandomKilominxScramble } = await import("./kilosolver-IQ4LB7VP.js");
312
+ return getRandomKilominxScramble();
313
313
  }
314
314
 
315
315
  // src/cubing/search/inside/solve/puzzles/master_tetraminx.ts
316
316
  async function randomMasterTetraminxScramble() {
317
- const { randomMasterTetraminxScrambleString } = await import("./master_tetraminx-solver-KBQJGW4A.js");
317
+ const { randomMasterTetraminxScrambleString } = await import("./master_tetraminx-solver-JQSMYUQN.js");
318
318
  mustBeInsideWorker();
319
319
  return new Alg(await randomMasterTetraminxScrambleString());
320
320
  }
@@ -324,7 +324,7 @@ var TREMBLE_DEPTH2 = 2;
324
324
  var cachedTrembleSolver2 = null;
325
325
  async function getCachedTrembleSolver2() {
326
326
  return cachedTrembleSolver2 || (cachedTrembleSolver2 = (async () => {
327
- const sgs = await import("./megaminx.sgs.json-3ZEDZMWF.js");
327
+ const sgs = await import("./megaminx.sgs.json-O2B5OU3T.js");
328
328
  const json = await sgs.cachedSGSDataMegaminx();
329
329
  return new TrembleSolver(await cachedMegaminxKPuzzleWithoutMO(), json, [
330
330
  "U",
@@ -357,7 +357,7 @@ var TREMBLE_DEPTH3 = 3;
357
357
  var cachedTrembleSolver3 = null;
358
358
  async function getCachedTrembleSolver3() {
359
359
  return cachedTrembleSolver3 || (cachedTrembleSolver3 = (async () => {
360
- const sgs = await import("./pyraminx.sgs.json-AUUH6ELM.js");
360
+ const sgs = await import("./pyraminx.sgs.json-Z5KUYMLD.js");
361
361
  const json = await sgs.sgsDataPyraminx();
362
362
  return new TrembleSolver(await puzzles.pyraminx.kpuzzle(), json, "RLUB".split(""));
363
363
  })());
@@ -376,12 +376,19 @@ async function randomPyraminxScrambleFixedOrientation() {
376
376
  return solvePyraminx(await randomPyraminxStateFixedOrientation());
377
377
  }
378
378
 
379
+ // src/cubing/search/inside/solve/puzzles/redi_cube.ts
380
+ async function randomRediCubeScramble() {
381
+ mustBeInsideWorker();
382
+ const { getRandomRediCubeScramble } = await import("./redi_cube-S63AVKYL.js");
383
+ return getRandomRediCubeScramble();
384
+ }
385
+
379
386
  // src/cubing/search/inside/solve/puzzles/skewb.ts
380
387
  var TREMBLE_DEPTH4 = 3;
381
388
  var cachedTrembleSolver4 = null;
382
389
  async function getCachedTrembleSolver4() {
383
390
  return cachedTrembleSolver4 || (cachedTrembleSolver4 = (async () => {
384
- const sgs = await import("./skewb.sgs.json-6NDFH63U.js");
391
+ const sgs = await import("./skewb.sgs.json-GISOONJZ.js");
385
392
  const json = await sgs.sgsDataSkewb();
386
393
  return new TrembleSolver(await sgs.skewbKPuzzleWithoutMOCached(), json, "RLUB".split(""));
387
394
  })());
@@ -411,13 +418,14 @@ async function randomSkewbFixedCornerScramble() {
411
418
  // src/cubing/search/inside/solve/puzzles/sq1.ts
412
419
  var cachedImport2 = null;
413
420
  function dynamicScrambleSq1() {
414
- return cachedImport2 ?? (cachedImport2 = import("./sq1-solver-P3IWWET7.js"));
421
+ return cachedImport2 ?? (cachedImport2 = import("./sq1-solver-NJ7B44MA.js"));
415
422
  }
416
423
  async function getRandomSquare1Scramble() {
417
424
  return Alg.fromString(await (await dynamicScrambleSq1()).getRandomSquare1ScrambleString());
418
425
  }
419
426
 
420
427
  // src/cubing/search/inside/api.ts
428
+ var IDLE_PREFETCH_TIMEOUT_MS = 1e3;
421
429
  setIsInsideWorker(true);
422
430
  var DEBUG_MEASURE_PERF = true;
423
431
  function setDebugMeasurePerf(newDebugMeasurePerf) {
@@ -426,7 +434,7 @@ function setDebugMeasurePerf(newDebugMeasurePerf) {
426
434
  function now() {
427
435
  return (typeof performance === "undefined" ? Date : performance).now();
428
436
  }
429
- async function measurePerf(name, f) {
437
+ async function measurePerf(name, f, options) {
430
438
  if (!DEBUG_MEASURE_PERF) {
431
439
  return f();
432
440
  }
@@ -436,9 +444,69 @@ async function measurePerf(name, f) {
436
444
  await result;
437
445
  }
438
446
  const end = now();
439
- console.warn(`${name}: ${Math.round(end - start)}ms`);
447
+ console.warn(`${name}${options?.isPrefetch ? " (prefetched)" : ""}: ${Math.round(end - start)}ms`);
440
448
  return result;
441
449
  }
450
+ var prefetchPromises = /* @__PURE__ */ new Map();
451
+ var queuedPrefetchTimeoutID = null;
452
+ async function randomScrambleForEvent(eventID, options) {
453
+ switch (eventID) {
454
+ case "222":
455
+ return measurePerf("random222Scramble", random222Scramble, {
456
+ isPrefetch: options?.isPrefetch
457
+ });
458
+ case "333":
459
+ case "333oh":
460
+ case "333ft":
461
+ return measurePerf("random333Scramble", random333Scramble, {
462
+ isPrefetch: options?.isPrefetch
463
+ });
464
+ case "333fm":
465
+ return measurePerf("random333FewestMovesScramble", random333FewestMovesScramble);
466
+ case "333bf":
467
+ case "333mb":
468
+ return measurePerf("random333OrientedScramble", random333OrientedScramble);
469
+ case "444":
470
+ return measurePerf("random444Scramble", random444Scramble, {
471
+ isPrefetch: options?.isPrefetch
472
+ });
473
+ case "444bf":
474
+ return measurePerf("random444OrientedScramble", random444OrientedScramble);
475
+ case "555":
476
+ return measurePerf("bigCubeScramble(5)", bigCubeRandomMoves.bind(bigCubeRandomMoves, 5));
477
+ case "555bf":
478
+ return measurePerf("oriented555RandomMoves", oriented555RandomMoves);
479
+ case "666":
480
+ return measurePerf("bigCubeScramble(6)", bigCubeRandomMoves.bind(bigCubeRandomMoves, 6));
481
+ case "777":
482
+ return measurePerf("bigCubeScramble(7)", bigCubeRandomMoves.bind(bigCubeRandomMoves, 7));
483
+ case "skewb":
484
+ return measurePerf("randomSkewbFixedCornerScramble", randomSkewbFixedCornerScramble);
485
+ case "pyram":
486
+ return measurePerf("randomPyraminxScrambleFixedOrientation", randomPyraminxScrambleFixedOrientation);
487
+ case "sq1":
488
+ return measurePerf("getRandomSquare1Scramble", getRandomSquare1Scramble, {
489
+ isPrefetch: options?.isPrefetch
490
+ });
491
+ case "fto":
492
+ return measurePerf("randomFTOScramble", randomFTOScramble, {
493
+ isPrefetch: options?.isPrefetch
494
+ });
495
+ case "master_tetraminx":
496
+ return measurePerf("randomMasterTetraminxScramble", randomMasterTetraminxScramble);
497
+ case "kilominx":
498
+ return measurePerf("randomKilominxScramble", randomKilominxScramble, {
499
+ isPrefetch: options?.isPrefetch
500
+ });
501
+ case "redi_cube":
502
+ return measurePerf("randomRediCubeScramble", randomRediCubeScramble, {
503
+ isPrefetch: options?.isPrefetch
504
+ });
505
+ default:
506
+ throw new Error(`unsupported event: ${eventID}`);
507
+ }
508
+ }
509
+ var currentPrefetchLevel = "auto" /* Auto */;
442
510
  var insideAPI = {
443
511
  initialize: async (eventID) => {
444
512
  switch (eventID) {
@@ -454,46 +522,29 @@ var insideAPI = {
454
522
  throw new Error(`unsupported event: ${eventID}`);
455
523
  }
456
524
  },
525
+ setScramblePrefetchLevel(prefetchLevel) {
526
+ currentPrefetchLevel = prefetchLevel;
527
+ },
457
528
  randomScrambleForEvent: async (eventID) => {
458
- switch (eventID) {
459
- case "222":
460
- return measurePerf("random222Scramble", random222Scramble);
461
- case "333":
462
- case "333oh":
463
- case "333ft":
464
- return measurePerf("random333Scramble", random333Scramble);
465
- case "333fm":
466
- return measurePerf("random333FewestMovesScramble", random333FewestMovesScramble);
467
- case "333bf":
468
- case "333mb":
469
- return measurePerf("random333OrientedScramble", random333OrientedScramble);
470
- case "444":
471
- return measurePerf("random444Scramble", random444Scramble);
472
- case "444bf":
473
- return measurePerf("random444OrientedScramble", random444OrientedScramble);
474
- case "555":
475
- return measurePerf("bigCubeScramble(5)", bigCubeRandomMoves.bind(bigCubeRandomMoves, 5));
476
- case "555bf":
477
- return measurePerf("oriented555RandomMoves", oriented555RandomMoves);
478
- case "666":
479
- return measurePerf("bigCubeScramble(6)", bigCubeRandomMoves.bind(bigCubeRandomMoves, 6));
480
- case "777":
481
- return measurePerf("bigCubeScramble(7)", bigCubeRandomMoves.bind(bigCubeRandomMoves, 7));
482
- case "skewb":
483
- return measurePerf("randomSkewbFixedCornerScramble", randomSkewbFixedCornerScramble);
484
- case "pyram":
485
- return measurePerf("randomPyraminxScrambleFixedOrientation", randomPyraminxScrambleFixedOrientation);
486
- case "sq1":
487
- return measurePerf("getRandomSquare1Scramble", getRandomSquare1Scramble);
488
- case "fto":
489
- return measurePerf("randomFTOScramble", randomFTOScramble);
490
- case "master_tetraminx":
491
- return measurePerf("randomMasterTetraminxScramble", randomMasterTetraminxScramble);
492
- case "kilominx":
493
- return measurePerf("randomKilominxScramble", randomKilominxScramble);
494
- default:
495
- throw new Error(`unsupported event: ${eventID}`);
529
+ let promise = prefetchPromises.get(eventID);
530
+ if (promise) {
531
+ prefetchPromises.delete(eventID);
532
+ } else {
533
+ promise = randomScrambleForEvent(eventID);
534
+ }
535
+ if (currentPrefetchLevel !== "none" /* None */) {
536
+ promise.then(() => {
537
+ if (queuedPrefetchTimeoutID) {
538
+ clearTimeout(queuedPrefetchTimeoutID);
539
+ }
540
+ queuedPrefetchTimeoutID = setTimeout(() => {
541
+ prefetchPromises.set(eventID, randomScrambleForEvent(eventID, {
542
+ isPrefetch: true
543
+ }));
544
+ }, currentPrefetchLevel === "immediate" /* Immediate */ ? 0 : IDLE_PREFETCH_TIMEOUT_MS);
545
+ });
496
546
  }
547
+ return promise;
497
548
  },
498
549
  randomScrambleStringForEvent: async (eventID) => {
499
550
  return (await insideAPI.randomScrambleForEvent(eventID)).toString();
@@ -525,4 +576,4 @@ var insideAPI = {
525
576
 
526
577
  // src/cubing/search/inside/search-worker-js-entry.js
527
578
  expose(insideAPI);
528
- //# sourceMappingURL=search-worker-js-entry-B76LGKC2.js.map
579
+ //# sourceMappingURL=search-worker-js-entry-YV4TZPNY.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/cubing/search/inside/solve/tremble.ts", "../../src/cubing/search/inside/solve/puzzles/2x2x2.ts", "../../src/cubing/search/inside/solve/puzzles/4x4x4.ts", "../../src/cubing/search/inside/solve/puzzles/big-cubes.ts", "../../src/cubing/search/inside/solve/puzzles/5x5x5.ts", "../../src/cubing/search/inside/solve/puzzles/fto.ts", "../../src/cubing/search/inside/solve/puzzles/kilominx.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/redi_cube.ts", "../../src/cubing/search/inside/solve/puzzles/skewb.ts", "../../src/cubing/search/inside/solve/puzzles/sq1.ts", "../../src/cubing/search/inside/api.ts", "../../src/cubing/search/inside/search-worker-js-entry.js"],
4
+ "sourcesContent": ["import { Alg, AlgBuilder, Move, QuantumMove } from \"../../../alg\";\nimport type { KPuzzle, KTransformation } from \"../../../kpuzzle\";\nimport type { KState } from \"../../../kpuzzle/KState\";\nimport { experimentalCountMoves } from \"../../../notation\";\nimport { randomChoiceFactory } from \"../../../vendor/random-uint-below\";\nimport type { SGSAction, 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 moveNames.forEach(function (moveName) {\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 // eslint-disable-next-line no-constant-condition\n for (let i = 1; true; 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 state: KState,\n stage1DepthLimit: number = DEFAULT_STAGE1_DEPTH_LIMIT,\n quantumMoveOrder?: (quantumMove: QuantumMove) => number,\n ): Promise<Alg> {\n const transformation = state.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\n .concat(sgsAlg)\n .simplify({ collapseMoves: true, quantumMoveOrder });\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 KState\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].orientation[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.experimentalNumUnits() >= 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].orientation[idx] !== 0\n ) {\n throw new Error(\"bad SGS :-(\");\n }\n }\n }\n }\n return algBuilder.toAlg();\n }\n}\n\nexport async function randomStateFromSGS(\n kpuzzle: KPuzzle,\n sgs: SGSCachedData,\n): Promise<KState> {\n const randomChoice = await randomChoiceFactory<SGSAction>(); // TODO: make this sync by putting the factory into a TLA\n\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.toKState();\n}\n", "import type { Alg } from \"../../../../alg\";\nimport type { KPuzzle } from \"../../../../kpuzzle\";\nimport { KState } from \"../../../../kpuzzle\";\nimport { puzzles } from \"../../../../puzzles\";\nimport {\n randomPermute,\n randomUIntBelowFactory,\n} from \"../../../../vendor/random-uint-below\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport type { SGSCachedData } from \"../parseSGS\";\nimport { TrembleSolver } from \"../tremble\";\n\n// Empirical ly determined depth:\n// - \u224811 moves on average (as opposed to >13 moves for depth 2),\n// - in close to 40ms(on a MacBook Pro).\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 sgsCachedData: SGSCachedData = await (\n await import(\"./2x2x2.sgs.json\")\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(state: KState): Promise<Alg> {\n mustBeInsideWorker();\n const trembleSolver = await getCachedTrembleSolver();\n const alg = await trembleSolver.solve(state, TREMBLE_DEPTH, () => 4); // TODO: Attach quantum move order lookup to puzzle.\n return alg;\n}\n\n// TODO: factor out and test.\nasync function mutatingRandomizeOrbit(\n kpuzzle: KPuzzle,\n orbitName: string,\n state: KState,\n options?: { orientationSum?: number },\n): Promise<void> {\n const randomUIntBelow = await randomUIntBelowFactory();\n await randomPermute(state.stateData[orbitName].pieces);\n\n const orbitDef = kpuzzle.definition.orbits[orbitName];\n const ori = state.stateData[orbitName].orientation;\n\n let sum = 0;\n for (let i = 0; i < orbitDef.numPieces; i++) {\n const o = randomUIntBelow(orbitDef.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) % orbitDef.numOrientations) +\n orbitDef.numOrientations) %\n orbitDef.numOrientations;\n }\n}\n\n// TODO: Use SGS?\nexport async function random222State(): Promise<KState> {\n const kpuzzle = await puzzles[\"2x2x2\"].kpuzzle();\n const stateCopy: KState = new KState(\n kpuzzle,\n JSON.parse(JSON.stringify(kpuzzle.startState().stateData)),\n ); // TODO\n await mutatingRandomizeOrbit(kpuzzle, \"CORNERS\", stateCopy, {\n orientationSum: 0,\n });\n return stateCopy;\n}\n\nexport async function random222Scramble(): Promise<Alg> {\n return await solve222(await random222State());\n}\n", "import type { Alg } from \"../../../../alg\";\nimport { addOrientationSuffix } from \"../addOrientationSuffix\";\n\nconst randomSuffixes = [\n [null, \"x\", \"x2\", \"x'\", \"z\", \"z'\"],\n [null, \"y\", \"y2\", \"y'\"],\n];\n\nlet cachedImport: Promise<\n typeof import(\"../../../../vendor/cstimer/src/js/scramble/444-solver\")\n> | null = null;\nfunction dynamicScramble444(): Promise<\n typeof import(\"../../../../vendor/cstimer/src/js/scramble/444-solver\")\n> {\n return (cachedImport ??= import(\n \"../../../../vendor/cstimer/src/js/scramble/444-solver\"\n ));\n}\n\nexport async function initialize444(): Promise<void> {\n return (await dynamicScramble444()).initialize();\n}\n\nexport async function random444Scramble(): Promise<Alg> {\n return (await dynamicScramble444()).random444Scramble();\n}\n\nexport async function random444OrientedScramble(): Promise<Alg> {\n return addOrientationSuffix(await random444Scramble(), randomSuffixes);\n}\n", "import { Alg, AlgBuilder, Move, QuantumMove } from \"../../../../alg\";\nimport {\n randomChoiceFactory,\n randomUIntBelowFactory,\n} from \"../../../../vendor/random-uint-below\";\n\nfunction numMoves(n: number): number {\n switch (n) {\n case 5:\n return 60;\n case 6:\n return 80;\n default:\n return 100;\n }\n}\n\nconst axesFaces = [\n [\"U\", \"D\"],\n [\"L\", \"R\"],\n [\"F\", \"B\"],\n];\nconst axesMovesCache: Map<number, QuantumMove[][]> = new Map();\nfunction cachedAxesMoves(n: number): QuantumMove[][] {\n const existing = axesMovesCache.get(n);\n if (existing) {\n return existing;\n }\n const axesMoves = [];\n for (const faces of axesFaces) {\n const axisMoveFamilies: QuantumMove[] = [];\n axesMoves.push(axisMoveFamilies);\n\n for (const face of faces) {\n axisMoveFamilies.push(new QuantumMove(face));\n if (n > 3) {\n axisMoveFamilies.push(new QuantumMove(`${face}w`));\n }\n for (let i = 3; i <= n / 2; i++) {\n axisMoveFamilies.push(new QuantumMove(`${face}w`, i));\n }\n }\n }\n axesMovesCache.set(n, axesMoves);\n return axesMoves;\n}\n\n// TODO: Document this algorithm and compare to TNoodle.\nexport async function bigCubeRandomMoves(n: number): Promise<Alg> {\n const randomUintBelow = await randomUIntBelowFactory();\n const randomChoice = await randomChoiceFactory<QuantumMove>();\n const randomNumChoice = randomChoice as any as (arr: Array<number>) => number; // TODO: Avoid needing multiple instantiations or recasting.\n\n const axesMoves = cachedAxesMoves(n);\n\n const cachedNumMoves = numMoves(n);\n const algBuilder = new AlgBuilder();\n let currentAxisIdx = 0;\n const currentAxisQuantumMoves = new Set();\n while (algBuilder.experimentalNumUnits() < cachedNumMoves) {\n const newAxisIdx = randomUintBelow(3);\n if (newAxisIdx !== currentAxisIdx) {\n currentAxisQuantumMoves.clear();\n }\n currentAxisIdx = newAxisIdx;\n\n const quantumMove = randomChoice(axesMoves[currentAxisIdx]);\n const quantumMoveStr = quantumMove.toString();\n if (currentAxisQuantumMoves.has(quantumMoveStr)) {\n // Skip duplicates and resample with replacement.\n continue;\n }\n currentAxisQuantumMoves.add(quantumMoveStr);\n algBuilder.push(new Move(quantumMove, randomNumChoice([1, 2, -1])));\n }\n\n return algBuilder.toAlg();\n}\n", "import type { Alg } from \"../../../../alg\";\nimport { addOrientationSuffix } from \"../addOrientationSuffix\";\nimport { bigCubeRandomMoves } from \"./big-cubes\";\n\nconst randomSuffixes = [\n [null, \"3Rw\", \"3Rw2\", \"3Rw'\", \"3Fw\", \"3Fw'\"],\n [null, \"3Dw\", \"3Dw2\", \"3Dw'\"],\n];\n\nexport async function oriented555RandomMoves(): Promise<Alg> {\n return addOrientationSuffix(await bigCubeRandomMoves(5), randomSuffixes);\n}\n", "import { Alg } from \"../../../../alg\";\nimport type { KState } from \"../../../../kpuzzle/KState\";\nimport { puzzles } from \"../../../../puzzles\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport type { SGSCachedData } from \"../parseSGS\";\nimport { TrembleSolver } from \"../tremble\";\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 sgs = await import(\"./fto.dynamic\");\n const json: SGSCachedData = await sgs.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(state: KState): Promise<Alg> {\n mustBeInsideWorker();\n const trembleSolver = await getCachedTrembleSolver();\n const alg = await trembleSolver.solve(\n state,\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 const { randomFTOScrambleString } = await import(\"./fto.dynamic\");\n return new Alg(await randomFTOScrambleString());\n}\n", "import type { Alg } from \"../../../../alg\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\n\nexport async function randomKilominxScramble(): Promise<Alg> {\n mustBeInsideWorker();\n const { getRandomKilominxScramble } = await import(\n \"../../../../vendor/xyzzy/kilosolver\"\n );\n return getRandomKilominxScramble();\n}\n", "import { Alg } from \"../../../../alg\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\n\nexport async function randomMasterTetraminxScramble(): Promise<Alg> {\n const { randomMasterTetraminxScrambleString } = await import(\n \"../../../../vendor/xyzzy/master_tetraminx-solver.js\"\n );\n mustBeInsideWorker();\n return new Alg(await randomMasterTetraminxScrambleString());\n}\n", "import type { Alg } from \"../../../../alg\";\nimport type { KStateData } from \"../../../../kpuzzle\";\nimport { KState } from \"../../../../kpuzzle\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport type { SGSCachedData } from \"../parseSGS\";\nimport { TrembleSolver } from \"../tremble\";\nimport { cachedMegaminxKPuzzleWithoutMO } from \"./megaminx.sgs.json\";\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 sgs = await import(\"./megaminx.sgs.json\");\n const json: SGSCachedData = await sgs.cachedSGSDataMegaminx();\n return new TrembleSolver(await cachedMegaminxKPuzzleWithoutMO(), json, [\n \"U\",\n \"R\",\n \"F\",\n \"L\",\n \"BR\",\n \"BL\",\n \"FR\",\n \"FL\",\n \"DR\",\n \"DL\",\n \"B\",\n \"D\",\n ]);\n })())\n );\n}\n\nexport async function preInitializeMegaminx(): Promise<void> {\n await getCachedTrembleSolver();\n}\n\n// TODO: centers\nexport async function solveMegaminx(state: KState): Promise<Alg> {\n mustBeInsideWorker();\n const trembleSolver = await getCachedTrembleSolver();\n const stateDataWithoutMO: KStateData = JSON.parse(\n JSON.stringify(state.stateData),\n );\n stateDataWithoutMO.CENTERS.orientation = new Array(12).fill(0);\n const stateWithoutMO = new KState(\n await cachedMegaminxKPuzzleWithoutMO(),\n stateDataWithoutMO,\n );\n const alg = await trembleSolver.solve(\n stateWithoutMO,\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 { KState } from \"../../../../kpuzzle/KState\";\nimport { puzzles } from \"../../../../puzzles\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport type { SGSCachedData } from \"../parseSGS\";\nimport { randomStateFromSGS, TrembleSolver } from \"../tremble\";\nimport { sgsDataPyraminxFixedOrientation } from \"./pyraminx.sgs.json\";\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 sgs = await import(\"./pyraminx.sgs.json\");\n const json: SGSCachedData = await sgs.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(state: KState): Promise<Alg> {\n mustBeInsideWorker();\n const trembleSolver = await getCachedTrembleSolver();\n const alg = await trembleSolver.solve(state, TREMBLE_DEPTH, () => 3); // TODO: Attach quantum move order lookup to puzzle.\n return alg;\n}\n\nexport async function randomPyraminxStateFixedOrientation(): Promise<KState> {\n mustBeInsideWorker();\n // Note: this sets all center orientations to 0.\n return randomStateFromSGS(\n await puzzles.pyraminx.kpuzzle(),\n await sgsDataPyraminxFixedOrientation(),\n );\n}\n\nexport async function randomPyraminxScrambleFixedOrientation(): Promise<Alg> {\n return solvePyraminx(await randomPyraminxStateFixedOrientation());\n}\n", "import type { Alg } from \"../../../../alg\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\n\nexport async function randomRediCubeScramble(): Promise<Alg> {\n mustBeInsideWorker();\n const { getRandomRediCubeScramble } = await import(\n \"../../../../vendor/xyzzy/redi_cube\"\n );\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return getRandomRediCubeScramble();\n}\n", "import type { Alg, QuantumMove } from \"../../../../alg\";\nimport { KState } from \"../../../../kpuzzle\";\nimport { mustBeInsideWorker } from \"../../inside-worker\";\nimport type { SGSCachedData } from \"../parseSGS\";\nimport { randomStateFromSGS, TrembleSolver } from \"../tremble\";\nimport {\n sgsDataSkewbFixedCorner,\n skewbKPuzzleWithoutMOCached,\n} from \"./skewb.sgs.json\";\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 sgs = await import(\"./skewb.sgs.json\");\n const json: SGSCachedData = await sgs.sgsDataSkewb();\n return new TrembleSolver(\n await sgs.skewbKPuzzleWithoutMOCached(),\n json,\n \"RLUB\".split(\"\"),\n );\n })())\n );\n}\n\nexport async function preInitializeSkewb(): Promise<void> {\n await getCachedTrembleSolver();\n}\n\nfunction resetCenterOrientation(state: KState): KState {\n return new KState(state.kpuzzle, {\n CORNERS: state.stateData.CORNERS,\n CENTERS: {\n pieces: state.stateData.CENTERS.pieces,\n orientation: new Array(6).fill(0),\n },\n });\n}\n\n// TODO: fix def consistency.\nexport async function solveSkewb(state: KState): Promise<Alg> {\n mustBeInsideWorker();\n const trembleSolver = await getCachedTrembleSolver();\n const alg = await trembleSolver.solve(\n resetCenterOrientation(state),\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\nexport async function randomSkewbFixedCornerState(): Promise<KState> {\n // Note: this sets all center orientations to 0.\n return randomStateFromSGS(\n await skewbKPuzzleWithoutMOCached(),\n await sgsDataSkewbFixedCorner(),\n );\n}\n\nexport async function randomSkewbFixedCornerScramble(): Promise<Alg> {\n return solveSkewb(await randomSkewbFixedCornerState());\n}\n", "import { Alg } from \"../../../../alg\";\n\nlet cachedImport: Promise<\n typeof import(\"../../../../vendor/sq12phase/sq1-solver\")\n> | null = null;\nfunction dynamicScrambleSq1(): Promise<\n typeof import(\"../../../../vendor/sq12phase/sq1-solver\")\n> {\n return (cachedImport ??= import(\"../../../../vendor/sq12phase/sq1-solver\"));\n}\n\nexport async function getRandomSquare1Scramble(): Promise<Alg> {\n return Alg.fromString(\n await (await dynamicScrambleSq1()).getRandomSquare1ScrambleString(),\n );\n}\n", "import type { Alg } from \"../../alg\";\nimport type { KStateData } from \"../../kpuzzle\";\nimport { KState } from \"../../kpuzzle\";\nimport { puzzles } from \"../../puzzles\";\nimport { setIsInsideWorker } from \"./inside-worker\";\nimport {\n preInitialize222,\n random222Scramble,\n solve222,\n} from \"./solve/puzzles/2x2x2\";\nimport {\n initialize333,\n random333FewestMovesScramble,\n random333OrientedScramble,\n random333Scramble,\n solve333,\n} from \"./solve/puzzles/3x3x3\";\nimport {\n initialize444,\n random444OrientedScramble,\n random444Scramble,\n} from \"./solve/puzzles/4x4x4\";\nimport { oriented555RandomMoves } from \"./solve/puzzles/5x5x5\";\nimport { bigCubeRandomMoves } from \"./solve/puzzles/big-cubes\";\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 {\n randomPyraminxScrambleFixedOrientation,\n solvePyraminx,\n} from \"./solve/puzzles/pyraminx\";\nimport { randomRediCubeScramble } from \"./solve/puzzles/redi_cube\";\nimport {\n randomSkewbFixedCornerScramble,\n solveSkewb,\n} from \"./solve/puzzles/skewb\";\nimport { getRandomSquare1Scramble } from \"./solve/puzzles/sq1\";\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\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\nasync function randomScrambleForEvent(\n eventID: string,\n options?: { isPrefetch?: boolean },\n): Promise<Alg> {\n switch (eventID) {\n case \"222\":\n return measurePerf(\"random222Scramble\", random222Scramble, {\n isPrefetch: options?.isPrefetch,\n });\n case \"333\":\n case \"333oh\":\n case \"333ft\":\n return measurePerf(\"random333Scramble\", random333Scramble, {\n isPrefetch: options?.isPrefetch,\n });\n case \"333fm\":\n return measurePerf(\n \"random333FewestMovesScramble\",\n random333FewestMovesScramble,\n );\n case \"333bf\":\n case \"333mb\":\n return measurePerf(\n \"random333OrientedScramble\",\n random333OrientedScramble,\n );\n case \"444\":\n return measurePerf(\"random444Scramble\", random444Scramble, {\n isPrefetch: options?.isPrefetch,\n });\n case \"444bf\":\n return measurePerf(\n \"random444OrientedScramble\",\n random444OrientedScramble,\n );\n case \"555\":\n return measurePerf(\n \"bigCubeScramble(5)\",\n bigCubeRandomMoves.bind(bigCubeRandomMoves, 5),\n );\n case \"555bf\":\n return measurePerf(\"oriented555RandomMoves\", oriented555RandomMoves);\n case \"666\":\n return measurePerf(\n \"bigCubeScramble(6)\",\n bigCubeRandomMoves.bind(bigCubeRandomMoves, 6),\n );\n case \"777\":\n return measurePerf(\n \"bigCubeScramble(7)\",\n bigCubeRandomMoves.bind(bigCubeRandomMoves, 7),\n );\n case \"skewb\":\n return measurePerf(\n \"randomSkewbFixedCornerScramble\",\n randomSkewbFixedCornerScramble,\n );\n case \"pyram\":\n return measurePerf(\n \"randomPyraminxScrambleFixedOrientation\",\n randomPyraminxScrambleFixedOrientation,\n );\n case \"sq1\":\n return measurePerf(\"getRandomSquare1Scramble\", getRandomSquare1Scramble, {\n isPrefetch: options?.isPrefetch,\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 measurePerf(\"randomKilominxScramble\", randomKilominxScramble, {\n isPrefetch: options?.isPrefetch,\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\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;\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 solve333ToString: async (stateData: KStateData): Promise<string> => {\n const state = new KState(await puzzles[\"3x3x3\"].kpuzzle(), stateData);\n return (await solve333(state)).toString();\n },\n\n solve222ToString: async (stateData: KStateData): Promise<string> => {\n const state = new KState(await puzzles[\"2x2x2\"].kpuzzle(), stateData);\n return (await solve222(state)).toString();\n },\n\n solveSkewbToString: async (stateData: KStateData): Promise<string> => {\n const state = new KState(await puzzles[\"skewb\"].kpuzzle(), stateData);\n return (await solveSkewb(state)).toString();\n },\n\n solvePyraminxToString: async (stateData: KStateData): Promise<string> => {\n const state = new KState(await puzzles[\"pyraminx\"].kpuzzle(), stateData);\n return (await solvePyraminx(state)).toString();\n },\n\n solveMegaminxToString: async (stateData: KStateData): Promise<string> => {\n const state = new KState(await puzzles[\"megaminx\"].kpuzzle(), stateData);\n return (await solveMegaminx(state)).toString();\n },\n\n setDebugMeasurePerf: async (measure: boolean): Promise<void> => {\n setDebugMeasurePerf(measure);\n },\n};\n\nexport type WorkerInsideAPI = typeof insideAPI;\n", "import { expose } from \"../../vendor/comlink-everywhere/inside\";\nimport { insideAPI } from \"./api\";\n\nexpose(insideAPI);\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  nodeEndpointPort
3
- } from "./chunk-WDJDRVZZ.js";
3
+ } from "./chunk-CS6S3OZ5.js";
4
4
  import {
5
5
  exposeAPI
6
6
  } from "./chunk-BEXHMXCT.js";
7
- import "./chunk-IVQ4ITE2.js";
8
- import "./chunk-WO2AXYFE.js";
7
+ import "./chunk-GBMX6FHY.js";
8
+ import "./chunk-MGJA5U5O.js";
9
9
 
10
10
  // src/cubing/search/inside/search-worker-ts-entry.ts
11
11
  if (exposeAPI.expose) {
12
12
  (async () => {
13
- await import("./search-worker-js-entry-B76LGKC2.js");
13
+ await import("./search-worker-js-entry-YV4TZPNY.js");
14
14
  const messagePort = globalThis.postMessage ? globalThis : await nodeEndpointPort();
15
15
  messagePort.postMessage("comlink-exposed");
16
16
  })();
@@ -19,4 +19,4 @@ var WORKER_ENTRY_FILE_URL = import.meta.url;
19
19
  export {
20
20
  WORKER_ENTRY_FILE_URL
21
21
  };
22
- //# sourceMappingURL=search-worker-ts-entry-JZTMF3AC.js.map
22
+ //# sourceMappingURL=search-worker-ts-entry-ZHRSIMXB.js.map
@@ -0,0 +1,16 @@
1
+ import {
2
+ sgsDataSkewb,
3
+ sgsDataSkewbFixedCorner,
4
+ skewbKPuzzleWithoutMOCached
5
+ } from "./chunk-C6I4KFI2.js";
6
+ import "./chunk-FB7SFELN.js";
7
+ import "./chunk-ODQRVWJB.js";
8
+ import "./chunk-YAOUFM4D.js";
9
+ import "./chunk-DO7GZAW4.js";
10
+ import "./chunk-MGJA5U5O.js";
11
+ export {
12
+ sgsDataSkewb,
13
+ sgsDataSkewbFixedCorner,
14
+ skewbKPuzzleWithoutMOCached
15
+ };
16
+ //# sourceMappingURL=skewb.sgs.json-GISOONJZ.js.map
@@ -1,4 +1,4 @@
1
- import "./chunk-WO2AXYFE.js";
1
+ import "./chunk-MGJA5U5O.js";
2
2
 
3
3
  // src/cubing/puzzles/implementations/square1/sq1-hyperorbit.kpuzzle.json.ts
4
4
  var sq1HyperOrbitKPuzzleDefinition = {
@@ -241,4 +241,4 @@ var sq1HyperOrbitKPuzzleDefinition = {
241
241
  export {
242
242
  sq1HyperOrbitKPuzzleDefinition
243
243
  };
244
- //# sourceMappingURL=sq1-hyperorbit.kpuzzle.json-4XS5YACO.js.map
244
+ //# sourceMappingURL=sq1-hyperorbit.kpuzzle.json-AMXAFQCM.js.map
@@ -1,4 +1,4 @@
1
- import "./chunk-WO2AXYFE.js";
1
+ import "./chunk-MGJA5U5O.js";
2
2
 
3
3
  // src/cubing/puzzles/implementations/square1/sq1-hyperorbit.kpuzzle.svg.ts
4
4
  var sq1_hyperorbit_kpuzzle_svg_default = `<?xml version="1.0" encoding="UTF-8"?>
@@ -299,4 +299,4 @@ var sq1_hyperorbit_kpuzzle_svg_default = `<?xml version="1.0" encoding="UTF-8"?>
299
299
  export {
300
300
  sq1_hyperorbit_kpuzzle_svg_default as default
301
301
  };
302
- //# sourceMappingURL=sq1-hyperorbit.kpuzzle.svg-ID57EER7.js.map
302
+ //# sourceMappingURL=sq1-hyperorbit.kpuzzle.svg-MNHJTJ6V.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  randomUIntBelowFactory
3
3
  } from "./chunk-RENZB7QN.js";
4
- import "./chunk-WO2AXYFE.js";
4
+ import "./chunk-MGJA5U5O.js";
5
5
 
6
6
  // src/cubing/vendor/sq12phase/sq1-solver.js
7
7
  function FullCube_copy(obj, c) {
@@ -703,4 +703,4 @@ async function getRandomSquare1ScrambleString() {
703
703
  export {
704
704
  getRandomSquare1ScrambleString
705
705
  };
706
- //# sourceMappingURL=sq1-solver-P3IWWET7.js.map
706
+ //# sourceMappingURL=sq1-solver-NJ7B44MA.js.map
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  Move,
3
3
  QuantumMove
4
- } from "../chunk-EWRBHQFX.js";
5
- import "../chunk-WO2AXYFE.js";
4
+ } from "../chunk-DO7GZAW4.js";
5
+ import "../chunk-MGJA5U5O.js";
6
6
 
7
7
  // src/cubing/stream/websocket-proxy.ts
8
8
  var WebSocketProxySender = class {