@agi-ventures-canada/hackathon-cli 0.1.7 → 0.1.8

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 (63) hide show
  1. package/dist/_chunks/activate-round.mjs +18 -0
  2. package/dist/_chunks/activate-round.mjs.map +1 -0
  3. package/dist/_chunks/buckets.mjs +56 -0
  4. package/dist/_chunks/buckets.mjs.map +1 -0
  5. package/dist/_chunks/calculate-results.mjs +18 -0
  6. package/dist/_chunks/calculate-results.mjs.map +1 -0
  7. package/dist/_chunks/create.mjs +1 -1
  8. package/dist/_chunks/create.mjs.map +1 -1
  9. package/dist/_chunks/create6.mjs +29 -38
  10. package/dist/_chunks/create6.mjs.map +1 -1
  11. package/dist/_chunks/create7.mjs +63 -0
  12. package/dist/_chunks/create7.mjs.map +1 -0
  13. package/dist/_chunks/criteria-create.mjs +9 -22
  14. package/dist/_chunks/criteria-create.mjs.map +1 -1
  15. package/dist/_chunks/criteria-list.mjs +4 -0
  16. package/dist/_chunks/criteria-list.mjs.map +1 -1
  17. package/dist/_chunks/criteria-update.mjs +13 -5
  18. package/dist/_chunks/criteria-update.mjs.map +1 -1
  19. package/dist/_chunks/delete5.mjs +8 -8
  20. package/dist/_chunks/delete5.mjs.map +1 -1
  21. package/dist/_chunks/delete6.mjs +22 -0
  22. package/dist/_chunks/delete6.mjs.map +1 -0
  23. package/dist/_chunks/get5.mjs +42 -0
  24. package/dist/_chunks/get5.mjs.map +1 -0
  25. package/dist/_chunks/levels-add.mjs +53 -0
  26. package/dist/_chunks/levels-add.mjs.map +1 -0
  27. package/dist/_chunks/levels-delete.mjs +53 -0
  28. package/dist/_chunks/levels-delete.mjs.map +1 -0
  29. package/dist/_chunks/levels-list.mjs +39 -0
  30. package/dist/_chunks/levels-list.mjs.map +1 -0
  31. package/dist/_chunks/levels-update.mjs +61 -0
  32. package/dist/_chunks/levels-update.mjs.map +1 -0
  33. package/dist/_chunks/list6.mjs +22 -19
  34. package/dist/_chunks/list6.mjs.map +1 -1
  35. package/dist/_chunks/list7.mjs +40 -0
  36. package/dist/_chunks/list7.mjs.map +1 -0
  37. package/dist/_chunks/track-assign.mjs +37 -0
  38. package/dist/_chunks/track-assign.mjs.map +1 -0
  39. package/dist/_chunks/track-unassign.mjs +49 -0
  40. package/dist/_chunks/track-unassign.mjs.map +1 -0
  41. package/dist/_chunks/update-round.mjs +49 -0
  42. package/dist/_chunks/update-round.mjs.map +1 -0
  43. package/dist/_chunks/update5.mjs +41 -48
  44. package/dist/_chunks/update5.mjs.map +1 -1
  45. package/dist/_chunks/update6.mjs +56 -0
  46. package/dist/_chunks/update6.mjs.map +1 -0
  47. package/dist/cli.mjs +154 -86
  48. package/dist/cli.mjs.map +1 -1
  49. package/package.json +1 -1
  50. package/dist/_chunks/hackathons-delete.mjs +0 -26
  51. package/dist/_chunks/hackathons-delete.mjs.map +0 -1
  52. package/dist/_chunks/hackathons-get.mjs +0 -34
  53. package/dist/_chunks/hackathons-get.mjs.map +0 -1
  54. package/dist/_chunks/hackathons-list.mjs +0 -64
  55. package/dist/_chunks/hackathons-list.mjs.map +0 -1
  56. package/dist/_chunks/hackathons-update.mjs +0 -73
  57. package/dist/_chunks/hackathons-update.mjs.map +0 -1
  58. package/dist/_chunks/scenarios-list.mjs +0 -24
  59. package/dist/_chunks/scenarios-list.mjs.map +0 -1
  60. package/dist/_chunks/scenarios-run.mjs +0 -23
  61. package/dist/_chunks/scenarios-run.mjs.map +0 -1
  62. package/dist/_chunks/stats.mjs +0 -37
  63. package/dist/_chunks/stats.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get5.mjs","names":[],"sources":["../../src/commands/tracks/get.ts"],"sourcesContent":["import type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatDetail } from \"../../output.js\"\nimport type { TrackDetail } from \"../../types.js\"\n\nexport async function runTracksGet(\n client: OatmealClient,\n hackathonId: string,\n trackId: string,\n options: { json?: boolean }\n): Promise<void> {\n if (!trackId) {\n console.error(\"Usage: hackathon tracks get <hackathon-id> <track-id>\")\n process.exit(1)\n }\n\n const track = await client.get<TrackDetail>(\n `/api/dashboard/hackathons/${hackathonId}/prize-tracks/${trackId}`\n )\n\n if (options.json) {\n console.log(formatJson(track))\n return\n }\n\n console.log(\n formatDetail([\n { label: \"ID\", value: track.id },\n { label: \"Name\", value: track.name },\n { label: \"Description\", value: track.description ?? undefined },\n { label: \"Intent\", value: track.intent },\n ])\n )\n\n if (track.rounds.length > 0) {\n console.log(`\\nRounds (${track.rounds.length}):`)\n for (const round of track.rounds) {\n console.log(` ${round.name} — ${round.style ?? \"no style\"} [${round.status}]`)\n if (round.buckets.length > 0) {\n for (const b of round.buckets) {\n console.log(` ${b.level}. ${b.label}${b.description ? ` — ${b.description}` : \"\"}`)\n }\n }\n }\n }\n}\n"],"mappings":";;AAIA,eAAsB,aACpB,QACA,aACA,SACA,SACe;AACf,KAAI,CAAC,SAAS;AACZ,UAAQ,MAAM,wDAAwD;AACtE,UAAQ,KAAK,EAAE;;CAGjB,MAAM,QAAQ,MAAM,OAAO,IACzB,6BAA6B,YAAY,gBAAgB,UAC1D;AAED,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,MAAM,CAAC;AAC9B;;AAGF,SAAQ,IACN,aAAa;EACX;GAAE,OAAO;GAAM,OAAO,MAAM;GAAI;EAChC;GAAE,OAAO;GAAQ,OAAO,MAAM;GAAM;EACpC;GAAE,OAAO;GAAe,OAAO,MAAM,eAAe,KAAA;GAAW;EAC/D;GAAE,OAAO;GAAU,OAAO,MAAM;;EACjC,CAAC,CACH;AAED,KAAI,MAAM,OAAO,SAAS,GAAG;AAC3B,UAAQ,IAAI,aAAa,MAAM,OAAO,OAAO,IAAI;AACjD,OAAK,MAAM,SAAS,MAAM,QAAQ;AAChC,WAAQ,IAAI,KAAK,MAAM,KAAK,KAAK,MAAM,SAAS,WAAW,IAAI,MAAM,OAAO,GAAG;AAC/E,OAAI,MAAM,QAAQ,SAAS,EACzB,MAAK,MAAM,KAAK,MAAM,QACpB,SAAQ,IAAI,OAAO,EAAE,MAAM,IAAI,EAAE,QAAQ,EAAE,cAAc,MAAM,EAAE,gBAAgB,KAAK"}
@@ -0,0 +1,53 @@
1
+ import { n as formatJson, r as formatSuccess } from "../cli.mjs";
2
+ //#region src/commands/judging/levels-add.ts
3
+ function parseLevelsAddOptions(args) {
4
+ const options = {};
5
+ for (let i = 0; i < args.length; i++) switch (args[i]) {
6
+ case "--hackathon-id":
7
+ options.hackathonId = args[++i];
8
+ break;
9
+ case "--criteria-id":
10
+ options.criteriaId = args[++i];
11
+ break;
12
+ case "--label":
13
+ options.label = args[++i];
14
+ break;
15
+ case "--description":
16
+ options.description = args[++i];
17
+ break;
18
+ case "--json":
19
+ options.json = true;
20
+ break;
21
+ }
22
+ return options;
23
+ }
24
+ async function runLevelsAdd(client, hackathonId, criteriaId, args) {
25
+ const options = parseLevelsAddOptions(args);
26
+ const resolvedHackathonId = options.hackathonId ?? hackathonId;
27
+ const resolvedCriteriaId = options.criteriaId ?? criteriaId;
28
+ if (!resolvedHackathonId) {
29
+ console.error("Error: --hackathon-id is required");
30
+ process.exit(1);
31
+ }
32
+ if (!resolvedCriteriaId) {
33
+ console.error("Error: --criteria-id is required");
34
+ process.exit(1);
35
+ }
36
+ if (!options.label) {
37
+ console.error("Error: --label is required");
38
+ process.exit(1);
39
+ }
40
+ const level = await client.post(`/api/dashboard/hackathons/${resolvedHackathonId}/judging/criteria/${resolvedCriteriaId}/levels`, {
41
+ label: options.label,
42
+ description: options.description
43
+ });
44
+ if (options.json) {
45
+ console.log(formatJson(level));
46
+ return;
47
+ }
48
+ console.log(formatSuccess(`Added level "${level.label}" (${level.id})`));
49
+ }
50
+ //#endregion
51
+ export { runLevelsAdd };
52
+
53
+ //# sourceMappingURL=levels-add.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"levels-add.mjs","names":[],"sources":["../../src/commands/judging/levels-add.ts"],"sourcesContent":["import type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatSuccess } from \"../../output.js\"\nimport type { RubricLevel } from \"../../types.js\"\n\ninterface LevelsAddOptions {\n hackathonId?: string\n criteriaId?: string\n label?: string\n description?: string\n json?: boolean\n}\n\nexport function parseLevelsAddOptions(args: string[]): LevelsAddOptions {\n const options: LevelsAddOptions = {}\n for (let i = 0; i < args.length; i++) {\n switch (args[i]) {\n case \"--hackathon-id\":\n options.hackathonId = args[++i]\n break\n case \"--criteria-id\":\n options.criteriaId = args[++i]\n break\n case \"--label\":\n options.label = args[++i]\n break\n case \"--description\":\n options.description = args[++i]\n break\n case \"--json\":\n options.json = true\n break\n }\n }\n return options\n}\n\nexport async function runLevelsAdd(\n client: OatmealClient,\n hackathonId: string,\n criteriaId: string,\n args: string[]\n): Promise<void> {\n const options = parseLevelsAddOptions(args)\n\n const resolvedHackathonId = options.hackathonId ?? hackathonId\n const resolvedCriteriaId = options.criteriaId ?? criteriaId\n\n if (!resolvedHackathonId) {\n console.error(\"Error: --hackathon-id is required\")\n process.exit(1)\n }\n\n if (!resolvedCriteriaId) {\n console.error(\"Error: --criteria-id is required\")\n process.exit(1)\n }\n\n if (!options.label) {\n console.error(\"Error: --label is required\")\n process.exit(1)\n }\n\n const level = await client.post<RubricLevel>(\n `/api/dashboard/hackathons/${resolvedHackathonId}/judging/criteria/${resolvedCriteriaId}/levels`,\n {\n label: options.label,\n description: options.description,\n }\n )\n\n if (options.json) {\n console.log(formatJson(level))\n return\n }\n\n console.log(formatSuccess(`Added level \"${level.label}\" (${level.id})`))\n}\n"],"mappings":";;AAYA,SAAgB,sBAAsB,MAAkC;CACtE,MAAM,UAA4B,EAAE;AACpC,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,IAC/B,SAAQ,KAAK,IAAb;EACE,KAAK;AACH,WAAQ,cAAc,KAAK,EAAE;AAC7B;EACF,KAAK;AACH,WAAQ,aAAa,KAAK,EAAE;AAC5B;EACF,KAAK;AACH,WAAQ,QAAQ,KAAK,EAAE;AACvB;EACF,KAAK;AACH,WAAQ,cAAc,KAAK,EAAE;AAC7B;EACF,KAAK;AACH,WAAQ,OAAO;AACf;;AAGN,QAAO;;AAGT,eAAsB,aACpB,QACA,aACA,YACA,MACe;CACf,MAAM,UAAU,sBAAsB,KAAK;CAE3C,MAAM,sBAAsB,QAAQ,eAAe;CACnD,MAAM,qBAAqB,QAAQ,cAAc;AAEjD,KAAI,CAAC,qBAAqB;AACxB,UAAQ,MAAM,oCAAoC;AAClD,UAAQ,KAAK,EAAE;;AAGjB,KAAI,CAAC,oBAAoB;AACvB,UAAQ,MAAM,mCAAmC;AACjD,UAAQ,KAAK,EAAE;;AAGjB,KAAI,CAAC,QAAQ,OAAO;AAClB,UAAQ,MAAM,6BAA6B;AAC3C,UAAQ,KAAK,EAAE;;CAGjB,MAAM,QAAQ,MAAM,OAAO,KACzB,6BAA6B,oBAAoB,oBAAoB,mBAAmB,UACxF;EACE,OAAO,QAAQ;EACf,aAAa,QAAQ;EACtB,CACF;AAED,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,MAAM,CAAC;AAC9B;;AAGF,SAAQ,IAAI,cAAc,gBAAgB,MAAM,MAAM,KAAK,MAAM,GAAG,GAAG,CAAC"}
@@ -0,0 +1,53 @@
1
+ import { i as formatTable, n as formatJson, r as formatSuccess } from "../cli.mjs";
2
+ import * as p from "@clack/prompts";
3
+ //#region src/commands/judging/levels-delete.ts
4
+ async function runLevelsDelete(client, hackathonId, criteriaId, levelId, options) {
5
+ if (!hackathonId) {
6
+ console.error("Usage: hackathon judging levels delete --hackathon-id <id> --criteria-id <id> --level-id <id>");
7
+ process.exit(1);
8
+ }
9
+ if (!criteriaId) {
10
+ console.error("Usage: hackathon judging levels delete --hackathon-id <id> --criteria-id <id> --level-id <id>");
11
+ process.exit(1);
12
+ }
13
+ if (!levelId) {
14
+ console.error("Usage: hackathon judging levels delete --hackathon-id <id> --criteria-id <id> --level-id <id>");
15
+ process.exit(1);
16
+ }
17
+ if (!options.yes) {
18
+ const confirm = await p.confirm({ message: `Delete level ${levelId}?` });
19
+ if (p.isCancel(confirm) || !confirm) {
20
+ p.log.info("Cancelled.");
21
+ return;
22
+ }
23
+ }
24
+ await client.delete(`/api/dashboard/hackathons/${hackathonId}/judging/criteria/${criteriaId}/levels/${levelId}`);
25
+ console.log(formatSuccess(`Deleted level ${levelId}`));
26
+ const data = await client.get(`/api/dashboard/hackathons/${hackathonId}/judging/criteria/${criteriaId}/levels`);
27
+ if (options.json) {
28
+ console.log(formatJson(data));
29
+ return;
30
+ }
31
+ if (!data.levels?.length) {
32
+ console.log("No rubric levels remaining.");
33
+ return;
34
+ }
35
+ console.log(formatTable(data.levels, [
36
+ {
37
+ key: "levelNumber",
38
+ label: "Level #"
39
+ },
40
+ {
41
+ key: "label",
42
+ label: "Label"
43
+ },
44
+ {
45
+ key: "description",
46
+ label: "Description"
47
+ }
48
+ ]));
49
+ }
50
+ //#endregion
51
+ export { runLevelsDelete };
52
+
53
+ //# sourceMappingURL=levels-delete.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"levels-delete.mjs","names":[],"sources":["../../src/commands/judging/levels-delete.ts"],"sourcesContent":["import * as p from \"@clack/prompts\"\nimport type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatSuccess, formatTable } from \"../../output.js\"\nimport type { RubricLevel } from \"../../types.js\"\n\nexport async function runLevelsDelete(\n client: OatmealClient,\n hackathonId: string,\n criteriaId: string,\n levelId: string,\n options: { yes?: boolean; json?: boolean }\n): Promise<void> {\n if (!hackathonId) {\n console.error(\"Usage: hackathon judging levels delete --hackathon-id <id> --criteria-id <id> --level-id <id>\")\n process.exit(1)\n }\n\n if (!criteriaId) {\n console.error(\"Usage: hackathon judging levels delete --hackathon-id <id> --criteria-id <id> --level-id <id>\")\n process.exit(1)\n }\n\n if (!levelId) {\n console.error(\"Usage: hackathon judging levels delete --hackathon-id <id> --criteria-id <id> --level-id <id>\")\n process.exit(1)\n }\n\n if (!options.yes) {\n const confirm = await p.confirm({ message: `Delete level ${levelId}?` })\n if (p.isCancel(confirm) || !confirm) {\n p.log.info(\"Cancelled.\")\n return\n }\n }\n\n await client.delete(\n `/api/dashboard/hackathons/${hackathonId}/judging/criteria/${criteriaId}/levels/${levelId}`\n )\n console.log(formatSuccess(`Deleted level ${levelId}`))\n\n const data = await client.get<{ levels: RubricLevel[] }>(\n `/api/dashboard/hackathons/${hackathonId}/judging/criteria/${criteriaId}/levels`\n )\n\n if (options.json) {\n console.log(formatJson(data))\n return\n }\n\n if (!data.levels?.length) {\n console.log(\"No rubric levels remaining.\")\n return\n }\n\n console.log(\n formatTable(data.levels, [\n { key: \"levelNumber\", label: \"Level #\" },\n { key: \"label\", label: \"Label\" },\n { key: \"description\", label: \"Description\" },\n ])\n )\n}\n"],"mappings":";;;AAKA,eAAsB,gBACpB,QACA,aACA,YACA,SACA,SACe;AACf,KAAI,CAAC,aAAa;AAChB,UAAQ,MAAM,gGAAgG;AAC9G,UAAQ,KAAK,EAAE;;AAGjB,KAAI,CAAC,YAAY;AACf,UAAQ,MAAM,gGAAgG;AAC9G,UAAQ,KAAK,EAAE;;AAGjB,KAAI,CAAC,SAAS;AACZ,UAAQ,MAAM,gGAAgG;AAC9G,UAAQ,KAAK,EAAE;;AAGjB,KAAI,CAAC,QAAQ,KAAK;EAChB,MAAM,UAAU,MAAM,EAAE,QAAQ,EAAE,SAAS,gBAAgB,QAAQ,IAAI,CAAC;AACxE,MAAI,EAAE,SAAS,QAAQ,IAAI,CAAC,SAAS;AACnC,KAAE,IAAI,KAAK,aAAa;AACxB;;;AAIJ,OAAM,OAAO,OACX,6BAA6B,YAAY,oBAAoB,WAAW,UAAU,UACnF;AACD,SAAQ,IAAI,cAAc,iBAAiB,UAAU,CAAC;CAEtD,MAAM,OAAO,MAAM,OAAO,IACxB,6BAA6B,YAAY,oBAAoB,WAAW,SACzE;AAED,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,KAAK,CAAC;AAC7B;;AAGF,KAAI,CAAC,KAAK,QAAQ,QAAQ;AACxB,UAAQ,IAAI,8BAA8B;AAC1C;;AAGF,SAAQ,IACN,YAAY,KAAK,QAAQ;EACvB;GAAE,KAAK;GAAe,OAAO;GAAW;EACxC;GAAE,KAAK;GAAS,OAAO;GAAS;EAChC;GAAE,KAAK;GAAe,OAAO;;EAC9B,CAAC,CACH"}
@@ -0,0 +1,39 @@
1
+ import { i as formatTable, n as formatJson } from "../cli.mjs";
2
+ //#region src/commands/judging/levels-list.ts
3
+ async function runLevelsList(client, hackathonId, criteriaId, options) {
4
+ if (!hackathonId) {
5
+ console.error("Usage: hackathon judging levels list --hackathon-id <id> --criteria-id <id>");
6
+ process.exit(1);
7
+ }
8
+ if (!criteriaId) {
9
+ console.error("Usage: hackathon judging levels list --hackathon-id <id> --criteria-id <id>");
10
+ process.exit(1);
11
+ }
12
+ const data = await client.get(`/api/dashboard/hackathons/${hackathonId}/judging/criteria/${criteriaId}/levels`);
13
+ if (options.json) {
14
+ console.log(formatJson(data));
15
+ return;
16
+ }
17
+ if (!data.levels?.length) {
18
+ console.log("No rubric levels found.");
19
+ return;
20
+ }
21
+ console.log(formatTable(data.levels, [
22
+ {
23
+ key: "levelNumber",
24
+ label: "Level #"
25
+ },
26
+ {
27
+ key: "label",
28
+ label: "Label"
29
+ },
30
+ {
31
+ key: "description",
32
+ label: "Description"
33
+ }
34
+ ]));
35
+ }
36
+ //#endregion
37
+ export { runLevelsList };
38
+
39
+ //# sourceMappingURL=levels-list.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"levels-list.mjs","names":[],"sources":["../../src/commands/judging/levels-list.ts"],"sourcesContent":["import type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatTable } from \"../../output.js\"\nimport type { RubricLevel } from \"../../types.js\"\n\nexport async function runLevelsList(\n client: OatmealClient,\n hackathonId: string,\n criteriaId: string,\n options: { json?: boolean }\n): Promise<void> {\n if (!hackathonId) {\n console.error(\"Usage: hackathon judging levels list --hackathon-id <id> --criteria-id <id>\")\n process.exit(1)\n }\n\n if (!criteriaId) {\n console.error(\"Usage: hackathon judging levels list --hackathon-id <id> --criteria-id <id>\")\n process.exit(1)\n }\n\n const data = await client.get<{ levels: RubricLevel[] }>(\n `/api/dashboard/hackathons/${hackathonId}/judging/criteria/${criteriaId}/levels`\n )\n\n if (options.json) {\n console.log(formatJson(data))\n return\n }\n\n if (!data.levels?.length) {\n console.log(\"No rubric levels found.\")\n return\n }\n\n console.log(\n formatTable(data.levels, [\n { key: \"levelNumber\", label: \"Level #\" },\n { key: \"label\", label: \"Label\" },\n { key: \"description\", label: \"Description\" },\n ])\n )\n}\n"],"mappings":";;AAIA,eAAsB,cACpB,QACA,aACA,YACA,SACe;AACf,KAAI,CAAC,aAAa;AAChB,UAAQ,MAAM,8EAA8E;AAC5F,UAAQ,KAAK,EAAE;;AAGjB,KAAI,CAAC,YAAY;AACf,UAAQ,MAAM,8EAA8E;AAC5F,UAAQ,KAAK,EAAE;;CAGjB,MAAM,OAAO,MAAM,OAAO,IACxB,6BAA6B,YAAY,oBAAoB,WAAW,SACzE;AAED,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,KAAK,CAAC;AAC7B;;AAGF,KAAI,CAAC,KAAK,QAAQ,QAAQ;AACxB,UAAQ,IAAI,0BAA0B;AACtC;;AAGF,SAAQ,IACN,YAAY,KAAK,QAAQ;EACvB;GAAE,KAAK;GAAe,OAAO;GAAW;EACxC;GAAE,KAAK;GAAS,OAAO;GAAS;EAChC;GAAE,KAAK;GAAe,OAAO;;EAC9B,CAAC,CACH"}
@@ -0,0 +1,61 @@
1
+ import { n as formatJson, r as formatSuccess } from "../cli.mjs";
2
+ //#region src/commands/judging/levels-update.ts
3
+ function parseLevelsUpdateOptions(args) {
4
+ const options = {};
5
+ for (let i = 0; i < args.length; i++) switch (args[i]) {
6
+ case "--hackathon-id":
7
+ options.hackathonId = args[++i];
8
+ break;
9
+ case "--criteria-id":
10
+ options.criteriaId = args[++i];
11
+ break;
12
+ case "--level-id":
13
+ options.levelId = args[++i];
14
+ break;
15
+ case "--label":
16
+ options.label = args[++i];
17
+ break;
18
+ case "--description":
19
+ options.description = args[++i];
20
+ break;
21
+ case "--json":
22
+ options.json = true;
23
+ break;
24
+ }
25
+ return options;
26
+ }
27
+ async function runLevelsUpdate(client, hackathonId, criteriaId, levelId, args) {
28
+ const options = parseLevelsUpdateOptions(args);
29
+ const resolvedHackathonId = options.hackathonId ?? hackathonId;
30
+ const resolvedCriteriaId = options.criteriaId ?? criteriaId;
31
+ const resolvedLevelId = options.levelId ?? levelId;
32
+ if (!resolvedHackathonId) {
33
+ console.error("Error: --hackathon-id is required");
34
+ process.exit(1);
35
+ }
36
+ if (!resolvedCriteriaId) {
37
+ console.error("Error: --criteria-id is required");
38
+ process.exit(1);
39
+ }
40
+ if (!resolvedLevelId) {
41
+ console.error("Error: --level-id is required");
42
+ process.exit(1);
43
+ }
44
+ const body = {};
45
+ if (options.label) body.label = options.label;
46
+ if (options.description !== void 0) body.description = options.description;
47
+ if (Object.keys(body).length === 0) {
48
+ console.error("Error: provide at least one field to update (--label, --description)");
49
+ process.exit(1);
50
+ }
51
+ const level = await client.patch(`/api/dashboard/hackathons/${resolvedHackathonId}/judging/criteria/${resolvedCriteriaId}/levels/${resolvedLevelId}`, body);
52
+ if (options.json) {
53
+ console.log(formatJson(level));
54
+ return;
55
+ }
56
+ console.log(formatSuccess(`Updated level "${level.label}"`));
57
+ }
58
+ //#endregion
59
+ export { runLevelsUpdate };
60
+
61
+ //# sourceMappingURL=levels-update.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"levels-update.mjs","names":[],"sources":["../../src/commands/judging/levels-update.ts"],"sourcesContent":["import type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatSuccess } from \"../../output.js\"\nimport type { RubricLevel } from \"../../types.js\"\n\ninterface LevelsUpdateOptions {\n hackathonId?: string\n criteriaId?: string\n levelId?: string\n label?: string\n description?: string\n json?: boolean\n}\n\nexport function parseLevelsUpdateOptions(args: string[]): LevelsUpdateOptions {\n const options: LevelsUpdateOptions = {}\n for (let i = 0; i < args.length; i++) {\n switch (args[i]) {\n case \"--hackathon-id\":\n options.hackathonId = args[++i]\n break\n case \"--criteria-id\":\n options.criteriaId = args[++i]\n break\n case \"--level-id\":\n options.levelId = args[++i]\n break\n case \"--label\":\n options.label = args[++i]\n break\n case \"--description\":\n options.description = args[++i]\n break\n case \"--json\":\n options.json = true\n break\n }\n }\n return options\n}\n\nexport async function runLevelsUpdate(\n client: OatmealClient,\n hackathonId: string,\n criteriaId: string,\n levelId: string,\n args: string[]\n): Promise<void> {\n const options = parseLevelsUpdateOptions(args)\n\n const resolvedHackathonId = options.hackathonId ?? hackathonId\n const resolvedCriteriaId = options.criteriaId ?? criteriaId\n const resolvedLevelId = options.levelId ?? levelId\n\n if (!resolvedHackathonId) {\n console.error(\"Error: --hackathon-id is required\")\n process.exit(1)\n }\n\n if (!resolvedCriteriaId) {\n console.error(\"Error: --criteria-id is required\")\n process.exit(1)\n }\n\n if (!resolvedLevelId) {\n console.error(\"Error: --level-id is required\")\n process.exit(1)\n }\n\n const body: Record<string, unknown> = {}\n if (options.label) body.label = options.label\n if (options.description !== undefined) body.description = options.description\n\n if (Object.keys(body).length === 0) {\n console.error(\"Error: provide at least one field to update (--label, --description)\")\n process.exit(1)\n }\n\n const level = await client.patch<RubricLevel>(\n `/api/dashboard/hackathons/${resolvedHackathonId}/judging/criteria/${resolvedCriteriaId}/levels/${resolvedLevelId}`,\n body\n )\n\n if (options.json) {\n console.log(formatJson(level))\n return\n }\n\n console.log(formatSuccess(`Updated level \"${level.label}\"`))\n}\n"],"mappings":";;AAaA,SAAgB,yBAAyB,MAAqC;CAC5E,MAAM,UAA+B,EAAE;AACvC,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,IAC/B,SAAQ,KAAK,IAAb;EACE,KAAK;AACH,WAAQ,cAAc,KAAK,EAAE;AAC7B;EACF,KAAK;AACH,WAAQ,aAAa,KAAK,EAAE;AAC5B;EACF,KAAK;AACH,WAAQ,UAAU,KAAK,EAAE;AACzB;EACF,KAAK;AACH,WAAQ,QAAQ,KAAK,EAAE;AACvB;EACF,KAAK;AACH,WAAQ,cAAc,KAAK,EAAE;AAC7B;EACF,KAAK;AACH,WAAQ,OAAO;AACf;;AAGN,QAAO;;AAGT,eAAsB,gBACpB,QACA,aACA,YACA,SACA,MACe;CACf,MAAM,UAAU,yBAAyB,KAAK;CAE9C,MAAM,sBAAsB,QAAQ,eAAe;CACnD,MAAM,qBAAqB,QAAQ,cAAc;CACjD,MAAM,kBAAkB,QAAQ,WAAW;AAE3C,KAAI,CAAC,qBAAqB;AACxB,UAAQ,MAAM,oCAAoC;AAClD,UAAQ,KAAK,EAAE;;AAGjB,KAAI,CAAC,oBAAoB;AACvB,UAAQ,MAAM,mCAAmC;AACjD,UAAQ,KAAK,EAAE;;AAGjB,KAAI,CAAC,iBAAiB;AACpB,UAAQ,MAAM,gCAAgC;AAC9C,UAAQ,KAAK,EAAE;;CAGjB,MAAM,OAAgC,EAAE;AACxC,KAAI,QAAQ,MAAO,MAAK,QAAQ,QAAQ;AACxC,KAAI,QAAQ,gBAAgB,KAAA,EAAW,MAAK,cAAc,QAAQ;AAElE,KAAI,OAAO,KAAK,KAAK,CAAC,WAAW,GAAG;AAClC,UAAQ,MAAM,uEAAuE;AACrF,UAAQ,KAAK,EAAE;;CAGjB,MAAM,QAAQ,MAAM,OAAO,MACzB,6BAA6B,oBAAoB,oBAAoB,mBAAmB,UAAU,mBAClG,KACD;AAED,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,MAAM,CAAC;AAC9B;;AAGF,SAAQ,IAAI,cAAc,kBAAkB,MAAM,MAAM,GAAG,CAAC"}
@@ -1,40 +1,43 @@
1
1
  import { i as formatTable, n as formatJson } from "../cli.mjs";
2
- //#region src/commands/webhooks/list.ts
3
- async function runWebhooksList(client, options) {
4
- const data = await client.get("/api/v1/webhooks");
2
+ //#region src/commands/tracks/list.ts
3
+ async function runTracksList(client, hackathonId, options) {
4
+ const data = await client.get(`/api/dashboard/hackathons/${hackathonId}/prize-tracks`);
5
5
  if (options.json) {
6
6
  console.log(formatJson(data));
7
7
  return;
8
8
  }
9
- if (!data.webhooks?.length) {
10
- console.log("No webhooks found.");
9
+ if (!data.tracks?.length) {
10
+ console.log("No prize tracks found.");
11
11
  return;
12
12
  }
13
- const rows = data.webhooks.map((w) => ({
14
- ...w,
15
- events_list: w.events.join(", "),
16
- active_str: w.active ? "Active" : "Inactive"
17
- }));
18
- console.log(formatTable(rows, [
13
+ console.log(formatTable(data.tracks, [
19
14
  {
20
- key: "id",
15
+ key: "trackId",
21
16
  label: "ID"
22
17
  },
23
18
  {
24
- key: "url",
25
- label: "URL"
19
+ key: "trackName",
20
+ label: "Name"
26
21
  },
27
22
  {
28
- key: "events_list",
29
- label: "Events"
23
+ key: "intent",
24
+ label: "Intent"
30
25
  },
31
26
  {
32
- key: "active_str",
33
- label: "Status"
27
+ key: "style",
28
+ label: "Style"
29
+ },
30
+ {
31
+ key: "totalAssignments",
32
+ label: "Assignments"
33
+ },
34
+ {
35
+ key: "completedAssignments",
36
+ label: "Completed"
34
37
  }
35
38
  ]));
36
39
  }
37
40
  //#endregion
38
- export { runWebhooksList };
41
+ export { runTracksList };
39
42
 
40
43
  //# sourceMappingURL=list6.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"list6.mjs","names":[],"sources":["../../src/commands/webhooks/list.ts"],"sourcesContent":["import type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatTable } from \"../../output.js\"\nimport type { Webhook } from \"../../types.js\"\n\nexport async function runWebhooksList(\n client: OatmealClient,\n options: { json?: boolean }\n): Promise<void> {\n const data = await client.get<{ webhooks: Webhook[] }>(\"/api/v1/webhooks\")\n\n if (options.json) {\n console.log(formatJson(data))\n return\n }\n\n if (!data.webhooks?.length) {\n console.log(\"No webhooks found.\")\n return\n }\n\n const rows = data.webhooks.map((w) => ({\n ...w,\n events_list: w.events.join(\", \"),\n active_str: w.active ? \"Active\" : \"Inactive\",\n }))\n\n console.log(\n formatTable(rows, [\n { key: \"id\", label: \"ID\" },\n { key: \"url\", label: \"URL\" },\n { key: \"events_list\", label: \"Events\" },\n { key: \"active_str\", label: \"Status\" },\n ])\n )\n}\n"],"mappings":";;AAIA,eAAsB,gBACpB,QACA,SACe;CACf,MAAM,OAAO,MAAM,OAAO,IAA6B,mBAAmB;AAE1E,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,KAAK,CAAC;AAC7B;;AAGF,KAAI,CAAC,KAAK,UAAU,QAAQ;AAC1B,UAAQ,IAAI,qBAAqB;AACjC;;CAGF,MAAM,OAAO,KAAK,SAAS,KAAK,OAAO;EACrC,GAAG;EACH,aAAa,EAAE,OAAO,KAAK,KAAK;EAChC,YAAY,EAAE,SAAS,WAAW;EACnC,EAAE;AAEH,SAAQ,IACN,YAAY,MAAM;EAChB;GAAE,KAAK;GAAM,OAAO;GAAM;EAC1B;GAAE,KAAK;GAAO,OAAO;GAAO;EAC5B;GAAE,KAAK;GAAe,OAAO;GAAU;EACvC;GAAE,KAAK;GAAc,OAAO;;EAC7B,CAAC,CACH"}
1
+ {"version":3,"file":"list6.mjs","names":[],"sources":["../../src/commands/tracks/list.ts"],"sourcesContent":["import type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatTable } from \"../../output.js\"\nimport type { PrizeTrack } from \"../../types.js\"\n\nexport async function runTracksList(\n client: OatmealClient,\n hackathonId: string,\n options: { json?: boolean }\n): Promise<void> {\n const data = await client.get<{ tracks: PrizeTrack[] }>(\n `/api/dashboard/hackathons/${hackathonId}/prize-tracks`\n )\n\n if (options.json) {\n console.log(formatJson(data))\n return\n }\n\n if (!data.tracks?.length) {\n console.log(\"No prize tracks found.\")\n return\n }\n\n console.log(\n formatTable(data.tracks, [\n { key: \"trackId\", label: \"ID\" },\n { key: \"trackName\", label: \"Name\" },\n { key: \"intent\", label: \"Intent\" },\n { key: \"style\", label: \"Style\" },\n { key: \"totalAssignments\", label: \"Assignments\" },\n { key: \"completedAssignments\", label: \"Completed\" },\n ])\n )\n}\n"],"mappings":";;AAIA,eAAsB,cACpB,QACA,aACA,SACe;CACf,MAAM,OAAO,MAAM,OAAO,IACxB,6BAA6B,YAAY,eAC1C;AAED,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,KAAK,CAAC;AAC7B;;AAGF,KAAI,CAAC,KAAK,QAAQ,QAAQ;AACxB,UAAQ,IAAI,yBAAyB;AACrC;;AAGF,SAAQ,IACN,YAAY,KAAK,QAAQ;EACvB;GAAE,KAAK;GAAW,OAAO;GAAM;EAC/B;GAAE,KAAK;GAAa,OAAO;GAAQ;EACnC;GAAE,KAAK;GAAU,OAAO;GAAU;EAClC;GAAE,KAAK;GAAS,OAAO;GAAS;EAChC;GAAE,KAAK;GAAoB,OAAO;GAAe;EACjD;GAAE,KAAK;GAAwB,OAAO;;EACvC,CAAC,CACH"}
@@ -0,0 +1,40 @@
1
+ import { i as formatTable, n as formatJson } from "../cli.mjs";
2
+ //#region src/commands/webhooks/list.ts
3
+ async function runWebhooksList(client, options) {
4
+ const data = await client.get("/api/v1/webhooks");
5
+ if (options.json) {
6
+ console.log(formatJson(data));
7
+ return;
8
+ }
9
+ if (!data.webhooks?.length) {
10
+ console.log("No webhooks found.");
11
+ return;
12
+ }
13
+ const rows = data.webhooks.map((w) => ({
14
+ ...w,
15
+ events_list: w.events.join(", "),
16
+ active_str: w.active ? "Active" : "Inactive"
17
+ }));
18
+ console.log(formatTable(rows, [
19
+ {
20
+ key: "id",
21
+ label: "ID"
22
+ },
23
+ {
24
+ key: "url",
25
+ label: "URL"
26
+ },
27
+ {
28
+ key: "events_list",
29
+ label: "Events"
30
+ },
31
+ {
32
+ key: "active_str",
33
+ label: "Status"
34
+ }
35
+ ]));
36
+ }
37
+ //#endregion
38
+ export { runWebhooksList };
39
+
40
+ //# sourceMappingURL=list7.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list7.mjs","names":[],"sources":["../../src/commands/webhooks/list.ts"],"sourcesContent":["import type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatTable } from \"../../output.js\"\nimport type { Webhook } from \"../../types.js\"\n\nexport async function runWebhooksList(\n client: OatmealClient,\n options: { json?: boolean }\n): Promise<void> {\n const data = await client.get<{ webhooks: Webhook[] }>(\"/api/v1/webhooks\")\n\n if (options.json) {\n console.log(formatJson(data))\n return\n }\n\n if (!data.webhooks?.length) {\n console.log(\"No webhooks found.\")\n return\n }\n\n const rows = data.webhooks.map((w) => ({\n ...w,\n events_list: w.events.join(\", \"),\n active_str: w.active ? \"Active\" : \"Inactive\",\n }))\n\n console.log(\n formatTable(rows, [\n { key: \"id\", label: \"ID\" },\n { key: \"url\", label: \"URL\" },\n { key: \"events_list\", label: \"Events\" },\n { key: \"active_str\", label: \"Status\" },\n ])\n )\n}\n"],"mappings":";;AAIA,eAAsB,gBACpB,QACA,SACe;CACf,MAAM,OAAO,MAAM,OAAO,IAA6B,mBAAmB;AAE1E,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,KAAK,CAAC;AAC7B;;AAGF,KAAI,CAAC,KAAK,UAAU,QAAQ;AAC1B,UAAQ,IAAI,qBAAqB;AACjC;;CAGF,MAAM,OAAO,KAAK,SAAS,KAAK,OAAO;EACrC,GAAG;EACH,aAAa,EAAE,OAAO,KAAK,KAAK;EAChC,YAAY,EAAE,SAAS,WAAW;EACnC,EAAE;AAEH,SAAQ,IACN,YAAY,MAAM;EAChB;GAAE,KAAK;GAAM,OAAO;GAAM;EAC1B;GAAE,KAAK;GAAO,OAAO;GAAO;EAC5B;GAAE,KAAK;GAAe,OAAO;GAAU;EACvC;GAAE,KAAK;GAAc,OAAO;;EAC7B,CAAC,CACH"}
@@ -0,0 +1,37 @@
1
+ import { n as formatJson, r as formatSuccess } from "../cli.mjs";
2
+ //#region src/commands/judging/track-assign.ts
3
+ function parseOptions(args) {
4
+ const options = {};
5
+ for (let i = 0; i < args.length; i++) switch (args[i]) {
6
+ case "--judge":
7
+ options.judgeParticipantId = args[++i];
8
+ break;
9
+ case "--track":
10
+ options.trackId = args[++i];
11
+ break;
12
+ case "--json":
13
+ options.json = true;
14
+ break;
15
+ }
16
+ return options;
17
+ }
18
+ async function runTrackAssign(client, hackathonId, args) {
19
+ const options = parseOptions(args);
20
+ if (!options.judgeParticipantId || !options.trackId) {
21
+ console.error("Usage: hackathon judging track-assign <hackathon-id> --judge <participant-id> --track <track-id>");
22
+ process.exit(1);
23
+ }
24
+ const result = await client.post(`/api/dashboard/hackathons/${hackathonId}/judging/track-assign`, {
25
+ judgeParticipantId: options.judgeParticipantId,
26
+ trackId: options.trackId
27
+ });
28
+ if (options.json) {
29
+ console.log(formatJson(result));
30
+ return;
31
+ }
32
+ console.log(formatSuccess(`Assigned judge to track (${result.assignedCount} submissions)`));
33
+ }
34
+ //#endregion
35
+ export { runTrackAssign };
36
+
37
+ //# sourceMappingURL=track-assign.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"track-assign.mjs","names":[],"sources":["../../src/commands/judging/track-assign.ts"],"sourcesContent":["import type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatSuccess } from \"../../output.js\"\n\ninterface TrackAssignOptions {\n judgeParticipantId?: string\n trackId?: string\n json?: boolean\n}\n\nfunction parseOptions(args: string[]): TrackAssignOptions {\n const options: TrackAssignOptions = {}\n for (let i = 0; i < args.length; i++) {\n switch (args[i]) {\n case \"--judge\":\n options.judgeParticipantId = args[++i]\n break\n case \"--track\":\n options.trackId = args[++i]\n break\n case \"--json\":\n options.json = true\n break\n }\n }\n return options\n}\n\nexport async function runTrackAssign(\n client: OatmealClient,\n hackathonId: string,\n args: string[]\n): Promise<void> {\n const options = parseOptions(args)\n\n if (!options.judgeParticipantId || !options.trackId) {\n console.error(\"Usage: hackathon judging track-assign <hackathon-id> --judge <participant-id> --track <track-id>\")\n process.exit(1)\n }\n\n const result = await client.post<{ assignedCount: number }>(\n `/api/dashboard/hackathons/${hackathonId}/judging/track-assign`,\n {\n judgeParticipantId: options.judgeParticipantId,\n trackId: options.trackId,\n }\n )\n\n if (options.json) {\n console.log(formatJson(result))\n return\n }\n\n console.log(formatSuccess(`Assigned judge to track (${result.assignedCount} submissions)`))\n}\n"],"mappings":";;AASA,SAAS,aAAa,MAAoC;CACxD,MAAM,UAA8B,EAAE;AACtC,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,IAC/B,SAAQ,KAAK,IAAb;EACE,KAAK;AACH,WAAQ,qBAAqB,KAAK,EAAE;AACpC;EACF,KAAK;AACH,WAAQ,UAAU,KAAK,EAAE;AACzB;EACF,KAAK;AACH,WAAQ,OAAO;AACf;;AAGN,QAAO;;AAGT,eAAsB,eACpB,QACA,aACA,MACe;CACf,MAAM,UAAU,aAAa,KAAK;AAElC,KAAI,CAAC,QAAQ,sBAAsB,CAAC,QAAQ,SAAS;AACnD,UAAQ,MAAM,mGAAmG;AACjH,UAAQ,KAAK,EAAE;;CAGjB,MAAM,SAAS,MAAM,OAAO,KAC1B,6BAA6B,YAAY,wBACzC;EACE,oBAAoB,QAAQ;EAC5B,SAAS,QAAQ;EAClB,CACF;AAED,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,OAAO,CAAC;AAC/B;;AAGF,SAAQ,IAAI,cAAc,4BAA4B,OAAO,cAAc,eAAe,CAAC"}
@@ -0,0 +1,49 @@
1
+ import { n as formatJson, r as formatSuccess } from "../cli.mjs";
2
+ import * as p from "@clack/prompts";
3
+ //#region src/commands/judging/track-unassign.ts
4
+ function parseOptions(args) {
5
+ const options = {};
6
+ for (let i = 0; i < args.length; i++) switch (args[i]) {
7
+ case "--judge":
8
+ options.judgeParticipantId = args[++i];
9
+ break;
10
+ case "--track":
11
+ options.trackId = args[++i];
12
+ break;
13
+ case "--json":
14
+ options.json = true;
15
+ break;
16
+ case "--yes":
17
+ case "-y":
18
+ options.yes = true;
19
+ break;
20
+ }
21
+ return options;
22
+ }
23
+ async function runTrackUnassign(client, hackathonId, args) {
24
+ const options = parseOptions(args);
25
+ if (!options.judgeParticipantId || !options.trackId) {
26
+ console.error("Usage: hackathon judging track-unassign <hackathon-id> --judge <participant-id> --track <track-id>");
27
+ process.exit(1);
28
+ }
29
+ if (!options.yes) {
30
+ const confirm = await p.confirm({ message: "Remove judge from this track?" });
31
+ if (p.isCancel(confirm) || !confirm) {
32
+ p.log.info("Cancelled.");
33
+ return;
34
+ }
35
+ }
36
+ const result = await client.delete(`/api/dashboard/hackathons/${hackathonId}/judging/track-assign`, { body: {
37
+ judgeParticipantId: options.judgeParticipantId,
38
+ trackId: options.trackId
39
+ } });
40
+ if (options.json) {
41
+ console.log(formatJson(result));
42
+ return;
43
+ }
44
+ console.log(formatSuccess(`Removed judge from track (${result.removedCount} assignments removed)`));
45
+ }
46
+ //#endregion
47
+ export { runTrackUnassign };
48
+
49
+ //# sourceMappingURL=track-unassign.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"track-unassign.mjs","names":[],"sources":["../../src/commands/judging/track-unassign.ts"],"sourcesContent":["import * as p from \"@clack/prompts\"\nimport type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatSuccess } from \"../../output.js\"\n\ninterface TrackUnassignOptions {\n judgeParticipantId?: string\n trackId?: string\n json?: boolean\n yes?: boolean\n}\n\nfunction parseOptions(args: string[]): TrackUnassignOptions {\n const options: TrackUnassignOptions = {}\n for (let i = 0; i < args.length; i++) {\n switch (args[i]) {\n case \"--judge\":\n options.judgeParticipantId = args[++i]\n break\n case \"--track\":\n options.trackId = args[++i]\n break\n case \"--json\":\n options.json = true\n break\n case \"--yes\":\n case \"-y\":\n options.yes = true\n break\n }\n }\n return options\n}\n\nexport async function runTrackUnassign(\n client: OatmealClient,\n hackathonId: string,\n args: string[]\n): Promise<void> {\n const options = parseOptions(args)\n\n if (!options.judgeParticipantId || !options.trackId) {\n console.error(\"Usage: hackathon judging track-unassign <hackathon-id> --judge <participant-id> --track <track-id>\")\n process.exit(1)\n }\n\n if (!options.yes) {\n const confirm = await p.confirm({ message: \"Remove judge from this track?\" })\n if (p.isCancel(confirm) || !confirm) {\n p.log.info(\"Cancelled.\")\n return\n }\n }\n\n const result = await client.delete<{ removedCount: number }>(\n `/api/dashboard/hackathons/${hackathonId}/judging/track-assign`,\n {\n body: {\n judgeParticipantId: options.judgeParticipantId,\n trackId: options.trackId,\n },\n }\n )\n\n if (options.json) {\n console.log(formatJson(result))\n return\n }\n\n console.log(formatSuccess(`Removed judge from track (${result.removedCount} assignments removed)`))\n}\n"],"mappings":";;;AAWA,SAAS,aAAa,MAAsC;CAC1D,MAAM,UAAgC,EAAE;AACxC,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,IAC/B,SAAQ,KAAK,IAAb;EACE,KAAK;AACH,WAAQ,qBAAqB,KAAK,EAAE;AACpC;EACF,KAAK;AACH,WAAQ,UAAU,KAAK,EAAE;AACzB;EACF,KAAK;AACH,WAAQ,OAAO;AACf;EACF,KAAK;EACL,KAAK;AACH,WAAQ,MAAM;AACd;;AAGN,QAAO;;AAGT,eAAsB,iBACpB,QACA,aACA,MACe;CACf,MAAM,UAAU,aAAa,KAAK;AAElC,KAAI,CAAC,QAAQ,sBAAsB,CAAC,QAAQ,SAAS;AACnD,UAAQ,MAAM,qGAAqG;AACnH,UAAQ,KAAK,EAAE;;AAGjB,KAAI,CAAC,QAAQ,KAAK;EAChB,MAAM,UAAU,MAAM,EAAE,QAAQ,EAAE,SAAS,iCAAiC,CAAC;AAC7E,MAAI,EAAE,SAAS,QAAQ,IAAI,CAAC,SAAS;AACnC,KAAE,IAAI,KAAK,aAAa;AACxB;;;CAIJ,MAAM,SAAS,MAAM,OAAO,OAC1B,6BAA6B,YAAY,wBACzC,EACE,MAAM;EACJ,oBAAoB,QAAQ;EAC5B,SAAS,QAAQ;EAClB,EACF,CACF;AAED,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,OAAO,CAAC;AAC/B;;AAGF,SAAQ,IAAI,cAAc,6BAA6B,OAAO,aAAa,uBAAuB,CAAC"}
@@ -0,0 +1,49 @@
1
+ import { n as formatJson, r as formatSuccess } from "../cli.mjs";
2
+ //#region src/commands/tracks/update-round.ts
3
+ function parseOptions(args) {
4
+ const options = {};
5
+ for (let i = 0; i < args.length; i++) switch (args[i]) {
6
+ case "--name":
7
+ options.name = args[++i];
8
+ break;
9
+ case "--style":
10
+ options.style = args[++i];
11
+ break;
12
+ case "--status":
13
+ options.status = args[++i];
14
+ break;
15
+ case "--advancement":
16
+ options.advancement = args[++i];
17
+ break;
18
+ case "--json":
19
+ options.json = true;
20
+ break;
21
+ }
22
+ return options;
23
+ }
24
+ async function runTracksUpdateRound(client, hackathonId, trackId, roundId, args) {
25
+ if (!trackId || !roundId) {
26
+ console.error("Usage: hackathon tracks update-round <hackathon-id> <track-id> <round-id> [--style ...]");
27
+ process.exit(1);
28
+ }
29
+ const options = parseOptions(args);
30
+ const body = {};
31
+ if (options.name) body.name = options.name;
32
+ if (options.style) body.style = options.style;
33
+ if (options.status) body.status = options.status;
34
+ if (options.advancement) body.advancement = options.advancement;
35
+ if (Object.keys(body).length === 0) {
36
+ console.error("Error: provide at least one field to update");
37
+ process.exit(1);
38
+ }
39
+ const result = await client.patch(`/api/dashboard/hackathons/${hackathonId}/prize-tracks/${trackId}/rounds/${roundId}`, body);
40
+ if (options.json) {
41
+ console.log(formatJson(result));
42
+ return;
43
+ }
44
+ console.log(formatSuccess(`Updated round ${result.id} [${result.style}, ${result.status}]`));
45
+ }
46
+ //#endregion
47
+ export { runTracksUpdateRound };
48
+
49
+ //# sourceMappingURL=update-round.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-round.mjs","names":[],"sources":["../../src/commands/tracks/update-round.ts"],"sourcesContent":["import type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatSuccess } from \"../../output.js\"\n\ninterface RoundUpdateOptions {\n name?: string\n style?: string\n status?: string\n advancement?: string\n json?: boolean\n}\n\nfunction parseOptions(args: string[]): RoundUpdateOptions {\n const options: RoundUpdateOptions = {}\n for (let i = 0; i < args.length; i++) {\n switch (args[i]) {\n case \"--name\":\n options.name = args[++i]\n break\n case \"--style\":\n options.style = args[++i]\n break\n case \"--status\":\n options.status = args[++i]\n break\n case \"--advancement\":\n options.advancement = args[++i]\n break\n case \"--json\":\n options.json = true\n break\n }\n }\n return options\n}\n\nexport async function runTracksUpdateRound(\n client: OatmealClient,\n hackathonId: string,\n trackId: string,\n roundId: string,\n args: string[]\n): Promise<void> {\n if (!trackId || !roundId) {\n console.error(\"Usage: hackathon tracks update-round <hackathon-id> <track-id> <round-id> [--style ...]\")\n process.exit(1)\n }\n\n const options = parseOptions(args)\n const body: Record<string, unknown> = {}\n if (options.name) body.name = options.name\n if (options.style) body.style = options.style\n if (options.status) body.status = options.status\n if (options.advancement) body.advancement = options.advancement\n\n if (Object.keys(body).length === 0) {\n console.error(\"Error: provide at least one field to update\")\n process.exit(1)\n }\n\n const result = await client.patch<{ id: string; status: string; style: string }>(\n `/api/dashboard/hackathons/${hackathonId}/prize-tracks/${trackId}/rounds/${roundId}`,\n body\n )\n\n if (options.json) {\n console.log(formatJson(result))\n return\n }\n\n console.log(formatSuccess(`Updated round ${result.id} [${result.style}, ${result.status}]`))\n}\n"],"mappings":";;AAWA,SAAS,aAAa,MAAoC;CACxD,MAAM,UAA8B,EAAE;AACtC,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,IAC/B,SAAQ,KAAK,IAAb;EACE,KAAK;AACH,WAAQ,OAAO,KAAK,EAAE;AACtB;EACF,KAAK;AACH,WAAQ,QAAQ,KAAK,EAAE;AACvB;EACF,KAAK;AACH,WAAQ,SAAS,KAAK,EAAE;AACxB;EACF,KAAK;AACH,WAAQ,cAAc,KAAK,EAAE;AAC7B;EACF,KAAK;AACH,WAAQ,OAAO;AACf;;AAGN,QAAO;;AAGT,eAAsB,qBACpB,QACA,aACA,SACA,SACA,MACe;AACf,KAAI,CAAC,WAAW,CAAC,SAAS;AACxB,UAAQ,MAAM,0FAA0F;AACxG,UAAQ,KAAK,EAAE;;CAGjB,MAAM,UAAU,aAAa,KAAK;CAClC,MAAM,OAAgC,EAAE;AACxC,KAAI,QAAQ,KAAM,MAAK,OAAO,QAAQ;AACtC,KAAI,QAAQ,MAAO,MAAK,QAAQ,QAAQ;AACxC,KAAI,QAAQ,OAAQ,MAAK,SAAS,QAAQ;AAC1C,KAAI,QAAQ,YAAa,MAAK,cAAc,QAAQ;AAEpD,KAAI,OAAO,KAAK,KAAK,CAAC,WAAW,GAAG;AAClC,UAAQ,MAAM,8CAA8C;AAC5D,UAAQ,KAAK,EAAE;;CAGjB,MAAM,SAAS,MAAM,OAAO,MAC1B,6BAA6B,YAAY,gBAAgB,QAAQ,UAAU,WAC3E,KACD;AAED,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,OAAO,CAAC;AAC/B;;AAGF,SAAQ,IAAI,cAAc,iBAAiB,OAAO,GAAG,IAAI,OAAO,MAAM,IAAI,OAAO,OAAO,GAAG,CAAC"}
@@ -1,56 +1,49 @@
1
- import { s as VERSION } from "./constants.mjs";
2
- import { checkForUpdate, t as detectInvocationMode } from "./update-check.mjs";
3
- import pc from "picocolors";
4
- import { execSync } from "node:child_process";
5
- //#region src/commands/update.ts
6
- const PKG = "@agi-ventures-canada/hackathon-cli";
7
- function detectPackageManager() {
8
- const execPath = process.env.npm_execpath ?? process.env._ ?? "";
9
- if (/bun/.test(execPath)) return {
10
- cmd: "bun",
11
- install: `bun install -g ${PKG}@latest`
12
- };
13
- if (/pnpm/.test(execPath)) return {
14
- cmd: "pnpm",
15
- install: `pnpm add -g ${PKG}@latest`
16
- };
17
- if (/yarn/.test(execPath)) return {
18
- cmd: "yarn",
19
- install: `yarn global add ${PKG}@latest`
20
- };
21
- return {
22
- cmd: "npm",
23
- install: `npm install -g ${PKG}@latest`
24
- };
25
- }
26
- async function runUpdate() {
27
- console.log(`Current version: ${VERSION}`);
28
- console.log("Checking for updates...");
29
- const update = await checkForUpdate();
30
- if (!update) {
31
- console.log(pc.green("Already up to date."));
32
- return;
1
+ import { n as formatJson, r as formatSuccess } from "../cli.mjs";
2
+ //#region src/commands/tracks/update.ts
3
+ function parseOptions(args) {
4
+ const options = {};
5
+ for (let i = 0; i < args.length; i++) switch (args[i]) {
6
+ case "--name":
7
+ options.name = args[++i];
8
+ break;
9
+ case "--description":
10
+ options.description = args[++i];
11
+ break;
12
+ case "--intent":
13
+ options.intent = args[++i];
14
+ break;
15
+ case "--display-order":
16
+ options.displayOrder = Number(args[++i]);
17
+ break;
18
+ case "--json":
19
+ options.json = true;
20
+ break;
33
21
  }
34
- const pm = detectPackageManager();
35
- const invocationMode = detectInvocationMode();
36
- console.log(`New version available: ${update.latest}`);
37
- if (invocationMode === "local-bun-script") {
38
- console.log(pc.yellow("You are running the repo-local CLI via `bun cli`."));
39
- console.log("Update this repository to use the newer CLI source, or install the published package globally:");
40
- console.log(` ${pm.install}`);
41
- return;
22
+ return options;
23
+ }
24
+ async function runTracksUpdate(client, hackathonId, trackId, args) {
25
+ if (!trackId) {
26
+ console.error("Usage: hackathon tracks update <hackathon-id> <track-id> [--name ...]");
27
+ process.exit(1);
42
28
  }
43
- console.log(`Updating via ${pm.cmd}...`);
44
- try {
45
- execSync(pm.install, { stdio: "inherit" });
46
- console.log(pc.green(`\nUpdated to ${update.latest}`));
47
- } catch {
48
- console.error(pc.red("Update failed. Try manually:"));
49
- console.error(` ${pm.install}`);
29
+ const options = parseOptions(args);
30
+ const body = {};
31
+ if (options.name) body.name = options.name;
32
+ if (options.description) body.description = options.description;
33
+ if (options.intent) body.intent = options.intent;
34
+ if (options.displayOrder !== void 0) body.displayOrder = options.displayOrder;
35
+ if (Object.keys(body).length === 0) {
36
+ console.error("Error: provide at least one field to update");
50
37
  process.exit(1);
51
38
  }
39
+ const result = await client.patch(`/api/dashboard/hackathons/${hackathonId}/prize-tracks/${trackId}`, body);
40
+ if (options.json) {
41
+ console.log(formatJson(result));
42
+ return;
43
+ }
44
+ console.log(formatSuccess(`Updated track ${result.id}`));
52
45
  }
53
46
  //#endregion
54
- export { runUpdate };
47
+ export { runTracksUpdate };
55
48
 
56
49
  //# sourceMappingURL=update5.mjs.map