cubing 0.63.3 → 0.63.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -1
- package/alg/index.d.ts +1 -1
- package/bluetooth/index.d.ts +1 -1
- package/dist/bin/chunks/{chunk-OI3YIXMQ.js → chunk-E6RYEKYL.js} +2 -2
- package/dist/bin/order.js +8 -4
- package/dist/bin/order.js.map +2 -2
- package/dist/bin/puzzle-geometry-bin.js +8 -4
- package/dist/bin/puzzle-geometry-bin.js.map +2 -2
- package/dist/bin/scramble.js +8 -4
- package/dist/bin/scramble.js.map +2 -2
- package/dist/bin/svg.js +56 -0
- package/dist/bin/svg.js.map +7 -0
- package/dist/lib/cubing/alg/index.d.ts +2 -84
- package/dist/lib/cubing/alg/index.js +1 -1
- package/dist/lib/cubing/bluetooth/index.d.ts +147 -134
- package/dist/lib/cubing/bluetooth/index.js +29 -5
- package/dist/lib/cubing/bluetooth/index.js.map +2 -2
- package/dist/lib/cubing/chunks/{big-puzzle-orientation-ZVZQJEF5.js → big-puzzle-orientation-ADWIOX6S.js} +2 -2
- package/dist/lib/cubing/chunks/{chunk-44CFF24P.js → chunk-53SI7XS4.js} +14 -4
- package/dist/lib/cubing/chunks/chunk-53SI7XS4.js.map +7 -0
- package/dist/lib/cubing/chunks/{chunk-RINY3U6G.js → chunk-5ONX3JVC.js} +7 -2
- package/dist/lib/cubing/chunks/{chunk-RINY3U6G.js.map → chunk-5ONX3JVC.js.map} +1 -1
- package/dist/lib/cubing/chunks/{chunk-ROB5TROI.js → chunk-7LXHWXCO.js} +2 -2
- package/dist/lib/cubing/chunks/{chunk-E3YLQC45.js → chunk-GHFBZYSV.js} +2 -2
- package/dist/lib/cubing/chunks/chunk-GHFBZYSV.js.map +7 -0
- package/dist/lib/cubing/chunks/{chunk-ZU7PSGX4.js → chunk-JCCXEYXU.js} +4 -3
- package/dist/lib/cubing/chunks/{chunk-ZU7PSGX4.js.map → chunk-JCCXEYXU.js.map} +1 -1
- package/dist/lib/cubing/chunks/{chunk-DQGYYYHZ.js → chunk-LD4XJTCU.js} +28 -13
- package/dist/lib/cubing/chunks/chunk-LD4XJTCU.js.map +7 -0
- package/dist/lib/cubing/chunks/{chunk-O6HEZXGY.js → chunk-N5FJ5YIA.js} +4 -3
- package/dist/lib/cubing/chunks/{chunk-O6HEZXGY.js.map → chunk-N5FJ5YIA.js.map} +1 -1
- package/dist/lib/cubing/chunks/{chunk-NGW52SHR.js → chunk-S74APGTK.js} +3 -3
- package/dist/lib/cubing/chunks/{chunk-FLK6AZKB.js → chunk-VYAO5FCM.js} +7 -7
- package/dist/lib/cubing/chunks/{chunk-FLK6AZKB.js.map → chunk-VYAO5FCM.js.map} +2 -2
- package/dist/lib/cubing/chunks/{chunk-FUHYAW74.js → chunk-WBMKMQAL.js} +49 -63
- package/dist/lib/cubing/chunks/chunk-WBMKMQAL.js.map +7 -0
- package/dist/lib/cubing/chunks/{chunk-FTE3QI5X.js → chunk-XVZLWT3A.js} +42 -47
- package/dist/lib/cubing/chunks/chunk-XVZLWT3A.js.map +7 -0
- package/dist/lib/cubing/chunks/{inside-L2JI2BEY.js → inside-VUJSPBRA.js} +53 -25
- package/dist/lib/cubing/chunks/inside-VUJSPBRA.js.map +7 -0
- package/dist/lib/cubing/chunks/puzzles-dynamic-4x4x4-AIGABOAR.js +132 -0
- package/dist/lib/cubing/chunks/puzzles-dynamic-4x4x4-AIGABOAR.js.map +7 -0
- package/dist/lib/cubing/chunks/{search-dynamic-sgs-side-events-GB4WAJ7I.js → search-dynamic-sgs-side-events-LHAMZP5J.js} +6 -6
- package/dist/lib/cubing/chunks/{search-dynamic-sgs-unofficial-CM33KT7L.js → search-dynamic-sgs-unofficial-GXKMVR4W.js} +6 -5
- package/dist/lib/cubing/chunks/{search-dynamic-solve-4x4x4-NANDMURR.js → search-dynamic-solve-4x4x4-N2X3RMYU.js} +7 -6
- package/dist/lib/cubing/chunks/{search-dynamic-solve-fto-UZMNOI6U.js → search-dynamic-solve-fto-I5ID5LXD.js} +2 -2
- package/dist/lib/cubing/chunks/search-dynamic-solve-kilominx-Y2D3C74Y.js +771 -0
- package/dist/lib/cubing/chunks/search-dynamic-solve-kilominx-Y2D3C74Y.js.map +7 -0
- package/dist/lib/cubing/chunks/search-worker-entry.js +7 -6
- package/dist/lib/cubing/chunks/search-worker-entry.js.map +2 -2
- package/dist/lib/cubing/chunks/{twips-YHXBF55O.js → twips-ZNMKGC5U.js} +4 -4
- package/dist/lib/cubing/chunks/twips_wasm_bg-TJNYGA2C-AP2O4LGG.js +10 -0
- package/dist/lib/cubing/chunks/twips_wasm_bg-TJNYGA2C-AP2O4LGG.js.map +7 -0
- package/dist/lib/cubing/chunks/{twisty-dynamic-3d-VGZIQ64W.js → twisty-dynamic-3d-LSRGWTXG.js} +22 -7
- package/dist/lib/cubing/chunks/{twisty-dynamic-3d-VGZIQ64W.js.map → twisty-dynamic-3d-LSRGWTXG.js.map} +2 -2
- package/dist/lib/cubing/index-BXHm_6gm.d.ts +2626 -0
- package/dist/lib/cubing/index-Cvk652Bd.d.ts +76 -0
- package/dist/lib/cubing/kpuzzle/index.d.ts +2 -3
- package/dist/lib/cubing/kpuzzle/index.js +2 -2
- package/dist/lib/cubing/notation/index.d.ts +18 -17
- package/dist/lib/cubing/notation/index.js +4 -4
- package/dist/lib/cubing/outside-CwNOEuJJ.d.ts +38 -0
- package/dist/lib/cubing/protocol/index.d.ts +14 -14
- package/dist/lib/cubing/protocol/index.js +4 -4
- package/dist/lib/cubing/puzzle-geometry/index.d.ts +2 -8
- package/dist/lib/cubing/puzzle-geometry/index.js +33 -1
- package/dist/lib/cubing/puzzle-geometry/index.js.map +1 -1
- package/dist/lib/cubing/puzzles/index.d.ts +2 -45
- package/dist/lib/cubing/puzzles/index.js +4 -4
- package/dist/lib/cubing/scramble/index.d.ts +2 -4
- package/dist/lib/cubing/scramble/index.js +6 -6
- package/dist/lib/cubing/search/index.d.ts +4 -9
- package/dist/lib/cubing/search/index.js +6 -6
- package/dist/lib/cubing/stream/index.d.ts +2 -45
- package/dist/lib/cubing/stream/index.js +1 -1
- package/dist/lib/cubing/twisty/index.d.ts +2 -60
- package/dist/lib/cubing/twisty/index.js +65 -17
- package/dist/lib/cubing/twisty/index.js.map +2 -2
- package/kpuzzle/index.d.ts +1 -1
- package/notation/index.d.ts +1 -1
- package/package.json +19 -20
- package/protocol/index.d.ts +1 -1
- package/puzzle-geometry/index.d.ts +1 -1
- package/puzzles/index.d.ts +1 -1
- package/scramble/index.d.ts +1 -1
- package/search/index.d.ts +1 -1
- package/stream/index.d.ts +1 -1
- package/twisty/index.d.ts +1 -1
- package/dist/lib/cubing/PuzzleLoader-Bp8zngUn.d.ts +0 -2362
- package/dist/lib/cubing/chunks/chunk-44CFF24P.js.map +0 -7
- package/dist/lib/cubing/chunks/chunk-DQGYYYHZ.js.map +0 -7
- package/dist/lib/cubing/chunks/chunk-E3YLQC45.js.map +0 -7
- package/dist/lib/cubing/chunks/chunk-FTE3QI5X.js.map +0 -7
- package/dist/lib/cubing/chunks/chunk-FUHYAW74.js.map +0 -7
- package/dist/lib/cubing/chunks/chunk-FZBKZ5ZB.js +0 -265
- package/dist/lib/cubing/chunks/chunk-LWCBAAHO.js +0 -1180
- package/dist/lib/cubing/chunks/chunk-LWCBAAHO.js.map +0 -7
- package/dist/lib/cubing/chunks/chunk-M7YKTETT.js +0 -239
- package/dist/lib/cubing/chunks/chunk-M7YKTETT.js.map +0 -7
- package/dist/lib/cubing/chunks/chunk-NGW52SHR.js.map +0 -7
- package/dist/lib/cubing/chunks/chunk-OUM32GEA.js +0 -239
- package/dist/lib/cubing/chunks/chunk-OUM32GEA.js.map +0 -7
- package/dist/lib/cubing/chunks/chunk-SGJ5WPE4.js +0 -1074
- package/dist/lib/cubing/chunks/chunk-SGJ5WPE4.js.map +0 -7
- package/dist/lib/cubing/chunks/chunk-TAVR35KU.js +0 -265
- package/dist/lib/cubing/chunks/chunk-TAVR35KU.js.map +0 -7
- package/dist/lib/cubing/chunks/chunk-V27EM5TJ.js +0 -1074
- package/dist/lib/cubing/chunks/chunk-V27EM5TJ.js.map +0 -7
- package/dist/lib/cubing/chunks/chunk-VRTKWZPL.js +0 -10084
- package/dist/lib/cubing/chunks/chunk-VRTKWZPL.js.map +0 -7
- package/dist/lib/cubing/chunks/chunk-VSMFYTG6.js +0 -10086
- package/dist/lib/cubing/chunks/chunk-VSMFYTG6.js.map +0 -7
- package/dist/lib/cubing/chunks/inside-IHWQVDVU.js +0 -564
- package/dist/lib/cubing/chunks/inside-IHWQVDVU.js.map +0 -7
- package/dist/lib/cubing/chunks/inside-L2JI2BEY.js.map +0 -7
- package/dist/lib/cubing/chunks/inside-Q56GLXG4.js +0 -556
- package/dist/lib/cubing/chunks/inside-Q56GLXG4.js.map +0 -7
- package/dist/lib/cubing/chunks/puzzles-dynamic-4x4x4-REUXFQJ4.js +0 -124
- package/dist/lib/cubing/chunks/puzzles-dynamic-4x4x4-REUXFQJ4.js.map +0 -7
- package/dist/lib/cubing/chunks/search-dynamic-sgs-side-events-MXHP7O4R.js +0 -1890
- package/dist/lib/cubing/chunks/search-dynamic-sgs-side-events-MXHP7O4R.js.map +0 -7
- package/dist/lib/cubing/chunks/search-dynamic-sgs-side-events-XFECDWOF.js +0 -1890
- package/dist/lib/cubing/chunks/search-dynamic-sgs-side-events-XFECDWOF.js.map +0 -7
- package/dist/lib/cubing/chunks/search-dynamic-sgs-unofficial-2CECFBP3.js +0 -1268
- package/dist/lib/cubing/chunks/search-dynamic-sgs-unofficial-CM33KT7L.js.map +0 -7
- package/dist/lib/cubing/chunks/search-dynamic-sgs-unofficial-Q4LLHL2O.js +0 -1267
- package/dist/lib/cubing/chunks/search-dynamic-sgs-unofficial-Q4LLHL2O.js.map +0 -7
- package/dist/lib/cubing/chunks/search-dynamic-solve-4x4x4-COSEVJBV.js +0 -2922
- package/dist/lib/cubing/chunks/search-dynamic-solve-4x4x4-COSEVJBV.js.map +0 -7
- package/dist/lib/cubing/chunks/search-dynamic-solve-4x4x4-E576AITS.js +0 -2923
- package/dist/lib/cubing/chunks/search-dynamic-solve-4x4x4-NANDMURR.js.map +0 -7
- package/dist/lib/cubing/chunks/twips_wasm_bg-RWVQBVBA-5YCKA6O5.js +0 -10
- package/dist/lib/cubing/chunks/twips_wasm_bg-RWVQBVBA-5YCKA6O5.js.map +0 -7
- package/dist/lib/cubing/chunks/twisty-dynamic-3d-5NZRNZ7C.js +0 -1881
- package/dist/lib/cubing/chunks/twisty-dynamic-3d-5NZRNZ7C.js.map +0 -7
- package/dist/lib/cubing/chunks/twisty-dynamic-3d-IKE4BUQG.js +0 -1883
- package/dist/lib/cubing/chunks/twisty-dynamic-3d-IKE4BUQG.js.map +0 -7
- package/dist/lib/cubing/chunks/twisty-dynamic-3d-XLUOPCLN.js +0 -1881
- package/dist/lib/cubing/chunks/twisty-dynamic-3d-XLUOPCLN.js.map +0 -7
- package/dist/lib/cubing/events-CewDA1aS.d.ts +0 -35
- package/dist/lib/cubing/index-DabjED-w.d.ts +0 -33
- /package/dist/bin/chunks/{chunk-OI3YIXMQ.js.map → chunk-E6RYEKYL.js.map} +0 -0
- /package/dist/lib/cubing/chunks/{big-puzzle-orientation-ZVZQJEF5.js.map → big-puzzle-orientation-ADWIOX6S.js.map} +0 -0
- /package/dist/lib/cubing/chunks/{chunk-ROB5TROI.js.map → chunk-7LXHWXCO.js.map} +0 -0
- /package/dist/lib/cubing/chunks/{chunk-FZBKZ5ZB.js.map → chunk-S74APGTK.js.map} +0 -0
- /package/dist/lib/cubing/chunks/{search-dynamic-sgs-side-events-GB4WAJ7I.js.map → search-dynamic-sgs-side-events-LHAMZP5J.js.map} +0 -0
- /package/dist/lib/cubing/chunks/{search-dynamic-sgs-unofficial-2CECFBP3.js.map → search-dynamic-sgs-unofficial-GXKMVR4W.js.map} +0 -0
- /package/dist/lib/cubing/chunks/{search-dynamic-solve-4x4x4-E576AITS.js.map → search-dynamic-solve-4x4x4-N2X3RMYU.js.map} +0 -0
- /package/dist/lib/cubing/chunks/{search-dynamic-solve-fto-UZMNOI6U.js.map → search-dynamic-solve-fto-I5ID5LXD.js.map} +0 -0
- /package/dist/lib/cubing/chunks/{twips-YHXBF55O.js.map → twips-ZNMKGC5U.js.map} +0 -0
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/cubing/search/worker-workarounds/index.ts", "../../../../src/cubing/search/instantiator.ts", "../../../../src/cubing/search/outside.ts"],
|
|
4
|
-
"sourcesContent": ["import { exposeAPI } from \"./worker-guard\";\n\nexport function searchWorkerURLImportMetaResolve(): string {\n // Note:\n // - We have to hardcode the expected path of the entry file in the ESM build, due to lack of `esbuild` support: https://github.com/evanw/esbuild/issues/2866\n // - This URL is based on the assumption that the code from this file ends up in a shared chunk in the `esm` build. This is not guaranteed by `esbuild`, but it consistently happens for our codebase.\n // - We inline the value (instead of using a constant), to maximize compatibility for hardcoded syntax detection in bundlers.\n return import.meta.resolve(\"./search-worker-entry.js\");\n}\n\nexport function searchWorkerURLNewURLImportMetaURL(): URL {\n // Note:\n // - We have to hardcode the expected path of the entry file in the ESM build, due to lack of `esbuild` support: https://github.com/evanw/esbuild/issues/795\n // - This URL is based on the assumption that the code from this file ends up in a shared chunk in the `esm` build. This is not guaranteed by `esbuild`, but it consistently happens for our codebase.\n // - We inline the value (instead of using a constant), to maximize compatibility for hardcoded syntax detection in bundlers.\n return new URL(\"./search-worker-entry.js\", import.meta.url);\n}\n\n// Workaround for `esbuild`: https://github.com/evanw/esbuild/issues/312#issuecomment-1092195778\nexport async function searchWorkerURLEsbuildWorkaround(): Promise<string> {\n exposeAPI.expose = false;\n return (await import(\"./search-worker-entry.js\")).WORKER_ENTRY_FILE_URL;\n}\n\nexport function instantiateSearchWorkerURLNewURLImportMetaURL(): Worker {\n return new Worker(new URL(\"./search-worker-entry.js\", import.meta.url), {\n type: \"module\",\n });\n}\n", "import type { Worker as NodeWorker } from \"node:worker_threads\";\nimport { PortableWorker, wrap } from \"../vendor/apache/comlink-everywhere\";\nimport type { WorkerAPI } from \"./inside/api\";\nimport { searchOutsideDebugGlobals } from \"./outside\";\nimport {\n searchWorkerURLEsbuildWorkaround,\n searchWorkerURLImportMetaResolve,\n searchWorkerURLNewURLImportMetaURL,\n} from \"./worker-workarounds\";\n\nfunction wrapAPI(worker: Worker | NodeWorker): WorkerAPI {\n return wrap<WorkerAPI>(worker);\n}\n\nasync function instantiateModuleWorker(\n workerEntryFileURL: string | URL,\n): Promise<WorkerAPI> {\n // biome-ignore lint/suspicious/noAsyncPromiseExecutor: TODO\n return new Promise<WorkerAPI>(async (resolve, reject) => {\n try {\n const worker = new PortableWorker(workerEntryFileURL);\n\n // TODO: Remove this once we can remove the workarounds for lack of `import.meta.resolve(\u2026)` support.\n const onFirstMessage = (messageData: string) => {\n if (messageData === \"comlink-exposed\") {\n // We need to clear the timeout so that we don't prevent `node` from exiting in the meantime.\n resolve(wrapAPI(worker));\n } else {\n reject(\n new Error(`wrong module instantiation message ${messageData}`),\n );\n }\n };\n\n const onError = (e: ErrorEvent) => {\n reject(e);\n };\n\n if (\"once\" in worker /* hack to detect `node` */) {\n // We have to use `once` so the `unref()` from `comlink-everywhere` allows the process to quit as expected.\n worker.once(\"message\", onFirstMessage);\n } else {\n worker.addEventListener(\"error\", onError, {\n once: true,\n });\n worker.addEventListener(\n \"message\",\n (e: MessageEvent) => onFirstMessage(e.data),\n {\n once: true,\n },\n );\n }\n } catch (e) {\n reject(e);\n }\n });\n}\n\nexport const allWorkerAPIPromises: Promise<WorkerAPI>[] = [];\n\nexport async function instantiateWorkerAPI(): Promise<WorkerAPI> {\n const workerAPIPromise = instantiateWorkerImplementation();\n allWorkerAPIPromises.push(workerAPIPromise);\n const insideAPI = await workerAPIPromise;\n insideAPI.setDebugMeasurePerf(searchOutsideDebugGlobals.logPerf);\n insideAPI.setScramblePrefetchLevel(\n searchOutsideDebugGlobals.scramblePrefetchLevel,\n );\n return workerAPIPromise;\n}\n\ntype FallbackStrategyInfo = [\n fn: () => Promise<WorkerAPI>,\n description: string,\n warnOnSuccess: null | string,\n];\n\nasync function instantiateWorkerImplementation(): Promise<WorkerAPI> {\n if (globalThis.location?.protocol === \"file:\") {\n console.warn(\n \"This current web page is loaded from the local filesystem (a URL that starts with `file://`). In this situation, `cubing.js` may be unable to generate scrambles or perform searches in some browsers. See: https://js.cubing.net/cubing/scramble/#file-server-required\",\n );\n }\n\n function failed(methodDescription?: string) {\n return `Module worker instantiation${\n methodDescription ? ` ${methodDescription}` : \"\"\n } failed`;\n }\n\n const importMetaResolveStrategy: FallbackStrategyInfo = [\n async () => instantiateModuleWorker(searchWorkerURLImportMetaResolve()),\n \"using `import.meta.resolve(\u2026)\",\n null,\n ];\n const esbuildWorkaroundStrategy: FallbackStrategyInfo = [\n async () =>\n instantiateModuleWorker(await searchWorkerURLEsbuildWorkaround()),\n \"using the `esbuild` workaround\",\n // TODO: we will hopefully discontinue the `esbuild` workaround at some\n // point, but `esbuild` has been stuck for 3 years on this issue. Because\n // `esbuild` and Vite (which uses `esbuild`) are now dominating the\n // ecosystem, this just causes a warning for a lot of devs/users that they\n // can't do anything about. As frustrating as the situation is, the\n // workaround is semantically fine (even if it's convoluted) and is\n // preserved by `esbuild`-based flows in practice. So we suppress the\n // warning in the medium-term but maintain long-term hope that we can\n // remove it (and the other fallbacks as well).\n null,\n ];\n const newURLStrategy: FallbackStrategyInfo = [\n async () => instantiateModuleWorker(searchWorkerURLNewURLImportMetaURL()),\n \"using `new URL(\u2026, import.meta.url)`\",\n \"will\",\n ];\n\n const fallbackOrder: FallbackStrategyInfo[] =\n searchOutsideDebugGlobals.prioritizeEsbuildWorkaroundForWorkerInstantiation\n ? [esbuildWorkaroundStrategy, importMetaResolveStrategy, newURLStrategy]\n : [importMetaResolveStrategy, esbuildWorkaroundStrategy, newURLStrategy];\n\n for (const [fn, description, warnOnSuccess] of fallbackOrder) {\n try {\n const worker = await fn();\n if (warnOnSuccess) {\n if (searchOutsideDebugGlobals.showWorkerInstantiationWarnings) {\n console.warn(\n `Module worker instantiation required ${description}. \\`cubing.js\\` ${warnOnSuccess} not support this fallback in the future.`,\n );\n }\n }\n return worker;\n } catch {\n // if (searchOutsideDebugGlobals.showWorkerInstantiationWarnings) {\n // console.warn(`${failed(description)}, falling back.`);\n // }\n }\n }\n\n throw new Error(`${failed()}. There are no more fallbacks available.`);\n}\n", "import { Alg } from \"../alg\";\nimport type { KPuzzle } from \"../kpuzzle\";\n// import { preInitialize222 } from \"../implementations/2x2x2\";\nimport type { KPattern } from \"../kpuzzle/KPattern\";\nimport type { PrefetchLevel, WorkerAPI } from \"./inside/api\";\nimport type { TwipsOptions } from \"./inside/solve/twips\";\nimport { allWorkerAPIPromises, instantiateWorkerAPI } from \"./instantiator\";\n\nlet cachedWorkerInstance: Promise<WorkerAPI> | undefined;\nfunction getCachedWorkerInstance(): Promise<WorkerAPI> {\n return (cachedWorkerInstance ??= instantiateWorkerAPI());\n}\n\nexport async function mapToAllWorkers(\n f: (worker: WorkerAPI) => void,\n): Promise<void> {\n await Promise.all(\n allWorkerAPIPromises.map(async (worker) => {\n f(await worker);\n }),\n );\n}\n\n// Pre-initialize the scrambler for the given event. (Otherwise, an event is\n// initialized the first time you ask for a scramble for that event.)\n//\n// Some typical numbers for a fast computer:\n// - 3x3x3 initialization: 200ms\n// - Each 3x3x3 scramble: 50ms\n// - 4x4x4 initialization: 2500ms\n// - Each 4x4x4 scramble: 300ms to 800ms\n//\n// It is safe to immediately call for a scramble\n// any time after starting pre-initialization, or to call for them without\n// pre-initializing. Pre-initializing essentially gives the scramble worker a\n// head start in case a scramble doesn't get requested immediately.\n//\n// Note that events cannot be pre-initialized in parallel. Attempting to\n// pre-initialize multiple events will initialize them consecutively. Scrambles\n// for a given event cannot be computed while another event is being initialized.\nexport function _preInitializationHintForEvent(\n eventID: string,\n // callback?: () => void\n): void {\n switch (eventID) {\n case \"333oh\":\n _preInitializationHintForEvent(\"333\");\n return;\n }\n void (async () => {\n await (await getCachedWorkerInstance()).initialize(eventID);\n })();\n}\n\nexport async function randomScrambleForEvent(eventID: string): Promise<Alg> {\n const worker = searchOutsideDebugGlobals.forceNewWorkerForEveryScramble\n ? await instantiateWorkerAPI()\n : await getCachedWorkerInstance();\n const scrambleString = await worker.randomScrambleStringForEvent(eventID);\n\n return Alg.fromString(scrambleString);\n}\n\nexport async function deriveScrambleForEvent(\n derivationSeedHex: string,\n derivationSaltHierarchy: string[],\n eventID: string,\n): Promise<Alg> {\n if (!searchOutsideDebugGlobals.allowDerivedScrambles) {\n throw new Error(\"Derived scrambles are not allowed.\");\n }\n const worker = searchOutsideDebugGlobals.forceNewWorkerForEveryScramble\n ? await instantiateWorkerAPI()\n : await getCachedWorkerInstance();\n const scrambleString = await worker.deriveScrambleStringForEvent(\n derivationSeedHex,\n derivationSaltHierarchy,\n eventID,\n );\n return Alg.fromString(scrambleString);\n}\n\nexport async function experimentalSolve3x3x3IgnoringCenters(\n pattern: KPattern,\n): Promise<Alg> {\n const cwi = await getCachedWorkerInstance();\n return Alg.fromString(await cwi.solve333ToString(pattern.patternData));\n}\n\nexport async function experimentalSolve2x2x2(pattern: KPattern): Promise<Alg> {\n const cwi = await getCachedWorkerInstance();\n return Alg.fromString(await cwi.solve222ToString(pattern.patternData));\n}\n\nexport async function solveSkewb(pattern: KPattern): Promise<Alg> {\n const cwi = await getCachedWorkerInstance();\n return Alg.fromString(await cwi.solveSkewbToString(pattern.patternData));\n}\n\nexport async function solvePyraminx(pattern: KPattern): Promise<Alg> {\n const cwi = await getCachedWorkerInstance();\n return Alg.fromString(await cwi.solvePyraminxToString(pattern.patternData));\n}\n\nexport async function solveMegaminx(pattern: KPattern): Promise<Alg> {\n const cwi = await getCachedWorkerInstance();\n return Alg.fromString(await cwi.solveMegaminxToString(pattern.patternData));\n}\n\nexport interface SolveTwipsOptions {\n generatorMoves?: string[];\n targetPattern?: KPattern;\n minDepth?: number;\n maxDepth?: number;\n}\n\nexport async function solveTwips(\n kpuzzle: KPuzzle,\n pattern: KPattern,\n options?: SolveTwipsOptions,\n): Promise<Alg> {\n const { targetPattern, ...otherOptions } = options ?? {};\n const apiOptions: TwipsOptions = otherOptions;\n if (targetPattern) {\n apiOptions.targetPattern = targetPattern.patternData;\n }\n const { ...def } = kpuzzle.definition;\n delete def.experimentalIsPatternSolved;\n // delete def.derivedMoves;\n const dedicatedWorker = await instantiateWorkerAPI();\n try {\n return Alg.fromString(\n // TODO: unnecessary because we terminate the worker?\n await dedicatedWorker.solveTwipsToString(\n def,\n pattern.patternData,\n apiOptions,\n ),\n );\n } finally {\n console.log(\"Search ended, terminating dedicated `twips` worker.\");\n // TODO: support re-using the same worker for multiple searches..\n // dedicatedWorker.terminate?.(); // TODO\n }\n}\n\ninterface SearchOutsideDebugGlobals {\n logPerf: boolean;\n scramblePrefetchLevel: `${PrefetchLevel}`;\n forceNewWorkerForEveryScramble: boolean;\n showWorkerInstantiationWarnings: boolean;\n // This can prevent a request to `search-worker-entry.js` when it doesn't exist, if the library semantics have been mangled by `esbuild`.\n prioritizeEsbuildWorkaroundForWorkerInstantiation: boolean;\n allowDerivedScrambles: boolean;\n}\n\nexport const searchOutsideDebugGlobals: SearchOutsideDebugGlobals = {\n logPerf: true,\n scramblePrefetchLevel: \"auto\",\n forceNewWorkerForEveryScramble: false,\n showWorkerInstantiationWarnings: true,\n prioritizeEsbuildWorkaroundForWorkerInstantiation: false,\n allowDerivedScrambles: false,\n};\n\nexport function setSearchDebug(\n options: Partial<SearchOutsideDebugGlobals>,\n): void {\n const { logPerf, scramblePrefetchLevel } = options;\n if (typeof logPerf !== \"undefined\") {\n searchOutsideDebugGlobals.logPerf = logPerf;\n void mapToAllWorkers((worker) => worker.setDebugMeasurePerf(logPerf));\n }\n if (typeof scramblePrefetchLevel !== \"undefined\") {\n searchOutsideDebugGlobals.scramblePrefetchLevel = scramblePrefetchLevel;\n void mapToAllWorkers((worker) =>\n worker.setScramblePrefetchLevel(scramblePrefetchLevel as PrefetchLevel),\n );\n }\n for (const booleanField of [\n \"forceNewWorkerForEveryScramble\",\n \"showWorkerInstantiationWarnings\",\n \"prioritizeEsbuildWorkaroundForWorkerInstantiation\",\n \"allowDerivedScrambles\",\n ] as const) {\n if (booleanField in options) {\n searchOutsideDebugGlobals[booleanField] =\n options[booleanField] ?? searchOutsideDebugGlobals[booleanField];\n }\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/cubing/twisty/debug.ts", "../../../../src/cubing/twisty/model/PromiseFreshener.ts", "../../../../src/cubing/twisty/model/props/TwistyProp.ts", "../../../../src/cubing/twisty/views/node-custom-element-shims.ts", "../../../../src/cubing/twisty/views/ManagedCustomElement.ts", "../../../../src/cubing/twisty/controllers/RenderScheduler.ts", "../../../../src/cubing/twisty/model/props/puzzle/display/HintFaceletProp.ts", "../../../../src/cubing/twisty/views/3D/TAU.ts", "../../../../src/cubing/vendor/mit/three/examples/jsm/libs/stats.modified.module.ts", "../../../../src/cubing/twisty/heavy-code-imports/3d.ts", "../../../../src/cubing/twisty/views/canvas.ts", "../../../../src/cubing/twisty/views/3D/DragTracker.ts", "../../../../src/cubing/twisty/views/3D/RendererPool.ts", "../../../../src/cubing/twisty/views/3D/Twisty3DVantage.css.ts", "../../../../src/cubing/twisty/views/3D/TwistyOrbitControls.ts", "../../../../src/cubing/twisty/views/3D/Twisty3DVantage.ts"],
|
|
4
|
-
"sourcesContent": ["export const twistyDebugGlobals: {\n // WARNING: The current shared renderer implementation has performance issues, especially in Safari.\n // Avoid using for players that are likely to have dimensions approaching 1 megapixel or higher.\n // TODO: use a dedicated renderer while fullscreen?\n // - \"auto\": Default heuristics.\n // - \"always\": Force all new (i.e. constructed in the future) renderers to be shared\n // - \"never\": Force all new (i.e. constructed in the future) renderers to be dedicated\n shareAllNewRenderers: \"auto\" | \"always\" | \"never\";\n showRenderStats: boolean;\n} = {\n shareAllNewRenderers: \"auto\",\n showRenderStats: false,\n};\n\nexport function setTwistyDebug(\n options: Partial<typeof twistyDebugGlobals>,\n): void {\n for (const [key, value] of Object.entries(options)) {\n if (key in twistyDebugGlobals) {\n (twistyDebugGlobals as any)[key] = value;\n }\n }\n}\n", "// TODO: Pick a much better name.\nexport class PromiseFreshener<T> {\n #latestAssignedIdx = 0;\n #latestResolvedIdx = 0;\n\n // TODO: reject instead? Drop?\n async queue(\n p: Promise<T>,\n ): Promise<{ fresh: false } | { fresh: true; result: T }> {\n const idx = ++this.#latestAssignedIdx;\n const result = await p;\n if (idx > this.#latestResolvedIdx) {\n this.#latestResolvedIdx = idx;\n return {\n fresh: true,\n result: result,\n };\n } else {\n return { fresh: false };\n }\n }\n}\n\n// This will silenty drop a queued Promise (i.e. not resolve it) if a\n// newer queued one already resolved first. This is useful for classes that want\n// to know the \"latest\" state of something without jumping back to an older\n// value by accident.\n// TODO: Remove this because it's too easy to misuse?\nexport class StaleDropper<T> {\n #latestAssignedIdx = 0;\n #latestResolvedIdx = 0;\n\n queue(p: Promise<T>): Promise<T> {\n // biome-ignore lint/suspicious/noAsyncPromiseExecutor: This is a very rare case where we *do* want to drop a Promise sometimes.\n return new Promise(async (resolve, reject) => {\n try {\n const idx = ++this.#latestAssignedIdx;\n const result = await p;\n if (idx > this.#latestResolvedIdx) {\n this.#latestResolvedIdx = idx;\n resolve(result);\n }\n } catch (e) {\n reject(e);\n }\n });\n }\n}\n", "import type { Tagged } from \"type-fest\";\nimport { from } from \"../../../vendor/mit/p-lazy/p-lazy\";\nimport { StaleDropper } from \"../PromiseFreshener\";\nimport type { UserVisibleErrorTracker } from \"../UserVisibleErrorTracker\";\n\ntype InputRecord = Record<string, any>;\n\nexport type InputProps<T extends InputRecord> = {\n [s in keyof T]: TwistyPropParent<T[s]>;\n};\n\ntype InputPromises<T extends InputRecord> = {\n [s in keyof T]: Promise<T[s]>;\n};\n\ntype Generation = Tagged<number, \"Generation\">;\n\ninterface SourceEventDetail<OutputType> {\n sourceProp: TwistyPropSource<OutputType, any>;\n value: Promise<OutputType>; // TODO: remove?\n generation: Generation;\n}\n\ntype SourceEvent<T> = CustomEvent<SourceEventDetail<T>>;\n\nexport type PromiseOrValue<T> = T | Promise<T>;\n\n// Values of T must be immutable.\nlet globalSourceGeneration: Generation = 0 as Generation; // This is incremented before being used, so 1 will be the first active value.\nexport abstract class TwistyPropParent<T> {\n public abstract get(): Promise<T>;\n\n // Don't overwrite this. Overwrite `canReuseValue` instead.\n public canReuse(v1: T, v2: T): boolean {\n return v1 === v2 || this.canReuseValue(v1, v2);\n }\n\n // Overwrite with a cheap semantic comparison when possible.\n // Note that this is not called if `v1 === v2` (in which case the value is automatically reused).\n protected canReuseValue(_v1: T, _v2: T): boolean {\n return false;\n }\n\n debugGetChildren(): TwistyPropDerived<any, any>[] {\n return Array.from(this.#children.values());\n }\n\n // Propagation\n\n #children: Set<TwistyPropDerived<any, any>> = new Set();\n protected addChild(child: TwistyPropDerived<any, any>): void {\n this.#children.add(child);\n }\n\n protected removeChild(child: TwistyPropDerived<any, any>): void {\n this.#children.delete(child);\n }\n\n protected lastSourceGeneration: number = 0;\n // Synchronously marks all descendants as stale. This doesn't actually\n // literally mark as stale, but it updates the last source generation, which\n // is used to tell if a cahced result is stale.\n protected markStale(sourceEvent: SourceEvent<any>): void {\n if (sourceEvent.detail.generation !== globalSourceGeneration) {\n // The full stale propagation is synchronous, so there should not be a new one yet.\n throw new Error(\"A TwistyProp was marked stale too late!\");\n }\n if (this.lastSourceGeneration === sourceEvent.detail.generation) {\n // Already propagated.\n return;\n }\n this.lastSourceGeneration = sourceEvent.detail.generation;\n for (const child of this.#children) {\n child.markStale(sourceEvent);\n }\n // We schedule sending out events *after* the (synchronous) propagation has happened, in\n // case one of the listeners updates a source again.\n this.#scheduleRawDispatch();\n }\n\n #rawListeners: Set<() => void> = new Set();\n /** @deprecated */\n addRawListener(listener: () => void, options?: { initial: boolean }): void {\n this.#rawListeners.add(listener);\n if (options?.initial) {\n listener(); // TODO: wrap in a try?\n }\n }\n\n /** @deprecated */\n removeRawListener(listener: () => void): void {\n this.#rawListeners.delete(listener);\n }\n\n /** @deprecated */\n #scheduleRawDispatch(): void {\n if (!this.#rawDispatchPending) {\n this.#rawDispatchPending = true;\n setTimeout(() => this.#dispatchRawListeners(), 0);\n }\n }\n\n #rawDispatchPending: boolean = false;\n #dispatchRawListeners(): void {\n if (!this.#rawDispatchPending) {\n throw new Error(\"Invalid dispatch state!\");\n }\n for (const listener of this.#rawListeners) {\n listener(); // TODO: wrap in a try?\n }\n this.#rawDispatchPending = false;\n }\n\n #freshListeners: Map<(value: T) => void, () => void> = new Map();\n // TODO: Pick a better name.\n public addFreshListener(listener: (value: T) => void): void {\n const staleDropper: StaleDropper<T> = new StaleDropper<T>();\n let lastResult: T | null = null;\n const callback = async () => {\n const result = await staleDropper.queue(this.get());\n if (lastResult !== null && this.canReuse(lastResult, result)) {\n return;\n }\n lastResult = result;\n listener(result);\n };\n this.#freshListeners.set(listener, callback);\n this.addRawListener(callback, { initial: true });\n }\n\n public removeFreshListener(listener: (value: T) => void): void {\n this.removeRawListener(this.#freshListeners.get(listener)!); // TODO: throw a custom error?\n this.#freshListeners.delete(listener);\n }\n}\n\nexport abstract class TwistyPropSource<\n OutputType,\n InputType = OutputType,\n> extends TwistyPropParent<OutputType> {\n #value: Promise<OutputType>;\n\n public abstract getDefaultValue(): PromiseOrValue<OutputType>;\n\n constructor(initialValue?: PromiseOrValue<InputType>) {\n super();\n this.#value = from(() => this.getDefaultValue());\n if (initialValue) {\n this.#value = this.deriveFromPromiseOrValue(initialValue, this.#value);\n }\n }\n\n set(input: PromiseOrValue<InputType>): void {\n this.#value = this.deriveFromPromiseOrValue(input, this.#value);\n\n const sourceEventDetail: SourceEventDetail<OutputType> = {\n sourceProp: this,\n value: this.#value,\n generation: ++globalSourceGeneration as Generation,\n };\n this.markStale(\n new CustomEvent<SourceEventDetail<OutputType>>(\"stale\", {\n detail: sourceEventDetail,\n }),\n );\n }\n\n async get(): Promise<OutputType> {\n return this.#value;\n }\n\n protected async deriveFromPromiseOrValue(\n input: PromiseOrValue<InputType>,\n oldValuePromise: Promise<OutputType>,\n ): Promise<OutputType> {\n return this.derive(await input, oldValuePromise);\n }\n\n // TODO: add an indirect layer to cache the derivation?\n protected abstract derive(\n input: InputType,\n oldValuePromise: Promise<OutputType>,\n ): PromiseOrValue<OutputType>;\n}\n\nexport abstract class SimpleTwistyPropSource<\n SimpleType,\n> extends TwistyPropSource<SimpleType> {\n protected override derive(input: SimpleType): PromiseOrValue<SimpleType> {\n return input;\n }\n}\n\n// TODO: Can we support `null` as a valid output value without loosening type\n// safety?\nexport const NO_VALUE = Symbol(\"no value\");\nexport type NoValueType = typeof NO_VALUE;\n\nexport abstract class TwistyPropDerived<\n InputTypes extends InputRecord,\n OutputType,\n> extends TwistyPropParent<OutputType> {\n // cachedInputs:\n #parents: InputProps<InputTypes>;\n\n constructor(\n parents: InputProps<InputTypes>,\n protected userVisibleErrorTracker?: UserVisibleErrorTracker,\n ) {\n super();\n this.#parents = parents;\n for (const parent of Object.values(parents)) {\n (\n parent as TwistyPropDerived<InputProps<InputTypes>, OutputType>\n ).addChild(this);\n }\n }\n\n #cachedLastSuccessfulCalculation: {\n inputs: InputTypes;\n output: Promise<OutputType>;\n generation: number;\n } | null = null;\n\n #cachedLatestGenerationCalculation: {\n output: Promise<OutputType>;\n generation: number;\n } | null = null;\n\n public async get(): Promise<OutputType> {\n const generation = this.lastSourceGeneration;\n\n if (this.#cachedLatestGenerationCalculation?.generation === generation) {\n return this.#cachedLatestGenerationCalculation.output;\n }\n\n const latestGenerationCalculation = {\n generation,\n output: this.#cacheDerive(\n this.#getParents(),\n generation,\n this.#cachedLastSuccessfulCalculation,\n ),\n };\n this.#cachedLatestGenerationCalculation = latestGenerationCalculation;\n\n this.userVisibleErrorTracker?.reset();\n return latestGenerationCalculation.output;\n }\n\n async #getParents(): Promise<InputTypes> {\n const inputValuePromises: InputPromises<InputRecord> = {} as any; // TODO\n for (const [key, parent] of Object.entries(this.#parents)) {\n (inputValuePromises as Record<string, Promise<unknown>>)[key] = (\n parent as TwistyPropParent<unknown>\n ).get();\n }\n\n const inputs: InputTypes = {} as any; // TODO\n for (const key in this.#parents) {\n inputs[key] = (await (\n inputValuePromises as Record<string, Promise<unknown>>\n )[key]) as any;\n }\n return inputs;\n }\n\n async #cacheDerive(\n inputsPromise: PromiseOrValue<InputTypes>,\n generation: number,\n cachedLatestGenerationCalculation: {\n inputs: InputTypes;\n output: Promise<OutputType>;\n generation: number;\n } | null = null,\n ): Promise<OutputType> {\n const inputs = await inputsPromise;\n\n const cache = (output: OutputType): OutputType => {\n this.#cachedLastSuccessfulCalculation = {\n inputs,\n output: Promise.resolve(output),\n generation,\n };\n return output;\n };\n\n if (!cachedLatestGenerationCalculation) {\n return cache(await this.derive(inputs));\n }\n\n const cachedInputs = cachedLatestGenerationCalculation.inputs;\n for (const key in this.#parents) {\n const parent = this.#parents[key];\n if (!parent.canReuse(inputs[key], cachedInputs[key])) {\n return cache(await this.derive(inputs));\n }\n }\n\n return cachedLatestGenerationCalculation.output;\n }\n\n protected abstract derive(input: InputTypes): PromiseOrValue<OutputType>;\n}\n\nexport class FreshListenerManager {\n #disconnectionFunctions: (() => void)[] = [];\n\n addListener<T>(\n prop: TwistyPropParent<T>,\n listener: (value: T) => void,\n ): void {\n let disconnected = false;\n const wrappedListener = (value: T) => {\n if (disconnected) {\n // TODO\n // console.warn(\"Should be disconnected!\");\n return;\n }\n listener(value);\n };\n\n prop.addFreshListener(wrappedListener);\n\n this.#disconnectionFunctions.push(() => {\n prop.removeFreshListener(wrappedListener);\n disconnected = true;\n });\n }\n\n // TODO: Figure out the signature to let us do overloads\n /** @deprecated */\n public addMultiListener3<U, V, W>(\n props: [TwistyPropParent<U>, TwistyPropParent<V>, TwistyPropParent<W>],\n listener: (values: [U, V, W]) => void,\n ): void {\n this.addMultiListener(props as any, listener as any); // TODO\n }\n public addMultiListener<U, V>(\n props: [TwistyPropParent<U>, TwistyPropParent<V>],\n listener: (values: [U, V]) => void,\n ) {\n let disconnected = false;\n\n // We're going to get one initial call per prop. We'll ignore all but one.\n let initialIgnoresLeft = props.length - 1;\n const wrappedListener = async (_: any) => {\n if (initialIgnoresLeft > 0) {\n initialIgnoresLeft--;\n return;\n }\n if (disconnected) {\n // TODO\n // console.warn(\"Should be disconnected!\");\n return;\n }\n // We rely on `TwistyProp` caching to give us the full set of latest\n // values efficiently.\n const promises = (props as TwistyPropParent<any>[]).map((prop) =>\n prop.get(),\n );\n const values = await Promise.all(promises);\n listener(values as any); // TODO: fix up types\n };\n\n for (const prop of props) {\n prop.addFreshListener(wrappedListener);\n }\n\n this.#disconnectionFunctions.push(() => {\n for (const prop of props) {\n prop.removeFreshListener(wrappedListener);\n }\n disconnected = true;\n });\n }\n\n public disconnect(): void {\n for (const disconnectionFunction of this.#disconnectionFunctions) {\n disconnectionFunction();\n }\n }\n}\n", "// Workarounds for `node`.\n// TODO: figure out how to remove this.\n\n// This stub does not need to be callable, just constructable to satisfy the `node` loader.\nclass HTMLElementStub {}\n\nlet HTMLElementShim: typeof HTMLElement;\nif (globalThis.HTMLElement) {\n HTMLElementShim = globalThis.HTMLElement;\n} else {\n HTMLElementShim = HTMLElementStub as any;\n}\n\nexport { HTMLElementShim };\n\nclass CustomElementsStub {\n define(): void {\n // nothing\n }\n}\n\nlet customElementsShim: typeof customElements;\n\nif (globalThis.customElements) {\n customElementsShim = globalThis.customElements;\n} else {\n customElementsShim = new CustomElementsStub() as any;\n}\n\nexport { customElementsShim };\n\nlet cssStyleSheetShim: typeof CSSStyleSheet;\n\nclass CSSStyleSheetStub {\n replaceSync(): void {\n // nothing\n }\n}\n\nif (globalThis.CSSStyleSheet) {\n cssStyleSheetShim = globalThis.CSSStyleSheet;\n} else {\n cssStyleSheetShim = CSSStyleSheetStub as any;\n}\n\nexport { cssStyleSheetShim };\n", "import {\n customElementsShim,\n HTMLElementShim,\n} from \"./node-custom-element-shims\";\n\n// - Wrapped element\n// - Shadow root\n// - Content wrapper\nexport class ManagedCustomElement extends HTMLElementShim {\n public readonly shadow: ShadowRoot; // TODO: hide this\n public readonly contentWrapper: HTMLDivElement; // TODO: can we get rid of this wrapper?\n\n constructor(options?: { mode?: \"open\" | \"closed\" }) {\n super();\n this.shadow = this.attachShadow({ mode: options?.mode ?? \"closed\" });\n\n this.contentWrapper = document.createElement(\"div\");\n this.contentWrapper.classList.add(\"wrapper\");\n this.shadow.appendChild(this.contentWrapper);\n }\n\n // Add the source, if not already added.\n // Returns the existing if it's already on the element.\n protected addCSS(cssSource: CSSStyleSheet): void {\n this.shadow.adoptedStyleSheets.push(cssSource);\n }\n\n protected removeCSS(cssSource: CSSStyleSheet) {\n const cssIndex = this.shadow.adoptedStyleSheets.indexOf(cssSource);\n if (typeof cssIndex !== \"undefined\") {\n this.shadow.adoptedStyleSheets.splice(cssIndex, cssIndex + 1);\n }\n }\n\n public addElement<T extends Node>(element: T): T {\n return this.contentWrapper.appendChild(element);\n }\n\n public prependElement<T extends Node>(element: T): void {\n this.contentWrapper.prepend(element);\n }\n\n public removeElement<T extends Node>(element: T): T {\n return this.contentWrapper.removeChild(element);\n }\n}\n\ncustomElementsShim.define(\n \"twisty-managed-custom-element\",\n ManagedCustomElement,\n);\n", "import type { MillisecondTimestamp } from \"./AnimationTypes\";\n\n// Debounces `requestAnimationFrame()`.\nexport class RenderScheduler {\n private animFrameID: number | null = null;\n private animFrame = this.animFrameWrapper.bind(this);\n constructor(private callback: (timestamp: MillisecondTimestamp) => void) {}\n\n requestIsPending(): boolean {\n return !!this.animFrameID;\n }\n\n requestAnimFrame(): void {\n if (!this.animFrameID) {\n this.animFrameID = requestAnimationFrame(this.animFrame);\n }\n }\n\n cancelAnimFrame(): void {\n if (this.animFrameID) {\n cancelAnimationFrame(this.animFrameID);\n this.animFrameID = 0;\n }\n }\n\n private animFrameWrapper(timestamp: DOMHighResTimeStamp): void {\n this.animFrameID = 0;\n this.callback(timestamp as MillisecondTimestamp);\n }\n}\n\n// An interface for classes to use to expose their scheduling.\nexport interface Schedulable {\n scheduleRender(): void;\n}\n", "import { SimpleTwistyPropSource } from \"../../TwistyProp\";\n\n// TODO: turn these maps into `Set`s?\nexport const hintFaceletStyles = {\n floating: true, // default\n none: true,\n};\nexport type HintFaceletStyle = keyof typeof hintFaceletStyles;\nexport type HintFaceletStyleWithAuto = HintFaceletStyle | \"auto\";\n\nexport class HintFaceletProp extends SimpleTwistyPropSource<HintFaceletStyleWithAuto> {\n getDefaultValue(): HintFaceletStyleWithAuto {\n return \"auto\";\n }\n}\n", "export const TAU = Math.PI * 2;\nexport const DEGREES_PER_RADIAN = 360 / TAU;\n", "/**\n * @author mrdoob / http://mrdoob.com/\n * ESM conversion by Lucas Garron, 2021-12-21\n */\n\nconst performance:\n | null\n | (Performance & {\n memory?: {\n usedJSHeapSize: number;\n jsHeapSizeLimit: number;\n };\n }) = globalThis.performance;\n\nexport class Stats {\n mode = 0;\n\n dom = document.createElement(\"div\");\n\n constructor() {\n this.dom.style.cssText =\n \"position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000\";\n this.dom.addEventListener(\n \"click\",\n (event) => {\n event.preventDefault();\n this.showPanel(++this.mode % this.dom.children.length);\n },\n false,\n );\n\n this.showPanel(0);\n }\n\n addPanel(panel: StatsPanel): StatsPanel {\n this.dom.appendChild(panel.dom);\n return panel;\n }\n\n showPanel(id: number): void {\n for (let i = 0; i < this.dom.children.length; i++) {\n (this.dom.children[i] as HTMLElement).style.display =\n i === id ? \"block\" : \"none\";\n }\n\n this.mode = id;\n }\n\n beginTime = (performance || Date).now();\n prevTime = this.beginTime;\n frames = 0;\n\n fpsPanel = this.addPanel(new StatsPanel(\"FPS\", \"#0ff\", \"#002\"));\n msPanel = this.addPanel(new StatsPanel(\"MS\", \"#0f0\", \"#020\"));\n memPanel = performance?.memory\n ? this.addPanel(new StatsPanel(\"MB\", \"#f08\", \"#201\"))\n : null;\n REVISION = 16;\n\n begin() {\n this.beginTime = (performance || Date).now();\n }\n\n end() {\n this.frames++;\n\n const time = (performance || Date).now();\n\n this.msPanel.update(time - this.beginTime, 200);\n\n if (time >= this.prevTime + 1000) {\n this.fpsPanel.update((this.frames * 1000) / (time - this.prevTime), 100);\n\n this.prevTime = time;\n this.frames = 0;\n\n if (this.memPanel) {\n const memory = performance!.memory!;\n this.memPanel.update(\n memory.usedJSHeapSize / 1048576,\n memory.jsHeapSizeLimit / 1048576,\n );\n }\n }\n\n return time;\n }\n\n update() {\n this.beginTime = this.end();\n }\n}\n\nconst PR = Math.round(globalThis?.window?.devicePixelRatio ?? 1);\n\nconst WIDTH = 80 * PR;\nconst HEIGHT = 48 * PR;\nconst TEXT_X = 3 * PR;\nconst TEXT_Y = 2 * PR;\nconst GRAPH_X = 3 * PR;\nconst GRAPH_Y = 15 * PR;\nconst GRAPH_WIDTH = 74 * PR;\nconst GRAPH_HEIGHT = 30 * PR;\n\nexport class StatsPanel {\n min = Infinity;\n max = 0;\n dom = document.createElement(\"canvas\");\n context = this.dom.getContext(\"2d\")!;\n constructor(\n private name: string,\n private fg: string,\n private bg: string,\n ) {\n this.dom.width = WIDTH;\n this.dom.height = HEIGHT;\n this.dom.style.cssText = \"width:80px;height:48px\";\n\n this.context.font = `bold ${9 * PR}px Helvetica,Arial,sans-serif`;\n this.context.textBaseline = \"top\";\n\n this.context.fillStyle = bg;\n this.context.fillRect(0, 0, WIDTH, HEIGHT);\n\n this.context.fillStyle = fg;\n this.context.fillText(name, TEXT_X, TEXT_Y);\n this.context.fillRect(GRAPH_X, GRAPH_Y, GRAPH_WIDTH, GRAPH_HEIGHT);\n\n this.context.fillStyle = bg;\n this.context.globalAlpha = 0.9;\n this.context.fillRect(GRAPH_X, GRAPH_Y, GRAPH_WIDTH, GRAPH_HEIGHT);\n }\n\n update(value: number, maxValue: number) {\n this.min = Math.min(this.min, value);\n this.max = Math.max(this.max, value);\n\n this.context.fillStyle = this.bg;\n this.context.globalAlpha = 1;\n this.context.fillRect(0, 0, WIDTH, GRAPH_Y);\n this.context.fillStyle = this.fg;\n this.context.fillText(\n `${Math.round(value)} ${this.name} (${Math.round(this.min)}-${Math.round(\n this.max,\n )})`,\n TEXT_X,\n TEXT_Y,\n );\n\n this.context.drawImage(\n this.dom,\n GRAPH_X + PR,\n GRAPH_Y,\n GRAPH_WIDTH - PR,\n GRAPH_HEIGHT,\n GRAPH_X,\n GRAPH_Y,\n GRAPH_WIDTH - PR,\n GRAPH_HEIGHT,\n );\n\n this.context.fillRect(\n GRAPH_X + GRAPH_WIDTH - PR,\n GRAPH_Y,\n PR,\n GRAPH_HEIGHT,\n );\n\n this.context.fillStyle = this.bg;\n this.context.globalAlpha = 0.9;\n this.context.fillRect(\n GRAPH_X + GRAPH_WIDTH - PR,\n GRAPH_Y,\n PR,\n Math.round((1 - value / maxValue) * GRAPH_HEIGHT),\n );\n }\n}\n", "// TODO can we remove the cached proxy?\n\n// In theory we can, but we've run into situations where imports are not properly cached.\nlet cachedConstructorProxy: Promise<\n typeof import(\"./dynamic-entries/twisty-dynamic-3d\")\n> | null = null;\n\nexport async function bulk3DCode(): Promise<\n typeof import(\"./dynamic-entries/twisty-dynamic-3d\")\n> {\n return (cachedConstructorProxy ??= import(\n \"./dynamic-entries/twisty-dynamic-3d\"\n ));\n}\n", "let globalPixelRatioOverride: number | null = null;\nexport function setGlobalPixelRatioOverride(override: number | null): void {\n globalPixelRatioOverride = override;\n}\n\n// TODO: Handle if you move across screens?\nexport function pixelRatio(): number {\n return globalPixelRatioOverride ?? (devicePixelRatio || 1);\n}\n", "// export class Drag() {\n\n// }\n\ninterface DragInfo {\n attachedInfo: Record<any, any>;\n hasMoved: boolean;\n lastClientX: number;\n lastClientY: number;\n lastTimeStamp: number;\n}\n\ntype PointerID = number;\n\nexport interface DragMovementInfo {\n attachedInfo: Record<any, any>;\n movementX: number;\n movementY: number;\n elapsedMs: number;\n}\n\nexport interface UpInfo {\n attachedInfo: Record<any, any>;\n}\n\nexport interface PressInfo {\n normalizedX: number;\n normalizedY: number;\n rightClick: boolean;\n keys: {\n // TODO: group these\n altKey: boolean;\n ctrlOrMetaKey: boolean;\n shiftKey: boolean;\n };\n}\n\n// Chrome can report movements as low as `0.0000152587890625` even if the cursor did not move at all. So we need a treshold instead.\nconst MOVEMENT_EPSILON = 0.1; // px\n\nexport class DragTracker extends EventTarget {\n #dragInfoMap: Map<PointerID, DragInfo> = new Map();\n\n constructor(public readonly target: HTMLElement) {\n super();\n }\n\n // Idempotent\n start() {\n this.addTargetListener(\"pointerdown\", this.onPointerDown.bind(this));\n // Prevent right-click on desktop (only tested on macOS Chrome/Safari/Firefox) so we can detect right-click moves.\n // TODO: Can we do this selectively, e.g. only on the puzzle? That way we could allow right-click to download the canvas. Unfortunately, it would probably require a sync calculation.\n this.addTargetListener(\"contextmenu\", (e: MouseEvent) => {\n e.preventDefault();\n });\n // Prevent touch scrolling (preventing default on `pointermove` doesn't work).\n this.addTargetListener(\"touchmove\", (e: PointerEvent) =>\n e.preventDefault(),\n );\n // Prevent zooming on double-tap (iOS).\n // This is because `dblclick` works to zoom in, but does *not* work to zoom out. So the user can get stuck zoomed into the player without a way to zoom out.\n this.addTargetListener(\"dblclick\", (e: MouseEvent) => e.preventDefault());\n }\n\n // Idempotent\n stop(): void {\n for (const [eventType, listener] of this.#targetListeners.entries()) {\n this.target.removeEventListener(\n eventType,\n listener as unknown as EventListener,\n ); // TODO\n }\n this.#targetListeners.clear();\n this.#lazyListenersRegistered = false;\n }\n\n #targetListeners = new Map<\n string,\n ((e: MouseEvent) => any) | ((e: PointerEvent) => any)\n >();\n addTargetListener(\n eventType: string,\n listener: ((e: MouseEvent) => any) | ((e: PointerEvent) => any),\n ) {\n if (!this.#targetListeners.has(eventType)) {\n this.target.addEventListener(\n eventType,\n listener as unknown as EventListener, // TODO\n );\n this.#targetListeners.set(eventType, listener);\n }\n }\n\n // This allows us to avoid getting a callback every time the pointer moves over the canvas, until we have a down event.\n // TODO: Ideally we'd also support unregistering when we're certain there are no more active touches. But this means we need to properly handle every way a pointer \"click\" can end, which is tricky across environments (due to e.g. mouse vs. touch vs. stylues, canvas/viewport/window/scroll boundaries, right-click and other ways of losing focus, etc.), so we conservatively leave the listeners on.\n #lazyListenersRegistered: boolean = false;\n #registerLazyListeners(): void {\n if (this.#lazyListenersRegistered) {\n return;\n }\n this.addTargetListener(\"pointermove\", this.onPointerMove.bind(this)); // TODO: only register this after pointer down.\n this.addTargetListener(\"pointerup\", this.onPointerUp.bind(this));\n this.#lazyListenersRegistered = true;\n }\n\n #clear(e: PointerEvent): void {\n this.#dragInfoMap.delete(e.pointerId);\n }\n\n // `null`: means: ignore this result (no movement, or not\n #trackDrag(e: PointerEvent): {\n movementInfo: DragMovementInfo | null;\n hasMoved: boolean;\n } {\n // TODO: Find a way to detect if this is an active press, in a way that works cross-platform.\n // if (e.buttons === 0) {\n // return { movementInfo: null, hasMoved: false };\n // }\n const existing = this.#dragInfoMap.get(e.pointerId);\n if (!existing) {\n return { movementInfo: null, hasMoved: false };\n }\n // We would try to use `e.movementX`/`e.movementY`, except Safari:\n // - Does not have those values on i[Pad]OS.\n // - Will always report `0` for these values on macOS.\n // https://bugs.webkit.org/show_bug.cgi?id=220194\n //\n // The following are all insufficiently powerful for detecting the Safari `0` bug:\n // - `\"movementX\" in e`\n // - `e.movementX !== \"undefined\"`\n // - `e.hasOwnProperty(\"movementX\")`\n\n let movementInfo: DragMovementInfo;\n if ((e.movementX ?? 0) !== 0 || (e.movementY ?? 0) !== 0) {\n // We optimistically try to catch sub-pixel movements in Chrome.\n movementInfo = {\n attachedInfo: existing.attachedInfo,\n movementX: e.movementX,\n movementY: e.movementY,\n elapsedMs: e.timeStamp - existing.lastTimeStamp,\n };\n } else {\n movementInfo = {\n attachedInfo: existing.attachedInfo,\n movementX: e.clientX - existing.lastClientX,\n movementY: e.clientY - existing.lastClientY,\n elapsedMs: e.timeStamp - existing.lastTimeStamp,\n };\n }\n existing.lastClientX = e.clientX;\n existing.lastClientY = e.clientY;\n existing.lastTimeStamp = e.timeStamp;\n if (\n Math.abs(movementInfo.movementX) < MOVEMENT_EPSILON &&\n Math.abs(movementInfo.movementY) < MOVEMENT_EPSILON\n ) {\n return { movementInfo: null, hasMoved: existing.hasMoved };\n } else {\n existing.hasMoved = true;\n return { movementInfo, hasMoved: existing.hasMoved };\n }\n }\n\n private onPointerDown(e: PointerEvent) {\n this.#registerLazyListeners();\n const newDragInfo: DragInfo = {\n attachedInfo: {},\n hasMoved: false,\n lastClientX: e.clientX,\n lastClientY: e.clientY,\n lastTimeStamp: e.timeStamp,\n };\n this.#dragInfoMap.set(e.pointerId, newDragInfo);\n this.target.setPointerCapture(e.pointerId);\n }\n\n private onPointerMove(e: PointerEvent) {\n const movementInfo = this.#trackDrag(e).movementInfo;\n if (movementInfo) {\n e.preventDefault();\n this.dispatchEvent(\n new CustomEvent(\"move\", {\n detail: movementInfo,\n }),\n );\n }\n }\n\n private onPointerUp(e: PointerEvent) {\n const trackDragResult = this.#trackDrag(e);\n const existing = this.#dragInfoMap.get(e.pointerId)!; // TODO\n this.#clear(e);\n this.target.releasePointerCapture(e.pointerId); // TODO: unnecessary?\n let event: CustomEvent;\n if (trackDragResult.hasMoved) {\n // TODO: send proper movement/momentum since last move event.\n event = new CustomEvent<UpInfo>(\"up\", {\n detail: { attachedInfo: existing.attachedInfo },\n });\n } else {\n const { altKey, ctrlKey, metaKey, shiftKey } = e;\n event = new CustomEvent<PressInfo>(\"press\", {\n detail: {\n normalizedX: (e.offsetX / this.target.offsetWidth) * 2 - 1,\n normalizedY: 1 - (e.offsetY / this.target.offsetHeight) * 2,\n rightClick: !!(e.button & 2),\n keys: {\n altKey,\n ctrlOrMetaKey: ctrlKey || metaKey,\n shiftKey,\n },\n },\n });\n }\n this.dispatchEvent(event);\n }\n}\n", "// TODO: https://stackoverflow.com/a/40443642\n\n// let shareAllNewRenderers: boolean = false;\n\n// // WARNING: The current shared renderer implementation is not every efficient.\n// // Avoid using for players that are likely to have dimensions approaching 1 megapixel or higher.\n// // TODO: use a dedicated renderer while fullscreen?\n// export function experimentalSetShareAllNewRenderers(share: boolean): void {\n// shareAllNewRenderers = share;\n// }\n\n// const sharedRenderer: WebGLRenderer | null = null;\n\nimport { bulk3DCode } from \"../../heavy-code-imports/3d\";\nimport type {\n Camera,\n LinearSRGBColorSpace,\n Scene,\n WebGLRenderer,\n} from \"../../heavy-code-imports/three-types\";\nimport { pixelRatio } from \"../canvas\";\n\nconst renderers: Promise<WebGLRenderer>[] = [];\n\n// Render result is guaranteed to be available synchronously at resolution time.\nexport async function rawRenderPooled(\n width: number,\n height: number,\n scene: Scene,\n camera: Camera,\n): Promise<HTMLCanvasElement> {\n // At most one in the pool for now.\n if (renderers.length === 0) {\n renderers.push(newRenderer());\n }\n const renderer = await renderers[0];\n // TODO: scissoring\n renderer.setSize(width, height); // TODO: is it faster if we cache values and only call this when necessary?\n renderer.render(scene, camera);\n\n return renderer.domElement;\n}\n\n// let haveSet = false;\nexport async function renderPooled(\n width: number,\n height: number,\n canvas: HTMLCanvasElement,\n scene: Scene,\n camera: Camera,\n): Promise<void> {\n if (width === 0 || height === 0) {\n return;\n }\n // At most one in the pool for now.\n if (renderers.length === 0) {\n renderers.push(newRenderer());\n }\n\n const rendererCanvas = await rawRenderPooled(width, height, scene, camera);\n\n // TODO: Should we cache this? Seems to take about 0.0001ms to get.\n const context = canvas.getContext(\"2d\")!;\n context.clearRect(0, 0, canvas.width, canvas.height);\n context.drawImage(rendererCanvas, 0, 0);\n}\n\n// Workaround to avoid an import of `three`.\nconst linearSRGBColorSpace =\n \"srgb-linear\" satisfies typeof LinearSRGBColorSpace;\n\nexport async function newRenderer(): Promise<WebGLRenderer> {\n const rendererConstructor = (await bulk3DCode()).ThreeWebGLRenderer;\n const renderer = new rendererConstructor({\n antialias: true,\n alpha: true,\n });\n renderer.outputColorSpace = linearSRGBColorSpace; // TODO(https://github.com/cubing/cubing.js/issues/308): remove this\n renderer.setPixelRatio(pixelRatio());\n return renderer;\n}\n", "// The `position` values are a hack for a bug in Safari where the canvas either\n// grows infinitely, or takes up the full `fr` of any encompassing grid (making\n// the contents of that element e.g. over 100% of its height). `contain:\n// content` is a good fix for this, but there is no indication that Safari will\n// support it soon. https://developer.mozilla.org/en-US/docs/Web/CSS/contain\n\nimport { cssStyleSheetShim } from \"../node-custom-element-shims\";\n\nexport const twisty3DVantageCSS = new cssStyleSheetShim();\ntwisty3DVantageCSS.replaceSync(\n `\n:host {\n width: 384px;\n height: 256px;\n display: grid;\n}\n\n.wrapper {\n width: 100%;\n height: 100%;\n display: grid;\n overflow: hidden;\n place-content: center;\n contain: strict;\n}\n\n.loading {\n width: 4em;\n height: 4em;\n border-radius: 2.5em;\n border: 0.5em solid rgba(0, 0, 0, 0);\n border-top: 0.5em solid rgba(0, 0, 0, 0.7);\n border-right: 0.5em solid rgba(0, 0, 0, 0.7);\n animation: fade-in-delayed 4s, rotate 1s linear infinite;\n}\n\n@keyframes fade-in-delayed {\n 0% { opacity: 0; }\n 25% {opacity: 0; }\n 100% { opacity: 1; }\n}\n\n@keyframes rotate {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n\n/* TODO: This is due to stats hack. Replace with \\`canvas\\`. */\n.wrapper > canvas {\n max-width: 100%;\n max-height: 100%;\n animation: fade-in 0.25s ease-in;\n}\n\n@keyframes fade-in {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n.wrapper.invisible {\n opacity: 0;\n}\n\n.wrapper.drag-input-enabled > canvas {\n cursor: grab;\n}\n\n.wrapper.drag-input-enabled > canvas:active {\n cursor: grabbing;\n}\n`,\n);\n", "import type { Vector3 } from \"three/src/Three.js\";\nimport { RenderScheduler } from \"../../controllers/RenderScheduler\";\nimport { bulk3DCode } from \"../../heavy-code-imports/3d\";\nimport type { OrbitCoordinates } from \"../../model/props/viewer/OrbitCoordinatesRequestProp\";\nimport type { TwistyPlayerModel } from \"../../model/TwistyPlayerModel\";\nimport type { DragMovementInfo, DragTracker } from \"./DragTracker\";\nimport { DEGREES_PER_RADIAN } from \"./TAU\";\n\nconst INERTIA_DEFAULT: boolean = true;\n\nconst INERTIA_DURATION_MS = 500;\n// If the first inertial render is this long after the last move, we assume the\n// user has halted the cursor and we consider inertia to have \"timed out\". We\n// never begin animating the inertia.\nconst INERTIA_TIMEOUT_MS = 50;\n\nconst VERTICAL_MOVEMENT_BASE_SCALE = 0.75;\n\n// progress is from 0 to 1.\nfunction momentumScale(progress: number) {\n // This is the exponential curve flipped so that\n // - The slope at progress = 0 is 1 (this corresponds to \"x = 1\" on the normal\n // curve).\n // - The scale exponentially \"decays\" until progress = 1.\n // This means the scale at the end will be about 0.418\n return (Math.exp(1 - progress) - (1 - progress)) / (1 - Math.E) + 1;\n}\n\nclass Inertia {\n private scheduler = new RenderScheduler(this.render.bind(this));\n private lastTimestamp: number;\n constructor(\n private startTimestamp: number,\n private momentumX: number,\n private momentumY: number,\n private callback: (movementX: number, movementY: number) => void,\n ) {\n this.scheduler.requestAnimFrame();\n this.lastTimestamp = startTimestamp;\n }\n\n private render(now: DOMHighResTimeStamp) {\n const progressBefore =\n (this.lastTimestamp - this.startTimestamp) / INERTIA_DURATION_MS;\n const progressAfter = Math.min(\n 1,\n (now - this.startTimestamp) / INERTIA_DURATION_MS,\n );\n\n if (\n progressBefore === 0 &&\n progressAfter > INERTIA_TIMEOUT_MS / INERTIA_DURATION_MS\n ) {\n // The user has already paused for a while. Don't start any inertia.\n return;\n }\n\n const delta = momentumScale(progressAfter) - momentumScale(progressBefore);\n\n // TODO: For now, we only carry horizontal momentum. If this should stay, we\n // can remove the plumbing for the Y dimension.\n this.callback(this.momentumX * delta * 1000, this.momentumY * delta * 1000);\n\n if (progressAfter < 1) {\n this.scheduler.requestAnimFrame();\n }\n this.lastTimestamp = now;\n }\n}\n\nexport async function positionToOrbitCoordinates(\n position: Vector3,\n): Promise<OrbitCoordinates> {\n const spherical = new (await bulk3DCode()).ThreeSpherical();\n spherical.setFromVector3(position);\n return {\n latitude: 90 - spherical.phi * DEGREES_PER_RADIAN,\n longitude: spherical.theta * DEGREES_PER_RADIAN,\n distance: spherical.radius,\n };\n}\n\ninterface TwistyOrbitControlsDragAttachedInfo {\n lastTemperedX: number;\n lastTemperedY: number;\n timestamp: number;\n}\n\n// TODO: change mouse cursor while moving.\nexport class TwistyOrbitControls {\n /** @deprecated */\n experimentalInertia: boolean = INERTIA_DEFAULT;\n private onMovementBound = this.onMovement.bind(this);\n public experimentalHasBeenMoved: boolean = false;\n constructor(\n private model: TwistyPlayerModel,\n private mirror: boolean,\n private canvas: HTMLCanvasElement,\n private dragTracker: DragTracker,\n ) {\n this.dragTracker.addEventListener(\n \"move\",\n this.onMove.bind(this) as any as EventListener, // TODO: https://github.com/microsoft/TypeScript/issues/28357\n );\n this.dragTracker.addEventListener(\n \"up\",\n this.onUp.bind(this) as any as EventListener, // TODO: https://github.com/microsoft/TypeScript/issues/28357\n );\n }\n\n // f is the fraction of the canvas traversed per ms.\n temperMovement(f: number): number {\n // This is scaled to be linear for small values, but to reduce large values\n // by a significant factor.\n return (Math.sign(f) * Math.log(Math.abs(f * 10) + 1)) / 6;\n }\n\n onMove(e: CustomEvent<DragMovementInfo>): void {\n e.detail.attachedInfo ??= {};\n\n const { temperedX, temperedY } = this.onMovement(\n e.detail.movementX,\n e.detail.movementY,\n );\n const attachedInfo = e.detail\n .attachedInfo as TwistyOrbitControlsDragAttachedInfo;\n attachedInfo.lastTemperedX = temperedX * 10;\n attachedInfo.lastTemperedY = temperedY * 10;\n attachedInfo.timestamp = e.timeStamp; // TODO\n }\n\n onMovement(\n movementX: number,\n movementY: number,\n ): {\n temperedX: number;\n temperedY: number;\n } {\n const scale = this.mirror ? -1 : 1;\n\n // TODO: refactor\n const minDim = Math.min(this.canvas.offsetWidth, this.canvas.offsetHeight);\n\n const temperedX = this.temperMovement(movementX / minDim);\n const temperedY = this.temperMovement(\n (movementY / minDim) * VERTICAL_MOVEMENT_BASE_SCALE,\n );\n this.model.twistySceneModel.orbitCoordinatesRequest.set(\n (async () => {\n const prevCoords =\n await this.model.twistySceneModel.orbitCoordinates.get();\n\n const newCoords = {\n latitude:\n prevCoords.latitude + 2 * temperedY * DEGREES_PER_RADIAN * scale,\n longitude: prevCoords.longitude - 2 * temperedX * DEGREES_PER_RADIAN,\n };\n return newCoords;\n })(),\n );\n return { temperedX, temperedY };\n }\n\n onUp(e: CustomEvent<DragMovementInfo>): void {\n e.preventDefault();\n if (\n \"lastTemperedX\" in e.detail.attachedInfo &&\n \"lastTemperedY\" in e.detail.attachedInfo &&\n \"timestamp\" in e.detail.attachedInfo &&\n e.timeStamp - e.detail.attachedInfo[\"timestamp\"] < 60 // TODO\n ) {\n new Inertia(\n e.timeStamp, // TODO\n (e.detail.attachedInfo as TwistyOrbitControlsDragAttachedInfo)\n .lastTemperedX,\n (e.detail.attachedInfo as TwistyOrbitControlsDragAttachedInfo)\n .lastTemperedY,\n this.onMovementBound,\n ); // TODO: cancel inertia\n }\n }\n}\n", "import type { PerspectiveCamera, WebGLRenderer } from \"three/src/Three.js\";\nimport { Stats } from \"../../../vendor/mit/three/examples/jsm/libs/stats.modified.module\";\nimport { RenderScheduler } from \"../../controllers/RenderScheduler\";\nimport { twistyDebugGlobals } from \"../../debug\";\nimport { bulk3DCode } from \"../../heavy-code-imports/3d\";\nimport { StaleDropper } from \"../../model/PromiseFreshener\";\nimport type { DragInputMode } from \"../../model/props/puzzle/state/DragInputProp\";\nimport type { TwistyPropParent } from \"../../model/props/TwistyProp\";\nimport type { OrbitCoordinates } from \"../../model/props/viewer/OrbitCoordinatesRequestProp\";\nimport type { TwistyPlayerModel } from \"../../model/TwistyPlayerModel\";\nimport { pixelRatio } from \"../canvas\";\nimport { ManagedCustomElement } from \"../ManagedCustomElement\";\nimport { customElementsShim } from \"../node-custom-element-shims\";\nimport { DragTracker, type PressInfo } from \"./DragTracker\";\nimport { newRenderer, renderPooled } from \"./RendererPool\";\nimport { DEGREES_PER_RADIAN } from \"./TAU\";\nimport type { Twisty3DSceneWrapper } from \"./Twisty3DSceneWrapper\";\nimport { twisty3DVantageCSS } from \"./Twisty3DVantage.css\";\nimport { TwistyOrbitControls } from \"./TwistyOrbitControls\";\n\nexport async function setCameraFromOrbitCoordinates(\n camera: PerspectiveCamera,\n orbitCoordinates: OrbitCoordinates,\n backView: boolean = false,\n): Promise<void> {\n const spherical = new (await bulk3DCode()).ThreeSpherical(\n orbitCoordinates.distance,\n (90 - (backView ? -1 : 1) * orbitCoordinates.latitude) / DEGREES_PER_RADIAN,\n ((backView ? 180 : 0) + orbitCoordinates.longitude) / DEGREES_PER_RADIAN,\n );\n spherical.makeSafe();\n camera.position.setFromSpherical(spherical);\n camera.lookAt(0, 0, 0);\n}\n\nlet dedicatedRenderersSoFar = 0;\nconst DEFAULT_MAX_DEDICATED_RENDERERS = 2; // This allows for a front view and a back view (or two separate front views).\nlet sharingRenderers = false;\nfunction shareRenderer(): boolean {\n if (twistyDebugGlobals.shareAllNewRenderers !== \"auto\") {\n if (!twistyDebugGlobals.shareAllNewRenderers) {\n dedicatedRenderersSoFar++;\n }\n return twistyDebugGlobals.shareAllNewRenderers !== \"never\";\n }\n if (dedicatedRenderersSoFar < DEFAULT_MAX_DEDICATED_RENDERERS) {\n dedicatedRenderersSoFar++;\n return false;\n } else {\n sharingRenderers = true;\n return true;\n }\n}\n\nexport function haveStartedSharingRenderers(): boolean {\n return sharingRenderers;\n}\n\nexport class Twisty3DVantage extends ManagedCustomElement {\n scene: Twisty3DSceneWrapper | null = null;\n\n stats: Stats | null = null;\n\n private rendererIsShared: boolean = shareRenderer();\n\n loadingElement: HTMLDivElement | null = null;\n constructor(\n private model?: TwistyPlayerModel,\n scene?: Twisty3DSceneWrapper,\n private options?: { backView?: boolean },\n ) {\n super();\n this.scene = scene ?? null;\n\n this.loadingElement = this.addElement(document.createElement(\"div\"));\n this.loadingElement.classList.add(\"loading\");\n\n if (twistyDebugGlobals.showRenderStats) {\n this.stats = new Stats();\n this.stats.dom.style.position = \"absolute\";\n this.contentWrapper.appendChild(this.stats.dom);\n }\n }\n\n async connectedCallback(): Promise<void> {\n this.addCSS(twisty3DVantageCSS);\n this.addElement((await this.canvasInfo()).canvas);\n\n void this.#onResize();\n const observer = new ResizeObserver(this.#onResize.bind(this));\n observer.observe(this.contentWrapper);\n void this.orbitControls(); // Instantiate orbit controls\n void this.#setupBasicPresses();\n\n this.scheduleRender();\n }\n\n async #setupBasicPresses(): Promise<void> {\n const dragTracker = await this.#dragTracker();\n dragTracker.addEventListener(\n \"press\",\n (async (e: CustomEvent<PressInfo>) => {\n const movePressInput =\n await this.model!.twistySceneModel.movePressInput.get();\n if (movePressInput !== \"basic\") {\n return;\n }\n this.dispatchEvent(\n new CustomEvent(\"press\", {\n detail: {\n pressInfo: e.detail,\n cameraPromise: this.camera(),\n },\n }),\n );\n }) as any as EventListener, // TODO\n );\n }\n\n #onResizeStaleDropper = new StaleDropper<PerspectiveCamera>();\n\n async clearCanvas(): Promise<void> {\n if (this.rendererIsShared) {\n const canvasInfo = await this.canvasInfo();\n canvasInfo.context.clearRect(\n 0,\n 0,\n canvasInfo.canvas.width,\n canvasInfo.canvas.height,\n );\n } else {\n const renderer = await this.renderer();\n const context = renderer.getContext();\n context.clear(context.COLOR_BUFFER_BIT);\n }\n }\n\n // TODO: Why doesn't this work for the top-right back view height?\n #width: number = 0;\n #height: number = 0;\n async #onResize(): Promise<void> {\n const camera = await this.#onResizeStaleDropper.queue(this.camera());\n\n const w = this.contentWrapper.clientWidth;\n const h = this.contentWrapper.clientHeight;\n this.#width = w;\n this.#height = h;\n const off = 0;\n let yoff = 0;\n let excess = 0;\n if (h > w) {\n excess = h - w;\n yoff = -Math.floor(0.5 * excess);\n }\n camera.aspect = w / h;\n camera.setViewOffset(w, h - excess, off, yoff, w, h);\n camera.updateProjectionMatrix(); // TODO\n\n void this.clearCanvas();\n if (this.rendererIsShared) {\n const canvasInfo = await this.canvasInfo();\n\n canvasInfo.canvas.width = w * pixelRatio();\n canvasInfo.canvas.height = h * pixelRatio();\n canvasInfo.canvas.style.width = `${w.toString()}px`;\n canvasInfo.canvas.style.height = `${h.toString()}px`;\n } else {\n const renderer = await this.renderer();\n renderer.setSize(w, h, true);\n }\n\n this.scheduleRender();\n }\n\n #cachedRenderer: Promise<WebGLRenderer> | null = null;\n async renderer(): Promise<WebGLRenderer> {\n if (this.rendererIsShared) {\n throw new Error(\"renderer expected to be shared.\");\n }\n return (this.#cachedRenderer ??= newRenderer());\n }\n\n #cachedCanvas: Promise<{\n canvas: HTMLCanvasElement;\n context: CanvasRenderingContext2D;\n }> | null = null;\n async canvasInfo(): Promise<{\n canvas: HTMLCanvasElement;\n context: CanvasRenderingContext2D;\n }> {\n return (this.#cachedCanvas ??= (async () => {\n let canvas: HTMLCanvasElement;\n if (this.rendererIsShared) {\n canvas = this.addElement(document.createElement(\"canvas\"));\n } else {\n const renderer = await this.renderer();\n canvas = this.addElement(renderer.domElement);\n }\n this.loadingElement?.remove();\n const context = canvas.getContext(\"2d\")!;\n return { canvas, context };\n })());\n }\n\n #cachedDragTracker: Promise<DragTracker> | null = null;\n async #dragTracker(): Promise<DragTracker> {\n return (this.#cachedDragTracker ??= (async () => {\n const dragTracker = new DragTracker((await this.canvasInfo()).canvas);\n this.model?.twistySceneModel.dragInput.addFreshListener(\n (dragInputMode: DragInputMode) => {\n let dragInputEnabled = false;\n switch (dragInputMode) {\n case \"auto\": {\n dragTracker.start();\n dragInputEnabled = true;\n break;\n }\n case \"none\": {\n dragTracker.stop();\n break;\n }\n }\n this.contentWrapper.classList.toggle(\n \"drag-input-enabled\",\n dragInputEnabled,\n );\n },\n );\n return dragTracker;\n })());\n }\n\n #cachedCamera: Promise<PerspectiveCamera> | null = null;\n async camera(): Promise<PerspectiveCamera> {\n return (this.#cachedCamera ??= (async () => {\n const camera = new (await bulk3DCode()).ThreePerspectiveCamera(\n 20,\n 1, // We rely on the resize logic to handle this.\n 0.1,\n 20,\n );\n camera.position.copy(\n new (await bulk3DCode()).ThreeVector3(2, 4, 4).multiplyScalar(\n this.options?.backView ? -1 : 1,\n ),\n );\n camera.lookAt(0, 0, 0);\n // TODO: `TwistyOrbitControls` breaks isolateion\n return camera;\n })());\n }\n\n #cachedOrbitControls: Promise<TwistyOrbitControls> | null = null;\n async orbitControls(): Promise<TwistyOrbitControls> {\n return (this.#cachedOrbitControls ??= (async () => {\n const orbitControls = new TwistyOrbitControls(\n this.model!,\n !!this.options?.backView,\n (await this.canvasInfo()).canvas,\n await this.#dragTracker(),\n );\n\n if (this.model) {\n this.addListener(\n this.model.twistySceneModel.orbitCoordinates,\n async (orbitCoordinates: OrbitCoordinates) => {\n const camera = await this.camera();\n void setCameraFromOrbitCoordinates(\n camera,\n orbitCoordinates,\n this.options?.backView,\n );\n // TODO: Wrap in StaleDropper?\n\n this.scheduleRender();\n },\n );\n }\n\n return orbitControls;\n })());\n }\n\n addListener<T>(\n prop: TwistyPropParent<T>,\n listener: (value: T) => void,\n ): void {\n prop.addFreshListener(listener);\n this.#disconnectionFunctions.push(() => {\n prop.removeFreshListener(listener);\n // disconnected = true; // TODO\n });\n }\n\n #disconnectionFunctions: (() => void)[] = [];\n disconnect(): void {\n for (const fn of this.#disconnectionFunctions) {\n fn();\n }\n this.#disconnectionFunctions = []; // TODO: Encapsulate this.\n }\n\n #experimentalNextRenderFinishedCallback: (() => void) | null = null;\n experimentalNextRenderFinishedCallback(callback: () => void): void {\n this.#experimentalNextRenderFinishedCallback = callback;\n }\n\n async render(): Promise<void> {\n if (!this.scene) {\n throw new Error(\"Attempted to render without a scene\");\n }\n\n this.stats?.begin();\n\n const [scene, camera, canvas] = await Promise.all([\n this.scene.scene(),\n this.camera(),\n this.canvasInfo(),\n ]);\n if (this.rendererIsShared) {\n await renderPooled(\n this.#width,\n this.#height,\n canvas.canvas,\n scene,\n camera,\n );\n } else {\n (await this.renderer()).render(scene, camera);\n }\n\n this.stats?.end();\n this.#experimentalNextRenderFinishedCallback?.();\n this.#experimentalNextRenderFinishedCallback = null;\n }\n\n #scheduler = new RenderScheduler(this.render.bind(this));\n scheduleRender(): void {\n // console.log(\"scheduling\", this);\n this.#scheduler.requestAnimFrame();\n }\n}\n\ncustomElementsShim.define(\"twisty-3d-vantage\", Twisty3DVantage);\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/cubing/vendor/mpl/twips/chunks/chunk-4VODYKQX.js"],
|
|
4
|
-
"sourcesContent": ["// Generated from `twips` v0.11.3\n\n// @ts-nocheck\n\nvar __toBinary = /* @__PURE__ */ (() => {\n var table = new Uint8Array(128);\n for (var i = 0; i < 64; i++) table[i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i * 4 - 205] = i;\n return (base64) => {\n var n = base64.length, bytes = new Uint8Array((n - (base64[n - 1] == \"=\") - (base64[n - 2] == \"=\")) * 3 / 4 | 0);\n for (var i2 = 0, j = 0; i2 < n; ) {\n var c0 = table[base64.charCodeAt(i2++)], c1 = table[base64.charCodeAt(i2++)];\n var c2 = table[base64.charCodeAt(i2++)], c3 = table[base64.charCodeAt(i2++)];\n bytes[j++] = c0 << 2 | c1 >> 4;\n bytes[j++] = c1 << 4 | c2 >> 2;\n bytes[j++] = c2 << 6 | c3;\n }\n return bytes;\n };\n})();\n\nexport {\n __toBinary\n};\n//# sourceMappingURL=chunk-4VODYKQX.js.map\n"],
|
|
5
|
-
"mappings": ";AAIA,IAAI,aAA8B,uBAAM;AACtC,MAAI,QAAQ,IAAI,WAAW,GAAG;AAC9B,WAAS,IAAI,GAAG,IAAI,IAAI,IAAK,OAAM,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI;AACvG,SAAO,CAAC,WAAW;AACjB,QAAI,IAAI,OAAO,QAAQ,QAAQ,IAAI,YAAY,KAAK,OAAO,IAAI,CAAC,KAAK,QAAQ,OAAO,IAAI,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC;AAC/G,aAAS,KAAK,GAAG,IAAI,GAAG,KAAK,KAAK;AAChC,UAAI,KAAK,MAAM,OAAO,WAAW,IAAI,CAAC,GAAG,KAAK,MAAM,OAAO,WAAW,IAAI,CAAC;AAC3E,UAAI,KAAK,MAAM,OAAO,WAAW,IAAI,CAAC,GAAG,KAAK,MAAM,OAAO,WAAW,IAAI,CAAC;AAC3E,YAAM,GAAG,IAAI,MAAM,IAAI,MAAM;AAC7B,YAAM,GAAG,IAAI,MAAM,IAAI,MAAM;AAC7B,YAAM,GAAG,IAAI,MAAM,IAAI;AAAA,IACzB;AACA,WAAO;AAAA,EACT;AACF,GAAG;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../src/cubing/search/inside/solve/puzzles/3x3x3/index.ts", "../../../../src/cubing/search/inside/inside-worker.ts", "../../../../src/cubing/search/inside/solve/addOrientationSuffix.ts", "../../../../src/cubing/search/inside/solve/puzzles/dynamic/3x3x3/index.ts", "../../../../src/cubing/search/inside/solve/puzzles/3x3x3/convert.ts", "../../../../src/cubing/search/inside/solve/puzzles/3x3x3/filter.ts", "../../../../src/cubing/search/inside/solve/puzzles/3x3x3/legacy-sgs.ts", "../../../../src/cubing/vendor/apache/comlink-everywhere/comlink.ts", "../../../../src/cubing/vendor/apache/comlink-everywhere/PortableWorker.ts"],
|
|
4
|
-
"sourcesContent": ["import { randomChoice } from \"random-uint-below\";\nimport { Alg } from \"../../../../../alg\";\nimport type { KPattern } from \"../../../../../kpuzzle/KPattern\";\nimport { puzzles } from \"../../../../../puzzles\";\nimport { mustBeInsideWorker } from \"../../../inside-worker\";\nimport { addOrientationSuffix } from \"../../addOrientationSuffix\";\nimport { dynamic3x3x3min2phase } from \"../dynamic/3x3x3\";\nimport { toMin2PhasePattern } from \"./convert\";\nimport { passesFilter } from \"./filter\";\nimport { sgs3x3x3 } from \"./legacy-sgs\";\n\nexport async function random333Pattern(): Promise<KPattern> {\n const kpuzzle = await puzzles[\"3x3x3\"].kpuzzle();\n let pattern = kpuzzle.defaultPattern();\n for (const piece of sgs3x3x3) {\n pattern = pattern.applyAlg(Alg.fromString(randomChoice(piece)));\n }\n if (!passesFilter(kpuzzle, pattern)) {\n return random333Pattern();\n }\n return pattern;\n}\n\nexport async function solve333(s: KPattern): Promise<Alg> {\n mustBeInsideWorker();\n return Alg.fromString(\n (await dynamic3x3x3min2phase).solvePattern(toMin2PhasePattern(s)),\n );\n}\n\nexport async function random333Scramble(): Promise<Alg> {\n return solve333(await random333Pattern());\n}\n\nexport async function initialize333(): Promise<void> {\n (await dynamic3x3x3min2phase).initialize();\n}\n\nconst randomSuffixes = [\n [null, \"Rw\", \"Rw2\", \"Rw'\", \"Fw\", \"Fw'\"],\n [null, \"Dw\", \"Dw2\", \"Dw'\"],\n];\n\nexport async function random333OrientedScramble(): Promise<Alg> {\n return addOrientationSuffix(await random333Scramble(), randomSuffixes);\n}\n", "let isInsideWorker = false;\n\nexport function setIsInsideWorker(inside: boolean) {\n isInsideWorker = inside;\n}\n\nexport function mustBeInsideWorker(): void {\n if (!isInsideWorker) {\n throw new Error(\n \"Must be called from inside a worker, to avoid impact on page performance. Try importing from the top level of `cubing/solve`?\",\n );\n }\n}\n", "import { randomChoice } from \"random-uint-below\";\nimport { type Alg, AlgBuilder, Move } from \"../../../alg\";\n\nexport function addOrientationSuffix(\n alg: Alg,\n suffixSpec: (null | string)[][],\n): Alg {\n const algBuilder = new AlgBuilder();\n algBuilder.experimentalPushAlg(alg);\n for (const suffix of suffixSpec) {\n const choice = randomChoice(suffix);\n if (choice !== null) {\n algBuilder.push(Move.fromString(choice));\n }\n }\n return algBuilder.toAlg();\n}\n", "import { LazyPromise } from \"../../../../../../twisty/cubing-private\";\n\nexport const dynamic3x3x3min2phase = new LazyPromise(\n () => import(\"./search-dynamic-solve-3x3x3\"),\n);\n", "/*\n\nFace order:\n\n U\nLFRB\n D\n\n | 0| 1| 2|\n | 3| 4| 5|\n | 6| 7| 8|\n| 9|10|11|18|19|20|27|28|29|36|37|38|\n|12|13|14|21|22|23|30|31|32|39|40|41|\n|15|16|17|24|25|26|33|34|35|42|43|44|\n |45|46|47|\n |48|49|50|\n |51|52|53|\n*/\n\nimport type { KPattern } from \"../../../../../kpuzzle/KPattern\";\n\nconst reidEdgeOrder = \"UF UR UB UL DF DR DB DL FR FL BR BL\".split(\" \");\nconst reidCornerOrder = \"UFR URB UBL ULF DRF DFL DLB DBR\".split(\" \");\nconst centerOrder = \"U L F R B D\".split(\" \");\n\n// const stickers = [reidEdgeOrder, reidCornerOrder, centerOrder];\n\n// /*\n// |1 20|0 20|1 10|\n// |0 30|2 00|0 10|\n// |1 30|0 00|1 00|\n// |1 22|0 31|1 31|1 32|0 01|1 01|1 02|0 11|1 11|1 12|0 21|1 21|\n// |0111|2 10|0 91|0 90|2 20|0 80|0 81|2 30|0101|0100|2 40|0110|\n// |1 61|0 71|1 52|1 51|0 41|1 42|1 41|0 51|1 72|1 71|0 61|1 62|\n// |1 50|0 40|1 40|\n// |0 70|2 50|0 50|\n// |1 60|0 60|1 70|\n// */\n\nconst map: [number, number, number][] = [\n [1, 2, 0],\n [0, 2, 0],\n [1, 1, 0],\n [0, 3, 0],\n [2, 0, 0],\n [0, 1, 0],\n [1, 3, 0],\n [0, 0, 0],\n [1, 0, 0],\n [1, 0, 2],\n [0, 1, 1],\n [1, 1, 1],\n [0, 8, 1],\n [2, 3, 0],\n [0, 10, 1],\n [1, 4, 1],\n [0, 5, 1],\n [1, 7, 2],\n [1, 3, 2],\n [0, 0, 1],\n [1, 0, 1],\n [0, 9, 0],\n [2, 2, 0],\n [0, 8, 0],\n [1, 5, 1],\n [0, 4, 1],\n [1, 4, 2],\n [1, 5, 0],\n [0, 4, 0],\n [1, 4, 0],\n [0, 7, 0],\n [2, 5, 0],\n [0, 5, 0],\n [1, 6, 0],\n [0, 6, 0],\n [1, 7, 0],\n [1, 2, 2],\n [0, 3, 1],\n [1, 3, 1],\n [0, 11, 1],\n [2, 1, 0],\n [0, 9, 1],\n [1, 6, 1],\n [0, 7, 1],\n [1, 5, 2],\n [1, 1, 2],\n [0, 2, 1],\n [1, 2, 1],\n [0, 10, 0],\n [2, 4, 0],\n [0, 11, 0],\n [1, 7, 1],\n [0, 6, 1],\n [1, 6, 2],\n];\n\nfunction rotateLeft(s: string, i: number): string {\n return s.slice(i) + s.slice(0, i);\n}\n\nfunction toReid333Struct(pattern: KPattern): string[][] {\n const output: string[][] = [[], []];\n for (let i = 0; i < 6; i++) {\n if (pattern.patternData[\"CENTERS\"].pieces[i] !== i) {\n throw new Error(\"non-oriented puzzles are not supported\");\n }\n }\n for (let i = 0; i < 12; i++) {\n output[0].push(\n rotateLeft(\n reidEdgeOrder[pattern.patternData[\"EDGES\"].pieces[i]],\n pattern.patternData[\"EDGES\"].orientation[i],\n ),\n );\n }\n for (let i = 0; i < 8; i++) {\n output[1].push(\n rotateLeft(\n reidCornerOrder[pattern.patternData[\"CORNERS\"].pieces[i]],\n pattern.patternData[\"CORNERS\"].orientation[i],\n ),\n );\n }\n output.push(centerOrder);\n return output;\n}\n\n// function toReid333String(state: Transformation): string {\n// return toReid333Struct(state)\n// .map((l) => l.join(\" \"))\n// .join(\" \");\n// }\n\nexport function toMin2PhasePattern(pattern: KPattern): string {\n const reid = toReid333Struct(pattern);\n return map.map(([orbit, perm, ori]) => reid[orbit][perm][ori]).join(\"\");\n}\n", "import { Move } from \"../../../../../alg\";\nimport type { KPuzzle } from \"../../../../../kpuzzle\";\nimport { KPattern } from \"../../../../../kpuzzle\";\n\nexport function isEquivalentTranformationIgnoringCENTERS(\n t1: KPattern,\n t2: KPattern,\n): boolean {\n const t1NoCenterOri = new KPattern(t1.kpuzzle, {\n EDGES: t1.patternData[\"EDGES\"],\n CORNERS: t1.patternData[\"CORNERS\"],\n CENTERS: {\n pieces: t1.patternData[\"CENTERS\"].pieces,\n orientation: new Array(6).fill(0),\n },\n }).experimentalToTransformation()!;\n const t2NoCenterOri = new KPattern(t2.kpuzzle, {\n EDGES: t2.patternData[\"EDGES\"],\n CORNERS: t2.patternData[\"CORNERS\"],\n CENTERS: {\n pieces: t2.patternData[\"CENTERS\"].pieces,\n orientation: new Array(6).fill(0),\n },\n }).experimentalToTransformation()!;\n return t1NoCenterOri.isIdentical(t2NoCenterOri);\n}\n\nexport function passesFilter(kpuzzle: KPuzzle, pattern: KPattern): boolean {\n if (\n isEquivalentTranformationIgnoringCENTERS(kpuzzle.defaultPattern(), pattern)\n ) {\n return false;\n }\n\n for (const face of \"ULFRBD\") {\n for (let amount = 1; amount < 4; amount++) {\n const transformation = kpuzzle\n .moveToTransformation(new Move(face, amount))\n .toKPattern();\n if (isEquivalentTranformationIgnoringCENTERS(transformation, pattern)) {\n return false;\n }\n }\n }\n\n return true;\n}\n// TODO: implement tests\n// {\n// const def = await puzzles[\"3x3x3\"].def();\n// const kpuzzle = new KPuzzle(def);\n// console.log(passesFilter(def, kpuzzle.state));\n// kpuzzle.applyAlg(parse(\"R\"));\n// console.log(passesFilter(def, kpuzzle.state));\n// kpuzzle.applyAlg(parse(\"D\"));\n// console.log(passesFilter(def, kpuzzle.state));\n// kpuzzle.reset();\n// kpuzzle.applyAlg(parse(\"(R' U' R U')5\"));\n// console.log(passesFilter(def, kpuzzle.state));\n// }\n", "// TODO: Verify\nexport const sgs3x3x3: string[][] = [\n [\n \"R U'\",\n \"R2 B\", //\n \"D2 B2\",\n \"D' L B'\", //\n \"R' U'\",\n \"B\", //\n \"D B2\",\n \"R' B\", //\n \"L' U\",\n \"L2 B'\", //\n \"B2\",\n \"D L B'\", //\n \"L U\",\n \"B'\", //\n \"U'\",\n \"R B\", //\n \"D' B2\",\n \"L B'\", //\n \"U2\",\n \"U L' B'\", //\n \"\",\n \"U' L' B'\", //\n \"U\",\n \"L' B'\",\n ],\n [\n \"F2 L2\",\n \"F' L'\",\n \"R' F L2\", //\n \"D' L2\",\n \"F L2\",\n \"F2 L'\", //\n \"R' F' L'\",\n \"R2 F L2\",\n \"R2 F2 L'\", //\n \"L2\",\n \"F L'\",\n \"D' L\", //\n \"D2 L2\",\n \"R2 F' L'\",\n \"D L\", //\n \"\",\n \"L2 F L'\",\n \"L F' L2\", //\n \"L F L'\",\n \"F' L2\",\n \"L'\", //\n \"D L2\",\n \"D F L'\",\n \"L\",\n ],\n [\n \"R B U2 B'\",\n \"R2 B U' B'\", //\n \"F2 B U B'\",\n \"F B2 L' B2\", //\n \"B2 L B2\",\n \"B U' B'\", //\n \"R2 B U2 B'\",\n \"R' B U' B'\", //\n \"B2 L' B2\",\n \"F B U B'\", //\n \"B2 U' B2\",\n \"B' L B\", //\n \"L F' B D' B'\",\n \"B' U' B2 D B'\", //\n \"B U2 B'\",\n \"R B U' B'\", //\n \"B2 L2 B2\",\n \"D' B' L B\", //\n \"B U B'\",\n \"F' B2 L' B2\", //\n \"\",\n \"B2 L' B' U' B'\",\n ],\n [\n \"U F2 L2 U'\",\n \"F' U L' U'\", //\n \"F2 U L' U'\",\n \"U F L2 U'\", //\n \"U2 B2 U2\",\n \"R' U' B U\", //\n \"D2 U L U'\",\n \"D U2 B' U2\", //\n \"U L2 U'\",\n \"F U L' U'\", //\n \"D U L U'\",\n \"U2 B' U2\", //\n \"\",\n \"U2 B' U' L' U'\", //\n \"U2 L' U2\",\n \"U' B U\", //\n \"U L U'\",\n \"D' U2 B' U2\", //\n \"U L' U'\",\n \"U2 B U2\",\n ],\n [\n \"R' D' F2\",\n \"F'\", //\n \"F2\",\n \"D R F'\", //\n \"R D' F2\",\n \"R2 F'\", //\n \"D' F2\",\n \"R F'\", //\n \"F2 R' D' F2\",\n \"F\", //\n \"D2 F2\",\n \"D' R F'\", //\n \"R2 D' F2\",\n \"R' F'\", //\n \"D F2\",\n \"D2 R F'\", //\n \"\",\n \"F R' D' F2\",\n ],\n [\n \"R' D2 F' D F\",\n \"R F2 R2 F2\",\n \"R2 F' D2 F\", //\n \"F' R2 D2 F\",\n \"L D' L'\",\n \"D F' D2 F\", //\n \"F2 R2 F2\",\n \"R F' D2 F\",\n \"F' R2 D' F\", //\n \"F' R' D2 F\",\n \"F2 R' F2\",\n \"L D L'\", //\n \"F' R D' F\",\n \"F2 R F2\",\n \"F' D2 F\", //\n \"\",\n \"L D2 R D' L'\",\n \"F' D2 F' R F2\", //\n \"D2 R2 F2 R2 F2\",\n \"D F' D' F\",\n \"F' D F\",\n ],\n [\n \"U F2 U'\",\n \"R U F' U'\", //\n \"D R U F2 U'\",\n \"U F U'\", //\n \"R2 U F2 U'\",\n \"R' U F' U'\", //\n \"R U F2 U'\",\n \"R2 U F' U'\", //\n \"\",\n \"U L D L' F U'\", //\n \"F2 D' R D F2\",\n \"D2 U F U'\", //\n \"R' U F2 U'\",\n \"U F' U'\", //\n \"F2 D2 R D2 F2\",\n \"D U F U'\",\n ],\n [\n \"R2\",\n \"R' B' D B\", //\n \"D R'\",\n \"F' R2 F\", //\n \"\",\n \"R B' D B\", //\n \"R'\",\n \"B' D B\", //\n \"D' R'\",\n \"D2 F' R2 F\", //\n \"R\",\n \"R2 B' D B\", //\n \"D2 R'\",\n \"B' D' B\",\n ],\n [\n \"R2 D' R2\",\n \"F' R' F R\",\n \"R D' R2 D R'\", //\n \"D2 R2 D2 R2\",\n \"R' D' F' R F\",\n \"U F D F' U'\", //\n \"\",\n \"R2 D2 B R' B' R'\",\n \"R' F D' F2 R F\", //\n \"R2 D R2\",\n \"F2 U F U' F\",\n \"R' D F' R F\", //\n \"D R2 D2 R2\",\n \"U F D' F' U'\",\n \"D R' D2 F' R F\", //\n \"R2 D2 R2\",\n \"U F D2 F' U'\",\n \"R' D2 F' R F\",\n ],\n [\n \"B R B'\",\n \"F D F' B R2 B'\", //\n \"D B R2 B'\",\n \"D2 B R' B'\", //\n \"B R2 B'\",\n \"D B R' B'\", //\n \"D' B R2 B'\",\n \"B R' B'\", //\n \"\",\n \"B R2 B' D B R' B'\", //\n \"D2 B R2 B'\",\n \"D' B R' B'\",\n ],\n [\n \"\",\n \"R' D R F D2 F'\", //\n \"R' D R\",\n \"D F D' F'\", //\n \"R F' R' F\",\n \"F D' F'\", //\n \"R' D' R\",\n \"F D2 F'\", //\n \"R' D2 R\",\n \"F D F'\",\n ],\n [\n \"\",\n \"F2 D2 R F' R' D2 F' D2 F'\",\n \"F2 D2 F' D' F D' F' D2 F'\", //\n \"F2 D F2 D F2 D2 F2\",\n \"D2 F L D2 L' D2 F'\",\n \"D F D2 L D2 L' F'\", //\n \"R' D B' D2 B D' R\",\n \"R' D2 B' D2 B R\",\n \"F D2 F' D F D F'\", //\n \"F D' L D2 L' D F'\",\n \"B D' F D B' D' F'\",\n \"F D2 L D2 L' F'\", //\n \"F D' L D L' D F'\",\n \"F L D2 L' D2 F'\",\n \"R' B' D2 B D2 R\",\n ],\n [\n \"D'\",\n \"F L D L' D' F'\", //\n \"D2\",\n \"L B D B' D' L'\", //\n \"D\",\n \"B' L' D' L D B\", //\n \"\",\n \"D F L D L' D' F'\",\n ],\n [\n \"F' D2 F D F' D F\",\n \"F' D' R' D R F\", //\n \"F' R' D' R D F\",\n \"B D R D' R' B'\", //\n \"\",\n \"D B' D' L' D L B\",\n ],\n [\n \"D F D F' D F D2 F'\",\n \"F' U2 B' R' B U2 F' L F' L' F'\", //\n \"\",\n \"D2 L D L2 F L F2 D F\",\n ],\n [\n \"L B' L' F L B L' F'\",\n \"F2 U F' D2 F U' F' D2 F'\",\n \"D' F' D B D' F D B'\", //\n \"F L2 F R2 F' L2 F R2 F2\",\n \"D B D' F' D B' D' F\",\n \"R F L F' R' F L' F'\", //\n \"\",\n \"D2 B L' U2 L B' D2 B L' U2 L B'\",\n \"D2 F R' U2 R F' D2 F R' U2 R F'\", //\n \"R F L' F' R' F L F'\",\n \"D F D' B' D F' D' B\",\n \"L2 F2 L' B2 L F2 L' B2 L'\",\n ],\n [\n \"L B R' B' L' B R B'\",\n \"R' B R F' R' B' R F\",\n \"L D2 L U L' D2 L U' L2\", //\n \"\",\n \"D2 B' D2 F D' L2 F L2 F' D2 B D' F'\",\n \"D2 F' R' F R2 B' D2 B D2 R' F D2 F'\", //\n \"L B L' F L B' L' F'\",\n \"F' D2 F' U' F D2 F' U F2\",\n \"D' B' D F D' B D F'\",\n ],\n [\"\", \"D2 F' L U2 L' F D2 F' L U2 L' F\", \"D2 B' R U2 R' B D2 B' R U2 R' B\"],\n];\n", "/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n type Endpoint,\n type EventSource,\n type Message,\n MessageType,\n type PostMessageWithOrigin,\n type WireValue,\n WireValueType,\n} from \"./protocol\";\nexport type { Endpoint };\n\nexport const proxyMarker = Symbol(\"Comlink.proxy\");\nexport const createEndpoint = Symbol(\"Comlink.endpoint\");\nexport const releaseProxy = Symbol(\"Comlink.releaseProxy\");\nexport const finalizer = Symbol(\"Comlink.finalizer\");\n\nconst throwMarker = Symbol(\"Comlink.thrown\");\n\nconst REF_COUNT_BY_DEFAULT = true;\n\nexport type Any = any;\n\n/**\n * Interface of values that were marked to be proxied with `comlink.proxy()`.\n * Can also be implemented by classes.\n */\nexport interface ProxyMarked {\n [proxyMarker]: true;\n}\n\n/**\n * Takes a type and wraps it in a Promise, if it not already is one.\n * This is to avoid `Promise<Promise<T>>`.\n *\n * This is the inverse of `Unpromisify<T>`.\n */\ntype Promisify<T> = T extends Promise<unknown> ? T : Promise<T>;\n/**\n * Takes a type that may be Promise and unwraps the Promise type.\n * If `P` is not a Promise, it returns `P`.\n *\n * This is the inverse of `Promisify<T>`.\n */\ntype Unpromisify<P> = P extends Promise<infer T> ? T : P;\n\n/**\n * Takes the raw type of a remote property and returns the type that is visible to the local thread on the proxy.\n *\n * Note: This needs to be its own type alias, otherwise it will not distribute over unions.\n * See https://www.typescriptlang.org/docs/handbook/advanced-types.html#distributive-conditional-types\n */\ntype RemoteProperty<T> =\n // If the value is a method, comlink will proxy it automatically.\n // Objects are only proxied if they are marked to be proxied.\n // Otherwise, the property is converted to a Promise that resolves the cloned value.\n // biome-ignore lint/complexity/noBannedTypes: This is a very general type.\n T extends Function | ProxyMarked ? Remote<T> : Promisify<T>;\n\n/**\n * Takes the raw type of a property as a remote thread would see it through a proxy (e.g. when passed in as a function\n * argument) and returns the type that the local thread has to supply.\n *\n * This is the inverse of `RemoteProperty<T>`.\n *\n * Note: This needs to be its own type alias, otherwise it will not distribute over unions. See\n * https://www.typescriptlang.org/docs/handbook/advanced-types.html#distributive-conditional-types\n */\n// biome-ignore lint/complexity/noBannedTypes: This is a very general type.\ntype LocalProperty<T> = T extends Function | ProxyMarked\n ? Local<T>\n : Unpromisify<T>;\n\n/**\n * Proxies `T` if it is a `ProxyMarked`, clones it otherwise (as handled by structured cloning and transfer handlers).\n */\nexport type ProxyOrClone<T> = T extends ProxyMarked ? Remote<T> : T;\n/**\n * Inverse of `ProxyOrClone<T>`.\n */\nexport type UnproxyOrClone<T> =\n T extends RemoteObject<ProxyMarked> ? Local<T> : T;\n\n/**\n * Takes the raw type of a remote object in the other thread and returns the type as it is visible to the local thread\n * when proxied with `Comlink.proxy()`.\n *\n * This does not handle call signatures, which is handled by the more general `Remote<T>` type.\n *\n * @template T The raw type of a remote object as seen in the other thread.\n */\nexport type RemoteObject<T> = { [P in keyof T]: RemoteProperty<T[P]> };\n/**\n * Takes the type of an object as a remote thread would see it through a proxy (e.g. when passed in as a function\n * argument) and returns the type that the local thread has to supply.\n *\n * This does not handle call signatures, which is handled by the more general `Local<T>` type.\n *\n * This is the inverse of `RemoteObject<T>`.\n *\n * @template T The type of a proxied object.\n */\nexport type LocalObject<T> = { [P in keyof T]: LocalProperty<T[P]> };\n\n/**\n * Additional special comlink methods available on each proxy returned by `Comlink.wrap()`.\n */\nexport interface ProxyMethods {\n [createEndpoint]: () => Promise<MessagePort>;\n [releaseProxy]: () => void;\n}\n\n/**\n * Takes the raw type of a remote object, function or class in the other thread and returns the type as it is visible to\n * the local thread from the proxy return value of `Comlink.wrap()` or `Comlink.proxy()`.\n */\nexport type Remote<T> =\n // Handle properties\n RemoteObject<T> &\n // Handle call signature (if present)\n (T extends (...args: infer TArguments) => infer TReturn\n ? (\n ...args: { [I in keyof TArguments]: UnproxyOrClone<TArguments[I]> }\n ) => Promisify<ProxyOrClone<Unpromisify<TReturn>>>\n : unknown) &\n // Handle construct signature (if present)\n // The return of construct signatures is always proxied (whether marked or not)\n (T extends { new (...args: infer TArguments): infer TInstance }\n ? {\n new (\n ...args: {\n [I in keyof TArguments]: UnproxyOrClone<TArguments[I]>;\n }\n ): Promisify<Remote<TInstance>>;\n }\n : unknown) &\n // Include additional special comlink methods available on the proxy.\n ProxyMethods;\n\n/**\n * Expresses that a type can be either a sync or async.\n */\ntype MaybePromise<T> = Promise<T> | T;\n\n/**\n * Takes the raw type of a remote object, function or class as a remote thread would see it through a proxy (e.g. when\n * passed in as a function argument) and returns the type the local thread has to supply.\n *\n * This is the inverse of `Remote<T>`. It takes a `Remote<T>` and returns its original input `T`.\n */\nexport type Local<T> =\n // Omit the special proxy methods (they don't need to be supplied, comlink adds them)\n Omit<LocalObject<T>, keyof ProxyMethods> &\n // Handle call signatures (if present)\n (T extends (...args: infer TArguments) => infer TReturn\n ? (\n ...args: { [I in keyof TArguments]: ProxyOrClone<TArguments[I]> }\n ) => MaybePromise<UnproxyOrClone<Unpromisify<TReturn>>> // The raw function could either be sync or async, but is always proxied automatically\n : unknown) &\n // Handle construct signature (if present)\n // The return of construct signatures is always proxied (whether marked or not)\n (T extends { new (...args: infer TArguments): infer TInstance }\n ? {\n new (\n ...args: {\n [I in keyof TArguments]: ProxyOrClone<TArguments[I]>;\n }\n ): // The raw constructor could either be sync or async, but is always proxied automatically\n MaybePromise<Local<Unpromisify<TInstance>>>;\n }\n : unknown);\n\nconst isObject = (val: unknown): val is object =>\n (typeof val === \"object\" && val !== null) || typeof val === \"function\";\n\n/**\n * Customizes the serialization of certain values as determined by `canHandle()`.\n *\n * @template T The input type being handled by this transfer handler.\n * @template S The serialized type sent over the wire.\n */\nexport interface TransferHandler<T, S> {\n /**\n * Gets called for every value to determine whether this transfer handler\n * should serialize the value, which includes checking that it is of the right\n * type (but can perform checks beyond that as well).\n */\n canHandle(value: unknown): value is T;\n\n /**\n * Gets called with the value if `canHandle()` returned `true` to produce a\n * value that can be sent in a message, consisting of structured-cloneable\n * values and/or transferrable objects.\n */\n serialize(value: T): [S, Transferable[]];\n\n /**\n * Gets called to deserialize an incoming value that was serialized in the\n * other thread with this transfer handler (known through the name it was\n * registered under).\n */\n deserialize(value: S): T;\n}\n\n/**\n * Internal transfer handle to handle objects marked to proxy.\n */\nconst proxyTransferHandler: TransferHandler<object, MessagePort> = {\n canHandle: (val): val is ProxyMarked =>\n isObject(val) && (val as ProxyMarked)[proxyMarker],\n serialize(obj) {\n const { port1, port2 } = new MessageChannel();\n expose(obj, port1);\n return [port2, [port2]];\n },\n deserialize(port) {\n port.start();\n return wrap(port);\n },\n};\n\ninterface ThrownValue {\n [throwMarker]: unknown; // just needs to be present\n value: unknown;\n}\ntype SerializedThrownValue =\n | { isError: true; value: Error }\n | { isError: false; value: unknown };\ntype PendingListenersMap = Map<\n string,\n (value: WireValue | PromiseLike<WireValue>) => void\n>;\ntype EndpointWithPendingListeners = {\n endpoint: Endpoint;\n pendingListeners: PendingListenersMap;\n};\n\n/**\n * Internal transfer handler to handle thrown exceptions.\n */\nconst throwTransferHandler: TransferHandler<\n ThrownValue,\n SerializedThrownValue\n> = {\n canHandle: (value): value is ThrownValue =>\n isObject(value) && throwMarker in value,\n serialize({ value }) {\n let serialized: SerializedThrownValue;\n if (value instanceof Error) {\n serialized = {\n isError: true,\n value: {\n message: value.message,\n name: value.name,\n stack: value.stack,\n },\n };\n } else {\n serialized = { isError: false, value };\n }\n return [serialized, []];\n },\n deserialize(serialized) {\n if (serialized.isError) {\n throw Object.assign(\n new Error(serialized.value.message),\n serialized.value,\n );\n }\n throw serialized.value;\n },\n};\n\n/**\n * `deno` seems to have a bug: https://github.com/denoland/deno/issues/31871\n *\n * https://docs.deno.com/api/node/worker_threads/~/Worker#method_unref_0 states:\n *\n * > Calling `unref()` on a worker allows the thread to exit if this is the only\n * > active handle in the event system. If the worker is already `unref()`ed\n * > calling `unref()` again has no effect.\n *\n * And yet calling `.unref()` here doesn't allow the process to exit. Even two\n * times is not enough. It seems to take at least 5 times, in some cases.\n *\n * Now:\n *\n * - There is no way to check if the first call suceeded.\n * - It would be nice to avoid runtime sniffing in library code.\n * - Calling it additional times doesn't have an effect in other runtimes.\n * - The calls are *relatively* fast \u2014 on the order of a few nanoseconds in all runtimes.\n *\n * So we call it five times unconditionally (instead of once).\n */\nfunction unrefWorkaround(reffable: {\n unref?: () => void;\n}): (() => void) | undefined {\n const unref = reffable.unref?.bind(reffable);\n if (!unref) {\n return;\n }\n return () => {\n for (let i = 0; i < 5; i++) {\n unref();\n }\n };\n}\n\n/**\n * Allows customizing the serialization of certain values.\n */\nexport const transferHandlers = new Map<\n string,\n TransferHandler<unknown, unknown>\n>([\n [\"proxy\", proxyTransferHandler],\n [\"throw\", throwTransferHandler],\n]);\n\nexport interface NodeEndpoint {\n postMessage(message: Any, transfer?: Any[]): void;\n on(type: string, listener: EventListenerOrEventListenerObject): void;\n off(type: string, listener: EventListenerOrEventListenerObject): void;\n ref?: () => void;\n unref?: () => void;\n start?: () => void;\n terminate?: () => void;\n close?: () => void;\n}\n\nexport function nodeEndpoint(rawEndpoint: NodeEndpoint): Endpoint {\n const listeners: {\n [event: string]:\n | WeakMap<EventListenerOrEventListenerObject, Any>\n | undefined;\n } = {};\n function removeEventListener(\n event: \"message\",\n eh: EventListenerOrEventListenerObject,\n ) {\n const l = listeners[event]?.get(eh);\n if (!l) {\n return;\n }\n rawEndpoint.off(event, l);\n listeners[event]?.delete(eh);\n }\n\n return {\n postMessage: rawEndpoint.postMessage.bind(rawEndpoint),\n addEventListener: (\n event: \"message\",\n handler,\n options?: { once: boolean },\n ) => {\n const listener = (data: Any) => {\n if (options?.once) {\n removeEventListener(event, listener);\n }\n if (\"handleEvent\" in handler) {\n handler.handleEvent({ data } as MessageEvent);\n } else {\n handler({ data } as MessageEvent);\n }\n };\n rawEndpoint.on(event, listener);\n (listeners[event] ?? new WeakMap()).set(handler, listener);\n },\n removeEventListener,\n // In theory, `node` exposes these on `Symbol.for('nodejs.ref') ` and\n // `Symbol.for('nodejs.unref') ` fields. In practice, this is not supported across all runtimes.\n ref: rawEndpoint.ref?.bind(rawEndpoint),\n unref: unrefWorkaround(rawEndpoint),\n start: (rawEndpoint as { start?: () => void }).start?.bind(rawEndpoint),\n terminate: (rawEndpoint as { terminate?: () => void }).terminate?.bind(\n rawEndpoint,\n ),\n close: (rawEndpoint as { close?: () => void }).close?.bind(rawEndpoint),\n };\n}\n\nfunction toEndpoint(endpoint: Endpoint | NodeEndpoint): Endpoint {\n if (\n !(\"addEventListener\" in endpoint) ||\n !(\"removeEventListener\" in endpoint)\n ) {\n return nodeEndpoint(endpoint);\n }\n return endpoint;\n}\n\nfunction isAllowedOrigin(\n allowedOrigins: (string | RegExp)[],\n origin: string,\n): boolean {\n for (const allowedOrigin of allowedOrigins) {\n if (origin === allowedOrigin || allowedOrigin === \"*\") {\n return true;\n }\n if (allowedOrigin instanceof RegExp && allowedOrigin.test(origin)) {\n return true;\n }\n }\n return false;\n}\n\nfunction defaultExposeEndpoint() {\n return (\n globalThis.process?.getBuiltinModule(\"node:worker_threads\").parentPort ??\n (globalThis as Endpoint)\n );\n}\n\nexport function expose(\n obj: Any,\n endpoint: Endpoint | NodeEndpoint = defaultExposeEndpoint(),\n allowedOrigins: (string | RegExp)[] = [\"*\"],\n) {\n const ep = toEndpoint(endpoint);\n ep.addEventListener(\"message\", function callback(ev: MessageEvent) {\n if (!ev || !ev.data) {\n return;\n }\n if (!isAllowedOrigin(allowedOrigins, ev.origin)) {\n console.warn(`Invalid origin '${ev.origin}' for comlink proxy`);\n return;\n }\n const { id, type, path } = {\n path: [] as string[],\n ...(ev.data as Message),\n };\n const argumentList = (ev.data.argumentList || []).map(fromWireValue);\n let returnValue: Any;\n try {\n const parent = path.slice(0, -1).reduce((obj, prop) => obj[prop], obj);\n const rawValue = path.reduce((obj, prop) => obj[prop], obj);\n switch (type) {\n case MessageType.GET:\n {\n returnValue = rawValue;\n }\n break;\n case MessageType.SET:\n {\n parent[path.slice(-1)[0]] = fromWireValue(ev.data.value);\n returnValue = true;\n }\n break;\n case MessageType.APPLY:\n {\n returnValue = rawValue.apply(parent, argumentList);\n }\n break;\n case MessageType.CONSTRUCT:\n {\n const value = new rawValue(...argumentList);\n returnValue = proxy(value);\n }\n break;\n case MessageType.ENDPOINT:\n {\n const { port1, port2 } = new MessageChannel();\n expose(obj, port2);\n returnValue = transfer(port1, [port1]);\n }\n break;\n case MessageType.RELEASE:\n {\n returnValue = undefined;\n }\n break;\n default:\n return;\n }\n } catch (value) {\n returnValue = { value, [throwMarker]: 0 };\n }\n // TODO: `Promise.try`?\n Promise.resolve(returnValue)\n .catch((value) => {\n return { value, [throwMarker]: 0 };\n })\n .then((returnValue) => {\n const [wireValue, transferables] = toWireValue(returnValue);\n ep.postMessage({ ...wireValue, id }, transferables);\n if (type === MessageType.RELEASE) {\n // detach and deactivate after sending release response above.\n ep.removeEventListener(\"message\", callback as Any);\n closeEndPoint(ep);\n if (finalizer in obj && typeof obj[finalizer] === \"function\") {\n obj[finalizer]();\n }\n }\n })\n .catch((_error) => {\n console.log(_error);\n // Send Serialization Error To Caller\n const [wireValue, transferables] = toWireValue({\n value: new TypeError(\"Unserializable return value\"),\n [throwMarker]: 0,\n });\n ep.postMessage({ ...wireValue, id }, transferables);\n });\n } as Any);\n ep.start?.();\n}\n\nfunction closeEndPoint(endpoint: Endpoint) {\n endpoint.close?.();\n endpoint.terminate?.();\n}\n\n/**\n * In certain runtimes like `node`, communicating with a worker will effectively\n * call `.ref()` on (i.e.\"reference\") the worker, which means that the worker\n * will keep the process from terminating by default (similar to an unresolved\n * `Promise`). It is possible to call `.unref()` on a worker to prevent this,\n * but that may allows process to exit before all the intended work is\n * completed.\n *\n * When wrapping a `node` worker, `comlink` now automatically tracks wrapped\n * calls, and calls `.unref()` on the worker whenever there are no more pending\n * calls. This is usually what you want if you are using the the worker\n * specifically for a wrapped API and nothing else. If you need manually manage\n * the worker or pass messages outside of `comlink`, pass `{ refCount: false }`\n * for `options` to disable this behaviour. Note that this makes no difference\n * for workers in web browsers.\n */\nexport function wrap<T>(\n endpoint: Endpoint | NodeEndpoint,\n target?: Any,\n options?: { refCount: boolean },\n): Remote<T> {\n const ep = toEndpoint(endpoint);\n const pendingListeners: PendingListenersMap = new Map();\n\n ep.addEventListener(\"message\", function handleMessage(ev: Event) {\n const { data } = ev as MessageEvent;\n if (!data || !data.id) {\n return;\n }\n const resolver = pendingListeners.get(data.id);\n if (!resolver) {\n return;\n }\n\n try {\n resolver(data);\n } finally {\n pendingListeners.delete(data.id);\n if (\n pendingListeners.size === 0 &&\n (options?.refCount ?? REF_COUNT_BY_DEFAULT)\n ) {\n ep.unref?.();\n }\n }\n });\n\n return createProxy<T>({ endpoint: ep, pendingListeners }, [], target) as Any;\n}\n\nfunction throwIfProxyReleased(isReleased: boolean) {\n if (isReleased) {\n throw new Error(\"Proxy has been released and is not useable\");\n }\n}\n\nfunction releaseEndpoint(epWithPendingListeners: EndpointWithPendingListeners) {\n return requestResponseMessage(epWithPendingListeners, {\n type: MessageType.RELEASE,\n }).then(() => {\n closeEndPoint(epWithPendingListeners.endpoint);\n });\n}\n\nconst proxyCounter = new WeakMap<EndpointWithPendingListeners, number>();\nconst proxyFinalizers =\n \"FinalizationRegistry\" in globalThis &&\n new FinalizationRegistry(\n (epWithPendingListeners: EndpointWithPendingListeners) => {\n const newCount = (proxyCounter.get(epWithPendingListeners) || 0) - 1;\n proxyCounter.set(epWithPendingListeners, newCount);\n if (newCount === 0) {\n void releaseEndpoint(epWithPendingListeners).finally(() => {\n epWithPendingListeners.pendingListeners.clear();\n });\n }\n },\n );\n\nfunction registerProxy(\n proxy: object,\n epWithPendingListeners: EndpointWithPendingListeners,\n) {\n const newCount = (proxyCounter.get(epWithPendingListeners) || 0) + 1;\n proxyCounter.set(epWithPendingListeners, newCount);\n if (proxyFinalizers) {\n proxyFinalizers.register(proxy, epWithPendingListeners, proxy);\n }\n}\n\nfunction unregisterProxy(proxy: object) {\n if (proxyFinalizers) {\n proxyFinalizers.unregister(proxy);\n }\n}\n\nfunction createProxy<T>(\n epWithPendingListeners: EndpointWithPendingListeners,\n path: (string | number | symbol)[] = [],\n target: object = () => {},\n): Remote<T> {\n let isProxyReleased = false;\n const proxy = new Proxy(target, {\n get(_target, prop) {\n throwIfProxyReleased(isProxyReleased);\n if (prop === releaseProxy) {\n return () => {\n unregisterProxy(proxy);\n void releaseEndpoint(epWithPendingListeners).finally(() => {\n epWithPendingListeners.pendingListeners.clear();\n });\n isProxyReleased = true;\n };\n }\n if (prop === \"then\") {\n if (path.length === 0) {\n // biome-ignore lint/suspicious/noThenProperty: TODO\n return { then: () => proxy };\n }\n const r = requestResponseMessage(epWithPendingListeners, {\n type: MessageType.GET,\n path: path.map((p) => p.toString()),\n }).then(fromWireValue);\n return r.then.bind(r);\n }\n return createProxy(epWithPendingListeners, [...path, prop]);\n },\n set(_target, prop, rawValue) {\n throwIfProxyReleased(isProxyReleased);\n // FIXME: ES6 Proxy Handler `set` methods are supposed to return a\n // boolean. To show good will, we return true asynchronously \u00AF\\_(\u30C4)_/\u00AF\n const [value, transferables] = toWireValue(rawValue);\n return requestResponseMessage(\n epWithPendingListeners,\n {\n type: MessageType.SET,\n path: [...path, prop].map((p) => p.toString()),\n value,\n },\n transferables,\n ).then(fromWireValue) as Any;\n },\n apply(_target, _thisArg, rawArgumentList) {\n throwIfProxyReleased(isProxyReleased);\n const last = path[path.length - 1];\n if ((last as Any) === createEndpoint) {\n return requestResponseMessage(epWithPendingListeners, {\n type: MessageType.ENDPOINT,\n }).then(fromWireValue);\n }\n // We just pretend that `bind()` didn\u2019t happen.\n if (last === \"bind\") {\n return createProxy(epWithPendingListeners, path.slice(0, -1));\n }\n const [argumentList, transferables] = processArguments(rawArgumentList);\n return requestResponseMessage(\n epWithPendingListeners,\n {\n type: MessageType.APPLY,\n path: path.map((p) => p.toString()),\n argumentList,\n },\n transferables,\n ).then(fromWireValue);\n },\n construct(_target, rawArgumentList) {\n throwIfProxyReleased(isProxyReleased);\n const [argumentList, transferables] = processArguments(rawArgumentList);\n return requestResponseMessage(\n epWithPendingListeners,\n {\n type: MessageType.CONSTRUCT,\n path: path.map((p) => p.toString()),\n argumentList,\n },\n transferables,\n ).then(fromWireValue);\n },\n });\n registerProxy(proxy, epWithPendingListeners);\n return proxy as Any;\n}\n\nfunction myFlat<T>(arr: (T | T[])[]): T[] {\n return Array.prototype.concat.apply([], arr);\n}\n\nfunction processArguments(argumentList: Any[]): [WireValue[], Transferable[]] {\n const processed = argumentList.map(toWireValue);\n return [processed.map((v) => v[0]), myFlat(processed.map((v) => v[1]))];\n}\n\nconst transferCache = new WeakMap<Any, Transferable[]>();\nexport function transfer<T>(obj: T, transfers: Transferable[]): T {\n transferCache.set(obj, transfers);\n return obj;\n}\n\nexport function proxy<T extends {}>(obj: T): T & ProxyMarked {\n return Object.assign(obj, { [proxyMarker]: true }) as Any;\n}\n\nexport function windowEndpoint(\n w: PostMessageWithOrigin,\n context: EventSource = globalThis,\n targetOrigin = \"*\",\n): Endpoint {\n return {\n postMessage: (msg: Any, transferables: Transferable[]) =>\n w.postMessage(msg, targetOrigin, transferables),\n addEventListener: context.addEventListener.bind(context),\n removeEventListener: context.removeEventListener.bind(context),\n };\n}\n\nfunction toWireValue(value: Any): [WireValue, Transferable[]] {\n for (const [name, handler] of transferHandlers) {\n if (handler.canHandle(value)) {\n const [serializedValue, transferables] = handler.serialize(value);\n return [\n {\n type: WireValueType.HANDLER,\n name,\n value: serializedValue,\n },\n transferables,\n ];\n }\n }\n return [\n {\n type: WireValueType.RAW,\n value,\n },\n transferCache.get(value) || [],\n ];\n}\n\nfunction fromWireValue(value: WireValue): Any {\n switch (value.type) {\n case WireValueType.HANDLER:\n return transferHandlers.get(value.name)!.deserialize(value.value);\n case WireValueType.RAW:\n return value.value;\n }\n}\n\nfunction requestResponseMessage(\n epWithPendingListeners: EndpointWithPendingListeners,\n msg: Message,\n transfers?: Transferable[],\n): Promise<WireValue> {\n const ep = epWithPendingListeners.endpoint;\n const pendingListeners = epWithPendingListeners.pendingListeners;\n return new Promise((resolve) => {\n const id = generateUUID();\n pendingListeners.set(id, resolve);\n ep.start?.();\n ep.ref?.();\n ep.postMessage({ id, ...msg }, transfers);\n });\n}\n\nfunction generateUUID(): string {\n return new Array(4)\n .fill(0)\n .map(() => Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString(16))\n .join(\"-\");\n}\n", "import type { Worker as NodeWorker } from \"node:worker_threads\";\n\ntype WebWorkerOptions = ConstructorParameters<typeof globalThis.Worker>[1];\ntype NodeWorkerOptions = ConstructorParameters<typeof NodeWorker>[1];\n\ntype WorkerOptions = WebWorkerOptions & NodeWorkerOptions;\n\nfunction isCrossOrigin(url: string | URL) {\n if (!globalThis.location) {\n return false;\n }\n const scriptOrigin = globalThis.location.origin;\n const workerOrigin = new URL(url, globalThis.location.href).origin;\n return scriptOrigin !== workerOrigin;\n}\n\nfunction constructPortableWebWorker(\n url: string | URL,\n workerOptions?: WebWorkerOptions,\n) {\n const useTrampoline = isCrossOrigin(url);\n\n // We could use the trampoline unconditionally, but this would require adding\n // `blob:` to the CSP unnecessarily. So we avoid it when possible.\n if (useTrampoline) {\n // Needed until something like\n // https://github.com/lgarron/worker-execution-origin or\n // https://github.com/whatwg/html/issues/6911 is available in all browser.\n const trampolineSource = `import ${JSON.stringify(url.toString())};`;\n const blob = new Blob([trampolineSource], {\n type: \"text/javascript\",\n });\n\n url = URL.createObjectURL(blob);\n }\n\n const worker = new globalThis.Worker(url, {\n ...workerOptions,\n type: \"module\",\n });\n\n if (useTrampoline) {\n const originalTerminate = worker.terminate.bind(worker);\n Object.defineProperty(worker, \"terminate\", {\n get() {\n // @ts-expect-error: TypeScript is not powerful enough to infer that `url` is always a string in this code path.\n URL.revokeObjectURL(url);\n originalTerminate();\n },\n });\n }\n\n return worker;\n}\n\nfunction constructNodeStyleWorker(\n url: URL | string,\n workerOptions?: NodeWorkerOptions,\n) {\n // We could theoretically use dynamic import, but:\n //\n // - 1. There is no synchronous way to do this conditionally. We can't do it\n // synchronously in a constructor, and while top-level `await` is\n // well-supported in runtimes it's not as easy to use with bundlers.\n // 2. `.getBuiltinModule(\u2026)` signals more clearly that these are strictly\n // runtime dependencies.\n const { Worker: NodeWorker } = globalThis.process.getBuiltinModule(\n \"node:worker_threads\",\n );\n\n // `import.meta.resolve(\u2026)` is the recommended way to get the path to a\n // relative file to pass to the worker constructor. This returns a `file://\u2026`\n // URL as a string, which `bun` and `deno` accept for the worker constructor\n // but `node` does not. We can detect this and convert it to a `URL` to allow\n // more concise, idiomatic code across all platforms.\n url =\n typeof url === \"string\" && url.startsWith(\"file://\") ? new URL(url) : url;\n\n return new NodeWorker(url, workerOptions);\n}\n\ninterface GlobalThisWithMaybeUnreffableWorker {\n Worker?: {\n prototype: {\n unref?: () => void;\n };\n };\n}\n\nfunction constructPortableWorker(\n url: string | URL,\n workerOptions?: WorkerOptions,\n): Worker | NodeWorker {\n const hasWebWorkers = globalThis.Worker;\n const hasBuiltinModules = !!globalThis.process?.getBuiltinModule;\n\n if (hasWebWorkers && !hasBuiltinModules) {\n // Browsers\n return constructPortableWebWorker(url, workerOptions) as Worker &\n Record<Exclude<keyof NodeWorker, keyof Worker>, undefined>;\n }\n\n // Note that optional chaining *should* allow us to access `.unref` rather than\n const webWorkersHaveUnref = (\n globalThis as GlobalThisWithMaybeUnreffableWorker\n ).Worker?.prototype.unref;\n\n if (hasWebWorkers && hasBuiltinModules && webWorkersHaveUnref) {\n // `bun`\n return constructPortableWebWorker(url, workerOptions);\n } else {\n // `node` and `deno`\n return constructNodeStyleWorker(url, workerOptions);\n }\n}\n\ninterface PortableWorkerConstructor {\n new (url: string | URL, workerOptions?: WorkerOptions): Worker | NodeWorker;\n}\n\n// @ts-expect-error: Type wrangling\nexport const PortableWorker: PortableWorkerConstructor =\n constructPortableWorker;\n\n/** This type is useful to cast `Worker | NodeWorker` into a type where methods like `.unref?.()` can be called. */\nexport type WebWorkerOrNodeWorker =\n | (Worker & Record<Exclude<keyof NodeWorker, keyof Worker>, undefined>)\n | (NodeWorker & Record<Exclude<keyof Worker, keyof NodeWorker>, undefined>);\n"],
|
|
5
|
-
"mappings": "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A,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE;AAAA,IACA;AAA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",
|
|
6
|
-
"names": ["randomChoice", "randomChoice", "obj", "returnValue", "proxy"]
|
|
7
|
-
}
|