innetjs 2.1.5 → 2.2.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.
- package/bin/innet +338 -183
- package/bin/innet.d.ts +2 -0
- package/constants.d.ts +1 -1
- package/index.d.ts +25 -14
- package/index.es6.js +289 -154
- package/index.js +312 -171
- package/package.json +10 -2
package/bin/innet
CHANGED
|
@@ -1,65 +1,70 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
5
|
-
var fs = require('fs-extra');
|
|
6
|
-
var http = require('http');
|
|
7
|
-
var address = require('address');
|
|
8
|
-
var https = require('https');
|
|
9
|
-
var util = require('util');
|
|
10
|
-
var axios = require('axios');
|
|
4
|
+
var commander = require('commander');
|
|
11
5
|
var logger = require('@cantinc/logger');
|
|
12
|
-
var chalk = require('chalk');
|
|
13
|
-
var rollup = require('rollup');
|
|
14
6
|
var commonjs = require('@rollup/plugin-commonjs');
|
|
7
|
+
var eslint = require('@rollup/plugin-eslint');
|
|
8
|
+
var image = require('@rollup/plugin-image');
|
|
9
|
+
var json = require('@rollup/plugin-json');
|
|
15
10
|
var pluginNodeResolve = require('@rollup/plugin-node-resolve');
|
|
16
|
-
var
|
|
17
|
-
var typescript = require('rollup-plugin-typescript2');
|
|
18
|
-
var styles = require('rollup-plugin-styles');
|
|
11
|
+
var address = require('address');
|
|
19
12
|
var autoprefixer = require('autoprefixer');
|
|
13
|
+
var axios = require('axios');
|
|
14
|
+
var chalk = require('chalk');
|
|
15
|
+
var selector = require('cli-select');
|
|
20
16
|
var express = require('express');
|
|
21
|
-
var json = require('@rollup/plugin-json');
|
|
22
|
-
var tmp = require('tmp');
|
|
23
17
|
var proxy = require('express-http-proxy');
|
|
24
|
-
var
|
|
18
|
+
var fs = require('fs-extra');
|
|
19
|
+
var glob = require('glob');
|
|
20
|
+
var http = require('http');
|
|
21
|
+
var https = require('https');
|
|
22
|
+
var linesAndColumns = require('lines-and-columns');
|
|
23
|
+
var path$1 = require('path');
|
|
25
24
|
var prompt = require('prompts');
|
|
26
|
-
var
|
|
25
|
+
var rollup = require('rollup');
|
|
27
26
|
var filesize = require('rollup-plugin-filesize');
|
|
28
|
-
var image = require('@rollup/plugin-image');
|
|
29
|
-
var eslint = require('@rollup/plugin-eslint');
|
|
30
|
-
var polyfill = require('rollup-plugin-polyfill-node');
|
|
31
27
|
var injectEnv = require('rollup-plugin-inject-process-env');
|
|
32
|
-
var
|
|
28
|
+
var jsx = require('rollup-plugin-innet-jsx');
|
|
29
|
+
var externals = require('rollup-plugin-node-externals');
|
|
30
|
+
var polyfill = require('rollup-plugin-polyfill-node');
|
|
31
|
+
var rollupPluginPreserveShebangs = require('rollup-plugin-preserve-shebangs');
|
|
32
|
+
var styles = require('rollup-plugin-styles');
|
|
33
|
+
var rollupPluginTerser = require('rollup-plugin-terser');
|
|
34
|
+
var typescript = require('rollup-plugin-typescript2');
|
|
35
|
+
var tmp = require('tmp');
|
|
36
|
+
var util = require('util');
|
|
33
37
|
var unzipper = require('unzipper');
|
|
34
|
-
var commander = require('commander');
|
|
35
38
|
|
|
36
39
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
37
40
|
|
|
38
|
-
var path__default = /*#__PURE__*/_interopDefaultLegacy(path$1);
|
|
39
|
-
var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
|
|
40
|
-
var http__default = /*#__PURE__*/_interopDefaultLegacy(http);
|
|
41
|
-
var address__default = /*#__PURE__*/_interopDefaultLegacy(address);
|
|
42
|
-
var https__default = /*#__PURE__*/_interopDefaultLegacy(https);
|
|
43
|
-
var axios__default = /*#__PURE__*/_interopDefaultLegacy(axios);
|
|
44
41
|
var logger__default = /*#__PURE__*/_interopDefaultLegacy(logger);
|
|
45
|
-
var chalk__default = /*#__PURE__*/_interopDefaultLegacy(chalk);
|
|
46
|
-
var rollup__default = /*#__PURE__*/_interopDefaultLegacy(rollup);
|
|
47
42
|
var commonjs__default = /*#__PURE__*/_interopDefaultLegacy(commonjs);
|
|
48
|
-
var
|
|
49
|
-
var
|
|
43
|
+
var eslint__default = /*#__PURE__*/_interopDefaultLegacy(eslint);
|
|
44
|
+
var image__default = /*#__PURE__*/_interopDefaultLegacy(image);
|
|
45
|
+
var json__default = /*#__PURE__*/_interopDefaultLegacy(json);
|
|
46
|
+
var address__default = /*#__PURE__*/_interopDefaultLegacy(address);
|
|
50
47
|
var autoprefixer__default = /*#__PURE__*/_interopDefaultLegacy(autoprefixer);
|
|
48
|
+
var axios__default = /*#__PURE__*/_interopDefaultLegacy(axios);
|
|
49
|
+
var chalk__default = /*#__PURE__*/_interopDefaultLegacy(chalk);
|
|
50
|
+
var selector__default = /*#__PURE__*/_interopDefaultLegacy(selector);
|
|
51
51
|
var express__default = /*#__PURE__*/_interopDefaultLegacy(express);
|
|
52
|
-
var json__default = /*#__PURE__*/_interopDefaultLegacy(json);
|
|
53
|
-
var tmp__default = /*#__PURE__*/_interopDefaultLegacy(tmp);
|
|
54
52
|
var proxy__default = /*#__PURE__*/_interopDefaultLegacy(proxy);
|
|
55
|
-
var
|
|
53
|
+
var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
|
|
54
|
+
var glob__default = /*#__PURE__*/_interopDefaultLegacy(glob);
|
|
55
|
+
var http__default = /*#__PURE__*/_interopDefaultLegacy(http);
|
|
56
|
+
var https__default = /*#__PURE__*/_interopDefaultLegacy(https);
|
|
57
|
+
var path__default = /*#__PURE__*/_interopDefaultLegacy(path$1);
|
|
56
58
|
var prompt__default = /*#__PURE__*/_interopDefaultLegacy(prompt);
|
|
57
|
-
var
|
|
59
|
+
var rollup__default = /*#__PURE__*/_interopDefaultLegacy(rollup);
|
|
58
60
|
var filesize__default = /*#__PURE__*/_interopDefaultLegacy(filesize);
|
|
59
|
-
var image__default = /*#__PURE__*/_interopDefaultLegacy(image);
|
|
60
|
-
var eslint__default = /*#__PURE__*/_interopDefaultLegacy(eslint);
|
|
61
|
-
var polyfill__default = /*#__PURE__*/_interopDefaultLegacy(polyfill);
|
|
62
61
|
var injectEnv__default = /*#__PURE__*/_interopDefaultLegacy(injectEnv);
|
|
62
|
+
var jsx__default = /*#__PURE__*/_interopDefaultLegacy(jsx);
|
|
63
|
+
var externals__default = /*#__PURE__*/_interopDefaultLegacy(externals);
|
|
64
|
+
var polyfill__default = /*#__PURE__*/_interopDefaultLegacy(polyfill);
|
|
65
|
+
var styles__default = /*#__PURE__*/_interopDefaultLegacy(styles);
|
|
66
|
+
var typescript__default = /*#__PURE__*/_interopDefaultLegacy(typescript);
|
|
67
|
+
var tmp__default = /*#__PURE__*/_interopDefaultLegacy(tmp);
|
|
63
68
|
|
|
64
69
|
/******************************************************************************
|
|
65
70
|
Copyright (c) Microsoft Corporation.
|
|
@@ -86,6 +91,35 @@ function __awaiter(thisArg, _arguments, P, generator) {
|
|
|
86
91
|
});
|
|
87
92
|
}
|
|
88
93
|
|
|
94
|
+
const lintInclude = [
|
|
95
|
+
'**/*.ts',
|
|
96
|
+
'**/*.tsx',
|
|
97
|
+
'**/*.js',
|
|
98
|
+
'**/*.jsx',
|
|
99
|
+
];
|
|
100
|
+
const stringExcludeDom = [
|
|
101
|
+
'**/*.ts',
|
|
102
|
+
'**/*.tsx',
|
|
103
|
+
'**/*.js',
|
|
104
|
+
'**/*.jsx',
|
|
105
|
+
'**/*.json',
|
|
106
|
+
'**/*.css',
|
|
107
|
+
'**/*.scss',
|
|
108
|
+
'**/*.webp',
|
|
109
|
+
'**/*.gif',
|
|
110
|
+
'**/*.png',
|
|
111
|
+
'**/*.jpeg',
|
|
112
|
+
'**/*.jpg',
|
|
113
|
+
'**/*.svg',
|
|
114
|
+
];
|
|
115
|
+
const stringExcludeNode = [
|
|
116
|
+
'**/*.ts',
|
|
117
|
+
'**/*.tsx',
|
|
118
|
+
'**/*.js',
|
|
119
|
+
'**/*.jsx',
|
|
120
|
+
'**/*.json',
|
|
121
|
+
];
|
|
122
|
+
|
|
89
123
|
const Writer = require('fstream').Writer;
|
|
90
124
|
const path = require('path');
|
|
91
125
|
const stream = require('stream');
|
|
@@ -95,7 +129,7 @@ function Extract(opts, template) {
|
|
|
95
129
|
const reduceCount = 19 + template.length;
|
|
96
130
|
// make sure path is normalized before using it
|
|
97
131
|
opts.path = path.resolve(path.normalize(opts.path));
|
|
98
|
-
// @ts-
|
|
132
|
+
// @ts-expect-error
|
|
99
133
|
const parser = new unzipper.Parse(opts);
|
|
100
134
|
const outStream = new stream.Writable({ objectMode: true });
|
|
101
135
|
outStream._write = function (entry, encoding, cb) {
|
|
@@ -128,35 +162,6 @@ function Extract(opts, template) {
|
|
|
128
162
|
return extract;
|
|
129
163
|
}
|
|
130
164
|
|
|
131
|
-
const lintIncludeDom = [
|
|
132
|
-
'**/*.ts',
|
|
133
|
-
'**/*.tsx',
|
|
134
|
-
'**/*.js',
|
|
135
|
-
'**/*.jsx',
|
|
136
|
-
];
|
|
137
|
-
const stringExcludeDom = [
|
|
138
|
-
'**/*.ts',
|
|
139
|
-
'**/*.tsx',
|
|
140
|
-
'**/*.js',
|
|
141
|
-
'**/*.jsx',
|
|
142
|
-
'**/*.json',
|
|
143
|
-
'**/*.css',
|
|
144
|
-
'**/*.scss',
|
|
145
|
-
'**/*.webp',
|
|
146
|
-
'**/*.gif',
|
|
147
|
-
'**/*.png',
|
|
148
|
-
'**/*.jpeg',
|
|
149
|
-
'**/*.jpg',
|
|
150
|
-
'**/*.svg',
|
|
151
|
-
];
|
|
152
|
-
const stringExcludeNode = [
|
|
153
|
-
'**/*.ts',
|
|
154
|
-
'**/*.tsx',
|
|
155
|
-
'**/*.js',
|
|
156
|
-
'**/*.jsx',
|
|
157
|
-
'**/*.json',
|
|
158
|
-
];
|
|
159
|
-
|
|
160
165
|
function getFile(file) {
|
|
161
166
|
file = path__default["default"].resolve(file);
|
|
162
167
|
if (!fs__default["default"].existsSync(file)) {
|
|
@@ -197,6 +202,8 @@ const { exec, spawn } = require('child_process');
|
|
|
197
202
|
const readline = require('readline');
|
|
198
203
|
const execAsync = util.promisify(exec);
|
|
199
204
|
const copyFiles = util.promisify(fs__default["default"].copy);
|
|
205
|
+
const dotenvConfigOutput$1 = require('dotenv').config();
|
|
206
|
+
require('dotenv-expand').expand(dotenvConfigOutput$1);
|
|
200
207
|
const REG_CLEAR_TEXT = /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g;
|
|
201
208
|
function normalizeEnv(value) {
|
|
202
209
|
if (value) {
|
|
@@ -209,12 +216,21 @@ const innetEnv = Object.keys(process.env).reduce((result, key) => {
|
|
|
209
216
|
}
|
|
210
217
|
return result;
|
|
211
218
|
}, {});
|
|
219
|
+
const scriptExtensions = ['ts', 'js', 'tsx', 'jsx'];
|
|
220
|
+
const indexExt = scriptExtensions.join(',');
|
|
212
221
|
class InnetJS {
|
|
213
|
-
constructor({ projectFolder = process.env.PROJECT_FOLDER || '', baseUrl = process.env.BASE_URL || '/', publicFolder = process.env.PUBLIC_FOLDER || 'public', buildFolder = process.env.BUILD_FOLDER || 'build', srcFolder = process.env.SRC_FOLDER || 'src', sourcemap = process.env.SOURCEMAP ? process.env.SOURCEMAP === 'true' : false, cssModules = process.env.CSS_MODULES ? process.env.CSS_MODULES === 'true' : true, cssInJs = process.env.CSS_IN_JS ? process.env.CSS_IN_JS === 'true' : true, sslKey = process.env.SSL_KEY || 'localhost.key', sslCrt = process.env.SSL_CRT || 'localhost.crt', proxy = process.env.PROXY || '', port = process.env.PORT ? +process.env.PORT : 3000, api = process.env.API || '/api/?*', } = {}) {
|
|
222
|
+
constructor({ projectFolder = process.env.PROJECT_FOLDER || '', baseUrl = process.env.BASE_URL || '/', publicFolder = process.env.PUBLIC_FOLDER || 'public', releaseFolder = process.env.RELEASE_FOLDER || 'release', buildFolder = process.env.BUILD_FOLDER || 'build', srcFolder = process.env.SRC_FOLDER || 'src', sourcemap = process.env.SOURCEMAP ? process.env.SOURCEMAP === 'true' : false, cssModules = process.env.CSS_MODULES ? process.env.CSS_MODULES === 'true' : true, cssInJs = process.env.CSS_IN_JS ? process.env.CSS_IN_JS === 'true' : true, sslKey = process.env.SSL_KEY || 'localhost.key', sslCrt = process.env.SSL_CRT || 'localhost.crt', proxy = process.env.PROXY || '', port = process.env.PORT ? +process.env.PORT : 3000, api = process.env.API || '/api/?*', } = {}) {
|
|
214
223
|
this.projectFolder = path__default["default"].resolve(projectFolder);
|
|
215
224
|
this.publicFolder = path__default["default"].resolve(publicFolder);
|
|
225
|
+
this.releaseFolder = path__default["default"].resolve(releaseFolder);
|
|
216
226
|
this.buildFolder = path__default["default"].resolve(buildFolder);
|
|
217
227
|
this.srcFolder = path__default["default"].resolve(srcFolder);
|
|
228
|
+
this.licenseFile = path__default["default"].join(projectFolder, 'LICENSE');
|
|
229
|
+
this.licenseReleaseFile = path__default["default"].join(releaseFolder, 'LICENSE');
|
|
230
|
+
this.readmeFile = path__default["default"].join(projectFolder, 'README.md');
|
|
231
|
+
this.readmeReleaseFile = path__default["default"].join(releaseFolder, 'README.md');
|
|
232
|
+
this.declarationFile = path__default["default"].join(srcFolder, 'declaration.d.ts');
|
|
233
|
+
this.declarationReleaseFile = path__default["default"].join(releaseFolder, 'declaration.d.ts');
|
|
218
234
|
this.publicIndexFile = path__default["default"].join(publicFolder, 'index.html');
|
|
219
235
|
this.buildIndexFile = path__default["default"].join(buildFolder, 'index.html');
|
|
220
236
|
this.devBuildFolder = path__default["default"].resolve(projectFolder, 'node_modules', '.cache', 'innetjs', 'build');
|
|
@@ -236,9 +252,9 @@ class InnetJS {
|
|
|
236
252
|
const { data } = yield logger__default["default"].start('Get templates list', () => __awaiter(this, void 0, void 0, function* () { return yield axios__default["default"].get('https://api.github.com/repos/d8corp/innetjs-templates/branches'); }));
|
|
237
253
|
const templates = data.map(({ name }) => name).filter(name => name !== 'main');
|
|
238
254
|
if (!template || !templates.includes(template)) {
|
|
239
|
-
logger__default["default"].log(chalk__default["default"].green(
|
|
255
|
+
logger__default["default"].log(chalk__default["default"].green('Select one of those templates'));
|
|
240
256
|
const { value } = yield selector__default["default"]({
|
|
241
|
-
values: templates
|
|
257
|
+
values: templates,
|
|
242
258
|
});
|
|
243
259
|
template = value;
|
|
244
260
|
readline.moveCursor(process.stdout, 0, -1);
|
|
@@ -251,7 +267,7 @@ class InnetJS {
|
|
|
251
267
|
if (fs__default["default"].existsSync(appPath)) {
|
|
252
268
|
logger__default["default"].log(chalk__default["default"].red(`'${appPath}' already exist, what do you want?`));
|
|
253
269
|
const { id: result, value } = yield selector__default["default"]({
|
|
254
|
-
values: ['Stop the process', 'Remove the folder', 'Merge with template']
|
|
270
|
+
values: ['Stop the process', 'Remove the folder', 'Merge with template'],
|
|
255
271
|
});
|
|
256
272
|
readline.moveCursor(process.stdout, 0, -1);
|
|
257
273
|
logger__default["default"].log(`Already exist, selected: ${value}`);
|
|
@@ -266,7 +282,7 @@ class InnetJS {
|
|
|
266
282
|
}
|
|
267
283
|
yield logger__default["default"].start('Download template', () => __awaiter(this, void 0, void 0, function* () {
|
|
268
284
|
const { data } = yield axios__default["default"].get(`https://github.com/d8corp/innetjs-templates/archive/refs/heads/${template}.zip`, {
|
|
269
|
-
responseType: 'stream'
|
|
285
|
+
responseType: 'stream',
|
|
270
286
|
});
|
|
271
287
|
yield new Promise((resolve, reject) => {
|
|
272
288
|
data.pipe(Extract({
|
|
@@ -277,60 +293,55 @@ class InnetJS {
|
|
|
277
293
|
yield logger__default["default"].start('Install packages', () => execAsync(`cd ${appPath} && npm i`));
|
|
278
294
|
});
|
|
279
295
|
}
|
|
280
|
-
build({ node = false } = {}) {
|
|
296
|
+
build({ node = false, index = 'index' } = {}) {
|
|
281
297
|
return __awaiter(this, void 0, void 0, function* () {
|
|
282
|
-
const
|
|
298
|
+
const input = glob__default["default"].sync(`src/${index}.{${indexExt}}`);
|
|
299
|
+
if (!input.length) {
|
|
300
|
+
throw Error('index file is not detected');
|
|
301
|
+
}
|
|
283
302
|
yield logger__default["default"].start('Remove build', () => fs__default["default"].remove(this.buildFolder));
|
|
284
303
|
const pkg = node && (yield this.getPackage());
|
|
285
304
|
const inputOptions = {
|
|
286
|
-
input
|
|
305
|
+
input,
|
|
287
306
|
preserveEntrySignatures: 'strict',
|
|
288
307
|
plugins: [
|
|
289
308
|
commonjs__default["default"](),
|
|
290
309
|
json__default["default"](),
|
|
291
310
|
typescript__default["default"](),
|
|
292
311
|
jsx__default["default"](),
|
|
293
|
-
|
|
312
|
+
eslint__default["default"]({
|
|
313
|
+
include: lintInclude,
|
|
314
|
+
}),
|
|
315
|
+
],
|
|
294
316
|
};
|
|
295
317
|
const outputOptions = {
|
|
296
318
|
dir: this.buildFolder,
|
|
297
|
-
sourcemap: this.sourcemap
|
|
319
|
+
sourcemap: this.sourcemap,
|
|
298
320
|
};
|
|
299
321
|
if (node) {
|
|
300
322
|
outputOptions.format = 'cjs';
|
|
301
323
|
inputOptions.external = Object.keys((pkg === null || pkg === void 0 ? void 0 : pkg.dependencies) || {});
|
|
302
324
|
inputOptions.plugins.push(pluginNodeResolve.nodeResolve({
|
|
303
|
-
moduleDirectories: [path__default["default"].resolve(this.buildFolder, 'node_modules')]
|
|
325
|
+
moduleDirectories: [path__default["default"].resolve(this.buildFolder, 'node_modules')],
|
|
304
326
|
}), string({
|
|
305
327
|
include: '**/*.*',
|
|
306
328
|
exclude: stringExcludeNode,
|
|
307
329
|
}));
|
|
308
330
|
}
|
|
309
331
|
else {
|
|
310
|
-
inputOptions.plugins
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
plugins: [autoprefixer__default["default"]()],
|
|
324
|
-
modules: this.cssModules,
|
|
325
|
-
sourceMap: this.sourcemap,
|
|
326
|
-
minimize: true,
|
|
327
|
-
}),
|
|
328
|
-
string({
|
|
329
|
-
include: '**/*.*',
|
|
330
|
-
exclude: stringExcludeDom,
|
|
331
|
-
}),
|
|
332
|
-
injectEnv__default["default"](innetEnv),
|
|
333
|
-
];
|
|
332
|
+
inputOptions.plugins.push(pluginNodeResolve.nodeResolve({
|
|
333
|
+
browser: true,
|
|
334
|
+
}), polyfill__default["default"](), image__default["default"](), styles__default["default"]({
|
|
335
|
+
mode: this.cssInJs ? 'inject' : 'extract',
|
|
336
|
+
url: true,
|
|
337
|
+
plugins: [autoprefixer__default["default"]()],
|
|
338
|
+
modules: this.cssModules,
|
|
339
|
+
sourceMap: this.sourcemap,
|
|
340
|
+
minimize: true,
|
|
341
|
+
}), string({
|
|
342
|
+
include: '**/*.*',
|
|
343
|
+
exclude: stringExcludeDom,
|
|
344
|
+
}), injectEnv__default["default"](innetEnv));
|
|
334
345
|
outputOptions.format = 'es';
|
|
335
346
|
outputOptions.plugins = [
|
|
336
347
|
rollupPluginTerser.terser(),
|
|
@@ -366,13 +377,16 @@ class InnetJS {
|
|
|
366
377
|
}
|
|
367
378
|
});
|
|
368
379
|
}
|
|
369
|
-
start({ node = false, error = false } = {}) {
|
|
380
|
+
start({ node = false, error = false, index = 'index' } = {}) {
|
|
370
381
|
return __awaiter(this, void 0, void 0, function* () {
|
|
371
|
-
const indexExtension = yield this.getProjectExtension();
|
|
372
382
|
const pkg = yield this.getPackage();
|
|
383
|
+
const input = glob__default["default"].sync(`src/${index}.{${indexExt}}`);
|
|
384
|
+
if (!input.length) {
|
|
385
|
+
throw Error('index file is not detected');
|
|
386
|
+
}
|
|
373
387
|
yield logger__default["default"].start('Remove build', () => fs__default["default"].remove(this.devBuildFolder));
|
|
374
388
|
const options = {
|
|
375
|
-
input
|
|
389
|
+
input,
|
|
376
390
|
preserveEntrySignatures: 'strict',
|
|
377
391
|
output: {
|
|
378
392
|
dir: this.devBuildFolder,
|
|
@@ -384,14 +398,18 @@ class InnetJS {
|
|
|
384
398
|
typescript__default["default"]({
|
|
385
399
|
tsconfigOverride: {
|
|
386
400
|
compilerOptions: {
|
|
387
|
-
sourceMap: true
|
|
388
|
-
}
|
|
401
|
+
sourceMap: true,
|
|
402
|
+
},
|
|
389
403
|
},
|
|
390
404
|
}),
|
|
391
405
|
jsx__default["default"](),
|
|
406
|
+
eslint__default["default"]({
|
|
407
|
+
include: lintInclude,
|
|
408
|
+
}),
|
|
392
409
|
],
|
|
393
410
|
};
|
|
394
411
|
if (node) {
|
|
412
|
+
// @ts-expect-error
|
|
395
413
|
options.output.format = 'cjs';
|
|
396
414
|
options.external = Object.keys((pkg === null || pkg === void 0 ? void 0 : pkg.dependencies) || {});
|
|
397
415
|
options.plugins.push(pluginNodeResolve.nodeResolve({
|
|
@@ -412,36 +430,24 @@ class InnetJS {
|
|
|
412
430
|
: fs__default["default"].existsSync(this.sslCrt)
|
|
413
431
|
? fs__default["default"].readFileSync(this.sslCrt)
|
|
414
432
|
: undefined;
|
|
433
|
+
// @ts-expect-error
|
|
415
434
|
options.output.format = 'es';
|
|
416
|
-
options.plugins
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
url: true,
|
|
429
|
-
plugins: [autoprefixer__default["default"]()],
|
|
430
|
-
modules: this.cssModules,
|
|
431
|
-
sourceMap: true,
|
|
432
|
-
}),
|
|
433
|
-
string({
|
|
434
|
-
include: '**/*.*',
|
|
435
|
-
exclude: stringExcludeDom,
|
|
436
|
-
}),
|
|
437
|
-
this.createClient(key, cert, pkg),
|
|
438
|
-
livereload(Object.assign({ exts: ['html', 'css', 'js', 'png', 'svg', 'webp', 'gif', 'jpg', 'json'], watch: [this.devBuildFolder, this.publicFolder], verbose: false }, (key && cert ? { https: { key, cert } } : {}))),
|
|
439
|
-
injectEnv__default["default"](innetEnv),
|
|
440
|
-
];
|
|
435
|
+
options.plugins.push(pluginNodeResolve.nodeResolve({
|
|
436
|
+
browser: true,
|
|
437
|
+
}), polyfill__default["default"](), image__default["default"](), styles__default["default"]({
|
|
438
|
+
mode: this.cssInJs ? 'inject' : 'extract',
|
|
439
|
+
url: true,
|
|
440
|
+
plugins: [autoprefixer__default["default"]()],
|
|
441
|
+
modules: this.cssModules,
|
|
442
|
+
sourceMap: true,
|
|
443
|
+
}), string({
|
|
444
|
+
include: '**/*.*',
|
|
445
|
+
exclude: stringExcludeDom,
|
|
446
|
+
}), this.createClient(key, cert, pkg), livereload(Object.assign({ exts: ['html', 'css', 'js', 'png', 'svg', 'webp', 'gif', 'jpg', 'json'], watch: [this.devBuildFolder, this.publicFolder], verbose: false }, (key && cert ? { https: { key, cert } } : {}))), injectEnv__default["default"](innetEnv));
|
|
441
447
|
}
|
|
442
448
|
const watcher = rollup__default["default"].watch(options);
|
|
443
449
|
watcher.on('event', (e) => __awaiter(this, void 0, void 0, function* () {
|
|
444
|
-
if (e.code
|
|
450
|
+
if (e.code === 'ERROR') {
|
|
445
451
|
if (e.error.code === 'UNRESOLVED_IMPORT') {
|
|
446
452
|
const [, importer, file] = e.error.message.match(/^Could not resolve '(.+)' from (.+)$/) || [];
|
|
447
453
|
const text = (yield fs__default["default"].readFile(file)).toString();
|
|
@@ -496,16 +502,16 @@ class InnetJS {
|
|
|
496
502
|
typescript__default["default"]({
|
|
497
503
|
tsconfigOverride: {
|
|
498
504
|
compilerOptions: {
|
|
499
|
-
sourceMap: true
|
|
500
|
-
}
|
|
501
|
-
}
|
|
502
|
-
})
|
|
503
|
-
]
|
|
505
|
+
sourceMap: true,
|
|
506
|
+
},
|
|
507
|
+
},
|
|
508
|
+
}),
|
|
509
|
+
],
|
|
504
510
|
};
|
|
505
511
|
const outputOptions = {
|
|
506
512
|
format: 'cjs',
|
|
507
513
|
file: jsFilePath,
|
|
508
|
-
sourcemap: true
|
|
514
|
+
sourcemap: true,
|
|
509
515
|
};
|
|
510
516
|
const bundle = yield rollup__default["default"].rollup(inputOptions);
|
|
511
517
|
yield bundle.write(outputOptions);
|
|
@@ -516,35 +522,164 @@ class InnetJS {
|
|
|
516
522
|
}));
|
|
517
523
|
});
|
|
518
524
|
}
|
|
519
|
-
|
|
520
|
-
getProjectExtension() {
|
|
525
|
+
release({ node = false, index = 'index', release, } = {}) {
|
|
521
526
|
return __awaiter(this, void 0, void 0, function* () {
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
yield logger__default["default"].start('
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
throw Error('index file is not detected');
|
|
527
|
+
const { releaseFolder, cssModules } = this;
|
|
528
|
+
yield logger__default["default"].start('Remove previous release', () => fs__default["default"].remove(releaseFolder));
|
|
529
|
+
const pkg = yield this.getPackage();
|
|
530
|
+
yield logger__default["default"].start('Prepare package.json', () => __awaiter(this, void 0, void 0, function* () {
|
|
531
|
+
const version = pkg.version.split('.');
|
|
532
|
+
switch (release) {
|
|
533
|
+
case 'patch': {
|
|
534
|
+
version[2]++;
|
|
535
|
+
break;
|
|
536
|
+
}
|
|
537
|
+
case 'minor': {
|
|
538
|
+
version[1]++;
|
|
539
|
+
version[2] = 0;
|
|
540
|
+
break;
|
|
541
|
+
}
|
|
542
|
+
case 'major': {
|
|
543
|
+
version[1] = 0;
|
|
544
|
+
version[2] = 0;
|
|
545
|
+
version[0]++;
|
|
546
|
+
break;
|
|
547
|
+
}
|
|
548
|
+
default: return;
|
|
545
549
|
}
|
|
546
|
-
|
|
547
|
-
|
|
550
|
+
pkg.version = version.join('.');
|
|
551
|
+
yield fs__default["default"].writeFile(path__default["default"].resolve(this.projectFolder, 'package.json'), JSON.stringify(pkg, undefined, 2), 'UTF-8');
|
|
552
|
+
}));
|
|
553
|
+
function build(format) {
|
|
554
|
+
var _a, _b;
|
|
555
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
556
|
+
const ext = format === 'es'
|
|
557
|
+
? ((_a = (pkg.module || pkg.esnext || pkg['jsnext:main'])) === null || _a === void 0 ? void 0 : _a.replace('index', '')) || '.mjs'
|
|
558
|
+
: ((_b = pkg.main) === null || _b === void 0 ? void 0 : _b.replace('index', '')) || '.js';
|
|
559
|
+
const indexFiles = scriptExtensions.map(ext => `src/${index}.${ext}`).join(',');
|
|
560
|
+
const otherFiles = scriptExtensions.map(ext => `src/**/index.${ext}`).join(',');
|
|
561
|
+
const input = glob__default["default"].sync(`{${indexFiles},${otherFiles}}`);
|
|
562
|
+
if (!input.length) {
|
|
563
|
+
throw Error('index file is not detected');
|
|
564
|
+
}
|
|
565
|
+
const options = {
|
|
566
|
+
input,
|
|
567
|
+
preserveEntrySignatures: 'strict',
|
|
568
|
+
output: {
|
|
569
|
+
dir: releaseFolder,
|
|
570
|
+
entryFileNames: `[name]${ext}`,
|
|
571
|
+
format,
|
|
572
|
+
preserveModules: true,
|
|
573
|
+
},
|
|
574
|
+
plugins: [
|
|
575
|
+
json__default["default"](),
|
|
576
|
+
typescript__default["default"]({
|
|
577
|
+
rollupCommonJSResolveHack: false,
|
|
578
|
+
clean: true,
|
|
579
|
+
}),
|
|
580
|
+
jsx__default["default"](),
|
|
581
|
+
eslint__default["default"]({
|
|
582
|
+
include: lintInclude,
|
|
583
|
+
}),
|
|
584
|
+
],
|
|
585
|
+
};
|
|
586
|
+
if (node) {
|
|
587
|
+
options.external = [...Object.keys(pkg.dependencies), 'tslib'];
|
|
588
|
+
options.plugins = [
|
|
589
|
+
...options.plugins,
|
|
590
|
+
externals__default["default"](),
|
|
591
|
+
string({
|
|
592
|
+
include: '**/*.*',
|
|
593
|
+
exclude: stringExcludeNode,
|
|
594
|
+
}),
|
|
595
|
+
];
|
|
596
|
+
}
|
|
597
|
+
else {
|
|
598
|
+
options.plugins = [
|
|
599
|
+
...options.plugins,
|
|
600
|
+
string({
|
|
601
|
+
include: '**/*.*',
|
|
602
|
+
exclude: stringExcludeDom,
|
|
603
|
+
}),
|
|
604
|
+
polyfill__default["default"](),
|
|
605
|
+
image__default["default"](),
|
|
606
|
+
styles__default["default"]({
|
|
607
|
+
mode: 'inject',
|
|
608
|
+
url: true,
|
|
609
|
+
plugins: [autoprefixer__default["default"]()],
|
|
610
|
+
modules: cssModules,
|
|
611
|
+
minimize: true,
|
|
612
|
+
}),
|
|
613
|
+
injectEnv__default["default"](innetEnv),
|
|
614
|
+
];
|
|
615
|
+
}
|
|
616
|
+
const bundle = yield rollup__default["default"].rollup(options);
|
|
617
|
+
yield bundle.write(options.output);
|
|
618
|
+
yield bundle.close();
|
|
619
|
+
});
|
|
620
|
+
}
|
|
621
|
+
yield logger__default["default"].start('Build cjs bundle', () => __awaiter(this, void 0, void 0, function* () {
|
|
622
|
+
yield build('cjs');
|
|
623
|
+
}));
|
|
624
|
+
yield logger__default["default"].start('Build es6 bundle', () => __awaiter(this, void 0, void 0, function* () {
|
|
625
|
+
yield build('es');
|
|
626
|
+
}));
|
|
627
|
+
yield logger__default["default"].start('Copy package.json', () => __awaiter(this, void 0, void 0, function* () {
|
|
628
|
+
const data = Object.assign({}, pkg);
|
|
629
|
+
delete data.private;
|
|
630
|
+
delete data.devDependencies;
|
|
631
|
+
yield fs__default["default"].writeFile(path__default["default"].resolve(this.releaseFolder, 'package.json'), JSON.stringify(data, undefined, 2), 'UTF-8');
|
|
632
|
+
}));
|
|
633
|
+
if (pkg.bin) {
|
|
634
|
+
yield logger__default["default"].start('Build bin', () => __awaiter(this, void 0, void 0, function* () {
|
|
635
|
+
const { bin } = pkg;
|
|
636
|
+
for (const name in bin) {
|
|
637
|
+
const value = bin[name];
|
|
638
|
+
const input = glob__default["default"].sync(`src/${value}.{${scriptExtensions.join(',')}}`);
|
|
639
|
+
const file = path__default["default"].join(this.releaseFolder, value);
|
|
640
|
+
const options = {
|
|
641
|
+
input,
|
|
642
|
+
external: [...Object.keys(pkg.dependencies), 'tslib'],
|
|
643
|
+
output: {
|
|
644
|
+
file,
|
|
645
|
+
format: 'cjs',
|
|
646
|
+
},
|
|
647
|
+
plugins: [
|
|
648
|
+
rollupPluginPreserveShebangs.preserveShebangs(),
|
|
649
|
+
json__default["default"](),
|
|
650
|
+
typescript__default["default"]({
|
|
651
|
+
clean: true,
|
|
652
|
+
tsconfigOverride: {
|
|
653
|
+
compilerOptions: {
|
|
654
|
+
declaration: false,
|
|
655
|
+
},
|
|
656
|
+
},
|
|
657
|
+
}),
|
|
658
|
+
externals__default["default"](),
|
|
659
|
+
jsx__default["default"](),
|
|
660
|
+
],
|
|
661
|
+
};
|
|
662
|
+
const bundle = yield rollup__default["default"].rollup(options);
|
|
663
|
+
yield bundle.write(options.output);
|
|
664
|
+
yield bundle.close();
|
|
665
|
+
}
|
|
666
|
+
}));
|
|
667
|
+
}
|
|
668
|
+
if (fs__default["default"].existsSync(this.licenseFile)) {
|
|
669
|
+
yield logger__default["default"].start('Copy license', () => __awaiter(this, void 0, void 0, function* () {
|
|
670
|
+
yield fs.promises.copyFile(this.licenseFile, this.licenseReleaseFile);
|
|
671
|
+
}));
|
|
672
|
+
}
|
|
673
|
+
if (fs__default["default"].existsSync(this.readmeFile)) {
|
|
674
|
+
yield logger__default["default"].start('Copy readme', () => __awaiter(this, void 0, void 0, function* () {
|
|
675
|
+
yield fs.promises.copyFile(this.readmeFile, this.readmeReleaseFile);
|
|
676
|
+
}));
|
|
677
|
+
}
|
|
678
|
+
if (fs__default["default"].existsSync(this.declarationFile)) {
|
|
679
|
+
yield logger__default["default"].start('Copy declaration', () => __awaiter(this, void 0, void 0, function* () {
|
|
680
|
+
yield fs.promises.copyFile(this.declarationFile, this.declarationReleaseFile);
|
|
681
|
+
}));
|
|
682
|
+
}
|
|
548
683
|
});
|
|
549
684
|
}
|
|
550
685
|
getPackage() {
|
|
@@ -564,6 +699,7 @@ class InnetJS {
|
|
|
564
699
|
createClient(key, cert, pkg) {
|
|
565
700
|
let app;
|
|
566
701
|
return {
|
|
702
|
+
name: 'client',
|
|
567
703
|
writeBundle: () => __awaiter(this, void 0, void 0, function* () {
|
|
568
704
|
var _a;
|
|
569
705
|
if (!app) {
|
|
@@ -580,7 +716,7 @@ class InnetJS {
|
|
|
580
716
|
if ((_a = this.proxy) === null || _a === void 0 ? void 0 : _a.startsWith('http')) {
|
|
581
717
|
app.use(this.api, proxy__default["default"](this.proxy, {
|
|
582
718
|
https: httpsUsing,
|
|
583
|
-
proxyReqPathResolver: req => req.originalUrl
|
|
719
|
+
proxyReqPathResolver: req => req.originalUrl,
|
|
584
720
|
}));
|
|
585
721
|
}
|
|
586
722
|
app.use(/^([^.]*|.*\.[^.]{5,})$/, (req, res) => {
|
|
@@ -598,7 +734,7 @@ class InnetJS {
|
|
|
598
734
|
const { userPort } = yield prompt__default["default"]({
|
|
599
735
|
name: 'userPort',
|
|
600
736
|
type: 'number',
|
|
601
|
-
message: `Port ${e.port} is reserved, please enter another one [${port}]
|
|
737
|
+
message: `Port ${e.port} is reserved, please enter another one [${port}]:`,
|
|
602
738
|
});
|
|
603
739
|
if (userPort) {
|
|
604
740
|
port = userPort;
|
|
@@ -610,35 +746,37 @@ class InnetJS {
|
|
|
610
746
|
}
|
|
611
747
|
}));
|
|
612
748
|
}
|
|
613
|
-
})
|
|
749
|
+
}),
|
|
614
750
|
};
|
|
615
751
|
}
|
|
616
752
|
createServer() {
|
|
617
753
|
let app;
|
|
618
754
|
return {
|
|
755
|
+
name: 'server',
|
|
619
756
|
writeBundle: () => __awaiter(this, void 0, void 0, function* () {
|
|
620
757
|
app === null || app === void 0 ? void 0 : app.kill();
|
|
621
758
|
const filePath = path__default["default"].resolve(this.devBuildFolder, 'index.js');
|
|
622
759
|
app = spawn('node', ['-r', 'source-map-support/register', filePath], { stdio: 'inherit' });
|
|
623
|
-
})
|
|
760
|
+
}),
|
|
624
761
|
};
|
|
625
762
|
}
|
|
626
763
|
}
|
|
627
764
|
|
|
628
|
-
var version = "2.
|
|
765
|
+
var version = "2.2.0";
|
|
629
766
|
|
|
630
|
-
const dotenvConfigOutput = require('dotenv').config(
|
|
631
|
-
override: true
|
|
632
|
-
});
|
|
767
|
+
const dotenvConfigOutput = require('dotenv').config();
|
|
633
768
|
require('dotenv-expand').expand(dotenvConfigOutput);
|
|
634
769
|
const innetJS = new InnetJS();
|
|
770
|
+
const errorOption = new commander.Option('-e, --error', 'Show error details');
|
|
771
|
+
const releaseOption = new commander.Option('-r, --release <release>', 'Select release type')
|
|
772
|
+
.choices(['patch', 'minor', 'major']);
|
|
635
773
|
commander.program
|
|
636
774
|
.version(version, '-v, --version');
|
|
637
775
|
commander.program
|
|
638
776
|
.command('init <app-name>')
|
|
639
777
|
.description('Create innet boilerplate')
|
|
640
|
-
.option('-e, --error', 'Show error details')
|
|
641
778
|
.option('-t, --template <template>', 'Select template fe or be')
|
|
779
|
+
.addOption(errorOption)
|
|
642
780
|
.action((appName, { error, template }) => {
|
|
643
781
|
innetJS.init(appName, { template }).catch(e => {
|
|
644
782
|
if (error) {
|
|
@@ -650,7 +788,7 @@ commander.program
|
|
|
650
788
|
commander.program
|
|
651
789
|
.command('run <file-path>')
|
|
652
790
|
.description('Run js, ts or tsx file')
|
|
653
|
-
.
|
|
791
|
+
.addOption(errorOption)
|
|
654
792
|
.action((filePath, { error }) => {
|
|
655
793
|
innetJS.run(filePath).catch(e => {
|
|
656
794
|
if (error) {
|
|
@@ -662,10 +800,11 @@ commander.program
|
|
|
662
800
|
commander.program
|
|
663
801
|
.command('start')
|
|
664
802
|
.description('Start development with innet boilerplate')
|
|
665
|
-
.option('-e, --error', 'Show error details')
|
|
666
803
|
.option('-n, --node', 'Start development for Node.js')
|
|
667
|
-
.
|
|
668
|
-
|
|
804
|
+
.option('-i, --index <index>', 'Root index file name', 'index')
|
|
805
|
+
.addOption(errorOption)
|
|
806
|
+
.action(({ error, node, index }) => {
|
|
807
|
+
innetJS.start({ node, error, index }).catch(e => {
|
|
669
808
|
if (error) {
|
|
670
809
|
console.error(e);
|
|
671
810
|
process.exit(1);
|
|
@@ -675,10 +814,26 @@ commander.program
|
|
|
675
814
|
commander.program
|
|
676
815
|
.command('build')
|
|
677
816
|
.description('Build production bundle')
|
|
678
|
-
.
|
|
817
|
+
.addOption(errorOption)
|
|
679
818
|
.option('-n, --node', 'Build for node.js')
|
|
680
|
-
.
|
|
681
|
-
|
|
819
|
+
.option('-i, --index <index>', 'Root index file name', 'index')
|
|
820
|
+
.action(({ error, node, index }) => {
|
|
821
|
+
innetJS.build({ node, index }).catch(e => {
|
|
822
|
+
if (error) {
|
|
823
|
+
console.error(e);
|
|
824
|
+
process.exit(1);
|
|
825
|
+
}
|
|
826
|
+
});
|
|
827
|
+
});
|
|
828
|
+
commander.program
|
|
829
|
+
.command('release')
|
|
830
|
+
.description('Release new version of a library')
|
|
831
|
+
.option('-n, --node', 'Release for node.js')
|
|
832
|
+
.option('-i, --index <index>', 'Root index file name', 'index')
|
|
833
|
+
.addOption(releaseOption)
|
|
834
|
+
.addOption(errorOption)
|
|
835
|
+
.action(({ error, node, index, release }) => {
|
|
836
|
+
innetJS.release({ node, index, release }).catch(e => {
|
|
682
837
|
if (error) {
|
|
683
838
|
console.error(e);
|
|
684
839
|
process.exit(1);
|