@joystick.js/cli-canary 0.0.0-canary.1

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 (231) hide show
  1. package/.build/getFilesToBuild.js +38 -0
  2. package/.build/index.js +69 -0
  3. package/HMRNOTES.txt +23 -0
  4. package/README.md +7 -0
  5. package/_package.json +55 -0
  6. package/canary.js +12 -0
  7. package/dist/cli.js +69 -0
  8. package/dist/functions/build/getTarIgnoreList.js +25 -0
  9. package/dist/functions/build/index.js +54 -0
  10. package/dist/functions/create/buildPackageJSON.js +20 -0
  11. package/dist/functions/create/index.js +193 -0
  12. package/dist/functions/create/templates/api/index.js +4 -0
  13. package/dist/functions/create/templates/i18n/en-US.js +4 -0
  14. package/dist/functions/create/templates/index.client.js +7 -0
  15. package/dist/functions/create/templates/index.css +20 -0
  16. package/dist/functions/create/templates/index.html +23 -0
  17. package/dist/functions/create/templates/index.server.js +21 -0
  18. package/dist/functions/create/templates/public/apple-touch-icon-152x152.png +0 -0
  19. package/dist/functions/create/templates/public/favicon.ico +0 -0
  20. package/dist/functions/create/templates/public/manifest.json +25 -0
  21. package/dist/functions/create/templates/public/service-worker.js +32 -0
  22. package/dist/functions/create/templates/public/splash-screen-1024x1024.png +0 -0
  23. package/dist/functions/create/templates/settings.development.json +27 -0
  24. package/dist/functions/create/templates/ui/components/button/index.js +50 -0
  25. package/dist/functions/create/templates/ui/layouts/app/index.js +13 -0
  26. package/dist/functions/create/templates/ui/pages/error/index.js +31 -0
  27. package/dist/functions/create/templates/ui/pages/index/index.js +94 -0
  28. package/dist/functions/index.js +243 -0
  29. package/dist/functions/logout/index.js +20 -0
  30. package/dist/functions/push/checkIfProvisionAvailable.js +19 -0
  31. package/dist/functions/push/deploy/index.js +173 -0
  32. package/dist/functions/push/deploy/initial.js +100 -0
  33. package/dist/functions/push/deploy/version.js +100 -0
  34. package/dist/functions/push/domains.js +23 -0
  35. package/dist/functions/push/getAvailableCDN.js +23 -0
  36. package/dist/functions/push/getDeployment.js +41 -0
  37. package/dist/functions/push/getDeploymentSummary.js +38 -0
  38. package/dist/functions/push/getInstanceSizeRegions.js +37 -0
  39. package/dist/functions/push/getInstanceSizesForRegion.js +34 -0
  40. package/dist/functions/push/getProviderInstanceSizes.js +34 -0
  41. package/dist/functions/push/getProviderRegions.js +36 -0
  42. package/dist/functions/push/getProvidersWithConnectionStatus.js +20 -0
  43. package/dist/functions/push/getSessionToken.js +23 -0
  44. package/dist/functions/push/getUserFromSessionToken.js +37 -0
  45. package/dist/functions/push/index.js +210 -0
  46. package/dist/functions/push/loginToCheatCode.js +33 -0
  47. package/dist/functions/push/pingProvisionAPI.js +31 -0
  48. package/dist/functions/push/prompts.js +332 -0
  49. package/dist/functions/push/providerMap.js +11 -0
  50. package/dist/functions/push/providers.js +9 -0
  51. package/dist/functions/reset/index.js +0 -0
  52. package/dist/functions/reset/reset.js +127 -0
  53. package/dist/functions/start/bootstrapLayoutComponent.js +54 -0
  54. package/dist/functions/start/bootstrapPageComponent.js +51 -0
  55. package/dist/functions/start/buildFile.js +85 -0
  56. package/dist/functions/start/buildFiles.js +76 -0
  57. package/dist/functions/start/buildPlugins.js +183 -0
  58. package/dist/functions/start/checkIfPortAvailable.js +18 -0
  59. package/dist/functions/start/cleanup/index.js +18 -0
  60. package/dist/functions/start/databases/mongodb/availableQueryParameters.js +42 -0
  61. package/dist/functions/start/databases/mongodb/buildConnectionString.js +22 -0
  62. package/dist/functions/start/databases/mongodb/buildQueryParameters.js +14 -0
  63. package/dist/functions/start/databases/mongodb/checkConnection.js +38 -0
  64. package/dist/functions/start/databases/mongodb/connect.js +25 -0
  65. package/dist/functions/start/databases/mongodb/index.js +93 -0
  66. package/dist/functions/start/databases/postgresql/checkConnection.js +41 -0
  67. package/dist/functions/start/databases/postgresql/connect.js +27 -0
  68. package/dist/functions/start/databases/postgresql/index.js +106 -0
  69. package/dist/functions/start/databases/redis.js +0 -0
  70. package/dist/functions/start/databases/startProvider.js +16 -0
  71. package/dist/functions/start/fileDependencyMapper.js +22 -0
  72. package/dist/functions/start/filesToCopy.js +18 -0
  73. package/dist/functions/start/generateId.js +74 -0
  74. package/dist/functions/start/getCodependenciesForFile.js +64 -0
  75. package/dist/functions/start/getFilesToBuild.js +39 -0
  76. package/dist/functions/start/getProcessIdFromPort.js +60 -0
  77. package/dist/functions/start/hmrServer.js +66 -0
  78. package/dist/functions/start/index.js +535 -0
  79. package/dist/functions/start/isWindows.js +5 -0
  80. package/dist/functions/start/minifyFile.js +12 -0
  81. package/dist/functions/start/onWarn.js +63 -0
  82. package/dist/functions/start/readFileDependencyMap.js +16 -0
  83. package/dist/functions/start/removeDeletedDependenciesFromMap.js +18 -0
  84. package/dist/functions/start/setComponentId.js +46 -0
  85. package/dist/functions/start/updateFileMap.js +67 -0
  86. package/dist/functions/update/index.js +21 -0
  87. package/dist/functions/use/index.js +61 -0
  88. package/dist/index.js +8 -0
  89. package/dist/lib/CLILog.js +49 -0
  90. package/dist/lib/buildResolvePlugin.js +21 -0
  91. package/dist/lib/checkIfValidJSON.js +11 -0
  92. package/dist/lib/colorLog.js +7 -0
  93. package/dist/lib/getArgs.js +14 -0
  94. package/dist/lib/getCodeFrame.js +10 -0
  95. package/dist/lib/getOptions.js +15 -0
  96. package/dist/lib/getPlatformSafePath.js +7 -0
  97. package/dist/lib/getProvider.js +8 -0
  98. package/dist/lib/help.js +56 -0
  99. package/dist/lib/isObject.js +6 -0
  100. package/dist/lib/isValidJSONString.js +11 -0
  101. package/dist/lib/isWindows.js +5 -0
  102. package/dist/lib/killProcesses.js +0 -0
  103. package/dist/lib/loadSettings.js +33 -0
  104. package/dist/lib/loader.js +82 -0
  105. package/dist/lib/masterIgnoreList.js +16 -0
  106. package/dist/lib/nodeEnvironment.js +9 -0
  107. package/dist/lib/nodeEnvironments.js +8 -0
  108. package/dist/lib/parseCookiesFromLogin.js +18 -0
  109. package/dist/lib/rainbowRoad.js +7 -0
  110. package/dist/lib/readDirectorySync.js +14 -0
  111. package/dist/lib/regexes.js +12 -0
  112. package/dist/lib/replaceBackslashesWithForwardSlashes.js +8 -0
  113. package/dist/lib/replaceFileProtocol.js +8 -0
  114. package/dist/lib/serializeQueryParameters.js +8 -0
  115. package/dist/lib/settings.js +4 -0
  116. package/dist/lib/validateDatabasesFromSettings.js +34 -0
  117. package/dist/lib/wait.js +8 -0
  118. package/package.json +54 -0
  119. package/release.js +40 -0
  120. package/src/cli.js +88 -0
  121. package/src/functions/build/getTarIgnoreList.js +30 -0
  122. package/src/functions/build/index.js +63 -0
  123. package/src/functions/create/buildPackageJSON.js +18 -0
  124. package/src/functions/create/index.js +209 -0
  125. package/src/functions/create/templates/api/index.js +4 -0
  126. package/src/functions/create/templates/i18n/en-US.js +4 -0
  127. package/src/functions/create/templates/index.client.js +7 -0
  128. package/src/functions/create/templates/index.css +20 -0
  129. package/src/functions/create/templates/index.html +23 -0
  130. package/src/functions/create/templates/index.server.js +21 -0
  131. package/src/functions/create/templates/public/apple-touch-icon-152x152.png +0 -0
  132. package/src/functions/create/templates/public/favicon.ico +0 -0
  133. package/src/functions/create/templates/public/manifest.json +25 -0
  134. package/src/functions/create/templates/public/service-worker.js +32 -0
  135. package/src/functions/create/templates/public/splash-screen-1024x1024.png +0 -0
  136. package/src/functions/create/templates/settings.development.json +27 -0
  137. package/src/functions/create/templates/ui/components/button/index.js +50 -0
  138. package/src/functions/create/templates/ui/layouts/app/index.js +13 -0
  139. package/src/functions/create/templates/ui/pages/error/index.js +31 -0
  140. package/src/functions/create/templates/ui/pages/index/index.js +94 -0
  141. package/src/functions/index.js +243 -0
  142. package/src/functions/logout/index.js +20 -0
  143. package/src/functions/push/checkIfProvisionAvailable.js +20 -0
  144. package/src/functions/push/deploy/index.js +199 -0
  145. package/src/functions/push/deploy/initial.js +108 -0
  146. package/src/functions/push/deploy/version.js +108 -0
  147. package/src/functions/push/domains.js +23 -0
  148. package/src/functions/push/getAvailableCDN.js +27 -0
  149. package/src/functions/push/getDeployment.js +43 -0
  150. package/src/functions/push/getDeploymentSummary.js +39 -0
  151. package/src/functions/push/getInstanceSizeRegions.js +40 -0
  152. package/src/functions/push/getInstanceSizesForRegion.js +35 -0
  153. package/src/functions/push/getProviderInstanceSizes.js +35 -0
  154. package/src/functions/push/getProviderRegions.js +39 -0
  155. package/src/functions/push/getProvidersWithConnectionStatus.js +25 -0
  156. package/src/functions/push/getSessionToken.js +26 -0
  157. package/src/functions/push/getUserFromSessionToken.js +39 -0
  158. package/src/functions/push/index.js +245 -0
  159. package/src/functions/push/loginToCheatCode.js +34 -0
  160. package/src/functions/push/pingProvisionAPI.js +33 -0
  161. package/src/functions/push/prompts.js +276 -0
  162. package/src/functions/push/providerMap.js +8 -0
  163. package/src/functions/push/providers.js +6 -0
  164. package/src/functions/reset/index.js +0 -0
  165. package/src/functions/reset/reset.js +163 -0
  166. package/src/functions/start/bootstrapLayoutComponent.js +57 -0
  167. package/src/functions/start/bootstrapPageComponent.js +54 -0
  168. package/src/functions/start/buildFile.js +97 -0
  169. package/src/functions/start/buildFiles.js +101 -0
  170. package/src/functions/start/buildPlugins.js +215 -0
  171. package/src/functions/start/checkIfPortAvailable.js +21 -0
  172. package/src/functions/start/cleanup/index.js +23 -0
  173. package/src/functions/start/databases/mongodb/availableQueryParameters.js +39 -0
  174. package/src/functions/start/databases/mongodb/buildConnectionString.js +28 -0
  175. package/src/functions/start/databases/mongodb/buildQueryParameters.js +15 -0
  176. package/src/functions/start/databases/mongodb/checkConnection.js +40 -0
  177. package/src/functions/start/databases/mongodb/connect.js +25 -0
  178. package/src/functions/start/databases/mongodb/index.js +108 -0
  179. package/src/functions/start/databases/postgresql/checkConnection.js +43 -0
  180. package/src/functions/start/databases/postgresql/connect.js +27 -0
  181. package/src/functions/start/databases/postgresql/index.js +127 -0
  182. package/src/functions/start/databases/redis.js +0 -0
  183. package/src/functions/start/databases/startProvider.js +15 -0
  184. package/src/functions/start/fileDependencyMapper.js +24 -0
  185. package/src/functions/start/filesToCopy.js +15 -0
  186. package/src/functions/start/generateId.js +73 -0
  187. package/src/functions/start/getCodependenciesForFile.js +84 -0
  188. package/src/functions/start/getFilesToBuild.js +49 -0
  189. package/src/functions/start/getProcessIdFromPort.js +92 -0
  190. package/src/functions/start/hmrServer.js +78 -0
  191. package/src/functions/start/index.js +688 -0
  192. package/src/functions/start/isWindows.js +3 -0
  193. package/src/functions/start/minifyFile.js +10 -0
  194. package/src/functions/start/onWarn.js +68 -0
  195. package/src/functions/start/readFileDependencyMap.js +19 -0
  196. package/src/functions/start/removeDeletedDependenciesFromMap.js +19 -0
  197. package/src/functions/start/setComponentId.js +58 -0
  198. package/src/functions/start/updateFileMap.js +100 -0
  199. package/src/functions/update/index.js +20 -0
  200. package/src/functions/use/index.js +62 -0
  201. package/src/index.js +13 -0
  202. package/src/lib/CLILog.js +40 -0
  203. package/src/lib/buildResolvePlugin.js +32 -0
  204. package/src/lib/checkIfValidJSON.js +8 -0
  205. package/src/lib/colorLog.js +5 -0
  206. package/src/lib/getArgs.js +14 -0
  207. package/src/lib/getCodeFrame.js +8 -0
  208. package/src/lib/getOptions.js +12 -0
  209. package/src/lib/getPlatformSafePath.js +6 -0
  210. package/src/lib/getProvider.js +5 -0
  211. package/src/lib/help.js +56 -0
  212. package/src/lib/isObject.js +3 -0
  213. package/src/lib/isValidJSONString.js +8 -0
  214. package/src/lib/isWindows.js +3 -0
  215. package/src/lib/killProcesses.js +5 -0
  216. package/src/lib/loadSettings.js +40 -0
  217. package/src/lib/loader.js +94 -0
  218. package/src/lib/masterIgnoreList.js +13 -0
  219. package/src/lib/nodeEnvironment.js +6 -0
  220. package/src/lib/nodeEnvironments.js +8 -0
  221. package/src/lib/parseCookiesFromLogin.js +21 -0
  222. package/src/lib/rainbowRoad.js +5 -0
  223. package/src/lib/readDirectorySync.js +13 -0
  224. package/src/lib/regexes.js +5 -0
  225. package/src/lib/replaceBackslashesWithForwardSlashes.js +8 -0
  226. package/src/lib/replaceFileProtocol.js +8 -0
  227. package/src/lib/serializeQueryParameters.js +5 -0
  228. package/src/lib/settings.js +1 -0
  229. package/src/lib/validateDatabasesFromSettings.js +37 -0
  230. package/src/lib/wait.js +5 -0
  231. package/storage/.verdaccio-db.json +1 -0
@@ -0,0 +1,127 @@
1
+ import fs from "fs";
2
+ import util from "util";
3
+ import child_process from "child_process";
4
+ import commandExists from "command-exists";
5
+ import chalk from "chalk";
6
+ import Mongo from "mongodb";
7
+ import ps from "ps-node";
8
+ import mongoUri from "mongo-uri-tool";
9
+ import Loader from "../../lib/loader.js";
10
+ import settings from "../../lib/settings.js";
11
+ const exec = util.promisify(child_process.exec);
12
+ const resetDatabase = async (mongodb) => {
13
+ const collections = mongodb && mongodb.db && await mongodb.db.listCollections().toArray();
14
+ for (let i = 0; i < collections.length; i += 1) {
15
+ const collectionFromList = collections[i];
16
+ const collectionName = collectionFromList && collectionFromList.name;
17
+ const collection = collectionName && mongodb.db.collection(collectionName);
18
+ if (collection) {
19
+ await collection.deleteMany();
20
+ }
21
+ }
22
+ return true;
23
+ };
24
+ const handleCleanup = (processIds = []) => {
25
+ process.loader.stop();
26
+ processIds.forEach((processId) => {
27
+ ps.kill(processId);
28
+ });
29
+ process.exit();
30
+ };
31
+ const handleSignalEvents = (processIds = []) => {
32
+ process.on("SIGINT", () => handleCleanup(processIds));
33
+ process.on("SIGTERM", () => handleCleanup(processIds));
34
+ };
35
+ const getMongoProcessId = (stdout = null) => {
36
+ const forkedProcessId = stdout && stdout.match(/forked process:+\s[0-9]+/gi);
37
+ const processId = forkedProcessId && forkedProcessId[0] && forkedProcessId[0].replace("forked process: ", "");
38
+ return processId && parseInt(processId, 10);
39
+ };
40
+ const getConnectionOptions = () => {
41
+ const mongodbSettings = settings && settings.databases && settings.databases.mongodb;
42
+ const uri = mongodbSettings && mongodbSettings.uri;
43
+ if (!mongodbSettings || mongodbSettings && !uri) {
44
+ throw new Error(
45
+ chalk.redBright(
46
+ "Must have a valid databases.mongodb.uri value in your settings-<env>.json file to connect to MongoDB."
47
+ )
48
+ );
49
+ }
50
+ return {
51
+ uri,
52
+ parsedUri: mongoUri.parseUri(uri),
53
+ options: Object.assign({}, mongodbSettings.options)
54
+ };
55
+ };
56
+ const connectToMongoDB = async () => {
57
+ const connectionOptions = getConnectionOptions();
58
+ if (!process.mongodb && connectionOptions) {
59
+ const mongodb = await Mongo.MongoClient.connect(connectionOptions.uri, {
60
+ poolSize: process.env.NODE_ENV === "development" ? 10 : 100,
61
+ useNewUrlParser: true,
62
+ useUnifiedTopology: true,
63
+ authSource: "admin",
64
+ ssl: process.env.NODE_ENV !== "development",
65
+ ...connectionOptions.options
66
+ });
67
+ const db = mongodb.db(connectionOptions.parsedUri.db);
68
+ return {
69
+ db,
70
+ Collection: db.collection.bind(db),
71
+ connection: mongodb
72
+ };
73
+ }
74
+ return null;
75
+ };
76
+ const startMongoDB = async () => {
77
+ const dataDirectoryExists = fs.existsSync(".data/mongodb");
78
+ if (!dataDirectoryExists) {
79
+ fs.mkdirSync(".data/mongodb", { recursive: true });
80
+ }
81
+ const { stdout } = await exec(
82
+ "mongod --port 27017 --dbpath ./.data/mongodb --quiet --fork --logpath ./.data/mongodb/log"
83
+ );
84
+ const mongoProcessId = getMongoProcessId(stdout);
85
+ process.mongoProcessId = mongoProcessId;
86
+ return mongoProcessId;
87
+ };
88
+ const warnMongoDBMissing = () => {
89
+ console.warn(`
90
+ ${chalk.red("MongoDB not installed.")}
91
+
92
+ ${chalk.green(
93
+ "Download MongoDB at https://www.mongodb.com/try/download/community"
94
+ )}
95
+
96
+ After installation, try to run this command again to start MongoDB alongside your app.
97
+
98
+ `);
99
+ };
100
+ const reset = async () => {
101
+ if (process.env.NODE_ENV !== "development") {
102
+ console.log(
103
+ chalk.redBright(
104
+ "To prevent catastrophic data loss, reset is disabled outside of your development environment."
105
+ )
106
+ );
107
+ process.exit(1);
108
+ }
109
+ process.isReset = true;
110
+ process.loader = new Loader();
111
+ process.loader.start("Resetting database...");
112
+ const mongodbExists = commandExists.sync("mongod");
113
+ if (mongodbExists) {
114
+ const mongoProcessId = await startMongoDB();
115
+ handleSignalEvents([mongoProcessId]);
116
+ const mongodb = await connectToMongoDB();
117
+ await resetDatabase(mongodb);
118
+ ps.kill(mongoProcessId);
119
+ process.loader.stable("Database reset!\n\n");
120
+ process.exit();
121
+ } else {
122
+ process.loader.stop();
123
+ warnMongoDBMissing();
124
+ process.exit(1);
125
+ }
126
+ };
127
+ (async () => reset())();
@@ -0,0 +1,54 @@
1
+ import chalk from "chalk";
2
+ import { EXPORT_DEFAULT_REGEX } from "../../lib/regexes.js";
3
+ var bootstrapLayoutComponent_default = () => {
4
+ return {
5
+ transform(code, id) {
6
+ const shouldBootstrap = ["layouts"].some((bootstrapTarget) => {
7
+ return id.includes(bootstrapTarget);
8
+ });
9
+ if (shouldBootstrap) {
10
+ const matches = code.match(EXPORT_DEFAULT_REGEX) || [];
11
+ const match = matches && matches[0];
12
+ if (!match) {
13
+ console.log(" ");
14
+ console.warn(
15
+ chalk.yellowBright(
16
+ `All components in the ui/layouts directory must have an export default statement (e.g., export default MyLayout). Please check the file at ${id}.`
17
+ )
18
+ );
19
+ console.log(" ");
20
+ return null;
21
+ }
22
+ const matchParts = match && match.split(" ") || [];
23
+ const componentName = matchParts.pop();
24
+ if (componentName) {
25
+ return {
26
+ code: code.replace(
27
+ `${match};`,
28
+ `if (
29
+ typeof window !== 'undefined' &&
30
+ window.__joystick_ssr__ === true &&
31
+ window.__joystick_layout_page__ &&
32
+ ui &&
33
+ ui.mount
34
+ ) {
35
+ fetch(window.__joystick_layout_page_url__).then(async (response) => {
36
+ const file = await response.text();
37
+ const component = eval(file);
38
+ ui.mount(${componentName}, Object.assign({ ...window.__joystick_ssr_props__ }, { page: window[window.__joystick_layout_page__].js }), document.getElementById('app'));
39
+ });
40
+ }
41
+
42
+ export default ${componentName};
43
+ `
44
+ )
45
+ };
46
+ }
47
+ }
48
+ return null;
49
+ }
50
+ };
51
+ };
52
+ export {
53
+ bootstrapLayoutComponent_default as default
54
+ };
@@ -0,0 +1,51 @@
1
+ import chalk from "chalk";
2
+ import { EXPORT_DEFAULT_REGEX } from "../../lib/regexes.js";
3
+ var bootstrapPageComponent_default = () => {
4
+ return {
5
+ transform(code, id) {
6
+ const shouldBootstrap = ["pages"].some((bootstrapTarget) => {
7
+ return id.includes(bootstrapTarget);
8
+ });
9
+ if (shouldBootstrap) {
10
+ const matches = code.match(EXPORT_DEFAULT_REGEX) || [];
11
+ const match = matches && matches[0];
12
+ if (!match) {
13
+ console.log(" ");
14
+ console.warn(
15
+ chalk.yellowBright(
16
+ `All components in the ui/pages directory must have an export default statement (e.g., export default MyPage). Please check the file at ${id}.`
17
+ )
18
+ );
19
+ console.log(" ");
20
+ return null;
21
+ }
22
+ const matchParts = match && match.split(" ") || [];
23
+ const componentName = matchParts.pop();
24
+ if (componentName) {
25
+ return {
26
+ code: code.replace(
27
+ `${match};`,
28
+ `
29
+ if (
30
+ typeof window !== 'undefined' &&
31
+ window.__joystick_ssr__ === true &&
32
+ !window.__joystick_layout_page__ &&
33
+ ui &&
34
+ ui.mount
35
+ ) {
36
+ ui.mount(${componentName}, window.__joystick_ssr_props__ || {}, document.getElementById('app'));
37
+ }
38
+
39
+ export default ${componentName};
40
+ `
41
+ )
42
+ };
43
+ }
44
+ }
45
+ return null;
46
+ }
47
+ };
48
+ };
49
+ export {
50
+ bootstrapPageComponent_default as default
51
+ };
@@ -0,0 +1,85 @@
1
+ import esbuild from "esbuild";
2
+ import svg from "esbuild-plugin-svg";
3
+ import fs from "fs";
4
+ import plugins from "./buildPlugins.js";
5
+ import onWarn from "./onWarn.js";
6
+ import getCodeFrame from "../../lib/getCodeFrame.js";
7
+ const configs = {
8
+ node: (inputPath, outputPath = null, environment = "development") => ({
9
+ entryPoints: [inputPath],
10
+ bundle: false,
11
+ outfile: `${outputPath || "./.joystick/build"}/${inputPath}`,
12
+ platform: "node",
13
+ format: "esm",
14
+ define: {
15
+ "process.env.NODE_ENV": `'${environment}'`
16
+ },
17
+ // minify: environment !== "development",
18
+ logLevel: "silent",
19
+ plugins: [plugins.warnNodeEnvironment, plugins.generateFileDependencyMap]
20
+ }),
21
+ browser: (inputPath, outputPath = null, environment = "development") => {
22
+ return {
23
+ target: "es2020",
24
+ entryPoints: [inputPath],
25
+ bundle: true,
26
+ outfile: `${outputPath || "./.joystick/build"}/${inputPath}`,
27
+ platform: "browser",
28
+ format: "esm",
29
+ define: {
30
+ "process.env.NODE_ENV": `'${environment}'`
31
+ },
32
+ // minify: environment !== "development",
33
+ logLevel: "silent",
34
+ plugins: [
35
+ plugins.warnNodeEnvironment,
36
+ plugins.generateFileDependencyMap,
37
+ plugins.bootstrapComponent,
38
+ svg()
39
+ ]
40
+ };
41
+ }
42
+ };
43
+ var buildFile_default = async (file = "", platform = "", outputPath = "", environment = "development") => {
44
+ return new Promise(async (resolve) => {
45
+ const config = configs[platform] && configs[platform](file, outputPath, environment);
46
+ if (config) {
47
+ try {
48
+ await esbuild.build(config);
49
+ return resolve({
50
+ success: true
51
+ });
52
+ } catch (exception) {
53
+ console.warn(exception);
54
+ const error = exception?.errors && exception?.errors[0];
55
+ const snippet = fs.existsSync(file) ? getCodeFrame(file, {
56
+ line: error?.location?.line,
57
+ column: error?.location?.column
58
+ }) : null;
59
+ onWarn({
60
+ file,
61
+ stack: exception?.stack,
62
+ line: error?.location?.line,
63
+ column: error?.location?.column,
64
+ snippet,
65
+ lineWithError: error?.location?.lineText?.trim(),
66
+ message: error?.text
67
+ });
68
+ return resolve({
69
+ success: false,
70
+ path: file,
71
+ error: {
72
+ stack: exception?.stack,
73
+ snippet
74
+ }
75
+ });
76
+ }
77
+ }
78
+ return resolve({
79
+ success: true
80
+ });
81
+ });
82
+ };
83
+ export {
84
+ buildFile_default as default
85
+ };
@@ -0,0 +1,76 @@
1
+ import fs from "fs-extra";
2
+ import esbuild from "esbuild";
3
+ import filesToCopy from "./filesToCopy.js";
4
+ import buildFile from "./buildFile.js";
5
+ import minifyFile from "./minifyFile.js";
6
+ import getPlatformSafePath from "../../lib/getPlatformSafePath.js";
7
+ const getFilePlatform = (path = "") => {
8
+ let platform = "copy";
9
+ const browserPaths = [
10
+ getPlatformSafePath("email/"),
11
+ getPlatformSafePath("lib/"),
12
+ getPlatformSafePath("lib/browser"),
13
+ getPlatformSafePath("ui/"),
14
+ "index.client.js"
15
+ ];
16
+ const browserExclusions = [getPlatformSafePath("lib/node")];
17
+ const nodePaths = [
18
+ getPlatformSafePath("api/"),
19
+ getPlatformSafePath("routes/"),
20
+ getPlatformSafePath("fixtures/"),
21
+ getPlatformSafePath("lib/node"),
22
+ "index.server.js"
23
+ ];
24
+ const nodeExclusions = [getPlatformSafePath("lib/browser")];
25
+ const isBrowser = browserPaths.some((browserPath) => {
26
+ return path.includes(browserPath);
27
+ }) && !browserExclusions.some((browserExclusionPath) => {
28
+ return path.includes(browserExclusionPath);
29
+ });
30
+ const isNode = nodePaths.some((nodePath) => {
31
+ return path.includes(nodePath);
32
+ }) && !nodeExclusions.some((nodeExclusionPath) => {
33
+ return path.includes(nodeExclusionPath);
34
+ });
35
+ if (isBrowser) {
36
+ platform = "browser";
37
+ }
38
+ if (isNode) {
39
+ platform = "node";
40
+ }
41
+ return platform;
42
+ };
43
+ const isNotJavaScript = (path = "") => {
44
+ const extension = path.split(".").pop();
45
+ return extension && !extension.match(/\js$/);
46
+ };
47
+ var buildFiles_default = async (filesToBuild = [], outputPath = null, environment = "development") => {
48
+ return Promise.all(
49
+ filesToBuild.map(async (fileToBuild) => {
50
+ const platform = getFilePlatform(fileToBuild);
51
+ const isFileToCopy = platform === "copy" || isNotJavaScript(fileToBuild) || filesToCopy.some((fileToCopy) => {
52
+ return fileToCopy.regex.test(fileToBuild);
53
+ });
54
+ if (isFileToCopy) {
55
+ fs.outputFileSync(
56
+ `${outputPath || "./.joystick/build"}/${fileToBuild}`,
57
+ fs.readFileSync(fileToBuild)
58
+ );
59
+ return fileToBuild;
60
+ }
61
+ const build = await buildFile(
62
+ fileToBuild,
63
+ platform,
64
+ outputPath,
65
+ environment
66
+ );
67
+ if (environment !== "development") {
68
+ await minifyFile(`${outputPath || "./.joystick/build"}/${fileToBuild}`);
69
+ }
70
+ return build;
71
+ })
72
+ );
73
+ };
74
+ export {
75
+ buildFiles_default as default
76
+ };
@@ -0,0 +1,183 @@
1
+ import fs from "fs";
2
+ import chalk from "chalk";
3
+ import updateFileMap from "./updateFileMap.js";
4
+ import {
5
+ JOYSTICK_UI_REGEX,
6
+ EXPORT_DEFAULT_REGEX,
7
+ JOYSTICK_COMPONENT_REGEX,
8
+ JOYSTICK_COMMENT_REGEX
9
+ } from "../../lib/regexes.js";
10
+ import generateId from "./generateId.js";
11
+ import getPlatformSafePath from "../../lib/getPlatformSafePath.js";
12
+ import setComponentId from "./setComponentId.js";
13
+ var buildPlugins_default = {
14
+ bootstrapComponent: {
15
+ name: "bootstrapComponent",
16
+ setup(build) {
17
+ const ssrId = generateId();
18
+ build.onLoad({ filter: /\.js$/ }, (args = {}) => {
19
+ try {
20
+ const shouldSetSSRId = [getPlatformSafePath("ui/")].some(
21
+ (bootstrapTarget) => {
22
+ return args.path.includes(bootstrapTarget);
23
+ }
24
+ );
25
+ const isLayoutComponent = [getPlatformSafePath("ui/layouts")].some(
26
+ (bootstrapTarget) => {
27
+ return args.path.includes(bootstrapTarget);
28
+ }
29
+ );
30
+ const isPageComponent = [getPlatformSafePath("ui/pages")].some(
31
+ (bootstrapTarget) => {
32
+ return args.path.includes(bootstrapTarget);
33
+ }
34
+ );
35
+ const isEmailComponent = [getPlatformSafePath("email/")].some(
36
+ (bootstrapTarget) => {
37
+ return args.path.includes(bootstrapTarget);
38
+ }
39
+ );
40
+ if (shouldSetSSRId || isLayoutComponent || isPageComponent || isEmailComponent) {
41
+ const code = fs.readFileSync(
42
+ getPlatformSafePath(args.path),
43
+ "utf-8"
44
+ );
45
+ const joystickUIMatches = code.match(JOYSTICK_UI_REGEX) || [];
46
+ const joystickUIMatch = joystickUIMatches && joystickUIMatches[0];
47
+ const exportDefaultMatches = code.match(EXPORT_DEFAULT_REGEX) || [];
48
+ const exportDefaultMatch = exportDefaultMatches && exportDefaultMatches[0];
49
+ if (joystickUIMatch && !exportDefaultMatch) {
50
+ console.log(" ");
51
+ console.warn(
52
+ chalk.yellowBright(
53
+ `All Joystick components in the ui directory must have an export default statement (e.g., export default MyComponent, export default MyLayout, or export default MyPage). Please check the file at ${args.path}.`
54
+ )
55
+ );
56
+ console.log(" ");
57
+ return;
58
+ }
59
+ let contents = setComponentId(code)?.replace(
60
+ /\.component\(\/\*\*\//g,
61
+ ".component("
62
+ );
63
+ contents = contents.replace(JOYSTICK_COMMENT_REGEX, "");
64
+ const exportDefaultMatchParts = exportDefaultMatch && exportDefaultMatch.split(" ") || [];
65
+ const componentName = exportDefaultMatchParts.pop();
66
+ if (componentName && isLayoutComponent) {
67
+ contents = contents.replace(
68
+ `${exportDefaultMatch};`,
69
+ `if (
70
+ typeof window !== 'undefined' &&
71
+ window.__joystick_ssr__ === true &&
72
+ window.__joystick_layout_page__ &&
73
+ ui &&
74
+ ui.mount
75
+ ) {
76
+ (async () => {
77
+ const layoutComponentFile = await import(window.__joystick_layout__);
78
+ const pageComponentFile = await import(window.window.__joystick_layout_page_url__);
79
+ const layout = layoutComponentFile.default;
80
+ const page = pageComponentFile.default;
81
+ ui.mount(layout, Object.assign({ ...window.__joystick_ssr_props__ }, { page }), document.getElementById('app'));
82
+ })();
83
+ }
84
+
85
+ export default ${componentName};
86
+ `
87
+ );
88
+ }
89
+ if (componentName && isPageComponent) {
90
+ contents = contents.replace(
91
+ `${exportDefaultMatch};`,
92
+ `if (
93
+ typeof window !== 'undefined' &&
94
+ window.__joystick_ssr__ === true &&
95
+ !window.__joystick_layout_page__ &&
96
+ ui &&
97
+ ui.mount
98
+ ) {
99
+ ui.mount(${componentName}, window.__joystick_ssr_props__ || {}, document.getElementById('app'));
100
+ }
101
+
102
+ export default ${componentName};
103
+ `
104
+ );
105
+ }
106
+ return {
107
+ contents,
108
+ loader: "js"
109
+ };
110
+ }
111
+ } catch (exception) {
112
+ console.warn(exception);
113
+ }
114
+ });
115
+ build.onEnd(() => {
116
+ return new Promise((resolve) => {
117
+ const shouldSetComponentId = [
118
+ getPlatformSafePath("ui/"),
119
+ getPlatformSafePath("email/")
120
+ ].some((bootstrapTarget) => {
121
+ return build.initialOptions.outfile.includes(bootstrapTarget);
122
+ });
123
+ if (shouldSetComponentId) {
124
+ const file = fs.readFileSync(build.initialOptions.outfile, "utf-8");
125
+ const joystickUIMatches = file?.match(JOYSTICK_COMPONENT_REGEX) || [];
126
+ if (joystickUIMatches?.length > 0) {
127
+ let contents = setComponentId(file)?.replace(
128
+ /\.component\(\/\*\*\//g,
129
+ ".component("
130
+ );
131
+ fs.writeFileSync(build.initialOptions.outfile, contents);
132
+ }
133
+ }
134
+ resolve();
135
+ });
136
+ });
137
+ }
138
+ },
139
+ generateFileDependencyMap: {
140
+ name: "generateFileDependencyMap",
141
+ setup(build) {
142
+ build.onLoad({ filter: /\.js$/ }, (args) => {
143
+ try {
144
+ const canAddToMap = ![
145
+ "node_modules",
146
+ ".joystick",
147
+ "?",
148
+ "commonjsHelpers.js"
149
+ ].some((excludedPath) => {
150
+ return getPlatformSafePath(args.path).includes(excludedPath);
151
+ });
152
+ if (canAddToMap) {
153
+ const code = fs.readFileSync(
154
+ getPlatformSafePath(args.path),
155
+ "utf-8"
156
+ );
157
+ updateFileMap(getPlatformSafePath(args.path), code);
158
+ }
159
+ } catch (exception) {
160
+ console.warn(exception);
161
+ }
162
+ });
163
+ }
164
+ },
165
+ warnNodeEnvironment: {
166
+ name: "warnNodeEnvironment",
167
+ setup(build) {
168
+ build.onLoad({ filter: /\.js$/ }, (args = {}) => {
169
+ const code = fs.readFileSync(args.path, "utf-8");
170
+ if (code?.match(/process.env.NODE_ENV\s+=\s/gi)?.length) {
171
+ console.warn(
172
+ chalk.yellowBright(
173
+ "\n[WARNING] process.env.NODE_ENV should only be set via a CLI flag in development or via external environment variables in production.\n"
174
+ )
175
+ );
176
+ }
177
+ });
178
+ }
179
+ }
180
+ };
181
+ export {
182
+ buildPlugins_default as default
183
+ };
@@ -0,0 +1,18 @@
1
+ import net from "net";
2
+ var checkIfPortAvailable_default = (port) => {
3
+ return new Promise((resolve, reject) => {
4
+ const testServer = net.createServer();
5
+ testServer.once("error", function(err) {
6
+ if (err.code != "EADDRINUSE")
7
+ return callback(err);
8
+ resolve(false);
9
+ }).once("listening", function() {
10
+ testServer.once("close", function() {
11
+ resolve(true);
12
+ }).close();
13
+ }).listen(port);
14
+ });
15
+ };
16
+ export {
17
+ checkIfPortAvailable_default as default
18
+ };
@@ -0,0 +1,18 @@
1
+ import ps from "ps-node";
2
+ process.title = "joystick_cleanup";
3
+ const killProcess = (pid = 0) => {
4
+ return new Promise((resolve) => {
5
+ ps.kill(pid, () => {
6
+ resolve();
7
+ });
8
+ });
9
+ };
10
+ process.on("message", async (message) => {
11
+ const parsedMessage = JSON.parse(message);
12
+ const processIds = parsedMessage?.processIds;
13
+ for (let i = 0; i < processIds?.length; i += 1) {
14
+ const processId = processIds[i];
15
+ await killProcess(processId);
16
+ }
17
+ process.exit();
18
+ });
@@ -0,0 +1,42 @@
1
+ var availableQueryParameters_default = [
2
+ "replicaSet",
3
+ "tls",
4
+ "ssl",
5
+ "tlsCertificateKeyFile",
6
+ "tlsCertificateKeyFilePassword",
7
+ "tlsCAFile",
8
+ "tlsAllowInvalidCertificates",
9
+ "tlsAllowInvalidHostnames",
10
+ "tlsInsecure",
11
+ "connectTimeoutMS",
12
+ "socketTimeoutMS",
13
+ "compressors",
14
+ "zlibCompressionLevel",
15
+ "maxPoolSize",
16
+ "minPoolSize",
17
+ "maxIdleTimeMS",
18
+ "waitQueueMultiple",
19
+ "waitQueueTimeoutMS",
20
+ "w",
21
+ "wtimeoutMS",
22
+ "journal",
23
+ "readConcernLevel",
24
+ "readPreference",
25
+ "maxStalenessSeconds",
26
+ "readPreferenceTags",
27
+ "authSource",
28
+ "authMechanism",
29
+ "authMechanismProperties",
30
+ "gssapiServiceName",
31
+ "localThresholdMS",
32
+ "serverSelectionTimeoutMS",
33
+ "serverSelectionTryOnce",
34
+ "heartbeatFrequencyMS",
35
+ "appName",
36
+ "retryReads",
37
+ "retryWrites",
38
+ "uuidRepresentation"
39
+ ];
40
+ export {
41
+ availableQueryParameters_default as default
42
+ };
@@ -0,0 +1,22 @@
1
+ import buildQueryParameters from "./buildQueryParameters.js";
2
+ import serializeQueryParameters from "../../../../lib/serializeQueryParameters.js";
3
+ var buildConnectionString_default = (connection = {}) => {
4
+ let connectionString = "mongodb://";
5
+ if (connection && (connection.username || connection.password)) {
6
+ connectionString = `${connectionString}${connection.username || connection.password ? `${connection.username || ""}${!!connection.username && !!connection.password ? ":" : ""}${connection.password || ""}@` : ""}`;
7
+ }
8
+ if (connection && connection.hosts && Array.isArray(connection.hosts)) {
9
+ connectionString = `${connectionString}${connection.hosts.map((host) => `${host.hostname}:${host.port}`).join(",")}`;
10
+ }
11
+ if (connection && connection.database) {
12
+ connectionString = `${connectionString}/${connection.database}`;
13
+ }
14
+ const queryParameters = buildQueryParameters(connection);
15
+ if (Object.keys(queryParameters)?.length > 0) {
16
+ connectionString = `${connectionString}?${serializeQueryParameters(queryParameters)}`;
17
+ }
18
+ return connectionString;
19
+ };
20
+ export {
21
+ buildConnectionString_default as default
22
+ };