@deenruv/create 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/LICENSE +23 -0
  2. package/README.md +52 -0
  3. package/assets/.env.hbs +14 -0
  4. package/assets/Dockerfile.hbs +9 -0
  5. package/assets/deenruv-config.hbs +109 -0
  6. package/assets/docker-compose.hbs +39 -0
  7. package/assets/environment.d.hbs +24 -0
  8. package/assets/gitignore.template +5 -0
  9. package/assets/images/abel-y-costa-716024-unsplash.jpg +0 -0
  10. package/assets/images/adam-birkett-239153-unsplash.jpg +0 -0
  11. package/assets/images/alex-rodriguez-santibanez-200278-unsplash.jpg +0 -0
  12. package/assets/images/alexander-andrews-260988-unsplash.jpg +0 -0
  13. package/assets/images/alexandru-acea-686569-unsplash.jpg +0 -0
  14. package/assets/images/andres-jasso-220776-unsplash.jpg +0 -0
  15. package/assets/images/annie-spratt-78044-unsplash.jpg +0 -0
  16. package/assets/images/ben-hershey-574483-unsplash.jpg +0 -0
  17. package/assets/images/benjamin-voros-310026-unsplash.jpg +0 -0
  18. package/assets/images/brandi-redd-104140-unsplash.jpg +0 -0
  19. package/assets/images/caleb-george-536388-unsplash.jpg +0 -0
  20. package/assets/images/charles-deluvio-695736-unsplash.jpg +0 -0
  21. package/assets/images/chuttersnap-324234-unsplash.jpg +0 -0
  22. package/assets/images/chuttersnap-584518-unsplash.jpg +0 -0
  23. package/assets/images/daniel-korpai-1302051-unsplash.jpg +0 -0
  24. package/assets/images/derick-david-409858-unsplash.jpg +0 -0
  25. package/assets/images/eniko-kis-663725-unsplash.jpg +0 -0
  26. package/assets/images/florian-klauer-14840-unsplash.jpg +0 -0
  27. package/assets/images/florian-olivo-1166419-unsplash.jpg +0 -0
  28. package/assets/images/imani-clovis-234736-unsplash.jpg +0 -0
  29. package/assets/images/jakob-owens-274337-unsplash.jpg +0 -0
  30. package/assets/images/jean-philippe-delberghe-1400011-unsplash.jpg +0 -0
  31. package/assets/images/jonathan-talbert-697262-unsplash.jpg +0 -0
  32. package/assets/images/juan-gomez-674574-unsplash.jpg +0 -0
  33. package/assets/images/kari-shea-398668-unsplash.jpg +0 -0
  34. package/assets/images/kelly-sikkema-685291-unsplash.jpg +0 -0
  35. package/assets/images/liam-briese-1128307-unsplash.jpg +0 -0
  36. package/assets/images/mark-tegethoff-667351-unsplash.jpg +0 -0
  37. package/assets/images/max-tarkhov-737999-unsplash.jpg +0 -0
  38. package/assets/images/michael-guite-571169-unsplash.jpg +0 -0
  39. package/assets/images/mikkel-bech-748940-unsplash.jpg +0 -0
  40. package/assets/images/mitch-lensink-256007-unsplash.jpg +0 -0
  41. package/assets/images/natalia-y-345738-unsplash.jpg +0 -0
  42. package/assets/images/nathan-fertig-249917-unsplash.jpg +0 -0
  43. package/assets/images/neonbrand-428982-unsplash.jpg +0 -0
  44. package/assets/images/neslihan-gunaydin-3493-unsplash.jpg +0 -0
  45. package/assets/images/nik-shuliahin-619349-unsplash.jpg +0 -0
  46. package/assets/images/nikolai-chernichenko-1299748-unsplash.jpg +0 -0
  47. package/assets/images/oscar-ivan-esquivel-arteaga-687447-unsplash.jpg +0 -0
  48. package/assets/images/patrick-brinksma-663044-unsplash.jpg +0 -0
  49. package/assets/images/paul-weaver-1120584-unsplash.jpg +0 -0
  50. package/assets/images/pierre-chatel-innocenti-483198-unsplash.jpg +0 -0
  51. package/assets/images/robert-shunev-528016-unsplash.jpg +0 -0
  52. package/assets/images/ruslan-bardash-351288-unsplash.jpg +0 -0
  53. package/assets/images/silvia-agrasar-227575-unsplash.jpg +0 -0
  54. package/assets/images/stoica-ionela-530966-unsplash.jpg +0 -0
  55. package/assets/images/thomas-q-1229169-unsplash.jpg +0 -0
  56. package/assets/images/thomas-serer-420833-unsplash.jpg +0 -0
  57. package/assets/images/tommy-bebo-600358-unsplash.jpg +0 -0
  58. package/assets/images/vincent-botta-736919-unsplash.jpg +0 -0
  59. package/assets/images/vincent-liu-525429-unsplash.jpg +0 -0
  60. package/assets/images/xavier-teo-469050-unsplash.jpg +0 -0
  61. package/assets/images/zoltan-kovacs-642412-unsplash.jpg +0 -0
  62. package/assets/images/zoltan-tasi-423051-unsplash.jpg +0 -0
  63. package/assets/index-worker.hbs +8 -0
  64. package/assets/index.hbs +8 -0
  65. package/assets/initial-data.json +1508 -0
  66. package/assets/products.csv +89 -0
  67. package/assets/readme.hbs +133 -0
  68. package/assets/tsconfig.template.json +20 -0
  69. package/index.js +2 -0
  70. package/lib/constants.d.ts +7 -0
  71. package/lib/constants.js +11 -0
  72. package/lib/constants.js.map +1 -0
  73. package/lib/create-deenruv-app.d.ts +2 -0
  74. package/lib/create-deenruv-app.js +269 -0
  75. package/lib/create-deenruv-app.js.map +1 -0
  76. package/lib/gather-user-responses.d.ts +10 -0
  77. package/lib/gather-user-responses.js +186 -0
  78. package/lib/gather-user-responses.js.map +1 -0
  79. package/lib/helpers.d.ts +29 -0
  80. package/lib/helpers.js +422 -0
  81. package/lib/helpers.js.map +1 -0
  82. package/lib/types.d.ts +19 -0
  83. package/lib/types.js +3 -0
  84. package/lib/types.js.map +1 -0
  85. package/package.json +51 -0
@@ -0,0 +1,269 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.createDeenruvApp = void 0;
30
+ const prompts_1 = require("@clack/prompts");
31
+ const commander_1 = require("commander");
32
+ const detect_port_1 = __importDefault(require("detect-port"));
33
+ const fs_extra_1 = __importDefault(require("fs-extra"));
34
+ const os_1 = __importDefault(require("os"));
35
+ const path_1 = __importDefault(require("path"));
36
+ const picocolors_1 = __importDefault(require("picocolors"));
37
+ const constants_1 = require("./constants");
38
+ const gather_user_responses_1 = require("./gather-user-responses");
39
+ const helpers_1 = require("./helpers");
40
+ const packageJson = require("../package.json");
41
+ (0, helpers_1.checkNodeVersion)(constants_1.REQUIRED_NODE_VERSION);
42
+ let projectName;
43
+ // Set the environment variable which can then be used to
44
+ // conditionally modify behaviour of core or plugins.
45
+ const createEnvVar = "CREATING_DEENRUV_APP";
46
+ process.env[createEnvVar] = "true";
47
+ commander_1.program
48
+ .version(packageJson.version)
49
+ .arguments("<project-directory>")
50
+ .usage(`${picocolors_1.default.green("<project-directory>")} [options]`)
51
+ .action((name) => {
52
+ projectName = name;
53
+ })
54
+ .option("--log-level <logLevel>", "Log level, either 'silent', 'info', or 'verbose'", /^(silent|info|verbose)$/i, "silent")
55
+ .option("--use-npm", "Uses npm rather than Yarn as the default package manager")
56
+ .option("--ci", "Runs without prompts for use in CI scenarios")
57
+ .parse(process.argv);
58
+ const options = commander_1.program.opts();
59
+ void createDeenruvApp(projectName, options.useNpm, options.logLevel || "silent", options.ci);
60
+ async function createDeenruvApp(name, useNpm, logLevel, isCi = false) {
61
+ if (!runPreChecks(name, useNpm)) {
62
+ return;
63
+ }
64
+ if (await (0, helpers_1.isServerPortInUse)()) {
65
+ console.log(picocolors_1.default.red(`Port ${constants_1.SERVER_PORT} is in use. Please make it available and then re-try.`));
66
+ process.exit(1);
67
+ }
68
+ (0, prompts_1.intro)(`Let's create a ${picocolors_1.default.blue(picocolors_1.default.bold("Deenruv App"))} ✨ ${picocolors_1.default.dim(`v${packageJson.version}`)}`);
69
+ const root = path_1.default.resolve(name);
70
+ const appName = path_1.default.basename(root);
71
+ const scaffoldExists = (0, helpers_1.scaffoldAlreadyExists)(root, name);
72
+ const yarnAvailable = (0, helpers_1.yarnIsAvailable)();
73
+ let packageManager = "npm";
74
+ if (yarnAvailable && !useNpm) {
75
+ packageManager = (await (0, prompts_1.select)({
76
+ message: "Which package manager should be used?",
77
+ options: [
78
+ { label: "npm", value: "npm" },
79
+ { label: "yarn", value: "yarn" },
80
+ ],
81
+ initialValue: "yarn",
82
+ }));
83
+ (0, gather_user_responses_1.checkCancel)(packageManager);
84
+ }
85
+ if (scaffoldExists) {
86
+ console.log(picocolors_1.default.yellow("It appears that a new Deenruv project scaffold already exists. Re-using the existing files..."));
87
+ console.log();
88
+ }
89
+ const { dbType, configSource, envSource, envDtsSource, indexSource, indexWorkerSource, readmeSource, dockerfileSource, dockerComposeSource, populateProducts, } = isCi
90
+ ? await (0, gather_user_responses_1.gatherCiUserResponses)(root, packageManager)
91
+ : await (0, gather_user_responses_1.gatherUserResponses)(root, scaffoldExists, packageManager);
92
+ const originalDirectory = process.cwd();
93
+ process.chdir(root);
94
+ if (packageManager !== "npm" && !(0, helpers_1.checkThatNpmCanReadCwd)()) {
95
+ process.exit(1);
96
+ }
97
+ const packageJsonContents = {
98
+ name: appName,
99
+ version: "0.1.0",
100
+ private: true,
101
+ scripts: {
102
+ "dev:server": "ts-node ./src/index.ts",
103
+ "dev:worker": "ts-node ./src/index-worker.ts",
104
+ dev: packageManager === "yarn"
105
+ ? "concurrently yarn:dev:*"
106
+ : "concurrently npm:dev:*",
107
+ build: "tsc",
108
+ "start:server": "node ./dist/index.js",
109
+ "start:worker": "node ./dist/index-worker.js",
110
+ start: packageManager === "yarn"
111
+ ? "concurrently yarn:start:*"
112
+ : "concurrently npm:start:*",
113
+ },
114
+ };
115
+ const setupSpinner = (0, prompts_1.spinner)();
116
+ setupSpinner.start(`Setting up your new Deenruv project in ${picocolors_1.default.green(root)}\nThis may take a few minutes...`);
117
+ const rootPathScript = (fileName) => path_1.default.join(root, `${fileName}.ts`);
118
+ const srcPathScript = (fileName) => path_1.default.join(root, "src", `${fileName}.ts`);
119
+ fs_extra_1.default.writeFileSync(path_1.default.join(root, "package.json"), JSON.stringify(packageJsonContents, null, 2) + os_1.default.EOL);
120
+ const { dependencies, devDependencies } = (0, helpers_1.getDependencies)(dbType, `@${packageJson.version}`);
121
+ setupSpinner.stop(`Created ${picocolors_1.default.green("package.json")}`);
122
+ const installSpinner = (0, prompts_1.spinner)();
123
+ installSpinner.start(`Installing ${dependencies[0]} + ${dependencies.length - 1} more dependencies`);
124
+ try {
125
+ await (0, helpers_1.installPackages)(root, packageManager === "yarn", dependencies, false, logLevel, isCi);
126
+ }
127
+ catch (e) {
128
+ (0, prompts_1.outro)(picocolors_1.default.red(`Failed to install dependencies. Please try again.`));
129
+ process.exit(1);
130
+ }
131
+ installSpinner.stop(`Successfully installed ${dependencies.length} dependencies`);
132
+ if (devDependencies.length) {
133
+ const installDevSpinner = (0, prompts_1.spinner)();
134
+ installDevSpinner.start(`Installing ${devDependencies[0]} + ${devDependencies.length - 1} more dev dependencies`);
135
+ try {
136
+ await (0, helpers_1.installPackages)(root, packageManager === "yarn", devDependencies, true, logLevel, isCi);
137
+ }
138
+ catch (e) {
139
+ (0, prompts_1.outro)(picocolors_1.default.red(`Failed to install dev dependencies. Please try again.`));
140
+ process.exit(1);
141
+ }
142
+ installDevSpinner.stop(`Successfully installed ${devDependencies.length} dev dependencies`);
143
+ }
144
+ const scaffoldSpinner = (0, prompts_1.spinner)();
145
+ scaffoldSpinner.start(`Generating app scaffold`);
146
+ fs_extra_1.default.ensureDirSync(path_1.default.join(root, "src"));
147
+ const assetPath = (fileName) => path_1.default.join(__dirname, "../assets", fileName);
148
+ const configFile = srcPathScript("deenruv-config");
149
+ try {
150
+ await fs_extra_1.default
151
+ .writeFile(configFile, configSource)
152
+ .then(() => fs_extra_1.default.writeFile(path_1.default.join(root, ".env"), envSource))
153
+ .then(() => fs_extra_1.default.writeFile(srcPathScript("environment.d"), envDtsSource))
154
+ .then(() => fs_extra_1.default.writeFile(srcPathScript("index"), indexSource))
155
+ .then(() => fs_extra_1.default.writeFile(srcPathScript("index-worker"), indexWorkerSource))
156
+ .then(() => fs_extra_1.default.writeFile(path_1.default.join(root, "README.md"), readmeSource))
157
+ .then(() => fs_extra_1.default.writeFile(path_1.default.join(root, "Dockerfile"), dockerfileSource))
158
+ .then(() => fs_extra_1.default.writeFile(path_1.default.join(root, "docker-compose.yml"), dockerComposeSource))
159
+ .then(() => fs_extra_1.default.mkdir(path_1.default.join(root, "src/plugins")))
160
+ .then(() => fs_extra_1.default.copyFile(assetPath("gitignore.template"), path_1.default.join(root, ".gitignore")))
161
+ .then(() => fs_extra_1.default.copyFile(assetPath("tsconfig.template.json"), path_1.default.join(root, "tsconfig.json")))
162
+ .then(() => createDirectoryStructure(root))
163
+ .then(() => copyEmailTemplates(root));
164
+ }
165
+ catch (e) {
166
+ (0, prompts_1.outro)(picocolors_1.default.red(`Failed to create app scaffold. Please try again.`));
167
+ process.exit(1);
168
+ }
169
+ scaffoldSpinner.stop(`Generated app scaffold`);
170
+ const populateSpinner = (0, prompts_1.spinner)();
171
+ populateSpinner.start(`Initializing your new Deenruv server`);
172
+ // register ts-node so that the config file can be loaded
173
+ require(path_1.default.join(root, "node_modules/ts-node")).register();
174
+ try {
175
+ const { populate } = await Promise.resolve(`${path_1.default.join(root, "node_modules/@deenruv/core/cli/populate")}`).then(s => __importStar(require(s)));
176
+ const { bootstrap, DefaultLogger, LogLevel, JobQueueService } = await Promise.resolve(`${path_1.default.join(root, "node_modules/@deenruv/core/dist/index")}`).then(s => __importStar(require(s)));
177
+ const { config } = await Promise.resolve(`${configFile}`).then(s => __importStar(require(s)));
178
+ const assetsDir = path_1.default.join(__dirname, "../assets");
179
+ const initialDataPath = path_1.default.join(assetsDir, "initial-data.json");
180
+ const port = await (0, detect_port_1.default)(3000);
181
+ const deenruvLogLevel = logLevel === "silent"
182
+ ? LogLevel.Error
183
+ : logLevel === "verbose"
184
+ ? LogLevel.Verbose
185
+ : LogLevel.Info;
186
+ const bootstrapFn = async () => {
187
+ var _a;
188
+ await (0, helpers_1.checkDbConnection)(config.dbConnectionOptions, root);
189
+ const _app = await bootstrap(Object.assign(Object.assign({}, config), { apiOptions: Object.assign(Object.assign({}, ((_a = config.apiOptions) !== null && _a !== void 0 ? _a : {})), { port }), silent: logLevel === "silent", dbConnectionOptions: Object.assign(Object.assign({}, config.dbConnectionOptions), { synchronize: true }), logger: new DefaultLogger({ level: deenruvLogLevel }), importExportOptions: {
190
+ importAssetsDir: path_1.default.join(assetsDir, "images"),
191
+ } }));
192
+ await _app.get(JobQueueService).start();
193
+ return _app;
194
+ };
195
+ const app = await populate(bootstrapFn, initialDataPath, populateProducts ? path_1.default.join(assetsDir, "products.csv") : undefined);
196
+ // Pause to ensure the worker jobs have time to complete.
197
+ if (isCi) {
198
+ console.log("[CI] Pausing before close...");
199
+ }
200
+ await new Promise((resolve) => setTimeout(resolve, isCi ? 30000 : 2000));
201
+ await app.close();
202
+ if (isCi) {
203
+ console.log("[CI] Pausing after close...");
204
+ await new Promise((resolve) => setTimeout(resolve, 10000));
205
+ }
206
+ }
207
+ catch (e) {
208
+ console.log(e);
209
+ (0, prompts_1.outro)(picocolors_1.default.red(`Failed to initialize server. Please try again.`));
210
+ process.exit(1);
211
+ }
212
+ populateSpinner.stop(`Server successfully initialized${populateProducts ? " and populated" : ""}`);
213
+ const startCommand = packageManager === "yarn" ? "yarn dev" : "npm run dev";
214
+ const nextSteps = [
215
+ `${picocolors_1.default.green("Success!")} Created a new Deenruv server at:`,
216
+ `\n`,
217
+ picocolors_1.default.italic(root),
218
+ `\n`,
219
+ `We suggest that you start by typing:`,
220
+ `\n`,
221
+ picocolors_1.default.gray("$ ") + picocolors_1.default.blue(picocolors_1.default.bold(`cd ${name}`)),
222
+ picocolors_1.default.gray("$ ") + picocolors_1.default.blue(picocolors_1.default.bold(`${startCommand}`)),
223
+ ];
224
+ (0, prompts_1.note)(nextSteps.join("\n"));
225
+ (0, prompts_1.outro)(`Happy hacking!`);
226
+ process.exit(0);
227
+ }
228
+ exports.createDeenruvApp = createDeenruvApp;
229
+ /**
230
+ * Run some initial checks to ensure that it is okay to proceed with creating
231
+ * a new Deenruv project in the given location.
232
+ */
233
+ function runPreChecks(name, useNpm) {
234
+ if (typeof name === "undefined") {
235
+ console.error("Please specify the project directory:");
236
+ console.log(` ${picocolors_1.default.cyan(commander_1.program.name())} ${picocolors_1.default.green("<project-directory>")}`);
237
+ console.log();
238
+ console.log("For example:");
239
+ console.log(` ${picocolors_1.default.cyan(commander_1.program.name())} ${picocolors_1.default.green("my-deenruv-app")}`);
240
+ process.exit(1);
241
+ return false;
242
+ }
243
+ const root = path_1.default.resolve(name);
244
+ fs_extra_1.default.ensureDirSync(name);
245
+ if (!(0, helpers_1.isSafeToCreateProjectIn)(root, name)) {
246
+ process.exit(1);
247
+ }
248
+ return true;
249
+ }
250
+ /**
251
+ * Generate the default directory structure for a new Deenruv project
252
+ */
253
+ async function createDirectoryStructure(root) {
254
+ await fs_extra_1.default.ensureDir(path_1.default.join(root, "static", "email", "test-emails"));
255
+ await fs_extra_1.default.ensureDir(path_1.default.join(root, "static", "assets"));
256
+ }
257
+ /**
258
+ * Copy the email templates into the app
259
+ */
260
+ async function copyEmailTemplates(root) {
261
+ const templateDir = path_1.default.join(root, "node_modules/@deenruv/email-plugin/templates");
262
+ try {
263
+ await fs_extra_1.default.copy(templateDir, path_1.default.join(root, "static", "email", "templates"));
264
+ }
265
+ catch (err) {
266
+ console.error(picocolors_1.default.red("Failed to copy email templates."));
267
+ }
268
+ }
269
+ //# sourceMappingURL=create-deenruv-app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-deenruv-app.js","sourceRoot":"","sources":["../src/create-deenruv-app.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { PackageManager, UserResponses } from "./types";
2
+ /**
3
+ * Prompts the user to determine how the new Deenruv app should be configured.
4
+ */
5
+ export declare function gatherUserResponses(root: string, alreadyRanScaffold: boolean, packageManager: PackageManager): Promise<UserResponses>;
6
+ /**
7
+ * Returns mock "user response" without prompting, for use in CI
8
+ */
9
+ export declare function gatherCiUserResponses(root: string, packageManager: PackageManager): Promise<UserResponses>;
10
+ export declare function checkCancel<T>(value: T | symbol): value is T;
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.checkCancel = exports.gatherCiUserResponses = exports.gatherUserResponses = void 0;
7
+ const prompts_1 = require("@clack/prompts");
8
+ const shared_constants_1 = require("@deenruv/common/lib/shared-constants");
9
+ const fs_extra_1 = __importDefault(require("fs-extra"));
10
+ const handlebars_1 = __importDefault(require("handlebars"));
11
+ const path_1 = __importDefault(require("path"));
12
+ /**
13
+ * Prompts the user to determine how the new Deenruv app should be configured.
14
+ */
15
+ async function gatherUserResponses(root, alreadyRanScaffold, packageManager) {
16
+ const dbType = (await (0, prompts_1.select)({
17
+ message: "Which database are you using?",
18
+ options: [
19
+ { label: "MySQL", value: "mysql" },
20
+ { label: "MariaDB", value: "mariadb" },
21
+ { label: "Postgres", value: "postgres" },
22
+ { label: "SQLite", value: "sqlite" },
23
+ { label: "SQL.js", value: "sqljs" },
24
+ ],
25
+ initialValue: "sqlite",
26
+ }));
27
+ checkCancel(dbType);
28
+ const hasConnection = dbType !== "sqlite" && dbType !== "sqljs";
29
+ const dbHost = hasConnection
30
+ ? await (0, prompts_1.text)({
31
+ message: "What's the database host address?",
32
+ initialValue: "localhost",
33
+ })
34
+ : "";
35
+ checkCancel(dbHost);
36
+ const dbPort = hasConnection
37
+ ? await (0, prompts_1.text)({
38
+ message: "What port is the database listening on?",
39
+ initialValue: defaultDBPort(dbType).toString(),
40
+ })
41
+ : "";
42
+ checkCancel(dbPort);
43
+ const dbName = hasConnection
44
+ ? await (0, prompts_1.text)({
45
+ message: "What's the name of the database?",
46
+ initialValue: "deenruv",
47
+ })
48
+ : "";
49
+ checkCancel(dbName);
50
+ const dbSchema = dbType === "postgres"
51
+ ? await (0, prompts_1.text)({
52
+ message: "What's the schema name we should use?",
53
+ initialValue: "public",
54
+ })
55
+ : "";
56
+ checkCancel(dbSchema);
57
+ const dbSSL = dbType === "postgres"
58
+ ? await (0, prompts_1.select)({
59
+ message: "Use SSL to connect to the database? (only enable if you database provider supports SSL)",
60
+ options: [
61
+ { label: "no", value: false },
62
+ { label: "yes", value: true },
63
+ ],
64
+ initialValue: false,
65
+ })
66
+ : false;
67
+ checkCancel(dbSSL);
68
+ const dbUserName = hasConnection
69
+ ? await (0, prompts_1.text)({
70
+ message: "What's the database user name?",
71
+ })
72
+ : "";
73
+ checkCancel(dbUserName);
74
+ const dbPassword = hasConnection
75
+ ? await (0, prompts_1.text)({
76
+ message: "What's the database password?",
77
+ defaultValue: "",
78
+ })
79
+ : "";
80
+ checkCancel(dbPassword);
81
+ const superadminIdentifier = await (0, prompts_1.text)({
82
+ message: "What identifier do you want to use for the superadmin user?",
83
+ initialValue: shared_constants_1.SUPER_ADMIN_USER_IDENTIFIER,
84
+ });
85
+ checkCancel(superadminIdentifier);
86
+ const superadminPassword = await (0, prompts_1.text)({
87
+ message: "What password do you want to use for the superadmin user?",
88
+ initialValue: shared_constants_1.SUPER_ADMIN_USER_PASSWORD,
89
+ });
90
+ checkCancel(superadminPassword);
91
+ const populateProducts = await (0, prompts_1.select)({
92
+ message: "Populate with some sample product data?",
93
+ options: [
94
+ { label: "yes", value: true },
95
+ { label: "no", value: false },
96
+ ],
97
+ initialValue: true,
98
+ });
99
+ checkCancel(populateProducts);
100
+ const answers = {
101
+ dbType,
102
+ dbHost,
103
+ dbPort,
104
+ dbName,
105
+ dbSchema,
106
+ dbUserName,
107
+ dbPassword,
108
+ dbSSL,
109
+ superadminIdentifier,
110
+ superadminPassword,
111
+ populateProducts,
112
+ };
113
+ return Object.assign(Object.assign({}, (await generateSources(root, answers, packageManager))), { dbType, populateProducts: answers.populateProducts, superadminIdentifier: answers.superadminIdentifier, superadminPassword: answers.superadminPassword });
114
+ }
115
+ exports.gatherUserResponses = gatherUserResponses;
116
+ /**
117
+ * Returns mock "user response" without prompting, for use in CI
118
+ */
119
+ async function gatherCiUserResponses(root, packageManager) {
120
+ const ciAnswers = {
121
+ dbType: "sqlite",
122
+ dbHost: "",
123
+ dbPort: "",
124
+ dbName: "deenruv",
125
+ dbUserName: "",
126
+ dbPassword: "",
127
+ populateProducts: true,
128
+ superadminIdentifier: shared_constants_1.SUPER_ADMIN_USER_IDENTIFIER,
129
+ superadminPassword: shared_constants_1.SUPER_ADMIN_USER_PASSWORD,
130
+ };
131
+ return Object.assign(Object.assign({}, (await generateSources(root, ciAnswers, packageManager))), { dbType: ciAnswers.dbType, populateProducts: ciAnswers.populateProducts, superadminIdentifier: ciAnswers.superadminIdentifier, superadminPassword: ciAnswers.superadminPassword });
132
+ }
133
+ exports.gatherCiUserResponses = gatherCiUserResponses;
134
+ function checkCancel(value) {
135
+ if ((0, prompts_1.isCancel)(value)) {
136
+ (0, prompts_1.cancel)("Setup cancelled.");
137
+ process.exit(0);
138
+ }
139
+ return true;
140
+ }
141
+ exports.checkCancel = checkCancel;
142
+ /**
143
+ * Create the server index, worker and config source code based on the options specified by the CLI prompts.
144
+ */
145
+ async function generateSources(root, answers, packageManager) {
146
+ const assetPath = (fileName) => path_1.default.join(__dirname, "../assets", fileName);
147
+ /**
148
+ * Helper to escape single quotes only. Used when generating the config file since e.g. passwords
149
+ * might use special chars (`< > ' "` etc) which Handlebars would be default convert to HTML entities.
150
+ * Instead, we disable escaping and use this custom helper to escape only the single quote character.
151
+ */
152
+ handlebars_1.default.registerHelper("escapeSingle", (aString) => {
153
+ return typeof aString === "string" ? aString.replace(/'/g, "\\'") : aString;
154
+ });
155
+ const templateContext = Object.assign(Object.assign({}, answers), { useYarn: packageManager === "yarn", dbType: answers.dbType === "sqlite" ? "better-sqlite3" : answers.dbType, name: path_1.default.basename(root), isSQLite: answers.dbType === "sqlite", isSQLjs: answers.dbType === "sqljs", requiresConnection: answers.dbType !== "sqlite" && answers.dbType !== "sqljs", cookieSecret: Math.random().toString(36).substr(2) });
156
+ async function createSourceFile(filename, noEscape = false) {
157
+ const template = await fs_extra_1.default.readFile(assetPath(filename), "utf-8");
158
+ return handlebars_1.default.compile(template, { noEscape })(templateContext);
159
+ }
160
+ return {
161
+ indexSource: await createSourceFile("index.hbs"),
162
+ indexWorkerSource: await createSourceFile("index-worker.hbs"),
163
+ configSource: await createSourceFile("deenruv-config.hbs", true),
164
+ envSource: await createSourceFile(".env.hbs", true),
165
+ envDtsSource: await createSourceFile("environment.d.hbs", true),
166
+ readmeSource: await createSourceFile("readme.hbs"),
167
+ dockerfileSource: await createSourceFile("Dockerfile.hbs"),
168
+ dockerComposeSource: await createSourceFile("docker-compose.hbs"),
169
+ };
170
+ }
171
+ function defaultDBPort(dbType) {
172
+ switch (dbType) {
173
+ case "mysql":
174
+ case "mariadb":
175
+ return 3306;
176
+ case "postgres":
177
+ return 5432;
178
+ case "mssql":
179
+ return 1433;
180
+ case "oracle":
181
+ return 1521;
182
+ default:
183
+ return 3306;
184
+ }
185
+ }
186
+ //# sourceMappingURL=gather-user-responses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gather-user-responses.js","sourceRoot":"","sources":["../src/gather-user-responses.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { CliLogLevel, DbType } from "./types";
2
+ /**
3
+ * If project only contains files generated by GH, it’s safe.
4
+ * Also, if project contains remnant error logs from a previous
5
+ * installation, lets remove them now.
6
+ * We also special case IJ-based products .idea because it integrates with CRA:
7
+ * https://github.com/facebook/create-react-app/pull/368#issuecomment-243446094
8
+ */
9
+ export declare function isSafeToCreateProjectIn(root: string, name: string): boolean;
10
+ export declare function scaffoldAlreadyExists(root: string, name: string): boolean;
11
+ export declare function checkNodeVersion(requiredVersion: string): void;
12
+ export declare function yarnIsAvailable(): boolean;
13
+ export declare function bunIsAvailable(): boolean;
14
+ export declare function checkThatNpmCanReadCwd(): boolean;
15
+ /**
16
+ * Install packages via npm or yarn.
17
+ * Based on the install function from https://github.com/facebook/create-react-app
18
+ */
19
+ export declare function installPackages(root: string, useYarn: boolean, dependencies: string[], isDev: boolean, logLevel: CliLogLevel, isCi?: boolean): Promise<void>;
20
+ export declare function getDependencies(dbType: DbType, deenruvPkgVersion?: string): {
21
+ dependencies: string[];
22
+ devDependencies: string[];
23
+ };
24
+ /**
25
+ * Checks that the specified DB connection options are working (i.e. a connection can be
26
+ * established) and that the named database exists.
27
+ */
28
+ export declare function checkDbConnection(options: any, root: string): Promise<true>;
29
+ export declare function isServerPortInUse(): Promise<boolean>;