@thxgg/steward 0.1.15 → 0.1.17

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 (158) hide show
  1. package/.env.example +6 -0
  2. package/.output/nitro.json +1 -1
  3. package/.output/public/_nuxt/{qKRNa41x.js → 4r0X30JV.js} +1 -1
  4. package/.output/public/_nuxt/{uTyw4SRK.js → BMdjSp24.js} +1 -1
  5. package/.output/public/_nuxt/{BubpH_wW.js → BSZqAKg4.js} +1 -1
  6. package/.output/public/_nuxt/{nYTZJhvT.js → BdjPva1I.js} +1 -1
  7. package/.output/public/_nuxt/Beeir9iR.js +1 -0
  8. package/.output/public/_nuxt/Bh3vsUvl.js +1 -0
  9. package/.output/public/_nuxt/{CMu9GKTH.js → BlTKcjLJ.js} +2 -2
  10. package/.output/public/_nuxt/{BDqHART1.js → By7gAVcL.js} +1 -1
  11. package/.output/public/_nuxt/CbJfCtEa.js +1 -0
  12. package/.output/public/_nuxt/CbkpNvIu.js +141 -0
  13. package/.output/public/_nuxt/CmhLcqDu.js +1 -0
  14. package/.output/public/_nuxt/DC6iPLz1.js +30 -0
  15. package/.output/public/_nuxt/{C_NevjZD.js → DD--ojY9.js} +1 -1
  16. package/.output/public/_nuxt/Detail.DSyVQNdr.css +1 -0
  17. package/.output/public/_nuxt/DhKWRjCh.js +60 -0
  18. package/.output/public/_nuxt/_prd_.BkpxMFSV.css +1 -0
  19. package/.output/public/_nuxt/builds/latest.json +1 -1
  20. package/.output/public/_nuxt/builds/meta/f3f42dbd-d501-442b-871c-3d06157e7aa1.json +1 -0
  21. package/.output/public/_nuxt/c1sXju8w.js +1 -0
  22. package/.output/public/_nuxt/eGCjCghR.js +1 -0
  23. package/.output/public/_nuxt/nX8Sf7cz.js +13 -0
  24. package/.output/server/chunks/_/git-api.mjs +100 -7
  25. package/.output/server/chunks/_/git-api.mjs.map +1 -1
  26. package/.output/server/chunks/_/git.mjs +3 -10
  27. package/.output/server/chunks/_/git.mjs.map +1 -1
  28. package/.output/server/chunks/_/prd-service.mjs +234 -0
  29. package/.output/server/chunks/_/prd-service.mjs.map +1 -0
  30. package/.output/server/chunks/_/task-graph.mjs +3 -3
  31. package/.output/server/chunks/_/task-graph.mjs.map +1 -1
  32. package/.output/server/chunks/_/watcher.mjs +26 -46
  33. package/.output/server/chunks/_/watcher.mjs.map +1 -1
  34. package/.output/server/chunks/build/{Detail-DC-KJQ1f.mjs → Detail-MGwP_u2d.mjs} +63 -34
  35. package/.output/server/chunks/build/Detail-MGwP_u2d.mjs.map +1 -0
  36. package/.output/server/chunks/build/DiffViewer-styles-1.mjs-BFsE2PCW.mjs +4 -0
  37. package/.output/server/chunks/build/DiffViewer-styles-1.mjs-BFsE2PCW.mjs.map +1 -0
  38. package/.output/server/chunks/build/DiffViewer-styles.D2bqX3nK.mjs +8 -0
  39. package/.output/server/chunks/build/DiffViewer-styles.D2bqX3nK.mjs.map +1 -0
  40. package/.output/server/chunks/build/DiffViewer-styles.FoV36wuV.mjs +10 -0
  41. package/.output/server/chunks/build/DiffViewer-styles.FoV36wuV.mjs.map +1 -0
  42. package/.output/server/chunks/build/Viewer-styles.D6wYWFb1.mjs +8 -0
  43. package/.output/server/chunks/build/Viewer-styles.D6wYWFb1.mjs.map +1 -0
  44. package/.output/server/chunks/build/{_prd_-C1C4GAhW.mjs → _prd_-C-Aj4fVa.mjs} +75 -33
  45. package/.output/server/chunks/build/_prd_-C-Aj4fVa.mjs.map +1 -0
  46. package/.output/server/chunks/build/client.precomputed.mjs +1 -1
  47. package/.output/server/chunks/build/{default-DWCOHHTE.mjs → default-Cao5eO80.mjs} +4 -3
  48. package/.output/server/chunks/build/default-Cao5eO80.mjs.map +1 -0
  49. package/.output/server/chunks/build/error-404-Bf6kdO80.mjs +2 -1
  50. package/.output/server/chunks/build/error-500-D_bcARXN.mjs +2 -1
  51. package/.output/server/chunks/build/{index-CckL_NBD.mjs → index-ByZO4Bvq.mjs} +2 -2
  52. package/.output/server/chunks/build/index-ByZO4Bvq.mjs.map +1 -0
  53. package/.output/server/chunks/build/{index-QVeSHT3L.mjs → index-ljj9uTXI.mjs} +8 -5
  54. package/.output/server/chunks/build/index-ljj9uTXI.mjs.map +1 -0
  55. package/.output/server/chunks/build/nuxt-link-SvT1nf8Z.mjs +1 -1
  56. package/.output/server/chunks/build/{repo-graph-CTEkxiYd.mjs → repo-graph-EuhMeFt7.mjs} +25 -10
  57. package/.output/server/chunks/build/repo-graph-EuhMeFt7.mjs.map +1 -0
  58. package/.output/server/chunks/build/server.mjs +7 -6
  59. package/.output/server/chunks/build/styles.mjs +4 -4
  60. package/.output/server/chunks/build/{usePrd-SqcxGyFU.mjs → usePrd-f7ylhIqs.mjs} +10 -34
  61. package/.output/server/chunks/build/usePrd-f7ylhIqs.mjs.map +1 -0
  62. package/.output/server/chunks/nitro/nitro.mjs +1149 -720
  63. package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
  64. package/.output/server/chunks/routes/api/browse.get.mjs +12 -6
  65. package/.output/server/chunks/routes/api/browse.get.mjs.map +1 -1
  66. package/.output/server/chunks/routes/api/index.get.mjs +2 -1
  67. package/.output/server/chunks/routes/api/index.get.mjs.map +1 -1
  68. package/.output/server/chunks/routes/api/index.post.mjs +3 -2
  69. package/.output/server/chunks/routes/api/index.post.mjs.map +1 -1
  70. package/.output/server/chunks/routes/api/repos/_repoId/git/commits.get.mjs +11 -13
  71. package/.output/server/chunks/routes/api/repos/_repoId/git/commits.get.mjs.map +1 -1
  72. package/.output/server/chunks/routes/api/repos/_repoId/git/diff.get.mjs +11 -6
  73. package/.output/server/chunks/routes/api/repos/_repoId/git/diff.get.mjs.map +1 -1
  74. package/.output/server/chunks/routes/api/repos/_repoId/git/file-content.get.mjs +31 -12
  75. package/.output/server/chunks/routes/api/repos/_repoId/git/file-content.get.mjs.map +1 -1
  76. package/.output/server/chunks/routes/api/repos/_repoId/git/file-diff.get.mjs +13 -13
  77. package/.output/server/chunks/routes/api/repos/_repoId/git/file-diff.get.mjs.map +1 -1
  78. package/.output/server/chunks/routes/api/repos/_repoId/graph.get.mjs +5 -1
  79. package/.output/server/chunks/routes/api/repos/_repoId/graph.get.mjs.map +1 -1
  80. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/graph.get.mjs +14 -1
  81. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/graph.get.mjs.map +1 -1
  82. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/progress.get.mjs +20 -9
  83. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/progress.get.mjs.map +1 -1
  84. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/tasks/_taskId/commits.get.mjs +20 -85
  85. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/tasks/_taskId/commits.get.mjs.map +1 -1
  86. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/tasks.get.mjs +20 -9
  87. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/tasks.get.mjs.map +1 -1
  88. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug_.get.mjs +30 -50
  89. package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug_.get.mjs.map +1 -1
  90. package/.output/server/chunks/routes/api/repos/_repoId/prds.get.mjs +19 -49
  91. package/.output/server/chunks/routes/api/repos/_repoId/prds.get.mjs.map +1 -1
  92. package/.output/server/chunks/routes/api/repos/_repoId/refresh-git-repos.post.mjs +6 -13
  93. package/.output/server/chunks/routes/api/repos/_repoId/refresh-git-repos.post.mjs.map +1 -1
  94. package/.output/server/chunks/routes/api/repos/_repoId_.delete.mjs +2 -1
  95. package/.output/server/chunks/routes/api/repos/_repoId_.delete.mjs.map +1 -1
  96. package/.output/server/chunks/routes/api/runtime.get.mjs +3 -2
  97. package/.output/server/chunks/routes/api/runtime.get.mjs.map +1 -1
  98. package/.output/server/chunks/routes/api/watch.get.mjs +5 -4
  99. package/.output/server/chunks/routes/api/watch.get.mjs.map +1 -1
  100. package/.output/server/chunks/routes/renderer.mjs +1 -1
  101. package/.output/server/index.mjs +3 -2
  102. package/.output/server/index.mjs.map +1 -1
  103. package/.output/server/node_modules/zod/index.js +4 -0
  104. package/.output/server/node_modules/zod/package.json +118 -0
  105. package/.output/server/node_modules/zod/v3/ZodError.js +133 -0
  106. package/.output/server/node_modules/zod/v3/errors.js +9 -0
  107. package/.output/server/node_modules/zod/v3/external.js +6 -0
  108. package/.output/server/node_modules/zod/v3/helpers/errorUtil.js +6 -0
  109. package/.output/server/node_modules/zod/v3/helpers/parseUtil.js +109 -0
  110. package/.output/server/node_modules/zod/v3/helpers/typeAliases.js +1 -0
  111. package/.output/server/node_modules/zod/v3/helpers/util.js +133 -0
  112. package/.output/server/node_modules/zod/v3/locales/en.js +109 -0
  113. package/.output/server/node_modules/zod/v3/types.js +3693 -0
  114. package/.output/server/package.json +2 -1
  115. package/README.md +7 -2
  116. package/dist/host/src/api/prds.js +6 -172
  117. package/dist/host/src/api/repos.js +3 -16
  118. package/dist/host/src/api/state.js +7 -2
  119. package/dist/host/src/executor-runner.js +368 -0
  120. package/dist/host/src/executor.js +138 -260
  121. package/dist/host/src/index.js +7 -2
  122. package/dist/host/src/mcp.js +27 -1
  123. package/dist/host/src/ui.js +18 -3
  124. package/dist/server/utils/change-events.js +33 -0
  125. package/dist/server/utils/git.js +11 -16
  126. package/dist/server/utils/prd-service.js +235 -0
  127. package/dist/server/utils/prd-state.js +57 -45
  128. package/dist/server/utils/repos.js +58 -13
  129. package/dist/server/utils/state-schema.js +61 -0
  130. package/dist/server/utils/task-graph.js +2 -2
  131. package/package.json +2 -1
  132. package/.output/public/_nuxt/-k8zG74W.js +0 -61
  133. package/.output/public/_nuxt/B-5VWizU.js +0 -1
  134. package/.output/public/_nuxt/BMAq0QVD.js +0 -42
  135. package/.output/public/_nuxt/BPeTf9dd.js +0 -1
  136. package/.output/public/_nuxt/C2HGkiSP.js +0 -1
  137. package/.output/public/_nuxt/CVvrkZkq.js +0 -1
  138. package/.output/public/_nuxt/Detail.CzXXlavD.css +0 -1
  139. package/.output/public/_nuxt/_prd_.KTotLoF_.css +0 -1
  140. package/.output/public/_nuxt/builds/meta/c1a7997d-8d53-4718-ad03-a977e05e2523.json +0 -1
  141. package/.output/public/_nuxt/qt5OEWHC.js +0 -1
  142. package/.output/public/_nuxt/wbj-mIhK.js +0 -1
  143. package/.output/server/chunks/build/Detail-DC-KJQ1f.mjs.map +0 -1
  144. package/.output/server/chunks/build/DiffViewer-styles-1.mjs-D0sb4vsK.mjs +0 -4
  145. package/.output/server/chunks/build/DiffViewer-styles-1.mjs-D0sb4vsK.mjs.map +0 -1
  146. package/.output/server/chunks/build/DiffViewer-styles.CkSjCQ0r.mjs +0 -10
  147. package/.output/server/chunks/build/DiffViewer-styles.CkSjCQ0r.mjs.map +0 -1
  148. package/.output/server/chunks/build/DiffViewer-styles.FJJuYjYB.mjs +0 -8
  149. package/.output/server/chunks/build/DiffViewer-styles.FJJuYjYB.mjs.map +0 -1
  150. package/.output/server/chunks/build/Viewer-styles.CshnetGw.mjs +0 -8
  151. package/.output/server/chunks/build/Viewer-styles.CshnetGw.mjs.map +0 -1
  152. package/.output/server/chunks/build/_prd_-C1C4GAhW.mjs.map +0 -1
  153. package/.output/server/chunks/build/default-DWCOHHTE.mjs.map +0 -1
  154. package/.output/server/chunks/build/index-CckL_NBD.mjs.map +0 -1
  155. package/.output/server/chunks/build/index-QVeSHT3L.mjs.map +0 -1
  156. package/.output/server/chunks/build/repo-graph-CTEkxiYd.mjs.map +0 -1
  157. package/.output/server/chunks/build/usePrd-SqcxGyFU.mjs.map +0 -1
  158. package/.output/server/node_modules/shiki/dist/bundle-web.mjs +0 -366
@@ -1 +1 @@
1
- {"version":3,"file":"nitro.mjs","sources":["../../../../node_modules/destr/dist/index.mjs","../../../../node_modules/ufo/dist/index.mjs","../../../../node_modules/radix3/dist/index.mjs","../../../../node_modules/defu/dist/defu.mjs","../../../../node_modules/node-mock-http/dist/index.mjs","../../../../node_modules/h3/dist/index.mjs","../../../../node_modules/hookable/dist/index.mjs","../../../../node_modules/node-fetch-native/dist/native.mjs","../../../../node_modules/ofetch/dist/shared/ofetch.CWycOUEr.mjs","../../../../node_modules/ofetch/dist/node.mjs","../../../../node_modules/unstorage/dist/shared/unstorage.zVDD2mZo.mjs","../../../../node_modules/unstorage/dist/index.mjs","../../../../node_modules/unstorage/drivers/utils/index.mjs","../../../../node_modules/unstorage/drivers/utils/node-fs.mjs","../../../../node_modules/unstorage/drivers/fs-lite.mjs","../../../../node_modules/nitropack/dist/runtime/internal/storage.mjs","../../../../node_modules/ohash/dist/shared/ohash.D__AXeF1.mjs","../../../../node_modules/ohash/dist/crypto/node/index.mjs","../../../../node_modules/ohash/dist/index.mjs","../../../../node_modules/nitropack/dist/runtime/internal/hash.mjs","../../../../node_modules/nitropack/dist/runtime/internal/cache.mjs","../../../../node_modules/klona/dist/index.mjs","../../../../node_modules/scule/dist/index.mjs","../../../../node_modules/nitropack/dist/runtime/internal/utils.env.mjs","../../../../node_modules/nitropack/dist/runtime/internal/config.mjs","../../../../node_modules/unctx/dist/index.mjs","../../../../node_modules/nitropack/dist/runtime/internal/context.mjs","../../../../node_modules/nitropack/dist/runtime/internal/route-rules.mjs","../../../../node_modules/nitropack/dist/runtime/internal/utils.mjs","../../../../node_modules/@nuxt/nitro-server/dist/runtime/utils/error.mjs","../../../../node_modules/@nuxt/nitro-server/dist/runtime/handlers/error.mjs","../../../../node_modules/nitropack/dist/runtime/internal/error/utils.mjs","../../../../node_modules/nitropack/dist/runtime/internal/error/prod.mjs","../../../../node_modules/@nuxtjs/color-mode/dist/runtime/nitro-plugin.js","../../../../node_modules/nitropack/dist/runtime/internal/plugin.mjs","../../../../server/utils/db.ts","../../../../server/utils/repos.ts","../../../../server/utils/prd-state.ts","../../../../server/plugins/migrate-legacy-state.ts","../../../../node_modules/pathe/dist/shared/pathe.M-eThtNZ.mjs","../../../../node_modules/nitropack/dist/runtime/internal/static.mjs","../../../../node_modules/nitropack/dist/runtime/internal/app.mjs","../../../../node_modules/nitropack/dist/runtime/internal/renderer.mjs","../../../../node_modules/nitropack/dist/runtime/internal/lib/http-graceful-shutdown.mjs","../../../../node_modules/nitropack/dist/runtime/internal/shutdown.mjs","../../../../node_modules/nitropack/dist/presets/node/runtime/node-server.mjs"],"names":["getQuery","createRouter","f","h","c","i","l","createError","mergeHeaders","s","nodeFetch","Headers","Headers$1","AbortController$1","normalizeKey","defineDriver","DRIVER_NAME","dirname","fsPromises","resolve","fsp","serialize","hash","_inlineAppConfig","createRadixRouter","fs","nitroApp","callNodeRequestHandler","fetchNodeRequestHandler","gracefulShutdown","HttpsServer","HttpServer"],"mappings":"","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,39,40,41,42,43,44,45]}
1
+ {"version":3,"file":"nitro.mjs","sources":["../../../../node_modules/destr/dist/index.mjs","../../../../node_modules/ufo/dist/index.mjs","../../../../node_modules/h3/node_modules/cookie-es/dist/index.mjs","../../../../node_modules/radix3/dist/index.mjs","../../../../node_modules/defu/dist/defu.mjs","../../../../node_modules/node-mock-http/dist/index.mjs","../../../../node_modules/h3/dist/index.mjs","../../../../node_modules/hookable/dist/index.mjs","../../../../node_modules/node-fetch-native/dist/native.mjs","../../../../node_modules/ofetch/dist/shared/ofetch.CWycOUEr.mjs","../../../../node_modules/ofetch/dist/node.mjs","../../../../node_modules/unstorage/dist/shared/unstorage.zVDD2mZo.mjs","../../../../node_modules/unstorage/dist/index.mjs","../../../../node_modules/unstorage/drivers/utils/index.mjs","../../../../node_modules/unstorage/drivers/utils/node-fs.mjs","../../../../node_modules/unstorage/drivers/fs-lite.mjs","../../../../node_modules/nitropack/dist/runtime/internal/storage.mjs","../../../../node_modules/ohash/dist/shared/ohash.D__AXeF1.mjs","../../../../node_modules/ohash/dist/crypto/node/index.mjs","../../../../node_modules/ohash/dist/index.mjs","../../../../node_modules/nitropack/dist/runtime/internal/hash.mjs","../../../../node_modules/nitropack/dist/runtime/internal/cache.mjs","../../../../node_modules/klona/dist/index.mjs","../../../../node_modules/scule/dist/index.mjs","../../../../node_modules/nitropack/dist/runtime/internal/utils.env.mjs","../../../../node_modules/nitropack/dist/runtime/internal/config.mjs","../../../../node_modules/unctx/dist/index.mjs","../../../../node_modules/nitropack/dist/runtime/internal/context.mjs","../../../../node_modules/nitropack/dist/runtime/internal/route-rules.mjs","../../../../node_modules/nitropack/dist/runtime/internal/utils.mjs","../../../../node_modules/@nuxt/nitro-server/dist/runtime/utils/error.mjs","../../../../node_modules/@nuxt/nitro-server/dist/runtime/handlers/error.mjs","../../../../node_modules/nitropack/dist/runtime/internal/error/utils.mjs","../../../../node_modules/nitropack/dist/runtime/internal/error/prod.mjs","../../../../node_modules/@nuxtjs/color-mode/dist/runtime/nitro-plugin.js","../../../../node_modules/nitropack/dist/runtime/internal/plugin.mjs","../../../../server/utils/db.ts","../../../../server/utils/repos.ts","../../../../server/utils/change-events.ts","../../../../server/utils/state-schema.ts","../../../../server/utils/prd-state.ts","../../../../server/plugins/migrate-legacy-state.ts","../../../../node_modules/pathe/dist/shared/pathe.M-eThtNZ.mjs","../../../../node_modules/nitropack/dist/runtime/internal/static.mjs","../../../../server/middleware/00-security.ts","../../../../node_modules/nitropack/dist/runtime/internal/app.mjs","../../../../node_modules/nitropack/dist/runtime/internal/renderer.mjs","../../../../node_modules/nitropack/dist/runtime/internal/lib/http-graceful-shutdown.mjs","../../../../node_modules/nitropack/dist/runtime/internal/shutdown.mjs","../../../../node_modules/nitropack/dist/presets/node/runtime/node-server.mjs"],"names":["getQuery","serialize","createRouter","f","h","c","i","l","createError","mergeHeaders","s","nodeFetch","Headers","Headers$1","AbortController$1","normalizeKey","defineDriver","DRIVER_NAME","dirname","fsPromises","resolve","fsp","hash","_inlineAppConfig","createRadixRouter","fs","isAbsolute","nitroApp","callNodeRequestHandler","fetchNodeRequestHandler","gracefulShutdown","HttpsServer","HttpServer"],"mappings":"","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,42,43,45,46,47,48,49]}
@@ -1,6 +1,6 @@
1
1
  import { d as defineEventHandler, g as getQuery, c as createError } from '../../nitro/nitro.mjs';
2
2
  import { stat, readdir } from 'node:fs/promises';
3
- import { join } from 'node:path';
3
+ import { resolve, join, dirname } from 'node:path';
4
4
  import { homedir } from 'node:os';
5
5
  import 'node:http';
6
6
  import 'node:https';
@@ -9,29 +9,35 @@ import 'node:buffer';
9
9
  import 'node:fs';
10
10
  import 'node:crypto';
11
11
  import 'node:url';
12
+ import 'zod';
12
13
 
14
+ function toPosixPath(path) {
15
+ return path.replaceAll("\\", "/");
16
+ }
13
17
  const browse_get = defineEventHandler(async (event) => {
14
18
  const query = getQuery(event);
15
19
  let path = query.path || homedir();
16
20
  if (path.startsWith("~")) {
17
21
  path = path.replace("~", homedir());
18
22
  }
23
+ const resolvedPath = resolve(path);
19
24
  try {
20
- const stats = await stat(path);
25
+ const stats = await stat(resolvedPath);
21
26
  if (!stats.isDirectory()) {
22
27
  throw createError({
23
28
  statusCode: 400,
24
29
  message: "Path is not a directory"
25
30
  });
26
31
  }
27
- const entries = await readdir(path, { withFileTypes: true });
32
+ const entries = await readdir(resolvedPath, { withFileTypes: true });
28
33
  const directories = entries.filter((entry) => entry.isDirectory() && !entry.name.startsWith(".")).map((entry) => ({
29
34
  name: entry.name,
30
- path: join(path, entry.name)
35
+ path: toPosixPath(join(resolvedPath, entry.name))
31
36
  })).sort((a, b) => a.name.localeCompare(b.name));
37
+ const parentPath = dirname(resolvedPath);
32
38
  return {
33
- current: path,
34
- parent: join(path, ".."),
39
+ current: toPosixPath(resolvedPath),
40
+ parent: parentPath === resolvedPath ? null : toPosixPath(parentPath),
35
41
  directories
36
42
  };
37
43
  } catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"browse.get.mjs","sources":["../../../../../server/api/browse.get.ts"],"names":[],"mappings":";;;;;;;;;;;;AAIA,mBAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AACA,EAAA,MAAA,KAAA,GAAA,SAAA,KAAA,CAAA;AACA,EAAA,IAAA,IAAA,GAAA,KAAA,CAAA,IAAA,IAAA,OAAA,EAAA;AAGA,EAAA,IAAA,IAAA,CAAA,UAAA,CAAA,GAAA,CAAA,EAAA;AACA,IAAA,IAAA,GAAA,IAAA,CAAA,OAAA,CAAA,GAAA,EAAA,OAAA,EAAA,CAAA;AAAA,EACA;AAEA,EAAA,IAAA;AACA,IAAA,MAAA,KAAA,GAAA,MAAA,IAAA,CAAA,IAAA,CAAA;AACA,IAAA,IAAA,CAAA,KAAA,CAAA,WAAA,EAAA,EAAA;AACA,MAAA,MAAA,WAAA,CAAA;AAAA,QACA,UAAA,EAAA,GAAA;AAAA,QACA,OAAA,EAAA;AAAA,OACA,CAAA;AAAA,IACA;AAEA,IAAA,MAAA,UAAA,MAAA,OAAA,CAAA,MAAA,EAAA,aAAA,EAAA,MAAA,CAAA;AACA,IAAA,MAAA,WAAA,GAAA,OAAA,CACA,MAAA,CAAA,CAAA,KAAA,KAAA,MAAA,WAAA,EAAA,IAAA,CAAA,KAAA,CAAA,KAAA,UAAA,CAAA,GAAA,CAAA,CAAA,CACA,IAAA,CAAA,KAAA,MAAA;AAAA,MACA,MAAA,KAAA,CAAA,IAAA;AAAA,MACA,IAAA,EAAA,IAAA,CAAA,IAAA,EAAA,KAAA,CAAA,IAAA;AAAA,KACA,CAAA,CAAA,CACA,IAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,CAAA,IAAA,CAAA,aAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA;AAEA,IAAA,OAAA;AAAA,MACA,OAAA,EAAA,IAAA;AAAA,MACA,MAAA,EAAA,IAAA,CAAA,IAAA,EAAA,IAAA,CAAA;AAAA,MACA;AAAA,KACA;AAAA,EACA,SAAA,GAAA,EAAA;AACA,IAAA,IAAA,GAAA,CAAA,SAAA,QAAA,EAAA;AACA,MAAA,MAAA,WAAA,CAAA;AAAA,QACA,UAAA,EAAA,GAAA;AAAA,QACA,OAAA,EAAA;AAAA,OACA,CAAA;AAAA,IACA;AACA,IAAA,IAAA,GAAA,CAAA,SAAA,QAAA,EAAA;AACA,MAAA,MAAA,WAAA,CAAA;AAAA,QACA,UAAA,EAAA,GAAA;AAAA,QACA,OAAA,EAAA;AAAA,OACA,CAAA;AAAA,IACA;AACA,IAAA,MAAA,GAAA;AAAA,EACA;AACA,CAAA,CAAA;;;;"}
1
+ {"version":3,"file":"browse.get.mjs","sources":["../../../../../server/api/browse.get.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAIA,SAAA,YAAA,IAAA,EAAA;AACA,EAAA,OAAA,IAAA,CAAA,UAAA,CAAA,IAAA,EAAA,GAAA,CAAA;AACA;AAEA,mBAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AACA,EAAA,MAAA,KAAA,GAAA,SAAA,KAAA,CAAA;AACA,EAAA,IAAA,IAAA,GAAA,KAAA,CAAA,IAAA,IAAA,OAAA,EAAA;AAGA,EAAA,IAAA,IAAA,CAAA,UAAA,CAAA,GAAA,CAAA,EAAA;AACA,IAAA,IAAA,GAAA,IAAA,CAAA,OAAA,CAAA,GAAA,EAAA,OAAA,EAAA,CAAA;AAAA,EACA;AAEA,EAAA,MAAA,YAAA,GAAA,QAAA,IAAA,CAAA;AAEA,EAAA,IAAA;AACA,IAAA,MAAA,KAAA,GAAA,MAAA,IAAA,CAAA,YAAA,CAAA;AACA,IAAA,IAAA,CAAA,KAAA,CAAA,WAAA,EAAA,EAAA;AACA,MAAA,MAAA,WAAA,CAAA;AAAA,QACA,UAAA,EAAA,GAAA;AAAA,QACA,OAAA,EAAA;AAAA,OACA,CAAA;AAAA,IACA;AAEA,IAAA,MAAA,UAAA,MAAA,OAAA,CAAA,cAAA,EAAA,aAAA,EAAA,MAAA,CAAA;AACA,IAAA,MAAA,WAAA,GAAA,OAAA,CACA,MAAA,CAAA,CAAA,KAAA,KAAA,MAAA,WAAA,EAAA,IAAA,CAAA,KAAA,CAAA,KAAA,UAAA,CAAA,GAAA,CAAA,CAAA,CACA,IAAA,CAAA,KAAA,MAAA;AAAA,MACA,MAAA,KAAA,CAAA,IAAA;AAAA,MACA,MAAA,WAAA,CAAA,IAAA,CAAA,YAAA,EAAA,KAAA,CAAA,IAAA,CAAA;AAAA,KACA,CAAA,CAAA,CACA,IAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,CAAA,IAAA,CAAA,aAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA;AAEA,IAAA,MAAA,UAAA,GAAA,QAAA,YAAA,CAAA;AAEA,IAAA,OAAA;AAAA,MACA,OAAA,EAAA,YAAA,YAAA,CAAA;AAAA,MACA,MAAA,EAAA,UAAA,KAAA,YAAA,GAAA,IAAA,GAAA,YAAA,UAAA,CAAA;AAAA,MACA;AAAA,KACA;AAAA,EACA,SAAA,GAAA,EAAA;AACA,IAAA,IAAA,GAAA,CAAA,SAAA,QAAA,EAAA;AACA,MAAA,MAAA,WAAA,CAAA;AAAA,QACA,UAAA,EAAA,GAAA;AAAA,QACA,OAAA,EAAA;AAAA,OACA,CAAA;AAAA,IACA;AACA,IAAA,IAAA,GAAA,CAAA,SAAA,QAAA,EAAA;AACA,MAAA,MAAA,WAAA,CAAA;AAAA,QACA,UAAA,EAAA,GAAA;AAAA,QACA,OAAA,EAAA;AAAA,OACA,CAAA;AAAA,IACA;AACA,IAAA,MAAA,GAAA;AAAA,EACA;AACA,CAAA,CAAA;;;;"}
@@ -6,8 +6,9 @@ import 'node:buffer';
6
6
  import 'node:fs';
7
7
  import 'node:path';
8
8
  import 'node:crypto';
9
- import 'node:os';
10
9
  import 'node:url';
10
+ import 'node:os';
11
+ import 'zod';
11
12
 
12
13
  const index_get = defineEventHandler(async () => {
13
14
  return await getRepos();
@@ -1 +1 @@
1
- {"version":3,"file":"index.get.mjs","sources":["../../../../../server/api/repos/index.get.ts"],"names":[],"mappings":";;;;;;;;;;;AAEA,kBAAA,mBAAA,YAAA;AACA,EAAA,OAAA,MAAA,QAAA,EAAA;AACA,CAAA,CAAA;;;;"}
1
+ {"version":3,"file":"index.get.mjs","sources":["../../../../../server/api/repos/index.get.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,kBAAA,mBAAA,YAAA;AACA,EAAA,OAAA,MAAA,QAAA,EAAA;AACA,CAAA,CAAA;;;;"}
@@ -1,4 +1,4 @@
1
- import { d as defineEventHandler, i as readBody, c as createError, v as validateRepoPath, j as addRepo, m as migrateLegacyStateForRepo } from '../../nitro/nitro.mjs';
1
+ import { d as defineEventHandler, j as readBody, c as createError, v as validateRepoPath, k as addRepo, m as migrateLegacyStateForRepo } from '../../nitro/nitro.mjs';
2
2
  import { r as refreshWatcher } from '../../_/watcher.mjs';
3
3
  import 'node:http';
4
4
  import 'node:https';
@@ -7,8 +7,9 @@ import 'node:buffer';
7
7
  import 'node:fs';
8
8
  import 'node:path';
9
9
  import 'node:crypto';
10
- import 'node:os';
11
10
  import 'node:url';
11
+ import 'node:os';
12
+ import 'zod';
12
13
  import 'chokidar';
13
14
 
14
15
  const index_post = defineEventHandler(async (event) => {
@@ -1 +1 @@
1
- {"version":3,"file":"index.post.mjs","sources":["../../../../../server/api/repos/index.post.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAKA,mBAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AACA,EAAA,MAAA,IAAA,GAAA,MAAA,QAAA,CAAA,KAAA,CAAA;AAEA,EAAA,IAAA,EAAA,6BAAA,IAAA,CAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,MAAA,UAAA,GAAA,MAAA,gBAAA,CAAA,IAAA,CAAA,IAAA,CAAA;AACA,EAAA,IAAA,CAAA,WAAA,KAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA,WAAA,KAAA,IAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,IAAA;AACA,IAAA,MAAA,OAAA,MAAA,OAAA,CAAA,IAAA,CAAA,IAAA,EAAA,KAAA,IAAA,CAAA;AACA,IAAA,MAAA,0BAAA,IAAA,CAAA;AAEA,IAAA,MAAA,cAAA,EAAA;AACA,IAAA,OAAA,IAAA;AAAA,EACA,SAAA,KAAA,EAAA;AACA,IAAA,IAAA,KAAA,YAAA,KAAA,IAAA,KAAA,CAAA,OAAA,KAAA,0BAAA,EAAA;AACA,MAAA,MAAA,WAAA,CAAA;AAAA,QACA,UAAA,EAAA,GAAA;AAAA,QACA,aAAA,EAAA;AAAA,OACA,CAAA;AAAA,IACA;AACA,IAAA,MAAA,KAAA;AAAA,EACA;AACA,CAAA,CAAA;;;;"}
1
+ {"version":3,"file":"index.post.mjs","sources":["../../../../../server/api/repos/index.post.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAKA,mBAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AACA,EAAA,MAAA,IAAA,GAAA,MAAA,QAAA,CAAA,KAAA,CAAA;AAEA,EAAA,IAAA,EAAA,6BAAA,IAAA,CAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,MAAA,UAAA,GAAA,MAAA,gBAAA,CAAA,IAAA,CAAA,IAAA,CAAA;AACA,EAAA,IAAA,CAAA,WAAA,KAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA,WAAA,KAAA,IAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,IAAA;AACA,IAAA,MAAA,OAAA,MAAA,OAAA,CAAA,IAAA,CAAA,IAAA,EAAA,KAAA,IAAA,CAAA;AACA,IAAA,MAAA,0BAAA,IAAA,CAAA;AAEA,IAAA,MAAA,cAAA,EAAA;AACA,IAAA,OAAA,IAAA;AAAA,EACA,SAAA,KAAA,EAAA;AACA,IAAA,IAAA,KAAA,YAAA,KAAA,IAAA,KAAA,CAAA,OAAA,KAAA,0BAAA,EAAA;AACA,MAAA,MAAA,WAAA,CAAA;AAAA,QACA,UAAA,EAAA,GAAA;AAAA,QACA,aAAA,EAAA;AAAA,OACA,CAAA;AAAA,IACA;AACA,IAAA,MAAA,KAAA;AAAA,EACA;AACA,CAAA,CAAA;;;;"}
@@ -1,6 +1,6 @@
1
1
  import { d as defineEventHandler, a as getRouterParam, c as createError, b as getRepos, g as getQuery } from '../../../../../nitro/nitro.mjs';
2
2
  import { i as isGitRepo, f as findRepoForCommit, g as getCommitInfo } from '../../../../../_/git.mjs';
3
- import { b as buildRepoLookup, r as resolveRequestedGitRepoPath, n as normalizeErrorMessage, g as getRepoRelativePath } from '../../../../../_/git-api.mjs';
3
+ import { p as parseCommitShaListParam, a as parseOptionalGitRepoPathParam, n as normalizeErrorMessage, b as buildRepoLookup, r as resolveRequestedGitRepoPath, g as getRepoRelativePath } from '../../../../../_/git-api.mjs';
4
4
  import 'node:http';
5
5
  import 'node:https';
6
6
  import 'node:events';
@@ -8,8 +8,9 @@ import 'node:buffer';
8
8
  import 'node:fs';
9
9
  import 'node:path';
10
10
  import 'node:crypto';
11
- import 'node:os';
12
11
  import 'node:url';
12
+ import 'node:os';
13
+ import 'zod';
13
14
  import 'node:child_process';
14
15
 
15
16
  const commits_get = defineEventHandler(async (event) => {
@@ -29,19 +30,16 @@ const commits_get = defineEventHandler(async (event) => {
29
30
  });
30
31
  }
31
32
  const query = getQuery(event);
32
- const shasParam = query.shas;
33
- const repoPath = query.repo;
34
- if (!shasParam) {
35
- throw createError({
36
- statusCode: 400,
37
- statusMessage: "shas query parameter is required"
38
- });
39
- }
40
- const shas = shasParam.split(",").map((s) => s.trim()).filter(Boolean);
41
- if (shas.length === 0) {
33
+ let shas;
34
+ let repoPath;
35
+ try {
36
+ shas = parseCommitShaListParam(query.shas);
37
+ repoPath = parseOptionalGitRepoPathParam(query.repo);
38
+ } catch (error) {
42
39
  throw createError({
43
40
  statusCode: 400,
44
- statusMessage: "At least one SHA is required"
41
+ statusMessage: "Invalid git query parameters",
42
+ message: normalizeErrorMessage(error.message)
45
43
  });
46
44
  }
47
45
  const repoLookup = await buildRepoLookup(repo);
@@ -1 +1 @@
1
- {"version":3,"file":"commits.get.mjs","sources":["../../../../../../../../server/api/repos/[repoId]/git/commits.get.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAUA,oBAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AACA,EAAA,MAAA,MAAA,GAAA,cAAA,CAAA,KAAA,EAAA,QAAA,CAAA;AAEA,EAAA,IAAA,CAAA,MAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,MAAA,KAAA,GAAA,MAAA,QAAA,EAAA;AACA,EAAA,MAAA,OAAA,KAAA,CAAA,IAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,OAAA,MAAA,CAAA;AAEA,EAAA,IAAA,CAAA,IAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAGA,EAAA,MAAA,KAAA,GAAA,SAAA,KAAA,CAAA;AACA,EAAA,MAAA,YAAA,KAAA,CAAA,IAAA;AACA,EAAA,MAAA,WAAA,KAAA,CAAA,IAAA;AAEA,EAAA,IAAA,CAAA,SAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,MAAA,IAAA,GAAA,SAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,IAAA,EAAA,CAAA,CAAA,MAAA,CAAA,OAAA,CAAA;AAEA,EAAA,IAAA,IAAA,CAAA,WAAA,CAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,MAAA,UAAA,GAAA,MAAA,eAAA,CAAA,IAAA,CAAA;AAEA,EAAA,IAAA,gBAAA,GAAA,IAAA;AACA,EAAA,IAAA,aAAA,GAAA,EAAA;AAEA,EAAA,IAAA,QAAA,EAAA;AACA,IAAA,IAAA;AACA,MAAA,MAAA,QAAA,GAAA,MAAA,2BAAA,CAAA,UAAA,EAAA,QAAA,CAAA;AACA,MAAA,gBAAA,GAAA,QAAA,CAAA,WAAA;AACA,MAAA,aAAA,GAAA,QAAA,CAAA,kBAAA;AAAA,IACA,SAAA,KAAA,EAAA;AACA,MAAA,MAAA,WAAA,CAAA;AAAA,QACA,UAAA,EAAA,GAAA;AAAA,QACA,aAAA,EAAA,mBAAA;AAAA,QACA,OAAA,EAAA,qBAAA,CAAA,KAAA,CAAA,OAAA;AAAA,OACA,CAAA;AAAA,IACA;AAAA,EACA,CAAA,MAAA,IAAA,MAAA,SAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA;AACA,IAAA,gBAAA,GAAA,IAAA,CAAA,IAAA;AACA,IAAA,aAAA,GAAA,EAAA;AAAA,EACA;AAGA,EAAA,MAAA,UAAA,EAAA;AACA,EAAA,MAAA,SAAA,EAAA;AAEA,EAAA,KAAA,MAAA,OAAA,IAAA,EAAA;AACA,IAAA,IAAA;AACA,MAAA,IAAA,oBAAA,GAAA,gBAAA;AACA,MAAA,IAAA,gBAAA,GAAA,aAAA;AAEA,MAAA,IAAA,CAAA,oBAAA,EAAA;AACA,QAAA,MAAA,QAAA,GAAA,MAAA,iBAAA,CAAA,UAAA,EAAA,GAAA,CAAA;AACA,QAAA,oBAAA,GAAA,QAAA,CAAA,YAAA;AACA,QAAA,gBAAA,GAAA,QAAA,CAAA,QAAA;AAAA,MACA;AAEA,MAAA,IAAA,MAAA;AAEA,MAAA,IAAA;AACA,QAAA,MAAA,GAAA,MAAA,aAAA,CAAA,oBAAA,EAAA,GAAA,CAAA;AAAA,MACA,SAAA,KAAA,EAAA;AACA,QAAA,IAAA,CAAA,gBAAA,EAAA;AACA,UAAA,MAAA,KAAA;AAAA,QACA;AAEA,QAAA,MAAA,QAAA,GAAA,MAAA,iBAAA,CAAA,UAAA,EAAA,GAAA,CAAA,CAAA,KAAA,CAAA,MAAA,IAAA,CAAA;AACA,QAAA,IAAA,CAAA,QAAA,IAAA,QAAA,CAAA,YAAA,KAAA,oBAAA,EAAA;AACA,UAAA,MAAA,KAAA;AAAA,QACA;AAEA,QAAA,MAAA,GAAA,MAAA,aAAA,CAAA,QAAA,CAAA,YAAA,EAAA,GAAA,CAAA;AACA,QAAA,gBAAA,GAAA,QAAA,CAAA,QAAA;AACA,QAAA,oBAAA,GAAA,QAAA,CAAA,YAAA;AAAA,MACA;AAEA,MAAA,OAAA,CAAA,IAAA,CAAA;AAAA,QACA,GAAA,MAAA;AAAA,QACA,QAAA,EAAA,gBAAA,IAAA,mBAAA,CAAA,IAAA,CAAA,MAAA,oBAAA;AAAA,OACA,CAAA;AAAA,IACA,SAAA,KAAA,EAAA;AACA,MAAA,MAAA,CAAA,IAAA,CAAA,GAAA,GAAA,CAAA,EAAA,EAAA,sBAAA,KAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA;AAAA,IACA;AAAA,EACA;AAGA,EAAA,IAAA,OAAA,CAAA,MAAA,KAAA,CAAA,IAAA,MAAA,CAAA,SAAA,CAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA,wBAAA;AAAA,MACA,OAAA,EAAA,CAAA,wBAAA,EAAA,MAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,OAAA,OAAA;AACA,CAAA,CAAA;;;;"}
1
+ {"version":3,"file":"commits.get.mjs","sources":["../../../../../../../../server/api/repos/[repoId]/git/commits.get.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { d as defineEventHandler, a as getRouterParam, c as createError, b as getRepos, g as getQuery } from '../../../../../nitro/nitro.mjs';
2
2
  import { i as isGitRepo, f as findRepoForCommit, a as getCommitDiff } from '../../../../../_/git.mjs';
3
- import { b as buildRepoLookup, r as resolveRequestedGitRepoPath, n as normalizeErrorMessage } from '../../../../../_/git-api.mjs';
3
+ import { c as parseCommitShaParam, a as parseOptionalGitRepoPathParam, n as normalizeErrorMessage, b as buildRepoLookup, r as resolveRequestedGitRepoPath } from '../../../../../_/git-api.mjs';
4
4
  import 'node:http';
5
5
  import 'node:https';
6
6
  import 'node:events';
@@ -8,8 +8,9 @@ import 'node:buffer';
8
8
  import 'node:fs';
9
9
  import 'node:path';
10
10
  import 'node:crypto';
11
- import 'node:os';
12
11
  import 'node:url';
12
+ import 'node:os';
13
+ import 'zod';
13
14
  import 'node:child_process';
14
15
 
15
16
  const diff_get = defineEventHandler(async (event) => {
@@ -29,12 +30,16 @@ const diff_get = defineEventHandler(async (event) => {
29
30
  });
30
31
  }
31
32
  const query = getQuery(event);
32
- const commit = query.commit;
33
- const repoPath = query.repo;
34
- if (!commit) {
33
+ let commit;
34
+ let repoPath;
35
+ try {
36
+ commit = parseCommitShaParam(query.commit, "commit query parameter");
37
+ repoPath = parseOptionalGitRepoPathParam(query.repo);
38
+ } catch (error) {
35
39
  throw createError({
36
40
  statusCode: 400,
37
- statusMessage: "commit query parameter is required"
41
+ statusMessage: "Invalid git query parameters",
42
+ message: normalizeErrorMessage(error.message)
38
43
  });
39
44
  }
40
45
  const repoLookup = await buildRepoLookup(repo);
@@ -1 +1 @@
1
- {"version":3,"file":"diff.get.mjs","sources":["../../../../../../../../server/api/repos/[repoId]/git/diff.get.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"diff.get.mjs","sources":["../../../../../../../../server/api/repos/[repoId]/git/diff.get.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { d as defineEventHandler, a as getRouterParam, g as getQuery, c as createError, b as getRepos } from '../../../../../nitro/nitro.mjs';
2
2
  import { i as isGitRepo, f as findRepoForCommit, v as validatePathInRepo, b as getFileContent } from '../../../../../_/git.mjs';
3
- import { b as buildRepoLookup, r as resolveRequestedGitRepoPath, n as normalizeErrorMessage } from '../../../../../_/git-api.mjs';
3
+ import { c as parseCommitShaParam, d as parseGitFilePathParam, a as parseOptionalGitRepoPathParam, n as normalizeErrorMessage, b as buildRepoLookup, r as resolveRequestedGitRepoPath } from '../../../../../_/git-api.mjs';
4
4
  import 'node:http';
5
5
  import 'node:https';
6
6
  import 'node:events';
@@ -8,24 +8,43 @@ import 'node:buffer';
8
8
  import 'node:fs';
9
9
  import 'node:path';
10
10
  import 'node:crypto';
11
- import 'node:os';
12
11
  import 'node:url';
12
+ import 'node:os';
13
+ import 'zod';
13
14
  import 'node:child_process';
14
15
 
16
+ const MAX_FILE_CONTENT_CHARS = 1e6;
17
+ function formatFileContentResponse(content) {
18
+ if (content.length <= MAX_FILE_CONTENT_CHARS) {
19
+ return { content };
20
+ }
21
+ return {
22
+ content: content.slice(0, MAX_FILE_CONTENT_CHARS),
23
+ truncated: true,
24
+ maxChars: MAX_FILE_CONTENT_CHARS,
25
+ originalChars: content.length,
26
+ message: `File content was truncated to ${MAX_FILE_CONTENT_CHARS.toLocaleString()} characters.`
27
+ };
28
+ }
15
29
  const fileContent_get = defineEventHandler(async (event) => {
16
30
  const repoId = getRouterParam(event, "repoId");
17
31
  const query = getQuery(event);
18
- const commit = query.commit;
19
- const file = query.file;
20
- const repoPath = query.repo;
32
+ let commit;
33
+ let file;
34
+ let repoPath;
21
35
  if (!repoId) {
22
36
  throw createError({ statusCode: 400, message: "Repository ID is required" });
23
37
  }
24
- if (!commit) {
25
- throw createError({ statusCode: 400, message: "Commit SHA is required" });
26
- }
27
- if (!file) {
28
- throw createError({ statusCode: 400, message: "File path is required" });
38
+ try {
39
+ commit = parseCommitShaParam(query.commit, "commit query parameter");
40
+ file = parseGitFilePathParam(query.file);
41
+ repoPath = parseOptionalGitRepoPathParam(query.repo);
42
+ } catch (error) {
43
+ throw createError({
44
+ statusCode: 400,
45
+ statusMessage: "Invalid git query parameters",
46
+ message: normalizeErrorMessage(error.message)
47
+ });
29
48
  }
30
49
  const repos = await getRepos();
31
50
  const repo = repos.find((r) => r.id === repoId);
@@ -58,14 +77,14 @@ const fileContent_get = defineEventHandler(async (event) => {
58
77
  }
59
78
  try {
60
79
  const content = await getFileContent(gitRepoPath, commit, file);
61
- return { content };
80
+ return formatFileContentResponse(content);
62
81
  } catch (error) {
63
82
  const message = normalizeErrorMessage(error instanceof Error ? error.message : String(error));
64
83
  const fallback = await findRepoForCommit(repoLookup, commit).catch(() => null);
65
84
  if (fallback && fallback.absolutePath !== gitRepoPath && validatePathInRepo(fallback.absolutePath, file)) {
66
85
  try {
67
86
  const content = await getFileContent(fallback.absolutePath, commit, file);
68
- return { content };
87
+ return formatFileContentResponse(content);
69
88
  } catch {
70
89
  }
71
90
  }
@@ -1 +1 @@
1
- {"version":3,"file":"file-content.get.mjs","sources":["../../../../../../../../server/api/repos/[repoId]/git/file-content.get.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"file-content.get.mjs","sources":["../../../../../../../../server/api/repos/[repoId]/git/file-content.get.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { d as defineEventHandler, a as getRouterParam, c as createError, b as getRepos, g as getQuery } from '../../../../../nitro/nitro.mjs';
2
2
  import { i as isGitRepo, f as findRepoForCommit, v as validatePathInRepo, c as getFileDiff } from '../../../../../_/git.mjs';
3
- import { b as buildRepoLookup, r as resolveRequestedGitRepoPath, n as normalizeErrorMessage } from '../../../../../_/git-api.mjs';
3
+ import { c as parseCommitShaParam, d as parseGitFilePathParam, a as parseOptionalGitRepoPathParam, n as normalizeErrorMessage, b as buildRepoLookup, r as resolveRequestedGitRepoPath } from '../../../../../_/git-api.mjs';
4
4
  import 'node:http';
5
5
  import 'node:https';
6
6
  import 'node:events';
@@ -8,8 +8,9 @@ import 'node:buffer';
8
8
  import 'node:fs';
9
9
  import 'node:path';
10
10
  import 'node:crypto';
11
- import 'node:os';
12
11
  import 'node:url';
12
+ import 'node:os';
13
+ import 'zod';
13
14
  import 'node:child_process';
14
15
 
15
16
  const fileDiff_get = defineEventHandler(async (event) => {
@@ -29,19 +30,18 @@ const fileDiff_get = defineEventHandler(async (event) => {
29
30
  });
30
31
  }
31
32
  const query = getQuery(event);
32
- const commit = query.commit;
33
- const file = query.file;
34
- const repoPath = query.repo;
35
- if (!commit) {
36
- throw createError({
37
- statusCode: 400,
38
- statusMessage: "commit query parameter is required"
39
- });
40
- }
41
- if (!file) {
33
+ let commit;
34
+ let file;
35
+ let repoPath;
36
+ try {
37
+ commit = parseCommitShaParam(query.commit, "commit query parameter");
38
+ file = parseGitFilePathParam(query.file);
39
+ repoPath = parseOptionalGitRepoPathParam(query.repo);
40
+ } catch (error) {
42
41
  throw createError({
43
42
  statusCode: 400,
44
- statusMessage: "file query parameter is required"
43
+ statusMessage: "Invalid git query parameters",
44
+ message: normalizeErrorMessage(error.message)
45
45
  });
46
46
  }
47
47
  const repoLookup = await buildRepoLookup(repo);
@@ -1 +1 @@
1
- {"version":3,"file":"file-diff.get.mjs","sources":["../../../../../../../../server/api/repos/[repoId]/git/file-diff.get.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"file-diff.get.mjs","sources":["../../../../../../../../server/api/repos/[repoId]/git/file-diff.get.ts"],"names":[],"mappings":"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"}
@@ -7,8 +7,12 @@ import 'node:buffer';
7
7
  import 'node:fs';
8
8
  import 'node:path';
9
9
  import 'node:crypto';
10
- import 'node:os';
11
10
  import 'node:url';
11
+ import 'node:os';
12
+ import 'zod';
13
+ import '../../../../_/prd-service.mjs';
14
+ import '../../../../_/git.mjs';
15
+ import 'node:child_process';
12
16
 
13
17
  const graph_get = defineEventHandler(async (event) => {
14
18
  const repoId = getRouterParam(event, "repoId");
@@ -1 +1 @@
1
- {"version":3,"file":"graph.get.mjs","sources":["../../../../../../../server/api/repos/[repoId]/graph.get.ts"],"names":[],"mappings":";;;;;;;;;;;;AAGA,kBAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AACA,EAAA,MAAA,MAAA,GAAA,cAAA,CAAA,KAAA,EAAA,QAAA,CAAA;AAEA,EAAA,IAAA,CAAA,MAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,MAAA,KAAA,GAAA,MAAA,QAAA,EAAA;AACA,EAAA,MAAA,OAAA,KAAA,CAAA,IAAA,CAAA,CAAA,KAAA,KAAA,KAAA,CAAA,OAAA,MAAA,CAAA;AAEA,EAAA,IAAA,CAAA,IAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,IAAA;AACA,IAAA,OAAA,MAAA,eAAA,IAAA,CAAA;AAAA,EACA,SAAA,KAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA,kCAAA;AAAA,MACA,SAAA,KAAA,CAAA,OAAA,CAAA,QAAA,MAAA,EAAA,GAAA,EAAA,IAAA;AAAA,KACA,CAAA;AAAA,EACA;AACA,CAAA,CAAA;;;;"}
1
+ {"version":3,"file":"graph.get.mjs","sources":["../../../../../../../server/api/repos/[repoId]/graph.get.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAGA,kBAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AACA,EAAA,MAAA,MAAA,GAAA,cAAA,CAAA,KAAA,EAAA,QAAA,CAAA;AAEA,EAAA,IAAA,CAAA,MAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,MAAA,KAAA,GAAA,MAAA,QAAA,EAAA;AACA,EAAA,MAAA,OAAA,KAAA,CAAA,IAAA,CAAA,CAAA,KAAA,KAAA,KAAA,CAAA,OAAA,MAAA,CAAA;AAEA,EAAA,IAAA,CAAA,IAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,IAAA;AACA,IAAA,OAAA,MAAA,eAAA,IAAA,CAAA;AAAA,EACA,SAAA,KAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA,kCAAA;AAAA,MACA,SAAA,KAAA,CAAA,OAAA,CAAA,QAAA,MAAA,EAAA,GAAA,EAAA,IAAA;AAAA,KACA,CAAA;AAAA,EACA;AACA,CAAA,CAAA;;;;"}
@@ -1,4 +1,5 @@
1
1
  import { d as defineEventHandler, a as getRouterParam, c as createError, b as getRepos } from '../../../../../../nitro/nitro.mjs';
2
+ import { a as assertValidPrdSlug } from '../../../../../../_/prd-service.mjs';
2
3
  import { a as buildPrdGraph } from '../../../../../../_/task-graph.mjs';
3
4
  import 'node:http';
4
5
  import 'node:https';
@@ -7,8 +8,11 @@ import 'node:buffer';
7
8
  import 'node:fs';
8
9
  import 'node:path';
9
10
  import 'node:crypto';
10
- import 'node:os';
11
11
  import 'node:url';
12
+ import 'node:os';
13
+ import 'zod';
14
+ import '../../../../../../_/git.mjs';
15
+ import 'node:child_process';
12
16
 
13
17
  const graph_get = defineEventHandler(async (event) => {
14
18
  const repoId = getRouterParam(event, "repoId");
@@ -19,6 +23,15 @@ const graph_get = defineEventHandler(async (event) => {
19
23
  statusMessage: "Repository ID and PRD slug are required"
20
24
  });
21
25
  }
26
+ try {
27
+ assertValidPrdSlug(prdSlug);
28
+ } catch (error) {
29
+ throw createError({
30
+ statusCode: 400,
31
+ statusMessage: "Invalid PRD slug",
32
+ message: error.message
33
+ });
34
+ }
22
35
  const repos = await getRepos();
23
36
  const repo = repos.find((entry) => entry.id === repoId);
24
37
  if (!repo) {
@@ -1 +1 @@
1
- {"version":3,"file":"graph.get.mjs","sources":["../../../../../../../../../server/api/repos/[repoId]/prd/[prdSlug]/graph.get.ts"],"names":[],"mappings":";;;;;;;;;;;;AAGA,kBAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AACA,EAAA,MAAA,MAAA,GAAA,cAAA,CAAA,KAAA,EAAA,QAAA,CAAA;AACA,EAAA,MAAA,OAAA,GAAA,cAAA,CAAA,KAAA,EAAA,SAAA,CAAA;AAEA,EAAA,IAAA,CAAA,MAAA,IAAA,CAAA,OAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,MAAA,KAAA,GAAA,MAAA,QAAA,EAAA;AACA,EAAA,MAAA,OAAA,KAAA,CAAA,IAAA,CAAA,CAAA,KAAA,KAAA,KAAA,CAAA,OAAA,MAAA,CAAA;AAEA,EAAA,IAAA,CAAA,IAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,IAAA;AACA,IAAA,OAAA,MAAA,aAAA,CAAA,IAAA,EAAA,OAAA,CAAA;AAAA,EACA,SAAA,KAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA,2BAAA;AAAA,MACA,SAAA,KAAA,CAAA,OAAA,CAAA,QAAA,MAAA,EAAA,GAAA,EAAA,IAAA;AAAA,KACA,CAAA;AAAA,EACA;AACA,CAAA,CAAA;;;;"}
1
+ {"version":3,"file":"graph.get.mjs","sources":["../../../../../../../../../server/api/repos/[repoId]/prd/[prdSlug]/graph.get.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAIA,kBAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AACA,EAAA,MAAA,MAAA,GAAA,cAAA,CAAA,KAAA,EAAA,QAAA,CAAA;AACA,EAAA,MAAA,OAAA,GAAA,cAAA,CAAA,KAAA,EAAA,SAAA,CAAA;AAEA,EAAA,IAAA,CAAA,MAAA,IAAA,CAAA,OAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,IAAA;AACA,IAAA,kBAAA,CAAA,OAAA,CAAA;AAAA,EACA,SAAA,KAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA,kBAAA;AAAA,MACA,SAAA,KAAA,CAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,MAAA,KAAA,GAAA,MAAA,QAAA,EAAA;AACA,EAAA,MAAA,OAAA,KAAA,CAAA,IAAA,CAAA,CAAA,KAAA,KAAA,KAAA,CAAA,OAAA,MAAA,CAAA;AAEA,EAAA,IAAA,CAAA,IAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,IAAA;AACA,IAAA,OAAA,MAAA,aAAA,CAAA,IAAA,EAAA,OAAA,CAAA;AAAA,EACA,SAAA,KAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA,2BAAA;AAAA,MACA,SAAA,KAAA,CAAA,OAAA,CAAA,QAAA,MAAA,EAAA,GAAA,EAAA,IAAA;AAAA,KACA,CAAA;AAAA,EACA;AACA,CAAA,CAAA;;;;"}
@@ -1,4 +1,5 @@
1
- import { d as defineEventHandler, a as getRouterParam, c as createError, b as getRepos, m as migrateLegacyStateForRepo, h as getPrdState } from '../../../../../../nitro/nitro.mjs';
1
+ import { d as defineEventHandler, a as getRouterParam, c as createError, f as getRepoById } from '../../../../../../nitro/nitro.mjs';
2
+ import { c as readPrdProgress } from '../../../../../../_/prd-service.mjs';
2
3
  import 'node:http';
3
4
  import 'node:https';
4
5
  import 'node:events';
@@ -6,11 +7,16 @@ import 'node:buffer';
6
7
  import 'node:fs';
7
8
  import 'node:path';
8
9
  import 'node:crypto';
9
- import 'node:os';
10
10
  import 'node:url';
11
+ import 'node:os';
12
+ import 'zod';
13
+ import '../../../../../../_/git.mjs';
14
+ import 'node:child_process';
11
15
 
16
+ function normalizeErrorMessage(message) {
17
+ return message.replace(/\s+/g, " ").trim();
18
+ }
12
19
  const progress_get = defineEventHandler(async (event) => {
13
- var _a;
14
20
  const repoId = getRouterParam(event, "repoId");
15
21
  const prdSlug = getRouterParam(event, "prdSlug");
16
22
  if (!repoId || !prdSlug) {
@@ -19,23 +25,28 @@ const progress_get = defineEventHandler(async (event) => {
19
25
  statusMessage: "Repository ID and PRD slug are required"
20
26
  });
21
27
  }
22
- const repos = await getRepos();
23
- const repo = repos.find((r) => r.id === repoId);
28
+ const repo = await getRepoById(repoId);
24
29
  if (!repo) {
25
30
  throw createError({
26
31
  statusCode: 404,
27
32
  statusMessage: "Repository not found"
28
33
  });
29
34
  }
30
- await migrateLegacyStateForRepo(repo);
31
35
  try {
32
- const state = await getPrdState(repo.id, prdSlug);
33
- return (_a = state == null ? void 0 : state.progress) != null ? _a : null;
36
+ return await readPrdProgress(repo, prdSlug);
34
37
  } catch (error) {
38
+ const message = normalizeErrorMessage(error.message);
39
+ if (message.includes("Invalid PRD slug")) {
40
+ throw createError({
41
+ statusCode: 400,
42
+ statusMessage: "Invalid PRD slug",
43
+ message
44
+ });
45
+ }
35
46
  throw createError({
36
47
  statusCode: 500,
37
48
  statusMessage: "Failed to read progress state",
38
- message: error.message.replace(/\s+/g, " ").trim()
49
+ message
39
50
  });
40
51
  }
41
52
  });
@@ -1 +1 @@
1
- {"version":3,"file":"progress.get.mjs","sources":["../../../../../../../../../server/api/repos/[repoId]/prd/[prdSlug]/progress.get.ts"],"names":[],"mappings":";;;;;;;;;;;AAGA,qBAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;;AACA,EAAA,MAAA,MAAA,GAAA,cAAA,CAAA,KAAA,EAAA,QAAA,CAAA;AACA,EAAA,MAAA,OAAA,GAAA,cAAA,CAAA,KAAA,EAAA,SAAA,CAAA;AAEA,EAAA,IAAA,CAAA,MAAA,IAAA,CAAA,OAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,MAAA,KAAA,GAAA,MAAA,QAAA,EAAA;AACA,EAAA,MAAA,OAAA,KAAA,CAAA,IAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,OAAA,MAAA,CAAA;AAEA,EAAA,IAAA,CAAA,IAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,MAAA,0BAAA,IAAA,CAAA;AAEA,EAAA,IAAA;AACA,IAAA,MAAA,KAAA,GAAA,MAAA,WAAA,CAAA,IAAA,CAAA,IAAA,OAAA,CAAA;AACA,IAAA,OAAA,CAAA,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,aAAA,IAAA,GAAA,EAAA,GAAA,IAAA;AAAA,EACA,SAAA,KAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA,+BAAA;AAAA,MACA,SAAA,KAAA,CAAA,OAAA,CAAA,QAAA,MAAA,EAAA,GAAA,EAAA,IAAA;AAAA,KACA,CAAA;AAAA,EACA;AACA,CAAA,CAAA;;;;"}
1
+ {"version":3,"file":"progress.get.mjs","sources":["../../../../../../../../../server/api/repos/[repoId]/prd/[prdSlug]/progress.get.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAGA,SAAA,sBAAA,OAAA,EAAA;AACA,EAAA,OAAA,OAAA,CAAA,OAAA,CAAA,MAAA,EAAA,GAAA,EAAA,IAAA,EAAA;AACA;AAEA,qBAAA,kBAAA,CAAA,OAAA,KAAA,KAAA;AACA,EAAA,MAAA,MAAA,GAAA,cAAA,CAAA,KAAA,EAAA,QAAA,CAAA;AACA,EAAA,MAAA,OAAA,GAAA,cAAA,CAAA,KAAA,EAAA,SAAA,CAAA;AAEA,EAAA,IAAA,CAAA,MAAA,IAAA,CAAA,OAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,MAAA,IAAA,GAAA,MAAA,WAAA,CAAA,MAAA,CAAA;AACA,EAAA,IAAA,CAAA,IAAA,EAAA;AACA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA;AAAA,KACA,CAAA;AAAA,EACA;AAEA,EAAA,IAAA;AACA,IAAA,OAAA,MAAA,eAAA,CAAA,IAAA,EAAA,OAAA,CAAA;AAAA,EACA,SAAA,KAAA,EAAA;AACA,IAAA,MAAA,OAAA,GAAA,qBAAA,CAAA,KAAA,CAAA,OAAA,CAAA;AAEA,IAAA,IAAA,OAAA,CAAA,QAAA,CAAA,kBAAA,CAAA,EAAA;AACA,MAAA,MAAA,WAAA,CAAA;AAAA,QACA,UAAA,EAAA,GAAA;AAAA,QACA,aAAA,EAAA,kBAAA;AAAA,QACA;AAAA,OACA,CAAA;AAAA,IACA;AAEA,IAAA,MAAA,WAAA,CAAA;AAAA,MACA,UAAA,EAAA,GAAA;AAAA,MACA,aAAA,EAAA,+BAAA;AAAA,MACA;AAAA,KACA,CAAA;AAAA,EACA;AACA,CAAA,CAAA;;;;"}