@joystick.js/cli-canary 0.0.0-canary.162 → 0.0.0-canary.1621

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 (584) hide show
  1. package/.build/getFilesToBuild.js +1 -1
  2. package/.build/index.js +3 -3
  3. package/LICENSE.md +59 -0
  4. package/README.md +45 -4
  5. package/dist/cli.js +1 -76
  6. package/dist/commands/build/definition.js +1 -0
  7. package/dist/commands/build/index.js +1 -0
  8. package/dist/commands/create/build_package_json.js +1 -0
  9. package/dist/commands/create/definition.js +1 -0
  10. package/dist/commands/create/index.js +2 -0
  11. package/dist/commands/create/template/api/index.js +6 -0
  12. package/dist/commands/create/template/email/base.css +9 -0
  13. package/dist/commands/create/template/email/base.html +10 -0
  14. package/dist/commands/create/template/email/reset_password.js +20 -0
  15. package/dist/commands/create/template/i18n/en-US.js +14 -0
  16. package/dist/commands/create/template/index.client.js +1 -0
  17. package/dist/commands/create/template/index.css +34 -0
  18. package/dist/{functions/create/templates → commands/create/template}/index.html +2 -3
  19. package/dist/{functions/create/templates → commands/create/template}/index.server.js +6 -6
  20. package/dist/commands/create/template/public/apple-touch-icon-152x152.png +0 -0
  21. package/dist/commands/create/template/public/favicon.ico +0 -0
  22. package/dist/commands/create/template/public/joystick_logo.webp +0 -0
  23. package/dist/{functions/create/templates → commands/create/template}/public/manifest.json +4 -4
  24. package/dist/commands/create/template/public/splash-screen-1024x1024.png +0 -0
  25. package/{src/functions/create/templates → dist/commands/create/template}/ui/components/button/index.js +14 -6
  26. package/{src/functions/create/templates → dist/commands/create/template}/ui/layouts/app/index.js +2 -2
  27. package/dist/commands/create/template/ui/pages/error/index.js +50 -0
  28. package/dist/commands/create/template/ui/pages/index/index.js +121 -0
  29. package/dist/commands/help/definition.js +1 -0
  30. package/dist/commands/help/index.js +19 -0
  31. package/dist/commands/index.js +1 -0
  32. package/dist/commands/logout/definition.js +1 -0
  33. package/dist/commands/logout/index.js +3 -0
  34. package/dist/commands/push/cdn_mirrors.js +1 -0
  35. package/dist/commands/push/check_if_settings_valid.js +1 -0
  36. package/dist/commands/push/create_version.js +1 -0
  37. package/dist/commands/push/definition.js +1 -0
  38. package/dist/commands/push/get_app_domain.js +1 -0
  39. package/dist/commands/push/get_deployment.js +1 -0
  40. package/dist/commands/push/get_provision_domain.js +1 -0
  41. package/dist/commands/push/get_session_token.js +1 -0
  42. package/dist/commands/push/get_settings_file.js +1 -0
  43. package/dist/commands/push/handle_initial_deployment.js +1 -0
  44. package/dist/commands/push/handle_version_deployment.js +1 -0
  45. package/dist/commands/push/index.js +8 -0
  46. package/dist/commands/push/prompts/confirm_deployment.js +17 -0
  47. package/dist/commands/push/prompts/session_token.js +5 -0
  48. package/dist/commands/push/upload_build_to_cdn.js +1 -0
  49. package/dist/commands/push/validate_deployment.js +1 -0
  50. package/dist/commands/push/validate_push_config.js +1 -0
  51. package/dist/commands/start/definition.js +1 -0
  52. package/dist/commands/start/index.js +1 -0
  53. package/dist/commands/test/definition.js +1 -0
  54. package/dist/commands/test/index.js +1 -0
  55. package/dist/commands/update/definition.js +1 -0
  56. package/dist/commands/update/index.js +1 -0
  57. package/dist/commands/use/definition.js +1 -0
  58. package/dist/commands/use/index.js +1 -0
  59. package/dist/index.js +1 -7
  60. package/dist/lib/build/browser_path_exclusions.js +1 -0
  61. package/dist/lib/build/browser_paths.js +1 -0
  62. package/dist/lib/build/build_files.js +3 -0
  63. package/dist/lib/build/copy_paths.js +1 -0
  64. package/dist/lib/build/get_code_frame.js +1 -0
  65. package/dist/lib/build/get_file_operation.js +1 -0
  66. package/dist/lib/build/get_files_to_build.js +1 -0
  67. package/dist/lib/build/get_path_platform.js +1 -0
  68. package/dist/lib/build/get_platform_safe_path.js +1 -0
  69. package/dist/lib/build/get_tar_ignore_list.js +2 -0
  70. package/dist/lib/build/index.js +3 -0
  71. package/dist/lib/build/master_ignore_list.js +1 -0
  72. package/dist/lib/build/minify_file.js +1 -0
  73. package/dist/lib/build/node_paths.js +1 -0
  74. package/dist/lib/build/on_warn.js +10 -0
  75. package/dist/lib/build/plugins/bootstrap_component.js +33 -0
  76. package/dist/lib/build/plugins/generate_file_dependency_map.js +1 -0
  77. package/dist/lib/build/plugins/index.js +1 -0
  78. package/dist/lib/build/plugins/set_component_id.js +2 -0
  79. package/dist/lib/build/plugins/update_file_map.js +1 -0
  80. package/dist/lib/build/plugins/warn_node_environment.js +3 -0
  81. package/dist/lib/cli_log.js +13 -0
  82. package/dist/lib/color_log.js +1 -0
  83. package/dist/lib/command_exists.js +1 -0
  84. package/dist/lib/constants.js +1 -4
  85. package/dist/lib/debounce.js +1 -0
  86. package/dist/lib/decrypt_buffer.js +1 -0
  87. package/dist/lib/development_server/ava_config.js +1 -0
  88. package/dist/lib/development_server/check_if_port_occupied.js +1 -0
  89. package/dist/lib/development_server/cleanup.js +1 -0
  90. package/dist/lib/development_server/databases/download_database_binary.js +1 -0
  91. package/dist/lib/development_server/databases/mongodb/available_query_parameters.js +1 -0
  92. package/dist/lib/development_server/databases/mongodb/build_connection_string.js +1 -0
  93. package/dist/lib/development_server/databases/mongodb/build_query_parameters.js +1 -0
  94. package/dist/lib/development_server/databases/mongodb/check_connection.js +2 -0
  95. package/dist/lib/development_server/databases/mongodb/connect.js +1 -0
  96. package/dist/lib/development_server/databases/mongodb/index.js +1 -0
  97. package/dist/lib/development_server/databases/mongodb/installers/linux.js +1 -0
  98. package/dist/lib/development_server/databases/mongodb/installers/macos.js +1 -0
  99. package/dist/lib/development_server/databases/mongodb/installers/windows.js +1 -0
  100. package/dist/lib/development_server/databases/postgresql/check_connection.js +2 -0
  101. package/dist/lib/development_server/databases/postgresql/connect.js +1 -0
  102. package/dist/lib/development_server/databases/postgresql/index.js +2 -0
  103. package/dist/lib/development_server/databases/postgresql/installers/linux.js +1 -0
  104. package/dist/lib/development_server/databases/postgresql/installers/macos.js +1 -0
  105. package/dist/lib/development_server/databases/postgresql/installers/windows.js +1 -0
  106. package/dist/lib/development_server/databases/provider_map.js +1 -0
  107. package/dist/lib/development_server/get_database_process_ids.js +1 -0
  108. package/dist/lib/development_server/get_translations.js +1 -0
  109. package/dist/lib/development_server/hmr_server.js +1 -0
  110. package/dist/lib/development_server/index.js +10 -0
  111. package/dist/lib/development_server/kill_process_ids.js +1 -0
  112. package/dist/lib/development_server/run_tests.js +2 -0
  113. package/dist/lib/development_server/start_app_server.js +1 -0
  114. package/dist/lib/development_server/start_databases.js +1 -0
  115. package/dist/lib/development_server/start_hmr_server.js +1 -0
  116. package/dist/lib/development_server/watch_for_changes/browser_path_exclusions.js +1 -0
  117. package/dist/lib/development_server/watch_for_changes/browser_paths.js +1 -0
  118. package/dist/lib/development_server/watch_for_changes/get_after_run_tasks.js +1 -0
  119. package/dist/lib/development_server/watch_for_changes/get_file_codependencies.js +1 -0
  120. package/dist/lib/development_server/watch_for_changes/get_platform_safe_path.js +1 -0
  121. package/dist/lib/development_server/watch_for_changes/index.js +1 -0
  122. package/dist/lib/development_server/watch_for_changes/node_paths.js +1 -0
  123. package/dist/lib/development_server/watch_for_changes/read_file_dependency_map.js +1 -0
  124. package/dist/lib/development_server/watch_for_changes/watch_paths.js +1 -0
  125. package/dist/lib/dynamic_import.js +1 -0
  126. package/dist/lib/encrypt_buffer.js +1 -0
  127. package/dist/lib/generate_id.js +1 -0
  128. package/dist/lib/get_files_in_path.js +1 -0
  129. package/dist/lib/get_platform_safe_path.js +1 -0
  130. package/dist/lib/get_process_id_from_port.js +2 -0
  131. package/dist/lib/is_valid_json_string.js +1 -0
  132. package/dist/lib/kill_port_process.js +1 -0
  133. package/dist/lib/kill_process_id.js +1 -0
  134. package/dist/lib/load_settings.js +1 -0
  135. package/dist/lib/loader.js +2 -82
  136. package/dist/lib/log_bars.js +1 -0
  137. package/dist/lib/node_path_polyfills.js +1 -0
  138. package/dist/lib/parse_args.js +1 -0
  139. package/dist/lib/parse_options.js +1 -0
  140. package/dist/lib/path_exists.js +1 -0
  141. package/dist/lib/rainbow_road.js +1 -0
  142. package/dist/lib/replace_in_files.js +1 -0
  143. package/dist/lib/required_files.js +1 -0
  144. package/dist/lib/serialize_query_parameters.js +1 -0
  145. package/dist/lib/types.js +1 -6
  146. package/dist/lib/unique_array.js +1 -0
  147. package/increment_version.js +3 -0
  148. package/package.json +19 -38
  149. package/src/cli.js +59 -51
  150. package/src/commands/build/definition.js +58 -0
  151. package/src/commands/build/index.js +7 -0
  152. package/src/commands/create/build_package_json.js +20 -0
  153. package/src/commands/create/definition.js +35 -0
  154. package/src/commands/create/index.js +71 -0
  155. package/src/commands/create/template/api/index.js +6 -0
  156. package/src/commands/create/template/email/base.css +9 -0
  157. package/src/commands/create/template/email/base.html +10 -0
  158. package/src/commands/create/template/email/reset_password.js +20 -0
  159. package/src/commands/create/template/i18n/en-US.js +14 -0
  160. package/src/commands/create/template/index.client.js +1 -0
  161. package/src/commands/create/template/index.css +34 -0
  162. package/src/{functions/create/templates → commands/create/template}/index.html +2 -3
  163. package/src/{functions/create/templates → commands/create/template}/index.server.js +6 -6
  164. package/src/commands/create/template/public/apple-touch-icon-152x152.png +0 -0
  165. package/src/commands/create/template/public/favicon.ico +0 -0
  166. package/src/commands/create/template/public/joystick_logo.webp +0 -0
  167. package/src/{functions/create/templates → commands/create/template}/public/manifest.json +4 -4
  168. package/src/commands/create/template/public/splash-screen-1024x1024.png +0 -0
  169. package/{dist/functions/create/templates → src/commands/create/template}/ui/components/button/index.js +14 -6
  170. package/{dist/functions/create/templates → src/commands/create/template}/ui/layouts/app/index.js +2 -2
  171. package/src/commands/create/template/ui/pages/error/index.js +50 -0
  172. package/src/commands/create/template/ui/pages/index/index.js +121 -0
  173. package/src/commands/help/definition.js +12 -0
  174. package/src/commands/help/index.js +48 -0
  175. package/src/commands/index.js +23 -0
  176. package/src/commands/logout/definition.js +10 -0
  177. package/src/commands/logout/index.js +20 -0
  178. package/src/commands/push/cdn_mirrors.js +7 -0
  179. package/src/commands/push/check_if_settings_valid.js +10 -0
  180. package/src/commands/push/create_version.js +20 -0
  181. package/src/commands/push/definition.js +43 -0
  182. package/src/commands/push/get_app_domain.js +11 -0
  183. package/src/commands/push/get_deployment.js +19 -0
  184. package/src/commands/push/get_provision_domain.js +9 -0
  185. package/src/commands/push/get_session_token.js +31 -0
  186. package/src/commands/push/get_settings_file.js +47 -0
  187. package/src/commands/push/handle_initial_deployment.js +24 -0
  188. package/src/commands/push/handle_version_deployment.js +23 -0
  189. package/src/commands/push/index.js +190 -0
  190. package/src/commands/push/prompts/confirm_deployment.js +73 -0
  191. package/src/commands/push/prompts/session_token.js +11 -0
  192. package/src/commands/push/upload_build_to_cdn.js +59 -0
  193. package/src/commands/push/validate_deployment.js +19 -0
  194. package/src/commands/push/validate_push_config.js +18 -0
  195. package/src/commands/start/definition.js +58 -0
  196. package/src/commands/start/index.js +11 -0
  197. package/src/commands/test/definition.js +28 -0
  198. package/src/commands/test/index.js +12 -0
  199. package/src/commands/update/definition.js +28 -0
  200. package/src/commands/update/index.js +29 -0
  201. package/src/commands/use/definition.js +19 -0
  202. package/src/commands/use/index.js +54 -0
  203. package/src/index.js +0 -0
  204. package/src/lib/build/browser_path_exclusions.js +8 -0
  205. package/src/lib/build/browser_paths.js +11 -0
  206. package/src/lib/build/build_files.js +163 -0
  207. package/src/{functions/start/filesToCopy.js → lib/build/copy_paths.js} +7 -5
  208. package/src/lib/build/get_code_frame.js +11 -0
  209. package/src/lib/build/get_file_operation.js +25 -0
  210. package/src/lib/build/get_files_to_build.js +41 -0
  211. package/src/lib/build/get_path_platform.js +32 -0
  212. package/src/lib/build/get_platform_safe_path.js +6 -0
  213. package/src/lib/build/get_tar_ignore_list.js +41 -0
  214. package/src/lib/build/index.js +137 -0
  215. package/src/lib/build/master_ignore_list.js +14 -0
  216. package/src/lib/build/minify_file.js +15 -0
  217. package/src/lib/build/node_paths.js +19 -0
  218. package/src/lib/build/on_warn.js +70 -0
  219. package/src/lib/build/plugins/bootstrap_component.js +191 -0
  220. package/src/lib/build/plugins/generate_file_dependency_map.js +20 -0
  221. package/src/lib/build/plugins/index.js +26 -0
  222. package/src/lib/build/plugins/set_component_id.js +89 -0
  223. package/src/lib/build/plugins/update_file_map.js +98 -0
  224. package/src/lib/build/plugins/warn_node_environment.js +20 -0
  225. package/src/lib/{CLILog.js → cli_log.js} +12 -8
  226. package/src/lib/color_log.js +7 -0
  227. package/src/lib/command_exists.js +16 -0
  228. package/src/lib/constants.js +11 -1
  229. package/src/lib/debounce.js +9 -0
  230. package/src/lib/decrypt_buffer.js +12 -0
  231. package/src/lib/development_server/ava_config.js +14 -0
  232. package/src/lib/development_server/check_if_port_occupied.js +31 -0
  233. package/src/lib/development_server/cleanup.js +15 -0
  234. package/src/lib/development_server/databases/download_database_binary.js +35 -0
  235. package/src/lib/{dev/databases/mongodb/availableQueryParameters.js → development_server/databases/mongodb/available_query_parameters.js} +3 -1
  236. package/src/lib/development_server/databases/mongodb/build_connection_string.js +36 -0
  237. package/src/lib/development_server/databases/mongodb/build_query_parameters.js +17 -0
  238. package/src/lib/development_server/databases/mongodb/check_connection.js +41 -0
  239. package/src/lib/development_server/databases/mongodb/connect.js +27 -0
  240. package/src/lib/development_server/databases/mongodb/index.js +102 -0
  241. package/src/lib/development_server/databases/mongodb/installers/linux.js +107 -0
  242. package/src/lib/development_server/databases/mongodb/installers/macos.js +109 -0
  243. package/src/lib/development_server/databases/mongodb/installers/windows.js +90 -0
  244. package/src/lib/development_server/databases/postgresql/check_connection.js +56 -0
  245. package/src/lib/development_server/databases/postgresql/connect.js +33 -0
  246. package/src/lib/development_server/databases/postgresql/index.js +157 -0
  247. package/src/lib/development_server/databases/postgresql/installers/linux.js +80 -0
  248. package/src/lib/development_server/databases/postgresql/installers/macos.js +91 -0
  249. package/src/lib/development_server/databases/postgresql/installers/windows.js +83 -0
  250. package/src/lib/development_server/databases/provider_map.js +15 -0
  251. package/src/lib/development_server/get_database_process_ids.js +28 -0
  252. package/src/lib/development_server/get_translations.js +85 -0
  253. package/src/lib/development_server/hmr_server.js +94 -0
  254. package/src/lib/development_server/index.js +436 -0
  255. package/src/lib/development_server/kill_process_ids.js +8 -0
  256. package/src/lib/development_server/run_tests.js +84 -0
  257. package/src/lib/development_server/start_app_server.js +55 -0
  258. package/src/lib/development_server/start_databases.js +108 -0
  259. package/src/lib/development_server/start_hmr_server.js +36 -0
  260. package/src/lib/development_server/watch_for_changes/browser_path_exclusions.js +8 -0
  261. package/src/lib/development_server/watch_for_changes/browser_paths.js +11 -0
  262. package/src/lib/development_server/watch_for_changes/get_after_run_tasks.js +36 -0
  263. package/src/lib/development_server/watch_for_changes/get_file_codependencies.js +53 -0
  264. package/src/lib/development_server/watch_for_changes/get_platform_safe_path.js +6 -0
  265. package/src/lib/development_server/watch_for_changes/index.js +222 -0
  266. package/src/lib/development_server/watch_for_changes/node_paths.js +17 -0
  267. package/src/lib/development_server/watch_for_changes/read_file_dependency_map.js +18 -0
  268. package/src/lib/development_server/watch_for_changes/watch_paths.js +22 -0
  269. package/src/lib/dynamic_import.js +6 -0
  270. package/src/lib/encrypt_buffer.js +10 -0
  271. package/src/lib/generate_id.js +15 -0
  272. package/src/lib/get_files_in_path.js +25 -0
  273. package/src/lib/get_platform_safe_path.js +8 -0
  274. package/src/lib/get_process_id_from_port.js +26 -0
  275. package/src/lib/is_valid_json_string.js +10 -0
  276. package/src/lib/kill_port_process.js +12 -0
  277. package/src/lib/kill_process_id.js +19 -0
  278. package/src/lib/load_settings.js +43 -0
  279. package/src/lib/loader.js +4 -77
  280. package/src/lib/log_bars.js +7 -0
  281. package/src/lib/node_path_polyfills.js +23 -0
  282. package/src/lib/parse_args.js +16 -0
  283. package/src/lib/parse_options.js +16 -0
  284. package/src/lib/path_exists.js +11 -0
  285. package/src/lib/{rainbowRoad.js → rainbow_road.js} +4 -2
  286. package/src/lib/replace_in_files.js +40 -0
  287. package/src/lib/{dev/requiredFiles.js → required_files.js} +3 -1
  288. package/src/lib/serialize_query_parameters.js +7 -0
  289. package/src/lib/types.js +59 -2
  290. package/src/lib/unique_array.js +24 -0
  291. package/HMRNOTES.txt +0 -23
  292. package/_package.json +0 -56
  293. package/canary.js +0 -12
  294. package/dist/functions/build/getTarIgnoreList.js +0 -25
  295. package/dist/functions/build/index.js +0 -54
  296. package/dist/functions/create/buildPackageJSON.js +0 -20
  297. package/dist/functions/create/index.js +0 -193
  298. package/dist/functions/create/templates/api/index.js +0 -4
  299. package/dist/functions/create/templates/i18n/en-US.js +0 -4
  300. package/dist/functions/create/templates/index.client.js +0 -7
  301. package/dist/functions/create/templates/index.css +0 -20
  302. package/dist/functions/create/templates/public/apple-touch-icon-152x152.png +0 -0
  303. package/dist/functions/create/templates/public/favicon.ico +0 -0
  304. package/dist/functions/create/templates/public/splash-screen-1024x1024.png +0 -0
  305. package/dist/functions/create/templates/ui/pages/error/index.js +0 -31
  306. package/dist/functions/create/templates/ui/pages/index/index.js +0 -94
  307. package/dist/functions/index.js +0 -269
  308. package/dist/functions/logout/index.js +0 -20
  309. package/dist/functions/push/checkIfProvisionAvailable.js +0 -19
  310. package/dist/functions/push/deploy/index.js +0 -173
  311. package/dist/functions/push/deploy/initial.js +0 -100
  312. package/dist/functions/push/deploy/version.js +0 -100
  313. package/dist/functions/push/domains.js +0 -23
  314. package/dist/functions/push/getAvailableCDN.js +0 -23
  315. package/dist/functions/push/getDeployment.js +0 -41
  316. package/dist/functions/push/getDeploymentSummary.js +0 -38
  317. package/dist/functions/push/getInstanceSizeRegions.js +0 -37
  318. package/dist/functions/push/getInstanceSizesForRegion.js +0 -34
  319. package/dist/functions/push/getProviderInstanceSizes.js +0 -34
  320. package/dist/functions/push/getProviderRegions.js +0 -36
  321. package/dist/functions/push/getProvidersWithConnectionStatus.js +0 -20
  322. package/dist/functions/push/getSessionToken.js +0 -23
  323. package/dist/functions/push/getUserFromSessionToken.js +0 -37
  324. package/dist/functions/push/index.js +0 -210
  325. package/dist/functions/push/loginToCheatCode.js +0 -33
  326. package/dist/functions/push/pingProvisionAPI.js +0 -31
  327. package/dist/functions/push/prompts.js +0 -332
  328. package/dist/functions/push/providerMap.js +0 -11
  329. package/dist/functions/push/providers.js +0 -9
  330. package/dist/functions/reset/index.js +0 -0
  331. package/dist/functions/reset/reset.js +0 -127
  332. package/dist/functions/start/bootstrapLayoutComponent.js +0 -54
  333. package/dist/functions/start/bootstrapPageComponent.js +0 -51
  334. package/dist/functions/start/buildFile.js +0 -85
  335. package/dist/functions/start/buildFiles.js +0 -76
  336. package/dist/functions/start/buildPlugins.js +0 -183
  337. package/dist/functions/start/checkIfPortAvailable.js +0 -18
  338. package/dist/functions/start/cleanup/index.js +0 -18
  339. package/dist/functions/start/databases/mongodb/availableQueryParameters.js +0 -42
  340. package/dist/functions/start/databases/mongodb/buildConnectionString.js +0 -22
  341. package/dist/functions/start/databases/mongodb/buildQueryParameters.js +0 -14
  342. package/dist/functions/start/databases/mongodb/checkConnection.js +0 -35
  343. package/dist/functions/start/databases/mongodb/connect.js +0 -25
  344. package/dist/functions/start/databases/mongodb/index.js +0 -93
  345. package/dist/functions/start/databases/postgresql/checkConnection.js +0 -41
  346. package/dist/functions/start/databases/postgresql/connect.js +0 -27
  347. package/dist/functions/start/databases/postgresql/index.js +0 -106
  348. package/dist/functions/start/databases/redis.js +0 -0
  349. package/dist/functions/start/databases/startProvider.js +0 -16
  350. package/dist/functions/start/fileDependencyMapper.js +0 -22
  351. package/dist/functions/start/filesToCopy.js +0 -18
  352. package/dist/functions/start/generateId.js +0 -74
  353. package/dist/functions/start/getCodependenciesForFile.js +0 -64
  354. package/dist/functions/start/getFilesToBuild.js +0 -39
  355. package/dist/functions/start/getProcessIdFromPort.js +0 -60
  356. package/dist/functions/start/hmrServer.js +0 -66
  357. package/dist/functions/start/index.js +0 -11
  358. package/dist/functions/start/isWindows.js +0 -5
  359. package/dist/functions/start/minifyFile.js +0 -12
  360. package/dist/functions/start/onWarn.js +0 -63
  361. package/dist/functions/start/readFileDependencyMap.js +0 -16
  362. package/dist/functions/start/removeDeletedDependenciesFromMap.js +0 -18
  363. package/dist/functions/start/setComponentId.js +0 -46
  364. package/dist/functions/start/updateFileMap.js +0 -67
  365. package/dist/functions/test/index.js +0 -12
  366. package/dist/functions/update/index.js +0 -21
  367. package/dist/functions/use/index.js +0 -61
  368. package/dist/lib/CLILog.js +0 -49
  369. package/dist/lib/build/browserPathExclusions.js +0 -8
  370. package/dist/lib/build/browserPaths.js +0 -11
  371. package/dist/lib/build/buildFile.js +0 -84
  372. package/dist/lib/build/buildFiles.js +0 -240
  373. package/dist/lib/build/buildPlugins.js +0 -186
  374. package/dist/lib/build/getCodeFrame.js +0 -9
  375. package/dist/lib/build/minifyFile.js +0 -12
  376. package/dist/lib/build/nodePathExclusions.js +0 -7
  377. package/dist/lib/build/nodePaths.js +0 -12
  378. package/dist/lib/build/onWarn.js +0 -63
  379. package/dist/lib/build/removeDeletedDependenciesFromMap.js +0 -18
  380. package/dist/lib/build/setComponentId.js +0 -46
  381. package/dist/lib/build/updateFileMap.js +0 -67
  382. package/dist/lib/buildResolvePlugin.js +0 -21
  383. package/dist/lib/checkIfValidJSON.js +0 -11
  384. package/dist/lib/colorLog.js +0 -7
  385. package/dist/lib/dev/cleanup.js +0 -18
  386. package/dist/lib/dev/databases/mongodb/availableQueryParameters.js +0 -42
  387. package/dist/lib/dev/databases/mongodb/buildConnectionString.js +0 -22
  388. package/dist/lib/dev/databases/mongodb/buildQueryParameters.js +0 -14
  389. package/dist/lib/dev/databases/mongodb/checkConnection.js +0 -38
  390. package/dist/lib/dev/databases/mongodb/connect.js +0 -25
  391. package/dist/lib/dev/databases/mongodb/index.js +0 -93
  392. package/dist/lib/dev/databases/postgresql/checkConnection.js +0 -41
  393. package/dist/lib/dev/databases/postgresql/connect.js +0 -27
  394. package/dist/lib/dev/databases/postgresql/index.js +0 -106
  395. package/dist/lib/dev/databases/providerMap.js +0 -15
  396. package/dist/lib/dev/getCodependenciesForFile.js +0 -64
  397. package/dist/lib/dev/getFilesToBuild.js +0 -38
  398. package/dist/lib/dev/hmrServer.js +0 -66
  399. package/dist/lib/dev/index.js +0 -559
  400. package/dist/lib/dev/isWindows.js +0 -5
  401. package/dist/lib/dev/loadSettings.js +0 -79
  402. package/dist/lib/dev/readFileDependencyMap.js +0 -16
  403. package/dist/lib/dev/requiredFiles.js +0 -18
  404. package/dist/lib/dev/runBuild.js +0 -30
  405. package/dist/lib/dev/runTests.js +0 -96
  406. package/dist/lib/dev/startApp.js +0 -70
  407. package/dist/lib/dev/startDatabases.js +0 -109
  408. package/dist/lib/dev/startHMR.js +0 -55
  409. package/dist/lib/dev/tests.config.js +0 -6
  410. package/dist/lib/dev/updateFileMap.js +0 -67
  411. package/dist/lib/dev/validateProject.js +0 -0
  412. package/dist/lib/dev/watchlist.js +0 -15
  413. package/dist/lib/filesToCopy.js +0 -18
  414. package/dist/lib/generateId.js +0 -74
  415. package/dist/lib/getArgs.js +0 -14
  416. package/dist/lib/getOptions.js +0 -15
  417. package/dist/lib/getPlatformSafePath.js +0 -7
  418. package/dist/lib/getProcessIdFromPort.js +0 -60
  419. package/dist/lib/getProvider.js +0 -8
  420. package/dist/lib/help.js +0 -56
  421. package/dist/lib/isObject.js +0 -6
  422. package/dist/lib/isValidJSONString.js +0 -11
  423. package/dist/lib/isWindows.js +0 -5
  424. package/dist/lib/killProcesses.js +0 -0
  425. package/dist/lib/loadSettings.js +0 -33
  426. package/dist/lib/masterIgnoreList.js +0 -16
  427. package/dist/lib/nodeEnvironment.js +0 -9
  428. package/dist/lib/nodeEnvironments.js +0 -8
  429. package/dist/lib/parseCookiesFromLogin.js +0 -18
  430. package/dist/lib/rainbowRoad.js +0 -7
  431. package/dist/lib/readDirectorySync.js +0 -14
  432. package/dist/lib/regexes.js +0 -14
  433. package/dist/lib/replaceBackslashesWithForwardSlashes.js +0 -8
  434. package/dist/lib/replaceFileProtocol.js +0 -8
  435. package/dist/lib/serializeQueryParameters.js +0 -8
  436. package/dist/lib/settings.js +0 -4
  437. package/dist/lib/validateDatabasesFromSettings.js +0 -34
  438. package/dist/lib/wait.js +0 -8
  439. package/release.js +0 -40
  440. package/src/functions/build/getTarIgnoreList.js +0 -30
  441. package/src/functions/build/index.js +0 -63
  442. package/src/functions/create/buildPackageJSON.js +0 -18
  443. package/src/functions/create/index.js +0 -209
  444. package/src/functions/create/templates/api/index.js +0 -4
  445. package/src/functions/create/templates/i18n/en-US.js +0 -4
  446. package/src/functions/create/templates/index.client.js +0 -7
  447. package/src/functions/create/templates/index.css +0 -20
  448. package/src/functions/create/templates/public/apple-touch-icon-152x152.png +0 -0
  449. package/src/functions/create/templates/public/favicon.ico +0 -0
  450. package/src/functions/create/templates/public/splash-screen-1024x1024.png +0 -0
  451. package/src/functions/create/templates/ui/pages/error/index.js +0 -31
  452. package/src/functions/create/templates/ui/pages/index/index.js +0 -94
  453. package/src/functions/index.js +0 -269
  454. package/src/functions/logout/index.js +0 -20
  455. package/src/functions/push/checkIfProvisionAvailable.js +0 -20
  456. package/src/functions/push/deploy/index.js +0 -199
  457. package/src/functions/push/deploy/initial.js +0 -108
  458. package/src/functions/push/deploy/version.js +0 -108
  459. package/src/functions/push/domains.js +0 -23
  460. package/src/functions/push/getAvailableCDN.js +0 -27
  461. package/src/functions/push/getDeployment.js +0 -43
  462. package/src/functions/push/getDeploymentSummary.js +0 -39
  463. package/src/functions/push/getInstanceSizeRegions.js +0 -40
  464. package/src/functions/push/getInstanceSizesForRegion.js +0 -35
  465. package/src/functions/push/getProviderInstanceSizes.js +0 -35
  466. package/src/functions/push/getProviderRegions.js +0 -39
  467. package/src/functions/push/getProvidersWithConnectionStatus.js +0 -25
  468. package/src/functions/push/getSessionToken.js +0 -26
  469. package/src/functions/push/getUserFromSessionToken.js +0 -39
  470. package/src/functions/push/index.js +0 -245
  471. package/src/functions/push/loginToCheatCode.js +0 -34
  472. package/src/functions/push/pingProvisionAPI.js +0 -33
  473. package/src/functions/push/prompts.js +0 -276
  474. package/src/functions/push/providerMap.js +0 -8
  475. package/src/functions/push/providers.js +0 -6
  476. package/src/functions/reset/index.js +0 -0
  477. package/src/functions/reset/reset.js +0 -163
  478. package/src/functions/start/bootstrapLayoutComponent.js +0 -57
  479. package/src/functions/start/bootstrapPageComponent.js +0 -54
  480. package/src/functions/start/buildFile.js +0 -97
  481. package/src/functions/start/buildFiles.js +0 -101
  482. package/src/functions/start/buildPlugins.js +0 -215
  483. package/src/functions/start/checkIfPortAvailable.js +0 -21
  484. package/src/functions/start/cleanup/index.js +0 -23
  485. package/src/functions/start/databases/mongodb/availableQueryParameters.js +0 -39
  486. package/src/functions/start/databases/mongodb/buildConnectionString.js +0 -28
  487. package/src/functions/start/databases/mongodb/buildQueryParameters.js +0 -15
  488. package/src/functions/start/databases/mongodb/checkConnection.js +0 -36
  489. package/src/functions/start/databases/mongodb/connect.js +0 -25
  490. package/src/functions/start/databases/mongodb/index.js +0 -108
  491. package/src/functions/start/databases/postgresql/checkConnection.js +0 -43
  492. package/src/functions/start/databases/postgresql/connect.js +0 -27
  493. package/src/functions/start/databases/postgresql/index.js +0 -127
  494. package/src/functions/start/databases/redis.js +0 -0
  495. package/src/functions/start/databases/startProvider.js +0 -15
  496. package/src/functions/start/fileDependencyMapper.js +0 -24
  497. package/src/functions/start/generateId.js +0 -73
  498. package/src/functions/start/getCodependenciesForFile.js +0 -84
  499. package/src/functions/start/getFilesToBuild.js +0 -49
  500. package/src/functions/start/getProcessIdFromPort.js +0 -92
  501. package/src/functions/start/hmrServer.js +0 -78
  502. package/src/functions/start/index.js +0 -9
  503. package/src/functions/start/isWindows.js +0 -3
  504. package/src/functions/start/minifyFile.js +0 -10
  505. package/src/functions/start/onWarn.js +0 -68
  506. package/src/functions/start/readFileDependencyMap.js +0 -19
  507. package/src/functions/start/removeDeletedDependenciesFromMap.js +0 -19
  508. package/src/functions/start/setComponentId.js +0 -58
  509. package/src/functions/start/updateFileMap.js +0 -100
  510. package/src/functions/test/index.js +0 -10
  511. package/src/functions/update/index.js +0 -20
  512. package/src/functions/use/index.js +0 -62
  513. package/src/lib/build/browserPathExclusions.js +0 -6
  514. package/src/lib/build/browserPaths.js +0 -9
  515. package/src/lib/build/buildFile.js +0 -91
  516. package/src/lib/build/buildFiles.js +0 -273
  517. package/src/lib/build/buildPlugins.js +0 -222
  518. package/src/lib/build/getCodeFrame.js +0 -7
  519. package/src/lib/build/minifyFile.js +0 -10
  520. package/src/lib/build/nodePathExclusions.js +0 -5
  521. package/src/lib/build/nodePaths.js +0 -10
  522. package/src/lib/build/onWarn.js +0 -68
  523. package/src/lib/build/removeDeletedDependenciesFromMap.js +0 -19
  524. package/src/lib/build/setComponentId.js +0 -58
  525. package/src/lib/build/updateFileMap.js +0 -100
  526. package/src/lib/buildResolvePlugin.js +0 -32
  527. package/src/lib/checkIfValidJSON.js +0 -8
  528. package/src/lib/colorLog.js +0 -5
  529. package/src/lib/dev/cleanup.js +0 -26
  530. package/src/lib/dev/databases/mongodb/buildConnectionString.js +0 -28
  531. package/src/lib/dev/databases/mongodb/buildQueryParameters.js +0 -15
  532. package/src/lib/dev/databases/mongodb/checkConnection.js +0 -40
  533. package/src/lib/dev/databases/mongodb/connect.js +0 -25
  534. package/src/lib/dev/databases/mongodb/index.js +0 -108
  535. package/src/lib/dev/databases/postgresql/checkConnection.js +0 -43
  536. package/src/lib/dev/databases/postgresql/connect.js +0 -27
  537. package/src/lib/dev/databases/postgresql/index.js +0 -127
  538. package/src/lib/dev/databases/providerMap.js +0 -13
  539. package/src/lib/dev/getCodependenciesForFile.js +0 -84
  540. package/src/lib/dev/getFilesToBuild.js +0 -47
  541. package/src/lib/dev/hmrServer.js +0 -78
  542. package/src/lib/dev/index.js +0 -684
  543. package/src/lib/dev/isWindows.js +0 -3
  544. package/src/lib/dev/loadSettings.js +0 -90
  545. package/src/lib/dev/readFileDependencyMap.js +0 -19
  546. package/src/lib/dev/runBuild.js +0 -33
  547. package/src/lib/dev/runTests.js +0 -122
  548. package/src/lib/dev/startApp.js +0 -79
  549. package/src/lib/dev/startDatabases.js +0 -131
  550. package/src/lib/dev/startHMR.js +0 -62
  551. package/src/lib/dev/tests.config.js +0 -3
  552. package/src/lib/dev/updateFileMap.js +0 -100
  553. package/src/lib/dev/validateProject.js +0 -0
  554. package/src/lib/dev/watchlist.js +0 -13
  555. package/src/lib/filesToCopy.js +0 -15
  556. package/src/lib/generateId.js +0 -73
  557. package/src/lib/getArgs.js +0 -14
  558. package/src/lib/getOptions.js +0 -12
  559. package/src/lib/getProcessIdFromPort.js +0 -92
  560. package/src/lib/getProvider.js +0 -5
  561. package/src/lib/help.js +0 -56
  562. package/src/lib/isObject.js +0 -3
  563. package/src/lib/isValidJSONString.js +0 -8
  564. package/src/lib/killProcesses.js +0 -5
  565. package/src/lib/loadSettings.js +0 -40
  566. package/src/lib/masterIgnoreList.js +0 -13
  567. package/src/lib/nodeEnvironment.js +0 -6
  568. package/src/lib/nodeEnvironments.js +0 -8
  569. package/src/lib/parseCookiesFromLogin.js +0 -21
  570. package/src/lib/readDirectorySync.js +0 -13
  571. package/src/lib/regexes.js +0 -7
  572. package/src/lib/replaceBackslashesWithForwardSlashes.js +0 -8
  573. package/src/lib/replaceFileProtocol.js +0 -8
  574. package/src/lib/serializeQueryParameters.js +0 -5
  575. package/src/lib/settings.js +0 -1
  576. package/src/lib/validateDatabasesFromSettings.js +0 -37
  577. package/src/lib/wait.js +0 -5
  578. package/storage/.verdaccio-db.json +0 -1
  579. /package/{src/lib → .build}/getPlatformSafePath.js +0 -0
  580. /package/{src/lib → .build}/isWindows.js +0 -0
  581. /package/dist/{functions/create/templates → commands/create/template}/public/service-worker.js +0 -0
  582. /package/dist/{functions/create/templates → commands/create/template}/settings.development.json +0 -0
  583. /package/src/{functions/create/templates → commands/create/template}/public/service-worker.js +0 -0
  584. /package/src/{functions/create/templates → commands/create/template}/settings.development.json +0 -0
@@ -0,0 +1,94 @@
1
+ import queryString from 'query-string';
2
+ import { WebSocketServer } from "ws";
3
+ import generate_id from "../generate_id.js";
4
+ import get_translations from './get_translations.js';
5
+
6
+ process.title = 'joystick_hmr';
7
+
8
+ export default (() => {
9
+ const websocket_server = new WebSocketServer({
10
+ port: parseInt(process.env.PORT, 10) + 1,
11
+ path: "/_joystick/hmr",
12
+ });
13
+
14
+ process.on("message", async (message) => {
15
+ const parsed_message = JSON.parse(message);
16
+
17
+ if (typeof process.HMR_CONNECTIONS === "object" && !!parsed_message?.type) {
18
+ const connections = Object.values(process.HMR_CONNECTIONS);
19
+
20
+ for (let i = 0; i < connections?.length; i += 1) {
21
+ const connection = connections[i];
22
+
23
+ if (connection?.connection?.send) {
24
+ if (parsed_message?.type === 'BUILD_ERROR') {
25
+ connection.connection.send(JSON.stringify({ type: 'BUILD_ERROR' }));
26
+ }
27
+
28
+ if (parsed_message?.type === 'FILE_CHANGE') {
29
+ connection.connection.send(
30
+ JSON.stringify({
31
+ type: "FILE_CHANGE",
32
+ settings: parsed_message?.settings ? {
33
+ global: parsed_message?.settings?.global,
34
+ public: parsed_message?.settings?.public,
35
+ } : null,
36
+ i18n: parsed_message?.i18n_change ? await get_translations('.joystick/build', connection?.page_component_path, {
37
+ headers: {
38
+ 'accept-language': connection?.browser_language,
39
+ },
40
+ context: {
41
+ user: {
42
+ language: connection?.user_language,
43
+ },
44
+ }
45
+ }) : null,
46
+ index_html_changed: parsed_message?.index_html_change,
47
+ index_css_changed: parsed_message?.index_css_change,
48
+ index_client_changed: parsed_message?.index_client_change,
49
+ })
50
+ );
51
+ }
52
+ }
53
+ }
54
+ }
55
+ });
56
+
57
+ websocket_server.on("connection", function connection(websocket_connection, connection_request = {}) {
58
+ const connection_id = generate_id(16);
59
+ const [_path, params] = connection_request?.url?.split("?");
60
+ const connection_params = queryString.parse(params);
61
+
62
+ process.HMR_CONNECTIONS = {
63
+ ...(process.HMR_CONNECTIONS || {}),
64
+ [connection_id]: {
65
+ connection: websocket_connection,
66
+ browser_language: connection_params?.browser_language,
67
+ user_language: connection_params?.user_language,
68
+ page_component_path: connection_params?.page_component_path,
69
+ },
70
+ };
71
+
72
+ if (Object.keys(process.HMR_CONNECTIONS || {})?.length > 0) {
73
+ process.send({ type: "HAS_HMR_CONNECTIONS" });
74
+ }
75
+
76
+ websocket_connection.on("message", (message) => {
77
+ const parsed_message = JSON.parse(message);
78
+
79
+ if (parsed_message?.type === "HMR_UPDATE_COMPLETE") {
80
+ process.send({ type: "HMR_UPDATE_COMPLETE" });
81
+ }
82
+ });
83
+
84
+ websocket_connection.on("close", () => {
85
+ if (process.HMR_CONNECTIONS[connection_id]) {
86
+ delete process.HMR_CONNECTIONS[connection_id];
87
+
88
+ if (Object.keys(process.HMR_CONNECTIONS || {})?.length === 0) {
89
+ process.send({ type: "HAS_NO_HMR_CONNECTIONS" });
90
+ }
91
+ }
92
+ });
93
+ });
94
+ })();
@@ -0,0 +1,436 @@
1
+ import chalk from 'chalk';
2
+ import child_process from 'child_process';
3
+ import fs from 'fs';
4
+ import os from 'os';
5
+ import path, { dirname } from "path";
6
+ import { fileURLToPath } from "url";
7
+ import util from 'util';
8
+ import check_if_port_occupied from './check_if_port_occupied.js';
9
+ import cli_log from '../cli_log.js';
10
+ import get_database_process_ids from './get_database_process_ids.js';
11
+ import get_platform_safe_path from '../get_platform_safe_path.js';
12
+ import kill_port_process from '../kill_port_process.js';
13
+ import load_settings from '../load_settings.js';
14
+ import Loader from '../loader.js';
15
+ import path_exists from '../path_exists.js';
16
+ import required_files from '../required_files.js';
17
+ import start_app_server from './start_app_server.js';
18
+ import start_databases from './start_databases.js';
19
+ import start_hmr_server from './start_hmr_server.js';
20
+ import watch_for_changes from './watch_for_changes/index.js';
21
+ import constants from '../constants.js';
22
+ import kill_process_ids from './kill_process_ids.js';
23
+ import run_tests from './run_tests.js';
24
+ import debounce from '../debounce.js';
25
+ import download_database_binary from './databases/download_database_binary.js';
26
+
27
+ const { stat } = fs.promises;
28
+ const exec = util.promisify(child_process.exec);
29
+
30
+ const node_major_version = parseInt(
31
+ process?.version?.split(".")[0]?.replace("v", ""),
32
+ 10
33
+ );
34
+
35
+ const __filename = fileURLToPath(import.meta.url);
36
+ const __dirname = dirname(__filename);
37
+
38
+ const process_ids = [];
39
+
40
+ const handle_run_tests = async (watch = false) => {
41
+ const database_process_ids = get_database_process_ids();
42
+ await run_tests({
43
+ watch,
44
+ __dirname,
45
+ process_ids: [
46
+ ...process_ids,
47
+ ...database_process_ids,
48
+ ],
49
+ cleanup_process: process.cleanup_process,
50
+ });
51
+ };
52
+
53
+ const handle_signal_events = (process_ids = [], node_major_version = 0, __dirname = '') => {
54
+ const exec_argv = ["--no-warnings"];
55
+
56
+ if (node_major_version < 19) {
57
+ exec_argv.push("--experimental-specifier-resolution=node");
58
+ }
59
+
60
+ const cleanup_process = child_process.fork(
61
+ path.resolve(`${__dirname}/cleanup.js`),
62
+ [],
63
+ {
64
+ // NOTE: Run in detached mode so when parent process dies, the child still runs
65
+ // and cleanup completes. Keep silent as we don't wan't/expect any messages.
66
+ detached: true,
67
+ silent: true,
68
+ }
69
+ );
70
+
71
+ process.cleanup_process = cleanup_process;
72
+
73
+ process.on("SIGINT", async () => {
74
+ const database_process_ids = get_database_process_ids();
75
+ cleanup_process.send(JSON.stringify(({ process_ids: [...process_ids, ...database_process_ids] })));
76
+ process.exit();
77
+ });
78
+
79
+ process.on("SIGTERM", async () => {
80
+ const database_process_ids = get_database_process_ids();
81
+ cleanup_process.send(JSON.stringify(({ process_ids: [...process_ids, ...database_process_ids] })));
82
+ process.exit();
83
+ });
84
+ };
85
+
86
+ const handle_signal_hmr_update = async (jobs = []) => {
87
+ const has_settings_change = jobs?.find((job) => (job?.path?.match(constants.SETTINGS_FILE_NAME_REGEX))?.length > 0);
88
+ const has_i18n_change = jobs?.find((job) => job?.path?.includes('i18n'));
89
+ const has_index_html_change = jobs?.find((job) => job?.path?.includes('index.html'));
90
+ const has_index_css_change = jobs?.find((job) => {
91
+ return job?.path?.includes('index.css') || job?.path?.includes('css/');
92
+ });
93
+ const has_index_client_change = jobs?.find((job) => job?.path?.includes('index.client.js'));
94
+
95
+ process.hmr_server_process.send(JSON.stringify({
96
+ type: 'FILE_CHANGE',
97
+ settings: has_settings_change ? await load_settings(process.env.NODE_ENV) : null,
98
+ i18n_change: !!has_i18n_change,
99
+ index_html_change: !!has_index_html_change,
100
+ index_css_change: !!has_index_css_change,
101
+ index_client_change: !!has_index_client_change,
102
+ }));
103
+ };
104
+
105
+ const handle_hmr_server_process_messages = (node_major_version = 0, watch = false, old_settings = {}) => {
106
+ process.hmr_server_process.on("message", async (message) => {
107
+ const process_messages = [
108
+ "HAS_HMR_CONNECTIONS",
109
+ "HAS_NO_HMR_CONNECTIONS",
110
+ "HMR_UPDATE_COMPLETE",
111
+ ];
112
+
113
+ if (!process_messages.includes(message?.type)) {
114
+ process.loader.print(message);
115
+ }
116
+
117
+ if (message?.type === "HAS_HMR_CONNECTIONS") {
118
+ process.hmr_server_process.has_connections = true;
119
+ }
120
+
121
+ if (message?.type === "HAS_NO_HMR_CONNECTIONS") {
122
+ process.hmr_server_process.has_connections = false;
123
+ }
124
+
125
+ if (message?.type === "HMR_UPDATE_COMPLETE") {
126
+ if (process.app_server_process && !process.app_server_restarting) {
127
+ process.app_server_restarting = true;
128
+ handle_restart_app_server(node_major_version, watch, old_settings);
129
+ }
130
+ }
131
+ });
132
+ };
133
+
134
+ const handle_hmr_server_process_stdio = () => {
135
+ process.hmr_server_process.on("error", (error) => {
136
+ cli_log(error.toString(), {
137
+ level: "danger",
138
+ docs: "https://github.com/cheatcode/joystick",
139
+ });
140
+ });
141
+
142
+ process.hmr_server_process.stdout.on("data", (data) => {
143
+ console.log(data.toString());
144
+ });
145
+
146
+ process.hmr_server_process.stderr.on("data", (data) => {
147
+ cli_log(data.toString(), {
148
+ level: "danger",
149
+ docs: "https://github.com/cheatcode/joystick",
150
+ });
151
+ });
152
+ };
153
+
154
+ const handle_start_hmr_server = (node_major_version = 0, __dirname = '', watch = false, old_settings = {}) => {
155
+ process.hmr_server_process = start_hmr_server(node_major_version, __dirname);
156
+ process_ids.push(process.hmr_server_process?.pid);
157
+ handle_hmr_server_process_stdio();
158
+ handle_hmr_server_process_messages(node_major_version, watch, old_settings);
159
+ };
160
+
161
+ const check_if_database_changes = async (old_settings = {}) => {
162
+ const new_settings = await load_settings(process.env.NODE_ENV);
163
+ const new_databse_settings = new_settings?.config?.databases ? JSON.stringify(new_settings?.config?.databases) : '';
164
+ const old_database_settings = old_settings?.config?.databases ? JSON.stringify(old_settings?.config?.databases) : '';
165
+ return new_databse_settings !== old_database_settings;
166
+ };
167
+
168
+ const handle_restart_app_server = async (node_major_version = 0, watch = false, old_settings = null) => {
169
+ debounce(async () => {
170
+ const has_database_changes = await check_if_database_changes(old_settings);
171
+
172
+ if (has_database_changes) {
173
+ const database_process_ids = get_database_process_ids();
174
+
175
+ cli_log(`Database configuration has changed in settings.${process.env.NODE_ENV}.json. Please restart your app to add, change, or remove databases.`, {
176
+ level: "danger",
177
+ docs: "https://cheatcode.co/docs/joystick/structure",
178
+ });
179
+
180
+ kill_process_ids([
181
+ process.hmr_server_process?.pid,
182
+ process.app_server_process?.pid,
183
+ ...database_process_ids,
184
+ ]);
185
+
186
+ process.exit(0);
187
+ } else {
188
+ kill_process_ids([
189
+ ...(process.app_server_process.external_process_ids || []),
190
+ ]);
191
+
192
+ await kill_port_process(process.env.PORT);
193
+ handle_start_app_server(node_major_version, watch);
194
+ }
195
+ }, 300);
196
+ };
197
+
198
+ const handle_app_server_process_stdio = (watch = false) => {
199
+ // NOTE: Default this in case we never get any external process IDs.
200
+ process.app_server_process.external_process_ids = [];
201
+
202
+ process.app_server_process.on('message', (message_from_child) => {
203
+ if (message_from_child?.external_process_id) {
204
+ process.app_server_process.external_process_ids = [
205
+ ...(process.app_server_process.external_process_ids || []),
206
+ message_from_child?.external_process_id,
207
+ ];
208
+ }
209
+ });
210
+
211
+ process.app_server_process.on('error', (error) => {
212
+ cli_log(error.toString(), {
213
+ level: "danger",
214
+ docs: "https://github.com/cheatcode/joystick",
215
+ });
216
+ });
217
+
218
+ process.app_server_process.stdout.on("data", (data) => {
219
+ const stdout = data.toString();
220
+ const is_startup_notification = stdout.includes("App running at:");
221
+
222
+ if (stdout && is_startup_notification && process.env.NODE_ENV !== 'test') {
223
+ process.loader.print(stdout);
224
+ }
225
+
226
+ if (stdout && !is_startup_notification && !stdout.includes("BUILD_ERROR")) {
227
+ console.log(stdout);
228
+ }
229
+
230
+ // NOTE: Run tests here so we can guarantee app server is running. Do a slight delay
231
+ // to ensure that test routes are registered.
232
+ if (stdout && is_startup_notification && process.env.NODE_ENV === 'test') {
233
+ handle_run_tests(watch);
234
+ }
235
+ });
236
+
237
+ process.app_server_process.stderr.on("data", (data) => {
238
+ cli_log(data.toString(), {
239
+ level: "danger",
240
+ docs: "https://cheatcode.co/docs/joystick",
241
+ });
242
+ });
243
+ };
244
+
245
+ const handle_start_app_server = (node_major_version = 0, watch = false) => {
246
+ process.app_server_process = start_app_server(node_major_version, watch);
247
+ process_ids.push(process.app_server_process?.pid);
248
+ handle_app_server_process_stdio(watch);
249
+ process.app_server_restarting = false;
250
+ };
251
+
252
+ const install_missing_databases = async (settings = {}) => {
253
+ const required_databases = settings?.config?.databases?.map((database = {}) => {
254
+ return database?.provider;
255
+ });
256
+
257
+ for (let i = 0; i < required_databases?.length; i += 1) {
258
+ const provider_name = required_databases[i];
259
+ await download_database_binary(provider_name);
260
+ }
261
+ };
262
+
263
+ const set_process_variables = (development_server_options = {}, port = 2600) => {
264
+ process.title = development_server_options?.environment === 'test' ? "joystick_test" : 'joystick';
265
+ process.project_folder = path.basename(process.cwd());
266
+ process.loader = new Loader();
267
+
268
+ if (development_server_options?.environment === 'test') {
269
+ process.loader.print("Initializing test environment...");
270
+ }
271
+
272
+ process.env.LOGS_PATH = development_server_options?.logs || null;
273
+ process.env.NODE_ENV = development_server_options?.environment || "development";
274
+ process.env.PORT = port;
275
+ process.env.IS_DEBUG_MODE = development_server_options?.debug;
276
+ };
277
+
278
+ const warn_app_port_occupied = (port = 2600) => {
279
+ cli_log(`Port ${port} is already occupied. To start Joystick on this port, clear it and try again.`, {
280
+ level: 'danger',
281
+ });
282
+
283
+ process.exit(0);
284
+ };
285
+
286
+ const get_port = (port = 2600) => {
287
+ return parseInt(port || 2600, 10);
288
+ };
289
+
290
+ const clean_up_existing_build = async () => {
291
+ const build_path = get_platform_safe_path(`${process.cwd()}/.joystick/build`);
292
+
293
+ if (await path_exists(build_path)) {
294
+ await exec(`${process.platform === 'win32' ? 'rmdir /s /q' : 'rm -rf'} ${build_path}`);
295
+ }
296
+ };
297
+
298
+ const check_for_required_files = async () => {
299
+ const missing_files = [];
300
+
301
+ for (let i = 0; i < required_files?.length; i += 1) {
302
+ const required_file = required_files[i];
303
+ const exists = await path_exists(`${process.cwd()}/${required_file.path}`);
304
+ const stats = exists && await stat(`${process.cwd()}/${required_file.path}`);
305
+
306
+ if (required_file && required_file.type === "file" && (!exists || (exists && !stats.isFile()))) {
307
+ missing_files.push({ type: 'file', path: required_file.path });
308
+ }
309
+
310
+ if (required_file && required_file.type === "directory" && (!exists || (exists && !stats.isDirectory()))) {
311
+ missing_files.push({ type: 'directory', path: required_file.path });
312
+ }
313
+ }
314
+
315
+ if (missing_files?.length > 0) {
316
+ const files = missing_files?.filter((path) => path.type === 'file');
317
+ const directories = missing_files?.filter((path) => path.type === 'directory');
318
+
319
+ let error = `The following paths are missing and required in a Joystick project:\n\n`;
320
+
321
+ if (files?.length > 0) {
322
+ error += ` ${chalk.yellow('>')} Required Files:\n\n`;
323
+
324
+ for (let i = 0; i < files?.length; i += 1) {
325
+ const file = files[i];
326
+ const is_last_file = i +1 === files?.length;
327
+ error += ` ${chalk.red(`/${file.path}\n${is_last_file && directories?.length > 0 ? '\n' : ''}`)}`;
328
+ }
329
+ }
330
+
331
+ if (directories?.length > 0) {
332
+ error += ` ${chalk.yellow('>')} Required Directories:\n\n`;
333
+
334
+ for (let i = 0; i < directories?.length; i += 1) {
335
+ const file = directories[i];
336
+ error += ` ${chalk.red(`/${file.path}\n`)}`;
337
+ }
338
+ }
339
+
340
+ cli_log(error, {
341
+ level: "danger",
342
+ docs: "https://cheatcode.co/docs/joystick/structure",
343
+ });
344
+
345
+ process.exit(0);
346
+ }
347
+ };
348
+
349
+ const warn_invalid_joystick_environment = async () => {
350
+ const has_joystick_folder = await path_exists(`${process.cwd()}/.joystick`);
351
+ const has_tests_folder = await path_exists(`${process.cwd()}/tests`);
352
+
353
+ if (process.env.NODE_ENV === 'test' && (!has_joystick_folder || !has_tests_folder)) {
354
+ cli_log(
355
+ "joystick test must be run in a directory with a .joystick folder and tests folder.",
356
+ {
357
+ level: "danger",
358
+ docs: "https://cheatcode.co/docs/joystick/cli/test",
359
+ }
360
+ );
361
+
362
+ process.exit(0);
363
+ }
364
+
365
+ if (process.env.NODE_ENV !== 'test' && !has_joystick_folder) {
366
+ cli_log(
367
+ "joystick start must be run in a directory with a .joystick folder.",
368
+ {
369
+ level: "danger",
370
+ docs: "https://cheatcode.co/docs/joystick/cli/start",
371
+ }
372
+ );
373
+
374
+ process.exit(0);
375
+ }
376
+ };
377
+
378
+ const development_server = async (development_server_options = {}) => {
379
+ await warn_invalid_joystick_environment();
380
+ await check_for_required_files();
381
+
382
+ await clean_up_existing_build();
383
+
384
+ const port = get_port(development_server_options?.port);
385
+ const app_port_occupied = await check_if_port_occupied(port);
386
+ const hmr_port_occupied = await check_if_port_occupied(port + 1);
387
+
388
+ if (app_port_occupied) {
389
+ warn_app_port_occupied(port);
390
+ }
391
+
392
+ if (hmr_port_occupied) {
393
+ kill_port_process(port);
394
+ }
395
+
396
+ set_process_variables(development_server_options, port);
397
+
398
+ const settings = await load_settings(process.env.NODE_ENV);
399
+
400
+ await install_missing_databases(settings);
401
+
402
+ await start_databases({
403
+ environment: process.env.NODE_ENV,
404
+ port,
405
+ settings
406
+ });
407
+
408
+ watch_for_changes({
409
+ hot_module_reload: (jobs = []) => handle_signal_hmr_update(jobs),
410
+ restart_app_server: () => handle_restart_app_server(
411
+ node_major_version,
412
+ development_server_options?.watch,
413
+ settings,
414
+ ),
415
+ start_app_server: () => handle_start_app_server(
416
+ node_major_version,
417
+ development_server_options?.watch,
418
+
419
+ ),
420
+ start_hmr_server: development_server_options?.environment !== 'test' ? () => handle_start_hmr_server(
421
+ node_major_version,
422
+ __dirname,
423
+ development_server_options?.watch,
424
+ settings,
425
+ ) : null,
426
+ }, {
427
+ excluded_paths: settings?.config?.build?.excluded_paths,
428
+ custom_copy_paths: settings?.config?.build?.copy_paths?.map((path) => {
429
+ return { path };
430
+ }) || [],
431
+ });
432
+
433
+ handle_signal_events(process_ids, node_major_version, __dirname);
434
+ };
435
+
436
+ export default development_server;
@@ -0,0 +1,8 @@
1
+ const kill_process_ids = (process_ids = []) => {
2
+ for (let i = 0; i < process_ids?.length; i += 1) {
3
+ const process_id = process_ids[i];
4
+ process.kill(process_id);
5
+ }
6
+ };
7
+
8
+ export default kill_process_ids;
@@ -0,0 +1,84 @@
1
+ import child_process from "child_process";
2
+ import cli_log from "../cli_log.js";
3
+
4
+ const handle_ava_stderr = (stderr = '') => {
5
+ // NOTE: Squash output about using a configuration file (we always do in the framework).
6
+ if (stderr?.includes('Using configuration')) {
7
+ return null;
8
+ }
9
+
10
+ if (stderr?.includes('No tests found')) {
11
+ return cli_log('No tests found. Add tests in the /tests folder at the root of your Joystick app.', {
12
+ level: 'danger',
13
+ docs: 'https://cheatcode.co/docs/joystick/test/setup',
14
+ });
15
+ }
16
+
17
+ console.log(stderr);
18
+ };
19
+
20
+ const handle_ava_stdout = (stdout = '') => {
21
+ // NOTE: Squash output about using a configuration file (we always do in the framework).
22
+ if (stdout?.includes('Using configuration')) {
23
+ return null;
24
+ }
25
+
26
+ if (stdout?.includes('No tests found in')) {
27
+ const [message] = stdout?.split(',');
28
+ return console.log(`${message}\n`);
29
+ }
30
+
31
+ console.log(stdout);
32
+ };
33
+
34
+ const handle_ava_stdio = (ava = {}, run_tests_options = {}) => {
35
+ ava.stdout.on('data', function (data) {
36
+ const string = data.toString();
37
+ handle_ava_stdout(string, run_tests_options);
38
+ });
39
+
40
+ ava.stderr.on('data', function (data) {
41
+ const string = data.toString();
42
+ handle_ava_stderr(string, run_tests_options);
43
+ });
44
+ };
45
+
46
+ const run_tests = (run_tests_options = {}) => {
47
+ // NOTE: A little bananas to reason through this. In order for Ava to run w/o errors,
48
+ // the Ava binary being run here has to be identical to the one used in @joystick.js/test.
49
+ // That would equal the copy of Ava that's installed in a Joystick app's node_modules
50
+ // directory, not the node_modules directory of the CLI here. We can guarantee that will
51
+ // exist for the CLI here because a developer has to install @joystick.js/test which will
52
+ // add Ava as a dependency to their app in order to write tests.
53
+ const ava_path = `${process.cwd()}/node_modules/.bin/ava`;
54
+
55
+ return new Promise((resolve) => {
56
+ // NOTE: Despite using the app's node_modules path to reference Ava, we still want to reference
57
+ // the internal path here for the default test config in /lib/dev/tests.config.js.
58
+ const ava = child_process.exec(`DEBUG=ava:watcher && ${ava_path} --config ${run_tests_options?.__dirname}/ava_config.js ${run_tests_options?.watch ? '--watch' : ''}`, {
59
+ stdio: 'inherit',
60
+ env: {
61
+ ...(process.env),
62
+ databases: process.databases,
63
+ FORCE_COLOR: "1"
64
+ }
65
+ }, (error) => {
66
+ if (!error) {
67
+ // NOTE: Do this here because the standard SIGINT and SIGTERM hooks the dev process
68
+ // listens for don't catch a clean exit (and the process.exit() hook fires after exit).
69
+ run_tests_options.cleanup_process.send(JSON.stringify(({ process_ids: run_tests_options?.process_ids })));
70
+ process.exit(0);
71
+ } else {
72
+ // NOTE: Do not report any Ava errors here because they're picked up by the handle_ava_stdio();
73
+ // hook below. Just do a clean exit here so Node doesn't hang.
74
+ run_tests_options.cleanup_process.send(JSON.stringify(({ process_ids: run_tests_options?.process_ids })));
75
+ process.exit(0);
76
+ }
77
+ });
78
+
79
+ handle_ava_stdio(ava, run_tests_options);
80
+ });
81
+ };
82
+
83
+ export default run_tests;
84
+
@@ -0,0 +1,55 @@
1
+ import child_process from "child_process";
2
+ import path from "path";
3
+
4
+ const start_app_server_process = (exec_argv = [], watch = false) => {
5
+ if (process.env.NODE_ENV !== 'test') {
6
+ process.loader.print('Starting app...');
7
+ }
8
+
9
+ return child_process.fork(
10
+ path.resolve(".joystick/build/index.server.js"),
11
+ [],
12
+ {
13
+ execArgv: exec_argv,
14
+ // NOTE: Pipe stdin, stdout, and stderr. IPC establishes a message channel so we
15
+ // communicate with the child_process.
16
+ silent: true,
17
+ env: {
18
+ FORCE_COLOR: "1",
19
+ LOGS_PATH: process.env.LOGS_PATH,
20
+ NODE_ENV: process.env.NODE_ENV,
21
+ ROOT_URL: process.env.ROOT_URL,
22
+ PORT: process.env.PORT,
23
+ JOYSTICK_SETTINGS: process.env.JOYSTICK_SETTINGS,
24
+ },
25
+ }
26
+ );
27
+ };
28
+
29
+ const get_exec_args = (node_major_version = 0) => {
30
+ const exec_argv = ["--no-warnings"];
31
+
32
+ if (process.env.NODE_ENV === 'development') {
33
+ // NOTE: Ensure that localhost is not swapped with ::1 (IPv6 local address) in Node v17-v19.
34
+ // See here for information: https://github.com/nodejs/node/issues/40702#issuecomment-958157082
35
+ exec_argv.push("--dns-result-order=ipv4first");
36
+ }
37
+
38
+ if (node_major_version < 19) {
39
+ exec_argv.push("--experimental-specifier-resolution=node");
40
+ }
41
+
42
+ if (process.env.NODE_ENV === "development" && process.env.IS_DEBUG_MODE === "true") {
43
+ exec_argv.push("--inspect");
44
+ }
45
+
46
+ return exec_argv;
47
+ };
48
+
49
+ const start_app_server = (node_major_version = 0, watch = false) => {
50
+ const exec_argv = get_exec_args(node_major_version);
51
+ const app_server_process = start_app_server_process(exec_argv, watch);
52
+ return app_server_process;
53
+ };
54
+
55
+ export default start_app_server;