@quenty/nevermore-cli 4.15.2 → 4.15.3-canary.656.67d6ba1.0

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 (242) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/args/global-args.d.ts +1 -0
  3. package/dist/args/global-args.d.ts.map +1 -1
  4. package/dist/commands/batch-command/batch-deploy-command.d.ts +16 -0
  5. package/dist/commands/batch-command/batch-deploy-command.d.ts.map +1 -0
  6. package/dist/commands/batch-command/batch-deploy-command.js +166 -0
  7. package/dist/commands/batch-command/batch-deploy-command.js.map +1 -0
  8. package/dist/commands/batch-command/batch-test-command.d.ts +15 -0
  9. package/dist/commands/batch-command/batch-test-command.d.ts.map +1 -0
  10. package/dist/commands/batch-command/batch-test-command.js +158 -0
  11. package/dist/commands/batch-command/batch-test-command.js.map +1 -0
  12. package/dist/commands/batch-command/index.d.ts +9 -0
  13. package/dist/commands/batch-command/index.d.ts.map +1 -0
  14. package/dist/commands/batch-command/index.js +13 -0
  15. package/dist/commands/batch-command/index.js.map +1 -0
  16. package/dist/commands/deploy-command/deploy-init-prompts.d.ts +2 -0
  17. package/dist/commands/deploy-command/deploy-init-prompts.d.ts.map +1 -0
  18. package/dist/commands/deploy-command/deploy-init-prompts.js +84 -0
  19. package/dist/commands/deploy-command/deploy-init-prompts.js.map +1 -0
  20. package/dist/commands/deploy-command/deploy-init-utils.d.ts +3 -0
  21. package/dist/commands/deploy-command/deploy-init-utils.d.ts.map +1 -0
  22. package/dist/commands/deploy-command/deploy-init-utils.js +22 -0
  23. package/dist/commands/deploy-command/deploy-init-utils.js.map +1 -0
  24. package/dist/commands/deploy-command/deploy-init.d.ts +3 -0
  25. package/dist/commands/deploy-command/deploy-init.d.ts.map +1 -0
  26. package/dist/commands/deploy-command/deploy-init.js +226 -0
  27. package/dist/commands/deploy-command/deploy-init.js.map +1 -0
  28. package/dist/commands/deploy-command/index.d.ts +22 -0
  29. package/dist/commands/deploy-command/index.d.ts.map +1 -0
  30. package/dist/commands/deploy-command/index.js +171 -0
  31. package/dist/commands/deploy-command/index.js.map +1 -0
  32. package/dist/commands/init-command/index.d.ts +9 -0
  33. package/dist/commands/init-command/index.d.ts.map +1 -0
  34. package/dist/commands/init-command/index.js +15 -0
  35. package/dist/commands/init-command/index.js.map +1 -0
  36. package/dist/commands/{init-game-command.d.ts → init-command/init-game-command.d.ts} +2 -2
  37. package/dist/commands/init-command/init-game-command.d.ts.map +1 -0
  38. package/dist/commands/{init-game-command.js → init-command/init-game-command.js} +5 -5
  39. package/dist/commands/init-command/init-game-command.js.map +1 -0
  40. package/dist/commands/{init-package-command.d.ts → init-command/init-package-command.d.ts} +1 -1
  41. package/dist/commands/init-command/init-package-command.d.ts.map +1 -0
  42. package/dist/commands/{init-package-command.js → init-command/init-package-command.js} +4 -5
  43. package/dist/commands/init-command/init-package-command.js.map +1 -0
  44. package/dist/commands/{init-plugin-command.d.ts → init-command/init-plugin-command.d.ts} +1 -1
  45. package/dist/commands/init-command/init-plugin-command.d.ts.map +1 -0
  46. package/dist/commands/{init-plugin-command.js → init-command/init-plugin-command.js} +4 -5
  47. package/dist/commands/init-command/init-plugin-command.js.map +1 -0
  48. package/dist/commands/login-command.d.ts +18 -0
  49. package/dist/commands/login-command.d.ts.map +1 -0
  50. package/dist/commands/login-command.js +134 -0
  51. package/dist/commands/login-command.js.map +1 -0
  52. package/dist/commands/test-command/test-command.d.ts +18 -0
  53. package/dist/commands/test-command/test-command.d.ts.map +1 -0
  54. package/dist/commands/test-command/test-command.js +97 -0
  55. package/dist/commands/test-command/test-command.js.map +1 -0
  56. package/dist/commands/tools-command/ci-post-test-results.d.ts +8 -0
  57. package/dist/commands/tools-command/ci-post-test-results.d.ts.map +1 -0
  58. package/dist/commands/tools-command/ci-post-test-results.js +37 -0
  59. package/dist/commands/tools-command/ci-post-test-results.js.map +1 -0
  60. package/dist/commands/{download-roblox-types.d.ts → tools-command/download-roblox-types.d.ts} +1 -1
  61. package/dist/commands/tools-command/download-roblox-types.d.ts.map +1 -0
  62. package/dist/commands/tools-command/download-roblox-types.js.map +1 -0
  63. package/dist/commands/tools-command/index.d.ts +9 -0
  64. package/dist/commands/tools-command/index.d.ts.map +1 -0
  65. package/dist/commands/tools-command/index.js +15 -0
  66. package/dist/commands/tools-command/index.js.map +1 -0
  67. package/dist/commands/tools-command/strip-sourcemap-jest-command.d.ts +18 -0
  68. package/dist/commands/tools-command/strip-sourcemap-jest-command.d.ts.map +1 -0
  69. package/dist/commands/tools-command/strip-sourcemap-jest-command.js +58 -0
  70. package/dist/commands/tools-command/strip-sourcemap-jest-command.js.map +1 -0
  71. package/dist/nevermore.js +35 -11
  72. package/dist/nevermore.js.map +1 -1
  73. package/dist/utils/auth/credential-store.d.ts +14 -0
  74. package/dist/utils/auth/credential-store.d.ts.map +1 -0
  75. package/dist/utils/auth/credential-store.js +105 -0
  76. package/dist/utils/auth/credential-store.js.map +1 -0
  77. package/dist/utils/auth/roblox-auth/cookie-parser.d.ts +7 -0
  78. package/dist/utils/auth/roblox-auth/cookie-parser.d.ts.map +1 -0
  79. package/dist/utils/auth/roblox-auth/cookie-parser.js +18 -0
  80. package/dist/utils/auth/roblox-auth/cookie-parser.js.map +1 -0
  81. package/dist/utils/auth/roblox-auth/index.d.ts +29 -0
  82. package/dist/utils/auth/roblox-auth/index.d.ts.map +1 -0
  83. package/dist/utils/auth/roblox-auth/index.js +134 -0
  84. package/dist/utils/auth/roblox-auth/index.js.map +1 -0
  85. package/dist/utils/auth/roblox-auth/macos.d.ts +2 -0
  86. package/dist/utils/auth/roblox-auth/macos.d.ts.map +1 -0
  87. package/dist/utils/auth/roblox-auth/macos.js +66 -0
  88. package/dist/utils/auth/roblox-auth/macos.js.map +1 -0
  89. package/dist/utils/auth/roblox-auth/windows.d.ts +2 -0
  90. package/dist/utils/auth/roblox-auth/windows.d.ts.map +1 -0
  91. package/dist/utils/auth/roblox-auth/windows.js +76 -0
  92. package/dist/utils/auth/roblox-auth/windows.js.map +1 -0
  93. package/dist/utils/batch/batch-runner.d.ts +11 -0
  94. package/dist/utils/batch/batch-runner.d.ts.map +1 -0
  95. package/dist/utils/batch/batch-runner.js +73 -0
  96. package/dist/utils/batch/batch-runner.js.map +1 -0
  97. package/dist/utils/batch/changed-packages-utils.d.ts +27 -0
  98. package/dist/utils/batch/changed-packages-utils.d.ts.map +1 -0
  99. package/dist/utils/batch/changed-packages-utils.js +89 -0
  100. package/dist/utils/batch/changed-packages-utils.js.map +1 -0
  101. package/dist/utils/build/build.d.ts +35 -0
  102. package/dist/utils/build/build.d.ts.map +1 -0
  103. package/dist/utils/build/build.js +43 -0
  104. package/dist/utils/build/build.js.map +1 -0
  105. package/dist/utils/build/deploy-config.d.ts +19 -0
  106. package/dist/utils/build/deploy-config.d.ts.map +1 -0
  107. package/dist/utils/build/deploy-config.js +76 -0
  108. package/dist/utils/build/deploy-config.js.map +1 -0
  109. package/dist/utils/build/upload.d.ts +26 -0
  110. package/dist/utils/build/upload.d.ts.map +1 -0
  111. package/dist/utils/build/upload.js +15 -0
  112. package/dist/utils/build/upload.js.map +1 -0
  113. package/dist/utils/deploy/deploy-github-columns.d.ts +4 -0
  114. package/dist/utils/deploy/deploy-github-columns.d.ts.map +1 -0
  115. package/dist/utils/deploy/deploy-github-columns.js +29 -0
  116. package/dist/utils/deploy/deploy-github-columns.js.map +1 -0
  117. package/dist/utils/job-context/base-job-context.d.ts +19 -0
  118. package/dist/utils/job-context/base-job-context.d.ts.map +1 -0
  119. package/dist/utils/job-context/base-job-context.js +44 -0
  120. package/dist/utils/job-context/base-job-context.js.map +1 -0
  121. package/dist/utils/job-context/cloud-job-context.d.ts +14 -0
  122. package/dist/utils/job-context/cloud-job-context.d.ts.map +1 -0
  123. package/dist/utils/job-context/cloud-job-context.js +71 -0
  124. package/dist/utils/job-context/cloud-job-context.js.map +1 -0
  125. package/dist/utils/job-context/index.d.ts +5 -0
  126. package/dist/utils/job-context/index.d.ts.map +1 -0
  127. package/dist/utils/job-context/index.js +4 -0
  128. package/dist/utils/job-context/index.js.map +1 -0
  129. package/dist/utils/job-context/job-context.d.ts +40 -0
  130. package/dist/utils/job-context/job-context.d.ts.map +1 -0
  131. package/dist/utils/job-context/job-context.js +2 -0
  132. package/dist/utils/job-context/job-context.js.map +1 -0
  133. package/dist/utils/job-context/local-job-context.d.ts +12 -0
  134. package/dist/utils/job-context/local-job-context.d.ts.map +1 -0
  135. package/dist/utils/job-context/local-job-context.js +66 -0
  136. package/dist/utils/job-context/local-job-context.js.map +1 -0
  137. package/dist/utils/nevermore-cli-utils.d.ts +7 -6
  138. package/dist/utils/nevermore-cli-utils.d.ts.map +1 -1
  139. package/dist/utils/nevermore-cli-utils.js +59 -9
  140. package/dist/utils/nevermore-cli-utils.js.map +1 -1
  141. package/dist/utils/open-cloud/open-cloud-client.d.ts +32 -0
  142. package/dist/utils/open-cloud/open-cloud-client.d.ts.map +1 -0
  143. package/dist/utils/open-cloud/open-cloud-client.js +150 -0
  144. package/dist/utils/open-cloud/open-cloud-client.js.map +1 -0
  145. package/dist/utils/open-cloud/rate-limiter.d.ts +32 -0
  146. package/dist/utils/open-cloud/rate-limiter.d.ts.map +1 -0
  147. package/dist/utils/open-cloud/rate-limiter.js +118 -0
  148. package/dist/utils/open-cloud/rate-limiter.js.map +1 -0
  149. package/dist/utils/testing/reporting/index.d.ts +5 -0
  150. package/dist/utils/testing/reporting/index.d.ts.map +1 -0
  151. package/dist/utils/testing/reporting/index.js +5 -0
  152. package/dist/utils/testing/reporting/index.js.map +1 -0
  153. package/dist/utils/testing/reporting/test-github-columns.d.ts +6 -0
  154. package/dist/utils/testing/reporting/test-github-columns.d.ts.map +1 -0
  155. package/dist/utils/testing/reporting/test-github-columns.js +41 -0
  156. package/dist/utils/testing/reporting/test-github-columns.js.map +1 -0
  157. package/dist/utils/testing/reporting/test-types.d.ts +8 -0
  158. package/dist/utils/testing/reporting/test-types.d.ts.map +1 -0
  159. package/dist/utils/testing/reporting/test-types.js +2 -0
  160. package/dist/utils/testing/reporting/test-types.js.map +1 -0
  161. package/dist/utils/testing/runner/test-runner.d.ts +25 -0
  162. package/dist/utils/testing/runner/test-runner.d.ts.map +1 -0
  163. package/dist/utils/testing/runner/test-runner.js +59 -0
  164. package/dist/utils/testing/runner/test-runner.js.map +1 -0
  165. package/dist/utils/testing/test-log-parser.d.ts +10 -0
  166. package/dist/utils/testing/test-log-parser.d.ts.map +1 -0
  167. package/dist/utils/testing/test-log-parser.js +19 -0
  168. package/dist/utils/testing/test-log-parser.js.map +1 -0
  169. package/package.json +6 -5
  170. package/src/args/global-args.ts +1 -0
  171. package/src/commands/batch-command/batch-deploy-command.ts +219 -0
  172. package/src/commands/batch-command/batch-test-command.ts +232 -0
  173. package/src/commands/batch-command/index.ts +17 -0
  174. package/src/commands/deploy-command/deploy-init-prompts.ts +124 -0
  175. package/src/commands/deploy-command/deploy-init-utils.ts +27 -0
  176. package/src/commands/deploy-command/deploy-init.ts +272 -0
  177. package/src/commands/deploy-command/index.ts +221 -0
  178. package/src/commands/init-command/index.ts +19 -0
  179. package/src/commands/{init-game-command.ts → init-command/init-game-command.ts} +6 -9
  180. package/src/commands/{init-package-command.ts → init-command/init-package-command.ts} +6 -7
  181. package/src/commands/{init-plugin-command.ts → init-command/init-plugin-command.ts} +5 -6
  182. package/src/commands/login-command.ts +178 -0
  183. package/src/commands/test-command/test-command.ts +128 -0
  184. package/src/commands/tools-command/ci-post-test-results.ts +53 -0
  185. package/src/commands/{download-roblox-types.ts → tools-command/download-roblox-types.ts} +1 -1
  186. package/src/commands/tools-command/index.ts +19 -0
  187. package/src/commands/tools-command/strip-sourcemap-jest-command.ts +78 -0
  188. package/src/nevermore.ts +36 -11
  189. package/src/utils/auth/credential-store.ts +142 -0
  190. package/src/utils/auth/roblox-auth/cookie-parser.ts +18 -0
  191. package/src/utils/auth/roblox-auth/index.ts +191 -0
  192. package/src/utils/auth/roblox-auth/macos.ts +88 -0
  193. package/src/utils/auth/roblox-auth/windows.ts +96 -0
  194. package/src/utils/batch/batch-runner.ts +115 -0
  195. package/src/utils/batch/changed-packages-utils.ts +134 -0
  196. package/src/utils/build/build.ts +96 -0
  197. package/src/utils/build/deploy-config.ts +115 -0
  198. package/src/utils/build/upload.ts +44 -0
  199. package/src/utils/deploy/deploy-github-columns.ts +35 -0
  200. package/src/utils/job-context/base-job-context.ts +67 -0
  201. package/src/utils/job-context/cloud-job-context.ts +124 -0
  202. package/src/utils/job-context/index.ts +11 -0
  203. package/src/utils/job-context/job-context.ts +51 -0
  204. package/src/utils/job-context/local-job-context.ts +96 -0
  205. package/src/utils/nevermore-cli-utils.ts +75 -10
  206. package/src/utils/open-cloud/open-cloud-client.ts +268 -0
  207. package/src/utils/open-cloud/rate-limiter.ts +146 -0
  208. package/src/utils/testing/reporting/README.md +63 -0
  209. package/src/utils/testing/reporting/index.ts +40 -0
  210. package/src/utils/testing/reporting/test-github-columns.ts +51 -0
  211. package/src/utils/testing/reporting/test-types.ts +9 -0
  212. package/src/utils/testing/runner/test-runner.ts +95 -0
  213. package/src/utils/testing/test-log-parser.ts +27 -0
  214. package/templates/game-template/package.json +1 -1
  215. package/templates/plugin-template/package.json +1 -1
  216. package/tsconfig.json +2 -1
  217. package/tsconfig.tsbuildinfo +1 -1
  218. package/dist/commands/download-roblox-types.d.ts.map +0 -1
  219. package/dist/commands/download-roblox-types.js.map +0 -1
  220. package/dist/commands/init-game-command.d.ts.map +0 -1
  221. package/dist/commands/init-game-command.js.map +0 -1
  222. package/dist/commands/init-package-command.d.ts.map +0 -1
  223. package/dist/commands/init-package-command.js.map +0 -1
  224. package/dist/commands/init-plugin-command.d.ts.map +0 -1
  225. package/dist/commands/init-plugin-command.js.map +0 -1
  226. package/dist/commands/pack-command.d.ts +0 -18
  227. package/dist/commands/pack-command.d.ts.map +0 -1
  228. package/dist/commands/pack-command.js +0 -37
  229. package/dist/commands/pack-command.js.map +0 -1
  230. package/dist/commands/test-project-command.d.ts +0 -20
  231. package/dist/commands/test-project-command.d.ts.map +0 -1
  232. package/dist/commands/test-project-command.js +0 -108
  233. package/dist/commands/test-project-command.js.map +0 -1
  234. package/src/commands/pack-command.ts +0 -64
  235. package/src/commands/test-project-command.ts +0 -165
  236. package/templates/pack-template/README.md +0 -3
  237. package/templates/pack-template/default.project.json +0 -14
  238. package/templates/pack-template/src/init.lua +0 -17
  239. package/templates/pack-template/src/src.project.json +0 -7
  240. package/templates/pack-template/test/README.md +0 -3
  241. package/templates/pack-template/test/default.project.json +0 -14
  242. /package/dist/commands/{download-roblox-types.js → tools-command/download-roblox-types.js} +0 -0
package/CHANGELOG.md CHANGED
@@ -3,6 +3,29 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [4.15.3-canary.656.67d6ba1.0](https://github.com/Quenty/Nevermore/compare/@quenty/nevermore-cli@4.15.2...@quenty/nevermore-cli@4.15.3-canary.656.67d6ba1.0) (2026-02-17)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * Local testing works consistently and in batch mode ([67d6ba1](https://github.com/Quenty/Nevermore/commit/67d6ba1d3625dc76f7a54ac13e75da2cc82ccc64))
12
+ * Tests timing out ([8566a58](https://github.com/Quenty/Nevermore/commit/8566a584d7bb30585cdb83c5a56520fab44a8c72))
13
+
14
+
15
+ ### Features
16
+
17
+ * Add CI/CD batch unit testing ([016a366](https://github.com/Quenty/Nevermore/commit/016a3663509c8fffa518b07cfc49ebecba2a1fa6))
18
+ * Add Nevermore deploy and Nevermore test commands that run files in the open cloud ([81f328d](https://github.com/Quenty/Nevermore/commit/81f328db23f4ecdedad121f9c2d4789aded59d4e))
19
+ * Better error messages and optimized tests ([71ca056](https://github.com/Quenty/Nevermore/commit/71ca056517ee98e625d61e7dcd923dc808ac3edc))
20
+ * Create places automatically using nevermore-cli ([d4a6a66](https://github.com/Quenty/Nevermore/commit/d4a6a66e5720d010b4fc3d6f973ccfdaa17dbead))
21
+ * Improve output quality of testing cli tools ([217630c](https://github.com/Quenty/Nevermore/commit/217630c354308b740092c07077341dc82d134965))
22
+ * Refactor studio bridge ([8afe642](https://github.com/Quenty/Nevermore/commit/8afe6424b6635eaa0155734c085934051de88da6))
23
+ * Unify plugin testing reporting and start initial local test execution mode ([5376478](https://github.com/Quenty/Nevermore/commit/53764782b35c7897aa90baeb3bd7c4baacf4e591))
24
+
25
+
26
+
27
+
28
+
6
29
  ## [4.15.2](https://github.com/Quenty/Nevermore/compare/@quenty/nevermore-cli@4.15.1...@quenty/nevermore-cli@4.15.2) (2026-01-20)
7
30
 
8
31
 
@@ -4,5 +4,6 @@
4
4
  export interface NevermoreGlobalArgs {
5
5
  yes: boolean;
6
6
  dryrun: boolean;
7
+ verbose: boolean;
7
8
  }
8
9
  //# sourceMappingURL=global-args.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"global-args.d.ts","sourceRoot":"","sources":["../../src/args/global-args.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,OAAO,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;CACjB"}
1
+ {"version":3,"file":"global-args.d.ts","sourceRoot":"","sources":["../../src/args/global-args.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,OAAO,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB"}
@@ -0,0 +1,16 @@
1
+ import { CommandModule } from 'yargs';
2
+ import { NevermoreGlobalArgs } from '../../args/global-args.js';
3
+ interface BatchDeployArgs extends NevermoreGlobalArgs {
4
+ apiKey?: string;
5
+ publish?: boolean;
6
+ base?: string;
7
+ concurrency?: number;
8
+ all?: boolean;
9
+ output?: string;
10
+ limit?: number;
11
+ logs?: boolean;
12
+ target?: string;
13
+ }
14
+ export declare const batchDeployCommand: CommandModule<NevermoreGlobalArgs, BatchDeployArgs>;
15
+ export {};
16
+ //# sourceMappingURL=batch-deploy-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch-deploy-command.d.ts","sourceRoot":"","sources":["../../../src/commands/batch-command/batch-deploy-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAYtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAchE,UAAU,eAAgB,SAAQ,mBAAmB;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,kBAAkB,EAAE,aAAa,CAC5C,mBAAmB,EACnB,eAAe,CAyDhB,CAAC"}
@@ -0,0 +1,166 @@
1
+ import { OutputHelper } from '@quenty/cli-output-helpers';
2
+ import { CompositeReporter, GithubCommentTableReporter, GroupedReporter, JsonFileReporter, SpinnerReporter, SummaryTableReporter, } from '@quenty/cli-output-helpers/reporting';
3
+ import { getApiKeyAsync } from '../../utils/auth/credential-store.js';
4
+ import { runBatchAsync } from '../../utils/batch/batch-runner.js';
5
+ import { uploadPlaceAsync } from '../../utils/build/upload.js';
6
+ import { createDeployCommentConfig } from '../../utils/deploy/deploy-github-columns.js';
7
+ import { OpenCloudClient } from '../../utils/open-cloud/open-cloud-client.js';
8
+ import { RateLimiter } from '../../utils/open-cloud/rate-limiter.js';
9
+ import { CloudJobContext } from '../../utils/job-context/cloud-job-context.js';
10
+ import { discoverAllTargetPackagesAsync, discoverChangedTargetPackagesAsync, } from '../../utils/batch/changed-packages-utils.js';
11
+ import { isCI } from '../../utils/nevermore-cli-utils.js';
12
+ export const batchDeployCommand = {
13
+ command: 'deploy',
14
+ describe: 'Deploy changed packages with deploy targets',
15
+ builder: (yargs) => {
16
+ return yargs
17
+ .option('target', {
18
+ describe: 'Deploy target name in deploy.nevermore.json',
19
+ type: 'string',
20
+ default: 'test',
21
+ })
22
+ .option('api-key', {
23
+ describe: 'Roblox Open Cloud API key',
24
+ type: 'string',
25
+ })
26
+ .option('publish', {
27
+ describe: 'Publish places (default: Saved)',
28
+ type: 'boolean',
29
+ default: false,
30
+ })
31
+ .option('all', {
32
+ describe: 'Deploy all packages with deploy targets, not just changed',
33
+ type: 'boolean',
34
+ default: false,
35
+ })
36
+ .option('base', {
37
+ describe: 'Git ref to diff against for change detection',
38
+ type: 'string',
39
+ default: 'origin/main',
40
+ })
41
+ .option('concurrency', {
42
+ describe: 'Max parallel deploys',
43
+ type: 'number',
44
+ default: 3,
45
+ })
46
+ .option('output', {
47
+ describe: 'Write JSON results to this file',
48
+ type: 'string',
49
+ })
50
+ .option('limit', {
51
+ describe: 'Max number of packages to deploy (for debugging)',
52
+ type: 'number',
53
+ })
54
+ .option('logs', {
55
+ describe: 'Show build/upload logs for all packages (not just failures)',
56
+ type: 'boolean',
57
+ default: false,
58
+ });
59
+ },
60
+ handler: async (args) => {
61
+ try {
62
+ await _runAsync(args);
63
+ }
64
+ catch (err) {
65
+ OutputHelper.error(err instanceof Error ? err.message : String(err));
66
+ process.exit(1);
67
+ }
68
+ },
69
+ };
70
+ async function _runAsync(args) {
71
+ const targetName = args.target ?? 'deploy';
72
+ let packages = args.all
73
+ ? await discoverAllTargetPackagesAsync(targetName)
74
+ : await discoverChangedTargetPackagesAsync(args.base, targetName);
75
+ if (args.limit && args.limit > 0) {
76
+ packages = packages.slice(0, args.limit);
77
+ }
78
+ if (packages.length === 0) {
79
+ OutputHelper.warn(`No packages found with a "${targetName}" target. Packages need a deploy.nevermore.json with a "${targetName}" target.\n` +
80
+ 'Run "nevermore deploy init" inside a package to set one up.');
81
+ return;
82
+ }
83
+ if (args.dryrun) {
84
+ const names = packages.map((p) => p.name).join(', ');
85
+ OutputHelper.info(`[DRYRUN] Would deploy ${packages.length} packages: ${names}`);
86
+ return;
87
+ }
88
+ const concurrency = args.concurrency ?? 3;
89
+ const isGrouped = !process.stdout.isTTY || args.verbose || isCI();
90
+ const packageNames = packages.map((p) => p.name);
91
+ const deployLabels = {
92
+ successLabel: 'Deployed',
93
+ failureLabel: 'DEPLOY FAILED',
94
+ };
95
+ const reporter = new CompositeReporter(packageNames, (state) => {
96
+ const reporters = [
97
+ isGrouped
98
+ ? new GroupedReporter(state, {
99
+ showLogs: args.logs ?? false,
100
+ verbose: args.verbose,
101
+ actionVerb: 'Deploying',
102
+ ...deployLabels,
103
+ })
104
+ : new SpinnerReporter(state, {
105
+ showLogs: args.logs ?? false,
106
+ actionVerb: 'Deploying',
107
+ ...deployLabels,
108
+ }),
109
+ new SummaryTableReporter(state, {
110
+ ...deployLabels,
111
+ summaryVerb: 'deployed',
112
+ }),
113
+ new GithubCommentTableReporter(state, createDeployCommentConfig(), concurrency),
114
+ ];
115
+ if (args.output) {
116
+ reporters.push(new JsonFileReporter(state, args.output));
117
+ }
118
+ return reporters;
119
+ });
120
+ const apiKey = await getApiKeyAsync(args);
121
+ const client = new OpenCloudClient({
122
+ apiKey,
123
+ rateLimiter: new RateLimiter(),
124
+ });
125
+ const context = new CloudJobContext(client);
126
+ await reporter.startAsync();
127
+ try {
128
+ const publish = args.publish ?? false;
129
+ const results = await runBatchAsync({
130
+ packages,
131
+ concurrency,
132
+ reporter,
133
+ bufferOutput: isGrouped,
134
+ executeAsync: async (pkg, pkgReporter) => {
135
+ const builtPlace = await context.buildPlaceAsync({
136
+ targetName,
137
+ outputFileName: publish ? 'publish.rbxl' : 'deploy.rbxl',
138
+ packagePath: pkg.path,
139
+ reporter: pkgReporter,
140
+ packageName: pkg.name,
141
+ });
142
+ const { version } = await uploadPlaceAsync({
143
+ builtPlace,
144
+ args: { apiKey, publish },
145
+ client,
146
+ reporter: pkgReporter,
147
+ packageName: pkg.name,
148
+ });
149
+ // Eagerly release build artifacts after upload
150
+ await context.releaseBuiltPlaceAsync(builtPlace);
151
+ const action = publish ? 'Published' : 'Saved';
152
+ return {
153
+ packageName: pkg.name,
154
+ success: true,
155
+ logs: `${action} v${version}`,
156
+ };
157
+ },
158
+ });
159
+ await reporter.stopAsync();
160
+ process.exit(results.summary.failed > 0 ? 1 : 0);
161
+ }
162
+ finally {
163
+ await context.disposeAsync();
164
+ }
165
+ }
166
+ //# sourceMappingURL=batch-deploy-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch-deploy-command.js","sourceRoot":"","sources":["../../../src/commands/batch-command/batch-deploy-command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { CommandModule } from 'yargs';
2
+ import { NevermoreGlobalArgs } from '../../args/global-args.js';
3
+ interface BatchTestArgs extends NevermoreGlobalArgs {
4
+ cloud?: boolean;
5
+ apiKey?: string;
6
+ base?: string;
7
+ concurrency?: number;
8
+ all?: boolean;
9
+ output?: string;
10
+ limit?: number;
11
+ logs?: boolean;
12
+ }
13
+ export declare const batchTestCommand: CommandModule<NevermoreGlobalArgs, BatchTestArgs>;
14
+ export {};
15
+ //# sourceMappingURL=batch-test-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch-test-command.d.ts","sourceRoot":"","sources":["../../../src/commands/batch-command/batch-test-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAGtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAiChE,UAAU,aAAc,SAAQ,mBAAmB;IACjD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,eAAO,MAAM,gBAAgB,EAAE,aAAa,CAC1C,mBAAmB,EACnB,aAAa,CAmDd,CAAC"}
@@ -0,0 +1,158 @@
1
+ import { OutputHelper } from '@quenty/cli-output-helpers';
2
+ import { getApiKeyAsync } from '../../utils/auth/credential-store.js';
3
+ import { runBatchAsync } from '../../utils/batch/batch-runner.js';
4
+ import { CloudJobContext, LocalJobContext, } from '../../utils/job-context/index.js';
5
+ import { OpenCloudClient } from '../../utils/open-cloud/open-cloud-client.js';
6
+ import { RateLimiter } from '../../utils/open-cloud/rate-limiter.js';
7
+ import { discoverAllTestablePackagesAsync, discoverChangedTestablePackagesAsync, } from '../../utils/batch/changed-packages-utils.js';
8
+ import { CompositeReporter, GithubCommentTableReporter, GroupedReporter, JsonFileReporter, SpinnerReporter, SummaryTableReporter, createTestCommentConfig, } from '../../utils/testing/reporting/index.js';
9
+ import { runSingleTestAsync, } from '../../utils/testing/runner/test-runner.js';
10
+ import { isCI } from '../../utils/nevermore-cli-utils.js';
11
+ export const batchTestCommand = {
12
+ command: 'test',
13
+ describe: 'Run tests for changed packages with test targets',
14
+ builder: (yargs) => {
15
+ return yargs
16
+ .option('cloud', {
17
+ describe: 'Run tests via Open Cloud instead of locally',
18
+ type: 'boolean',
19
+ default: false,
20
+ })
21
+ .option('api-key', {
22
+ describe: 'Roblox Open Cloud API key (--cloud only)',
23
+ type: 'string',
24
+ })
25
+ .option('all', {
26
+ describe: 'Test all packages with test targets, not just changed',
27
+ type: 'boolean',
28
+ default: false,
29
+ })
30
+ .option('base', {
31
+ describe: 'Git ref to diff against for change detection',
32
+ type: 'string',
33
+ default: 'origin/main',
34
+ })
35
+ .option('concurrency', {
36
+ describe: 'Max parallel tests (default: 1 local, 3 cloud)',
37
+ type: 'number',
38
+ })
39
+ .option('output', {
40
+ describe: 'Write JSON results to this file',
41
+ type: 'string',
42
+ })
43
+ .option('limit', {
44
+ describe: 'Max number of packages to test (for local debugging)',
45
+ type: 'number',
46
+ })
47
+ .option('logs', {
48
+ describe: 'Show execution logs for all packages (not just failures)',
49
+ type: 'boolean',
50
+ default: false,
51
+ });
52
+ },
53
+ handler: async (args) => {
54
+ try {
55
+ await _runAsync(args);
56
+ }
57
+ catch (err) {
58
+ OutputHelper.error(err instanceof Error ? err.message : String(err));
59
+ process.exit(1);
60
+ }
61
+ },
62
+ };
63
+ async function _runAsync(args) {
64
+ let packages = args.all
65
+ ? await discoverAllTestablePackagesAsync()
66
+ : await discoverChangedTestablePackagesAsync(args.base);
67
+ if (args.limit && args.limit > 0) {
68
+ packages = packages.slice(0, args.limit);
69
+ }
70
+ if (packages.length === 0) {
71
+ OutputHelper.warn('No testable packages found. Packages need a deploy.nevermore.json with a "test" target.\n' +
72
+ 'Run "nevermore deploy init" inside a package to set one up.');
73
+ return;
74
+ }
75
+ if (args.dryrun) {
76
+ const names = packages.map((p) => p.name).join(', ');
77
+ OutputHelper.info(`[DRYRUN] Would test ${packages.length} packages: ${names}`);
78
+ return;
79
+ }
80
+ const cloud = args.cloud ?? false;
81
+ const concurrency = args.concurrency ?? 3;
82
+ const isGrouped = !process.stdout.isTTY || args.verbose || isCI();
83
+ const packageNames = packages.map((p) => p.name);
84
+ const reporter = new CompositeReporter(packageNames, (state) => {
85
+ const reporters = [
86
+ isGrouped
87
+ ? new GroupedReporter(state, {
88
+ showLogs: args.logs ?? false,
89
+ verbose: args.verbose,
90
+ actionVerb: 'Testing',
91
+ })
92
+ : new SpinnerReporter(state, {
93
+ showLogs: args.logs ?? false,
94
+ actionVerb: 'Testing',
95
+ }),
96
+ new SummaryTableReporter(state),
97
+ new GithubCommentTableReporter(state, createTestCommentConfig(), concurrency),
98
+ ];
99
+ if (args.output) {
100
+ reporters.push(new JsonFileReporter(state, args.output));
101
+ }
102
+ return reporters;
103
+ });
104
+ let client;
105
+ if (cloud) {
106
+ const apiKey = await getApiKeyAsync(args);
107
+ client = new OpenCloudClient({ apiKey, rateLimiter: new RateLimiter() });
108
+ }
109
+ const context = client
110
+ ? new CloudJobContext(client)
111
+ : new LocalJobContext();
112
+ await reporter.startAsync();
113
+ const timeoutMs = 120_000;
114
+ let results;
115
+ try {
116
+ results = await runBatchAsync({
117
+ packages,
118
+ concurrency,
119
+ reporter,
120
+ bufferOutput: isGrouped,
121
+ executeAsync: async (pkg, pkgReporter) => {
122
+ const result = await _runWithRetryAsync(pkg, context, timeoutMs, pkgReporter);
123
+ return {
124
+ packageName: pkg.name,
125
+ placeId: pkg.target.placeId,
126
+ success: result.success,
127
+ logs: result.logs,
128
+ };
129
+ },
130
+ });
131
+ }
132
+ finally {
133
+ await context.disposeAsync();
134
+ }
135
+ await reporter.stopAsync();
136
+ // Node.js fetch (undici) keeps TCP connections alive in a global pool,
137
+ // which prevents the event loop from draining. Explicit exit required.
138
+ process.exit(results.summary.failed > 0 ? 1 : 0);
139
+ }
140
+ async function _runWithRetryAsync(pkg, context, timeoutMs, reporter) {
141
+ const opts = {
142
+ packagePath: pkg.path,
143
+ packageName: pkg.name,
144
+ timeoutMs,
145
+ };
146
+ try {
147
+ return await runSingleTestAsync(context, reporter, opts);
148
+ }
149
+ catch (err) {
150
+ const message = err instanceof Error ? err.message : String(err);
151
+ if (message.includes('timed out') || message.includes('fetch failed')) {
152
+ OutputHelper.warn(`${pkg.name}: transient failure, retrying...`);
153
+ return await runSingleTestAsync(context, reporter, opts);
154
+ }
155
+ throw err;
156
+ }
157
+ }
158
+ //# sourceMappingURL=batch-test-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch-test-command.js","sourceRoot":"","sources":["../../../src/commands/batch-command/batch-test-command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { Argv, CommandModule } from 'yargs';
2
+ import { NevermoreGlobalArgs } from '../../args/global-args.js';
3
+ export declare class BatchCommand<T> implements CommandModule<T, NevermoreGlobalArgs> {
4
+ command: string;
5
+ describe: string;
6
+ builder: (args: Argv<T>) => Argv<NevermoreGlobalArgs>;
7
+ handler: () => Promise<void>;
8
+ }
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/batch-command/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAIhE,qBAAa,YAAY,CAAC,CAAC,CAAE,YAAW,aAAa,CAAC,CAAC,EAAE,mBAAmB,CAAC;IACpE,OAAO,SAAwB;IAC/B,QAAQ,SAA6C;IAErD,OAAO,GAAI,MAAM,IAAI,CAAC,CAAC,CAAC,KAGd,IAAI,CAAC,mBAAmB,CAAC,CACxC;IAEK,OAAO,sBAAkB;CACjC"}
@@ -0,0 +1,13 @@
1
+ import { batchDeployCommand } from './batch-deploy-command.js';
2
+ import { batchTestCommand } from './batch-test-command.js';
3
+ export class BatchCommand {
4
+ command = 'batch <subcommand>';
5
+ describe = 'Run operations across multiple packages';
6
+ builder = (args) => {
7
+ args.command(batchDeployCommand);
8
+ args.command(batchTestCommand);
9
+ return args;
10
+ };
11
+ handler = async () => { };
12
+ }
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/batch-command/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,OAAO,YAAY;IAChB,OAAO,GAAG,oBAAoB,CAAC;IAC/B,QAAQ,GAAG,yCAAyC,CAAC;IAErD,OAAO,GAAG,CAAC,IAAa,EAAE,EAAE;QACjC,IAAI,CAAC,OAAO,CAAC,kBAAyB,CAAC,CAAC;QACxC,IAAI,CAAC,OAAO,CAAC,gBAAuB,CAAC,CAAC;QACtC,OAAO,IAAiC,CAAC;IAC3C,CAAC,CAAC;IAEK,OAAO,GAAG,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC;CACjC"}
@@ -0,0 +1,2 @@
1
+ export declare function promptPlaceIdAsync(universeId: number, placeName: string): Promise<number>;
2
+ //# sourceMappingURL=deploy-init-prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy-init-prompts.d.ts","sourceRoot":"","sources":["../../../src/commands/deploy-command/deploy-init-prompts.ts"],"names":[],"mappings":"AAiDA,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CAsDjB"}
@@ -0,0 +1,84 @@
1
+ import inquirer from 'inquirer';
2
+ import { OutputHelper } from '@quenty/cli-output-helpers';
3
+ import { getRobloxCookieAsync, createPlaceInUniverseAsync } from '../../utils/auth/roblox-auth/index.js';
4
+ async function listPlacesAsync(universeId) {
5
+ const places = [];
6
+ let cursor;
7
+ while (true) {
8
+ const url = new URL(`https://develop.roblox.com/v1/universes/${universeId}/places`);
9
+ url.searchParams.set('limit', '100');
10
+ if (cursor) {
11
+ url.searchParams.set('cursor', cursor);
12
+ }
13
+ const response = await fetch(url.toString());
14
+ if (!response.ok) {
15
+ throw new Error(`Failed to list places for universe ${universeId}: ${response.status}`);
16
+ }
17
+ const data = (await response.json());
18
+ places.push(...data.data);
19
+ if (!data.nextPageCursor) {
20
+ break;
21
+ }
22
+ cursor = data.nextPageCursor;
23
+ }
24
+ return places;
25
+ }
26
+ export async function promptPlaceIdAsync(universeId, placeName) {
27
+ let places = [];
28
+ try {
29
+ OutputHelper.info(`Fetching places for universe ${universeId}...`);
30
+ places = await listPlacesAsync(universeId);
31
+ }
32
+ catch {
33
+ OutputHelper.warn(`Could not fetch places (universe may be private or not exist).`);
34
+ }
35
+ const choices = [
36
+ { name: '+ Create new place', value: 'create' },
37
+ ...places.map((p) => ({
38
+ name: `${p.name} (${p.id})`,
39
+ value: p.id,
40
+ })),
41
+ { name: 'Enter place ID manually', value: 'manual' },
42
+ ];
43
+ const { selection } = await inquirer.prompt([
44
+ {
45
+ type: 'select',
46
+ name: 'selection',
47
+ message: places.length > 0 ? 'Select a place:' : 'No existing places found:',
48
+ choices,
49
+ },
50
+ ]);
51
+ if (selection === 'create') {
52
+ return await createNewPlaceInteractiveAsync(universeId, placeName);
53
+ }
54
+ if (selection === 'manual') {
55
+ const { manualPlaceId } = await inquirer.prompt([
56
+ {
57
+ type: 'number',
58
+ name: 'manualPlaceId',
59
+ message: 'Place ID:',
60
+ validate: (input) => Number.isInteger(input) && input > 0
61
+ ? true
62
+ : 'Must be a positive integer',
63
+ },
64
+ ]);
65
+ return manualPlaceId;
66
+ }
67
+ if (typeof selection !== 'number' || !Number.isFinite(selection) || selection <= 0) {
68
+ throw new Error('No place selected.');
69
+ }
70
+ return selection;
71
+ }
72
+ async function createNewPlaceInteractiveAsync(universeId, defaultPlaceName) {
73
+ const { placeName } = await inquirer.prompt([
74
+ {
75
+ type: 'input',
76
+ name: 'placeName',
77
+ message: 'New place name:',
78
+ default: defaultPlaceName,
79
+ },
80
+ ]);
81
+ const cookie = await getRobloxCookieAsync();
82
+ return await createPlaceInUniverseAsync(cookie, universeId, placeName);
83
+ }
84
+ //# sourceMappingURL=deploy-init-prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy-init-prompts.js","sourceRoot":"","sources":["../../../src/commands/deploy-command/deploy-init-prompts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function detectProjectFileAsync(packagePath: string): Promise<string | undefined>;
2
+ export declare function detectScriptFileAsync(packagePath: string): Promise<string | undefined>;
3
+ //# sourceMappingURL=deploy-init-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy-init-utils.d.ts","sourceRoot":"","sources":["../../../src/commands/deploy-command/deploy-init-utils.ts"],"names":[],"mappings":"AAGA,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAM7B;AAED,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAW7B"}
@@ -0,0 +1,22 @@
1
+ import * as path from 'path';
2
+ import { fileExistsAsync } from '../../utils/nevermore-cli-utils.js';
3
+ export async function detectProjectFileAsync(packagePath) {
4
+ const candidate = path.join(packagePath, 'test', 'default.project.json');
5
+ if (await fileExistsAsync(candidate)) {
6
+ return 'test/default.project.json';
7
+ }
8
+ return undefined;
9
+ }
10
+ export async function detectScriptFileAsync(packagePath) {
11
+ const candidates = [
12
+ 'test/scripts/Server/ServerMain.server.lua',
13
+ 'test/scripts/Server/ServerMain.server.luau',
14
+ ];
15
+ for (const candidate of candidates) {
16
+ if (await fileExistsAsync(path.join(packagePath, candidate))) {
17
+ return candidate;
18
+ }
19
+ }
20
+ return undefined;
21
+ }
22
+ //# sourceMappingURL=deploy-init-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy-init-utils.js","sourceRoot":"","sources":["../../../src/commands/deploy-command/deploy-init-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAErE,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,WAAmB;IAEnB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,sBAAsB,CAAC,CAAC;IACzE,IAAI,MAAM,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC;QACrC,OAAO,2BAA2B,CAAC;IACrC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,WAAmB;IAEnB,MAAM,UAAU,GAAG;QACjB,2CAA2C;QAC3C,4CAA4C;KAC7C,CAAC;IACF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,MAAM,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;YAC7D,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { DeployArgs } from './index.js';
2
+ export declare function handleInitAsync(args: DeployArgs): Promise<void>;
3
+ //# sourceMappingURL=deploy-init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy-init.d.ts","sourceRoot":"","sources":["../../../src/commands/deploy-command/deploy-init.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAexC,wBAAsB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBrE"}