innetjs 1.12.1 → 2.0.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 +114 -34
- package/extract.d.ts +1 -0
- package/index.d.ts +6 -2
- package/index.es6.js +136 -57
- package/index.js +113 -33
- package/package.json +17 -14
- package/templates/be/.env +0 -1
- package/templates/be/README.md +0 -15
- package/templates/be/package.json +0 -13
- package/templates/be/src/controller/index.tsx +0 -7
- package/templates/be/src/declaration.d.ts +0 -4
- package/templates/be/src/index.tsx +0 -6
- package/templates/be/src/view/App/App.css +0 -12
- package/templates/be/src/view/App/App.tsx +0 -15
- package/templates/be/src/view/App/index.ts +0 -1
- package/templates/be/src/view/Page/Page.css +0 -7
- package/templates/be/src/view/Page/Page.tsx +0 -24
- package/templates/be/src/view/Page/index.ts +0 -1
- package/templates/be/src/view/index.ts +0 -2
- package/templates/be/tsconfig.json +0 -31
- package/templates/fe/.env +0 -1
- package/templates/fe/README.md +0 -84
- package/templates/fe/package.json +0 -16
- package/templates/fe/public/favicon.ico +0 -0
- package/templates/fe/public/index.html +0 -14
- package/templates/fe/src/App.scss +0 -48
- package/templates/fe/src/App.tsx +0 -36
- package/templates/fe/src/componenst/Page/Page.scss +0 -22
- package/templates/fe/src/componenst/Page/Page.tsx +0 -18
- package/templates/fe/src/componenst/Page/index.ts +0 -1
- package/templates/fe/src/declaration.d.ts +0 -9
- package/templates/fe/src/index.tsx +0 -6
- package/templates/fe/src/pages/HomePage/HomePage.scss +0 -25
- package/templates/fe/src/pages/HomePage/HomePage.tsx +0 -24
- package/templates/fe/src/pages/HomePage/index.ts +0 -1
- package/templates/fe/tsconfig.json +0 -30
package/bin/innet
CHANGED
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var path = require('path');
|
|
4
|
+
var path$1 = require('path');
|
|
5
5
|
var fs = require('fs-extra');
|
|
6
6
|
var http = require('http');
|
|
7
7
|
var https = require('https');
|
|
8
|
+
var util = require('util');
|
|
9
|
+
var axios = require('axios');
|
|
8
10
|
var logger = require('@cantinc/logger');
|
|
9
11
|
var chalk = require('chalk');
|
|
10
|
-
var util = require('util');
|
|
11
12
|
var rollup = require('rollup');
|
|
12
13
|
var commonjs = require('@rollup/plugin-commonjs');
|
|
13
14
|
var pluginNodeResolve = require('@rollup/plugin-node-resolve');
|
|
14
15
|
var rollupPluginTerser = require('rollup-plugin-terser');
|
|
15
16
|
var typescript = require('rollup-plugin-typescript2');
|
|
16
|
-
var
|
|
17
|
+
var styles = require('rollup-plugin-styles');
|
|
17
18
|
var autoprefixer = require('autoprefixer');
|
|
18
19
|
var express = require('express');
|
|
19
20
|
var json = require('@rollup/plugin-json');
|
|
@@ -22,20 +23,22 @@ var proxy = require('express-http-proxy');
|
|
|
22
23
|
var selector = require('cli-select');
|
|
23
24
|
var jsx = require('rollup-plugin-innet-jsx');
|
|
24
25
|
var filesize = require('rollup-plugin-filesize');
|
|
26
|
+
var unzipper = require('unzipper');
|
|
25
27
|
var commander = require('commander');
|
|
26
28
|
|
|
27
29
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
28
30
|
|
|
29
|
-
var path__default = /*#__PURE__*/_interopDefaultLegacy(path);
|
|
31
|
+
var path__default = /*#__PURE__*/_interopDefaultLegacy(path$1);
|
|
30
32
|
var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
|
|
31
33
|
var http__default = /*#__PURE__*/_interopDefaultLegacy(http);
|
|
32
34
|
var https__default = /*#__PURE__*/_interopDefaultLegacy(https);
|
|
35
|
+
var axios__default = /*#__PURE__*/_interopDefaultLegacy(axios);
|
|
33
36
|
var logger__default = /*#__PURE__*/_interopDefaultLegacy(logger);
|
|
34
37
|
var chalk__default = /*#__PURE__*/_interopDefaultLegacy(chalk);
|
|
35
38
|
var rollup__default = /*#__PURE__*/_interopDefaultLegacy(rollup);
|
|
36
39
|
var commonjs__default = /*#__PURE__*/_interopDefaultLegacy(commonjs);
|
|
37
40
|
var typescript__default = /*#__PURE__*/_interopDefaultLegacy(typescript);
|
|
38
|
-
var
|
|
41
|
+
var styles__default = /*#__PURE__*/_interopDefaultLegacy(styles);
|
|
39
42
|
var autoprefixer__default = /*#__PURE__*/_interopDefaultLegacy(autoprefixer);
|
|
40
43
|
var express__default = /*#__PURE__*/_interopDefaultLegacy(express);
|
|
41
44
|
var json__default = /*#__PURE__*/_interopDefaultLegacy(json);
|
|
@@ -45,7 +48,7 @@ var selector__default = /*#__PURE__*/_interopDefaultLegacy(selector);
|
|
|
45
48
|
var jsx__default = /*#__PURE__*/_interopDefaultLegacy(jsx);
|
|
46
49
|
var filesize__default = /*#__PURE__*/_interopDefaultLegacy(filesize);
|
|
47
50
|
|
|
48
|
-
|
|
51
|
+
/******************************************************************************
|
|
49
52
|
Copyright (c) Microsoft Corporation.
|
|
50
53
|
|
|
51
54
|
Permission to use, copy, modify, and/or distribute this software for any
|
|
@@ -70,11 +73,54 @@ function __awaiter(thisArg, _arguments, P, generator) {
|
|
|
70
73
|
});
|
|
71
74
|
}
|
|
72
75
|
|
|
76
|
+
const Writer = require('fstream').Writer;
|
|
77
|
+
const path = require('path');
|
|
78
|
+
const stream = require('stream');
|
|
79
|
+
const duplexer2 = require('duplexer2');
|
|
80
|
+
const Promise$1 = require('bluebird');
|
|
81
|
+
function Extract(opts, template) {
|
|
82
|
+
const reduceCount = 19 + template.length;
|
|
83
|
+
// make sure path is normalized before using it
|
|
84
|
+
opts.path = path.resolve(path.normalize(opts.path));
|
|
85
|
+
// @ts-ignore
|
|
86
|
+
const parser = new unzipper.Parse(opts);
|
|
87
|
+
const outStream = new stream.Writable({ objectMode: true });
|
|
88
|
+
outStream._write = function (entry, encoding, cb) {
|
|
89
|
+
if (entry.type === 'Directory')
|
|
90
|
+
return cb();
|
|
91
|
+
const extractPath = path.join(opts.path, entry.path.slice(reduceCount));
|
|
92
|
+
if (extractPath.indexOf(opts.path) !== 0) {
|
|
93
|
+
return cb();
|
|
94
|
+
}
|
|
95
|
+
const writer = opts.getWriter ? opts.getWriter({ path: extractPath }) : Writer({ path: extractPath });
|
|
96
|
+
entry.pipe(writer)
|
|
97
|
+
.on('error', cb)
|
|
98
|
+
.on('close', cb);
|
|
99
|
+
};
|
|
100
|
+
const extract = duplexer2(parser, outStream);
|
|
101
|
+
parser.once('crx-header', function (crxHeader) {
|
|
102
|
+
extract.crxHeader = crxHeader;
|
|
103
|
+
});
|
|
104
|
+
parser
|
|
105
|
+
.pipe(outStream)
|
|
106
|
+
.on('finish', function () {
|
|
107
|
+
extract.emit('close');
|
|
108
|
+
});
|
|
109
|
+
extract.promise = function () {
|
|
110
|
+
return new Promise$1(function (resolve, reject) {
|
|
111
|
+
extract.on('close', resolve);
|
|
112
|
+
extract.on('error', reject);
|
|
113
|
+
});
|
|
114
|
+
};
|
|
115
|
+
return extract;
|
|
116
|
+
}
|
|
117
|
+
|
|
73
118
|
const livereload = require('rollup-plugin-livereload');
|
|
74
119
|
const { string } = require('rollup-plugin-string');
|
|
75
120
|
const { exec, spawn } = require('child_process');
|
|
76
121
|
const readline = require('readline');
|
|
77
122
|
const execAsync = util.promisify(exec);
|
|
123
|
+
const copyFiles = util.promisify(fs__default["default"].copy);
|
|
78
124
|
require('dotenv').config();
|
|
79
125
|
function getFile(file) {
|
|
80
126
|
file = path__default["default"].resolve(file);
|
|
@@ -98,16 +144,27 @@ function getFile(file) {
|
|
|
98
144
|
}
|
|
99
145
|
return file;
|
|
100
146
|
}
|
|
147
|
+
function convertIndexFile(data, version) {
|
|
148
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
149
|
+
return data
|
|
150
|
+
.toString()
|
|
151
|
+
.replace('</head>', `<script type="module" defer src="index.js${version ? `?v=${version}` : ''}"></script></head>`);
|
|
152
|
+
});
|
|
153
|
+
}
|
|
101
154
|
const reporter = (options, outputOptions, info) => {
|
|
102
155
|
logger__default["default"].log(`${chalk__default["default"].yellow(info.fileName)} ${chalk__default["default"].green(info.bundleSize)} [ gzip: ${chalk__default["default"].green(info.gzipSize)} ]`);
|
|
103
156
|
return '';
|
|
104
157
|
};
|
|
105
158
|
class InnetJS {
|
|
106
|
-
constructor({ projectFolder = process.env.PROJECT_FOLDER || '', publicFolder = process.env.PUBLIC_FOLDER || 'public', buildFolder = process.env.BUILD_FOLDER ||
|
|
159
|
+
constructor({ projectFolder = process.env.PROJECT_FOLDER || '', 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 || '*', } = {}) {
|
|
107
160
|
this.projectFolder = path__default["default"].resolve(projectFolder);
|
|
108
161
|
this.publicFolder = path__default["default"].resolve(publicFolder);
|
|
109
162
|
this.buildFolder = path__default["default"].resolve(buildFolder);
|
|
110
163
|
this.srcFolder = path__default["default"].resolve(srcFolder);
|
|
164
|
+
this.publicIndexFile = path__default["default"].join(publicFolder, 'index.html');
|
|
165
|
+
this.buildIndexFile = path__default["default"].join(buildFolder, 'index.html');
|
|
166
|
+
this.devBuildFolder = path__default["default"].resolve(projectFolder, 'node_modules', '.cache', 'innetjs', 'build');
|
|
167
|
+
this.devBuildIndexFile = path__default["default"].join(this.devBuildFolder, 'index.html');
|
|
111
168
|
this.sourcemap = sourcemap;
|
|
112
169
|
this.cssModules = cssModules;
|
|
113
170
|
this.cssInJs = cssInJs;
|
|
@@ -121,14 +178,18 @@ class InnetJS {
|
|
|
121
178
|
init(appName, { template, force = false } = {}) {
|
|
122
179
|
return __awaiter(this, void 0, void 0, function* () {
|
|
123
180
|
const appPath = path__default["default"].resolve(appName);
|
|
124
|
-
|
|
181
|
+
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'); }));
|
|
182
|
+
const templates = data.map(({ name }) => name).filter(name => name !== 'main');
|
|
183
|
+
if (!template || !templates.includes(template)) {
|
|
125
184
|
logger__default["default"].log(chalk__default["default"].green(`Select one of those templates`));
|
|
126
185
|
const { value } = yield selector__default["default"]({
|
|
127
|
-
values:
|
|
186
|
+
values: templates
|
|
128
187
|
});
|
|
129
188
|
template = value;
|
|
130
189
|
readline.moveCursor(process.stdout, 0, -1);
|
|
131
|
-
|
|
190
|
+
const text = `Selected template: ${chalk__default["default"].white(value)}`;
|
|
191
|
+
logger__default["default"].start(text);
|
|
192
|
+
logger__default["default"].end(text);
|
|
132
193
|
}
|
|
133
194
|
if (!force) {
|
|
134
195
|
yield logger__default["default"].start('Check if app folder is available', () => __awaiter(this, void 0, void 0, function* () {
|
|
@@ -148,14 +209,16 @@ class InnetJS {
|
|
|
148
209
|
}
|
|
149
210
|
}));
|
|
150
211
|
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
212
|
+
yield logger__default["default"].start('Download template', () => __awaiter(this, void 0, void 0, function* () {
|
|
213
|
+
const { data } = yield axios__default["default"].get(`https://github.com/d8corp/innetjs-templates/archive/refs/heads/${template}.zip`, {
|
|
214
|
+
responseType: 'stream'
|
|
215
|
+
});
|
|
216
|
+
yield new Promise((resolve, reject) => {
|
|
217
|
+
data.pipe(Extract({
|
|
218
|
+
path: appPath,
|
|
219
|
+
}, template)).on('finish', resolve).on('error', reject);
|
|
220
|
+
});
|
|
157
221
|
}));
|
|
158
|
-
yield logger__default["default"].start('Copy files', () => fs__default["default"].copy(templatePath, appPath));
|
|
159
222
|
yield logger__default["default"].start('Install packages', () => execAsync(`cd ${appPath} && npm i`));
|
|
160
223
|
});
|
|
161
224
|
}
|
|
@@ -166,6 +229,7 @@ class InnetJS {
|
|
|
166
229
|
const pkg = node && (yield this.getPackage());
|
|
167
230
|
const inputOptions = {
|
|
168
231
|
input: path__default["default"].resolve(this.srcFolder, `index.${indexExtension}`),
|
|
232
|
+
preserveEntrySignatures: 'strict',
|
|
169
233
|
plugins: [
|
|
170
234
|
commonjs__default["default"](),
|
|
171
235
|
json__default["default"](),
|
|
@@ -205,12 +269,13 @@ class InnetJS {
|
|
|
205
269
|
'**/*.css',
|
|
206
270
|
'**/*.scss',
|
|
207
271
|
]
|
|
208
|
-
}),
|
|
272
|
+
}), styles__default["default"]({
|
|
273
|
+
mode: this.cssInJs ? 'inject' : 'extract',
|
|
274
|
+
url: true,
|
|
209
275
|
plugins: [autoprefixer__default["default"]()],
|
|
210
|
-
extract: !this.cssInJs,
|
|
211
276
|
modules: this.cssModules,
|
|
212
277
|
sourceMap: this.sourcemap,
|
|
213
|
-
minimize: true
|
|
278
|
+
minimize: true,
|
|
214
279
|
}));
|
|
215
280
|
outputOptions.format = 'es';
|
|
216
281
|
outputOptions.plugins = [
|
|
@@ -224,6 +289,12 @@ class InnetJS {
|
|
|
224
289
|
const bundle = yield rollup__default["default"].rollup(inputOptions);
|
|
225
290
|
yield bundle.write(outputOptions);
|
|
226
291
|
yield bundle.close();
|
|
292
|
+
if (!node) {
|
|
293
|
+
yield copyFiles(this.publicFolder, this.buildFolder);
|
|
294
|
+
const data = yield fs.promises.readFile(this.publicIndexFile);
|
|
295
|
+
const pkg = yield this.getPackage();
|
|
296
|
+
yield fs.promises.writeFile(this.buildIndexFile, yield convertIndexFile(data, pkg.version));
|
|
297
|
+
}
|
|
227
298
|
}));
|
|
228
299
|
if (pkg) {
|
|
229
300
|
yield logger__default["default"].start('Copy package.json', () => __awaiter(this, void 0, void 0, function* () {
|
|
@@ -244,12 +315,13 @@ class InnetJS {
|
|
|
244
315
|
start({ node = false, error = false } = {}) {
|
|
245
316
|
return __awaiter(this, void 0, void 0, function* () {
|
|
246
317
|
const indexExtension = yield this.getProjectExtension();
|
|
247
|
-
const pkg =
|
|
248
|
-
yield logger__default["default"].start('Remove build', () => fs__default["default"].remove(this.
|
|
318
|
+
const pkg = yield this.getPackage();
|
|
319
|
+
yield logger__default["default"].start('Remove build', () => fs__default["default"].remove(this.devBuildFolder));
|
|
249
320
|
const options = {
|
|
250
321
|
input: path__default["default"].resolve(this.srcFolder, `index.${indexExtension}`),
|
|
322
|
+
preserveEntrySignatures: 'strict',
|
|
251
323
|
output: {
|
|
252
|
-
dir: this.
|
|
324
|
+
dir: this.devBuildFolder,
|
|
253
325
|
sourcemap: true
|
|
254
326
|
},
|
|
255
327
|
plugins: [
|
|
@@ -304,15 +376,16 @@ class InnetJS {
|
|
|
304
376
|
'**/*.css',
|
|
305
377
|
'**/*.scss',
|
|
306
378
|
]
|
|
307
|
-
}),
|
|
379
|
+
}), styles__default["default"]({
|
|
380
|
+
mode: this.cssInJs ? 'inject' : 'extract',
|
|
381
|
+
url: true,
|
|
308
382
|
plugins: [autoprefixer__default["default"]()],
|
|
309
383
|
modules: this.cssModules,
|
|
310
384
|
sourceMap: true,
|
|
311
|
-
|
|
312
|
-
}), this.createClient(key, cert), livereload(Object.assign({ watch: this.publicFolder, verbose: false }, (key && cert ? { https: { key, cert } } : {}))));
|
|
385
|
+
}), this.createClient(key, cert, pkg), livereload(Object.assign({ watch: this.publicFolder, verbose: false }, (key && cert ? { https: { key, cert } } : {}))));
|
|
313
386
|
}
|
|
314
387
|
const watcher = rollup__default["default"].watch(options);
|
|
315
|
-
watcher.on('event', e => {
|
|
388
|
+
watcher.on('event', (e) => __awaiter(this, void 0, void 0, function* () {
|
|
316
389
|
if (e.code == 'ERROR') {
|
|
317
390
|
logger__default["default"].end('Bundling', error ? e.error.stack : e.error.message);
|
|
318
391
|
}
|
|
@@ -322,7 +395,7 @@ class InnetJS {
|
|
|
322
395
|
else if (e.code === 'BUNDLE_END') {
|
|
323
396
|
logger__default["default"].end('Bundling');
|
|
324
397
|
}
|
|
325
|
-
});
|
|
398
|
+
}));
|
|
326
399
|
});
|
|
327
400
|
}
|
|
328
401
|
run(file) {
|
|
@@ -414,14 +487,21 @@ class InnetJS {
|
|
|
414
487
|
return this.package;
|
|
415
488
|
});
|
|
416
489
|
}
|
|
417
|
-
createClient(key, cert) {
|
|
490
|
+
createClient(key, cert, pkg) {
|
|
418
491
|
let app;
|
|
419
492
|
return {
|
|
420
|
-
writeBundle: () => {
|
|
493
|
+
writeBundle: () => __awaiter(this, void 0, void 0, function* () {
|
|
421
494
|
var _a;
|
|
422
495
|
if (!app) {
|
|
423
|
-
const httpsUsing = !!(cert && key);
|
|
424
496
|
app = express__default["default"]();
|
|
497
|
+
const update = () => __awaiter(this, void 0, void 0, function* () {
|
|
498
|
+
const data = yield fs.promises.readFile(this.publicIndexFile);
|
|
499
|
+
yield fs.promises.writeFile(this.devBuildIndexFile, yield convertIndexFile(data, pkg.version));
|
|
500
|
+
});
|
|
501
|
+
fs__default["default"].watch(this.publicIndexFile, update);
|
|
502
|
+
yield update();
|
|
503
|
+
const httpsUsing = !!(cert && key);
|
|
504
|
+
app.use(express__default["default"].static(this.devBuildFolder));
|
|
425
505
|
app.use(express__default["default"].static(this.publicFolder));
|
|
426
506
|
if ((_a = this.proxy) === null || _a === void 0 ? void 0 : _a.startsWith('http')) {
|
|
427
507
|
app.use(this.api, proxy__default["default"](this.proxy, {
|
|
@@ -430,14 +510,14 @@ class InnetJS {
|
|
|
430
510
|
}));
|
|
431
511
|
}
|
|
432
512
|
app.use(/^[^.]+$/, (req, res) => {
|
|
433
|
-
res.sendFile(this.
|
|
513
|
+
res.sendFile(this.devBuildFolder + '/index.html');
|
|
434
514
|
});
|
|
435
515
|
const server = httpsUsing ? https__default["default"].createServer({ key, cert }, app) : http__default["default"].createServer(app);
|
|
436
516
|
server.listen(this.port, () => {
|
|
437
517
|
console.log(`${chalk__default["default"].green('➤')} Server started on http${httpsUsing ? 's' : ''}://localhost:${this.port}`);
|
|
438
518
|
});
|
|
439
519
|
}
|
|
440
|
-
}
|
|
520
|
+
})
|
|
441
521
|
};
|
|
442
522
|
}
|
|
443
523
|
createServer(external) {
|
|
@@ -456,7 +536,7 @@ class InnetJS {
|
|
|
456
536
|
}
|
|
457
537
|
}
|
|
458
538
|
|
|
459
|
-
var version = "
|
|
539
|
+
var version = "2.0.0";
|
|
460
540
|
|
|
461
541
|
require('dotenv').config();
|
|
462
542
|
const innetJS = new InnetJS();
|
package/extract.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function Extract(opts: any, template: any): any;
|
package/index.d.ts
CHANGED
|
@@ -3,7 +3,11 @@ export default class InnetJS {
|
|
|
3
3
|
projectFolder: string;
|
|
4
4
|
publicFolder: string;
|
|
5
5
|
buildFolder: string;
|
|
6
|
+
devBuildFolder: string;
|
|
6
7
|
srcFolder: string;
|
|
8
|
+
publicIndexFile: string;
|
|
9
|
+
buildIndexFile: string;
|
|
10
|
+
devBuildIndexFile: string;
|
|
7
11
|
sslKey: string;
|
|
8
12
|
sslCrt: string;
|
|
9
13
|
proxy: string;
|
|
@@ -39,8 +43,8 @@ export default class InnetJS {
|
|
|
39
43
|
run(file: any): Promise<void>;
|
|
40
44
|
getProjectExtension(): Promise<Extensions>;
|
|
41
45
|
getPackage(): Promise<Record<string, any>>;
|
|
42
|
-
createClient(key: any, cert: any): {
|
|
43
|
-
writeBundle: () => void
|
|
46
|
+
createClient(key: any, cert: any, pkg: any): {
|
|
47
|
+
writeBundle: () => Promise<void>;
|
|
44
48
|
};
|
|
45
49
|
createServer(external: string[]): {
|
|
46
50
|
writeBundle: () => Promise<void>;
|