-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcreate-from-template.js
121 lines (107 loc) · 3.77 KB
/
create-from-template.js
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
110
111
112
113
114
115
116
117
118
119
120
121
let chalk = require('chalk');
let { execSync } = require('child_process');
let fs = require('fs');
let replace = require('replace-in-file');
module.exports = async function(){
let inquirer = (await import('inquirer')).default;
let answers = await inquirer.prompt([{
name: 'UseCurrentFolder',
type: 'confirm',
message: 'Use current working directory as module directory?',
default: false,
}, {
name: 'ModuleName',
type: 'input',
message: 'Type your module name (capitalized with no space or symbol):',
default: 'Untitled',
}, {
name: 'SelectTemplate',
message: 'Select a template to start working on your module:',
type: 'rawlist',
choices: [{
name: 'ScarletsFrame - JavaScript', checked: true
}, {
name: 'ScarletsFrame - TypeScript'
}],
default: 0,
}]);
handleAnswers(answers);
console.log(`
---
${chalk.bold('Module Name:')} ${chalk.cyanBright(answers.ModuleName)}
${chalk.bold('Namespaces:')}
- ${chalk.bold('Node:')} ${chalk.cyanBright(answers.ModuleName+'/...')}
- ${chalk.bold('Interface Component:')} ${chalk.cyanBright('BPIC/'+answers.ModuleName+'/...')}
- ${chalk.bold('CSS rule set:')} ${chalk.cyanBright('bpic-'+answers.ModuleName+'-...')}
---
Use ${chalk.yellowBright('blackprint serve')} to start the module server
Then connect Blackprint Editor (on Development Mode) to the module server
`);
};
function handleAnswers(answers){
if(/[\\/:*?"<>|]/.test(answers.ModuleName) || answers.ModuleName.startsWith('.'))
throw new Error(`Module name contains invalid symbol: ${answers.ModuleName}`);
if(answers.SelectTemplate === 'ScarletsFrame - JavaScript'){
let path;
if(answers.UseCurrentFolder) path = '.';
else path = './nodes-'+answers.ModuleName;
let repoLink = 'https://github.com/Blackprint/template-js';
execSync(`git clone --depth 1 ${repoLink} ${path}`);
fs.rmSync(`${path}/.git`, { recursive: true });
let _moduleName = answers.ModuleName.toLowerCase();
let replacement = {
'LibraryName': answers.ModuleName,
'libraryname': answers.ModuleName.toLowerCase(),
'bp-your-module-name': 'nodes-'+_moduleName,
'nodes-rename-me': 'nodes-'+_moduleName,
'https://github.com/your/repository.git': 'https://github.com/YourUsernameHere/nodes-'+_moduleName+'.git',
'/gh/blackprint/template-js@dist': '/gh/YourUsernameHere/nodes-'+_moduleName+'@dist',
};
replace.sync({
files: [
`${path}/**/*.md`,
`${path}/**/*.js`,
`${path}/**/*.css`,
`${path}/**/*.sf`,
`${path}/**/*.html`,
`${path}/**/*.json`,
],
from: Object.keys(replacement).map(v => {
return RegExp(v.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'g');
}),
to: Object.values(replacement),
});
}
else if(answers.SelectTemplate === 'ScarletsFrame - TypeScript'){
let path;
if(answers.UseCurrentFolder) path = '.';
else path = './nodes-'+answers.ModuleName;
let repoLink = 'https://github.com/Blackprint/template-ts';
execSync(`git clone --depth 1 ${repoLink} ${path}`);
fs.rmSync(`${path}/.git`, { recursive: true });
let _moduleName = answers.ModuleName.toLowerCase();
let replacement = {
'LibraryName': answers.ModuleName,
'libraryname': answers.ModuleName.toLowerCase(),
'bp-your-module-name': 'nodes-'+_moduleName,
'nodes-rename-me': 'nodes-'+_moduleName,
'https://github.com/your/repository.git': 'https://github.com/YourUsernameHere/nodes-'+_moduleName+'.git',
'/gh/blackprint/template-ts@dist': '/gh/YourUsernameHere/nodes-'+_moduleName+'@dist',
};
replace.sync({
files: [
`${path}/**/*.md`,
`${path}/**/*.ts`,
`${path}/**/*.js`,
`${path}/**/*.css`,
`${path}/**/*.sf`,
`${path}/**/*.html`,
`${path}/**/*.json`,
],
from: Object.keys(replacement).map(v => {
return RegExp(v.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'g');
}),
to: Object.values(replacement),
});
}
}