cubing 0.35.6 → 0.35.7

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 (67) hide show
  1. package/dist/esm/bluetooth/index.js +3 -3
  2. package/dist/esm/{chunk-XUDPTWYN.js → chunk-67PUZ2YF.js} +12 -12
  3. package/dist/esm/{chunk-XUDPTWYN.js.map → chunk-67PUZ2YF.js.map} +0 -0
  4. package/dist/esm/{chunk-AJS6B74K.js → chunk-6TTWMZXN.js} +2 -1
  5. package/dist/esm/{chunk-AJS6B74K.js.map → chunk-6TTWMZXN.js.map} +0 -0
  6. package/dist/esm/{chunk-4YKAQ3XM.js → chunk-A4YLPGWM.js} +3 -3
  7. package/dist/esm/{chunk-4YKAQ3XM.js.map → chunk-A4YLPGWM.js.map} +0 -0
  8. package/dist/esm/{chunk-LQTIP4KR.js → chunk-BIUCUL3L.js} +5 -5
  9. package/dist/esm/{chunk-LQTIP4KR.js.map → chunk-BIUCUL3L.js.map} +2 -2
  10. package/dist/esm/{chunk-KOJ2BN7S.js → chunk-DKG7EU7X.js} +3 -3
  11. package/dist/esm/{chunk-KOJ2BN7S.js.map → chunk-DKG7EU7X.js.map} +0 -0
  12. package/dist/esm/{chunk-R4DWRDGD.js → chunk-H4TZULII.js} +2 -2
  13. package/dist/esm/{chunk-R4DWRDGD.js.map → chunk-H4TZULII.js.map} +0 -0
  14. package/dist/esm/chunk-QS5BDQVQ.js +187 -0
  15. package/dist/esm/chunk-QS5BDQVQ.js.map +7 -0
  16. package/dist/esm/{chunk-MQ5I2HUI.js → chunk-R2RLTVRW.js} +15 -17
  17. package/dist/esm/chunk-R2RLTVRW.js.map +7 -0
  18. package/dist/esm/notation/index.js +9 -1
  19. package/dist/esm/protocol/index.js +2 -2
  20. package/dist/esm/puzzles/index.js +2 -2
  21. package/dist/esm/{puzzles-dynamic-side-events-FCWYXIA7.js → puzzles-dynamic-side-events-TEAE45HA.js} +12 -1
  22. package/dist/esm/puzzles-dynamic-side-events-TEAE45HA.js.map +7 -0
  23. package/dist/esm/scramble/index.js +6 -6
  24. package/dist/esm/search/index.js +6 -6
  25. package/dist/esm/{search-dynamic-sgs-side-events-OIZJ36HZ.js → search-dynamic-sgs-side-events-JMSGX7J4.js} +3 -3
  26. package/dist/esm/{search-dynamic-sgs-side-events-OIZJ36HZ.js.map → search-dynamic-sgs-side-events-JMSGX7J4.js.map} +0 -0
  27. package/dist/esm/{search-dynamic-sgs-unofficial-OLAZRPDV.js → search-dynamic-sgs-unofficial-A576WLSU.js} +3 -3
  28. package/dist/esm/{search-dynamic-sgs-unofficial-OLAZRPDV.js.map → search-dynamic-sgs-unofficial-A576WLSU.js.map} +0 -0
  29. package/dist/esm/{search-dynamic-solve-4x4x4-MYAXEGDA.js → search-dynamic-solve-4x4x4-4HMLSN4H.js} +4 -4
  30. package/dist/esm/{search-dynamic-solve-4x4x4-MYAXEGDA.js.map → search-dynamic-solve-4x4x4-4HMLSN4H.js.map} +0 -0
  31. package/dist/esm/{search-worker-inside-generated-string-FVOPMFZW.js → search-worker-inside-generated-string-IRXQ745N.js} +34 -33
  32. package/dist/esm/search-worker-inside-generated-string-IRXQ745N.js.map +7 -0
  33. package/dist/esm/{search-worker-js-entry-MGEIHNU7.js → search-worker-js-entry-MD2B4SHI.js} +6 -6
  34. package/dist/esm/{search-worker-js-entry-MGEIHNU7.js.map → search-worker-js-entry-MD2B4SHI.js.map} +0 -0
  35. package/dist/esm/{search-worker-ts-entry-FIZRQDEE.js → search-worker-ts-entry-JAOMZEKM.js} +2 -2
  36. package/dist/esm/{search-worker-ts-entry-FIZRQDEE.js.map → search-worker-ts-entry-JAOMZEKM.js.map} +0 -0
  37. package/dist/esm/twisty/index.js +50 -9
  38. package/dist/esm/twisty/index.js.map +2 -2
  39. package/dist/esm/{twisty-dynamic-3d-IAEGMDVR.js → twisty-dynamic-3d-WMBYBJLZ.js} +4 -4
  40. package/dist/esm/{twisty-dynamic-3d-IAEGMDVR.js.map → twisty-dynamic-3d-WMBYBJLZ.js.map} +0 -0
  41. package/dist/esm/twsearch-BDAXZGZU-WI6J7JNA.js +3155 -0
  42. package/dist/esm/twsearch-BDAXZGZU-WI6J7JNA.js.map +7 -0
  43. package/dist/esm/{twsearch-XTET7H4F.js → twsearch-FLMI3OQH.js} +21 -10
  44. package/dist/esm/twsearch-FLMI3OQH.js.map +7 -0
  45. package/dist/types/{KState-fa1880c8.d.ts → KState-2a93cf5c.d.ts} +1 -1
  46. package/dist/types/{TwizzleLink-9873b9f1.d.ts → TwizzleLink-aa6700aa.d.ts} +2 -3
  47. package/dist/types/bluetooth/index.d.ts +3 -3
  48. package/dist/types/{bluetooth-puzzle-1cb7db76.d.ts → bluetooth-puzzle-409a4b38.d.ts} +1 -1
  49. package/dist/types/kpuzzle/index.d.ts +1 -1
  50. package/dist/types/notation/index.d.ts +26 -1
  51. package/dist/types/{outside-f29a27bc.d.ts → outside-d6786869.d.ts} +1 -1
  52. package/dist/types/protocol/index.d.ts +1 -1
  53. package/dist/types/puzzle-geometry/index.d.ts +2 -2
  54. package/dist/types/puzzles/index.d.ts +3 -3
  55. package/dist/types/scramble/index.d.ts +2 -2
  56. package/dist/types/search/index.d.ts +2 -2
  57. package/dist/types/stream/index.d.ts +2 -2
  58. package/dist/types/twisty/index.d.ts +3 -3
  59. package/package.json +2 -2
  60. package/dist/esm/chunk-IN66QSRW.js +0 -109
  61. package/dist/esm/chunk-IN66QSRW.js.map +0 -7
  62. package/dist/esm/chunk-MQ5I2HUI.js.map +0 -7
  63. package/dist/esm/puzzles-dynamic-side-events-FCWYXIA7.js.map +0 -7
  64. package/dist/esm/search-worker-inside-generated-string-FVOPMFZW.js.map +0 -7
  65. package/dist/esm/twsearch-Q7TBHLPE-FGVZYJSU.js +0 -3155
  66. package/dist/esm/twsearch-Q7TBHLPE-FGVZYJSU.js.map +0 -7
  67. package/dist/esm/twsearch-XTET7H4F.js.map +0 -7
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  binaryComponentsToReid3x3x3,
3
3
  twizzleBinaryToBinaryComponents
4
- } from "../chunk-R4DWRDGD.js";
4
+ } from "../chunk-H4TZULII.js";
5
5
  import {
6
6
  cube3x3x3,
7
7
  puzzles
8
- } from "../chunk-XUDPTWYN.js";
8
+ } from "../chunk-67PUZ2YF.js";
9
9
  import {
10
10
  experimental3x3x3KPuzzle
11
- } from "../chunk-AJS6B74K.js";
11
+ } from "../chunk-6TTWMZXN.js";
12
12
  import {
13
13
  KState
14
14
  } from "../chunk-KLI2E737.js";
@@ -9,7 +9,7 @@ import {
9
9
  experimental3x3x3KPuzzle,
10
10
  from,
11
11
  getCached
12
- } from "./chunk-AJS6B74K.js";
12
+ } from "./chunk-6TTWMZXN.js";
13
13
  import {
14
14
  KPuzzle
15
15
  } from "./chunk-KLI2E737.js";
@@ -67,12 +67,12 @@ var cube2x2x2 = {
67
67
  fullName: "2\xD72\xD72 Cube",
68
68
  kpuzzle: getCached(
69
69
  async () => new KPuzzle(
70
- (await import("./puzzles-dynamic-side-events-FCWYXIA7.js")).cube2x2x2JSON
70
+ (await import("./puzzles-dynamic-side-events-TEAE45HA.js")).cube2x2x2JSON
71
71
  )
72
72
  ),
73
- svg: async () => (await import("./puzzles-dynamic-side-events-FCWYXIA7.js")).cube2x2x2SVG,
73
+ svg: async () => (await import("./puzzles-dynamic-side-events-TEAE45HA.js")).cube2x2x2SVG,
74
74
  llSVG: getCached(
75
- async () => (await import("./puzzles-dynamic-side-events-FCWYXIA7.js")).cube2x2x2LLSVG
75
+ async () => (await import("./puzzles-dynamic-side-events-TEAE45HA.js")).cube2x2x2LLSVG
76
76
  ),
77
77
  pg: getCached(async () => {
78
78
  return asyncGetPuzzleGeometry("2x2x2");
@@ -332,11 +332,11 @@ var clock = {
332
332
  inventionYear: 1988,
333
333
  kpuzzle: getCached(
334
334
  async () => new KPuzzle(
335
- (await import("./puzzles-dynamic-side-events-FCWYXIA7.js")).clockJSON
335
+ (await import("./puzzles-dynamic-side-events-TEAE45HA.js")).clockJSON
336
336
  )
337
337
  ),
338
338
  svg: getCached(async () => {
339
- return (await import("./puzzles-dynamic-side-events-FCWYXIA7.js")).clockSVG;
339
+ return (await import("./puzzles-dynamic-side-events-TEAE45HA.js")).clockSVG;
340
340
  })
341
341
  };
342
342
 
@@ -498,7 +498,7 @@ var PyraminxPuzzleLoader = class extends PGPuzzleLoader {
498
498
  inventedBy: ["Uwe Meffert"]
499
499
  });
500
500
  this.svg = getCached(async () => {
501
- return (await import("./puzzles-dynamic-side-events-FCWYXIA7.js")).pyraminxSVG;
501
+ return (await import("./puzzles-dynamic-side-events-TEAE45HA.js")).pyraminxSVG;
502
502
  });
503
503
  }
504
504
  };
@@ -512,11 +512,11 @@ var square1 = {
512
512
  inventionYear: 1990,
513
513
  kpuzzle: getCached(
514
514
  async () => new KPuzzle(
515
- (await import("./puzzles-dynamic-side-events-FCWYXIA7.js")).sq1HyperOrbitJSON
515
+ (await import("./puzzles-dynamic-side-events-TEAE45HA.js")).sq1HyperOrbitJSON
516
516
  )
517
517
  ),
518
518
  svg: getCached(async () => {
519
- return (await import("./puzzles-dynamic-side-events-FCWYXIA7.js")).sq1HyperOrbitSVG;
519
+ return (await import("./puzzles-dynamic-side-events-TEAE45HA.js")).sq1HyperOrbitSVG;
520
520
  })
521
521
  };
522
522
 
@@ -595,11 +595,11 @@ var melindas2x2x2x2 = {
595
595
  inventedBy: ["Melinda Green"],
596
596
  kpuzzle: getCached(
597
597
  async () => new KPuzzle(
598
- (await import("./puzzles-dynamic-side-events-FCWYXIA7.js")).melindas2x2x2x2OrbitJSON
598
+ (await import("./puzzles-dynamic-side-events-TEAE45HA.js")).melindas2x2x2x2OrbitJSON
599
599
  )
600
600
  ),
601
601
  svg: getCached(async () => {
602
- return (await import("./puzzles-dynamic-side-events-FCWYXIA7.js")).melindas2x2x2x2OrbitSVG;
602
+ return (await import("./puzzles-dynamic-side-events-TEAE45HA.js")).melindas2x2x2x2OrbitSVG;
603
603
  })
604
604
  };
605
605
 
@@ -652,4 +652,4 @@ export {
652
652
  cube3x3x3,
653
653
  puzzles
654
654
  };
655
- //# sourceMappingURL=chunk-XUDPTWYN.js.map
655
+ //# sourceMappingURL=chunk-67PUZ2YF.js.map
@@ -1186,6 +1186,7 @@ export {
1186
1186
  asyncGetPuzzleGeometry,
1187
1187
  PGPuzzleLoader,
1188
1188
  CubePGPuzzleLoader,
1189
+ cube3x3x3KPuzzleDefinition,
1189
1190
  puzzleOrientation3x3x3Idx,
1190
1191
  puzzleOrientation3x3x3Cache,
1191
1192
  normalize3x3x3Orientation,
@@ -1194,4 +1195,4 @@ export {
1194
1195
  customPGPuzzleLoader,
1195
1196
  experimental3x3x3KPuzzle
1196
1197
  };
1197
- //# sourceMappingURL=chunk-AJS6B74K.js.map
1198
+ //# sourceMappingURL=chunk-6TTWMZXN.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  from
3
- } from "./chunk-AJS6B74K.js";
3
+ } from "./chunk-6TTWMZXN.js";
4
4
 
5
5
  // src/cubing/twisty/debug.ts
6
6
  var twistyDebugGlobals = {
@@ -522,7 +522,7 @@ var StatsPanel = class {
522
522
  // src/cubing/twisty/heavy-code-imports/3d.ts
523
523
  var cachedConstructorProxy = null;
524
524
  async function proxy3D() {
525
- return cachedConstructorProxy ?? (cachedConstructorProxy = import("./twisty-dynamic-3d-IAEGMDVR.js"));
525
+ return cachedConstructorProxy ?? (cachedConstructorProxy = import("./twisty-dynamic-3d-WMBYBJLZ.js"));
526
526
  }
527
527
  var THREEJS = from(
528
528
  async () => (await proxy3D()).T3I
@@ -1146,4 +1146,4 @@ export {
1146
1146
  proxy3D,
1147
1147
  THREEJS
1148
1148
  };
1149
- //# sourceMappingURL=chunk-4YKAQ3XM.js.map
1149
+ //# sourceMappingURL=chunk-A4YLPGWM.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  insideAPI
3
- } from "./chunk-MQ5I2HUI.js";
3
+ } from "./chunk-R2RLTVRW.js";
4
4
  import {
5
5
  exposeAPI
6
6
  } from "./chunk-RHC3DIN3.js";
@@ -106,7 +106,7 @@ async function constructWorker(source, options) {
106
106
  // src/cubing/search/inside/search-worker-ts-entry-path-getter.ts
107
107
  exposeAPI.expose = false;
108
108
  async function getWorkerEntryFileURL() {
109
- return (await import("./search-worker-ts-entry-FIZRQDEE.js")).WORKER_ENTRY_FILE_URL;
109
+ return (await import("./search-worker-ts-entry-JAOMZEKM.js")).WORKER_ENTRY_FILE_URL;
110
110
  }
111
111
 
112
112
  // src/cubing/search/instantiator.ts
@@ -170,7 +170,7 @@ function wrapWithTerminate(worker) {
170
170
  return { insideAPI: insideAPI2, outsideAPI: { terminate } };
171
171
  }
172
172
  async function instantiateClassicWorker() {
173
- const { workerSource } = await import("./search-worker-inside-generated-string-FVOPMFZW.js");
173
+ const { workerSource } = await import("./search-worker-inside-generated-string-IRXQ745N.js");
174
174
  const worker = await constructWorker(workerSource, { eval: true });
175
175
  return wrapWithTerminate(worker);
176
176
  }
@@ -273,7 +273,7 @@ async function solveTwsearch(kpuzzle, state, options) {
273
273
  return Alg.fromString(
274
274
  await dedicatedWorker.insideAPI.solveTwsearchToString(
275
275
  def,
276
- state.experimentalToTransformation().transformationData,
276
+ state.stateData,
277
277
  apiOptions
278
278
  )
279
279
  );
@@ -324,4 +324,4 @@ export {
324
324
  solveTwsearch,
325
325
  setDebug
326
326
  };
327
- //# sourceMappingURL=chunk-LQTIP4KR.js.map
327
+ //# sourceMappingURL=chunk-BIUCUL3L.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/cubing/search/inside/solve/puzzles/clock.ts", "../../src/cubing/search/inside/solve/puzzles/wca-minx.ts", "../../src/cubing/vendor/apache/comlink-everywhere/outside/index.ts", "../../src/cubing/search/inside/search-worker-ts-entry-path-getter.ts", "../../src/cubing/search/instantiator.ts", "../../src/cubing/search/outside.ts"],
4
- "sourcesContent": ["import { randomUIntBelow } from \"random-uint-below\";\n\nconst pins = [\"UR\", \"DR\", \"DL\", \"UL\"];\nconst backMoves = [\"U\", \"R\", \"D\", \"L\", \"ALL\"];\nconst frontMoves = pins.concat(backMoves);\n\nexport function randomClockScrambleString(): string {\n let filteringMoveCount = 0;\n\n function randomSuffix() {\n const amount = randomUIntBelow(12);\n if (amount !== 0) {\n filteringMoveCount++;\n }\n if (amount <= 6) {\n return `${amount}+`;\n } else {\n return `${12 - amount}-`;\n }\n }\n\n const moves = [];\n function side(families: string[]): void {\n for (const family of families) {\n moves.push(`${family}${randomSuffix()}`);\n }\n }\n\n side(frontMoves);\n moves.push(\"y2\");\n side(backMoves);\n\n // https://www.worldcubeassociation.org/regulations/#4b3\n if (filteringMoveCount < 2) {\n return randomClockScrambleString();\n }\n\n for (const pin of pins) {\n if (randomUIntBelow(2) === 0) {\n moves.push(pin);\n }\n }\n return moves.join(\" \");\n}\n", "import { randomUIntBelow } from \"random-uint-below\";\n\nconst suffixes = [\"++\", \"--\"];\n\nexport function randomMegaminxScrambleString(): string {\n function rdPair(): string {\n return `R${suffixes[randomUIntBelow(2)]} D${suffixes[randomUIntBelow(2)]}`;\n }\n\n function randomU(): string {\n return `U${[\"\", \"'\"][randomUIntBelow(2)]}`;\n }\n\n function row(): string {\n const chunks = [];\n for (let i = 0; i < 5; i++) {\n chunks.push(rdPair());\n }\n chunks.push(randomU());\n return chunks.join(\" \");\n }\n\n const chunks = [];\n for (let i = 0; i < 6; i++) {\n chunks.push(row());\n }\n return chunks.join(\"\\n\");\n}\n", "import nodeEndpoint from \"../node-adapter\";\n\nexport { wrap } from \"comlink\";\n// Mangled so that bundlers don't try to inline the source.\n\nconst worker_threads_mangled = \"node:w-orker-_threa-ds\";\nconst worker_threads_unmangled = () => worker_threads_mangled.replace(/-/g, \"\");\n\nconst useNodeWorkarounds =\n typeof globalThis.Worker === \"undefined\" &&\n typeof (globalThis as any).WorkerNavigator === \"undefined\";\n\nasync function nodeWorker(\n source: string | URL,\n options?: { eval?: boolean },\n): Promise<Worker> {\n const { Worker: NodeWorker } = await import(\n /* @vite-ignore */ worker_threads_unmangled()\n );\n const worker = new NodeWorker(source, options);\n worker.unref();\n return nodeEndpoint(worker);\n}\n\nexport async function constructWorker(\n source: string | URL,\n options?: { eval?: boolean; type?: WorkerType },\n): Promise<Worker> {\n let worker;\n if (useNodeWorkarounds) {\n return nodeWorker(source, { eval: options?.eval });\n } else {\n if (options?.eval) {\n const blob = new Blob([source as string], {\n type: \"application/javascript\",\n });\n source = URL.createObjectURL(blob);\n }\n worker = new globalThis.Worker(source, {\n type: options ? options.type : undefined, // TODO: Is it safe to use `options?.type`?\n });\n }\n return worker;\n}\n", "import { exposeAPI } from \"./worker-guard\";\n\nexposeAPI.expose = false;\nexport async function getWorkerEntryFileURL() {\n return (await import(\"./search-worker-ts-entry\")).WORKER_ENTRY_FILE_URL;\n}\n", "import {\n constructWorker,\n wrap,\n} from \"../vendor/apache/comlink-everywhere/outside\";\nimport { insideAPI, WorkerInsideAPI } from \"./inside/api\";\nimport { getWorkerEntryFileURL } from \"./inside/search-worker-ts-entry-path-getter\";\nimport { searchOutsideDebugGlobals } from \"./outside\";\n\nconst MODULE_WORKER_TIMEOUT_MILLISECONDS = 5000;\n\nexport interface WorkerOutsideAPI {\n terminate: () => void; // `node` can return a `Promise` with an exit code, but we match the web worker API.\n}\nexport interface InsideOutsideAPI {\n insideAPI: WorkerInsideAPI;\n outsideAPI: WorkerOutsideAPI;\n}\n\nexport async function instantiateModuleWorker(): Promise<InsideOutsideAPI> {\n // rome-ignore lint/suspicious/noAsyncPromiseExecutor: TODO\n return new Promise<InsideOutsideAPI>(async (resolve, reject) => {\n const timeoutID = setTimeout(() => {\n reject(new Error(\"module instantiation timeout\"));\n }, MODULE_WORKER_TIMEOUT_MILLISECONDS);\n\n try {\n const workerEntryFileURL = await getWorkerEntryFileURL();\n if (!workerEntryFileURL) {\n reject(new Error(\"Could not get worker entry file URL.\"));\n }\n let url: string | URL;\n if (globalThis.Worker) {\n // Standard browser-like environment.\n const importSrc = `import \"${workerEntryFileURL}\";`;\n const blob = new Blob([importSrc], {\n type: \"text/javascript\",\n });\n url = URL.createObjectURL(blob);\n } else {\n // `node` < 18 doesn't have `Blob`:\n // https://nodejs.org/ko/blog/announcements/v18-release-announce/#other-global-apis\n // But `node` will not let us construct a worker from a `blob:` URL either.\n //\n // We need to keep the original entry file URL, but we have to wrap it in the `URL` class.\n url = new URL(workerEntryFileURL);\n }\n\n const worker = (await constructWorker(url, {\n type: \"module\",\n })) as Worker & {\n nodeWorker?: import(\"worker_threads\").Worker;\n };\n\n const onError = (e: ErrorEvent) => {\n // TODO: Remove fallback when Firefox implements module workers: https://bugzilla.mozilla.org/show_bug.cgi?id=1247687\n if (e.message?.startsWith(\"SyntaxError\")) {\n reject(e);\n }\n };\n\n const onFirstMessage = (messageData: string) => {\n if (messageData === \"comlink-exposed\") {\n // We need to clear the timeout so that we don't prevent `node` from exiting in the meantime.\n clearTimeout(timeoutID);\n resolve(wrapWithTerminate(worker));\n } else {\n reject(\n new Error(`wrong module instantiation message ${messageData}`),\n );\n }\n };\n\n if (worker.nodeWorker) {\n // We have to use `once` so the `unref()` from `comlink-everywhere` allows the process to quite as expected.\n worker.nodeWorker.once(\"message\", onFirstMessage);\n } else {\n worker.addEventListener(\"error\", onError, {\n once: true,\n });\n worker.addEventListener(\"message\", (e) => onFirstMessage(e.data), {\n once: true,\n });\n }\n } catch (e) {\n reject(e);\n }\n });\n}\n\nfunction wrapWithTerminate(worker: Worker): InsideOutsideAPI {\n const insideAPI = wrap<WorkerInsideAPI>(worker);\n const terminate = worker.terminate.bind(worker);\n return { insideAPI, outsideAPI: { terminate } };\n}\n\nasync function instantiateClassicWorker(): Promise<InsideOutsideAPI> {\n const { workerSource } = await import(\n \"./search-worker-inside-generated-string.js\"\n );\n const worker = await constructWorker(workerSource, { eval: true });\n return wrapWithTerminate(worker);\n}\n\nexport const allInsideOutsideAPIPromises: Promise<InsideOutsideAPI>[] = [];\n\nexport async function instantiateWorker(): Promise<InsideOutsideAPI> {\n const insideOutsideAPIPromise = instantiateWorkerImplementation();\n allInsideOutsideAPIPromises.push(insideOutsideAPIPromise);\n insideAPI.setDebugMeasurePerf(searchOutsideDebugGlobals.logPerf);\n insideAPI.setScramblePrefetchLevel(\n searchOutsideDebugGlobals.scramblePrefetchLevel,\n );\n return insideOutsideAPIPromise;\n}\n\nexport async function mapToAllWorkers(\n f: (worker: InsideOutsideAPI) => void,\n): Promise<void> {\n await Promise.all(\n allInsideOutsideAPIPromises.map((worker) => worker.then(f)),\n );\n}\n\nasync function instantiateWorkerImplementation(): Promise<InsideOutsideAPI> {\n if (searchOutsideDebugGlobals.forceStringWorker) {\n console.warn(\n \"Using the `forceStringWorker` workaround for search worker instantiation. This will require downloading significantly more code than necessary, but the functionality will be the same.\",\n );\n return instantiateClassicWorker();\n }\n try {\n // `await` is important for `catch` to work.\n return await instantiateModuleWorker();\n } catch (e) {\n const commonErrorPrefix =\n \"Could not instantiate module worker (this may happen in Firefox, or when using Parcel).\";\n if (searchOutsideDebugGlobals.disableStringWorker) {\n console.error(\n `${commonErrorPrefix} Fallback to string worker is disabled.`,\n e,\n );\n throw new Error(\"Module worker instantiation failed.\");\n }\n console.warn(`${commonErrorPrefix} Falling back to string worker.`, e);\n return instantiateClassicWorker();\n }\n}\n", "import { Alg } from \"../alg\";\nimport type { KPuzzle } from \"../kpuzzle\";\n// import { preInitialize222 } from \"../implementations/2x2x2\";\nimport type { KState } from \"../kpuzzle/KState\";\nimport type { PrefetchLevel } from \"./inside/api\";\nimport { randomClockScrambleString } from \"./inside/solve/puzzles/clock\"; // TODO: don't reach into `inside` code.\nimport { randomMegaminxScrambleString } from \"./inside/solve/puzzles/wca-minx\"; // TODO: don't reach into `inside` code.\nimport type { TwsearchOptions } from \"./inside/solve/twsearch\";\nimport {\n InsideOutsideAPI,\n instantiateWorker,\n mapToAllWorkers,\n} from \"./instantiator\";\n\nlet cachedWorkerInstance: Promise<InsideOutsideAPI> | null = null;\nasync function getCachedWorkerInstance(): Promise<InsideOutsideAPI> {\n return await (cachedWorkerInstance ??= instantiateWorker());\n}\n\n// Pre-initialize the scrambler for the given event. (Otherwise, an event is\n// initialized the first time you ask for a scramble for that event.)\n//\n// Some typical numbers for a fast computer:\n// - 3x3x3 initialization: 200ms\n// - Each 3x3x3 scramble: 50ms\n// - 4x4x4 initialization: 2500ms\n// - Each 4x4x4 scramble: 300ms to 800ms\n//\n// It is safe to immediately call for a scramble\n// any time after starting pre-initialization, or to call for them without\n// pre-initializing. Pre-initializing essentially gives the scramble worker a\n// head start in case a scramble doesn't get requested immediately.\n//\n// Note that events cannot be pre-initialized in parallel. Attempting to\n// pre-initialize multiple events will initialize them consecutively. Scrambles\n// for a given event cannot be computed while another event is being initialized.\nexport function _preInitializationHintForEvent(\n eventID: string,\n // callback?: () => void\n): void {\n switch (eventID) {\n case \"clock\":\n case \"minx\":\n return;\n case \"333oh\":\n _preInitializationHintForEvent(\"333\");\n return;\n }\n (async () => {\n await (await getCachedWorkerInstance()).insideAPI.initialize(eventID);\n })();\n}\n\nexport async function randomScrambleForEvent(eventID: string): Promise<Alg> {\n switch (eventID) {\n case \"clock\":\n return Alg.fromString(await randomClockScrambleString());\n case \"minx\":\n return Alg.fromString(await randomMegaminxScrambleString());\n }\n const prom = _randomScrambleStringForEvent(eventID);\n const wat = await prom;\n return Alg.fromString(wat);\n}\n\nexport async function _randomScrambleStringForEvent(\n eventID: string,\n): Promise<string> {\n if (searchOutsideDebugGlobals.forceNewWorkerForEveryScramble) {\n }\n const worker = searchOutsideDebugGlobals.forceNewWorkerForEveryScramble\n ? await instantiateWorker()\n : await getCachedWorkerInstance();\n return worker.insideAPI.randomScrambleStringForEvent(eventID);\n}\n\nexport async function randomScrambleStringForEvent(\n eventID: string,\n): Promise<string> {\n switch (eventID) {\n case \"clock\":\n return randomClockScrambleString();\n case \"minx\":\n return randomMegaminxScrambleString();\n }\n return await _randomScrambleStringForEvent(eventID);\n}\n\nexport async function experimentalSolve3x3x3IgnoringCenters(\n state: KState,\n): Promise<Alg> {\n const cwi = await getCachedWorkerInstance();\n return Alg.fromString(await cwi.insideAPI.solve333ToString(state.stateData));\n}\n\nexport async function experimentalSolve2x2x2(state: KState): Promise<Alg> {\n const cwi = await getCachedWorkerInstance();\n return Alg.fromString(await cwi.insideAPI.solve222ToString(state.stateData));\n}\n\nexport async function solveSkewb(state: KState): Promise<Alg> {\n const cwi = await getCachedWorkerInstance();\n return Alg.fromString(\n await cwi.insideAPI.solveSkewbToString(state.stateData),\n );\n}\n\nexport async function solvePyraminx(state: KState): Promise<Alg> {\n const cwi = await getCachedWorkerInstance();\n return Alg.fromString(\n await cwi.insideAPI.solvePyraminxToString(state.stateData),\n );\n}\n\nexport async function solveMegaminx(state: KState): Promise<Alg> {\n const cwi = await getCachedWorkerInstance();\n return Alg.fromString(\n await cwi.insideAPI.solveMegaminxToString(state.stateData),\n );\n}\n\nexport async function solveTwsearch(\n kpuzzle: KPuzzle,\n state: KState,\n options?: { moveSubset?: string[]; startState?: KState; minDepth?: number },\n): Promise<Alg> {\n const { startState, ...otherOptions } = options ?? {};\n const apiOptions: TwsearchOptions = otherOptions;\n if (startState) {\n apiOptions.startState =\n startState.experimentalToTransformation()!.transformationData;\n }\n const { ...def } = kpuzzle.definition;\n delete def.experimentalIsStateSolved;\n // delete def.experimentalDerivedMoves;\n const dedicatedWorker = await instantiateWorker();\n try {\n return Alg.fromString(\n await dedicatedWorker.insideAPI.solveTwsearchToString(\n def,\n state.experimentalToTransformation()!.transformationData,\n apiOptions,\n ),\n );\n } finally {\n console.log(\"Search ended, terminating dedicated `twsearch` worker.\");\n // TODO: support re-using the same worker for multiple searches..\n await dedicatedWorker.outsideAPI.terminate();\n }\n}\n\ninterface SearchOutsideDebugGlobals {\n logPerf: boolean;\n scramblePrefetchLevel: `${PrefetchLevel}`;\n forceStringWorker: boolean;\n disableStringWorker: boolean;\n forceNewWorkerForEveryScramble: boolean;\n}\nexport const searchOutsideDebugGlobals: SearchOutsideDebugGlobals = {\n logPerf: false,\n scramblePrefetchLevel: \"auto\",\n forceStringWorker: false,\n disableStringWorker: false,\n forceNewWorkerForEveryScramble: false,\n};\n\nexport function setDebug(options: Partial<SearchOutsideDebugGlobals>): void {\n const { logPerf, scramblePrefetchLevel } = options;\n if (typeof logPerf !== \"undefined\") {\n searchOutsideDebugGlobals.logPerf = logPerf;\n mapToAllWorkers((worker) => worker.insideAPI.setDebugMeasurePerf(logPerf));\n }\n if (typeof scramblePrefetchLevel !== \"undefined\") {\n searchOutsideDebugGlobals.scramblePrefetchLevel = scramblePrefetchLevel;\n mapToAllWorkers((worker) =>\n worker.insideAPI.setScramblePrefetchLevel(\n scramblePrefetchLevel as PrefetchLevel,\n ),\n );\n }\n if (\"forceStringWorker\" in options) {\n searchOutsideDebugGlobals.forceStringWorker = !!options.forceStringWorker;\n }\n if (\"disableStringWorker\" in options) {\n searchOutsideDebugGlobals.disableStringWorker =\n !!options.disableStringWorker;\n }\n if (\"forceNewWorkerForEveryScramble\" in options) {\n searchOutsideDebugGlobals.forceNewWorkerForEveryScramble =\n !!options.forceNewWorkerForEveryScramble;\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { randomUIntBelow } from \"random-uint-below\";\n\nconst pins = [\"UR\", \"DR\", \"DL\", \"UL\"];\nconst backMoves = [\"U\", \"R\", \"D\", \"L\", \"ALL\"];\nconst frontMoves = pins.concat(backMoves);\n\nexport function randomClockScrambleString(): string {\n let filteringMoveCount = 0;\n\n function randomSuffix() {\n const amount = randomUIntBelow(12);\n if (amount !== 0) {\n filteringMoveCount++;\n }\n if (amount <= 6) {\n return `${amount}+`;\n } else {\n return `${12 - amount}-`;\n }\n }\n\n const moves = [];\n function side(families: string[]): void {\n for (const family of families) {\n moves.push(`${family}${randomSuffix()}`);\n }\n }\n\n side(frontMoves);\n moves.push(\"y2\");\n side(backMoves);\n\n // https://www.worldcubeassociation.org/regulations/#4b3\n if (filteringMoveCount < 2) {\n return randomClockScrambleString();\n }\n\n for (const pin of pins) {\n if (randomUIntBelow(2) === 0) {\n moves.push(pin);\n }\n }\n return moves.join(\" \");\n}\n", "import { randomUIntBelow } from \"random-uint-below\";\n\nconst suffixes = [\"++\", \"--\"];\n\nexport function randomMegaminxScrambleString(): string {\n function rdPair(): string {\n return `R${suffixes[randomUIntBelow(2)]} D${suffixes[randomUIntBelow(2)]}`;\n }\n\n function randomU(): string {\n return `U${[\"\", \"'\"][randomUIntBelow(2)]}`;\n }\n\n function row(): string {\n const chunks = [];\n for (let i = 0; i < 5; i++) {\n chunks.push(rdPair());\n }\n chunks.push(randomU());\n return chunks.join(\" \");\n }\n\n const chunks = [];\n for (let i = 0; i < 6; i++) {\n chunks.push(row());\n }\n return chunks.join(\"\\n\");\n}\n", "import nodeEndpoint from \"../node-adapter\";\n\nexport { wrap } from \"comlink\";\n// Mangled so that bundlers don't try to inline the source.\n\nconst worker_threads_mangled = \"node:w-orker-_threa-ds\";\nconst worker_threads_unmangled = () => worker_threads_mangled.replace(/-/g, \"\");\n\nconst useNodeWorkarounds =\n typeof globalThis.Worker === \"undefined\" &&\n typeof (globalThis as any).WorkerNavigator === \"undefined\";\n\nasync function nodeWorker(\n source: string | URL,\n options?: { eval?: boolean },\n): Promise<Worker> {\n const { Worker: NodeWorker } = await import(\n /* @vite-ignore */ worker_threads_unmangled()\n );\n const worker = new NodeWorker(source, options);\n worker.unref();\n return nodeEndpoint(worker);\n}\n\nexport async function constructWorker(\n source: string | URL,\n options?: { eval?: boolean; type?: WorkerType },\n): Promise<Worker> {\n let worker;\n if (useNodeWorkarounds) {\n return nodeWorker(source, { eval: options?.eval });\n } else {\n if (options?.eval) {\n const blob = new Blob([source as string], {\n type: \"application/javascript\",\n });\n source = URL.createObjectURL(blob);\n }\n worker = new globalThis.Worker(source, {\n type: options ? options.type : undefined, // TODO: Is it safe to use `options?.type`?\n });\n }\n return worker;\n}\n", "import { exposeAPI } from \"./worker-guard\";\n\nexposeAPI.expose = false;\nexport async function getWorkerEntryFileURL() {\n return (await import(\"./search-worker-ts-entry\")).WORKER_ENTRY_FILE_URL;\n}\n", "import {\n constructWorker,\n wrap,\n} from \"../vendor/apache/comlink-everywhere/outside\";\nimport { insideAPI, WorkerInsideAPI } from \"./inside/api\";\nimport { getWorkerEntryFileURL } from \"./inside/search-worker-ts-entry-path-getter\";\nimport { searchOutsideDebugGlobals } from \"./outside\";\n\nconst MODULE_WORKER_TIMEOUT_MILLISECONDS = 5000;\n\nexport interface WorkerOutsideAPI {\n terminate: () => void; // `node` can return a `Promise` with an exit code, but we match the web worker API.\n}\nexport interface InsideOutsideAPI {\n insideAPI: WorkerInsideAPI;\n outsideAPI: WorkerOutsideAPI;\n}\n\nexport async function instantiateModuleWorker(): Promise<InsideOutsideAPI> {\n // rome-ignore lint/suspicious/noAsyncPromiseExecutor: TODO\n return new Promise<InsideOutsideAPI>(async (resolve, reject) => {\n const timeoutID = setTimeout(() => {\n reject(new Error(\"module instantiation timeout\"));\n }, MODULE_WORKER_TIMEOUT_MILLISECONDS);\n\n try {\n const workerEntryFileURL = await getWorkerEntryFileURL();\n if (!workerEntryFileURL) {\n reject(new Error(\"Could not get worker entry file URL.\"));\n }\n let url: string | URL;\n if (globalThis.Worker) {\n // Standard browser-like environment.\n const importSrc = `import \"${workerEntryFileURL}\";`;\n const blob = new Blob([importSrc], {\n type: \"text/javascript\",\n });\n url = URL.createObjectURL(blob);\n } else {\n // `node` < 18 doesn't have `Blob`:\n // https://nodejs.org/ko/blog/announcements/v18-release-announce/#other-global-apis\n // But `node` will not let us construct a worker from a `blob:` URL either.\n //\n // We need to keep the original entry file URL, but we have to wrap it in the `URL` class.\n url = new URL(workerEntryFileURL);\n }\n\n const worker = (await constructWorker(url, {\n type: \"module\",\n })) as Worker & {\n nodeWorker?: import(\"worker_threads\").Worker;\n };\n\n const onError = (e: ErrorEvent) => {\n // TODO: Remove fallback when Firefox implements module workers: https://bugzilla.mozilla.org/show_bug.cgi?id=1247687\n if (e.message?.startsWith(\"SyntaxError\")) {\n reject(e);\n }\n };\n\n const onFirstMessage = (messageData: string) => {\n if (messageData === \"comlink-exposed\") {\n // We need to clear the timeout so that we don't prevent `node` from exiting in the meantime.\n clearTimeout(timeoutID);\n resolve(wrapWithTerminate(worker));\n } else {\n reject(\n new Error(`wrong module instantiation message ${messageData}`),\n );\n }\n };\n\n if (worker.nodeWorker) {\n // We have to use `once` so the `unref()` from `comlink-everywhere` allows the process to quite as expected.\n worker.nodeWorker.once(\"message\", onFirstMessage);\n } else {\n worker.addEventListener(\"error\", onError, {\n once: true,\n });\n worker.addEventListener(\"message\", (e) => onFirstMessage(e.data), {\n once: true,\n });\n }\n } catch (e) {\n reject(e);\n }\n });\n}\n\nfunction wrapWithTerminate(worker: Worker): InsideOutsideAPI {\n const insideAPI = wrap<WorkerInsideAPI>(worker);\n const terminate = worker.terminate.bind(worker);\n return { insideAPI, outsideAPI: { terminate } };\n}\n\nasync function instantiateClassicWorker(): Promise<InsideOutsideAPI> {\n const { workerSource } = await import(\n \"./search-worker-inside-generated-string.js\"\n );\n const worker = await constructWorker(workerSource, { eval: true });\n return wrapWithTerminate(worker);\n}\n\nexport const allInsideOutsideAPIPromises: Promise<InsideOutsideAPI>[] = [];\n\nexport async function instantiateWorker(): Promise<InsideOutsideAPI> {\n const insideOutsideAPIPromise = instantiateWorkerImplementation();\n allInsideOutsideAPIPromises.push(insideOutsideAPIPromise);\n insideAPI.setDebugMeasurePerf(searchOutsideDebugGlobals.logPerf);\n insideAPI.setScramblePrefetchLevel(\n searchOutsideDebugGlobals.scramblePrefetchLevel,\n );\n return insideOutsideAPIPromise;\n}\n\nexport async function mapToAllWorkers(\n f: (worker: InsideOutsideAPI) => void,\n): Promise<void> {\n await Promise.all(\n allInsideOutsideAPIPromises.map((worker) => worker.then(f)),\n );\n}\n\nasync function instantiateWorkerImplementation(): Promise<InsideOutsideAPI> {\n if (searchOutsideDebugGlobals.forceStringWorker) {\n console.warn(\n \"Using the `forceStringWorker` workaround for search worker instantiation. This will require downloading significantly more code than necessary, but the functionality will be the same.\",\n );\n return instantiateClassicWorker();\n }\n try {\n // `await` is important for `catch` to work.\n return await instantiateModuleWorker();\n } catch (e) {\n const commonErrorPrefix =\n \"Could not instantiate module worker (this may happen in Firefox, or when using Parcel).\";\n if (searchOutsideDebugGlobals.disableStringWorker) {\n console.error(\n `${commonErrorPrefix} Fallback to string worker is disabled.`,\n e,\n );\n throw new Error(\"Module worker instantiation failed.\");\n }\n console.warn(`${commonErrorPrefix} Falling back to string worker.`, e);\n return instantiateClassicWorker();\n }\n}\n", "import { Alg } from \"../alg\";\nimport type { KPuzzle } from \"../kpuzzle\";\n// import { preInitialize222 } from \"../implementations/2x2x2\";\nimport type { KState } from \"../kpuzzle/KState\";\nimport type { PrefetchLevel } from \"./inside/api\";\nimport { randomClockScrambleString } from \"./inside/solve/puzzles/clock\"; // TODO: don't reach into `inside` code.\nimport { randomMegaminxScrambleString } from \"./inside/solve/puzzles/wca-minx\"; // TODO: don't reach into `inside` code.\nimport type { TwsearchOptions } from \"./inside/solve/twsearch\";\nimport {\n InsideOutsideAPI,\n instantiateWorker,\n mapToAllWorkers,\n} from \"./instantiator\";\n\nlet cachedWorkerInstance: Promise<InsideOutsideAPI> | null = null;\nasync function getCachedWorkerInstance(): Promise<InsideOutsideAPI> {\n return await (cachedWorkerInstance ??= instantiateWorker());\n}\n\n// Pre-initialize the scrambler for the given event. (Otherwise, an event is\n// initialized the first time you ask for a scramble for that event.)\n//\n// Some typical numbers for a fast computer:\n// - 3x3x3 initialization: 200ms\n// - Each 3x3x3 scramble: 50ms\n// - 4x4x4 initialization: 2500ms\n// - Each 4x4x4 scramble: 300ms to 800ms\n//\n// It is safe to immediately call for a scramble\n// any time after starting pre-initialization, or to call for them without\n// pre-initializing. Pre-initializing essentially gives the scramble worker a\n// head start in case a scramble doesn't get requested immediately.\n//\n// Note that events cannot be pre-initialized in parallel. Attempting to\n// pre-initialize multiple events will initialize them consecutively. Scrambles\n// for a given event cannot be computed while another event is being initialized.\nexport function _preInitializationHintForEvent(\n eventID: string,\n // callback?: () => void\n): void {\n switch (eventID) {\n case \"clock\":\n case \"minx\":\n return;\n case \"333oh\":\n _preInitializationHintForEvent(\"333\");\n return;\n }\n (async () => {\n await (await getCachedWorkerInstance()).insideAPI.initialize(eventID);\n })();\n}\n\nexport async function randomScrambleForEvent(eventID: string): Promise<Alg> {\n switch (eventID) {\n case \"clock\":\n return Alg.fromString(await randomClockScrambleString());\n case \"minx\":\n return Alg.fromString(await randomMegaminxScrambleString());\n }\n const prom = _randomScrambleStringForEvent(eventID);\n const wat = await prom;\n return Alg.fromString(wat);\n}\n\nexport async function _randomScrambleStringForEvent(\n eventID: string,\n): Promise<string> {\n if (searchOutsideDebugGlobals.forceNewWorkerForEveryScramble) {\n }\n const worker = searchOutsideDebugGlobals.forceNewWorkerForEveryScramble\n ? await instantiateWorker()\n : await getCachedWorkerInstance();\n return worker.insideAPI.randomScrambleStringForEvent(eventID);\n}\n\nexport async function randomScrambleStringForEvent(\n eventID: string,\n): Promise<string> {\n switch (eventID) {\n case \"clock\":\n return randomClockScrambleString();\n case \"minx\":\n return randomMegaminxScrambleString();\n }\n return await _randomScrambleStringForEvent(eventID);\n}\n\nexport async function experimentalSolve3x3x3IgnoringCenters(\n state: KState,\n): Promise<Alg> {\n const cwi = await getCachedWorkerInstance();\n return Alg.fromString(await cwi.insideAPI.solve333ToString(state.stateData));\n}\n\nexport async function experimentalSolve2x2x2(state: KState): Promise<Alg> {\n const cwi = await getCachedWorkerInstance();\n return Alg.fromString(await cwi.insideAPI.solve222ToString(state.stateData));\n}\n\nexport async function solveSkewb(state: KState): Promise<Alg> {\n const cwi = await getCachedWorkerInstance();\n return Alg.fromString(\n await cwi.insideAPI.solveSkewbToString(state.stateData),\n );\n}\n\nexport async function solvePyraminx(state: KState): Promise<Alg> {\n const cwi = await getCachedWorkerInstance();\n return Alg.fromString(\n await cwi.insideAPI.solvePyraminxToString(state.stateData),\n );\n}\n\nexport async function solveMegaminx(state: KState): Promise<Alg> {\n const cwi = await getCachedWorkerInstance();\n return Alg.fromString(\n await cwi.insideAPI.solveMegaminxToString(state.stateData),\n );\n}\n\nexport async function solveTwsearch(\n kpuzzle: KPuzzle,\n state: KState,\n options?: { moveSubset?: string[]; startState?: KState; minDepth?: number },\n): Promise<Alg> {\n const { startState, ...otherOptions } = options ?? {};\n const apiOptions: TwsearchOptions = otherOptions;\n if (startState) {\n apiOptions.startState =\n startState.experimentalToTransformation()!.transformationData;\n }\n const { ...def } = kpuzzle.definition;\n delete def.experimentalIsStateSolved;\n // delete def.experimentalDerivedMoves;\n const dedicatedWorker = await instantiateWorker();\n try {\n return Alg.fromString(\n await dedicatedWorker.insideAPI.solveTwsearchToString(\n def,\n state.stateData,\n apiOptions,\n ),\n );\n } finally {\n console.log(\"Search ended, terminating dedicated `twsearch` worker.\");\n // TODO: support re-using the same worker for multiple searches..\n await dedicatedWorker.outsideAPI.terminate();\n }\n}\n\ninterface SearchOutsideDebugGlobals {\n logPerf: boolean;\n scramblePrefetchLevel: `${PrefetchLevel}`;\n forceStringWorker: boolean;\n disableStringWorker: boolean;\n forceNewWorkerForEveryScramble: boolean;\n}\nexport const searchOutsideDebugGlobals: SearchOutsideDebugGlobals = {\n logPerf: false,\n scramblePrefetchLevel: \"auto\",\n forceStringWorker: false,\n disableStringWorker: false,\n forceNewWorkerForEveryScramble: false,\n};\n\nexport function setDebug(options: Partial<SearchOutsideDebugGlobals>): void {\n const { logPerf, scramblePrefetchLevel } = options;\n if (typeof logPerf !== \"undefined\") {\n searchOutsideDebugGlobals.logPerf = logPerf;\n mapToAllWorkers((worker) => worker.insideAPI.setDebugMeasurePerf(logPerf));\n }\n if (typeof scramblePrefetchLevel !== \"undefined\") {\n searchOutsideDebugGlobals.scramblePrefetchLevel = scramblePrefetchLevel;\n mapToAllWorkers((worker) =>\n worker.insideAPI.setScramblePrefetchLevel(\n scramblePrefetchLevel as PrefetchLevel,\n ),\n );\n }\n if (\"forceStringWorker\" in options) {\n searchOutsideDebugGlobals.forceStringWorker = !!options.forceStringWorker;\n }\n if (\"disableStringWorker\" in options) {\n searchOutsideDebugGlobals.disableStringWorker =\n !!options.disableStringWorker;\n }\n if (\"forceNewWorkerForEveryScramble\" in options) {\n searchOutsideDebugGlobals.forceNewWorkerForEveryScramble =\n !!options.forceNewWorkerForEveryScramble;\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["randomUIntBelow", "chunks", "insideAPI"]
7
7
  }
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  puzzles
3
- } from "./chunk-XUDPTWYN.js";
3
+ } from "./chunk-67PUZ2YF.js";
4
4
  import {
5
5
  from
6
- } from "./chunk-AJS6B74K.js";
6
+ } from "./chunk-6TTWMZXN.js";
7
7
  import {
8
8
  KState
9
9
  } from "./chunk-KLI2E737.js";
@@ -519,4 +519,4 @@ export {
519
519
  random333OrientedScramble,
520
520
  random333FewestMovesScramble
521
521
  };
522
- //# sourceMappingURL=chunk-KOJ2BN7S.js.map
522
+ //# sourceMappingURL=chunk-DKG7EU7X.js.map
@@ -3,7 +3,7 @@ import {
3
3
  normalize3x3x3Orientation,
4
4
  puzzleOrientation3x3x3Cache,
5
5
  puzzleOrientation3x3x3Idx
6
- } from "./chunk-AJS6B74K.js";
6
+ } from "./chunk-6TTWMZXN.js";
7
7
  import {
8
8
  KState
9
9
  } from "./chunk-KLI2E737.js";
@@ -251,4 +251,4 @@ export {
251
251
  bufferToSpacedHex,
252
252
  spacedHexToBuffer
253
253
  };
254
- //# sourceMappingURL=chunk-R4DWRDGD.js.map
254
+ //# sourceMappingURL=chunk-H4TZULII.js.map
@@ -0,0 +1,187 @@
1
+ import {
2
+ cube3x3x3KPuzzleDefinition
3
+ } from "./chunk-6TTWMZXN.js";
4
+ import {
5
+ TraversalUp,
6
+ functionFromTraversal
7
+ } from "./chunk-VZP3KFTU.js";
8
+
9
+ // src/cubing/notation/commonMetrics.ts
10
+ var CommonMetric = /* @__PURE__ */ ((CommonMetric2) => {
11
+ CommonMetric2["OuterBlockTurnMetric"] = "OBTM";
12
+ CommonMetric2["RangeBlockTurnMetric"] = "RBTM";
13
+ CommonMetric2["SingleSliceTurnMetric"] = "SSTM";
14
+ CommonMetric2["OuterBlockQuantumTurnMetric"] = "OBQTM";
15
+ CommonMetric2["RangeBlockQuantumTurnMetric"] = "RBQTM";
16
+ CommonMetric2["SingleSliceQuantumTurnMetric"] = "SSQTM";
17
+ CommonMetric2["ExecutionTurnMetric"] = "ETM";
18
+ return CommonMetric2;
19
+ })(CommonMetric || {});
20
+ var CommonMetricAlias = /* @__PURE__ */ ((CommonMetricAlias2) => {
21
+ CommonMetricAlias2["QuantumTurnMetric"] = "OBQTM";
22
+ CommonMetricAlias2["HandTurnMetric"] = "OBTM";
23
+ CommonMetricAlias2["SliceTurnMetric"] = "RBTM";
24
+ return CommonMetricAlias2;
25
+ })(CommonMetricAlias || {});
26
+
27
+ // src/cubing/notation/cube3x3x3OBTM.ts
28
+ function uncachedMoveCount(moveQuantumString) {
29
+ if (moveQuantumString.endsWith("v") || ["x", "y", "z"].includes(moveQuantumString)) {
30
+ return "Rotation" /* Rotation */;
31
+ }
32
+ if (moveQuantumString.startsWith("2") || ["M", "E", "S"].includes(moveQuantumString)) {
33
+ return "Inner" /* Inner */;
34
+ }
35
+ return "Outer" /* Outer */;
36
+ }
37
+ var cache;
38
+ function getCache() {
39
+ if (cache) {
40
+ return cache;
41
+ }
42
+ cache = {};
43
+ const moveQuantumStrings = [
44
+ ...Object.keys(cube3x3x3KPuzzleDefinition.moves),
45
+ ...Object.keys(
46
+ cube3x3x3KPuzzleDefinition.experimentalDerivedMoves
47
+ )
48
+ ];
49
+ for (const moveQuantumString of moveQuantumStrings) {
50
+ cache[moveQuantumString] = uncachedMoveCount(moveQuantumString);
51
+ }
52
+ return cache;
53
+ }
54
+ var costFactors = {
55
+ ["OBTM" /* OuterBlockTurnMetric */]: {
56
+ ["Rotation" /* Rotation */]: { constantFactor: 0, amountFactor: 0 },
57
+ ["Outer" /* Outer */]: { constantFactor: 1, amountFactor: 0 },
58
+ ["Inner" /* Inner */]: { constantFactor: 2, amountFactor: 0 }
59
+ }
60
+ };
61
+ function countMove3x3x3OBTM(move) {
62
+ const cache2 = getCache();
63
+ const moveQuantumString = move.quantum.toString();
64
+ if (!(moveQuantumString in cache2)) {
65
+ throw new Error(`Invalid move for 3x3x3 OBTM: ${moveQuantumString}`);
66
+ }
67
+ const costType = cache2[moveQuantumString];
68
+ const { constantFactor, amountFactor } = costFactors["OBTM" /* OuterBlockTurnMetric */][costType];
69
+ return constantFactor + amountFactor * Math.abs(move.amount);
70
+ }
71
+
72
+ // src/cubing/notation/CountMoves.ts
73
+ var CountMoves = class extends TraversalUp {
74
+ constructor(metric) {
75
+ super();
76
+ this.metric = metric;
77
+ }
78
+ traverseAlg(alg) {
79
+ let r = 0;
80
+ for (const algNode of alg.childAlgNodes()) {
81
+ r += this.traverseAlgNode(algNode);
82
+ }
83
+ return r;
84
+ }
85
+ traverseGrouping(grouping) {
86
+ const alg = grouping.alg;
87
+ return this.traverseAlg(alg) * Math.abs(grouping.amount);
88
+ }
89
+ traverseMove(move) {
90
+ return this.metric(move);
91
+ }
92
+ traverseCommutator(commutator) {
93
+ return 2 * (this.traverseAlg(commutator.A) + this.traverseAlg(commutator.B));
94
+ }
95
+ traverseConjugate(conjugate) {
96
+ return 2 * this.traverseAlg(conjugate.A) + this.traverseAlg(conjugate.B);
97
+ }
98
+ traversePause(_pause) {
99
+ return 0;
100
+ }
101
+ traverseNewline(_newLine) {
102
+ return 0;
103
+ }
104
+ traverseLineComment(_comment) {
105
+ return 0;
106
+ }
107
+ };
108
+ function isCharUppercase(c) {
109
+ return "A" <= c && c <= "Z";
110
+ }
111
+ function baseMetric(move) {
112
+ const fam = move.family;
113
+ if (isCharUppercase(fam[0]) && fam[fam.length - 1] === "v" || fam === "x" || fam === "y" || fam === "z" || fam === "T") {
114
+ return 0;
115
+ } else {
116
+ return 1;
117
+ }
118
+ }
119
+ function etmMetric(_move) {
120
+ return 1;
121
+ }
122
+ function quantumMetric(move) {
123
+ const fam = move.family;
124
+ if (isCharUppercase(fam[0]) && fam[fam.length - 1] === "v" || fam === "x" || fam === "y" || fam === "z" || fam === "T") {
125
+ return 0;
126
+ } else {
127
+ return Math.abs(move.amount);
128
+ }
129
+ }
130
+ var countMoves = functionFromTraversal(CountMoves, [baseMetric]);
131
+ var countMovesETM = functionFromTraversal(CountMoves, [etmMetric]);
132
+ var countQuantumMoves = functionFromTraversal(CountMoves, [
133
+ quantumMetric
134
+ ]);
135
+ var countMoves3x3x3OBTM = functionFromTraversal(CountMoves, [
136
+ countMove3x3x3OBTM
137
+ ]);
138
+ function countMetricMoves(puzzle, metric, alg) {
139
+ if (puzzle.id === "3x3x3" && metric === "OBTM" /* OuterBlockTurnMetric */) {
140
+ return countMoves3x3x3OBTM(alg);
141
+ }
142
+ throw new Error("Unsupported puzzle or metric.");
143
+ }
144
+
145
+ // src/cubing/notation/CountAnimatedLeaves.ts
146
+ var CountAnimatedLeaves = class extends TraversalUp {
147
+ traverseAlg(alg) {
148
+ let total = 0;
149
+ for (const part of alg.childAlgNodes()) {
150
+ total += this.traverseAlgNode(part);
151
+ }
152
+ return total;
153
+ }
154
+ traverseGrouping(grouping) {
155
+ return this.traverseAlg(grouping.alg) * Math.abs(grouping.amount);
156
+ }
157
+ traverseMove(_move) {
158
+ return 1;
159
+ }
160
+ traverseCommutator(commutator) {
161
+ return 2 * (this.traverseAlg(commutator.A) + this.traverseAlg(commutator.B));
162
+ }
163
+ traverseConjugate(conjugate) {
164
+ return 2 * this.traverseAlg(conjugate.A) + this.traverseAlg(conjugate.B);
165
+ }
166
+ traversePause(_pause) {
167
+ return 1;
168
+ }
169
+ traverseNewline(_newline) {
170
+ return 0;
171
+ }
172
+ traverseLineComment(_comment) {
173
+ return 0;
174
+ }
175
+ };
176
+ var countAnimatedLeaves = functionFromTraversal(CountAnimatedLeaves);
177
+
178
+ export {
179
+ CommonMetric,
180
+ CommonMetricAlias,
181
+ countMoves,
182
+ countMovesETM,
183
+ countQuantumMoves,
184
+ countMetricMoves,
185
+ countAnimatedLeaves
186
+ };
187
+ //# sourceMappingURL=chunk-QS5BDQVQ.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/cubing/notation/commonMetrics.ts", "../../src/cubing/notation/cube3x3x3OBTM.ts", "../../src/cubing/notation/CountMoves.ts", "../../src/cubing/notation/CountAnimatedLeaves.ts"],
4
+ "sourcesContent": ["export enum CommonMetric {\n // OBTM (Outer Block Turn Metric)\n OuterBlockTurnMetric = \"OBTM\",\n // RBTM (Range Block Turn Metric)\n RangeBlockTurnMetric = \"RBTM\",\n // SSTM (Single Slice Turn Metric)\n SingleSliceTurnMetric = \"SSTM\",\n // OBQTM (Outer Block Quantum Turn Metric)\n OuterBlockQuantumTurnMetric = \"OBQTM\",\n // RBQTM (Range Block Quantum Turn Metric)\n RangeBlockQuantumTurnMetric = \"RBQTM\",\n // SSQTM (Single Slice Quantum Turn Metric)\n SingleSliceQuantumTurnMetric = \"SSQTM\",\n ExecutionTurnMetric = \"ETM\",\n}\n\nexport enum CommonMetricAlias {\n // QTM (Quantum Turn Metric)\n QuantumTurnMetric = \"OBQTM\",\n // HTM (Hand Turn Metric)\n HandTurnMetric = \"OBTM\",\n // STM (Slice Turn Metric)\n SliceTurnMetric = \"RBTM\",\n}\n", "// TODO: move this into the 3x3x3 puzzle loader.\n\nimport type { Move } from \"../alg\";\nimport { experimentalCube3x3x3KPuzzleDefinition } from \"../puzzles/cubing-private\";\nimport { CommonMetric } from \"./commonMetrics\";\n\nenum MoveType {\n Rotation = \"Rotation\",\n Outer = \"Outer\",\n Inner = \"Inner\",\n}\n\nfunction uncachedMoveCount(moveQuantumString: string): MoveType {\n if (\n moveQuantumString.endsWith(\"v\") ||\n [\"x\", \"y\", \"z\"].includes(moveQuantumString)\n ) {\n // Rv\n return MoveType.Rotation;\n }\n if (\n moveQuantumString.startsWith(\"2\") ||\n [\"M\", \"E\", \"S\"].includes(moveQuantumString)\n ) {\n return MoveType.Inner;\n }\n return MoveType.Outer;\n}\n\nlet cache: Record<string, MoveType> | undefined;\nfunction getCache(): Record<string, MoveType> {\n if (cache) {\n return cache;\n }\n cache = {};\n const moveQuantumStrings = [\n ...Object.keys(experimentalCube3x3x3KPuzzleDefinition.moves),\n ...Object.keys(\n experimentalCube3x3x3KPuzzleDefinition.experimentalDerivedMoves!,\n ),\n ];\n for (const moveQuantumString of moveQuantumStrings) {\n cache[moveQuantumString] = uncachedMoveCount(moveQuantumString);\n }\n return cache;\n}\n\n// Ancient wisdom: https://github.com/cubing/alg.js/blob/0599fad84d81b8d943ad3ea3e5dc191db8b6c157/alg.js#L638-L651\n/**\n * A move with an amount of 0 always has 0 cost. Else, the cost is\n *\n * constantFactor + amountFactor * Math.abs(move.amount)\n *\n */\nconst costFactors: Partial<\n Record<\n CommonMetric,\n Record<\n MoveType,\n {\n constantFactor: number;\n amountFactor: number;\n }\n >\n >\n> = {\n [CommonMetric.OuterBlockTurnMetric]: {\n [MoveType.Rotation]: { constantFactor: 0, amountFactor: 0 },\n [MoveType.Outer]: { constantFactor: 1, amountFactor: 0 },\n [MoveType.Inner]: { constantFactor: 2, amountFactor: 0 },\n },\n};\n\nexport function countMove3x3x3OBTM(move: Move): number {\n const cache = getCache();\n const moveQuantumString = move.quantum.toString();\n if (!(moveQuantumString in cache)) {\n throw new Error(`Invalid move for 3x3x3 OBTM: ${moveQuantumString}`);\n }\n const costType = cache[moveQuantumString];\n const { constantFactor, amountFactor } =\n costFactors[CommonMetric.OuterBlockTurnMetric]![costType];\n return constantFactor + amountFactor * Math.abs(move.amount);\n}\n", "// TODO: move this file somewhere permanent.\nimport {\n Alg,\n Commutator,\n Conjugate,\n functionFromTraversal,\n Grouping,\n LineComment,\n Move,\n Newline,\n Pause,\n TraversalUp,\n} from \"../alg\";\nimport type { PuzzleLoader } from \"../puzzles\";\nimport { CommonMetric } from \"./commonMetrics\";\nimport { countMove3x3x3OBTM } from \"./cube3x3x3OBTM\";\n\n/*\n * For movecount, that understands puzzle rotations. This code\n * should be moved to the alg class, probably.\n */\nclass CountMoves extends TraversalUp<number> {\n constructor(private metric: (move: Move) => number) {\n super();\n }\n\n public traverseAlg(alg: Alg): number {\n let r = 0;\n for (const algNode of alg.childAlgNodes()) {\n r += this.traverseAlgNode(algNode);\n }\n return r;\n }\n\n public traverseGrouping(grouping: Grouping): number {\n const alg: Alg = grouping.alg;\n return this.traverseAlg(alg) * Math.abs(grouping.amount);\n }\n\n public traverseMove(move: Move): number {\n return this.metric(move);\n }\n\n public traverseCommutator(commutator: Commutator): number {\n return (\n 2 * (this.traverseAlg(commutator.A) + this.traverseAlg(commutator.B))\n );\n }\n\n public traverseConjugate(conjugate: Conjugate): number {\n return 2 * this.traverseAlg(conjugate.A) + this.traverseAlg(conjugate.B);\n }\n\n // TODO: Remove spaces between repeated pauses (in traverseSequence)\n public traversePause(_pause: Pause): number {\n return 0;\n }\n\n public traverseNewline(_newLine: Newline): number {\n return 0;\n }\n\n // TODO: Enforce being followed by a newline (or the end of the alg)?\n public traverseLineComment(_comment: LineComment): number {\n return 0;\n }\n}\n\nfunction isCharUppercase(c: string): boolean {\n return \"A\" <= c && c <= \"Z\";\n}\n\n// TODO: Implement a puzzle-specific way to calculate this.\nfunction baseMetric(move: Move): number {\n const fam = move.family;\n if (\n (isCharUppercase(fam[0]) && fam[fam.length - 1] === \"v\") ||\n fam === \"x\" ||\n fam === \"y\" ||\n fam === \"z\" ||\n fam === \"T\"\n ) {\n return 0;\n } else {\n return 1;\n }\n}\n\nfunction etmMetric(_move: Move): number {\n return 1;\n}\n\n// TODO: Implement a puzzle-specific way to calculate this.\nfunction quantumMetric(move: Move): number {\n const fam = move.family;\n if (\n (isCharUppercase(fam[0]) && fam[fam.length - 1] === \"v\") ||\n fam === \"x\" ||\n fam === \"y\" ||\n fam === \"z\" ||\n fam === \"T\"\n ) {\n return 0;\n } else {\n return Math.abs(move.amount);\n }\n}\n\nexport const countMoves = functionFromTraversal(CountMoves, [baseMetric]);\nexport const countMovesETM = functionFromTraversal(CountMoves, [etmMetric]);\nexport const countQuantumMoves = functionFromTraversal(CountMoves, [\n quantumMetric,\n]);\n\nconst countMoves3x3x3OBTM = functionFromTraversal(CountMoves, [\n countMove3x3x3OBTM,\n]);\n\n/**\n * Only implemented so far:\n *\n * - 3x3x3, OBTM\n */\nexport function countMetricMoves(\n puzzle: PuzzleLoader,\n metric: CommonMetric,\n alg: Alg,\n): number {\n if (puzzle.id === \"3x3x3\" && metric === CommonMetric.OuterBlockTurnMetric) {\n return countMoves3x3x3OBTM(alg);\n }\n throw new Error(\"Unsupported puzzle or metric.\");\n}\n", "import {\n Alg,\n Commutator,\n Conjugate,\n Grouping,\n LineComment,\n Move,\n Newline,\n Pause,\n TraversalUp,\n} from \"../alg\";\nimport { functionFromTraversal } from \"../alg\";\n\n// TODO: Include Pause, include amounts\nclass CountAnimatedLeaves extends TraversalUp<number, number> {\n public traverseAlg(alg: Alg): number {\n let total = 0;\n for (const part of alg.childAlgNodes()) {\n total += this.traverseAlgNode(part);\n }\n return total;\n }\n\n public traverseGrouping(grouping: Grouping): number {\n return this.traverseAlg(grouping.alg) * Math.abs(grouping.amount);\n }\n\n public traverseMove(_move: Move): number {\n return 1;\n }\n\n public traverseCommutator(commutator: Commutator): number {\n return (\n 2 * (this.traverseAlg(commutator.A) + this.traverseAlg(commutator.B))\n );\n }\n\n public traverseConjugate(conjugate: Conjugate): number {\n return 2 * this.traverseAlg(conjugate.A) + this.traverseAlg(conjugate.B);\n }\n\n public traversePause(_pause: Pause): number {\n return 1;\n }\n\n public traverseNewline(_newline: Newline): number {\n return 0;\n }\n\n public traverseLineComment(_comment: LineComment): number {\n return 0;\n }\n}\n\nexport const countAnimatedLeaves = functionFromTraversal(CountAnimatedLeaves);\n"],
5
+ "mappings": "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",
6
+ "names": ["CommonMetric", "CommonMetricAlias", "cache"]
7
+ }