create-strapi-app 5.12.1 → 5.12.3
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.
- package/dist/cloud.js +65 -0
- package/dist/cloud.js.map +1 -0
- package/dist/cloud.mjs +63 -0
- package/dist/cloud.mjs.map +1 -0
- package/dist/create-strapi.js +251 -0
- package/dist/create-strapi.js.map +1 -0
- package/dist/create-strapi.mjs +249 -0
- package/dist/create-strapi.mjs.map +1 -0
- package/dist/index.js +35 -1330
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +15 -1291
- package/dist/index.mjs.map +1 -1
- package/dist/prompts.js +66 -0
- package/dist/prompts.js.map +1 -0
- package/dist/prompts.mjs +60 -0
- package/dist/prompts.mjs.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/dist/types.mjs +6 -0
- package/dist/types.mjs.map +1 -0
- package/dist/utils/check-install-path.js +28 -0
- package/dist/utils/check-install-path.js.map +1 -0
- package/dist/utils/check-install-path.mjs +26 -0
- package/dist/utils/check-install-path.mjs.map +1 -0
- package/dist/utils/check-requirements.js +26 -0
- package/dist/utils/check-requirements.js.map +1 -0
- package/dist/utils/check-requirements.mjs +24 -0
- package/dist/utils/check-requirements.mjs.map +1 -0
- package/dist/utils/database.js +190 -0
- package/dist/utils/database.js.map +1 -0
- package/dist/utils/database.mjs +187 -0
- package/dist/utils/database.mjs.map +1 -0
- package/dist/utils/dot-env.js +46 -0
- package/dist/utils/dot-env.js.map +1 -0
- package/dist/utils/dot-env.mjs +44 -0
- package/dist/utils/dot-env.mjs.map +1 -0
- package/dist/utils/engines.js +9 -0
- package/dist/utils/engines.js.map +1 -0
- package/dist/utils/engines.mjs +7 -0
- package/dist/utils/engines.mjs.map +1 -0
- package/dist/utils/get-package-manager-args.js +135 -0
- package/dist/utils/get-package-manager-args.js.map +1 -0
- package/dist/utils/get-package-manager-args.mjs +132 -0
- package/dist/utils/get-package-manager-args.mjs.map +1 -0
- package/dist/utils/git.js +73 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/git.mjs +71 -0
- package/dist/utils/git.mjs.map +1 -0
- package/dist/utils/gitignore.js +139 -0
- package/dist/utils/gitignore.js.map +1 -0
- package/dist/utils/gitignore.mjs +137 -0
- package/dist/utils/gitignore.mjs.map +1 -0
- package/dist/utils/logger.js +54 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/logger.mjs +52 -0
- package/dist/utils/logger.mjs.map +1 -0
- package/dist/utils/machine-id.js +17 -0
- package/dist/utils/machine-id.js.map +1 -0
- package/dist/utils/machine-id.mjs +15 -0
- package/dist/utils/machine-id.mjs.map +1 -0
- package/dist/utils/package-json.js +32 -0
- package/dist/utils/package-json.js.map +1 -0
- package/dist/utils/package-json.mjs +30 -0
- package/dist/utils/package-json.mjs.map +1 -0
- package/dist/utils/parse-to-chalk.js +25 -0
- package/dist/utils/parse-to-chalk.js.map +1 -0
- package/dist/utils/parse-to-chalk.mjs +23 -0
- package/dist/utils/parse-to-chalk.mjs.map +1 -0
- package/dist/utils/template.js +180 -0
- package/dist/utils/template.js.map +1 -0
- package/dist/utils/template.mjs +159 -0
- package/dist/utils/template.mjs.map +1 -0
- package/dist/utils/usage.js +90 -0
- package/dist/utils/usage.js.map +1 -0
- package/dist/utils/usage.mjs +87 -0
- package/dist/utils/usage.mjs.map +1 -0
- package/package.json +4 -4
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var inquirer = require('inquirer');
|
|
4
|
+
var logger = require('./logger.js');
|
|
5
|
+
|
|
6
|
+
const DBOptions = [
|
|
7
|
+
'dbclient',
|
|
8
|
+
'dbhost',
|
|
9
|
+
'dbport',
|
|
10
|
+
'dbname',
|
|
11
|
+
'dbusername',
|
|
12
|
+
'dbpassword'
|
|
13
|
+
];
|
|
14
|
+
const VALID_CLIENTS = [
|
|
15
|
+
'sqlite',
|
|
16
|
+
'mysql',
|
|
17
|
+
'postgres'
|
|
18
|
+
];
|
|
19
|
+
const DEFAULT_CONFIG = {
|
|
20
|
+
client: 'sqlite',
|
|
21
|
+
connection: {
|
|
22
|
+
filename: '.tmp/data.db'
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
async function dbPrompt() {
|
|
26
|
+
const { useDefault } = await inquirer.prompt([
|
|
27
|
+
{
|
|
28
|
+
type: 'confirm',
|
|
29
|
+
name: 'useDefault',
|
|
30
|
+
message: 'Do you want to use the default database (sqlite) ?',
|
|
31
|
+
default: true
|
|
32
|
+
}
|
|
33
|
+
]);
|
|
34
|
+
if (useDefault) {
|
|
35
|
+
return DEFAULT_CONFIG;
|
|
36
|
+
}
|
|
37
|
+
const { client } = await inquirer.prompt([
|
|
38
|
+
{
|
|
39
|
+
type: 'list',
|
|
40
|
+
name: 'client',
|
|
41
|
+
message: 'Choose your default database client',
|
|
42
|
+
choices: [
|
|
43
|
+
'sqlite',
|
|
44
|
+
'postgres',
|
|
45
|
+
'mysql'
|
|
46
|
+
],
|
|
47
|
+
default: 'sqlite'
|
|
48
|
+
}
|
|
49
|
+
]);
|
|
50
|
+
const questions = dbQuestions[client].map((q)=>q({
|
|
51
|
+
client
|
|
52
|
+
}));
|
|
53
|
+
const responses = await inquirer.prompt(questions);
|
|
54
|
+
return {
|
|
55
|
+
client,
|
|
56
|
+
connection: responses
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
async function getDatabaseInfos(options) {
|
|
60
|
+
if (options.skipDb) {
|
|
61
|
+
return DEFAULT_CONFIG;
|
|
62
|
+
}
|
|
63
|
+
if (options.dbclient && !VALID_CLIENTS.includes(options.dbclient)) {
|
|
64
|
+
logger.logger.fatal(`Invalid --dbclient: ${options.dbclient}, expected one of ${VALID_CLIENTS.join(', ')}`);
|
|
65
|
+
}
|
|
66
|
+
const matchingArgs = DBOptions.filter((key)=>key in options);
|
|
67
|
+
const missingArgs = DBOptions.filter((key)=>!(key in options));
|
|
68
|
+
if (matchingArgs.length > 0 && matchingArgs.length !== DBOptions.length && options.dbclient !== 'sqlite') {
|
|
69
|
+
logger.logger.fatal(`Required database arguments are missing: ${missingArgs.join(', ')}.`);
|
|
70
|
+
}
|
|
71
|
+
const hasDBOptions = DBOptions.some((key)=>key in options);
|
|
72
|
+
if (!hasDBOptions) {
|
|
73
|
+
if (options.quickstart) {
|
|
74
|
+
return DEFAULT_CONFIG;
|
|
75
|
+
}
|
|
76
|
+
return dbPrompt();
|
|
77
|
+
}
|
|
78
|
+
if (!options.dbclient) {
|
|
79
|
+
return logger.logger.fatal('Please specify the database client');
|
|
80
|
+
}
|
|
81
|
+
const database = {
|
|
82
|
+
client: options.dbclient,
|
|
83
|
+
connection: {
|
|
84
|
+
host: options.dbhost,
|
|
85
|
+
port: options.dbport,
|
|
86
|
+
database: options.dbname,
|
|
87
|
+
username: options.dbusername,
|
|
88
|
+
password: options.dbpassword,
|
|
89
|
+
filename: options.dbfile
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
if (options.dbssl !== undefined) {
|
|
93
|
+
database.connection.ssl = options.dbssl === 'true';
|
|
94
|
+
}
|
|
95
|
+
return database;
|
|
96
|
+
}
|
|
97
|
+
const sqlClientModule = {
|
|
98
|
+
mysql: {
|
|
99
|
+
mysql2: '3.9.8'
|
|
100
|
+
},
|
|
101
|
+
postgres: {
|
|
102
|
+
pg: '8.8.0'
|
|
103
|
+
},
|
|
104
|
+
sqlite: {
|
|
105
|
+
'better-sqlite3': '11.3.0'
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
function addDatabaseDependencies(scope) {
|
|
109
|
+
scope.dependencies = {
|
|
110
|
+
...scope.dependencies,
|
|
111
|
+
...sqlClientModule[scope.database.client]
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
const DEFAULT_PORTS = {
|
|
115
|
+
postgres: 5432,
|
|
116
|
+
mysql: 3306,
|
|
117
|
+
sqlite: undefined
|
|
118
|
+
};
|
|
119
|
+
const database = ()=>({
|
|
120
|
+
type: 'input',
|
|
121
|
+
name: 'database',
|
|
122
|
+
message: 'Database name:',
|
|
123
|
+
default: 'strapi',
|
|
124
|
+
validate (value) {
|
|
125
|
+
if (value.includes('.')) {
|
|
126
|
+
return `The database name can't contain a "."`;
|
|
127
|
+
}
|
|
128
|
+
return true;
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
const host = ()=>({
|
|
132
|
+
type: 'input',
|
|
133
|
+
name: 'host',
|
|
134
|
+
message: 'Host:',
|
|
135
|
+
default: '127.0.0.1'
|
|
136
|
+
});
|
|
137
|
+
const port = ({ client })=>({
|
|
138
|
+
type: 'input',
|
|
139
|
+
name: 'port',
|
|
140
|
+
message: 'Port:',
|
|
141
|
+
default: DEFAULT_PORTS[client]
|
|
142
|
+
});
|
|
143
|
+
const username = ()=>({
|
|
144
|
+
type: 'input',
|
|
145
|
+
name: 'username',
|
|
146
|
+
message: 'Username:'
|
|
147
|
+
});
|
|
148
|
+
const password = ()=>({
|
|
149
|
+
type: 'password',
|
|
150
|
+
name: 'password',
|
|
151
|
+
message: 'Password:',
|
|
152
|
+
mask: '*'
|
|
153
|
+
});
|
|
154
|
+
const ssl = ()=>({
|
|
155
|
+
type: 'confirm',
|
|
156
|
+
name: 'ssl',
|
|
157
|
+
message: 'Enable SSL connection:',
|
|
158
|
+
default: false
|
|
159
|
+
});
|
|
160
|
+
const filename = ()=>({
|
|
161
|
+
type: 'input',
|
|
162
|
+
name: 'filename',
|
|
163
|
+
message: 'Filename:',
|
|
164
|
+
default: '.tmp/data.db'
|
|
165
|
+
});
|
|
166
|
+
const dbQuestions = {
|
|
167
|
+
sqlite: [
|
|
168
|
+
filename
|
|
169
|
+
],
|
|
170
|
+
postgres: [
|
|
171
|
+
database,
|
|
172
|
+
host,
|
|
173
|
+
port,
|
|
174
|
+
username,
|
|
175
|
+
password,
|
|
176
|
+
ssl
|
|
177
|
+
],
|
|
178
|
+
mysql: [
|
|
179
|
+
database,
|
|
180
|
+
host,
|
|
181
|
+
port,
|
|
182
|
+
username,
|
|
183
|
+
password,
|
|
184
|
+
ssl
|
|
185
|
+
]
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
exports.addDatabaseDependencies = addDatabaseDependencies;
|
|
189
|
+
exports.getDatabaseInfos = getDatabaseInfos;
|
|
190
|
+
//# sourceMappingURL=database.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.js","sources":["../../src/utils/database.ts"],"sourcesContent":["import inquirer from 'inquirer';\nimport type { Question } from 'inquirer';\n\nimport type { Scope, Options, DBClient, DBConfig } from '../types';\nimport { logger } from './logger';\n\nconst DBOptions = ['dbclient', 'dbhost', 'dbport', 'dbname', 'dbusername', 'dbpassword'];\n\nconst VALID_CLIENTS = ['sqlite', 'mysql', 'postgres'] as const;\n\nconst DEFAULT_CONFIG: DBConfig = {\n client: 'sqlite',\n connection: {\n filename: '.tmp/data.db',\n },\n};\n\nasync function dbPrompt() {\n const { useDefault } = await inquirer.prompt<{ useDefault: boolean }>([\n {\n type: 'confirm',\n name: 'useDefault',\n message: 'Do you want to use the default database (sqlite) ?',\n default: true,\n },\n ]);\n\n if (useDefault) {\n return DEFAULT_CONFIG;\n }\n\n const { client } = await inquirer.prompt<{ client: DBClient }>([\n {\n type: 'list',\n name: 'client',\n message: 'Choose your default database client',\n choices: ['sqlite', 'postgres', 'mysql'],\n default: 'sqlite',\n },\n ]);\n\n const questions = dbQuestions[client].map((q) => q({ client }));\n\n const responses = await inquirer.prompt(questions);\n\n return {\n client,\n connection: responses,\n };\n}\n\nexport async function getDatabaseInfos(options: Options): Promise<DBConfig> {\n if (options.skipDb) {\n return DEFAULT_CONFIG;\n }\n\n if (options.dbclient && !VALID_CLIENTS.includes(options.dbclient)) {\n logger.fatal(\n `Invalid --dbclient: ${options.dbclient}, expected one of ${VALID_CLIENTS.join(', ')}`\n );\n }\n\n const matchingArgs = DBOptions.filter((key) => key in options);\n const missingArgs = DBOptions.filter((key) => !(key in options));\n\n if (\n matchingArgs.length > 0 &&\n matchingArgs.length !== DBOptions.length &&\n options.dbclient !== 'sqlite'\n ) {\n logger.fatal(`Required database arguments are missing: ${missingArgs.join(', ')}.`);\n }\n\n const hasDBOptions = DBOptions.some((key) => key in options);\n\n if (!hasDBOptions) {\n if (options.quickstart) {\n return DEFAULT_CONFIG;\n }\n\n return dbPrompt();\n }\n\n if (!options.dbclient) {\n return logger.fatal('Please specify the database client');\n }\n\n const database: DBConfig = {\n client: options.dbclient,\n connection: {\n host: options.dbhost,\n port: options.dbport,\n database: options.dbname,\n username: options.dbusername,\n password: options.dbpassword,\n filename: options.dbfile,\n },\n };\n\n if (options.dbssl !== undefined) {\n database.connection.ssl = options.dbssl === 'true';\n }\n\n return database;\n}\n\nconst sqlClientModule = {\n mysql: { mysql2: '3.9.8' },\n postgres: { pg: '8.8.0' },\n sqlite: { 'better-sqlite3': '11.3.0' },\n};\n\nexport function addDatabaseDependencies(scope: Scope) {\n scope.dependencies = {\n ...scope.dependencies,\n ...sqlClientModule[scope.database.client],\n };\n}\n\ninterface QuestionFactory {\n (options: { client: DBClient }): Question;\n}\n\nconst DEFAULT_PORTS = {\n postgres: 5432,\n mysql: 3306,\n sqlite: undefined,\n};\n\nconst database: QuestionFactory = () => ({\n type: 'input',\n name: 'database',\n message: 'Database name:',\n default: 'strapi',\n validate(value: string) {\n if (value.includes('.')) {\n return `The database name can't contain a \".\"`;\n }\n\n return true;\n },\n});\n\nconst host: QuestionFactory = () => ({\n type: 'input',\n name: 'host',\n message: 'Host:',\n default: '127.0.0.1',\n});\n\nconst port: QuestionFactory = ({ client }) => ({\n type: 'input',\n name: 'port',\n message: 'Port:',\n default: DEFAULT_PORTS[client],\n});\n\nconst username: QuestionFactory = () => ({\n type: 'input',\n name: 'username',\n message: 'Username:',\n});\n\nconst password: QuestionFactory = () => ({\n type: 'password',\n name: 'password',\n message: 'Password:',\n mask: '*',\n});\n\nconst ssl: QuestionFactory = () => ({\n type: 'confirm',\n name: 'ssl',\n message: 'Enable SSL connection:',\n default: false,\n});\n\nconst filename: QuestionFactory = () => ({\n type: 'input',\n name: 'filename',\n message: 'Filename:',\n default: '.tmp/data.db',\n});\n\nconst dbQuestions = {\n sqlite: [filename],\n postgres: [database, host, port, username, password, ssl],\n mysql: [database, host, port, username, password, ssl],\n};\n"],"names":["DBOptions","VALID_CLIENTS","DEFAULT_CONFIG","client","connection","filename","dbPrompt","useDefault","inquirer","prompt","type","name","message","default","choices","questions","dbQuestions","map","q","responses","getDatabaseInfos","options","skipDb","dbclient","includes","logger","fatal","join","matchingArgs","filter","key","missingArgs","length","hasDBOptions","some","quickstart","database","host","dbhost","port","dbport","dbname","username","dbusername","password","dbpassword","dbfile","dbssl","undefined","ssl","sqlClientModule","mysql","mysql2","postgres","pg","sqlite","addDatabaseDependencies","scope","dependencies","DEFAULT_PORTS","validate","value","mask"],"mappings":"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"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import inquirer from 'inquirer';
|
|
2
|
+
import { logger } from './logger.mjs';
|
|
3
|
+
|
|
4
|
+
const DBOptions = [
|
|
5
|
+
'dbclient',
|
|
6
|
+
'dbhost',
|
|
7
|
+
'dbport',
|
|
8
|
+
'dbname',
|
|
9
|
+
'dbusername',
|
|
10
|
+
'dbpassword'
|
|
11
|
+
];
|
|
12
|
+
const VALID_CLIENTS = [
|
|
13
|
+
'sqlite',
|
|
14
|
+
'mysql',
|
|
15
|
+
'postgres'
|
|
16
|
+
];
|
|
17
|
+
const DEFAULT_CONFIG = {
|
|
18
|
+
client: 'sqlite',
|
|
19
|
+
connection: {
|
|
20
|
+
filename: '.tmp/data.db'
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
async function dbPrompt() {
|
|
24
|
+
const { useDefault } = await inquirer.prompt([
|
|
25
|
+
{
|
|
26
|
+
type: 'confirm',
|
|
27
|
+
name: 'useDefault',
|
|
28
|
+
message: 'Do you want to use the default database (sqlite) ?',
|
|
29
|
+
default: true
|
|
30
|
+
}
|
|
31
|
+
]);
|
|
32
|
+
if (useDefault) {
|
|
33
|
+
return DEFAULT_CONFIG;
|
|
34
|
+
}
|
|
35
|
+
const { client } = await inquirer.prompt([
|
|
36
|
+
{
|
|
37
|
+
type: 'list',
|
|
38
|
+
name: 'client',
|
|
39
|
+
message: 'Choose your default database client',
|
|
40
|
+
choices: [
|
|
41
|
+
'sqlite',
|
|
42
|
+
'postgres',
|
|
43
|
+
'mysql'
|
|
44
|
+
],
|
|
45
|
+
default: 'sqlite'
|
|
46
|
+
}
|
|
47
|
+
]);
|
|
48
|
+
const questions = dbQuestions[client].map((q)=>q({
|
|
49
|
+
client
|
|
50
|
+
}));
|
|
51
|
+
const responses = await inquirer.prompt(questions);
|
|
52
|
+
return {
|
|
53
|
+
client,
|
|
54
|
+
connection: responses
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
async function getDatabaseInfos(options) {
|
|
58
|
+
if (options.skipDb) {
|
|
59
|
+
return DEFAULT_CONFIG;
|
|
60
|
+
}
|
|
61
|
+
if (options.dbclient && !VALID_CLIENTS.includes(options.dbclient)) {
|
|
62
|
+
logger.fatal(`Invalid --dbclient: ${options.dbclient}, expected one of ${VALID_CLIENTS.join(', ')}`);
|
|
63
|
+
}
|
|
64
|
+
const matchingArgs = DBOptions.filter((key)=>key in options);
|
|
65
|
+
const missingArgs = DBOptions.filter((key)=>!(key in options));
|
|
66
|
+
if (matchingArgs.length > 0 && matchingArgs.length !== DBOptions.length && options.dbclient !== 'sqlite') {
|
|
67
|
+
logger.fatal(`Required database arguments are missing: ${missingArgs.join(', ')}.`);
|
|
68
|
+
}
|
|
69
|
+
const hasDBOptions = DBOptions.some((key)=>key in options);
|
|
70
|
+
if (!hasDBOptions) {
|
|
71
|
+
if (options.quickstart) {
|
|
72
|
+
return DEFAULT_CONFIG;
|
|
73
|
+
}
|
|
74
|
+
return dbPrompt();
|
|
75
|
+
}
|
|
76
|
+
if (!options.dbclient) {
|
|
77
|
+
return logger.fatal('Please specify the database client');
|
|
78
|
+
}
|
|
79
|
+
const database = {
|
|
80
|
+
client: options.dbclient,
|
|
81
|
+
connection: {
|
|
82
|
+
host: options.dbhost,
|
|
83
|
+
port: options.dbport,
|
|
84
|
+
database: options.dbname,
|
|
85
|
+
username: options.dbusername,
|
|
86
|
+
password: options.dbpassword,
|
|
87
|
+
filename: options.dbfile
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
if (options.dbssl !== undefined) {
|
|
91
|
+
database.connection.ssl = options.dbssl === 'true';
|
|
92
|
+
}
|
|
93
|
+
return database;
|
|
94
|
+
}
|
|
95
|
+
const sqlClientModule = {
|
|
96
|
+
mysql: {
|
|
97
|
+
mysql2: '3.9.8'
|
|
98
|
+
},
|
|
99
|
+
postgres: {
|
|
100
|
+
pg: '8.8.0'
|
|
101
|
+
},
|
|
102
|
+
sqlite: {
|
|
103
|
+
'better-sqlite3': '11.3.0'
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
function addDatabaseDependencies(scope) {
|
|
107
|
+
scope.dependencies = {
|
|
108
|
+
...scope.dependencies,
|
|
109
|
+
...sqlClientModule[scope.database.client]
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
const DEFAULT_PORTS = {
|
|
113
|
+
postgres: 5432,
|
|
114
|
+
mysql: 3306,
|
|
115
|
+
sqlite: undefined
|
|
116
|
+
};
|
|
117
|
+
const database = ()=>({
|
|
118
|
+
type: 'input',
|
|
119
|
+
name: 'database',
|
|
120
|
+
message: 'Database name:',
|
|
121
|
+
default: 'strapi',
|
|
122
|
+
validate (value) {
|
|
123
|
+
if (value.includes('.')) {
|
|
124
|
+
return `The database name can't contain a "."`;
|
|
125
|
+
}
|
|
126
|
+
return true;
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
const host = ()=>({
|
|
130
|
+
type: 'input',
|
|
131
|
+
name: 'host',
|
|
132
|
+
message: 'Host:',
|
|
133
|
+
default: '127.0.0.1'
|
|
134
|
+
});
|
|
135
|
+
const port = ({ client })=>({
|
|
136
|
+
type: 'input',
|
|
137
|
+
name: 'port',
|
|
138
|
+
message: 'Port:',
|
|
139
|
+
default: DEFAULT_PORTS[client]
|
|
140
|
+
});
|
|
141
|
+
const username = ()=>({
|
|
142
|
+
type: 'input',
|
|
143
|
+
name: 'username',
|
|
144
|
+
message: 'Username:'
|
|
145
|
+
});
|
|
146
|
+
const password = ()=>({
|
|
147
|
+
type: 'password',
|
|
148
|
+
name: 'password',
|
|
149
|
+
message: 'Password:',
|
|
150
|
+
mask: '*'
|
|
151
|
+
});
|
|
152
|
+
const ssl = ()=>({
|
|
153
|
+
type: 'confirm',
|
|
154
|
+
name: 'ssl',
|
|
155
|
+
message: 'Enable SSL connection:',
|
|
156
|
+
default: false
|
|
157
|
+
});
|
|
158
|
+
const filename = ()=>({
|
|
159
|
+
type: 'input',
|
|
160
|
+
name: 'filename',
|
|
161
|
+
message: 'Filename:',
|
|
162
|
+
default: '.tmp/data.db'
|
|
163
|
+
});
|
|
164
|
+
const dbQuestions = {
|
|
165
|
+
sqlite: [
|
|
166
|
+
filename
|
|
167
|
+
],
|
|
168
|
+
postgres: [
|
|
169
|
+
database,
|
|
170
|
+
host,
|
|
171
|
+
port,
|
|
172
|
+
username,
|
|
173
|
+
password,
|
|
174
|
+
ssl
|
|
175
|
+
],
|
|
176
|
+
mysql: [
|
|
177
|
+
database,
|
|
178
|
+
host,
|
|
179
|
+
port,
|
|
180
|
+
username,
|
|
181
|
+
password,
|
|
182
|
+
ssl
|
|
183
|
+
]
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
export { addDatabaseDependencies, getDatabaseInfos };
|
|
187
|
+
//# sourceMappingURL=database.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.mjs","sources":["../../src/utils/database.ts"],"sourcesContent":["import inquirer from 'inquirer';\nimport type { Question } from 'inquirer';\n\nimport type { Scope, Options, DBClient, DBConfig } from '../types';\nimport { logger } from './logger';\n\nconst DBOptions = ['dbclient', 'dbhost', 'dbport', 'dbname', 'dbusername', 'dbpassword'];\n\nconst VALID_CLIENTS = ['sqlite', 'mysql', 'postgres'] as const;\n\nconst DEFAULT_CONFIG: DBConfig = {\n client: 'sqlite',\n connection: {\n filename: '.tmp/data.db',\n },\n};\n\nasync function dbPrompt() {\n const { useDefault } = await inquirer.prompt<{ useDefault: boolean }>([\n {\n type: 'confirm',\n name: 'useDefault',\n message: 'Do you want to use the default database (sqlite) ?',\n default: true,\n },\n ]);\n\n if (useDefault) {\n return DEFAULT_CONFIG;\n }\n\n const { client } = await inquirer.prompt<{ client: DBClient }>([\n {\n type: 'list',\n name: 'client',\n message: 'Choose your default database client',\n choices: ['sqlite', 'postgres', 'mysql'],\n default: 'sqlite',\n },\n ]);\n\n const questions = dbQuestions[client].map((q) => q({ client }));\n\n const responses = await inquirer.prompt(questions);\n\n return {\n client,\n connection: responses,\n };\n}\n\nexport async function getDatabaseInfos(options: Options): Promise<DBConfig> {\n if (options.skipDb) {\n return DEFAULT_CONFIG;\n }\n\n if (options.dbclient && !VALID_CLIENTS.includes(options.dbclient)) {\n logger.fatal(\n `Invalid --dbclient: ${options.dbclient}, expected one of ${VALID_CLIENTS.join(', ')}`\n );\n }\n\n const matchingArgs = DBOptions.filter((key) => key in options);\n const missingArgs = DBOptions.filter((key) => !(key in options));\n\n if (\n matchingArgs.length > 0 &&\n matchingArgs.length !== DBOptions.length &&\n options.dbclient !== 'sqlite'\n ) {\n logger.fatal(`Required database arguments are missing: ${missingArgs.join(', ')}.`);\n }\n\n const hasDBOptions = DBOptions.some((key) => key in options);\n\n if (!hasDBOptions) {\n if (options.quickstart) {\n return DEFAULT_CONFIG;\n }\n\n return dbPrompt();\n }\n\n if (!options.dbclient) {\n return logger.fatal('Please specify the database client');\n }\n\n const database: DBConfig = {\n client: options.dbclient,\n connection: {\n host: options.dbhost,\n port: options.dbport,\n database: options.dbname,\n username: options.dbusername,\n password: options.dbpassword,\n filename: options.dbfile,\n },\n };\n\n if (options.dbssl !== undefined) {\n database.connection.ssl = options.dbssl === 'true';\n }\n\n return database;\n}\n\nconst sqlClientModule = {\n mysql: { mysql2: '3.9.8' },\n postgres: { pg: '8.8.0' },\n sqlite: { 'better-sqlite3': '11.3.0' },\n};\n\nexport function addDatabaseDependencies(scope: Scope) {\n scope.dependencies = {\n ...scope.dependencies,\n ...sqlClientModule[scope.database.client],\n };\n}\n\ninterface QuestionFactory {\n (options: { client: DBClient }): Question;\n}\n\nconst DEFAULT_PORTS = {\n postgres: 5432,\n mysql: 3306,\n sqlite: undefined,\n};\n\nconst database: QuestionFactory = () => ({\n type: 'input',\n name: 'database',\n message: 'Database name:',\n default: 'strapi',\n validate(value: string) {\n if (value.includes('.')) {\n return `The database name can't contain a \".\"`;\n }\n\n return true;\n },\n});\n\nconst host: QuestionFactory = () => ({\n type: 'input',\n name: 'host',\n message: 'Host:',\n default: '127.0.0.1',\n});\n\nconst port: QuestionFactory = ({ client }) => ({\n type: 'input',\n name: 'port',\n message: 'Port:',\n default: DEFAULT_PORTS[client],\n});\n\nconst username: QuestionFactory = () => ({\n type: 'input',\n name: 'username',\n message: 'Username:',\n});\n\nconst password: QuestionFactory = () => ({\n type: 'password',\n name: 'password',\n message: 'Password:',\n mask: '*',\n});\n\nconst ssl: QuestionFactory = () => ({\n type: 'confirm',\n name: 'ssl',\n message: 'Enable SSL connection:',\n default: false,\n});\n\nconst filename: QuestionFactory = () => ({\n type: 'input',\n name: 'filename',\n message: 'Filename:',\n default: '.tmp/data.db',\n});\n\nconst dbQuestions = {\n sqlite: [filename],\n postgres: [database, host, port, username, password, ssl],\n mysql: [database, host, port, username, password, ssl],\n};\n"],"names":["DBOptions","VALID_CLIENTS","DEFAULT_CONFIG","client","connection","filename","dbPrompt","useDefault","inquirer","prompt","type","name","message","default","choices","questions","dbQuestions","map","q","responses","getDatabaseInfos","options","skipDb","dbclient","includes","logger","fatal","join","matchingArgs","filter","key","missingArgs","length","hasDBOptions","some","quickstart","database","host","dbhost","port","dbport","dbname","username","dbusername","password","dbpassword","dbfile","dbssl","undefined","ssl","sqlClientModule","mysql","mysql2","postgres","pg","sqlite","addDatabaseDependencies","scope","dependencies","DEFAULT_PORTS","validate","value","mask"],"mappings":";;;AAMA,MAAMA,SAAY,GAAA;AAAC,IAAA,UAAA;AAAY,IAAA,QAAA;AAAU,IAAA,QAAA;AAAU,IAAA,QAAA;AAAU,IAAA,YAAA;AAAc,IAAA;AAAa,CAAA;AAExF,MAAMC,aAAgB,GAAA;AAAC,IAAA,QAAA;AAAU,IAAA,OAAA;AAAS,IAAA;AAAW,CAAA;AAErD,MAAMC,cAA2B,GAAA;IAC/BC,MAAQ,EAAA,QAAA;IACRC,UAAY,EAAA;QACVC,QAAU,EAAA;AACZ;AACF,CAAA;AAEA,eAAeC,QAAAA,GAAAA;AACb,IAAA,MAAM,EAAEC,UAAU,EAAE,GAAG,MAAMC,QAAAA,CAASC,MAAM,CAA0B;AACpE,QAAA;YACEC,IAAM,EAAA,SAAA;YACNC,IAAM,EAAA,YAAA;YACNC,OAAS,EAAA,oDAAA;YACTC,OAAS,EAAA;AACX;AACD,KAAA,CAAA;AAED,IAAA,IAAIN,UAAY,EAAA;QACd,OAAOL,cAAAA;AACT;AAEA,IAAA,MAAM,EAAEC,MAAM,EAAE,GAAG,MAAMK,QAAAA,CAASC,MAAM,CAAuB;AAC7D,QAAA;YACEC,IAAM,EAAA,MAAA;YACNC,IAAM,EAAA,QAAA;YACNC,OAAS,EAAA,qCAAA;YACTE,OAAS,EAAA;AAAC,gBAAA,QAAA;AAAU,gBAAA,UAAA;AAAY,gBAAA;AAAQ,aAAA;YACxCD,OAAS,EAAA;AACX;AACD,KAAA,CAAA;IAED,MAAME,SAAAA,GAAYC,WAAW,CAACb,MAAAA,CAAO,CAACc,GAAG,CAAC,CAACC,CAAAA,GAAMA,CAAE,CAAA;AAAEf,YAAAA;AAAO,SAAA,CAAA,CAAA;AAE5D,IAAA,MAAMgB,SAAY,GAAA,MAAMX,QAASC,CAAAA,MAAM,CAACM,SAAAA,CAAAA;IAExC,OAAO;AACLZ,QAAAA,MAAAA;QACAC,UAAYe,EAAAA;AACd,KAAA;AACF;AAEO,eAAeC,iBAAiBC,OAAgB,EAAA;IACrD,IAAIA,OAAAA,CAAQC,MAAM,EAAE;QAClB,OAAOpB,cAAAA;AACT;IAEA,IAAImB,OAAAA,CAAQE,QAAQ,IAAI,CAACtB,cAAcuB,QAAQ,CAACH,OAAQE,CAAAA,QAAQ,CAAG,EAAA;AACjEE,QAAAA,MAAAA,CAAOC,KAAK,CACV,CAAC,oBAAoB,EAAEL,OAAQE,CAAAA,QAAQ,CAAC,kBAAkB,EAAEtB,aAAAA,CAAc0B,IAAI,CAAC,MAAM,CAAC,CAAA;AAE1F;AAEA,IAAA,MAAMC,eAAe5B,SAAU6B,CAAAA,MAAM,CAAC,CAACC,MAAQA,GAAOT,IAAAA,OAAAA,CAAAA;IACtD,MAAMU,WAAAA,GAAc/B,UAAU6B,MAAM,CAAC,CAACC,GAAQ,GAAA,EAAEA,GAAAA,IAAOT,OAAM,CAAA,CAAA;AAE7D,IAAA,IACEO,YAAaI,CAAAA,MAAM,GAAG,CAAA,IACtBJ,YAAaI,CAAAA,MAAM,KAAKhC,SAAAA,CAAUgC,MAAM,IACxCX,OAAQE,CAAAA,QAAQ,KAAK,QACrB,EAAA;QACAE,MAAOC,CAAAA,KAAK,CAAC,CAAC,yCAAyC,EAAEK,YAAYJ,IAAI,CAAC,IAAM,CAAA,CAAA,CAAC,CAAC,CAAA;AACpF;AAEA,IAAA,MAAMM,eAAejC,SAAUkC,CAAAA,IAAI,CAAC,CAACJ,MAAQA,GAAOT,IAAAA,OAAAA,CAAAA;AAEpD,IAAA,IAAI,CAACY,YAAc,EAAA;QACjB,IAAIZ,OAAAA,CAAQc,UAAU,EAAE;YACtB,OAAOjC,cAAAA;AACT;QAEA,OAAOI,QAAAA,EAAAA;AACT;IAEA,IAAI,CAACe,OAAQE,CAAAA,QAAQ,EAAE;QACrB,OAAOE,MAAAA,CAAOC,KAAK,CAAC,oCAAA,CAAA;AACtB;AAEA,IAAA,MAAMU,QAAqB,GAAA;AACzBjC,QAAAA,MAAAA,EAAQkB,QAAQE,QAAQ;QACxBnB,UAAY,EAAA;AACViC,YAAAA,IAAAA,EAAMhB,QAAQiB,MAAM;AACpBC,YAAAA,IAAAA,EAAMlB,QAAQmB,MAAM;AACpBJ,YAAAA,QAAAA,EAAUf,QAAQoB,MAAM;AACxBC,YAAAA,QAAAA,EAAUrB,QAAQsB,UAAU;AAC5BC,YAAAA,QAAAA,EAAUvB,QAAQwB,UAAU;AAC5BxC,YAAAA,QAAAA,EAAUgB,QAAQyB;AACpB;AACF,KAAA;IAEA,IAAIzB,OAAAA,CAAQ0B,KAAK,KAAKC,SAAW,EAAA;AAC/BZ,QAAAA,QAAAA,CAAShC,UAAU,CAAC6C,GAAG,GAAG5B,OAAAA,CAAQ0B,KAAK,KAAK,MAAA;AAC9C;IAEA,OAAOX,QAAAA;AACT;AAEA,MAAMc,eAAkB,GAAA;IACtBC,KAAO,EAAA;QAAEC,MAAQ,EAAA;AAAQ,KAAA;IACzBC,QAAU,EAAA;QAAEC,EAAI,EAAA;AAAQ,KAAA;IACxBC,MAAQ,EAAA;QAAE,gBAAkB,EAAA;AAAS;AACvC,CAAA;AAEO,SAASC,wBAAwBC,KAAY,EAAA;AAClDA,IAAAA,KAAAA,CAAMC,YAAY,GAAG;AACnB,QAAA,GAAGD,MAAMC,YAAY;AACrB,QAAA,GAAGR,eAAe,CAACO,KAAAA,CAAMrB,QAAQ,CAACjC,MAAM;AAC1C,KAAA;AACF;AAMA,MAAMwD,aAAgB,GAAA;IACpBN,QAAU,EAAA,IAAA;IACVF,KAAO,EAAA,IAAA;IACPI,MAAQP,EAAAA;AACV,CAAA;AAEA,MAAMZ,QAAAA,GAA4B,KAAO;QACvC1B,IAAM,EAAA,OAAA;QACNC,IAAM,EAAA,UAAA;QACNC,OAAS,EAAA,gBAAA;QACTC,OAAS,EAAA,QAAA;AACT+C,QAAAA,QAAAA,CAAAA,CAASC,KAAa,EAAA;YACpB,IAAIA,KAAAA,CAAMrC,QAAQ,CAAC,GAAM,CAAA,EAAA;gBACvB,OAAO,CAAC,qCAAqC,CAAC;AAChD;YAEA,OAAO,IAAA;AACT;KACF,CAAA;AAEA,MAAMa,IAAAA,GAAwB,KAAO;QACnC3B,IAAM,EAAA,OAAA;QACNC,IAAM,EAAA,MAAA;QACNC,OAAS,EAAA,OAAA;QACTC,OAAS,EAAA;KACX,CAAA;AAEA,MAAM0B,OAAwB,CAAC,EAAEpC,MAAM,EAAE,IAAM;QAC7CO,IAAM,EAAA,OAAA;QACNC,IAAM,EAAA,MAAA;QACNC,OAAS,EAAA,OAAA;QACTC,OAAS8C,EAAAA,aAAa,CAACxD,MAAO;KAChC,CAAA;AAEA,MAAMuC,QAAAA,GAA4B,KAAO;QACvChC,IAAM,EAAA,OAAA;QACNC,IAAM,EAAA,UAAA;QACNC,OAAS,EAAA;KACX,CAAA;AAEA,MAAMgC,QAAAA,GAA4B,KAAO;QACvClC,IAAM,EAAA,UAAA;QACNC,IAAM,EAAA,UAAA;QACNC,OAAS,EAAA,WAAA;QACTkD,IAAM,EAAA;KACR,CAAA;AAEA,MAAMb,GAAAA,GAAuB,KAAO;QAClCvC,IAAM,EAAA,SAAA;QACNC,IAAM,EAAA,KAAA;QACNC,OAAS,EAAA,wBAAA;QACTC,OAAS,EAAA;KACX,CAAA;AAEA,MAAMR,QAAAA,GAA4B,KAAO;QACvCK,IAAM,EAAA,OAAA;QACNC,IAAM,EAAA,UAAA;QACNC,OAAS,EAAA,WAAA;QACTC,OAAS,EAAA;KACX,CAAA;AAEA,MAAMG,WAAc,GAAA;IAClBuC,MAAQ,EAAA;AAAClD,QAAAA;AAAS,KAAA;IAClBgD,QAAU,EAAA;AAACjB,QAAAA,QAAAA;AAAUC,QAAAA,IAAAA;AAAME,QAAAA,IAAAA;AAAMG,QAAAA,QAAAA;AAAUE,QAAAA,QAAAA;AAAUK,QAAAA;AAAI,KAAA;IACzDE,KAAO,EAAA;AAACf,QAAAA,QAAAA;AAAUC,QAAAA,IAAAA;AAAME,QAAAA,IAAAA;AAAMG,QAAAA,QAAAA;AAAUE,QAAAA,QAAAA;AAAUK,QAAAA;AAAI;AACxD,CAAA;;;;"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var crypto = require('crypto');
|
|
4
|
+
var _ = require('lodash');
|
|
5
|
+
|
|
6
|
+
const generateASecret = ()=>crypto.randomBytes(16).toString('base64');
|
|
7
|
+
const envTmpl = `
|
|
8
|
+
# Server
|
|
9
|
+
HOST=0.0.0.0
|
|
10
|
+
PORT=1337
|
|
11
|
+
|
|
12
|
+
# Secrets
|
|
13
|
+
APP_KEYS=<%= appKeys %>
|
|
14
|
+
API_TOKEN_SALT=<%= apiTokenSalt %>
|
|
15
|
+
ADMIN_JWT_SECRET=<%= adminJwtToken %>
|
|
16
|
+
TRANSFER_TOKEN_SALT=<%= transferTokenSalt %>
|
|
17
|
+
|
|
18
|
+
# Database
|
|
19
|
+
DATABASE_CLIENT=<%= database.client %>
|
|
20
|
+
DATABASE_HOST=<%= database.connection.host %>
|
|
21
|
+
DATABASE_PORT=<%= database.connection.port %>
|
|
22
|
+
DATABASE_NAME=<%= database.connection.database %>
|
|
23
|
+
DATABASE_USERNAME=<%= database.connection.username %>
|
|
24
|
+
DATABASE_PASSWORD=<%= database.connection.password %>
|
|
25
|
+
DATABASE_SSL=<%= database.connection.ssl %>
|
|
26
|
+
DATABASE_FILENAME=<%= database.connection.filename %>
|
|
27
|
+
`;
|
|
28
|
+
function generateDotEnv(scope) {
|
|
29
|
+
const compile = _.template(envTmpl);
|
|
30
|
+
return compile({
|
|
31
|
+
appKeys: new Array(4).fill(null).map(generateASecret).join(','),
|
|
32
|
+
apiTokenSalt: generateASecret(),
|
|
33
|
+
transferTokenSalt: generateASecret(),
|
|
34
|
+
adminJwtToken: generateASecret(),
|
|
35
|
+
database: {
|
|
36
|
+
client: scope.database.client,
|
|
37
|
+
connection: {
|
|
38
|
+
...scope.database.connection,
|
|
39
|
+
ssl: scope.database.connection?.ssl || false
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
exports.generateDotEnv = generateDotEnv;
|
|
46
|
+
//# sourceMappingURL=dot-env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dot-env.js","sources":["../../src/utils/dot-env.ts"],"sourcesContent":["import crypto from 'crypto';\nimport _ from 'lodash';\n\nimport type { Scope } from '../types';\n\nconst generateASecret = () => crypto.randomBytes(16).toString('base64');\n\nconst envTmpl = `\n# Server\nHOST=0.0.0.0\nPORT=1337\n\n# Secrets\nAPP_KEYS=<%= appKeys %>\nAPI_TOKEN_SALT=<%= apiTokenSalt %>\nADMIN_JWT_SECRET=<%= adminJwtToken %>\nTRANSFER_TOKEN_SALT=<%= transferTokenSalt %>\n\n# Database\nDATABASE_CLIENT=<%= database.client %>\nDATABASE_HOST=<%= database.connection.host %>\nDATABASE_PORT=<%= database.connection.port %>\nDATABASE_NAME=<%= database.connection.database %>\nDATABASE_USERNAME=<%= database.connection.username %>\nDATABASE_PASSWORD=<%= database.connection.password %>\nDATABASE_SSL=<%= database.connection.ssl %>\nDATABASE_FILENAME=<%= database.connection.filename %>\n`;\n\nexport function generateDotEnv(scope: Scope) {\n const compile = _.template(envTmpl);\n\n return compile({\n appKeys: new Array(4).fill(null).map(generateASecret).join(','),\n apiTokenSalt: generateASecret(),\n transferTokenSalt: generateASecret(),\n adminJwtToken: generateASecret(),\n database: {\n client: scope.database.client,\n connection: {\n ...scope.database.connection,\n ssl: scope.database.connection?.ssl || false,\n },\n },\n });\n}\n"],"names":["generateASecret","crypto","randomBytes","toString","envTmpl","generateDotEnv","scope","compile","_","template","appKeys","Array","fill","map","join","apiTokenSalt","transferTokenSalt","adminJwtToken","database","client","connection","ssl"],"mappings":";;;;;AAKA,MAAMA,kBAAkB,IAAMC,MAAAA,CAAOC,WAAW,CAAC,EAAA,CAAA,CAAIC,QAAQ,CAAC,QAAA,CAAA;AAE9D,MAAMC,UAAU;;;;;;;;;;;;;;;;;;;;AAoBhB,CAAC;AAEM,SAASC,eAAeC,KAAY,EAAA;IACzC,MAAMC,OAAAA,GAAUC,CAAEC,CAAAA,QAAQ,CAACL,OAAAA,CAAAA;AAE3B,IAAA,OAAOG,OAAQ,CAAA;QACbG,OAAS,EAAA,IAAIC,KAAM,CAAA,CAAA,CAAA,CAAGC,IAAI,CAAC,MAAMC,GAAG,CAACb,eAAiBc,CAAAA,CAAAA,IAAI,CAAC,GAAA,CAAA;QAC3DC,YAAcf,EAAAA,eAAAA,EAAAA;QACdgB,iBAAmBhB,EAAAA,eAAAA,EAAAA;QACnBiB,aAAejB,EAAAA,eAAAA,EAAAA;QACfkB,QAAU,EAAA;YACRC,MAAQb,EAAAA,KAAAA,CAAMY,QAAQ,CAACC,MAAM;YAC7BC,UAAY,EAAA;gBACV,GAAGd,KAAAA,CAAMY,QAAQ,CAACE,UAAU;AAC5BC,gBAAAA,GAAAA,EAAKf,KAAMY,CAAAA,QAAQ,CAACE,UAAU,EAAEC,GAAO,IAAA;AACzC;AACF;AACF,KAAA,CAAA;AACF;;;;"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import crypto from 'crypto';
|
|
2
|
+
import _ from 'lodash';
|
|
3
|
+
|
|
4
|
+
const generateASecret = ()=>crypto.randomBytes(16).toString('base64');
|
|
5
|
+
const envTmpl = `
|
|
6
|
+
# Server
|
|
7
|
+
HOST=0.0.0.0
|
|
8
|
+
PORT=1337
|
|
9
|
+
|
|
10
|
+
# Secrets
|
|
11
|
+
APP_KEYS=<%= appKeys %>
|
|
12
|
+
API_TOKEN_SALT=<%= apiTokenSalt %>
|
|
13
|
+
ADMIN_JWT_SECRET=<%= adminJwtToken %>
|
|
14
|
+
TRANSFER_TOKEN_SALT=<%= transferTokenSalt %>
|
|
15
|
+
|
|
16
|
+
# Database
|
|
17
|
+
DATABASE_CLIENT=<%= database.client %>
|
|
18
|
+
DATABASE_HOST=<%= database.connection.host %>
|
|
19
|
+
DATABASE_PORT=<%= database.connection.port %>
|
|
20
|
+
DATABASE_NAME=<%= database.connection.database %>
|
|
21
|
+
DATABASE_USERNAME=<%= database.connection.username %>
|
|
22
|
+
DATABASE_PASSWORD=<%= database.connection.password %>
|
|
23
|
+
DATABASE_SSL=<%= database.connection.ssl %>
|
|
24
|
+
DATABASE_FILENAME=<%= database.connection.filename %>
|
|
25
|
+
`;
|
|
26
|
+
function generateDotEnv(scope) {
|
|
27
|
+
const compile = _.template(envTmpl);
|
|
28
|
+
return compile({
|
|
29
|
+
appKeys: new Array(4).fill(null).map(generateASecret).join(','),
|
|
30
|
+
apiTokenSalt: generateASecret(),
|
|
31
|
+
transferTokenSalt: generateASecret(),
|
|
32
|
+
adminJwtToken: generateASecret(),
|
|
33
|
+
database: {
|
|
34
|
+
client: scope.database.client,
|
|
35
|
+
connection: {
|
|
36
|
+
...scope.database.connection,
|
|
37
|
+
ssl: scope.database.connection?.ssl || false
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export { generateDotEnv };
|
|
44
|
+
//# sourceMappingURL=dot-env.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dot-env.mjs","sources":["../../src/utils/dot-env.ts"],"sourcesContent":["import crypto from 'crypto';\nimport _ from 'lodash';\n\nimport type { Scope } from '../types';\n\nconst generateASecret = () => crypto.randomBytes(16).toString('base64');\n\nconst envTmpl = `\n# Server\nHOST=0.0.0.0\nPORT=1337\n\n# Secrets\nAPP_KEYS=<%= appKeys %>\nAPI_TOKEN_SALT=<%= apiTokenSalt %>\nADMIN_JWT_SECRET=<%= adminJwtToken %>\nTRANSFER_TOKEN_SALT=<%= transferTokenSalt %>\n\n# Database\nDATABASE_CLIENT=<%= database.client %>\nDATABASE_HOST=<%= database.connection.host %>\nDATABASE_PORT=<%= database.connection.port %>\nDATABASE_NAME=<%= database.connection.database %>\nDATABASE_USERNAME=<%= database.connection.username %>\nDATABASE_PASSWORD=<%= database.connection.password %>\nDATABASE_SSL=<%= database.connection.ssl %>\nDATABASE_FILENAME=<%= database.connection.filename %>\n`;\n\nexport function generateDotEnv(scope: Scope) {\n const compile = _.template(envTmpl);\n\n return compile({\n appKeys: new Array(4).fill(null).map(generateASecret).join(','),\n apiTokenSalt: generateASecret(),\n transferTokenSalt: generateASecret(),\n adminJwtToken: generateASecret(),\n database: {\n client: scope.database.client,\n connection: {\n ...scope.database.connection,\n ssl: scope.database.connection?.ssl || false,\n },\n },\n });\n}\n"],"names":["generateASecret","crypto","randomBytes","toString","envTmpl","generateDotEnv","scope","compile","_","template","appKeys","Array","fill","map","join","apiTokenSalt","transferTokenSalt","adminJwtToken","database","client","connection","ssl"],"mappings":";;;AAKA,MAAMA,kBAAkB,IAAMC,MAAAA,CAAOC,WAAW,CAAC,EAAA,CAAA,CAAIC,QAAQ,CAAC,QAAA,CAAA;AAE9D,MAAMC,UAAU;;;;;;;;;;;;;;;;;;;;AAoBhB,CAAC;AAEM,SAASC,eAAeC,KAAY,EAAA;IACzC,MAAMC,OAAAA,GAAUC,CAAEC,CAAAA,QAAQ,CAACL,OAAAA,CAAAA;AAE3B,IAAA,OAAOG,OAAQ,CAAA;QACbG,OAAS,EAAA,IAAIC,KAAM,CAAA,CAAA,CAAA,CAAGC,IAAI,CAAC,MAAMC,GAAG,CAACb,eAAiBc,CAAAA,CAAAA,IAAI,CAAC,GAAA,CAAA;QAC3DC,YAAcf,EAAAA,eAAAA,EAAAA;QACdgB,iBAAmBhB,EAAAA,eAAAA,EAAAA;QACnBiB,aAAejB,EAAAA,eAAAA,EAAAA;QACfkB,QAAU,EAAA;YACRC,MAAQb,EAAAA,KAAAA,CAAMY,QAAQ,CAACC,MAAM;YAC7BC,UAAY,EAAA;gBACV,GAAGd,KAAAA,CAAMY,QAAQ,CAACE,UAAU;AAC5BC,gBAAAA,GAAAA,EAAKf,KAAMY,CAAAA,QAAQ,CAACE,UAAU,EAAEC,GAAO,IAAA;AACzC;AACF;AACF,KAAA,CAAA;AACF;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engines.js","sources":["../../src/utils/engines.ts"],"sourcesContent":["export const engines = {\n node: '>=18.0.0 <=22.x.x',\n npm: '>=6.0.0',\n};\n"],"names":["engines","node","npm"],"mappings":";;MAAaA,OAAU,GAAA;IACrBC,IAAM,EAAA,mBAAA;IACNC,GAAK,EAAA;AACP;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engines.mjs","sources":["../../src/utils/engines.ts"],"sourcesContent":["export const engines = {\n node: '>=18.0.0 <=22.x.x',\n npm: '>=6.0.0',\n};\n"],"names":["engines","node","npm"],"mappings":"MAAaA,OAAU,GAAA;IACrBC,IAAM,EAAA,mBAAA;IACNC,GAAK,EAAA;AACP;;;;"}
|