@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,18 @@
1
+ import { n as formatJson, r as formatSuccess } from "../cli.mjs";
2
+ //#region src/commands/tracks/activate-round.ts
3
+ async function runTracksActivateRound(client, hackathonId, trackId, roundId, options) {
4
+ if (!trackId || !roundId) {
5
+ console.error("Usage: hackathon tracks activate-round <hackathon-id> <track-id> <round-id>");
6
+ process.exit(1);
7
+ }
8
+ const result = await client.post(`/api/dashboard/hackathons/${hackathonId}/prize-tracks/${trackId}/rounds/${roundId}/activate`, {});
9
+ if (options.json) {
10
+ console.log(formatJson(result));
11
+ return;
12
+ }
13
+ console.log(formatSuccess("Round activated"));
14
+ }
15
+ //#endregion
16
+ export { runTracksActivateRound };
17
+
18
+ //# sourceMappingURL=activate-round.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activate-round.mjs","names":[],"sources":["../../src/commands/tracks/activate-round.ts"],"sourcesContent":["import type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatSuccess } from \"../../output.js\"\n\nexport async function runTracksActivateRound(\n client: OatmealClient,\n hackathonId: string,\n trackId: string,\n roundId: string,\n options: { json?: boolean }\n): Promise<void> {\n if (!trackId || !roundId) {\n console.error(\"Usage: hackathon tracks activate-round <hackathon-id> <track-id> <round-id>\")\n process.exit(1)\n }\n\n const result = await client.post<{ success: boolean }>(\n `/api/dashboard/hackathons/${hackathonId}/prize-tracks/${trackId}/rounds/${roundId}/activate`,\n {}\n )\n\n if (options.json) {\n console.log(formatJson(result))\n return\n }\n\n console.log(formatSuccess(\"Round activated\"))\n}\n"],"mappings":";;AAGA,eAAsB,uBACpB,QACA,aACA,SACA,SACA,SACe;AACf,KAAI,CAAC,WAAW,CAAC,SAAS;AACxB,UAAQ,MAAM,8EAA8E;AAC5F,UAAQ,KAAK,EAAE;;CAGjB,MAAM,SAAS,MAAM,OAAO,KAC1B,6BAA6B,YAAY,gBAAgB,QAAQ,UAAU,QAAQ,YACnF,EAAE,CACH;AAED,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,OAAO,CAAC;AAC/B;;AAGF,SAAQ,IAAI,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,56 @@
1
+ import { n as formatJson, r as formatSuccess } from "../cli.mjs";
2
+ //#region src/commands/tracks/buckets.ts
3
+ function parseOptions(args) {
4
+ const options = {};
5
+ const buckets = [];
6
+ let currentLabel = "";
7
+ let currentDesc = "";
8
+ for (let i = 0; i < args.length; i++) switch (args[i]) {
9
+ case "--json":
10
+ options.json = true;
11
+ break;
12
+ case "--bucket":
13
+ if (currentLabel) buckets.push({
14
+ level: buckets.length + 1,
15
+ label: currentLabel,
16
+ description: currentDesc || void 0
17
+ });
18
+ currentLabel = args[++i];
19
+ currentDesc = "";
20
+ break;
21
+ case "--bucket-desc":
22
+ currentDesc = args[++i];
23
+ break;
24
+ }
25
+ if (currentLabel) buckets.push({
26
+ level: buckets.length + 1,
27
+ label: currentLabel,
28
+ description: currentDesc || void 0
29
+ });
30
+ return {
31
+ buckets,
32
+ options
33
+ };
34
+ }
35
+ async function runTracksBuckets(client, hackathonId, trackId, roundId, args) {
36
+ if (!trackId || !roundId) {
37
+ console.error("Usage: hackathon tracks buckets <hackathon-id> <track-id> <round-id> --bucket <label> [--bucket-desc <desc>] ...");
38
+ process.exit(1);
39
+ }
40
+ const { buckets, options } = parseOptions(args);
41
+ if (buckets.length < 2) {
42
+ console.error("Error: at least 2 buckets are required (use --bucket <label> for each)");
43
+ process.exit(1);
44
+ }
45
+ const result = await client.put(`/api/dashboard/hackathons/${hackathonId}/prize-tracks/${trackId}/rounds/${roundId}/buckets`, { buckets });
46
+ if (options.json) {
47
+ console.log(formatJson(result));
48
+ return;
49
+ }
50
+ console.log(formatSuccess(`Saved ${result.buckets.length} bucket definitions`));
51
+ for (const b of result.buckets) console.log(` ${b.level}. ${b.label}${b.description ? ` — ${b.description}` : ""}`);
52
+ }
53
+ //#endregion
54
+ export { runTracksBuckets };
55
+
56
+ //# sourceMappingURL=buckets.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buckets.mjs","names":[],"sources":["../../src/commands/tracks/buckets.ts"],"sourcesContent":["import type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatSuccess } from \"../../output.js\"\nimport type { BucketDef } from \"../../types.js\"\n\ninterface BucketsOptions {\n json?: boolean\n}\n\nfunction parseOptions(args: string[]): { buckets: Array<{ level: number; label: string; description?: string }>; options: BucketsOptions } {\n const options: BucketsOptions = {}\n const buckets: Array<{ level: number; label: string; description?: string }> = []\n let currentLabel = \"\"\n let currentDesc = \"\"\n\n for (let i = 0; i < args.length; i++) {\n switch (args[i]) {\n case \"--json\":\n options.json = true\n break\n case \"--bucket\": {\n if (currentLabel) {\n buckets.push({ level: buckets.length + 1, label: currentLabel, description: currentDesc || undefined })\n }\n currentLabel = args[++i]\n currentDesc = \"\"\n break\n }\n case \"--bucket-desc\":\n currentDesc = args[++i]\n break\n }\n }\n if (currentLabel) {\n buckets.push({ level: buckets.length + 1, label: currentLabel, description: currentDesc || undefined })\n }\n\n return { buckets, options }\n}\n\nexport async function runTracksBuckets(\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 buckets <hackathon-id> <track-id> <round-id> --bucket <label> [--bucket-desc <desc>] ...\")\n process.exit(1)\n }\n\n const { buckets, options } = parseOptions(args)\n\n if (buckets.length < 2) {\n console.error(\"Error: at least 2 buckets are required (use --bucket <label> for each)\")\n process.exit(1)\n }\n\n const result = await client.put<{ buckets: BucketDef[] }>(\n `/api/dashboard/hackathons/${hackathonId}/prize-tracks/${trackId}/rounds/${roundId}/buckets`,\n { buckets }\n )\n\n if (options.json) {\n console.log(formatJson(result))\n return\n }\n\n console.log(formatSuccess(`Saved ${result.buckets.length} bucket definitions`))\n for (const b of result.buckets) {\n console.log(` ${b.level}. ${b.label}${b.description ? ` — ${b.description}` : \"\"}`)\n }\n}\n"],"mappings":";;AAQA,SAAS,aAAa,MAAqH;CACzI,MAAM,UAA0B,EAAE;CAClC,MAAM,UAAyE,EAAE;CACjF,IAAI,eAAe;CACnB,IAAI,cAAc;AAElB,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,IAC/B,SAAQ,KAAK,IAAb;EACE,KAAK;AACH,WAAQ,OAAO;AACf;EACF,KAAK;AACH,OAAI,aACF,SAAQ,KAAK;IAAE,OAAO,QAAQ,SAAS;IAAG,OAAO;IAAc,aAAa,eAAe,KAAA;IAAW,CAAC;AAEzG,kBAAe,KAAK,EAAE;AACtB,iBAAc;AACd;EAEF,KAAK;AACH,iBAAc,KAAK,EAAE;AACrB;;AAGN,KAAI,aACF,SAAQ,KAAK;EAAE,OAAO,QAAQ,SAAS;EAAG,OAAO;EAAc,aAAa,eAAe,KAAA;EAAW,CAAC;AAGzG,QAAO;EAAE;EAAS;EAAS;;AAG7B,eAAsB,iBACpB,QACA,aACA,SACA,SACA,MACe;AACf,KAAI,CAAC,WAAW,CAAC,SAAS;AACxB,UAAQ,MAAM,mHAAmH;AACjI,UAAQ,KAAK,EAAE;;CAGjB,MAAM,EAAE,SAAS,YAAY,aAAa,KAAK;AAE/C,KAAI,QAAQ,SAAS,GAAG;AACtB,UAAQ,MAAM,yEAAyE;AACvF,UAAQ,KAAK,EAAE;;CAGjB,MAAM,SAAS,MAAM,OAAO,IAC1B,6BAA6B,YAAY,gBAAgB,QAAQ,UAAU,QAAQ,WACnF,EAAE,SAAS,CACZ;AAED,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,OAAO,CAAC;AAC/B;;AAGF,SAAQ,IAAI,cAAc,SAAS,OAAO,QAAQ,OAAO,qBAAqB,CAAC;AAC/E,MAAK,MAAM,KAAK,OAAO,QACrB,SAAQ,IAAI,KAAK,EAAE,MAAM,IAAI,EAAE,QAAQ,EAAE,cAAc,MAAM,EAAE,gBAAgB,KAAK"}
@@ -0,0 +1,18 @@
1
+ import { n as formatJson, r as formatSuccess } from "../cli.mjs";
2
+ //#region src/commands/tracks/calculate-results.ts
3
+ async function runTracksCalculateResults(client, hackathonId, trackId, roundId, options) {
4
+ if (!trackId || !roundId) {
5
+ console.error("Usage: hackathon tracks calculate-results <hackathon-id> <track-id> <round-id>");
6
+ process.exit(1);
7
+ }
8
+ const result = await client.post(`/api/dashboard/hackathons/${hackathonId}/prize-tracks/${trackId}/rounds/${roundId}/calculate-results`, {});
9
+ if (options.json) {
10
+ console.log(formatJson(result));
11
+ return;
12
+ }
13
+ console.log(formatSuccess(`Calculated results for ${result.resultsCount} submissions`));
14
+ }
15
+ //#endregion
16
+ export { runTracksCalculateResults };
17
+
18
+ //# sourceMappingURL=calculate-results.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calculate-results.mjs","names":[],"sources":["../../src/commands/tracks/calculate-results.ts"],"sourcesContent":["import type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatSuccess } from \"../../output.js\"\n\nexport async function runTracksCalculateResults(\n client: OatmealClient,\n hackathonId: string,\n trackId: string,\n roundId: string,\n options: { json?: boolean }\n): Promise<void> {\n if (!trackId || !roundId) {\n console.error(\"Usage: hackathon tracks calculate-results <hackathon-id> <track-id> <round-id>\")\n process.exit(1)\n }\n\n const result = await client.post<{ success: boolean; resultsCount: number }>(\n `/api/dashboard/hackathons/${hackathonId}/prize-tracks/${trackId}/rounds/${roundId}/calculate-results`,\n {}\n )\n\n if (options.json) {\n console.log(formatJson(result))\n return\n }\n\n console.log(formatSuccess(`Calculated results for ${result.resultsCount} submissions`))\n}\n"],"mappings":";;AAGA,eAAsB,0BACpB,QACA,aACA,SACA,SACA,SACe;AACf,KAAI,CAAC,WAAW,CAAC,SAAS;AACxB,UAAQ,MAAM,iFAAiF;AAC/F,UAAQ,KAAK,EAAE;;CAGjB,MAAM,SAAS,MAAM,OAAO,KAC1B,6BAA6B,YAAY,gBAAgB,QAAQ,UAAU,QAAQ,qBACnF,EAAE,CACH;AAED,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,OAAO,CAAC;AAC/B;;AAGF,SAAQ,IAAI,cAAc,0BAA0B,OAAO,aAAa,cAAc,CAAC"}
@@ -28,7 +28,7 @@ async function runHackathonsCreate(client, args) {
28
28
  let slug = options.slug;
29
29
  let description = options.description;
30
30
  if (options.fromUrl) {
31
- const hackathon = await client.post("/api/dashboard/import/luma-url", {
31
+ const hackathon = await client.post("/api/dashboard/import/url", {
32
32
  url: options.fromUrl,
33
33
  name,
34
34
  description
@@ -1 +1 @@
1
- {"version":3,"file":"create.mjs","names":[],"sources":["../../src/commands/hackathons/create.ts"],"sourcesContent":["import * as p from \"@clack/prompts\"\nimport type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatSuccess } from \"../../output.js\"\nimport type { Hackathon } from \"../../types.js\"\n\ninterface CreateOptions {\n name?: string\n slug?: string\n description?: string\n fromUrl?: string\n json?: boolean\n}\n\ninterface ImportedHackathonResponse {\n id: string\n name: string\n slug: string\n}\n\nexport function parseCreateOptions(args: string[]): CreateOptions {\n const options: CreateOptions = {}\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 \"--slug\":\n options.slug = args[++i]\n break\n case \"--description\":\n options.description = args[++i]\n break\n case \"--from-url\":\n options.fromUrl = args[++i]\n break\n case \"--json\":\n options.json = true\n break\n }\n }\n return options\n}\n\nexport async function runHackathonsCreate(\n client: OatmealClient,\n args: string[]\n): Promise<void> {\n const options = parseCreateOptions(args)\n\n let name = options.name\n let slug = options.slug\n let description = options.description\n\n if (options.fromUrl) {\n const hackathon = await client.post<ImportedHackathonResponse>(\"/api/dashboard/import/luma-url\", {\n url: options.fromUrl,\n name,\n description,\n })\n\n if (options.json) {\n console.log(formatJson(hackathon))\n return\n }\n\n console.log(formatSuccess(`Imported hackathon \"${hackathon.name}\" (${hackathon.id})`))\n return\n }\n\n if (!name && process.stdout.isTTY) {\n const result = await p.text({ message: \"Hackathon name:\", validate: (v: string) => (v ? undefined : \"Name is required\") })\n if (p.isCancel(result)) return\n name = result\n }\n\n if (!name) {\n console.error(\"Error: --name is required\")\n process.exit(1)\n }\n\n if (!slug && process.stdout.isTTY) {\n const suggested = name.toLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/^-|-$/g, \"\")\n const result = await p.text({ message: \"Slug:\", initialValue: suggested })\n if (p.isCancel(result)) return\n slug = result\n }\n\n if (!description && process.stdout.isTTY) {\n const result = await p.text({ message: \"Description (optional):\" })\n if (!p.isCancel(result)) description = result || undefined\n }\n\n const hackathon = await client.post<Hackathon>(\"/api/dashboard/hackathons\", {\n name,\n slug,\n description,\n })\n\n if (options.json) {\n console.log(formatJson(hackathon))\n return\n }\n\n console.log(formatSuccess(`Created hackathon \"${hackathon.name}\" (${hackathon.id})`))\n}\n"],"mappings":";;;AAmBA,SAAgB,mBAAmB,MAA+B;CAChE,MAAM,UAAyB,EAAE;AACjC,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,IAC/B,SAAQ,KAAK,IAAb;EACE,KAAK;AACH,WAAQ,OAAO,KAAK,EAAE;AACtB;EACF,KAAK;AACH,WAAQ,OAAO,KAAK,EAAE;AACtB;EACF,KAAK;AACH,WAAQ,cAAc,KAAK,EAAE;AAC7B;EACF,KAAK;AACH,WAAQ,UAAU,KAAK,EAAE;AACzB;EACF,KAAK;AACH,WAAQ,OAAO;AACf;;AAGN,QAAO;;AAGT,eAAsB,oBACpB,QACA,MACe;CACf,MAAM,UAAU,mBAAmB,KAAK;CAExC,IAAI,OAAO,QAAQ;CACnB,IAAI,OAAO,QAAQ;CACnB,IAAI,cAAc,QAAQ;AAE1B,KAAI,QAAQ,SAAS;EACnB,MAAM,YAAY,MAAM,OAAO,KAAgC,kCAAkC;GAC/F,KAAK,QAAQ;GACb;GACA;GACD,CAAC;AAEF,MAAI,QAAQ,MAAM;AAChB,WAAQ,IAAI,WAAW,UAAU,CAAC;AAClC;;AAGF,UAAQ,IAAI,cAAc,uBAAuB,UAAU,KAAK,KAAK,UAAU,GAAG,GAAG,CAAC;AACtF;;AAGF,KAAI,CAAC,QAAQ,QAAQ,OAAO,OAAO;EACjC,MAAM,SAAS,MAAM,EAAE,KAAK;GAAE,SAAS;GAAmB,WAAW,MAAe,IAAI,KAAA,IAAY;GAAqB,CAAC;AAC1H,MAAI,EAAE,SAAS,OAAO,CAAE;AACxB,SAAO;;AAGT,KAAI,CAAC,MAAM;AACT,UAAQ,MAAM,4BAA4B;AAC1C,UAAQ,KAAK,EAAE;;AAGjB,KAAI,CAAC,QAAQ,QAAQ,OAAO,OAAO;EACjC,MAAM,YAAY,KAAK,aAAa,CAAC,QAAQ,eAAe,IAAI,CAAC,QAAQ,UAAU,GAAG;EACtF,MAAM,SAAS,MAAM,EAAE,KAAK;GAAE,SAAS;GAAS,cAAc;GAAW,CAAC;AAC1E,MAAI,EAAE,SAAS,OAAO,CAAE;AACxB,SAAO;;AAGT,KAAI,CAAC,eAAe,QAAQ,OAAO,OAAO;EACxC,MAAM,SAAS,MAAM,EAAE,KAAK,EAAE,SAAS,2BAA2B,CAAC;AACnE,MAAI,CAAC,EAAE,SAAS,OAAO,CAAE,eAAc,UAAU,KAAA;;CAGnD,MAAM,YAAY,MAAM,OAAO,KAAgB,6BAA6B;EAC1E;EACA;EACA;EACD,CAAC;AAEF,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,UAAU,CAAC;AAClC;;AAGF,SAAQ,IAAI,cAAc,sBAAsB,UAAU,KAAK,KAAK,UAAU,GAAG,GAAG,CAAC"}
1
+ {"version":3,"file":"create.mjs","names":[],"sources":["../../src/commands/hackathons/create.ts"],"sourcesContent":["import * as p from \"@clack/prompts\"\nimport type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatSuccess } from \"../../output.js\"\nimport type { Hackathon } from \"../../types.js\"\n\ninterface CreateOptions {\n name?: string\n slug?: string\n description?: string\n fromUrl?: string\n json?: boolean\n}\n\ninterface ImportedHackathonResponse {\n id: string\n name: string\n slug: string\n}\n\nexport function parseCreateOptions(args: string[]): CreateOptions {\n const options: CreateOptions = {}\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 \"--slug\":\n options.slug = args[++i]\n break\n case \"--description\":\n options.description = args[++i]\n break\n case \"--from-url\":\n options.fromUrl = args[++i]\n break\n case \"--json\":\n options.json = true\n break\n }\n }\n return options\n}\n\nexport async function runHackathonsCreate(\n client: OatmealClient,\n args: string[]\n): Promise<void> {\n const options = parseCreateOptions(args)\n\n let name = options.name\n let slug = options.slug\n let description = options.description\n\n if (options.fromUrl) {\n const hackathon = await client.post<ImportedHackathonResponse>(\"/api/dashboard/import/url\", {\n url: options.fromUrl,\n name,\n description,\n })\n\n if (options.json) {\n console.log(formatJson(hackathon))\n return\n }\n\n console.log(formatSuccess(`Imported hackathon \"${hackathon.name}\" (${hackathon.id})`))\n return\n }\n\n if (!name && process.stdout.isTTY) {\n const result = await p.text({ message: \"Hackathon name:\", validate: (v: string) => (v ? undefined : \"Name is required\") })\n if (p.isCancel(result)) return\n name = result\n }\n\n if (!name) {\n console.error(\"Error: --name is required\")\n process.exit(1)\n }\n\n if (!slug && process.stdout.isTTY) {\n const suggested = name.toLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/^-|-$/g, \"\")\n const result = await p.text({ message: \"Slug:\", initialValue: suggested })\n if (p.isCancel(result)) return\n slug = result\n }\n\n if (!description && process.stdout.isTTY) {\n const result = await p.text({ message: \"Description (optional):\" })\n if (!p.isCancel(result)) description = result || undefined\n }\n\n const hackathon = await client.post<Hackathon>(\"/api/dashboard/hackathons\", {\n name,\n slug,\n description,\n })\n\n if (options.json) {\n console.log(formatJson(hackathon))\n return\n }\n\n console.log(formatSuccess(`Created hackathon \"${hackathon.name}\" (${hackathon.id})`))\n}\n"],"mappings":";;;AAmBA,SAAgB,mBAAmB,MAA+B;CAChE,MAAM,UAAyB,EAAE;AACjC,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,IAC/B,SAAQ,KAAK,IAAb;EACE,KAAK;AACH,WAAQ,OAAO,KAAK,EAAE;AACtB;EACF,KAAK;AACH,WAAQ,OAAO,KAAK,EAAE;AACtB;EACF,KAAK;AACH,WAAQ,cAAc,KAAK,EAAE;AAC7B;EACF,KAAK;AACH,WAAQ,UAAU,KAAK,EAAE;AACzB;EACF,KAAK;AACH,WAAQ,OAAO;AACf;;AAGN,QAAO;;AAGT,eAAsB,oBACpB,QACA,MACe;CACf,MAAM,UAAU,mBAAmB,KAAK;CAExC,IAAI,OAAO,QAAQ;CACnB,IAAI,OAAO,QAAQ;CACnB,IAAI,cAAc,QAAQ;AAE1B,KAAI,QAAQ,SAAS;EACnB,MAAM,YAAY,MAAM,OAAO,KAAgC,6BAA6B;GAC1F,KAAK,QAAQ;GACb;GACA;GACD,CAAC;AAEF,MAAI,QAAQ,MAAM;AAChB,WAAQ,IAAI,WAAW,UAAU,CAAC;AAClC;;AAGF,UAAQ,IAAI,cAAc,uBAAuB,UAAU,KAAK,KAAK,UAAU,GAAG,GAAG,CAAC;AACtF;;AAGF,KAAI,CAAC,QAAQ,QAAQ,OAAO,OAAO;EACjC,MAAM,SAAS,MAAM,EAAE,KAAK;GAAE,SAAS;GAAmB,WAAW,MAAe,IAAI,KAAA,IAAY;GAAqB,CAAC;AAC1H,MAAI,EAAE,SAAS,OAAO,CAAE;AACxB,SAAO;;AAGT,KAAI,CAAC,MAAM;AACT,UAAQ,MAAM,4BAA4B;AAC1C,UAAQ,KAAK,EAAE;;AAGjB,KAAI,CAAC,QAAQ,QAAQ,OAAO,OAAO;EACjC,MAAM,YAAY,KAAK,aAAa,CAAC,QAAQ,eAAe,IAAI,CAAC,QAAQ,UAAU,GAAG;EACtF,MAAM,SAAS,MAAM,EAAE,KAAK;GAAE,SAAS;GAAS,cAAc;GAAW,CAAC;AAC1E,MAAI,EAAE,SAAS,OAAO,CAAE;AACxB,SAAO;;AAGT,KAAI,CAAC,eAAe,QAAQ,OAAO,OAAO;EACxC,MAAM,SAAS,MAAM,EAAE,KAAK,EAAE,SAAS,2BAA2B,CAAC;AACnE,MAAI,CAAC,EAAE,SAAS,OAAO,CAAE,eAAc,UAAU,KAAA;;CAGnD,MAAM,YAAY,MAAM,OAAO,KAAgB,6BAA6B;EAC1E;EACA;EACA;EACD,CAAC;AAEF,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,UAAU,CAAC;AAClC;;AAGF,SAAQ,IAAI,cAAc,sBAAsB,UAAU,KAAK,KAAK,UAAU,GAAG,GAAG,CAAC"}
@@ -1,20 +1,20 @@
1
- import { a as formatWarning, n as formatJson, r as formatSuccess } from "../cli.mjs";
1
+ import { n as formatJson, r as formatSuccess } from "../cli.mjs";
2
2
  import * as p from "@clack/prompts";
3
- //#region src/commands/webhooks/create.ts
4
- function normalizeUrl(input) {
5
- const trimmed = input.trim();
6
- if (!trimmed) return trimmed;
7
- if (/^https?:\/\//i.test(trimmed)) return trimmed;
8
- return `https://${trimmed}`;
9
- }
10
- function parseWebhookCreateOptions(args) {
3
+ //#region src/commands/tracks/create.ts
4
+ function parseOptions(args) {
11
5
  const options = {};
12
6
  for (let i = 0; i < args.length; i++) switch (args[i]) {
13
- case "--url":
14
- options.url = args[++i];
7
+ case "--name":
8
+ options.name = args[++i];
9
+ break;
10
+ case "--description":
11
+ options.description = args[++i];
12
+ break;
13
+ case "--intent":
14
+ options.intent = args[++i];
15
15
  break;
16
- case "--events":
17
- options.events = args[++i]?.split(",").map((s) => s.trim());
16
+ case "--style":
17
+ options.style = args[++i];
18
18
  break;
19
19
  case "--json":
20
20
  options.json = true;
@@ -22,42 +22,33 @@ function parseWebhookCreateOptions(args) {
22
22
  }
23
23
  return options;
24
24
  }
25
- async function runWebhooksCreate(client, args) {
26
- const options = parseWebhookCreateOptions(args);
27
- let url = options.url;
28
- let events = options.events;
29
- if (!url && process.stdout.isTTY) {
25
+ async function runTracksCreate(client, hackathonId, args) {
26
+ const options = parseOptions(args);
27
+ let name = options.name;
28
+ if (!name && process.stdout.isTTY) {
30
29
  const result = await p.text({
31
- message: "Webhook URL:",
30
+ message: "Track name:",
32
31
  validate: (v) => v ? void 0 : "Required"
33
32
  });
34
33
  if (p.isCancel(result)) return;
35
- url = result;
34
+ name = result;
36
35
  }
37
- if (!url) {
38
- console.error("Error: --url is required");
36
+ if (!name) {
37
+ console.error("Error: --name is required");
39
38
  process.exit(1);
40
39
  }
41
- if (!events?.length && process.stdout.isTTY) {
42
- const result = await p.text({ message: "Events (comma-separated):" });
43
- if (p.isCancel(result)) return;
44
- events = result.split(",").map((s) => s.trim());
45
- }
46
- const webhook = await client.post("/api/v1/webhooks", {
47
- url: normalizeUrl(url),
48
- events
49
- });
40
+ const body = { name };
41
+ if (options.description) body.description = options.description;
42
+ if (options.intent) body.intent = options.intent;
43
+ if (options.style) body.style = options.style;
44
+ const track = await client.post(`/api/dashboard/hackathons/${hackathonId}/prize-tracks`, body);
50
45
  if (options.json) {
51
- console.log(formatJson(webhook));
46
+ console.log(formatJson(track));
52
47
  return;
53
48
  }
54
- console.log(formatSuccess(`Created webhook ${webhook.id}`));
55
- if (webhook.signingSecret) {
56
- console.log(formatWarning("Save this signing secret — it won't be shown again:"));
57
- console.log(webhook.signingSecret);
58
- }
49
+ console.log(formatSuccess(`Created track "${track.name}" (${track.id})`));
59
50
  }
60
51
  //#endregion
61
- export { runWebhooksCreate };
52
+ export { runTracksCreate };
62
53
 
63
54
  //# sourceMappingURL=create6.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"create6.mjs","names":[],"sources":["../../src/commands/webhooks/create.ts"],"sourcesContent":["import * as p from \"@clack/prompts\"\nimport type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatSuccess, formatWarning } from \"../../output.js\"\nimport type { Webhook } from \"../../types.js\"\n\ninterface WebhookCreateOptions {\n url?: string\n events?: string[]\n json?: boolean\n}\n\nfunction normalizeUrl(input: string): string {\n const trimmed = input.trim()\n if (!trimmed) return trimmed\n if (/^https?:\\/\\//i.test(trimmed)) return trimmed\n return `https://${trimmed}`\n}\n\nexport function parseWebhookCreateOptions(args: string[]): WebhookCreateOptions {\n const options: WebhookCreateOptions = {}\n for (let i = 0; i < args.length; i++) {\n switch (args[i]) {\n case \"--url\":\n options.url = args[++i]\n break\n case \"--events\":\n options.events = args[++i]?.split(\",\").map((s) => s.trim())\n break\n case \"--json\":\n options.json = true\n break\n }\n }\n return options\n}\n\nexport async function runWebhooksCreate(\n client: OatmealClient,\n args: string[]\n): Promise<void> {\n const options = parseWebhookCreateOptions(args)\n\n let url = options.url\n let events = options.events\n\n if (!url && process.stdout.isTTY) {\n const result = await p.text({ message: \"Webhook URL:\", validate: (v: string) => (v ? undefined : \"Required\") })\n if (p.isCancel(result)) return\n url = result\n }\n\n if (!url) {\n console.error(\"Error: --url is required\")\n process.exit(1)\n }\n\n if (!events?.length && process.stdout.isTTY) {\n const result = await p.text({ message: \"Events (comma-separated):\" })\n if (p.isCancel(result)) return\n events = result.split(\",\").map((s: string) => s.trim())\n }\n\n const webhook = await client.post<Webhook>(\"/api/v1/webhooks\", {\n url: normalizeUrl(url),\n events,\n })\n\n if (options.json) {\n console.log(formatJson(webhook))\n return\n }\n\n console.log(formatSuccess(`Created webhook ${webhook.id}`))\n if (webhook.signingSecret) {\n console.log(formatWarning(\"Save this signing secret — it won't be shown again:\"))\n console.log(webhook.signingSecret)\n }\n}\n"],"mappings":";;;AAWA,SAAS,aAAa,OAAuB;CAC3C,MAAM,UAAU,MAAM,MAAM;AAC5B,KAAI,CAAC,QAAS,QAAO;AACrB,KAAI,gBAAgB,KAAK,QAAQ,CAAE,QAAO;AAC1C,QAAO,WAAW;;AAGpB,SAAgB,0BAA0B,MAAsC;CAC9E,MAAM,UAAgC,EAAE;AACxC,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,IAC/B,SAAQ,KAAK,IAAb;EACE,KAAK;AACH,WAAQ,MAAM,KAAK,EAAE;AACrB;EACF,KAAK;AACH,WAAQ,SAAS,KAAK,EAAE,IAAI,MAAM,IAAI,CAAC,KAAK,MAAM,EAAE,MAAM,CAAC;AAC3D;EACF,KAAK;AACH,WAAQ,OAAO;AACf;;AAGN,QAAO;;AAGT,eAAsB,kBACpB,QACA,MACe;CACf,MAAM,UAAU,0BAA0B,KAAK;CAE/C,IAAI,MAAM,QAAQ;CAClB,IAAI,SAAS,QAAQ;AAErB,KAAI,CAAC,OAAO,QAAQ,OAAO,OAAO;EAChC,MAAM,SAAS,MAAM,EAAE,KAAK;GAAE,SAAS;GAAgB,WAAW,MAAe,IAAI,KAAA,IAAY;GAAa,CAAC;AAC/G,MAAI,EAAE,SAAS,OAAO,CAAE;AACxB,QAAM;;AAGR,KAAI,CAAC,KAAK;AACR,UAAQ,MAAM,2BAA2B;AACzC,UAAQ,KAAK,EAAE;;AAGjB,KAAI,CAAC,QAAQ,UAAU,QAAQ,OAAO,OAAO;EAC3C,MAAM,SAAS,MAAM,EAAE,KAAK,EAAE,SAAS,6BAA6B,CAAC;AACrE,MAAI,EAAE,SAAS,OAAO,CAAE;AACxB,WAAS,OAAO,MAAM,IAAI,CAAC,KAAK,MAAc,EAAE,MAAM,CAAC;;CAGzD,MAAM,UAAU,MAAM,OAAO,KAAc,oBAAoB;EAC7D,KAAK,aAAa,IAAI;EACtB;EACD,CAAC;AAEF,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,QAAQ,CAAC;AAChC;;AAGF,SAAQ,IAAI,cAAc,mBAAmB,QAAQ,KAAK,CAAC;AAC3D,KAAI,QAAQ,eAAe;AACzB,UAAQ,IAAI,cAAc,sDAAsD,CAAC;AACjF,UAAQ,IAAI,QAAQ,cAAc"}
1
+ {"version":3,"file":"create6.mjs","names":[],"sources":["../../src/commands/tracks/create.ts"],"sourcesContent":["import * as p from \"@clack/prompts\"\nimport type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatSuccess } from \"../../output.js\"\n\ninterface TrackCreateOptions {\n name?: string\n description?: string\n intent?: string\n style?: string\n json?: boolean\n}\n\nfunction parseOptions(args: string[]): TrackCreateOptions {\n const options: TrackCreateOptions = {}\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 \"--description\":\n options.description = args[++i]\n break\n case \"--intent\":\n options.intent = args[++i]\n break\n case \"--style\":\n options.style = args[++i]\n break\n case \"--json\":\n options.json = true\n break\n }\n }\n return options\n}\n\nexport async function runTracksCreate(\n client: OatmealClient,\n hackathonId: string,\n args: string[]\n): Promise<void> {\n const options = parseOptions(args)\n\n let name = options.name\n\n if (!name && process.stdout.isTTY) {\n const result = await p.text({ message: \"Track name:\", validate: (v: string) => (v ? undefined : \"Required\") })\n if (p.isCancel(result)) return\n name = result\n }\n\n if (!name) {\n console.error(\"Error: --name is required\")\n process.exit(1)\n }\n\n const body: Record<string, unknown> = { name }\n if (options.description) body.description = options.description\n if (options.intent) body.intent = options.intent\n if (options.style) body.style = options.style\n\n const track = await client.post<{ id: string; name: string; intent: string }>(\n `/api/dashboard/hackathons/${hackathonId}/prize-tracks`,\n body\n )\n\n if (options.json) {\n console.log(formatJson(track))\n return\n }\n\n console.log(formatSuccess(`Created track \"${track.name}\" (${track.id})`))\n}\n"],"mappings":";;;AAYA,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,cAAc,KAAK,EAAE;AAC7B;EACF,KAAK;AACH,WAAQ,SAAS,KAAK,EAAE;AACxB;EACF,KAAK;AACH,WAAQ,QAAQ,KAAK,EAAE;AACvB;EACF,KAAK;AACH,WAAQ,OAAO;AACf;;AAGN,QAAO;;AAGT,eAAsB,gBACpB,QACA,aACA,MACe;CACf,MAAM,UAAU,aAAa,KAAK;CAElC,IAAI,OAAO,QAAQ;AAEnB,KAAI,CAAC,QAAQ,QAAQ,OAAO,OAAO;EACjC,MAAM,SAAS,MAAM,EAAE,KAAK;GAAE,SAAS;GAAe,WAAW,MAAe,IAAI,KAAA,IAAY;GAAa,CAAC;AAC9G,MAAI,EAAE,SAAS,OAAO,CAAE;AACxB,SAAO;;AAGT,KAAI,CAAC,MAAM;AACT,UAAQ,MAAM,4BAA4B;AAC1C,UAAQ,KAAK,EAAE;;CAGjB,MAAM,OAAgC,EAAE,MAAM;AAC9C,KAAI,QAAQ,YAAa,MAAK,cAAc,QAAQ;AACpD,KAAI,QAAQ,OAAQ,MAAK,SAAS,QAAQ;AAC1C,KAAI,QAAQ,MAAO,MAAK,QAAQ,QAAQ;CAExC,MAAM,QAAQ,MAAM,OAAO,KACzB,6BAA6B,YAAY,gBACzC,KACD;AAED,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,MAAM,CAAC;AAC9B;;AAGF,SAAQ,IAAI,cAAc,kBAAkB,MAAM,KAAK,KAAK,MAAM,GAAG,GAAG,CAAC"}
@@ -0,0 +1,63 @@
1
+ import { a as formatWarning, n as formatJson, r as formatSuccess } from "../cli.mjs";
2
+ import * as p from "@clack/prompts";
3
+ //#region src/commands/webhooks/create.ts
4
+ function normalizeUrl(input) {
5
+ const trimmed = input.trim();
6
+ if (!trimmed) return trimmed;
7
+ if (/^https?:\/\//i.test(trimmed)) return trimmed;
8
+ return `https://${trimmed}`;
9
+ }
10
+ function parseWebhookCreateOptions(args) {
11
+ const options = {};
12
+ for (let i = 0; i < args.length; i++) switch (args[i]) {
13
+ case "--url":
14
+ options.url = args[++i];
15
+ break;
16
+ case "--events":
17
+ options.events = args[++i]?.split(",").map((s) => s.trim());
18
+ break;
19
+ case "--json":
20
+ options.json = true;
21
+ break;
22
+ }
23
+ return options;
24
+ }
25
+ async function runWebhooksCreate(client, args) {
26
+ const options = parseWebhookCreateOptions(args);
27
+ let url = options.url;
28
+ let events = options.events;
29
+ if (!url && process.stdout.isTTY) {
30
+ const result = await p.text({
31
+ message: "Webhook URL:",
32
+ validate: (v) => v ? void 0 : "Required"
33
+ });
34
+ if (p.isCancel(result)) return;
35
+ url = result;
36
+ }
37
+ if (!url) {
38
+ console.error("Error: --url is required");
39
+ process.exit(1);
40
+ }
41
+ if (!events?.length && process.stdout.isTTY) {
42
+ const result = await p.text({ message: "Events (comma-separated):" });
43
+ if (p.isCancel(result)) return;
44
+ events = result.split(",").map((s) => s.trim());
45
+ }
46
+ const webhook = await client.post("/api/v1/webhooks", {
47
+ url: normalizeUrl(url),
48
+ events
49
+ });
50
+ if (options.json) {
51
+ console.log(formatJson(webhook));
52
+ return;
53
+ }
54
+ console.log(formatSuccess(`Created webhook ${webhook.id}`));
55
+ if (webhook.signingSecret) {
56
+ console.log(formatWarning("Save this signing secret — it won't be shown again:"));
57
+ console.log(webhook.signingSecret);
58
+ }
59
+ }
60
+ //#endregion
61
+ export { runWebhooksCreate };
62
+
63
+ //# sourceMappingURL=create7.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create7.mjs","names":[],"sources":["../../src/commands/webhooks/create.ts"],"sourcesContent":["import * as p from \"@clack/prompts\"\nimport type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatSuccess, formatWarning } from \"../../output.js\"\nimport type { Webhook } from \"../../types.js\"\n\ninterface WebhookCreateOptions {\n url?: string\n events?: string[]\n json?: boolean\n}\n\nfunction normalizeUrl(input: string): string {\n const trimmed = input.trim()\n if (!trimmed) return trimmed\n if (/^https?:\\/\\//i.test(trimmed)) return trimmed\n return `https://${trimmed}`\n}\n\nexport function parseWebhookCreateOptions(args: string[]): WebhookCreateOptions {\n const options: WebhookCreateOptions = {}\n for (let i = 0; i < args.length; i++) {\n switch (args[i]) {\n case \"--url\":\n options.url = args[++i]\n break\n case \"--events\":\n options.events = args[++i]?.split(\",\").map((s) => s.trim())\n break\n case \"--json\":\n options.json = true\n break\n }\n }\n return options\n}\n\nexport async function runWebhooksCreate(\n client: OatmealClient,\n args: string[]\n): Promise<void> {\n const options = parseWebhookCreateOptions(args)\n\n let url = options.url\n let events = options.events\n\n if (!url && process.stdout.isTTY) {\n const result = await p.text({ message: \"Webhook URL:\", validate: (v: string) => (v ? undefined : \"Required\") })\n if (p.isCancel(result)) return\n url = result\n }\n\n if (!url) {\n console.error(\"Error: --url is required\")\n process.exit(1)\n }\n\n if (!events?.length && process.stdout.isTTY) {\n const result = await p.text({ message: \"Events (comma-separated):\" })\n if (p.isCancel(result)) return\n events = result.split(\",\").map((s: string) => s.trim())\n }\n\n const webhook = await client.post<Webhook>(\"/api/v1/webhooks\", {\n url: normalizeUrl(url),\n events,\n })\n\n if (options.json) {\n console.log(formatJson(webhook))\n return\n }\n\n console.log(formatSuccess(`Created webhook ${webhook.id}`))\n if (webhook.signingSecret) {\n console.log(formatWarning(\"Save this signing secret — it won't be shown again:\"))\n console.log(webhook.signingSecret)\n }\n}\n"],"mappings":";;;AAWA,SAAS,aAAa,OAAuB;CAC3C,MAAM,UAAU,MAAM,MAAM;AAC5B,KAAI,CAAC,QAAS,QAAO;AACrB,KAAI,gBAAgB,KAAK,QAAQ,CAAE,QAAO;AAC1C,QAAO,WAAW;;AAGpB,SAAgB,0BAA0B,MAAsC;CAC9E,MAAM,UAAgC,EAAE;AACxC,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,IAC/B,SAAQ,KAAK,IAAb;EACE,KAAK;AACH,WAAQ,MAAM,KAAK,EAAE;AACrB;EACF,KAAK;AACH,WAAQ,SAAS,KAAK,EAAE,IAAI,MAAM,IAAI,CAAC,KAAK,MAAM,EAAE,MAAM,CAAC;AAC3D;EACF,KAAK;AACH,WAAQ,OAAO;AACf;;AAGN,QAAO;;AAGT,eAAsB,kBACpB,QACA,MACe;CACf,MAAM,UAAU,0BAA0B,KAAK;CAE/C,IAAI,MAAM,QAAQ;CAClB,IAAI,SAAS,QAAQ;AAErB,KAAI,CAAC,OAAO,QAAQ,OAAO,OAAO;EAChC,MAAM,SAAS,MAAM,EAAE,KAAK;GAAE,SAAS;GAAgB,WAAW,MAAe,IAAI,KAAA,IAAY;GAAa,CAAC;AAC/G,MAAI,EAAE,SAAS,OAAO,CAAE;AACxB,QAAM;;AAGR,KAAI,CAAC,KAAK;AACR,UAAQ,MAAM,2BAA2B;AACzC,UAAQ,KAAK,EAAE;;AAGjB,KAAI,CAAC,QAAQ,UAAU,QAAQ,OAAO,OAAO;EAC3C,MAAM,SAAS,MAAM,EAAE,KAAK,EAAE,SAAS,6BAA6B,CAAC;AACrE,MAAI,EAAE,SAAS,OAAO,CAAE;AACxB,WAAS,OAAO,MAAM,IAAI,CAAC,KAAK,MAAc,EAAE,MAAM,CAAC;;CAGzD,MAAM,UAAU,MAAM,OAAO,KAAc,oBAAoB;EAC7D,KAAK,aAAa,IAAI;EACtB;EACD,CAAC;AAEF,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,QAAQ,CAAC;AAChC;;AAGF,SAAQ,IAAI,cAAc,mBAAmB,QAAQ,KAAK,CAAC;AAC3D,KAAI,QAAQ,eAAe;AACzB,UAAQ,IAAI,cAAc,sDAAsD,CAAC;AACjF,UAAQ,IAAI,QAAQ,cAAc"}
@@ -16,6 +16,9 @@ function parseCriteriaCreateOptions(args) {
16
16
  case "--weight":
17
17
  options.weight = parseFloat(args[++i]);
18
18
  break;
19
+ case "--category":
20
+ options.category = args[++i];
21
+ break;
19
22
  case "--json":
20
23
  options.json = true;
21
24
  break;
@@ -25,8 +28,6 @@ function parseCriteriaCreateOptions(args) {
25
28
  async function runCriteriaCreate(client, hackathonId, args) {
26
29
  const options = parseCriteriaCreateOptions(args);
27
30
  let name = options.name;
28
- let maxScore = options.maxScore;
29
- let weight = options.weight;
30
31
  if (!name && process.stdout.isTTY) {
31
32
  const result = await p.text({
32
33
  message: "Criteria name:",
@@ -39,31 +40,17 @@ async function runCriteriaCreate(client, hackathonId, args) {
39
40
  console.error("Error: --name is required");
40
41
  process.exit(1);
41
42
  }
42
- if (maxScore === void 0 && process.stdout.isTTY) {
43
- const result = await p.text({
44
- message: "Max score:",
45
- initialValue: "10"
46
- });
47
- if (p.isCancel(result)) return;
48
- maxScore = parseInt(result, 10);
49
- }
50
- if (maxScore !== void 0 && (isNaN(maxScore) || maxScore <= 0)) {
51
- console.error("Error: --max-score must be a positive integer");
43
+ const category = options.category ?? "core";
44
+ if (category !== "core" && category !== "bonus") {
45
+ console.error("Error: --category must be 'core' or 'bonus'");
52
46
  process.exit(1);
53
47
  }
54
- if (weight === void 0 && process.stdout.isTTY) {
55
- const result = await p.text({
56
- message: "Weight:",
57
- initialValue: "1"
58
- });
59
- if (p.isCancel(result)) return;
60
- weight = parseFloat(result);
61
- }
62
48
  const criteria = await client.post(`/api/dashboard/hackathons/${hackathonId}/judging/criteria`, {
63
49
  name,
64
50
  description: options.description,
65
- maxScore: maxScore ?? 10,
66
- weight: weight ?? 1
51
+ category,
52
+ ...options.maxScore !== void 0 && { maxScore: options.maxScore },
53
+ ...options.weight !== void 0 && { weight: options.weight }
67
54
  });
68
55
  if (options.json) {
69
56
  console.log(formatJson(criteria));
@@ -1 +1 @@
1
- {"version":3,"file":"criteria-create.mjs","names":[],"sources":["../../src/commands/judging/criteria-create.ts"],"sourcesContent":["import * as p from \"@clack/prompts\"\nimport type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatSuccess } from \"../../output.js\"\nimport type { JudgingCriteria } from \"../../types.js\"\n\ninterface CriteriaCreateOptions {\n name?: string\n description?: string\n maxScore?: number\n weight?: number\n json?: boolean\n}\n\nexport function parseCriteriaCreateOptions(args: string[]): CriteriaCreateOptions {\n const options: CriteriaCreateOptions = {}\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 \"--description\":\n options.description = args[++i]\n break\n case \"--max-score\":\n options.maxScore = parseInt(args[++i], 10)\n break\n case \"--weight\":\n options.weight = parseFloat(args[++i])\n break\n case \"--json\":\n options.json = true\n break\n }\n }\n return options\n}\n\nexport async function runCriteriaCreate(\n client: OatmealClient,\n hackathonId: string,\n args: string[]\n): Promise<void> {\n const options = parseCriteriaCreateOptions(args)\n\n let name = options.name\n let maxScore = options.maxScore\n let weight = options.weight\n\n if (!name && process.stdout.isTTY) {\n const result = await p.text({ message: \"Criteria name:\", validate: (v: string) => (v ? undefined : \"Required\") })\n if (p.isCancel(result)) return\n name = result\n }\n\n if (!name) {\n console.error(\"Error: --name is required\")\n process.exit(1)\n }\n\n if (maxScore === undefined && process.stdout.isTTY) {\n const result = await p.text({ message: \"Max score:\", initialValue: \"10\" })\n if (p.isCancel(result)) return\n maxScore = parseInt(result, 10)\n }\n\n if (maxScore !== undefined && (isNaN(maxScore) || maxScore <= 0)) {\n console.error(\"Error: --max-score must be a positive integer\")\n process.exit(1)\n }\n\n if (weight === undefined && process.stdout.isTTY) {\n const result = await p.text({ message: \"Weight:\", initialValue: \"1\" })\n if (p.isCancel(result)) return\n weight = parseFloat(result)\n }\n\n const criteria = await client.post<JudgingCriteria>(\n `/api/dashboard/hackathons/${hackathonId}/judging/criteria`,\n {\n name,\n description: options.description,\n maxScore: maxScore ?? 10,\n weight: weight ?? 1,\n }\n )\n\n if (options.json) {\n console.log(formatJson(criteria))\n return\n }\n\n console.log(formatSuccess(`Created criteria \"${criteria.name}\" (${criteria.id})`))\n}\n"],"mappings":";;;AAaA,SAAgB,2BAA2B,MAAuC;CAChF,MAAM,UAAiC,EAAE;AACzC,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,IAC/B,SAAQ,KAAK,IAAb;EACE,KAAK;AACH,WAAQ,OAAO,KAAK,EAAE;AACtB;EACF,KAAK;AACH,WAAQ,cAAc,KAAK,EAAE;AAC7B;EACF,KAAK;AACH,WAAQ,WAAW,SAAS,KAAK,EAAE,IAAI,GAAG;AAC1C;EACF,KAAK;AACH,WAAQ,SAAS,WAAW,KAAK,EAAE,GAAG;AACtC;EACF,KAAK;AACH,WAAQ,OAAO;AACf;;AAGN,QAAO;;AAGT,eAAsB,kBACpB,QACA,aACA,MACe;CACf,MAAM,UAAU,2BAA2B,KAAK;CAEhD,IAAI,OAAO,QAAQ;CACnB,IAAI,WAAW,QAAQ;CACvB,IAAI,SAAS,QAAQ;AAErB,KAAI,CAAC,QAAQ,QAAQ,OAAO,OAAO;EACjC,MAAM,SAAS,MAAM,EAAE,KAAK;GAAE,SAAS;GAAkB,WAAW,MAAe,IAAI,KAAA,IAAY;GAAa,CAAC;AACjH,MAAI,EAAE,SAAS,OAAO,CAAE;AACxB,SAAO;;AAGT,KAAI,CAAC,MAAM;AACT,UAAQ,MAAM,4BAA4B;AAC1C,UAAQ,KAAK,EAAE;;AAGjB,KAAI,aAAa,KAAA,KAAa,QAAQ,OAAO,OAAO;EAClD,MAAM,SAAS,MAAM,EAAE,KAAK;GAAE,SAAS;GAAc,cAAc;GAAM,CAAC;AAC1E,MAAI,EAAE,SAAS,OAAO,CAAE;AACxB,aAAW,SAAS,QAAQ,GAAG;;AAGjC,KAAI,aAAa,KAAA,MAAc,MAAM,SAAS,IAAI,YAAY,IAAI;AAChE,UAAQ,MAAM,gDAAgD;AAC9D,UAAQ,KAAK,EAAE;;AAGjB,KAAI,WAAW,KAAA,KAAa,QAAQ,OAAO,OAAO;EAChD,MAAM,SAAS,MAAM,EAAE,KAAK;GAAE,SAAS;GAAW,cAAc;GAAK,CAAC;AACtE,MAAI,EAAE,SAAS,OAAO,CAAE;AACxB,WAAS,WAAW,OAAO;;CAG7B,MAAM,WAAW,MAAM,OAAO,KAC5B,6BAA6B,YAAY,oBACzC;EACE;EACA,aAAa,QAAQ;EACrB,UAAU,YAAY;EACtB,QAAQ,UAAU;EACnB,CACF;AAED,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,SAAS,CAAC;AACjC;;AAGF,SAAQ,IAAI,cAAc,qBAAqB,SAAS,KAAK,KAAK,SAAS,GAAG,GAAG,CAAC"}
1
+ {"version":3,"file":"criteria-create.mjs","names":[],"sources":["../../src/commands/judging/criteria-create.ts"],"sourcesContent":["import * as p from \"@clack/prompts\"\nimport type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatSuccess } from \"../../output.js\"\nimport type { JudgingCriteria } from \"../../types.js\"\n\ninterface CriteriaCreateOptions {\n name?: string\n description?: string\n maxScore?: number\n weight?: number\n category?: \"core\" | \"bonus\"\n json?: boolean\n}\n\nexport function parseCriteriaCreateOptions(args: string[]): CriteriaCreateOptions {\n const options: CriteriaCreateOptions = {}\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 \"--description\":\n options.description = args[++i]\n break\n case \"--max-score\":\n options.maxScore = parseInt(args[++i], 10)\n break\n case \"--weight\":\n options.weight = parseFloat(args[++i])\n break\n case \"--category\":\n options.category = args[++i] as \"core\" | \"bonus\"\n break\n case \"--json\":\n options.json = true\n break\n }\n }\n return options\n}\n\nexport async function runCriteriaCreate(\n client: OatmealClient,\n hackathonId: string,\n args: string[]\n): Promise<void> {\n const options = parseCriteriaCreateOptions(args)\n\n let name = options.name\n\n if (!name && process.stdout.isTTY) {\n const result = await p.text({ message: \"Criteria name:\", validate: (v: string) => (v ? undefined : \"Required\") })\n if (p.isCancel(result)) return\n name = result\n }\n\n if (!name) {\n console.error(\"Error: --name is required\")\n process.exit(1)\n }\n\n const category = options.category ?? \"core\"\n\n if (category !== \"core\" && category !== \"bonus\") {\n console.error(\"Error: --category must be 'core' or 'bonus'\")\n process.exit(1)\n }\n\n const criteria = await client.post<JudgingCriteria>(\n `/api/dashboard/hackathons/${hackathonId}/judging/criteria`,\n {\n name,\n description: options.description,\n category,\n ...(options.maxScore !== undefined && { maxScore: options.maxScore }),\n ...(options.weight !== undefined && { weight: options.weight }),\n }\n )\n\n if (options.json) {\n console.log(formatJson(criteria))\n return\n }\n\n console.log(formatSuccess(`Created criteria \"${criteria.name}\" (${criteria.id})`))\n}\n"],"mappings":";;;AAcA,SAAgB,2BAA2B,MAAuC;CAChF,MAAM,UAAiC,EAAE;AACzC,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,IAC/B,SAAQ,KAAK,IAAb;EACE,KAAK;AACH,WAAQ,OAAO,KAAK,EAAE;AACtB;EACF,KAAK;AACH,WAAQ,cAAc,KAAK,EAAE;AAC7B;EACF,KAAK;AACH,WAAQ,WAAW,SAAS,KAAK,EAAE,IAAI,GAAG;AAC1C;EACF,KAAK;AACH,WAAQ,SAAS,WAAW,KAAK,EAAE,GAAG;AACtC;EACF,KAAK;AACH,WAAQ,WAAW,KAAK,EAAE;AAC1B;EACF,KAAK;AACH,WAAQ,OAAO;AACf;;AAGN,QAAO;;AAGT,eAAsB,kBACpB,QACA,aACA,MACe;CACf,MAAM,UAAU,2BAA2B,KAAK;CAEhD,IAAI,OAAO,QAAQ;AAEnB,KAAI,CAAC,QAAQ,QAAQ,OAAO,OAAO;EACjC,MAAM,SAAS,MAAM,EAAE,KAAK;GAAE,SAAS;GAAkB,WAAW,MAAe,IAAI,KAAA,IAAY;GAAa,CAAC;AACjH,MAAI,EAAE,SAAS,OAAO,CAAE;AACxB,SAAO;;AAGT,KAAI,CAAC,MAAM;AACT,UAAQ,MAAM,4BAA4B;AAC1C,UAAQ,KAAK,EAAE;;CAGjB,MAAM,WAAW,QAAQ,YAAY;AAErC,KAAI,aAAa,UAAU,aAAa,SAAS;AAC/C,UAAQ,MAAM,8CAA8C;AAC5D,UAAQ,KAAK,EAAE;;CAGjB,MAAM,WAAW,MAAM,OAAO,KAC5B,6BAA6B,YAAY,oBACzC;EACE;EACA,aAAa,QAAQ;EACrB;EACA,GAAI,QAAQ,aAAa,KAAA,KAAa,EAAE,UAAU,QAAQ,UAAU;EACpE,GAAI,QAAQ,WAAW,KAAA,KAAa,EAAE,QAAQ,QAAQ,QAAA;EACvD,CACF;AAED,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,SAAS,CAAC;AACjC;;AAGF,SAAQ,IAAI,cAAc,qBAAqB,SAAS,KAAK,KAAK,SAAS,GAAG,GAAG,CAAC"}
@@ -15,6 +15,10 @@ async function runCriteriaList(client, hackathonId, options) {
15
15
  key: "name",
16
16
  label: "Name"
17
17
  },
18
+ {
19
+ key: "category",
20
+ label: "Category"
21
+ },
18
22
  {
19
23
  key: "maxScore",
20
24
  label: "Max Score"
@@ -1 +1 @@
1
- {"version":3,"file":"criteria-list.mjs","names":[],"sources":["../../src/commands/judging/criteria-list.ts"],"sourcesContent":["import type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatTable } from \"../../output.js\"\nimport type { JudgingCriteria } from \"../../types.js\"\n\nexport async function runCriteriaList(\n client: OatmealClient,\n hackathonId: string,\n options: { json?: boolean }\n): Promise<void> {\n const data = await client.get<{ criteria: JudgingCriteria[] }>(\n `/api/dashboard/hackathons/${hackathonId}/judging/criteria`\n )\n\n if (options.json) {\n console.log(formatJson(data))\n return\n }\n\n if (!data.criteria?.length) {\n console.log(\"No judging criteria found.\")\n return\n }\n\n console.log(\n formatTable(data.criteria, [\n { key: \"name\", label: \"Name\" },\n { key: \"maxScore\", label: \"Max Score\" },\n { key: \"weight\", label: \"Weight\" },\n { key: \"description\", label: \"Description\" },\n ])\n )\n}\n"],"mappings":";;AAIA,eAAsB,gBACpB,QACA,aACA,SACe;CACf,MAAM,OAAO,MAAM,OAAO,IACxB,6BAA6B,YAAY,mBAC1C;AAED,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,KAAK,CAAC;AAC7B;;AAGF,KAAI,CAAC,KAAK,UAAU,QAAQ;AAC1B,UAAQ,IAAI,6BAA6B;AACzC;;AAGF,SAAQ,IACN,YAAY,KAAK,UAAU;EACzB;GAAE,KAAK;GAAQ,OAAO;GAAQ;EAC9B;GAAE,KAAK;GAAY,OAAO;GAAa;EACvC;GAAE,KAAK;GAAU,OAAO;GAAU;EAClC;GAAE,KAAK;GAAe,OAAO;;EAC9B,CAAC,CACH"}
1
+ {"version":3,"file":"criteria-list.mjs","names":[],"sources":["../../src/commands/judging/criteria-list.ts"],"sourcesContent":["import type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatTable } from \"../../output.js\"\nimport type { JudgingCriteria } from \"../../types.js\"\n\nexport async function runCriteriaList(\n client: OatmealClient,\n hackathonId: string,\n options: { json?: boolean }\n): Promise<void> {\n const data = await client.get<{ criteria: JudgingCriteria[] }>(\n `/api/dashboard/hackathons/${hackathonId}/judging/criteria`\n )\n\n if (options.json) {\n console.log(formatJson(data))\n return\n }\n\n if (!data.criteria?.length) {\n console.log(\"No judging criteria found.\")\n return\n }\n\n console.log(\n formatTable(data.criteria, [\n { key: \"name\", label: \"Name\" },\n { key: \"category\", label: \"Category\" },\n { key: \"maxScore\", label: \"Max Score\" },\n { key: \"weight\", label: \"Weight\" },\n { key: \"description\", label: \"Description\" },\n ])\n )\n}\n"],"mappings":";;AAIA,eAAsB,gBACpB,QACA,aACA,SACe;CACf,MAAM,OAAO,MAAM,OAAO,IACxB,6BAA6B,YAAY,mBAC1C;AAED,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,KAAK,CAAC;AAC7B;;AAGF,KAAI,CAAC,KAAK,UAAU,QAAQ;AAC1B,UAAQ,IAAI,6BAA6B;AACzC;;AAGF,SAAQ,IACN,YAAY,KAAK,UAAU;EACzB;GAAE,KAAK;GAAQ,OAAO;GAAQ;EAC9B;GAAE,KAAK;GAAY,OAAO;GAAY;EACtC;GAAE,KAAK;GAAY,OAAO;GAAa;EACvC;GAAE,KAAK;GAAU,OAAO;GAAU;EAClC;GAAE,KAAK;GAAe,OAAO;;EAC9B,CAAC,CACH"}
@@ -1,4 +1,4 @@
1
- import { n as formatJson, r as formatSuccess } from "../cli.mjs";
1
+ import { a as formatWarning, n as formatJson, r as formatSuccess } from "../cli.mjs";
2
2
  //#region src/commands/judging/criteria-update.ts
3
3
  function parseCriteriaUpdateOptions(args) {
4
4
  const options = {};
@@ -15,6 +15,9 @@ function parseCriteriaUpdateOptions(args) {
15
15
  case "--weight":
16
16
  options.weight = parseFloat(args[++i]);
17
17
  break;
18
+ case "--category":
19
+ options.category = args[++i];
20
+ break;
18
21
  case "--json":
19
22
  options.json = true;
20
23
  break;
@@ -23,15 +26,20 @@ function parseCriteriaUpdateOptions(args) {
23
26
  }
24
27
  async function runCriteriaUpdate(client, hackathonId, criteriaId, args) {
25
28
  if (!criteriaId) {
26
- console.error("Usage: hackathon judging criteria update <hackathon-id> <criteria-id> [--name ...] [--max-score ...]");
29
+ console.error("Usage: hackathon judging criteria update <hackathon-id> <criteria-id> [--name ...] [--category ...]");
27
30
  process.exit(1);
28
31
  }
29
32
  const options = parseCriteriaUpdateOptions(args);
33
+ if (options.maxScore !== void 0) console.warn(formatWarning("--max-score is deprecated and has no effect in rubric mode"));
34
+ if (options.weight !== void 0) console.warn(formatWarning("--weight is deprecated and has no effect in rubric mode"));
35
+ if (options.category !== void 0 && options.category !== "core" && options.category !== "bonus") {
36
+ console.error("Error: --category must be 'core' or 'bonus'");
37
+ process.exit(1);
38
+ }
30
39
  const body = {};
31
40
  if (options.name) body.name = options.name;
32
- if (options.description) body.description = options.description;
33
- if (options.maxScore !== void 0) body.maxScore = options.maxScore;
34
- if (options.weight !== void 0) body.weight = options.weight;
41
+ if (options.description !== void 0) body.description = options.description;
42
+ if (options.category !== void 0) body.category = options.category;
35
43
  if (Object.keys(body).length === 0) {
36
44
  console.error("Error: provide at least one field to update");
37
45
  process.exit(1);
@@ -1 +1 @@
1
- {"version":3,"file":"criteria-update.mjs","names":[],"sources":["../../src/commands/judging/criteria-update.ts"],"sourcesContent":["import type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatSuccess } from \"../../output.js\"\nimport type { JudgingCriteria } from \"../../types.js\"\n\ninterface CriteriaUpdateOptions {\n name?: string\n description?: string\n maxScore?: number\n weight?: number\n json?: boolean\n}\n\nexport function parseCriteriaUpdateOptions(args: string[]): CriteriaUpdateOptions {\n const options: CriteriaUpdateOptions = {}\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 \"--description\":\n options.description = args[++i]\n break\n case \"--max-score\":\n options.maxScore = parseInt(args[++i], 10)\n break\n case \"--weight\":\n options.weight = parseFloat(args[++i])\n break\n case \"--json\":\n options.json = true\n break\n }\n }\n return options\n}\n\nexport async function runCriteriaUpdate(\n client: OatmealClient,\n hackathonId: string,\n criteriaId: string,\n args: string[]\n): Promise<void> {\n if (!criteriaId) {\n console.error(\"Usage: hackathon judging criteria update <hackathon-id> <criteria-id> [--name ...] [--max-score ...]\")\n process.exit(1)\n }\n\n const options = parseCriteriaUpdateOptions(args)\n const body: Record<string, unknown> = {}\n if (options.name) body.name = options.name\n if (options.description) body.description = options.description\n if (options.maxScore !== undefined) body.maxScore = options.maxScore\n if (options.weight !== undefined) body.weight = options.weight\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 criteria = await client.patch<JudgingCriteria>(\n `/api/dashboard/hackathons/${hackathonId}/judging/criteria/${criteriaId}`,\n body\n )\n\n if (options.json) {\n console.log(formatJson(criteria))\n return\n }\n\n console.log(formatSuccess(`Updated criteria \"${criteria.name}\"`))\n}\n"],"mappings":";;AAYA,SAAgB,2BAA2B,MAAuC;CAChF,MAAM,UAAiC,EAAE;AACzC,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,IAC/B,SAAQ,KAAK,IAAb;EACE,KAAK;AACH,WAAQ,OAAO,KAAK,EAAE;AACtB;EACF,KAAK;AACH,WAAQ,cAAc,KAAK,EAAE;AAC7B;EACF,KAAK;AACH,WAAQ,WAAW,SAAS,KAAK,EAAE,IAAI,GAAG;AAC1C;EACF,KAAK;AACH,WAAQ,SAAS,WAAW,KAAK,EAAE,GAAG;AACtC;EACF,KAAK;AACH,WAAQ,OAAO;AACf;;AAGN,QAAO;;AAGT,eAAsB,kBACpB,QACA,aACA,YACA,MACe;AACf,KAAI,CAAC,YAAY;AACf,UAAQ,MAAM,uGAAuG;AACrH,UAAQ,KAAK,EAAE;;CAGjB,MAAM,UAAU,2BAA2B,KAAK;CAChD,MAAM,OAAgC,EAAE;AACxC,KAAI,QAAQ,KAAM,MAAK,OAAO,QAAQ;AACtC,KAAI,QAAQ,YAAa,MAAK,cAAc,QAAQ;AACpD,KAAI,QAAQ,aAAa,KAAA,EAAW,MAAK,WAAW,QAAQ;AAC5D,KAAI,QAAQ,WAAW,KAAA,EAAW,MAAK,SAAS,QAAQ;AAExD,KAAI,OAAO,KAAK,KAAK,CAAC,WAAW,GAAG;AAClC,UAAQ,MAAM,8CAA8C;AAC5D,UAAQ,KAAK,EAAE;;CAGjB,MAAM,WAAW,MAAM,OAAO,MAC5B,6BAA6B,YAAY,oBAAoB,cAC7D,KACD;AAED,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,SAAS,CAAC;AACjC;;AAGF,SAAQ,IAAI,cAAc,qBAAqB,SAAS,KAAK,GAAG,CAAC"}
1
+ {"version":3,"file":"criteria-update.mjs","names":[],"sources":["../../src/commands/judging/criteria-update.ts"],"sourcesContent":["import type { OatmealClient } from \"../../client.js\"\nimport { formatJson, formatSuccess, formatWarning } from \"../../output.js\"\nimport type { JudgingCriteria } from \"../../types.js\"\n\ninterface CriteriaUpdateOptions {\n name?: string\n description?: string\n maxScore?: number\n weight?: number\n category?: \"core\" | \"bonus\"\n json?: boolean\n}\n\nexport function parseCriteriaUpdateOptions(args: string[]): CriteriaUpdateOptions {\n const options: CriteriaUpdateOptions = {}\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 \"--description\":\n options.description = args[++i]\n break\n case \"--max-score\":\n options.maxScore = parseInt(args[++i], 10)\n break\n case \"--weight\":\n options.weight = parseFloat(args[++i])\n break\n case \"--category\":\n options.category = args[++i] as \"core\" | \"bonus\"\n break\n case \"--json\":\n options.json = true\n break\n }\n }\n return options\n}\n\nexport async function runCriteriaUpdate(\n client: OatmealClient,\n hackathonId: string,\n criteriaId: string,\n args: string[]\n): Promise<void> {\n if (!criteriaId) {\n console.error(\"Usage: hackathon judging criteria update <hackathon-id> <criteria-id> [--name ...] [--category ...]\")\n process.exit(1)\n }\n\n const options = parseCriteriaUpdateOptions(args)\n\n if (options.maxScore !== undefined) {\n console.warn(formatWarning(\"--max-score is deprecated and has no effect in rubric mode\"))\n }\n\n if (options.weight !== undefined) {\n console.warn(formatWarning(\"--weight is deprecated and has no effect in rubric mode\"))\n }\n\n if (options.category !== undefined && options.category !== \"core\" && options.category !== \"bonus\") {\n console.error(\"Error: --category must be 'core' or 'bonus'\")\n process.exit(1)\n }\n\n const body: Record<string, unknown> = {}\n if (options.name) body.name = options.name\n if (options.description !== undefined) body.description = options.description\n if (options.category !== undefined) body.category = options.category\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 criteria = await client.patch<JudgingCriteria>(\n `/api/dashboard/hackathons/${hackathonId}/judging/criteria/${criteriaId}`,\n body\n )\n\n if (options.json) {\n console.log(formatJson(criteria))\n return\n }\n\n console.log(formatSuccess(`Updated criteria \"${criteria.name}\"`))\n}\n"],"mappings":";;AAaA,SAAgB,2BAA2B,MAAuC;CAChF,MAAM,UAAiC,EAAE;AACzC,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,IAC/B,SAAQ,KAAK,IAAb;EACE,KAAK;AACH,WAAQ,OAAO,KAAK,EAAE;AACtB;EACF,KAAK;AACH,WAAQ,cAAc,KAAK,EAAE;AAC7B;EACF,KAAK;AACH,WAAQ,WAAW,SAAS,KAAK,EAAE,IAAI,GAAG;AAC1C;EACF,KAAK;AACH,WAAQ,SAAS,WAAW,KAAK,EAAE,GAAG;AACtC;EACF,KAAK;AACH,WAAQ,WAAW,KAAK,EAAE;AAC1B;EACF,KAAK;AACH,WAAQ,OAAO;AACf;;AAGN,QAAO;;AAGT,eAAsB,kBACpB,QACA,aACA,YACA,MACe;AACf,KAAI,CAAC,YAAY;AACf,UAAQ,MAAM,sGAAsG;AACpH,UAAQ,KAAK,EAAE;;CAGjB,MAAM,UAAU,2BAA2B,KAAK;AAEhD,KAAI,QAAQ,aAAa,KAAA,EACvB,SAAQ,KAAK,cAAc,6DAA6D,CAAC;AAG3F,KAAI,QAAQ,WAAW,KAAA,EACrB,SAAQ,KAAK,cAAc,0DAA0D,CAAC;AAGxF,KAAI,QAAQ,aAAa,KAAA,KAAa,QAAQ,aAAa,UAAU,QAAQ,aAAa,SAAS;AACjG,UAAQ,MAAM,8CAA8C;AAC5D,UAAQ,KAAK,EAAE;;CAGjB,MAAM,OAAgC,EAAE;AACxC,KAAI,QAAQ,KAAM,MAAK,OAAO,QAAQ;AACtC,KAAI,QAAQ,gBAAgB,KAAA,EAAW,MAAK,cAAc,QAAQ;AAClE,KAAI,QAAQ,aAAa,KAAA,EAAW,MAAK,WAAW,QAAQ;AAE5D,KAAI,OAAO,KAAK,KAAK,CAAC,WAAW,GAAG;AAClC,UAAQ,MAAM,8CAA8C;AAC5D,UAAQ,KAAK,EAAE;;CAGjB,MAAM,WAAW,MAAM,OAAO,MAC5B,6BAA6B,YAAY,oBAAoB,cAC7D,KACD;AAED,KAAI,QAAQ,MAAM;AAChB,UAAQ,IAAI,WAAW,SAAS,CAAC;AACjC;;AAGF,SAAQ,IAAI,cAAc,qBAAqB,SAAS,KAAK,GAAG,CAAC"}
@@ -1,22 +1,22 @@
1
1
  import { r as formatSuccess } from "../cli.mjs";
2
2
  import * as p from "@clack/prompts";
3
- //#region src/commands/webhooks/delete.ts
4
- async function runWebhooksDelete(client, webhookId, options) {
5
- if (!webhookId) {
6
- console.error("Usage: hackathon webhooks delete <webhook-id>");
3
+ //#region src/commands/tracks/delete.ts
4
+ async function runTracksDelete(client, hackathonId, trackId, options) {
5
+ if (!trackId) {
6
+ console.error("Usage: hackathon tracks delete <hackathon-id> <track-id>");
7
7
  process.exit(1);
8
8
  }
9
9
  if (!options.yes) {
10
- const confirm = await p.confirm({ message: `Delete webhook ${webhookId}?` });
10
+ const confirm = await p.confirm({ message: `Delete track ${trackId}? This removes all rounds, buckets, and responses.` });
11
11
  if (p.isCancel(confirm) || !confirm) {
12
12
  p.log.info("Cancelled.");
13
13
  return;
14
14
  }
15
15
  }
16
- await client.delete(`/api/v1/webhooks/${webhookId}`);
17
- console.log(formatSuccess(`Deleted webhook ${webhookId}`));
16
+ await client.delete(`/api/dashboard/hackathons/${hackathonId}/prize-tracks/${trackId}`);
17
+ console.log(formatSuccess(`Deleted track ${trackId}`));
18
18
  }
19
19
  //#endregion
20
- export { runWebhooksDelete };
20
+ export { runTracksDelete };
21
21
 
22
22
  //# sourceMappingURL=delete5.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"delete5.mjs","names":[],"sources":["../../src/commands/webhooks/delete.ts"],"sourcesContent":["import * as p from \"@clack/prompts\"\nimport type { OatmealClient } from \"../../client.js\"\nimport { formatSuccess } from \"../../output.js\"\n\nexport async function runWebhooksDelete(\n client: OatmealClient,\n webhookId: string,\n options: { yes?: boolean }\n): Promise<void> {\n if (!webhookId) {\n console.error(\"Usage: hackathon webhooks delete <webhook-id>\")\n process.exit(1)\n }\n\n if (!options.yes) {\n const confirm = await p.confirm({ message: `Delete webhook ${webhookId}?` })\n if (p.isCancel(confirm) || !confirm) {\n p.log.info(\"Cancelled.\")\n return\n }\n }\n\n await client.delete(`/api/v1/webhooks/${webhookId}`)\n console.log(formatSuccess(`Deleted webhook ${webhookId}`))\n}\n"],"mappings":";;;AAIA,eAAsB,kBACpB,QACA,WACA,SACe;AACf,KAAI,CAAC,WAAW;AACd,UAAQ,MAAM,gDAAgD;AAC9D,UAAQ,KAAK,EAAE;;AAGjB,KAAI,CAAC,QAAQ,KAAK;EAChB,MAAM,UAAU,MAAM,EAAE,QAAQ,EAAE,SAAS,kBAAkB,UAAU,IAAI,CAAC;AAC5E,MAAI,EAAE,SAAS,QAAQ,IAAI,CAAC,SAAS;AACnC,KAAE,IAAI,KAAK,aAAa;AACxB;;;AAIJ,OAAM,OAAO,OAAO,oBAAoB,YAAY;AACpD,SAAQ,IAAI,cAAc,mBAAmB,YAAY,CAAC"}
1
+ {"version":3,"file":"delete5.mjs","names":[],"sources":["../../src/commands/tracks/delete.ts"],"sourcesContent":["import * as p from \"@clack/prompts\"\nimport type { OatmealClient } from \"../../client.js\"\nimport { formatSuccess } from \"../../output.js\"\n\nexport async function runTracksDelete(\n client: OatmealClient,\n hackathonId: string,\n trackId: string,\n options: { yes?: boolean }\n): Promise<void> {\n if (!trackId) {\n console.error(\"Usage: hackathon tracks delete <hackathon-id> <track-id>\")\n process.exit(1)\n }\n\n if (!options.yes) {\n const confirm = await p.confirm({ message: `Delete track ${trackId}? This removes all rounds, buckets, and responses.` })\n if (p.isCancel(confirm) || !confirm) {\n p.log.info(\"Cancelled.\")\n return\n }\n }\n\n await client.delete(`/api/dashboard/hackathons/${hackathonId}/prize-tracks/${trackId}`)\n console.log(formatSuccess(`Deleted track ${trackId}`))\n}\n"],"mappings":";;;AAIA,eAAsB,gBACpB,QACA,aACA,SACA,SACe;AACf,KAAI,CAAC,SAAS;AACZ,UAAQ,MAAM,2DAA2D;AACzE,UAAQ,KAAK,EAAE;;AAGjB,KAAI,CAAC,QAAQ,KAAK;EAChB,MAAM,UAAU,MAAM,EAAE,QAAQ,EAAE,SAAS,gBAAgB,QAAQ,qDAAqD,CAAC;AACzH,MAAI,EAAE,SAAS,QAAQ,IAAI,CAAC,SAAS;AACnC,KAAE,IAAI,KAAK,aAAa;AACxB;;;AAIJ,OAAM,OAAO,OAAO,6BAA6B,YAAY,gBAAgB,UAAU;AACvF,SAAQ,IAAI,cAAc,iBAAiB,UAAU,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { r as formatSuccess } from "../cli.mjs";
2
+ import * as p from "@clack/prompts";
3
+ //#region src/commands/webhooks/delete.ts
4
+ async function runWebhooksDelete(client, webhookId, options) {
5
+ if (!webhookId) {
6
+ console.error("Usage: hackathon webhooks delete <webhook-id>");
7
+ process.exit(1);
8
+ }
9
+ if (!options.yes) {
10
+ const confirm = await p.confirm({ message: `Delete webhook ${webhookId}?` });
11
+ if (p.isCancel(confirm) || !confirm) {
12
+ p.log.info("Cancelled.");
13
+ return;
14
+ }
15
+ }
16
+ await client.delete(`/api/v1/webhooks/${webhookId}`);
17
+ console.log(formatSuccess(`Deleted webhook ${webhookId}`));
18
+ }
19
+ //#endregion
20
+ export { runWebhooksDelete };
21
+
22
+ //# sourceMappingURL=delete6.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete6.mjs","names":[],"sources":["../../src/commands/webhooks/delete.ts"],"sourcesContent":["import * as p from \"@clack/prompts\"\nimport type { OatmealClient } from \"../../client.js\"\nimport { formatSuccess } from \"../../output.js\"\n\nexport async function runWebhooksDelete(\n client: OatmealClient,\n webhookId: string,\n options: { yes?: boolean }\n): Promise<void> {\n if (!webhookId) {\n console.error(\"Usage: hackathon webhooks delete <webhook-id>\")\n process.exit(1)\n }\n\n if (!options.yes) {\n const confirm = await p.confirm({ message: `Delete webhook ${webhookId}?` })\n if (p.isCancel(confirm) || !confirm) {\n p.log.info(\"Cancelled.\")\n return\n }\n }\n\n await client.delete(`/api/v1/webhooks/${webhookId}`)\n console.log(formatSuccess(`Deleted webhook ${webhookId}`))\n}\n"],"mappings":";;;AAIA,eAAsB,kBACpB,QACA,WACA,SACe;AACf,KAAI,CAAC,WAAW;AACd,UAAQ,MAAM,gDAAgD;AAC9D,UAAQ,KAAK,EAAE;;AAGjB,KAAI,CAAC,QAAQ,KAAK;EAChB,MAAM,UAAU,MAAM,EAAE,QAAQ,EAAE,SAAS,kBAAkB,UAAU,IAAI,CAAC;AAC5E,MAAI,EAAE,SAAS,QAAQ,IAAI,CAAC,SAAS;AACnC,KAAE,IAAI,KAAK,aAAa;AACxB;;;AAIJ,OAAM,OAAO,OAAO,oBAAoB,YAAY;AACpD,SAAQ,IAAI,cAAc,mBAAmB,YAAY,CAAC"}
@@ -0,0 +1,42 @@
1
+ import { n as formatJson, t as formatDetail } from "../cli.mjs";
2
+ //#region src/commands/tracks/get.ts
3
+ async function runTracksGet(client, hackathonId, trackId, options) {
4
+ if (!trackId) {
5
+ console.error("Usage: hackathon tracks get <hackathon-id> <track-id>");
6
+ process.exit(1);
7
+ }
8
+ const track = await client.get(`/api/dashboard/hackathons/${hackathonId}/prize-tracks/${trackId}`);
9
+ if (options.json) {
10
+ console.log(formatJson(track));
11
+ return;
12
+ }
13
+ console.log(formatDetail([
14
+ {
15
+ label: "ID",
16
+ value: track.id
17
+ },
18
+ {
19
+ label: "Name",
20
+ value: track.name
21
+ },
22
+ {
23
+ label: "Description",
24
+ value: track.description ?? void 0
25
+ },
26
+ {
27
+ label: "Intent",
28
+ value: track.intent
29
+ }
30
+ ]));
31
+ if (track.rounds.length > 0) {
32
+ console.log(`\nRounds (${track.rounds.length}):`);
33
+ for (const round of track.rounds) {
34
+ console.log(` ${round.name} — ${round.style ?? "no style"} [${round.status}]`);
35
+ if (round.buckets.length > 0) for (const b of round.buckets) console.log(` ${b.level}. ${b.label}${b.description ? ` — ${b.description}` : ""}`);
36
+ }
37
+ }
38
+ }
39
+ //#endregion
40
+ export { runTracksGet };
41
+
42
+ //# sourceMappingURL=get5.mjs.map