cubing 0.63.4 → 0.63.5
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/dist/bin/chunks/{chunk-E6RYEKYL.js → chunk-22VWCGBC.js} +2 -2
- package/dist/bin/order.js +1 -1
- package/dist/bin/puzzle-geometry-bin.js +1 -1
- package/dist/bin/scramble.js +1 -1
- package/dist/bin/svg.js +1 -1
- package/dist/lib/cubing/bluetooth/index.js +3 -3
- package/dist/lib/cubing/chunks/{chunk-WBMKMQAL.js → chunk-A7FK4XKU.js} +2 -2
- package/dist/lib/cubing/chunks/{chunk-WBMKMQAL.js.map → chunk-A7FK4XKU.js.map} +1 -1
- package/dist/lib/cubing/chunks/{chunk-VYAO5FCM.js → chunk-FUAADKXE.js} +2 -2
- package/dist/lib/cubing/chunks/{chunk-XVZLWT3A.js → chunk-H5KMIDAF.js} +4 -4
- package/dist/lib/cubing/chunks/{chunk-XVZLWT3A.js.map → chunk-H5KMIDAF.js.map} +1 -1
- package/dist/lib/cubing/chunks/{chunk-S74APGTK.js → chunk-MQSQDKWH.js} +2 -2
- package/dist/lib/cubing/chunks/{chunk-JCCXEYXU.js → chunk-UEUJSZTX.js} +2 -2
- package/dist/lib/cubing/chunks/{chunk-53SI7XS4.js → chunk-WMKAKGVZ.js} +34 -15
- package/dist/lib/cubing/chunks/chunk-WMKAKGVZ.js.map +7 -0
- package/dist/lib/cubing/chunks/{chunk-LD4XJTCU.js → chunk-YR72E7KZ.js} +3 -3
- package/dist/lib/cubing/chunks/{inside-VUJSPBRA.js → inside-LSPIPZY2.js} +9 -9
- package/dist/lib/cubing/chunks/{search-dynamic-sgs-side-events-LHAMZP5J.js → search-dynamic-sgs-side-events-WORUZVF5.js} +3 -3
- package/dist/lib/cubing/chunks/{search-dynamic-sgs-unofficial-GXKMVR4W.js → search-dynamic-sgs-unofficial-5JQKPNG2.js} +3 -3
- package/dist/lib/cubing/chunks/{search-dynamic-solve-4x4x4-N2X3RMYU.js → search-dynamic-solve-4x4x4-KIH4YATU.js} +5 -5
- package/dist/lib/cubing/chunks/search-worker-entry.js +1 -1
- package/dist/lib/cubing/chunks/{twisty-dynamic-3d-LSRGWTXG.js → twisty-dynamic-3d-4BEQ76PB.js} +4 -4
- package/dist/lib/cubing/notation/index.js +2 -2
- package/dist/lib/cubing/{outside-CwNOEuJJ.d.ts → outside-C2ODxIX_.d.ts} +1 -0
- package/dist/lib/cubing/protocol/index.js +2 -2
- package/dist/lib/cubing/puzzles/index.js +2 -2
- package/dist/lib/cubing/scramble/index.d.ts +1 -1
- package/dist/lib/cubing/scramble/index.js +4 -4
- package/dist/lib/cubing/search/index.d.ts +1 -1
- package/dist/lib/cubing/search/index.js +4 -4
- package/dist/lib/cubing/twisty/index.js +5 -5
- package/dist/lib/cubing/twisty/index.js.map +2 -2
- package/experimental-json-schema/kpuzzle/KPatternData.schema.json +27 -29
- package/experimental-json-schema/kpuzzle/KPuzzleDefinition.schema.json +82 -78
- package/experimental-json-schema/kpuzzle/KTransformationData.schema.json +21 -22
- package/package.json +9 -4
- package/dist/lib/cubing/chunks/chunk-53SI7XS4.js.map +0 -7
- /package/dist/bin/chunks/{chunk-E6RYEKYL.js.map → chunk-22VWCGBC.js.map} +0 -0
- /package/dist/lib/cubing/chunks/{chunk-VYAO5FCM.js.map → chunk-FUAADKXE.js.map} +0 -0
- /package/dist/lib/cubing/chunks/{chunk-S74APGTK.js.map → chunk-MQSQDKWH.js.map} +0 -0
- /package/dist/lib/cubing/chunks/{chunk-JCCXEYXU.js.map → chunk-UEUJSZTX.js.map} +0 -0
- /package/dist/lib/cubing/chunks/{chunk-LD4XJTCU.js.map → chunk-YR72E7KZ.js.map} +0 -0
- /package/dist/lib/cubing/chunks/{inside-VUJSPBRA.js.map → inside-LSPIPZY2.js.map} +0 -0
- /package/dist/lib/cubing/chunks/{search-dynamic-sgs-side-events-LHAMZP5J.js.map → search-dynamic-sgs-side-events-WORUZVF5.js.map} +0 -0
- /package/dist/lib/cubing/chunks/{search-dynamic-sgs-unofficial-GXKMVR4W.js.map → search-dynamic-sgs-unofficial-5JQKPNG2.js.map} +0 -0
- /package/dist/lib/cubing/chunks/{search-dynamic-solve-4x4x4-N2X3RMYU.js.map → search-dynamic-solve-4x4x4-KIH4YATU.js.map} +0 -0
- /package/dist/lib/cubing/chunks/{twisty-dynamic-3d-LSRGWTXG.js.map → twisty-dynamic-3d-4BEQ76PB.js.map} +0 -0
|
@@ -1,34 +1,32 @@
|
|
|
1
1
|
{
|
|
2
|
-
"$schema": "
|
|
3
|
-
"
|
|
4
|
-
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"type": "object",
|
|
4
|
+
"propertyNames": {
|
|
5
|
+
"type": "string"
|
|
5
6
|
},
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
"type": "array"
|
|
14
|
-
},
|
|
15
|
-
"orientationMod": {
|
|
16
|
-
"description": "Each piece may have an \"orientation mod\" that means \"the orientation of\nthis piece is known mod [value]\".\n\nSuppose `.numOrientations` for this orbit has a value of N. This is\nconsidered the default value for the orientation mod of each piece in the\norbit.\n\n- Each entry must be one of the following:\n - A proper divisor of N.\n - For example: if N is 12, then one of: 1, 2, 3, 6\n - The special value 0, indicating the default value (N).\n - This indicates that the orientation of a piece is fully known, i.e.\n that its \"orientation mod\" is the default value (N). However, such a\n value is recorded as 0 instead of N, in order to make it simpler to\n implement and debug pattern logic involving the default value.\n- If `.orientationMod[i]` is a proper divisor of N (i.e. not 0), then\n `.orientation[i]` must be less than `.orientationMod[i]`. That is, the\n orientation values must be individually \"normalized\" for each piece.\n- If the `orientationMod` field is not present, then every piece is\n considered to have the default value for its \"orientation mod\".\n\nFor a \"real-world\" example of this concept, consider a traditional analog\n12-hour clock dial, like one that might hang on the wall in a school room.\nAlthough there are 24 hours in a day, A.M. and P.M. times are not\ndistinguishable on such a clock. Since 3:00 (AM) and 15:00 are not\ndistinguishable, we would read either of those times as 3:00 with an\nimplicit \"orientation mod\" of 12.\n\nFor most puzzles, however, we care about \"visual\" indistinguishability\nrather than \"temporal\" indistinguishability. To adapt the previous example,\nimagine a 24-hour clock with 24 hour marks around the dial, but where the\nhour hand is symmetric and points equally at the current hour as well as\nits diametic opposite (like a compass needle but painted all in one color).\nThis has the same set of \"valid patterns\" as a normal 12-hour clock. Such a\nclock also has an \"orientation mod\" of 12, but where the multiples of the\nmodulus have been \"unfolded\" to show their full symmetry instead of being\nimplicit.\n\nFor a non-trivial puzzle example, consider Eitan's FisherTwist, a shape mod\nof the 3x3x3 cube:\nhttps://www.hknowstore.com/locale/en-US/item.aspx?corpname=nowstore&itemid=97eb4e89-367e-4d02-b7f0-34e5e7f3cd12\n\n- The 4 equatorial centers have C₂ symmetry — it is possible to rotate any\n of these centers 180° without a visible change to the state. This means\n that the possible orientations \"loop\" after incrementing the orientation\n by 2 (two turns clockwise), and therefore the \"orientation mod\" of a\n given piece is only 2.\n - If we apply a counter-clockwise rotation to one of these centers, the\n transformation applies an orientation of 3. But the net orientation is\n recorded as a normalized value of 1 instead, because 3 (mod 2) ≡ 1 (mod\n 2).\n- The 2 polar centers (U and D) have no distinguishable rotations. This\n means that their orientation is \"known mod 1\" — any transformation of one\n of these centers is indistinguishable from another transformation of the\n same center, and all of them are mapped to a value of 0 (the only\n possible value that exists mod 1).\n\nFor 3x3x3:\n\n- When solving a normal 3x3x3, center orientations are conventionally\n ignored. This is similar to the polar center case for Eitan's\n FisherTwist, and the \"orientation mod\" of each piece is 1. This is also\n the core motivating use case.\n- For a supercube\n (https://experiments.cubing.net/cubing.js/twisty/supercube.html) or the\n general case of a \"picture cube\", all four center orientations are\n distinguishable for every center. This means all centers have the default\n orientation mod of 4. As documented above, this can be recorded with a\n `.orientationMod` of `[0, 0, 0, 0, 0, 0]`, or equivalently by omitting\n the `.orientationMod` field.\n- When modeling a real 3x3x3 speedcube, it is common to have a logo on a\n single sticker. If you want to model the exact visually distinguishable\n states of such a puzzles, it is possible to use an `.orientationMod` such\n as `[0, 1, 1, 1, 1, 1]`. For example, this can make it easy to find an\n alg for a given case \"while keeping the logo the same\", without placing\n more restrictions on other centers (which could make the search slower or\n produce longer solutions).\n\nFor those with a mathematical background, you may notice a relationship to\nthe concept of a coset (https://en.wikipedia.org/wiki/Coset). For example,\nconsider the group of patterns of a `KPuzzle` (without indistinguishable\npieces) generated by a set of transformations. We can assign each set of\npiece orbits an orientation mod value (which must be identical for all\nconstituent pieces of the same orbit). Each such choice generates a set of\nvalid `KPattern`s that forms a subgroup, and each set of valid `.orientation`\nvalues defines one coset of this set. However, note that the set of valid\n`KPattern`s does *not* form a group when there are any pieces with different\n`.orientationMod` values that share an orbit.\n\n--------\n\nNote that the concept of \"orientation mod\" exclusively applies to `KPattern`,\nnot `KTransformation`. If we tried to apply the orientation mod\ncalculations to the *transformations* of Eitan's FisherTwist, then `SWAP =\n[U, M' E2 M]` would be indistinguishable from the identity. This would mean\nthat if we calculated `SWAP` and then used this calculation for `S SWAP\nS'`, then we would conclude that it has no net effect. However, `S SWAP S'`\ndoes *not* have the same effect as doing nothing — it visibly rotates the L\nand R centers! (In mathematical terms: the set of `KTransformation`s would\nnot form a valid set of semigroup actions, due to broken associativity.)\n\nAlthough there are times that we could theoretically save some time/space\nby ignoring some information when it's not needed for working with certain\n`KTransformation`s (e.g. ignoring all center orientations for 3x3x3), it is\nmore practical for each `KTransformation` to always track the full range\nfor each piece's `.orientation`. For example:\n\n- This is simpler, both conceptually and in code.\n- This allows changing the set of moves for a puzzle, without recalculating\n cached transformations or certain lookup tables (useful for alg\n searches).\n- This allows swapping out a normal 3x3x3 in a `<twisty-player>` for a\n picture cube, without re-calculating the center orientations of the\n current alg.\n\nThese use cases may not be strictly \"necessary\", but the opposite behaviour\nmight be surprising or frustrating if someone does not expect it. So we\nimplement it this way.\n\nInformally, the `KTransformation` has the full responsibility for tracking\n\"what really happens\" — even if the effect is invisible in some cases,\nwhile the `KPattern` tracks both what \"is\" and what \"isn't\" known.",
|
|
17
|
-
"items": {
|
|
18
|
-
"type": "number"
|
|
19
|
-
},
|
|
20
|
-
"type": "array"
|
|
21
|
-
},
|
|
22
|
-
"pieces": {
|
|
23
|
-
"items": {
|
|
24
|
-
"type": "number"
|
|
25
|
-
},
|
|
26
|
-
"type": "array"
|
|
7
|
+
"additionalProperties": {
|
|
8
|
+
"type": "object",
|
|
9
|
+
"properties": {
|
|
10
|
+
"pieces": {
|
|
11
|
+
"type": "array",
|
|
12
|
+
"items": {
|
|
13
|
+
"type": "number"
|
|
27
14
|
}
|
|
28
15
|
},
|
|
29
|
-
"
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
16
|
+
"orientation": {
|
|
17
|
+
"type": "array",
|
|
18
|
+
"items": {
|
|
19
|
+
"type": "number"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"orientationMod": {
|
|
23
|
+
"type": "array",
|
|
24
|
+
"items": {
|
|
25
|
+
"type": "number"
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"required": ["pieces", "orientation"],
|
|
30
|
+
"additionalProperties": false
|
|
31
|
+
}
|
|
34
32
|
}
|
|
@@ -1,97 +1,101 @@
|
|
|
1
1
|
{
|
|
2
|
-
"$schema": "
|
|
3
|
-
"
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"type": "object",
|
|
4
|
+
"properties": {
|
|
5
|
+
"name": {
|
|
6
|
+
"type": "string"
|
|
7
|
+
},
|
|
8
|
+
"orbits": {
|
|
9
|
+
"type": "array",
|
|
10
|
+
"items": {
|
|
11
|
+
"type": "object",
|
|
12
|
+
"properties": {
|
|
13
|
+
"orbitName": {
|
|
14
|
+
"type": "string"
|
|
9
15
|
},
|
|
10
|
-
"
|
|
11
|
-
},
|
|
12
|
-
"orientationMod": {
|
|
13
|
-
"description": "Each piece may have an \"orientation mod\" that means \"the orientation of\nthis piece is known mod [value]\".\n\nSuppose `.numOrientations` for this orbit has a value of N. This is\nconsidered the default value for the orientation mod of each piece in the\norbit.\n\n- Each entry must be one of the following:\n - A proper divisor of N.\n - For example: if N is 12, then one of: 1, 2, 3, 6\n - The special value 0, indicating the default value (N).\n - This indicates that the orientation of a piece is fully known, i.e.\n that its \"orientation mod\" is the default value (N). However, such a\n value is recorded as 0 instead of N, in order to make it simpler to\n implement and debug pattern logic involving the default value.\n- If `.orientationMod[i]` is a proper divisor of N (i.e. not 0), then\n `.orientation[i]` must be less than `.orientationMod[i]`. That is, the\n orientation values must be individually \"normalized\" for each piece.\n- If the `orientationMod` field is not present, then every piece is\n considered to have the default value for its \"orientation mod\".\n\nFor a \"real-world\" example of this concept, consider a traditional analog\n12-hour clock dial, like one that might hang on the wall in a school room.\nAlthough there are 24 hours in a day, A.M. and P.M. times are not\ndistinguishable on such a clock. Since 3:00 (AM) and 15:00 are not\ndistinguishable, we would read either of those times as 3:00 with an\nimplicit \"orientation mod\" of 12.\n\nFor most puzzles, however, we care about \"visual\" indistinguishability\nrather than \"temporal\" indistinguishability. To adapt the previous example,\nimagine a 24-hour clock with 24 hour marks around the dial, but where the\nhour hand is symmetric and points equally at the current hour as well as\nits diametic opposite (like a compass needle but painted all in one color).\nThis has the same set of \"valid patterns\" as a normal 12-hour clock. Such a\nclock also has an \"orientation mod\" of 12, but where the multiples of the\nmodulus have been \"unfolded\" to show their full symmetry instead of being\nimplicit.\n\nFor a non-trivial puzzle example, consider Eitan's FisherTwist, a shape mod\nof the 3x3x3 cube:\nhttps://www.hknowstore.com/locale/en-US/item.aspx?corpname=nowstore&itemid=97eb4e89-367e-4d02-b7f0-34e5e7f3cd12\n\n- The 4 equatorial centers have C₂ symmetry — it is possible to rotate any\n of these centers 180° without a visible change to the state. This means\n that the possible orientations \"loop\" after incrementing the orientation\n by 2 (two turns clockwise), and therefore the \"orientation mod\" of a\n given piece is only 2.\n - If we apply a counter-clockwise rotation to one of these centers, the\n transformation applies an orientation of 3. But the net orientation is\n recorded as a normalized value of 1 instead, because 3 (mod 2) ≡ 1 (mod\n 2).\n- The 2 polar centers (U and D) have no distinguishable rotations. This\n means that their orientation is \"known mod 1\" — any transformation of one\n of these centers is indistinguishable from another transformation of the\n same center, and all of them are mapped to a value of 0 (the only\n possible value that exists mod 1).\n\nFor 3x3x3:\n\n- When solving a normal 3x3x3, center orientations are conventionally\n ignored. This is similar to the polar center case for Eitan's\n FisherTwist, and the \"orientation mod\" of each piece is 1. This is also\n the core motivating use case.\n- For a supercube\n (https://experiments.cubing.net/cubing.js/twisty/supercube.html) or the\n general case of a \"picture cube\", all four center orientations are\n distinguishable for every center. This means all centers have the default\n orientation mod of 4. As documented above, this can be recorded with a\n `.orientationMod` of `[0, 0, 0, 0, 0, 0]`, or equivalently by omitting\n the `.orientationMod` field.\n- When modeling a real 3x3x3 speedcube, it is common to have a logo on a\n single sticker. If you want to model the exact visually distinguishable\n states of such a puzzles, it is possible to use an `.orientationMod` such\n as `[0, 1, 1, 1, 1, 1]`. For example, this can make it easy to find an\n alg for a given case \"while keeping the logo the same\", without placing\n more restrictions on other centers (which could make the search slower or\n produce longer solutions).\n\nFor those with a mathematical background, you may notice a relationship to\nthe concept of a coset (https://en.wikipedia.org/wiki/Coset). For example,\nconsider the group of patterns of a `KPuzzle` (without indistinguishable\npieces) generated by a set of transformations. We can assign each set of\npiece orbits an orientation mod value (which must be identical for all\nconstituent pieces of the same orbit). Each such choice generates a set of\nvalid `KPattern`s that forms a subgroup, and each set of valid `.orientation`\nvalues defines one coset of this set. However, note that the set of valid\n`KPattern`s does *not* form a group when there are any pieces with different\n`.orientationMod` values that share an orbit.\n\n--------\n\nNote that the concept of \"orientation mod\" exclusively applies to `KPattern`,\nnot `KTransformation`. If we tried to apply the orientation mod\ncalculations to the *transformations* of Eitan's FisherTwist, then `SWAP =\n[U, M' E2 M]` would be indistinguishable from the identity. This would mean\nthat if we calculated `SWAP` and then used this calculation for `S SWAP\nS'`, then we would conclude that it has no net effect. However, `S SWAP S'`\ndoes *not* have the same effect as doing nothing — it visibly rotates the L\nand R centers! (In mathematical terms: the set of `KTransformation`s would\nnot form a valid set of semigroup actions, due to broken associativity.)\n\nAlthough there are times that we could theoretically save some time/space\nby ignoring some information when it's not needed for working with certain\n`KTransformation`s (e.g. ignoring all center orientations for 3x3x3), it is\nmore practical for each `KTransformation` to always track the full range\nfor each piece's `.orientation`. For example:\n\n- This is simpler, both conceptually and in code.\n- This allows changing the set of moves for a puzzle, without recalculating\n cached transformations or certain lookup tables (useful for alg\n searches).\n- This allows swapping out a normal 3x3x3 in a `<twisty-player>` for a\n picture cube, without re-calculating the center orientations of the\n current alg.\n\nThese use cases may not be strictly \"necessary\", but the opposite behaviour\nmight be surprising or frustrating if someone does not expect it. So we\nimplement it this way.\n\nInformally, the `KTransformation` has the full responsibility for tracking\n\"what really happens\" — even if the effect is invisible in some cases,\nwhile the `KPattern` tracks both what \"is\" and what \"isn't\" known.",
|
|
14
|
-
"items": {
|
|
16
|
+
"numPieces": {
|
|
15
17
|
"type": "number"
|
|
16
18
|
},
|
|
17
|
-
"
|
|
18
|
-
},
|
|
19
|
-
"pieces": {
|
|
20
|
-
"items": {
|
|
19
|
+
"numOrientations": {
|
|
21
20
|
"type": "number"
|
|
22
|
-
}
|
|
23
|
-
"type": "array"
|
|
24
|
-
}
|
|
25
|
-
},
|
|
26
|
-
"required": ["orientation", "pieces"],
|
|
27
|
-
"type": "object"
|
|
28
|
-
},
|
|
29
|
-
"KPuzzleOrbitDefinition": {
|
|
30
|
-
"properties": {
|
|
31
|
-
"numOrientations": {
|
|
32
|
-
"type": "number"
|
|
33
|
-
},
|
|
34
|
-
"numPieces": {
|
|
35
|
-
"type": "number"
|
|
21
|
+
}
|
|
36
22
|
},
|
|
37
|
-
"
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
},
|
|
41
|
-
"required": ["numOrientations", "numPieces", "orbitName"],
|
|
42
|
-
"type": "object"
|
|
23
|
+
"required": ["orbitName", "numPieces", "numOrientations"],
|
|
24
|
+
"additionalProperties": false
|
|
25
|
+
}
|
|
43
26
|
},
|
|
44
|
-
"KTransformationOrbitData": {
|
|
45
|
-
"properties": {
|
|
46
|
-
"orientationDelta": {
|
|
47
|
-
"items": {
|
|
48
|
-
"type": "number"
|
|
49
|
-
},
|
|
50
|
-
"type": "array"
|
|
51
|
-
},
|
|
52
|
-
"permutation": {
|
|
53
|
-
"items": {
|
|
54
|
-
"type": "number"
|
|
55
|
-
},
|
|
56
|
-
"type": "array"
|
|
57
|
-
}
|
|
58
|
-
},
|
|
59
|
-
"required": ["orientationDelta", "permutation"],
|
|
60
|
-
"type": "object"
|
|
61
|
-
}
|
|
62
|
-
},
|
|
63
|
-
"properties": {
|
|
64
27
|
"defaultPattern": {
|
|
65
|
-
"
|
|
66
|
-
|
|
67
|
-
},
|
|
68
|
-
"type": "object"
|
|
69
|
-
},
|
|
70
|
-
"derivedMoves": {
|
|
71
|
-
"additionalProperties": {
|
|
28
|
+
"type": "object",
|
|
29
|
+
"propertyNames": {
|
|
72
30
|
"type": "string"
|
|
73
31
|
},
|
|
74
|
-
"
|
|
32
|
+
"additionalProperties": {
|
|
33
|
+
"type": "object",
|
|
34
|
+
"properties": {
|
|
35
|
+
"pieces": {
|
|
36
|
+
"type": "array",
|
|
37
|
+
"items": {
|
|
38
|
+
"type": "number"
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
"orientation": {
|
|
42
|
+
"type": "array",
|
|
43
|
+
"items": {
|
|
44
|
+
"type": "number"
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"orientationMod": {
|
|
48
|
+
"type": "array",
|
|
49
|
+
"items": {
|
|
50
|
+
"type": "number"
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"required": ["pieces", "orientation"],
|
|
55
|
+
"additionalProperties": false
|
|
56
|
+
}
|
|
75
57
|
},
|
|
76
58
|
"moves": {
|
|
59
|
+
"type": "object",
|
|
60
|
+
"propertyNames": {
|
|
61
|
+
"type": "string"
|
|
62
|
+
},
|
|
77
63
|
"additionalProperties": {
|
|
78
|
-
"
|
|
79
|
-
|
|
64
|
+
"type": "object",
|
|
65
|
+
"propertyNames": {
|
|
66
|
+
"type": "string"
|
|
80
67
|
},
|
|
81
|
-
"
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
68
|
+
"additionalProperties": {
|
|
69
|
+
"type": "object",
|
|
70
|
+
"properties": {
|
|
71
|
+
"permutation": {
|
|
72
|
+
"type": "array",
|
|
73
|
+
"items": {
|
|
74
|
+
"type": "number"
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
"orientationDelta": {
|
|
78
|
+
"type": "array",
|
|
79
|
+
"items": {
|
|
80
|
+
"type": "number"
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
"required": ["permutation", "orientationDelta"],
|
|
85
|
+
"additionalProperties": false
|
|
86
|
+
}
|
|
87
|
+
}
|
|
87
88
|
},
|
|
88
|
-
"
|
|
89
|
-
"
|
|
90
|
-
|
|
89
|
+
"derivedMoves": {
|
|
90
|
+
"type": "object",
|
|
91
|
+
"propertyNames": {
|
|
92
|
+
"type": "string"
|
|
91
93
|
},
|
|
92
|
-
"
|
|
94
|
+
"additionalProperties": {
|
|
95
|
+
"type": "string"
|
|
96
|
+
}
|
|
93
97
|
}
|
|
94
98
|
},
|
|
95
|
-
"required": ["
|
|
96
|
-
"
|
|
99
|
+
"required": ["name", "orbits", "defaultPattern", "moves"],
|
|
100
|
+
"additionalProperties": false
|
|
97
101
|
}
|
|
@@ -1,27 +1,26 @@
|
|
|
1
1
|
{
|
|
2
|
-
"$schema": "
|
|
3
|
-
"
|
|
4
|
-
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"type": "object",
|
|
4
|
+
"propertyNames": {
|
|
5
|
+
"type": "string"
|
|
5
6
|
},
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
"type": "array"
|
|
14
|
-
},
|
|
15
|
-
"permutation": {
|
|
16
|
-
"items": {
|
|
17
|
-
"type": "number"
|
|
18
|
-
},
|
|
19
|
-
"type": "array"
|
|
7
|
+
"additionalProperties": {
|
|
8
|
+
"type": "object",
|
|
9
|
+
"properties": {
|
|
10
|
+
"permutation": {
|
|
11
|
+
"type": "array",
|
|
12
|
+
"items": {
|
|
13
|
+
"type": "number"
|
|
20
14
|
}
|
|
21
15
|
},
|
|
22
|
-
"
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
16
|
+
"orientationDelta": {
|
|
17
|
+
"type": "array",
|
|
18
|
+
"items": {
|
|
19
|
+
"type": "number"
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
"required": ["permutation", "orientationDelta"],
|
|
24
|
+
"additionalProperties": false
|
|
25
|
+
}
|
|
27
26
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cubing",
|
|
3
|
-
"version": "0.63.
|
|
3
|
+
"version": "0.63.5",
|
|
4
4
|
"description": "A collection of JavaScript cubing libraries.",
|
|
5
5
|
"author": "The js.cubing.net team",
|
|
6
6
|
"license": "MPL-2.0 OR GPL-3.0-or-later",
|
|
@@ -74,11 +74,12 @@
|
|
|
74
74
|
"type-fest": "^5.2.0"
|
|
75
75
|
},
|
|
76
76
|
"devDependencies": {
|
|
77
|
-
"@biomejs/biome": "^2.5.
|
|
77
|
+
"@biomejs/biome": "^2.5.13",
|
|
78
78
|
"@cubing/comlink-everywhere": ">=0.1.2",
|
|
79
79
|
"@cubing/deploy": ">=0.4.11",
|
|
80
80
|
"@cubing/dev-config": ">=0.10.1",
|
|
81
81
|
"@esm-bundle/chai": "^4.3.4-fix.0",
|
|
82
|
+
"@fontsource/ubuntu": "^5.3.0",
|
|
82
83
|
"@schemastore/package": "^0.0.10",
|
|
83
84
|
"@types/bun": "^1.3.14",
|
|
84
85
|
"@types/chai": "^5.0.0",
|
|
@@ -100,7 +101,8 @@
|
|
|
100
101
|
"playwright": "^1.58.0",
|
|
101
102
|
"printable-shell-command": "^5.3.0",
|
|
102
103
|
"tsdown": "^0.21.10",
|
|
103
|
-
"typedoc": "^0.28.18"
|
|
104
|
+
"typedoc": "^0.28.18",
|
|
105
|
+
"zod": "^4.6.2"
|
|
104
106
|
},
|
|
105
107
|
"files": [
|
|
106
108
|
"./dist/bin/",
|
|
@@ -135,5 +137,8 @@
|
|
|
135
137
|
"fromLocalDir": "./dist/sites/experiments.cubing.net/cubing.js/"
|
|
136
138
|
}
|
|
137
139
|
},
|
|
138
|
-
"$schema": "./node_modules/@cubing/deploy/config-schema.package.json"
|
|
140
|
+
"$schema": "./node_modules/@cubing/deploy/config-schema.package.json",
|
|
141
|
+
"patchedDependencies": {
|
|
142
|
+
"bun-types@1.3.14": "patches/bun-types@1.3.14.patch"
|
|
143
|
+
}
|
|
139
144
|
}
|
|
@@ -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 \"@cubing/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.setDebugForceTwipsForScrambles(\n searchOutsideDebugGlobals.forceTwipsForScrambles,\n );\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 forceTwipsForScrambles: 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 forceTwipsForScrambles: false,\n showWorkerInstantiationWarnings: true,\n prioritizeEsbuildWorkaroundForWorkerInstantiation: false,\n allowDerivedScrambles: false,\n};\n\nexport function setSearchDebug(\n options: Partial<SearchOutsideDebugGlobals>,\n): void {\n const { logPerf, forceTwipsForScrambles, scramblePrefetchLevel } = options;\n if (typeof logPerf !== \"undefined\") {\n searchOutsideDebugGlobals.logPerf = logPerf;\n void mapToAllWorkers((worker) => worker.setDebugMeasurePerf(logPerf));\n }\n if (typeof forceTwipsForScrambles !== \"undefined\") {\n searchOutsideDebugGlobals.forceTwipsForScrambles = forceTwipsForScrambles;\n void mapToAllWorkers((worker) =>\n worker.setDebugMeasurePerf(forceTwipsForScrambles),\n );\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
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|