-
Notifications
You must be signed in to change notification settings - Fork 0
/
extension.js
117 lines (85 loc) · 3 KB
/
extension.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
const fs = require('fs');
const path = require('path');
const vscode = require('vscode');
const defaultContent = `import React from 'react';
export default function [COMPONENT_NAME]() {
return (
)
}
`;
/**
* @param {vscode.ExtensionContext} context
*/
function activate(context) {
let disposable = vscode.commands.registerCommand('createReactFolder', function (uri) {
const uriPath = uri.fsPath;
const isDir = fs.lstatSync(uriPath).isDirectory();
const settings = vscode.workspace.getConfiguration('new-react-folder');
let targetPath;
// console.log(settings);
if ( !isDir ) {
targetPath = path.dirname(uriPath);
} else {
targetPath = uriPath;
}
const options = {
ignoreFocusOut: true,
placeHolder: 'Folder_Name',
validateInput: function(name) {
if (!name) {
return 'Name is required';
}
if (name.includes(' ')) {
return 'Spaces are not allowed';
}
if (fs.existsSync(path.resolve(targetPath, name))) {
return 'Name exists';
}
// // no errors
return undefined;
},
prompt: `Input the react componet name`
};
// Open Input Box
vscode.window.showInputBox(options)
.then((inputName) => {
if (inputName !== null && inputName !== undefined ) {
const newPath = path.resolve(targetPath, inputName);
// Create folder path
if (!fs.existsSync(newPath)){
fs.mkdir(newPath, { recursive: true }, (err) => {
if (err) throw err;
// Remove ordering numbers and hidden underscore from file names
let fileName = inputName;
fileName = fileName.replace(/^[0-9]+-/, '');
fileName = fileName.replace(/^_/, '');
// Create react file
let reactExt = settings.reactFileFormat ? settings.reactFileFormat : 'jsx';
let useDefaultContent = settings.includeDefaultContent ? settings.includeDefaultContent : true;
let fileContent = useDefaultContent ? defaultContent.replace('[COMPONENT_NAME]', fileName) : '';
fs.writeFile(path.resolve(newPath, `${fileName}.${reactExt}`), fileContent, {encoding:"utf8"}, function (err) {
if (err) throw err;
});
if ( settings.customExtensions.length && settings.customExtensions.length > 0 ) {
let customExts = settings.customExtensions;
customExts = customExts.split(',');
customExts.forEach((extName) => {
fs.writeFile(path.resolve(newPath, `${fileName}.${extName}`), '', function (err) {
if (err) throw err;
});
});
}
});
}
}
});
});
context.subscriptions.push(disposable);
}
// exports.activate = activate;
// this method is called when your extension is deactivated
function deactivate() {}
module.exports = {
activate,
deactivate
}