cubegin 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (164) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/LICENSE +674 -0
  3. package/NOTICE +11 -0
  4. package/README.md +49 -0
  5. package/dist/scramble-core/src/batch.mjs +18 -0
  6. package/dist/scramble-core/src/generator.d.mts +35 -0
  7. package/dist/scramble-core/src/generator.mjs +136 -0
  8. package/dist/scramble-core/src/generators/clock.d.mts +11 -0
  9. package/dist/scramble-core/src/generators/clock.mjs +32 -0
  10. package/dist/scramble-core/src/generators/cube-random-turns.d.mts +11 -0
  11. package/dist/scramble-core/src/generators/cube-random-turns.mjs +54 -0
  12. package/dist/scramble-core/src/generators/four-by-four.d.mts +14 -0
  13. package/dist/scramble-core/src/generators/four-by-four.mjs +43 -0
  14. package/dist/scramble-core/src/generators/megaminx.d.mts +11 -0
  15. package/dist/scramble-core/src/generators/megaminx.mjs +18 -0
  16. package/dist/scramble-core/src/generators/pyraminx.d.mts +11 -0
  17. package/dist/scramble-core/src/generators/pyraminx.mjs +17 -0
  18. package/dist/scramble-core/src/generators/skewb.d.mts +11 -0
  19. package/dist/scramble-core/src/generators/skewb.mjs +17 -0
  20. package/dist/scramble-core/src/generators/square1.d.mts +11 -0
  21. package/dist/scramble-core/src/generators/square1.mjs +28 -0
  22. package/dist/scramble-core/src/generators/three-by-three.d.mts +25 -0
  23. package/dist/scramble-core/src/generators/three-by-three.mjs +85 -0
  24. package/dist/scramble-core/src/generators/two-by-two.d.mts +11 -0
  25. package/dist/scramble-core/src/generators/two-by-two.mjs +17 -0
  26. package/dist/scramble-core/src/random-source.d.mts +7 -0
  27. package/dist/scramble-core/src/random-source.mjs +8 -0
  28. package/dist/scramble-core/src/solvers/min2phase/coord-cube.mjs +10 -0
  29. package/dist/scramble-core/src/solvers/min2phase/cubie-cube.mjs +246 -0
  30. package/dist/scramble-core/src/solvers/min2phase/engine.mjs +1281 -0
  31. package/dist/scramble-core/src/solvers/min2phase/search-wca.mjs +21 -0
  32. package/dist/scramble-core/src/solvers/min2phase/search.mjs +25 -0
  33. package/dist/scramble-core/src/solvers/min2phase/tools.mjs +169 -0
  34. package/dist/scramble-core/src/solvers/min2phase/util.mjs +30 -0
  35. package/dist/scramble-core/src/solvers/pyraminx-solver.d.mts +17 -0
  36. package/dist/scramble-core/src/solvers/pyraminx-solver.mjs +350 -0
  37. package/dist/scramble-core/src/solvers/skewb-solver.d.mts +15 -0
  38. package/dist/scramble-core/src/solvers/skewb-solver.mjs +399 -0
  39. package/dist/scramble-core/src/solvers/sq12phase/full-cube.mjs +212 -0
  40. package/dist/scramble-core/src/solvers/sq12phase/search.mjs +520 -0
  41. package/dist/scramble-core/src/solvers/sq12phase/shape.mjs +214 -0
  42. package/dist/scramble-core/src/solvers/sq12phase/square.mjs +135 -0
  43. package/dist/scramble-core/src/solvers/threephase/center.mjs +798 -0
  44. package/dist/scramble-core/src/solvers/threephase/edge.mjs +632 -0
  45. package/dist/scramble-core/src/solvers/threephase/full-cube.mjs +554 -0
  46. package/dist/scramble-core/src/solvers/threephase/search.mjs +262 -0
  47. package/dist/scramble-core/src/solvers/threephase/tables.mjs +201 -0
  48. package/dist/scramble-core/src/solvers/two-by-two-solver.d.mts +15 -0
  49. package/dist/scramble-core/src/solvers/two-by-two-solver.mjs +298 -0
  50. package/dist/scramble-core.d.mts +15 -0
  51. package/dist/scramble-core.mjs +15 -0
  52. package/dist/scramble-image/src/color.d.mts +12 -0
  53. package/dist/scramble-image/src/color.mjs +11 -0
  54. package/dist/scramble-image/src/render.d.mts +10 -0
  55. package/dist/scramble-image/src/render.mjs +71 -0
  56. package/dist/scramble-image/src/renderers/clock.d.mts +6 -0
  57. package/dist/scramble-image/src/renderers/clock.mjs +145 -0
  58. package/dist/scramble-image/src/renderers/cube-isometric.d.mts +8 -0
  59. package/dist/scramble-image/src/renderers/cube-isometric.mjs +204 -0
  60. package/dist/scramble-image/src/renderers/cube-net.d.mts +8 -0
  61. package/dist/scramble-image/src/renderers/cube-net.mjs +52 -0
  62. package/dist/scramble-image/src/renderers/megaminx-isometric.d.mts +9 -0
  63. package/dist/scramble-image/src/renderers/megaminx-isometric.mjs +320 -0
  64. package/dist/scramble-image/src/renderers/megaminx.d.mts +9 -0
  65. package/dist/scramble-image/src/renderers/megaminx.mjs +173 -0
  66. package/dist/scramble-image/src/renderers/pyraminx-isometric.d.mts +9 -0
  67. package/dist/scramble-image/src/renderers/pyraminx-isometric.mjs +185 -0
  68. package/dist/scramble-image/src/renderers/pyraminx.d.mts +9 -0
  69. package/dist/scramble-image/src/renderers/pyraminx.mjs +111 -0
  70. package/dist/scramble-image/src/renderers/skewb-isometric.d.mts +9 -0
  71. package/dist/scramble-image/src/renderers/skewb-isometric.mjs +233 -0
  72. package/dist/scramble-image/src/renderers/skewb.d.mts +9 -0
  73. package/dist/scramble-image/src/renderers/skewb.mjs +187 -0
  74. package/dist/scramble-image/src/renderers/square1.d.mts +10 -0
  75. package/dist/scramble-image/src/renderers/square1.mjs +253 -0
  76. package/dist/scramble-image/src/svg/svg-document.d.mts +6 -0
  77. package/dist/scramble-image/src/svg/svg-document.mjs +7 -0
  78. package/dist/scramble-image/src/svg/svg-elements.d.mts +15 -0
  79. package/dist/scramble-image/src/svg/svg-elements.mjs +25 -0
  80. package/dist/scramble-image/src/svg/svg-serialize.mjs +29 -0
  81. package/dist/scramble-image.d.mts +15 -0
  82. package/dist/scramble-image.mjs +15 -0
  83. package/dist/scramble-puzzle/src/algorithm.d.mts +8 -0
  84. package/dist/scramble-puzzle/src/algorithm.mjs +16 -0
  85. package/dist/scramble-puzzle/src/algorithm2.mjs +16 -0
  86. package/dist/scramble-puzzle/src/clock/clock-definition.d.mts +8 -0
  87. package/dist/scramble-puzzle/src/clock/clock-definition.mjs +18 -0
  88. package/dist/scramble-puzzle/src/clock/clock-definition2.mjs +18 -0
  89. package/dist/scramble-puzzle/src/clock/clock-parser.d.mts +18 -0
  90. package/dist/scramble-puzzle/src/clock/clock-parser.mjs +35 -0
  91. package/dist/scramble-puzzle/src/clock/clock-parser2.mjs +35 -0
  92. package/dist/scramble-puzzle/src/clock/clock-state.d.mts +8 -0
  93. package/dist/scramble-puzzle/src/clock/clock-state.mjs +212 -0
  94. package/dist/scramble-puzzle/src/clock/clock-state2.d.mts +13 -0
  95. package/dist/scramble-puzzle/src/clock/clock-state2.mjs +212 -0
  96. package/dist/scramble-puzzle/src/cube/cube-definition.d.mts +9 -0
  97. package/dist/scramble-puzzle/src/cube/cube-definition.mjs +18 -0
  98. package/dist/scramble-puzzle/src/cube/cube-definition2.mjs +18 -0
  99. package/dist/scramble-puzzle/src/cube/cube-move.d.mts +4 -0
  100. package/dist/scramble-puzzle/src/cube/cube-move2.d.mts +17 -0
  101. package/dist/scramble-puzzle/src/cube/cube-parser.d.mts +7 -0
  102. package/dist/scramble-puzzle/src/cube/cube-parser.mjs +60 -0
  103. package/dist/scramble-puzzle/src/cube/cube-parser2.mjs +60 -0
  104. package/dist/scramble-puzzle/src/cube/cube-state.d.mts +12 -0
  105. package/dist/scramble-puzzle/src/cube/cube-state.mjs +187 -0
  106. package/dist/scramble-puzzle/src/cube/cube-state2.d.mts +15 -0
  107. package/dist/scramble-puzzle/src/cube/cube-state2.mjs +187 -0
  108. package/dist/scramble-puzzle/src/errors.d.mts +15 -0
  109. package/dist/scramble-puzzle/src/errors.mjs +24 -0
  110. package/dist/scramble-puzzle/src/errors2.mjs +30 -0
  111. package/dist/scramble-puzzle/src/events.d.mts +5 -0
  112. package/dist/scramble-puzzle/src/events.mjs +90 -0
  113. package/dist/scramble-puzzle/src/events2.d.mts +98 -0
  114. package/dist/scramble-puzzle/src/events2.mjs +109 -0
  115. package/dist/scramble-puzzle/src/index.mjs +22 -0
  116. package/dist/scramble-puzzle/src/megaminx/megaminx-definition.d.mts +8 -0
  117. package/dist/scramble-puzzle/src/megaminx/megaminx-definition.mjs +18 -0
  118. package/dist/scramble-puzzle/src/megaminx/megaminx-definition2.mjs +18 -0
  119. package/dist/scramble-puzzle/src/megaminx/megaminx-parser.d.mts +5 -0
  120. package/dist/scramble-puzzle/src/megaminx/megaminx-parser.mjs +57 -0
  121. package/dist/scramble-puzzle/src/megaminx/megaminx-parser2.d.mts +20 -0
  122. package/dist/scramble-puzzle/src/megaminx/megaminx-parser2.mjs +57 -0
  123. package/dist/scramble-puzzle/src/megaminx/megaminx-state.d.mts +9 -0
  124. package/dist/scramble-puzzle/src/megaminx/megaminx-state.mjs +112 -0
  125. package/dist/scramble-puzzle/src/megaminx/megaminx-state2.d.mts +14 -0
  126. package/dist/scramble-puzzle/src/megaminx/megaminx-state2.mjs +112 -0
  127. package/dist/scramble-puzzle/src/puzzle-definition.d.mts +19 -0
  128. package/dist/scramble-puzzle/src/pyraminx/pyraminx-definition.d.mts +8 -0
  129. package/dist/scramble-puzzle/src/pyraminx/pyraminx-definition.mjs +18 -0
  130. package/dist/scramble-puzzle/src/pyraminx/pyraminx-definition2.mjs +18 -0
  131. package/dist/scramble-puzzle/src/pyraminx/pyraminx-parser.d.mts +5 -0
  132. package/dist/scramble-puzzle/src/pyraminx/pyraminx-parser.mjs +34 -0
  133. package/dist/scramble-puzzle/src/pyraminx/pyraminx-parser2.d.mts +21 -0
  134. package/dist/scramble-puzzle/src/pyraminx/pyraminx-parser2.mjs +34 -0
  135. package/dist/scramble-puzzle/src/pyraminx/pyraminx-state.d.mts +11 -0
  136. package/dist/scramble-puzzle/src/pyraminx/pyraminx-state.mjs +90 -0
  137. package/dist/scramble-puzzle/src/pyraminx/pyraminx-state2.d.mts +14 -0
  138. package/dist/scramble-puzzle/src/pyraminx/pyraminx-state2.mjs +90 -0
  139. package/dist/scramble-puzzle/src/registry.d.mts +11 -0
  140. package/dist/scramble-puzzle/src/registry.mjs +13 -0
  141. package/dist/scramble-puzzle/src/skewb/skewb-definition.d.mts +8 -0
  142. package/dist/scramble-puzzle/src/skewb/skewb-definition.mjs +18 -0
  143. package/dist/scramble-puzzle/src/skewb/skewb-definition2.mjs +18 -0
  144. package/dist/scramble-puzzle/src/skewb/skewb-parser.d.mts +5 -0
  145. package/dist/scramble-puzzle/src/skewb/skewb-parser.mjs +33 -0
  146. package/dist/scramble-puzzle/src/skewb/skewb-parser2.d.mts +14 -0
  147. package/dist/scramble-puzzle/src/skewb/skewb-parser2.mjs +33 -0
  148. package/dist/scramble-puzzle/src/skewb/skewb-state.d.mts +11 -0
  149. package/dist/scramble-puzzle/src/skewb/skewb-state.mjs +75 -0
  150. package/dist/scramble-puzzle/src/skewb/skewb-state2.d.mts +14 -0
  151. package/dist/scramble-puzzle/src/skewb/skewb-state2.mjs +75 -0
  152. package/dist/scramble-puzzle/src/square1/square1-definition.d.mts +8 -0
  153. package/dist/scramble-puzzle/src/square1/square1-definition.mjs +18 -0
  154. package/dist/scramble-puzzle/src/square1/square1-definition2.mjs +18 -0
  155. package/dist/scramble-puzzle/src/square1/square1-parser.d.mts +17 -0
  156. package/dist/scramble-puzzle/src/square1/square1-parser.mjs +43 -0
  157. package/dist/scramble-puzzle/src/square1/square1-parser2.mjs +47 -0
  158. package/dist/scramble-puzzle/src/square1/square1-state.d.mts +9 -0
  159. package/dist/scramble-puzzle/src/square1/square1-state.mjs +115 -0
  160. package/dist/scramble-puzzle/src/square1/square1-state2.d.mts +21 -0
  161. package/dist/scramble-puzzle/src/square1/square1-state2.mjs +115 -0
  162. package/dist/scramble-puzzle.d.mts +25 -0
  163. package/dist/scramble-puzzle.mjs +23 -0
  164. package/package.json +37 -0
@@ -0,0 +1,187 @@
1
+ import { InvalidMoveError } from "../errors2.mjs";
2
+ //#region .build/vendor/scramble-puzzle/src/cube/cube-state.ts
3
+ const CUBE_FACES = [
4
+ "R",
5
+ "U",
6
+ "F",
7
+ "L",
8
+ "D",
9
+ "B"
10
+ ];
11
+ const faceIndex = (face) => CUBE_FACES.indexOf(face);
12
+ const isCubeFace = (face) => typeof face === "string" && CUBE_FACES.includes(face);
13
+ const isMoveAmount = (amount) => amount === 1 || amount === 2 || amount === 3;
14
+ const oppositeFace = (face) => CUBE_FACES[(faceIndex(face) + 3) % CUBE_FACES.length];
15
+ const cloneCubeImage = (image) => image.map((face) => face.map((row) => [...row]));
16
+ const freezeCubeImage = (image) => {
17
+ const frozenFaces = image.map((face) => {
18
+ const frozenRows = face.map((row) => Object.freeze([...row]));
19
+ return Object.freeze(frozenRows);
20
+ });
21
+ return Object.freeze(frozenFaces);
22
+ };
23
+ const createCubeState = (size, image) => Object.freeze({
24
+ size,
25
+ image: freezeCubeImage(image)
26
+ });
27
+ const swap = (image, first, second, third, fourth, direction) => {
28
+ const [firstFace, firstRow, firstColumn] = first;
29
+ const [secondFace, secondRow, secondColumn] = second;
30
+ const [thirdFace, thirdRow, thirdColumn] = third;
31
+ const [fourthFace, fourthRow, fourthColumn] = fourth;
32
+ if (direction === 1) {
33
+ const firstSticker = image[firstFace][firstRow][firstColumn];
34
+ image[firstFace][firstRow][firstColumn] = image[secondFace][secondRow][secondColumn];
35
+ image[secondFace][secondRow][secondColumn] = image[thirdFace][thirdRow][thirdColumn];
36
+ image[thirdFace][thirdRow][thirdColumn] = image[fourthFace][fourthRow][fourthColumn];
37
+ image[fourthFace][fourthRow][fourthColumn] = firstSticker;
38
+ } else {
39
+ const fourthSticker = image[fourthFace][fourthRow][fourthColumn];
40
+ image[fourthFace][fourthRow][fourthColumn] = image[thirdFace][thirdRow][thirdColumn];
41
+ image[thirdFace][thirdRow][thirdColumn] = image[secondFace][secondRow][secondColumn];
42
+ image[secondFace][secondRow][secondColumn] = image[firstFace][firstRow][firstColumn];
43
+ image[firstFace][firstRow][firstColumn] = fourthSticker;
44
+ }
45
+ };
46
+ const rotateFace = (image, face, direction) => {
47
+ const size = image[0].length;
48
+ const facePosition = faceIndex(face);
49
+ const rowLimit = Math.floor((size + 1) / 2);
50
+ const columnLimit = Math.floor(size / 2);
51
+ for (let row = 0; row < rowLimit; row += 1) for (let column = 0; column < columnLimit; column += 1) {
52
+ const cycle = [
53
+ [
54
+ facePosition,
55
+ row,
56
+ column
57
+ ],
58
+ [
59
+ facePosition,
60
+ column,
61
+ size - 1 - row
62
+ ],
63
+ [
64
+ facePosition,
65
+ size - 1 - row,
66
+ size - 1 - column
67
+ ],
68
+ [
69
+ facePosition,
70
+ size - 1 - column,
71
+ row
72
+ ]
73
+ ];
74
+ if (direction === 1) swap(image, cycle[0], cycle[1], cycle[2], cycle[3], 1);
75
+ else swap(image, cycle[0], cycle[1], cycle[2], cycle[3], 3);
76
+ }
77
+ };
78
+ const slice = (face, sliceIndex, image) => {
79
+ const size = image[0].length;
80
+ let sliceFace = face;
81
+ let stateSliceIndex = sliceIndex;
82
+ let direction = 1;
83
+ if (face !== "L" && face !== "D" && face !== "B") {
84
+ sliceFace = oppositeFace(face);
85
+ stateSliceIndex = size - 1 - sliceIndex;
86
+ direction = 3;
87
+ }
88
+ for (let position = 0; position < size; position += 1) if (sliceFace === "L") swap(image, [
89
+ faceIndex("U"),
90
+ position,
91
+ stateSliceIndex
92
+ ], [
93
+ faceIndex("B"),
94
+ size - 1 - position,
95
+ size - 1 - stateSliceIndex
96
+ ], [
97
+ faceIndex("D"),
98
+ position,
99
+ stateSliceIndex
100
+ ], [
101
+ faceIndex("F"),
102
+ position,
103
+ stateSliceIndex
104
+ ], direction);
105
+ else if (sliceFace === "D") swap(image, [
106
+ faceIndex("L"),
107
+ size - 1 - stateSliceIndex,
108
+ position
109
+ ], [
110
+ faceIndex("B"),
111
+ size - 1 - stateSliceIndex,
112
+ position
113
+ ], [
114
+ faceIndex("R"),
115
+ size - 1 - stateSliceIndex,
116
+ position
117
+ ], [
118
+ faceIndex("F"),
119
+ size - 1 - stateSliceIndex,
120
+ position
121
+ ], direction);
122
+ else swap(image, [
123
+ faceIndex("U"),
124
+ stateSliceIndex,
125
+ position
126
+ ], [
127
+ faceIndex("R"),
128
+ position,
129
+ size - 1 - stateSliceIndex
130
+ ], [
131
+ faceIndex("D"),
132
+ size - 1 - stateSliceIndex,
133
+ size - 1 - position
134
+ ], [
135
+ faceIndex("L"),
136
+ size - 1 - position,
137
+ stateSliceIndex
138
+ ], direction);
139
+ if (sliceIndex === 0) rotateFace(image, face, 3);
140
+ else if (sliceIndex === size - 1) rotateFace(image, oppositeFace(face), 1);
141
+ };
142
+ const moveSuffix = (amount) => {
143
+ if (amount === 2) return "2";
144
+ if (amount === 3) return "'";
145
+ return "";
146
+ };
147
+ const MALFORMED_MOVE = "<malformed>";
148
+ const rotationName = (face) => {
149
+ if (face === "R") return "x";
150
+ if (face === "U") return "y";
151
+ if (face === "F") return "z";
152
+ return face;
153
+ };
154
+ const moveToString = (move) => {
155
+ if (move.isRotation) return `${rotationName(move.face)}${moveSuffix(move.amount)}`;
156
+ if (move.width === 1) return `${move.face}${moveSuffix(move.amount)}`;
157
+ if (move.width === 2) return `${move.face}w${moveSuffix(move.amount)}`;
158
+ return `${move.width}${move.face}w${moveSuffix(move.amount)}`;
159
+ };
160
+ const validateMove = (state, move) => {
161
+ if (typeof move !== "object" || move === null || !isCubeFace(move.face) || !isMoveAmount(move.amount) || typeof move.isRotation !== "boolean") throw new InvalidMoveError(MALFORMED_MOVE, "cube");
162
+ if (move.isRotation) {
163
+ if (move.width !== Number.POSITIVE_INFINITY || move.face !== "R" && move.face !== "U" && move.face !== "F") throw new InvalidMoveError(MALFORMED_MOVE, "cube");
164
+ return move;
165
+ }
166
+ if (!Number.isSafeInteger(move.width)) throw new InvalidMoveError(MALFORMED_MOVE, "cube");
167
+ if (move.width < 1 || move.width > state.size) throw new InvalidMoveError(moveToString(move), "cube");
168
+ return move;
169
+ };
170
+ const createSolvedCubeState = (size) => {
171
+ if (!Number.isSafeInteger(size) || size < 1) throw new RangeError(`cube size must be a positive integer: ${size}`);
172
+ return createCubeState(size, CUBE_FACES.map((face) => Array.from({ length: size }, () => Array(size).fill(face))));
173
+ };
174
+ const applyCubeMove = (state, move) => {
175
+ const validMove = validateMove(state, move);
176
+ const nextImage = cloneCubeImage(state.image);
177
+ const width = validMove.isRotation ? state.size : validMove.width;
178
+ for (let turn = 0; turn < validMove.amount; turn += 1) for (let sliceIndex = 0; sliceIndex < width; sliceIndex += 1) slice(validMove.face, sliceIndex, nextImage);
179
+ return createCubeState(state.size, nextImage);
180
+ };
181
+ const areCubeStatesEqual = (a, b) => {
182
+ if (a.size !== b.size) return false;
183
+ for (let face = 0; face < CUBE_FACES.length; face += 1) for (let row = 0; row < a.size; row += 1) for (let column = 0; column < a.size; column += 1) if (a.image[face][row][column] !== b.image[face][row][column]) return false;
184
+ return true;
185
+ };
186
+ //#endregion
187
+ export { applyCubeMove, areCubeStatesEqual, createSolvedCubeState };
@@ -0,0 +1,15 @@
1
+ //#region .build/vendor/scramble-puzzle/src/errors.d.ts
2
+ declare class ScramblePuzzleError extends Error {
3
+ constructor(message: string, options?: ErrorOptions);
4
+ }
5
+ declare class InvalidMoveError extends ScramblePuzzleError {
6
+ constructor(move: string, puzzleId: string);
7
+ }
8
+ declare class InvalidScrambleError extends ScramblePuzzleError {
9
+ constructor(scramble: string, cause: unknown);
10
+ }
11
+ declare class UnregisteredPuzzleError extends ScramblePuzzleError {
12
+ constructor(eventId: string, options?: ErrorOptions);
13
+ }
14
+ //#endregion
15
+ export { InvalidMoveError, InvalidScrambleError, ScramblePuzzleError, UnregisteredPuzzleError };
@@ -0,0 +1,24 @@
1
+ //#region ../scramble-puzzle/src/errors.ts
2
+ const ERROR_PREFIX = "@cubegin/scramble-puzzle";
3
+ const withPrefix = (message) => `${ERROR_PREFIX}: ${message}`;
4
+ var ScramblePuzzleError = class extends Error {
5
+ constructor(message, options) {
6
+ super(withPrefix(message), options);
7
+ this.name = "ScramblePuzzleError";
8
+ }
9
+ };
10
+ var InvalidMoveError = class extends ScramblePuzzleError {
11
+ constructor(move, puzzleId) {
12
+ super(`move '${move}' is invalid for puzzle '${puzzleId}'`);
13
+ this.name = "InvalidMoveError";
14
+ }
15
+ };
16
+ var InvalidScrambleError = class extends ScramblePuzzleError {
17
+ constructor(scramble, cause) {
18
+ const causeMessage = cause instanceof Error ? cause.message : String(cause);
19
+ super(`scramble '${scramble}' is invalid: ${causeMessage}`, { cause });
20
+ this.name = "InvalidScrambleError";
21
+ }
22
+ };
23
+ //#endregion
24
+ export { InvalidMoveError, InvalidScrambleError, ScramblePuzzleError };
@@ -0,0 +1,30 @@
1
+ //#region .build/vendor/scramble-puzzle/src/errors.ts
2
+ const ERROR_PREFIX = "@cubegin/scramble-puzzle";
3
+ const withPrefix = (message) => `${ERROR_PREFIX}: ${message}`;
4
+ var ScramblePuzzleError = class extends Error {
5
+ constructor(message, options) {
6
+ super(withPrefix(message), options);
7
+ this.name = "ScramblePuzzleError";
8
+ }
9
+ };
10
+ var InvalidMoveError = class extends ScramblePuzzleError {
11
+ constructor(move, puzzleId) {
12
+ super(`move '${move}' is invalid for puzzle '${puzzleId}'`);
13
+ this.name = "InvalidMoveError";
14
+ }
15
+ };
16
+ var InvalidScrambleError = class extends ScramblePuzzleError {
17
+ constructor(scramble, cause) {
18
+ const causeMessage = cause instanceof Error ? cause.message : String(cause);
19
+ super(`scramble '${scramble}' is invalid: ${causeMessage}`, { cause });
20
+ this.name = "InvalidScrambleError";
21
+ }
22
+ };
23
+ var UnregisteredPuzzleError = class extends ScramblePuzzleError {
24
+ constructor(eventId, options) {
25
+ super(`event '${eventId}' is not registered`, options);
26
+ this.name = "UnregisteredPuzzleError";
27
+ }
28
+ };
29
+ //#endregion
30
+ export { InvalidMoveError, InvalidScrambleError, ScramblePuzzleError, UnregisteredPuzzleError };
@@ -0,0 +1,5 @@
1
+ //#region ../scramble-puzzle/src/events.d.ts
2
+ declare const WCA_EVENT_IDS: readonly ["333", "222", "444", "555", "666", "777", "333bld", "333fm", "333oh", "clock", "minx", "pyram", "skewb", "sq1", "444bld", "555bld", "333mbld"];
3
+ type WcaEventId = (typeof WCA_EVENT_IDS)[number];
4
+ //#endregion
5
+ export { WcaEventId };
@@ -0,0 +1,90 @@
1
+ //#region ../scramble-puzzle/src/events.ts
2
+ const WCA_EVENT_INFO = Object.freeze({
3
+ "333": {
4
+ id: "333",
5
+ label: "3x3x3 Cube",
6
+ puzzleId: "cube"
7
+ },
8
+ "222": {
9
+ id: "222",
10
+ label: "2x2x2 Cube",
11
+ puzzleId: "cube"
12
+ },
13
+ "444": {
14
+ id: "444",
15
+ label: "4x4x4 Cube",
16
+ puzzleId: "cube"
17
+ },
18
+ "555": {
19
+ id: "555",
20
+ label: "5x5x5 Cube",
21
+ puzzleId: "cube"
22
+ },
23
+ "666": {
24
+ id: "666",
25
+ label: "6x6x6 Cube",
26
+ puzzleId: "cube"
27
+ },
28
+ "777": {
29
+ id: "777",
30
+ label: "7x7x7 Cube",
31
+ puzzleId: "cube"
32
+ },
33
+ "333bld": {
34
+ id: "333bld",
35
+ label: "3x3 Blindfolded",
36
+ puzzleId: "cube"
37
+ },
38
+ "333fm": {
39
+ id: "333fm",
40
+ label: "3x3 Fewest Moves",
41
+ puzzleId: "cube"
42
+ },
43
+ "333oh": {
44
+ id: "333oh",
45
+ label: "3x3 One-Handed",
46
+ puzzleId: "cube"
47
+ },
48
+ clock: {
49
+ id: "clock",
50
+ label: "Clock",
51
+ puzzleId: "clock"
52
+ },
53
+ minx: {
54
+ id: "minx",
55
+ label: "Megaminx",
56
+ puzzleId: "megaminx"
57
+ },
58
+ pyram: {
59
+ id: "pyram",
60
+ label: "Pyraminx",
61
+ puzzleId: "pyraminx"
62
+ },
63
+ skewb: {
64
+ id: "skewb",
65
+ label: "Skewb",
66
+ puzzleId: "skewb"
67
+ },
68
+ sq1: {
69
+ id: "sq1",
70
+ label: "Square-1",
71
+ puzzleId: "square1"
72
+ },
73
+ "444bld": {
74
+ id: "444bld",
75
+ label: "4x4 Blindfolded",
76
+ puzzleId: "cube"
77
+ },
78
+ "555bld": {
79
+ id: "555bld",
80
+ label: "5x5 Blindfolded",
81
+ puzzleId: "cube"
82
+ },
83
+ "333mbld": {
84
+ id: "333mbld",
85
+ label: "3x3 Multi-Blind",
86
+ puzzleId: "cube"
87
+ }
88
+ });
89
+ //#endregion
90
+ export { WCA_EVENT_INFO };
@@ -0,0 +1,98 @@
1
+ //#region .build/vendor/scramble-puzzle/src/events.d.ts
2
+ declare const WCA_EVENT_IDS: readonly ["333", "222", "444", "555", "666", "777", "333bld", "333fm", "333oh", "clock", "minx", "pyram", "skewb", "sq1", "444bld", "555bld", "333mbld"];
3
+ type WcaEventId = (typeof WCA_EVENT_IDS)[number];
4
+ type PuzzleId = 'cube' | 'clock' | 'megaminx' | 'pyraminx' | 'skewb' | 'square1';
5
+ interface WcaEventInfo {
6
+ readonly id: WcaEventId;
7
+ readonly label: string;
8
+ readonly puzzleId: PuzzleId;
9
+ }
10
+ declare const WCA_EVENT_INFO: Readonly<{
11
+ '333': {
12
+ id: "333";
13
+ label: string;
14
+ puzzleId: "cube";
15
+ };
16
+ '222': {
17
+ id: "222";
18
+ label: string;
19
+ puzzleId: "cube";
20
+ };
21
+ '444': {
22
+ id: "444";
23
+ label: string;
24
+ puzzleId: "cube";
25
+ };
26
+ '555': {
27
+ id: "555";
28
+ label: string;
29
+ puzzleId: "cube";
30
+ };
31
+ '666': {
32
+ id: "666";
33
+ label: string;
34
+ puzzleId: "cube";
35
+ };
36
+ '777': {
37
+ id: "777";
38
+ label: string;
39
+ puzzleId: "cube";
40
+ };
41
+ '333bld': {
42
+ id: "333bld";
43
+ label: string;
44
+ puzzleId: "cube";
45
+ };
46
+ '333fm': {
47
+ id: "333fm";
48
+ label: string;
49
+ puzzleId: "cube";
50
+ };
51
+ '333oh': {
52
+ id: "333oh";
53
+ label: string;
54
+ puzzleId: "cube";
55
+ };
56
+ clock: {
57
+ id: "clock";
58
+ label: string;
59
+ puzzleId: "clock";
60
+ };
61
+ minx: {
62
+ id: "minx";
63
+ label: string;
64
+ puzzleId: "megaminx";
65
+ };
66
+ pyram: {
67
+ id: "pyram";
68
+ label: string;
69
+ puzzleId: "pyraminx";
70
+ };
71
+ skewb: {
72
+ id: "skewb";
73
+ label: string;
74
+ puzzleId: "skewb";
75
+ };
76
+ sq1: {
77
+ id: "sq1";
78
+ label: string;
79
+ puzzleId: "square1";
80
+ };
81
+ '444bld': {
82
+ id: "444bld";
83
+ label: string;
84
+ puzzleId: "cube";
85
+ };
86
+ '555bld': {
87
+ id: "555bld";
88
+ label: string;
89
+ puzzleId: "cube";
90
+ };
91
+ '333mbld': {
92
+ id: "333mbld";
93
+ label: string;
94
+ puzzleId: "cube";
95
+ };
96
+ }>;
97
+ //#endregion
98
+ export { PuzzleId, WCA_EVENT_IDS, WCA_EVENT_INFO, WcaEventId, WcaEventInfo };
@@ -0,0 +1,109 @@
1
+ //#region .build/vendor/scramble-puzzle/src/events.ts
2
+ const WCA_EVENT_IDS = [
3
+ "333",
4
+ "222",
5
+ "444",
6
+ "555",
7
+ "666",
8
+ "777",
9
+ "333bld",
10
+ "333fm",
11
+ "333oh",
12
+ "clock",
13
+ "minx",
14
+ "pyram",
15
+ "skewb",
16
+ "sq1",
17
+ "444bld",
18
+ "555bld",
19
+ "333mbld"
20
+ ];
21
+ const WCA_EVENT_INFO = Object.freeze({
22
+ "333": {
23
+ id: "333",
24
+ label: "3x3x3 Cube",
25
+ puzzleId: "cube"
26
+ },
27
+ "222": {
28
+ id: "222",
29
+ label: "2x2x2 Cube",
30
+ puzzleId: "cube"
31
+ },
32
+ "444": {
33
+ id: "444",
34
+ label: "4x4x4 Cube",
35
+ puzzleId: "cube"
36
+ },
37
+ "555": {
38
+ id: "555",
39
+ label: "5x5x5 Cube",
40
+ puzzleId: "cube"
41
+ },
42
+ "666": {
43
+ id: "666",
44
+ label: "6x6x6 Cube",
45
+ puzzleId: "cube"
46
+ },
47
+ "777": {
48
+ id: "777",
49
+ label: "7x7x7 Cube",
50
+ puzzleId: "cube"
51
+ },
52
+ "333bld": {
53
+ id: "333bld",
54
+ label: "3x3 Blindfolded",
55
+ puzzleId: "cube"
56
+ },
57
+ "333fm": {
58
+ id: "333fm",
59
+ label: "3x3 Fewest Moves",
60
+ puzzleId: "cube"
61
+ },
62
+ "333oh": {
63
+ id: "333oh",
64
+ label: "3x3 One-Handed",
65
+ puzzleId: "cube"
66
+ },
67
+ clock: {
68
+ id: "clock",
69
+ label: "Clock",
70
+ puzzleId: "clock"
71
+ },
72
+ minx: {
73
+ id: "minx",
74
+ label: "Megaminx",
75
+ puzzleId: "megaminx"
76
+ },
77
+ pyram: {
78
+ id: "pyram",
79
+ label: "Pyraminx",
80
+ puzzleId: "pyraminx"
81
+ },
82
+ skewb: {
83
+ id: "skewb",
84
+ label: "Skewb",
85
+ puzzleId: "skewb"
86
+ },
87
+ sq1: {
88
+ id: "sq1",
89
+ label: "Square-1",
90
+ puzzleId: "square1"
91
+ },
92
+ "444bld": {
93
+ id: "444bld",
94
+ label: "4x4 Blindfolded",
95
+ puzzleId: "cube"
96
+ },
97
+ "555bld": {
98
+ id: "555bld",
99
+ label: "5x5 Blindfolded",
100
+ puzzleId: "cube"
101
+ },
102
+ "333mbld": {
103
+ id: "333mbld",
104
+ label: "3x3 Multi-Blind",
105
+ puzzleId: "cube"
106
+ }
107
+ });
108
+ //#endregion
109
+ export { WCA_EVENT_IDS, WCA_EVENT_INFO };
@@ -0,0 +1,22 @@
1
+ import "./events.mjs";
2
+ import "./errors.mjs";
3
+ import "./algorithm.mjs";
4
+ import "./cube/cube-parser.mjs";
5
+ import "./cube/cube-state.mjs";
6
+ import "./cube/cube-definition.mjs";
7
+ import "./clock/clock-parser.mjs";
8
+ import "./clock/clock-state.mjs";
9
+ import "./clock/clock-definition.mjs";
10
+ import "./megaminx/megaminx-parser.mjs";
11
+ import "./megaminx/megaminx-state.mjs";
12
+ import "./megaminx/megaminx-definition.mjs";
13
+ import "./pyraminx/pyraminx-parser.mjs";
14
+ import "./pyraminx/pyraminx-state.mjs";
15
+ import "./pyraminx/pyraminx-definition.mjs";
16
+ import "./skewb/skewb-parser.mjs";
17
+ import "./skewb/skewb-state.mjs";
18
+ import "./skewb/skewb-definition.mjs";
19
+ import "./square1/square1-parser.mjs";
20
+ import "./square1/square1-state.mjs";
21
+ import "./square1/square1-definition.mjs";
22
+ export {};
@@ -0,0 +1,8 @@
1
+ import { PuzzleDefinition } from "../puzzle-definition.mjs";
2
+ import { MegaminxMove } from "./megaminx-parser2.mjs";
3
+ import { MegaminxState } from "./megaminx-state2.mjs";
4
+
5
+ //#region .build/vendor/scramble-puzzle/src/megaminx/megaminx-definition.d.ts
6
+ declare const createMegaminxDefinition: () => PuzzleDefinition<MegaminxState, MegaminxMove>;
7
+ //#endregion
8
+ export { createMegaminxDefinition };
@@ -0,0 +1,18 @@
1
+ import { applyAlgorithm } from "../algorithm.mjs";
2
+ import { parseMegaminxAlgorithm } from "./megaminx-parser.mjs";
3
+ import { applyMegaminxMove, areMegaminxStatesEqual, createSolvedMegaminxState } from "./megaminx-state.mjs";
4
+ //#region ../scramble-puzzle/src/megaminx/megaminx-definition.ts
5
+ const createMegaminxDefinition = () => {
6
+ const definition = {
7
+ id: "megaminx",
8
+ eventIds: ["minx"],
9
+ createSolvedState: createSolvedMegaminxState,
10
+ parseAlgorithm: parseMegaminxAlgorithm,
11
+ applyMove: applyMegaminxMove,
12
+ applyAlgorithm: (state, algorithm) => applyAlgorithm(definition, state, algorithm),
13
+ isSolved: (state) => areMegaminxStatesEqual(state, createSolvedMegaminxState())
14
+ };
15
+ return definition;
16
+ };
17
+ //#endregion
18
+ export { createMegaminxDefinition };
@@ -0,0 +1,18 @@
1
+ import { applyAlgorithm } from "../algorithm2.mjs";
2
+ import { parseMegaminxAlgorithm } from "./megaminx-parser2.mjs";
3
+ import { applyMegaminxMove, areMegaminxStatesEqual, createSolvedMegaminxState } from "./megaminx-state2.mjs";
4
+ //#region .build/vendor/scramble-puzzle/src/megaminx/megaminx-definition.ts
5
+ const createMegaminxDefinition = () => {
6
+ const definition = {
7
+ id: "megaminx",
8
+ eventIds: ["minx"],
9
+ createSolvedState: createSolvedMegaminxState,
10
+ parseAlgorithm: parseMegaminxAlgorithm,
11
+ applyMove: applyMegaminxMove,
12
+ applyAlgorithm: (state, algorithm) => applyAlgorithm(definition, state, algorithm),
13
+ isSolved: (state) => areMegaminxStatesEqual(state, createSolvedMegaminxState())
14
+ };
15
+ return definition;
16
+ };
17
+ //#endregion
18
+ export { createMegaminxDefinition };
@@ -0,0 +1,5 @@
1
+ //#region ../scramble-puzzle/src/megaminx/megaminx-parser.d.ts
2
+ declare const MEGAMINX_FACES: readonly ["U", "BL", "BR", "R", "F", "L", "D", "DR", "DBR", "B", "DBL", "DL"];
3
+ type MegaminxFace = (typeof MEGAMINX_FACES)[number];
4
+ //#endregion
5
+ export { MegaminxFace };