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/index.js CHANGED
@@ -1,63 +1,70 @@
1
1
  'use strict';
2
2
 
3
- var path$1 = require('path');
4
- var fs = require('fs-extra');
5
- var http = require('http');
6
- var address = require('address');
7
- var https = require('https');
8
- var util = require('util');
9
- var axios = require('axios');
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
10
5
  var logger = require('@cantinc/logger');
11
- var chalk = require('chalk');
12
- var rollup = require('rollup');
13
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');
14
10
  var pluginNodeResolve = require('@rollup/plugin-node-resolve');
15
- var rollupPluginTerser = require('rollup-plugin-terser');
16
- var typescript = require('rollup-plugin-typescript2');
17
- var styles = require('rollup-plugin-styles');
11
+ var address = require('address');
18
12
  var autoprefixer = require('autoprefixer');
13
+ var axios = require('axios');
14
+ var chalk = require('chalk');
15
+ var selector = require('cli-select');
19
16
  var express = require('express');
20
- var json = require('@rollup/plugin-json');
21
- var tmp = require('tmp');
22
17
  var proxy = require('express-http-proxy');
23
- var selector = require('cli-select');
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');
24
24
  var prompt = require('prompts');
25
- var jsx = require('rollup-plugin-innet-jsx');
25
+ var rollup = require('rollup');
26
26
  var filesize = require('rollup-plugin-filesize');
27
- var image = require('@rollup/plugin-image');
28
- var eslint = require('@rollup/plugin-eslint');
29
- var polyfill = require('rollup-plugin-polyfill-node');
30
27
  var injectEnv = require('rollup-plugin-inject-process-env');
31
- var linesAndColumns = require('lines-and-columns');
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');
32
37
  var unzipper = require('unzipper');
33
38
 
34
39
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
35
40
 
36
- var path__default = /*#__PURE__*/_interopDefaultLegacy(path$1);
37
- var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
38
- var http__default = /*#__PURE__*/_interopDefaultLegacy(http);
39
- var address__default = /*#__PURE__*/_interopDefaultLegacy(address);
40
- var https__default = /*#__PURE__*/_interopDefaultLegacy(https);
41
- var axios__default = /*#__PURE__*/_interopDefaultLegacy(axios);
42
41
  var logger__default = /*#__PURE__*/_interopDefaultLegacy(logger);
43
- var chalk__default = /*#__PURE__*/_interopDefaultLegacy(chalk);
44
- var rollup__default = /*#__PURE__*/_interopDefaultLegacy(rollup);
45
42
  var commonjs__default = /*#__PURE__*/_interopDefaultLegacy(commonjs);
46
- var typescript__default = /*#__PURE__*/_interopDefaultLegacy(typescript);
47
- var styles__default = /*#__PURE__*/_interopDefaultLegacy(styles);
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);
48
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);
49
51
  var express__default = /*#__PURE__*/_interopDefaultLegacy(express);
50
- var json__default = /*#__PURE__*/_interopDefaultLegacy(json);
51
- var tmp__default = /*#__PURE__*/_interopDefaultLegacy(tmp);
52
52
  var proxy__default = /*#__PURE__*/_interopDefaultLegacy(proxy);
53
- var selector__default = /*#__PURE__*/_interopDefaultLegacy(selector);
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);
54
58
  var prompt__default = /*#__PURE__*/_interopDefaultLegacy(prompt);
55
- var jsx__default = /*#__PURE__*/_interopDefaultLegacy(jsx);
59
+ var rollup__default = /*#__PURE__*/_interopDefaultLegacy(rollup);
56
60
  var filesize__default = /*#__PURE__*/_interopDefaultLegacy(filesize);
57
- var image__default = /*#__PURE__*/_interopDefaultLegacy(image);
58
- var eslint__default = /*#__PURE__*/_interopDefaultLegacy(eslint);
59
- var polyfill__default = /*#__PURE__*/_interopDefaultLegacy(polyfill);
60
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);
61
68
 
62
69
  /******************************************************************************
63
70
  Copyright (c) Microsoft Corporation.
@@ -84,6 +91,35 @@ function __awaiter(thisArg, _arguments, P, generator) {
84
91
  });
85
92
  }
86
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
+
87
123
  const Writer = require('fstream').Writer;
88
124
  const path = require('path');
89
125
  const stream = require('stream');
@@ -93,7 +129,7 @@ function Extract(opts, template) {
93
129
  const reduceCount = 19 + template.length;
94
130
  // make sure path is normalized before using it
95
131
  opts.path = path.resolve(path.normalize(opts.path));
96
- // @ts-ignore
132
+ // @ts-expect-error
97
133
  const parser = new unzipper.Parse(opts);
98
134
  const outStream = new stream.Writable({ objectMode: true });
99
135
  outStream._write = function (entry, encoding, cb) {
@@ -126,35 +162,6 @@ function Extract(opts, template) {
126
162
  return extract;
127
163
  }
128
164
 
129
- const lintIncludeDom = [
130
- '**/*.ts',
131
- '**/*.tsx',
132
- '**/*.js',
133
- '**/*.jsx',
134
- ];
135
- const stringExcludeDom = [
136
- '**/*.ts',
137
- '**/*.tsx',
138
- '**/*.js',
139
- '**/*.jsx',
140
- '**/*.json',
141
- '**/*.css',
142
- '**/*.scss',
143
- '**/*.webp',
144
- '**/*.gif',
145
- '**/*.png',
146
- '**/*.jpeg',
147
- '**/*.jpg',
148
- '**/*.svg',
149
- ];
150
- const stringExcludeNode = [
151
- '**/*.ts',
152
- '**/*.tsx',
153
- '**/*.js',
154
- '**/*.jsx',
155
- '**/*.json',
156
- ];
157
-
158
165
  function getFile(file) {
159
166
  file = path__default["default"].resolve(file);
160
167
  if (!fs__default["default"].existsSync(file)) {
@@ -195,6 +202,8 @@ const { exec, spawn } = require('child_process');
195
202
  const readline = require('readline');
196
203
  const execAsync = util.promisify(exec);
197
204
  const copyFiles = util.promisify(fs__default["default"].copy);
205
+ const dotenvConfigOutput = require('dotenv').config();
206
+ require('dotenv-expand').expand(dotenvConfigOutput);
198
207
  const REG_CLEAR_TEXT = /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g;
199
208
  function normalizeEnv(value) {
200
209
  if (value) {
@@ -207,12 +216,21 @@ const innetEnv = Object.keys(process.env).reduce((result, key) => {
207
216
  }
208
217
  return result;
209
218
  }, {});
219
+ const scriptExtensions = ['ts', 'js', 'tsx', 'jsx'];
220
+ const indexExt = scriptExtensions.join(',');
210
221
  class InnetJS {
211
- 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/?*', } = {}) {
212
223
  this.projectFolder = path__default["default"].resolve(projectFolder);
213
224
  this.publicFolder = path__default["default"].resolve(publicFolder);
225
+ this.releaseFolder = path__default["default"].resolve(releaseFolder);
214
226
  this.buildFolder = path__default["default"].resolve(buildFolder);
215
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');
216
234
  this.publicIndexFile = path__default["default"].join(publicFolder, 'index.html');
217
235
  this.buildIndexFile = path__default["default"].join(buildFolder, 'index.html');
218
236
  this.devBuildFolder = path__default["default"].resolve(projectFolder, 'node_modules', '.cache', 'innetjs', 'build');
@@ -234,9 +252,9 @@ class InnetJS {
234
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'); }));
235
253
  const templates = data.map(({ name }) => name).filter(name => name !== 'main');
236
254
  if (!template || !templates.includes(template)) {
237
- logger__default["default"].log(chalk__default["default"].green(`Select one of those templates`));
255
+ logger__default["default"].log(chalk__default["default"].green('Select one of those templates'));
238
256
  const { value } = yield selector__default["default"]({
239
- values: templates
257
+ values: templates,
240
258
  });
241
259
  template = value;
242
260
  readline.moveCursor(process.stdout, 0, -1);
@@ -249,7 +267,7 @@ class InnetJS {
249
267
  if (fs__default["default"].existsSync(appPath)) {
250
268
  logger__default["default"].log(chalk__default["default"].red(`'${appPath}' already exist, what do you want?`));
251
269
  const { id: result, value } = yield selector__default["default"]({
252
- values: ['Stop the process', 'Remove the folder', 'Merge with template']
270
+ values: ['Stop the process', 'Remove the folder', 'Merge with template'],
253
271
  });
254
272
  readline.moveCursor(process.stdout, 0, -1);
255
273
  logger__default["default"].log(`Already exist, selected: ${value}`);
@@ -264,7 +282,7 @@ class InnetJS {
264
282
  }
265
283
  yield logger__default["default"].start('Download template', () => __awaiter(this, void 0, void 0, function* () {
266
284
  const { data } = yield axios__default["default"].get(`https://github.com/d8corp/innetjs-templates/archive/refs/heads/${template}.zip`, {
267
- responseType: 'stream'
285
+ responseType: 'stream',
268
286
  });
269
287
  yield new Promise((resolve, reject) => {
270
288
  data.pipe(Extract({
@@ -275,60 +293,55 @@ class InnetJS {
275
293
  yield logger__default["default"].start('Install packages', () => execAsync(`cd ${appPath} && npm i`));
276
294
  });
277
295
  }
278
- build({ node = false } = {}) {
296
+ build({ node = false, index = 'index' } = {}) {
279
297
  return __awaiter(this, void 0, void 0, function* () {
280
- const indexExtension = yield this.getProjectExtension();
298
+ const input = glob__default["default"].sync(`src/${index}.{${indexExt}}`);
299
+ if (!input.length) {
300
+ throw Error('index file is not detected');
301
+ }
281
302
  yield logger__default["default"].start('Remove build', () => fs__default["default"].remove(this.buildFolder));
282
303
  const pkg = node && (yield this.getPackage());
283
304
  const inputOptions = {
284
- input: path__default["default"].resolve(this.srcFolder, `index.${indexExtension}`),
305
+ input,
285
306
  preserveEntrySignatures: 'strict',
286
307
  plugins: [
287
308
  commonjs__default["default"](),
288
309
  json__default["default"](),
289
310
  typescript__default["default"](),
290
311
  jsx__default["default"](),
291
- ]
312
+ eslint__default["default"]({
313
+ include: lintInclude,
314
+ }),
315
+ ],
292
316
  };
293
317
  const outputOptions = {
294
318
  dir: this.buildFolder,
295
- sourcemap: this.sourcemap
319
+ sourcemap: this.sourcemap,
296
320
  };
297
321
  if (node) {
298
322
  outputOptions.format = 'cjs';
299
323
  inputOptions.external = Object.keys((pkg === null || pkg === void 0 ? void 0 : pkg.dependencies) || {});
300
324
  inputOptions.plugins.push(pluginNodeResolve.nodeResolve({
301
- moduleDirectories: [path__default["default"].resolve(this.buildFolder, 'node_modules')]
325
+ moduleDirectories: [path__default["default"].resolve(this.buildFolder, 'node_modules')],
302
326
  }), string({
303
327
  include: '**/*.*',
304
328
  exclude: stringExcludeNode,
305
329
  }));
306
330
  }
307
331
  else {
308
- inputOptions.plugins = [
309
- eslint__default["default"]({
310
- include: lintIncludeDom,
311
- }),
312
- ...inputOptions.plugins,
313
- pluginNodeResolve.nodeResolve({
314
- browser: true,
315
- }),
316
- polyfill__default["default"](),
317
- image__default["default"](),
318
- styles__default["default"]({
319
- mode: this.cssInJs ? 'inject' : 'extract',
320
- url: true,
321
- plugins: [autoprefixer__default["default"]()],
322
- modules: this.cssModules,
323
- sourceMap: this.sourcemap,
324
- minimize: true,
325
- }),
326
- string({
327
- include: '**/*.*',
328
- exclude: stringExcludeDom,
329
- }),
330
- injectEnv__default["default"](innetEnv),
331
- ];
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));
332
345
  outputOptions.format = 'es';
333
346
  outputOptions.plugins = [
334
347
  rollupPluginTerser.terser(),
@@ -364,13 +377,16 @@ class InnetJS {
364
377
  }
365
378
  });
366
379
  }
367
- start({ node = false, error = false } = {}) {
380
+ start({ node = false, error = false, index = 'index' } = {}) {
368
381
  return __awaiter(this, void 0, void 0, function* () {
369
- const indexExtension = yield this.getProjectExtension();
370
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
+ }
371
387
  yield logger__default["default"].start('Remove build', () => fs__default["default"].remove(this.devBuildFolder));
372
388
  const options = {
373
- input: path__default["default"].resolve(this.srcFolder, `index.${indexExtension}`),
389
+ input,
374
390
  preserveEntrySignatures: 'strict',
375
391
  output: {
376
392
  dir: this.devBuildFolder,
@@ -382,14 +398,18 @@ class InnetJS {
382
398
  typescript__default["default"]({
383
399
  tsconfigOverride: {
384
400
  compilerOptions: {
385
- sourceMap: true
386
- }
401
+ sourceMap: true,
402
+ },
387
403
  },
388
404
  }),
389
405
  jsx__default["default"](),
406
+ eslint__default["default"]({
407
+ include: lintInclude,
408
+ }),
390
409
  ],
391
410
  };
392
411
  if (node) {
412
+ // @ts-expect-error
393
413
  options.output.format = 'cjs';
394
414
  options.external = Object.keys((pkg === null || pkg === void 0 ? void 0 : pkg.dependencies) || {});
395
415
  options.plugins.push(pluginNodeResolve.nodeResolve({
@@ -410,36 +430,24 @@ class InnetJS {
410
430
  : fs__default["default"].existsSync(this.sslCrt)
411
431
  ? fs__default["default"].readFileSync(this.sslCrt)
412
432
  : undefined;
433
+ // @ts-expect-error
413
434
  options.output.format = 'es';
414
- options.plugins = [
415
- eslint__default["default"]({
416
- include: lintIncludeDom,
417
- }),
418
- ...options.plugins,
419
- pluginNodeResolve.nodeResolve({
420
- browser: true,
421
- }),
422
- polyfill__default["default"](),
423
- image__default["default"](),
424
- styles__default["default"]({
425
- mode: this.cssInJs ? 'inject' : 'extract',
426
- url: true,
427
- plugins: [autoprefixer__default["default"]()],
428
- modules: this.cssModules,
429
- sourceMap: true,
430
- }),
431
- string({
432
- include: '**/*.*',
433
- exclude: stringExcludeDom,
434
- }),
435
- this.createClient(key, cert, pkg),
436
- 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 } } : {}))),
437
- injectEnv__default["default"](innetEnv),
438
- ];
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));
439
447
  }
440
448
  const watcher = rollup__default["default"].watch(options);
441
449
  watcher.on('event', (e) => __awaiter(this, void 0, void 0, function* () {
442
- if (e.code == 'ERROR') {
450
+ if (e.code === 'ERROR') {
443
451
  if (e.error.code === 'UNRESOLVED_IMPORT') {
444
452
  const [, importer, file] = e.error.message.match(/^Could not resolve '(.+)' from (.+)$/) || [];
445
453
  const text = (yield fs__default["default"].readFile(file)).toString();
@@ -494,16 +502,16 @@ class InnetJS {
494
502
  typescript__default["default"]({
495
503
  tsconfigOverride: {
496
504
  compilerOptions: {
497
- sourceMap: true
498
- }
499
- }
500
- })
501
- ]
505
+ sourceMap: true,
506
+ },
507
+ },
508
+ }),
509
+ ],
502
510
  };
503
511
  const outputOptions = {
504
512
  format: 'cjs',
505
513
  file: jsFilePath,
506
- sourcemap: true
514
+ sourcemap: true,
507
515
  };
508
516
  const bundle = yield rollup__default["default"].rollup(inputOptions);
509
517
  yield bundle.write(outputOptions);
@@ -514,35 +522,164 @@ class InnetJS {
514
522
  }));
515
523
  });
516
524
  }
517
- // Utils
518
- getProjectExtension() {
525
+ release({ node = false, index = 'index', release, } = {}) {
519
526
  return __awaiter(this, void 0, void 0, function* () {
520
- if (this.projectExtension) {
521
- return this.projectExtension;
522
- }
523
- yield logger__default["default"].start('Check src', () => {
524
- if (!fs__default["default"].existsSync(this.srcFolder)) {
525
- throw Error('src folder is missing');
526
- }
527
- });
528
- yield logger__default["default"].start('Detection of index file', () => {
529
- if (fs__default["default"].existsSync(path__default["default"].join(this.srcFolder, 'index.js'))) {
530
- this.projectExtension = 'js';
531
- }
532
- else if (fs__default["default"].existsSync(path__default["default"].join(this.srcFolder, 'index.ts'))) {
533
- this.projectExtension = 'ts';
534
- }
535
- else if (fs__default["default"].existsSync(path__default["default"].join(this.srcFolder, 'index.tsx'))) {
536
- this.projectExtension = 'tsx';
537
- }
538
- else if (fs__default["default"].existsSync(path__default["default"].join(this.srcFolder, 'index.jsx'))) {
539
- this.projectExtension = 'jsx';
540
- }
541
- else {
542
- 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;
543
549
  }
544
- });
545
- return this.projectExtension;
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
+ }
546
683
  });
547
684
  }
548
685
  getPackage() {
@@ -562,6 +699,7 @@ class InnetJS {
562
699
  createClient(key, cert, pkg) {
563
700
  let app;
564
701
  return {
702
+ name: 'client',
565
703
  writeBundle: () => __awaiter(this, void 0, void 0, function* () {
566
704
  var _a;
567
705
  if (!app) {
@@ -578,7 +716,7 @@ class InnetJS {
578
716
  if ((_a = this.proxy) === null || _a === void 0 ? void 0 : _a.startsWith('http')) {
579
717
  app.use(this.api, proxy__default["default"](this.proxy, {
580
718
  https: httpsUsing,
581
- proxyReqPathResolver: req => req.originalUrl
719
+ proxyReqPathResolver: req => req.originalUrl,
582
720
  }));
583
721
  }
584
722
  app.use(/^([^.]*|.*\.[^.]{5,})$/, (req, res) => {
@@ -596,7 +734,7 @@ class InnetJS {
596
734
  const { userPort } = yield prompt__default["default"]({
597
735
  name: 'userPort',
598
736
  type: 'number',
599
- message: `Port ${e.port} is reserved, please enter another one [${port}]:`
737
+ message: `Port ${e.port} is reserved, please enter another one [${port}]:`,
600
738
  });
601
739
  if (userPort) {
602
740
  port = userPort;
@@ -608,19 +746,22 @@ class InnetJS {
608
746
  }
609
747
  }));
610
748
  }
611
- })
749
+ }),
612
750
  };
613
751
  }
614
752
  createServer() {
615
753
  let app;
616
754
  return {
755
+ name: 'server',
617
756
  writeBundle: () => __awaiter(this, void 0, void 0, function* () {
618
757
  app === null || app === void 0 ? void 0 : app.kill();
619
758
  const filePath = path__default["default"].resolve(this.devBuildFolder, 'index.js');
620
759
  app = spawn('node', ['-r', 'source-map-support/register', filePath], { stdio: 'inherit' });
621
- })
760
+ }),
622
761
  };
623
762
  }
624
763
  }
625
764
 
626
- module.exports = InnetJS;
765
+ exports.InnetJS = InnetJS;
766
+ exports.indexExt = indexExt;
767
+ exports.scriptExtensions = scriptExtensions;