Repository navigation
Expand file tree
/
Copy pathinit.js
More file actions
109 lines (102 loc) · 2.87 KB
/
Copy pathinit.js
File metadata and controls
109 lines (102 loc) · 2.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
import path from 'node:path';
import fs from 'fs/promises';
import inquirer from 'inquirer';
import _ from 'lodash';
import { replaceInFileSync } from 'replace-in-file';
const SEMVER_PATTERN =
/(?<=^v?|\sv?)(?:(?:0|[1-9]\d{0,9}?)\.){2}(?:0|[1-9]\d{0,9})(?:-(?:--+)?(?:0|[1-9]\d*|\d*[a-z]+\d*)){0,100}(?=$| |\+|\.)(?:(?<=-\S+)(?:\.(?:--?|[\da-z-]*[a-z-]\d*|0|[1-9]\d*)){1,100}?)?(?!\.)(?:\+(?:[\da-z]\.?-?){1,100}?(?!\w))?(?!\+)/gi;
const currentPath = process.cwd().split(path.sep);
const currentDirectoryName = currentPath[currentPath.length - 1];
const questions = [
{
type: 'input',
name: 'packageName',
message: 'Package name (package.json)',
default: () => currentDirectoryName,
validate: value => {
if (!value) {
return 'Enter a package name';
}
if (
!value.match(
/^(?:@[a-z0-9-*~][a-z0-9-*._~]*\/)?[a-z0-9-~][a-z0-9-._~]*$/,
)
) {
return 'Incorrect package name';
}
if (value.length > 214) {
return 'Package name is too long';
}
return true;
},
},
{
type: 'input',
name: 'pageTitleHtml',
message: 'App title (HTML title tag)',
default: ({ packageName }) => _.startCase(packageName),
},
{
type: 'input',
name: 'pageTitleLayout',
message: 'App title (app layout)',
default: ({ pageTitleHtml }) => pageTitleHtml,
},
{
type: 'input',
name: 'dockerContainerName',
message: 'Docker container name',
default: ({ packageName }) => packageName,
},
{
type: 'input',
name: 'dockerImageName',
message: 'Docker image name',
default: ({ dockerContainerName }) =>
`registry.gitlab.com/${dockerContainerName}/${dockerContainerName}:latest`,
},
{
type: 'input',
name: 'version',
message: 'Version (package.json)',
validate: value => {
if (value.match(SEMVER_PATTERN)) {
return true;
}
return 'Enter a valid version number (e.g. 1.0.0, 1.0.0-alpha.1)';
},
default: () => '1.0.0',
},
{
type: 'confirm',
name: 'createDotEnv',
message: 'Create .env file?',
default: () => true,
},
];
(async () => {
const answers = await inquirer.prompt(questions);
if (answers.createDotEnv) {
await fs.cp('./.env.example', './.env');
}
const results = replaceInFileSync({
files: [
'package.json',
'index.html',
'src/client/platform/layout/HeaderMenu.tsx',
'docker-compose.prod.yaml',
],
processor: input => _.template(input)(answers),
});
const filesUpdated = results.filter(result => result.hasChanged);
console.log(`${filesUpdated.length || 0} files updated:`);
console.log(
results
.filter(result => result.hasChanged)
.map(result => ` \x1b[32m ${result.file} \x1b[0m`)
.join('\n'),
);
console.log(
answers.createDotEnv ? 'Created .env file' : '.env file not created',
);
})();