cubing 0.43.0 → 0.43.2

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.
@@ -1,11 +1,20 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  // src/bin/scramble.ts
4
- import yargs from "yargs";
5
4
  import { eventInfo } from "cubing/puzzles";
6
5
  import { randomScrambleForEvent } from "cubing/scramble";
7
6
  import { setSearchDebug } from "cubing/search";
8
- import { hideBin } from "yargs/helpers";
7
+ var [yargs, hideBin] = await (async () => {
8
+ try {
9
+ const yargs2 = (await import("yargs")).default;
10
+ const { hideBin: hideBin2 } = await import("yargs/helpers");
11
+ return [yargs2, hideBin2];
12
+ } catch (e) {
13
+ throw new Error(
14
+ "Could not import `yargs`, which is not automatically installed as a regular dependency of `cubing`. Please run `npm install yargs` (or the equivalent) separately."
15
+ );
16
+ }
17
+ })();
9
18
  var argv = await yargs(
10
19
  // TODO: `hideBin` just shows `bun` in `bun`.
11
20
  hideBin(process.argv)
@@ -21,11 +30,16 @@ var argv = await yargs(
21
30
  describe: "Output format.",
22
31
  choices: ["text", "link", "json-text"],
23
32
  alias: "f"
33
+ }).option("text", {
34
+ type: "boolean",
35
+ describe: "Convenient shorthand for `--format text`.",
36
+ alias: "t"
24
37
  }).positional("eventID", {
25
38
  describe: "WCA or unofficial event ID",
26
39
  type: "string"
27
40
  }).version(false).demand(1).strict().argv;
28
41
  var eventID = argv._[0];
42
+ var format = argv.format ?? (argv.text ? "text" : void 0);
29
43
  setSearchDebug({ logPerf: false, showWorkerInstantiationWarnings: false });
30
44
  function scrambleText(scramble) {
31
45
  return scramble.toString();
@@ -58,9 +72,9 @@ var JSONListPrinter = class {
58
72
  console.log("\n]");
59
73
  }
60
74
  };
61
- if (argv.format !== "json-text" && argv.amount === 1) {
75
+ if (format !== "json-text" && argv.amount === 1) {
62
76
  const scramble = await randomScrambleForEvent(eventID);
63
- switch (argv.format) {
77
+ switch (format) {
64
78
  case "text": {
65
79
  console.log(scrambleText(scramble));
66
80
  break;
@@ -81,10 +95,10 @@ if (argv.format !== "json-text" && argv.amount === 1) {
81
95
  }
82
96
  }
83
97
  } else {
84
- const jsonListPrinter = argv.format === "json-text" ? new JSONListPrinter() : void 0;
98
+ const jsonListPrinter = format === "json-text" ? new JSONListPrinter() : void 0;
85
99
  for (let i = 0; i < argv.amount; i++) {
86
100
  const scramble = await randomScrambleForEvent(eventID);
87
- switch (argv.format) {
101
+ switch (format) {
88
102
  case "text": {
89
103
  console.log(`// Scramble #${i + 1}`);
90
104
  console.log(`${scrambleText(scramble)}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/bin/scramble.ts"],
4
- "sourcesContent": ["// To run this file directly:\n// bun run src/bin/scramble.ts -- 333\n\nimport yargs from \"yargs\";\nimport { eventInfo } from \"cubing/puzzles\";\nimport { randomScrambleForEvent } from \"cubing/scramble\";\nimport { setSearchDebug } from \"cubing/search\";\nimport { hideBin } from \"yargs/helpers\";\nimport type { Alg } from \"cubing/alg\";\n\n// TODO: completions for `bash`, `zsh`, and `fish`: https://github.com/loilo/completarr\n\n// @ts-ignore: Top-level await is okay because this is not part of the main library.\nconst argv = await yargs(\n // TODO: `hideBin` just shows `bun` in `bun`.\n hideBin(process.argv),\n)\n .parserConfiguration({\n // Workaround for https://github.com/yargs/yargs/issues/2359\n \"parse-positional-numbers\": false,\n })\n .option(\"amount\", {\n describe: \"Output format.\",\n default: 1,\n type: \"number\",\n alias: \"n\",\n })\n .option(\"format\", {\n describe: \"Output format.\",\n choices: [\"text\", \"link\", \"json-text\"],\n alias: \"f\",\n })\n .positional(\"eventID\", {\n describe: \"WCA or unofficial event ID\",\n type: \"string\",\n })\n .version(false) // TODO: why doesn't `yargs` get the right version in `bun` or for the `dist` bin?\n .demand(1)\n .strict().argv;\n\nconst eventID = argv._[0] as string;\n\nsetSearchDebug({ logPerf: false, showWorkerInstantiationWarnings: false });\n\nfunction scrambleText(scramble: Alg): string {\n return scramble.toString();\n}\n\nfunction scrambleLink(scramble: Alg): string {\n const url = new URL(\"https://alpha.twizzle.net/edit/\");\n const puzzleID = eventInfo(eventID)?.puzzleID;\n puzzleID && url.searchParams.set(\"puzzle\", puzzleID);\n url.searchParams.set(\"alg\", scramble.toString());\n return url.toString();\n}\n\nclass JSONListPrinter<T> {\n #finished = false;\n #firstValuePrintedAlready = false;\n constructor() {\n process.stdout.write(\"[\\n \");\n }\n\n push(value: T) {\n if (this.#firstValuePrintedAlready) {\n process.stdout.write(\",\\n \");\n }\n this.#firstValuePrintedAlready = true;\n process.stdout.write(JSON.stringify(value));\n }\n\n finish() {\n if (this.#finished) {\n throw new Error(\"Tried to finish JSON list printing multiple times.\");\n }\n this.#finished = true;\n console.log(\"\\n]\");\n }\n}\n\nif (argv.format !== \"json-text\" && argv.amount === 1) {\n // @ts-ignore: Top-level await is okay because this is not part of the main library.\n const scramble = await randomScrambleForEvent(eventID);\n\n switch (argv.format) {\n case \"text\": {\n console.log(scrambleText(scramble));\n break;\n }\n case \"link\": {\n console.log(scrambleLink(scramble));\n break;\n }\n case \"json-text\": {\n throw new Error(\n \"Encountered `json` format in code that is not expected to handle it.\",\n );\n }\n default: {\n console.log(`${scrambleText(scramble)}\n\n\uD83D\uDD17 ${scrambleLink(scramble)}`);\n }\n }\n} else {\n const jsonListPrinter: JSONListPrinter<string> | undefined =\n argv.format === \"json-text\" ? new JSONListPrinter() : undefined;\n for (let i = 0; i < argv.amount; i++) {\n // @ts-ignore: Top-level await is okay because this is not part of the main library.\n const scramble = await randomScrambleForEvent(eventID);\n switch (argv.format) {\n case \"text\": {\n console.log(`// Scramble #${i + 1}`);\n console.log(`${scrambleText(scramble)}\\n`);\n break;\n }\n case \"link\": {\n console.log(`// Scramble #${i + 1}`);\n console.log(`${scrambleLink(scramble)}\\n`);\n break;\n }\n case \"json-text\": {\n jsonListPrinter?.push(scramble.toString());\n break;\n }\n default: {\n console.log(`// Scramble #${i + 1}\n${scrambleText(scramble)}\n\n\uD83D\uDD17 ${scrambleLink(scramble)}\n`);\n }\n }\n }\n jsonListPrinter?.finish();\n}\n"],
5
- "mappings": "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",
6
- "names": []
4
+ "sourcesContent": ["// To run this file directly:\n// bun run src/bin/scramble.ts -- 333\n\nimport { eventInfo } from \"cubing/puzzles\";\nimport { randomScrambleForEvent } from \"cubing/scramble\";\nimport { setSearchDebug } from \"cubing/search\";\nimport type { Alg } from \"cubing/alg\";\n\n// TODO: completions for `bash`, `zsh`, and `fish`: https://github.com/loilo/completarr\n\nconst [yargs, hideBin] = await (async () => {\n try {\n const yargs = (await import(\"yargs\")).default;\n const { hideBin } = await import(\"yargs/helpers\");\n return [yargs, hideBin];\n } catch (e) {\n throw new Error(\n \"Could not import `yargs`, which is not automatically installed as a regular dependency of `cubing`. Please run `npm install yargs` (or the equivalent) separately.\",\n );\n }\n})();\n\n// @ts-ignore: Top-level await is okay because this is not part of the main library.\nconst argv = await yargs(\n // TODO: `hideBin` just shows `bun` in `bun`.\n hideBin(process.argv),\n)\n .parserConfiguration({\n // Workaround for https://github.com/yargs/yargs/issues/2359\n \"parse-positional-numbers\": false,\n })\n .option(\"amount\", {\n describe: \"Output format.\",\n default: 1,\n type: \"number\",\n alias: \"n\",\n })\n .option(\"format\", {\n describe: \"Output format.\",\n choices: [\"text\", \"link\", \"json-text\"],\n alias: \"f\",\n })\n .option(\"text\", {\n type: \"boolean\",\n describe: \"Convenient shorthand for `--format text`.\",\n alias: \"t\",\n })\n .positional(\"eventID\", {\n describe: \"WCA or unofficial event ID\",\n type: \"string\",\n })\n .version(false) // TODO: why doesn't `yargs` get the right version in `bun` or for the `dist` bin?\n .demand(1)\n .strict().argv;\n\nconst eventID = argv._[0] as string;\nconst format = argv.format ?? (argv.text ? \"text\" : undefined);\n\nsetSearchDebug({ logPerf: false, showWorkerInstantiationWarnings: false });\n\nfunction scrambleText(scramble: Alg): string {\n return scramble.toString();\n}\n\nfunction scrambleLink(scramble: Alg): string {\n const url = new URL(\"https://alpha.twizzle.net/edit/\");\n const puzzleID = eventInfo(eventID)?.puzzleID;\n puzzleID && url.searchParams.set(\"puzzle\", puzzleID);\n url.searchParams.set(\"alg\", scramble.toString());\n return url.toString();\n}\n\nclass JSONListPrinter<T> {\n #finished = false;\n #firstValuePrintedAlready = false;\n constructor() {\n process.stdout.write(\"[\\n \");\n }\n\n push(value: T) {\n if (this.#firstValuePrintedAlready) {\n process.stdout.write(\",\\n \");\n }\n this.#firstValuePrintedAlready = true;\n process.stdout.write(JSON.stringify(value));\n }\n\n finish() {\n if (this.#finished) {\n throw new Error(\"Tried to finish JSON list printing multiple times.\");\n }\n this.#finished = true;\n console.log(\"\\n]\");\n }\n}\n\nif (format !== \"json-text\" && argv.amount === 1) {\n // @ts-ignore: Top-level await is okay because this is not part of the main library.\n const scramble = await randomScrambleForEvent(eventID);\n\n switch (format) {\n case \"text\": {\n console.log(scrambleText(scramble));\n break;\n }\n case \"link\": {\n console.log(scrambleLink(scramble));\n break;\n }\n case \"json-text\": {\n throw new Error(\n \"Encountered `json` format in code that is not expected to handle it.\",\n );\n }\n default: {\n console.log(`${scrambleText(scramble)}\n\n\uD83D\uDD17 ${scrambleLink(scramble)}`);\n }\n }\n} else {\n const jsonListPrinter: JSONListPrinter<string> | undefined =\n format === \"json-text\" ? new JSONListPrinter() : undefined;\n for (let i = 0; i < argv.amount; i++) {\n // @ts-ignore: Top-level await is okay because this is not part of the main library.\n const scramble = await randomScrambleForEvent(eventID);\n switch (format) {\n case \"text\": {\n console.log(`// Scramble #${i + 1}`);\n console.log(`${scrambleText(scramble)}\\n`);\n break;\n }\n case \"link\": {\n console.log(`// Scramble #${i + 1}`);\n console.log(`${scrambleLink(scramble)}\\n`);\n break;\n }\n case \"json-text\": {\n jsonListPrinter?.push(scramble.toString());\n break;\n }\n default: {\n console.log(`// Scramble #${i + 1}\n${scrambleText(scramble)}\n\n\uD83D\uDD17 ${scrambleLink(scramble)}\n`);\n }\n }\n }\n jsonListPrinter?.finish();\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["yargs", "hideBin"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cubing",
3
- "version": "0.43.0",
3
+ "version": "0.43.2",
4
4
  "description": "A collection of JavaScript cubing libraries.",
5
5
  "author": "The js.cubing.net team",
6
6
  "type": "module",