innetjs 2.1.6 → 2.2.1

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 CHANGED
@@ -1,90 +1,100 @@
1
1
  #!/usr/bin/env node
2
2
  'use strict';
3
3
 
4
- var path$1 = require('path');
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');
5
+ var tslib = require('tslib');
11
6
  var logger = require('@cantinc/logger');
12
- var chalk = require('chalk');
13
- var rollup = require('rollup');
14
7
  var commonjs = require('@rollup/plugin-commonjs');
8
+ var eslint = require('@rollup/plugin-eslint');
9
+ var image = require('@rollup/plugin-image');
10
+ var json = require('@rollup/plugin-json');
15
11
  var pluginNodeResolve = require('@rollup/plugin-node-resolve');
16
- var rollupPluginTerser = require('rollup-plugin-terser');
17
- var typescript = require('rollup-plugin-typescript2');
18
- var styles = require('rollup-plugin-styles');
12
+ var address = require('address');
19
13
  var autoprefixer = require('autoprefixer');
14
+ var axios = require('axios');
15
+ var chalk = require('chalk');
16
+ var selector = require('cli-select');
20
17
  var express = require('express');
21
- var json = require('@rollup/plugin-json');
22
- var tmp = require('tmp');
23
18
  var proxy = require('express-http-proxy');
24
- var selector = require('cli-select');
19
+ var fs = require('fs-extra');
20
+ var glob = require('glob');
21
+ var http = require('node:http');
22
+ var https = require('node:https');
23
+ var linesAndColumns = require('lines-and-columns');
24
+ var path$1 = require('node:path');
25
25
  var prompt = require('prompts');
26
- var jsx = require('rollup-plugin-innet-jsx');
26
+ var rollup = require('rollup');
27
27
  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
28
  var injectEnv = require('rollup-plugin-inject-process-env');
32
- var linesAndColumns = require('lines-and-columns');
29
+ var jsx = require('rollup-plugin-innet-jsx');
30
+ var externals = require('rollup-plugin-node-externals');
31
+ var polyfill = require('rollup-plugin-polyfill-node');
32
+ var rollupPluginPreserveShebangs = require('rollup-plugin-preserve-shebangs');
33
+ var styles = require('rollup-plugin-styles');
34
+ var rollupPluginTerser = require('rollup-plugin-terser');
35
+ var typescript = require('rollup-plugin-typescript2');
36
+ var tmp = require('tmp');
37
+ var node_util = require('node:util');
33
38
  var unzipper = require('unzipper');
34
- var commander = require('commander');
35
39
 
36
40
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
37
41
 
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
42
  var logger__default = /*#__PURE__*/_interopDefaultLegacy(logger);
45
- var chalk__default = /*#__PURE__*/_interopDefaultLegacy(chalk);
46
- var rollup__default = /*#__PURE__*/_interopDefaultLegacy(rollup);
47
43
  var commonjs__default = /*#__PURE__*/_interopDefaultLegacy(commonjs);
48
- var typescript__default = /*#__PURE__*/_interopDefaultLegacy(typescript);
49
- var styles__default = /*#__PURE__*/_interopDefaultLegacy(styles);
44
+ var eslint__default = /*#__PURE__*/_interopDefaultLegacy(eslint);
45
+ var image__default = /*#__PURE__*/_interopDefaultLegacy(image);
46
+ var json__default = /*#__PURE__*/_interopDefaultLegacy(json);
47
+ var address__default = /*#__PURE__*/_interopDefaultLegacy(address);
50
48
  var autoprefixer__default = /*#__PURE__*/_interopDefaultLegacy(autoprefixer);
49
+ var axios__default = /*#__PURE__*/_interopDefaultLegacy(axios);
50
+ var chalk__default = /*#__PURE__*/_interopDefaultLegacy(chalk);
51
+ var selector__default = /*#__PURE__*/_interopDefaultLegacy(selector);
51
52
  var express__default = /*#__PURE__*/_interopDefaultLegacy(express);
52
- var json__default = /*#__PURE__*/_interopDefaultLegacy(json);
53
- var tmp__default = /*#__PURE__*/_interopDefaultLegacy(tmp);
54
53
  var proxy__default = /*#__PURE__*/_interopDefaultLegacy(proxy);
55
- var selector__default = /*#__PURE__*/_interopDefaultLegacy(selector);
54
+ var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
55
+ var glob__default = /*#__PURE__*/_interopDefaultLegacy(glob);
56
+ var http__default = /*#__PURE__*/_interopDefaultLegacy(http);
57
+ var https__default = /*#__PURE__*/_interopDefaultLegacy(https);
58
+ var path__default = /*#__PURE__*/_interopDefaultLegacy(path$1);
56
59
  var prompt__default = /*#__PURE__*/_interopDefaultLegacy(prompt);
57
- var jsx__default = /*#__PURE__*/_interopDefaultLegacy(jsx);
60
+ var rollup__default = /*#__PURE__*/_interopDefaultLegacy(rollup);
58
61
  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
62
  var injectEnv__default = /*#__PURE__*/_interopDefaultLegacy(injectEnv);
63
+ var jsx__default = /*#__PURE__*/_interopDefaultLegacy(jsx);
64
+ var externals__default = /*#__PURE__*/_interopDefaultLegacy(externals);
65
+ var polyfill__default = /*#__PURE__*/_interopDefaultLegacy(polyfill);
66
+ var styles__default = /*#__PURE__*/_interopDefaultLegacy(styles);
67
+ var typescript__default = /*#__PURE__*/_interopDefaultLegacy(typescript);
68
+ var tmp__default = /*#__PURE__*/_interopDefaultLegacy(tmp);
63
69
 
64
- /******************************************************************************
65
- Copyright (c) Microsoft Corporation.
66
-
67
- Permission to use, copy, modify, and/or distribute this software for any
68
- purpose with or without fee is hereby granted.
69
-
70
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
71
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
72
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
73
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
74
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
75
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
76
- PERFORMANCE OF THIS SOFTWARE.
77
- ***************************************************************************** */
78
-
79
- function __awaiter(thisArg, _arguments, P, generator) {
80
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
81
- return new (P || (P = Promise))(function (resolve, reject) {
82
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
83
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
84
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
85
- step((generator = generator.apply(thisArg, _arguments || [])).next());
86
- });
87
- }
70
+ const lintInclude = [
71
+ '**/*.ts',
72
+ '**/*.tsx',
73
+ '**/*.js',
74
+ '**/*.jsx',
75
+ ];
76
+ const stringExcludeDom = [
77
+ '**/*.ts',
78
+ '**/*.tsx',
79
+ '**/*.js',
80
+ '**/*.jsx',
81
+ '**/*.json',
82
+ '**/*.css',
83
+ '**/*.scss',
84
+ '**/*.webp',
85
+ '**/*.gif',
86
+ '**/*.png',
87
+ '**/*.jpeg',
88
+ '**/*.jpg',
89
+ '**/*.svg',
90
+ ];
91
+ const stringExcludeNode = [
92
+ '**/*.ts',
93
+ '**/*.tsx',
94
+ '**/*.js',
95
+ '**/*.jsx',
96
+ '**/*.json',
97
+ ];
88
98
 
89
99
  const Writer = require('fstream').Writer;
90
100
  const path = require('path');
@@ -95,7 +105,7 @@ function Extract(opts, template) {
95
105
  const reduceCount = 19 + template.length;
96
106
  // make sure path is normalized before using it
97
107
  opts.path = path.resolve(path.normalize(opts.path));
98
- // @ts-ignore
108
+ // @ts-expect-error
99
109
  const parser = new unzipper.Parse(opts);
100
110
  const outStream = new stream.Writable({ objectMode: true });
101
111
  outStream._write = function (entry, encoding, cb) {
@@ -128,35 +138,6 @@ function Extract(opts, template) {
128
138
  return extract;
129
139
  }
130
140
 
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
141
  function getFile(file) {
161
142
  file = path__default["default"].resolve(file);
162
143
  if (!fs__default["default"].existsSync(file)) {
@@ -180,7 +161,7 @@ function getFile(file) {
180
161
  return file;
181
162
  }
182
163
  function convertIndexFile(data, version, baseUrl) {
183
- return __awaiter(this, void 0, void 0, function* () {
164
+ return tslib.__awaiter(this, void 0, void 0, function* () {
184
165
  return data
185
166
  .toString()
186
167
  .replace('</head>', `<script type="module" defer src="${baseUrl}index.js${version ? `?v=${version}` : ''}"></script></head>`);
@@ -195,8 +176,8 @@ const livereload = require('rollup-plugin-livereload');
195
176
  const { string } = require('rollup-plugin-string');
196
177
  const { exec, spawn } = require('child_process');
197
178
  const readline = require('readline');
198
- const execAsync = util.promisify(exec);
199
- const copyFiles = util.promisify(fs__default["default"].copy);
179
+ const execAsync = node_util.promisify(exec);
180
+ const copyFiles = node_util.promisify(fs__default["default"].copy);
200
181
  const dotenvConfigOutput$1 = require('dotenv').config();
201
182
  require('dotenv-expand').expand(dotenvConfigOutput$1);
202
183
  const REG_CLEAR_TEXT = /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g;
@@ -211,12 +192,21 @@ const innetEnv = Object.keys(process.env).reduce((result, key) => {
211
192
  }
212
193
  return result;
213
194
  }, {});
195
+ const scriptExtensions = ['ts', 'js', 'tsx', 'jsx'];
196
+ const indexExt = scriptExtensions.join(',');
214
197
  class InnetJS {
215
- 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/?*', } = {}) {
198
+ 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/?*', } = {}) {
216
199
  this.projectFolder = path__default["default"].resolve(projectFolder);
217
200
  this.publicFolder = path__default["default"].resolve(publicFolder);
201
+ this.releaseFolder = path__default["default"].resolve(releaseFolder);
218
202
  this.buildFolder = path__default["default"].resolve(buildFolder);
219
203
  this.srcFolder = path__default["default"].resolve(srcFolder);
204
+ this.licenseFile = path__default["default"].join(projectFolder, 'LICENSE');
205
+ this.licenseReleaseFile = path__default["default"].join(releaseFolder, 'LICENSE');
206
+ this.readmeFile = path__default["default"].join(projectFolder, 'README.md');
207
+ this.readmeReleaseFile = path__default["default"].join(releaseFolder, 'README.md');
208
+ this.declarationFile = path__default["default"].join(srcFolder, 'declaration.d.ts');
209
+ this.declarationReleaseFile = path__default["default"].join(releaseFolder, 'declaration.d.ts');
220
210
  this.publicIndexFile = path__default["default"].join(publicFolder, 'index.html');
221
211
  this.buildIndexFile = path__default["default"].join(buildFolder, 'index.html');
222
212
  this.devBuildFolder = path__default["default"].resolve(projectFolder, 'node_modules', '.cache', 'innetjs', 'build');
@@ -233,14 +223,14 @@ class InnetJS {
233
223
  }
234
224
  // Methods
235
225
  init(appName, { template, force = false } = {}) {
236
- return __awaiter(this, void 0, void 0, function* () {
226
+ return tslib.__awaiter(this, void 0, void 0, function* () {
237
227
  const appPath = path__default["default"].resolve(appName);
238
- 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'); }));
228
+ const { data } = yield logger__default["default"].start('Get templates list', () => tslib.__awaiter(this, void 0, void 0, function* () { return yield axios__default["default"].get('https://api.github.com/repos/d8corp/innetjs-templates/branches'); }));
239
229
  const templates = data.map(({ name }) => name).filter(name => name !== 'main');
240
230
  if (!template || !templates.includes(template)) {
241
- logger__default["default"].log(chalk__default["default"].green(`Select one of those templates`));
231
+ logger__default["default"].log(chalk__default["default"].green('Select one of those templates'));
242
232
  const { value } = yield selector__default["default"]({
243
- values: templates
233
+ values: templates,
244
234
  });
245
235
  template = value;
246
236
  readline.moveCursor(process.stdout, 0, -1);
@@ -249,11 +239,11 @@ class InnetJS {
249
239
  logger__default["default"].end(text);
250
240
  }
251
241
  if (!force) {
252
- yield logger__default["default"].start('Check if app folder is available', () => __awaiter(this, void 0, void 0, function* () {
242
+ yield logger__default["default"].start('Check if app folder is available', () => tslib.__awaiter(this, void 0, void 0, function* () {
253
243
  if (fs__default["default"].existsSync(appPath)) {
254
244
  logger__default["default"].log(chalk__default["default"].red(`'${appPath}' already exist, what do you want?`));
255
245
  const { id: result, value } = yield selector__default["default"]({
256
- values: ['Stop the process', 'Remove the folder', 'Merge with template']
246
+ values: ['Stop the process', 'Remove the folder', 'Merge with template'],
257
247
  });
258
248
  readline.moveCursor(process.stdout, 0, -1);
259
249
  logger__default["default"].log(`Already exist, selected: ${value}`);
@@ -266,9 +256,9 @@ class InnetJS {
266
256
  }
267
257
  }));
268
258
  }
269
- yield logger__default["default"].start('Download template', () => __awaiter(this, void 0, void 0, function* () {
259
+ yield logger__default["default"].start('Download template', () => tslib.__awaiter(this, void 0, void 0, function* () {
270
260
  const { data } = yield axios__default["default"].get(`https://github.com/d8corp/innetjs-templates/archive/refs/heads/${template}.zip`, {
271
- responseType: 'stream'
261
+ responseType: 'stream',
272
262
  });
273
263
  yield new Promise((resolve, reject) => {
274
264
  data.pipe(Extract({
@@ -279,60 +269,55 @@ class InnetJS {
279
269
  yield logger__default["default"].start('Install packages', () => execAsync(`cd ${appPath} && npm i`));
280
270
  });
281
271
  }
282
- build({ node = false } = {}) {
283
- return __awaiter(this, void 0, void 0, function* () {
284
- const indexExtension = yield this.getProjectExtension();
272
+ build({ node = false, index = 'index' } = {}) {
273
+ return tslib.__awaiter(this, void 0, void 0, function* () {
274
+ const input = glob__default["default"].sync(`src/${index}.{${indexExt}}`);
275
+ if (!input.length) {
276
+ throw Error('index file is not detected');
277
+ }
285
278
  yield logger__default["default"].start('Remove build', () => fs__default["default"].remove(this.buildFolder));
286
279
  const pkg = node && (yield this.getPackage());
287
280
  const inputOptions = {
288
- input: path__default["default"].resolve(this.srcFolder, `index.${indexExtension}`),
281
+ input,
289
282
  preserveEntrySignatures: 'strict',
290
283
  plugins: [
291
284
  commonjs__default["default"](),
292
285
  json__default["default"](),
293
286
  typescript__default["default"](),
294
287
  jsx__default["default"](),
295
- ]
288
+ eslint__default["default"]({
289
+ include: lintInclude,
290
+ }),
291
+ ],
296
292
  };
297
293
  const outputOptions = {
298
294
  dir: this.buildFolder,
299
- sourcemap: this.sourcemap
295
+ sourcemap: this.sourcemap,
300
296
  };
301
297
  if (node) {
302
298
  outputOptions.format = 'cjs';
303
299
  inputOptions.external = Object.keys((pkg === null || pkg === void 0 ? void 0 : pkg.dependencies) || {});
304
300
  inputOptions.plugins.push(pluginNodeResolve.nodeResolve({
305
- moduleDirectories: [path__default["default"].resolve(this.buildFolder, 'node_modules')]
301
+ moduleDirectories: [path__default["default"].resolve(this.buildFolder, 'node_modules')],
306
302
  }), string({
307
303
  include: '**/*.*',
308
304
  exclude: stringExcludeNode,
309
305
  }));
310
306
  }
311
307
  else {
312
- inputOptions.plugins = [
313
- eslint__default["default"]({
314
- include: lintIncludeDom,
315
- }),
316
- ...inputOptions.plugins,
317
- pluginNodeResolve.nodeResolve({
318
- browser: true,
319
- }),
320
- polyfill__default["default"](),
321
- image__default["default"](),
322
- styles__default["default"]({
323
- mode: this.cssInJs ? 'inject' : 'extract',
324
- url: true,
325
- plugins: [autoprefixer__default["default"]()],
326
- modules: this.cssModules,
327
- sourceMap: this.sourcemap,
328
- minimize: true,
329
- }),
330
- string({
331
- include: '**/*.*',
332
- exclude: stringExcludeDom,
333
- }),
334
- injectEnv__default["default"](innetEnv),
335
- ];
308
+ inputOptions.plugins.push(pluginNodeResolve.nodeResolve({
309
+ browser: true,
310
+ }), polyfill__default["default"](), image__default["default"](), styles__default["default"]({
311
+ mode: this.cssInJs ? 'inject' : 'extract',
312
+ url: true,
313
+ plugins: [autoprefixer__default["default"]()],
314
+ modules: this.cssModules,
315
+ sourceMap: this.sourcemap,
316
+ minimize: true,
317
+ }), string({
318
+ include: '**/*.*',
319
+ exclude: stringExcludeDom,
320
+ }), injectEnv__default["default"](innetEnv));
336
321
  outputOptions.format = 'es';
337
322
  outputOptions.plugins = [
338
323
  rollupPluginTerser.terser(),
@@ -341,7 +326,7 @@ class InnetJS {
341
326
  }),
342
327
  ];
343
328
  }
344
- yield logger__default["default"].start('Build production bundle', () => __awaiter(this, void 0, void 0, function* () {
329
+ yield logger__default["default"].start('Build production bundle', () => tslib.__awaiter(this, void 0, void 0, function* () {
345
330
  const bundle = yield rollup__default["default"].rollup(inputOptions);
346
331
  yield bundle.write(outputOptions);
347
332
  yield bundle.close();
@@ -353,7 +338,7 @@ class InnetJS {
353
338
  }
354
339
  }));
355
340
  if (pkg) {
356
- yield logger__default["default"].start('Copy package.json', () => __awaiter(this, void 0, void 0, function* () {
341
+ yield logger__default["default"].start('Copy package.json', () => tslib.__awaiter(this, void 0, void 0, function* () {
357
342
  const data = Object.assign({}, pkg);
358
343
  delete data.private;
359
344
  delete data.devDependencies;
@@ -368,13 +353,16 @@ class InnetJS {
368
353
  }
369
354
  });
370
355
  }
371
- start({ node = false, error = false } = {}) {
372
- return __awaiter(this, void 0, void 0, function* () {
373
- const indexExtension = yield this.getProjectExtension();
356
+ start({ node = false, error = false, index = 'index' } = {}) {
357
+ return tslib.__awaiter(this, void 0, void 0, function* () {
374
358
  const pkg = yield this.getPackage();
359
+ const input = glob__default["default"].sync(`src/${index}.{${indexExt}}`);
360
+ if (!input.length) {
361
+ throw Error('index file is not detected');
362
+ }
375
363
  yield logger__default["default"].start('Remove build', () => fs__default["default"].remove(this.devBuildFolder));
376
364
  const options = {
377
- input: path__default["default"].resolve(this.srcFolder, `index.${indexExtension}`),
365
+ input,
378
366
  preserveEntrySignatures: 'strict',
379
367
  output: {
380
368
  dir: this.devBuildFolder,
@@ -386,14 +374,18 @@ class InnetJS {
386
374
  typescript__default["default"]({
387
375
  tsconfigOverride: {
388
376
  compilerOptions: {
389
- sourceMap: true
390
- }
377
+ sourceMap: true,
378
+ },
391
379
  },
392
380
  }),
393
381
  jsx__default["default"](),
382
+ eslint__default["default"]({
383
+ include: lintInclude,
384
+ }),
394
385
  ],
395
386
  };
396
387
  if (node) {
388
+ // @ts-expect-error
397
389
  options.output.format = 'cjs';
398
390
  options.external = Object.keys((pkg === null || pkg === void 0 ? void 0 : pkg.dependencies) || {});
399
391
  options.plugins.push(pluginNodeResolve.nodeResolve({
@@ -414,36 +406,24 @@ class InnetJS {
414
406
  : fs__default["default"].existsSync(this.sslCrt)
415
407
  ? fs__default["default"].readFileSync(this.sslCrt)
416
408
  : undefined;
409
+ // @ts-expect-error
417
410
  options.output.format = 'es';
418
- options.plugins = [
419
- eslint__default["default"]({
420
- include: lintIncludeDom,
421
- }),
422
- ...options.plugins,
423
- pluginNodeResolve.nodeResolve({
424
- browser: true,
425
- }),
426
- polyfill__default["default"](),
427
- image__default["default"](),
428
- styles__default["default"]({
429
- mode: this.cssInJs ? 'inject' : 'extract',
430
- url: true,
431
- plugins: [autoprefixer__default["default"]()],
432
- modules: this.cssModules,
433
- sourceMap: true,
434
- }),
435
- string({
436
- include: '**/*.*',
437
- exclude: stringExcludeDom,
438
- }),
439
- this.createClient(key, cert, pkg),
440
- 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 } } : {}))),
441
- injectEnv__default["default"](innetEnv),
442
- ];
411
+ options.plugins.push(pluginNodeResolve.nodeResolve({
412
+ browser: true,
413
+ }), polyfill__default["default"](), image__default["default"](), styles__default["default"]({
414
+ mode: this.cssInJs ? 'inject' : 'extract',
415
+ url: true,
416
+ plugins: [autoprefixer__default["default"]()],
417
+ modules: this.cssModules,
418
+ sourceMap: true,
419
+ }), string({
420
+ include: '**/*.*',
421
+ exclude: stringExcludeDom,
422
+ }), 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));
443
423
  }
444
424
  const watcher = rollup__default["default"].watch(options);
445
- watcher.on('event', (e) => __awaiter(this, void 0, void 0, function* () {
446
- if (e.code == 'ERROR') {
425
+ watcher.on('event', (e) => tslib.__awaiter(this, void 0, void 0, function* () {
426
+ if (e.code === 'ERROR') {
447
427
  if (e.error.code === 'UNRESOLVED_IMPORT') {
448
428
  const [, importer, file] = e.error.message.match(/^Could not resolve '(.+)' from (.+)$/) || [];
449
429
  const text = (yield fs__default["default"].readFile(file)).toString();
@@ -475,7 +455,7 @@ class InnetJS {
475
455
  });
476
456
  }
477
457
  run(file) {
478
- return __awaiter(this, void 0, void 0, function* () {
458
+ return tslib.__awaiter(this, void 0, void 0, function* () {
479
459
  const input = yield logger__default["default"].start('Check file', () => getFile(file));
480
460
  const folder = yield new Promise((resolve, reject) => {
481
461
  tmp__default["default"].dir((err, folder) => {
@@ -488,7 +468,7 @@ class InnetJS {
488
468
  });
489
469
  });
490
470
  const jsFilePath = `${folder}/index.js`;
491
- yield logger__default["default"].start('Build bundle', () => __awaiter(this, void 0, void 0, function* () {
471
+ yield logger__default["default"].start('Build bundle', () => tslib.__awaiter(this, void 0, void 0, function* () {
492
472
  const inputOptions = {
493
473
  input,
494
474
  plugins: [
@@ -498,64 +478,199 @@ class InnetJS {
498
478
  typescript__default["default"]({
499
479
  tsconfigOverride: {
500
480
  compilerOptions: {
501
- sourceMap: true
502
- }
503
- }
504
- })
505
- ]
481
+ sourceMap: true,
482
+ },
483
+ },
484
+ }),
485
+ ],
506
486
  };
507
487
  const outputOptions = {
508
488
  format: 'cjs',
509
489
  file: jsFilePath,
510
- sourcemap: true
490
+ sourcemap: true,
511
491
  };
512
492
  const bundle = yield rollup__default["default"].rollup(inputOptions);
513
493
  yield bundle.write(outputOptions);
514
494
  yield bundle.close();
515
495
  }));
516
- yield logger__default["default"].start('Running of the script', () => __awaiter(this, void 0, void 0, function* () {
496
+ yield logger__default["default"].start('Running of the script', () => tslib.__awaiter(this, void 0, void 0, function* () {
517
497
  spawn('node', ['-r', 'source-map-support/register', jsFilePath], { stdio: 'inherit' });
518
498
  }));
519
499
  });
520
500
  }
521
- // Utils
522
- getProjectExtension() {
523
- return __awaiter(this, void 0, void 0, function* () {
524
- if (this.projectExtension) {
525
- return this.projectExtension;
526
- }
527
- yield logger__default["default"].start('Check src', () => {
528
- if (!fs__default["default"].existsSync(this.srcFolder)) {
529
- throw Error('src folder is missing');
530
- }
531
- });
532
- yield logger__default["default"].start('Detection of index file', () => {
533
- if (fs__default["default"].existsSync(path__default["default"].join(this.srcFolder, 'index.js'))) {
534
- this.projectExtension = 'js';
535
- }
536
- else if (fs__default["default"].existsSync(path__default["default"].join(this.srcFolder, 'index.ts'))) {
537
- this.projectExtension = 'ts';
538
- }
539
- else if (fs__default["default"].existsSync(path__default["default"].join(this.srcFolder, 'index.tsx'))) {
540
- this.projectExtension = 'tsx';
541
- }
542
- else if (fs__default["default"].existsSync(path__default["default"].join(this.srcFolder, 'index.jsx'))) {
543
- this.projectExtension = 'jsx';
544
- }
545
- else {
546
- throw Error('index file is not detected');
501
+ release({ node = false, index = 'index', release, pub } = {}) {
502
+ return tslib.__awaiter(this, void 0, void 0, function* () {
503
+ const { releaseFolder, cssModules } = this;
504
+ yield logger__default["default"].start('Remove previous release', () => fs__default["default"].remove(releaseFolder));
505
+ const pkg = yield this.getPackage();
506
+ yield logger__default["default"].start('Prepare package.json', () => tslib.__awaiter(this, void 0, void 0, function* () {
507
+ const version = pkg.version.split('.');
508
+ switch (release) {
509
+ case 'patch': {
510
+ version[2]++;
511
+ break;
512
+ }
513
+ case 'minor': {
514
+ version[1]++;
515
+ version[2] = 0;
516
+ break;
517
+ }
518
+ case 'major': {
519
+ version[1] = 0;
520
+ version[2] = 0;
521
+ version[0]++;
522
+ break;
523
+ }
524
+ default: return;
547
525
  }
548
- });
549
- return this.projectExtension;
526
+ pkg.version = version.join('.');
527
+ yield fs__default["default"].writeFile(path__default["default"].resolve(this.projectFolder, 'package.json'), JSON.stringify(pkg, undefined, 2), 'UTF-8');
528
+ }));
529
+ function build(format) {
530
+ var _a, _b;
531
+ return tslib.__awaiter(this, void 0, void 0, function* () {
532
+ const ext = format === 'es'
533
+ ? ((_a = (pkg.module || pkg.esnext || pkg['jsnext:main'])) === null || _a === void 0 ? void 0 : _a.replace('index', '')) || '.mjs'
534
+ : ((_b = pkg.main) === null || _b === void 0 ? void 0 : _b.replace('index', '')) || '.js';
535
+ const indexFiles = scriptExtensions.map(ext => `src/${index}.${ext}`).join(',');
536
+ const otherFiles = scriptExtensions.map(ext => `src/**/index.${ext}`).join(',');
537
+ const input = glob__default["default"].sync(`{${indexFiles},${otherFiles}}`);
538
+ if (!input.length) {
539
+ throw Error('index file is not detected');
540
+ }
541
+ const options = {
542
+ input,
543
+ preserveEntrySignatures: 'strict',
544
+ output: {
545
+ dir: releaseFolder,
546
+ entryFileNames: `[name]${ext}`,
547
+ format,
548
+ preserveModules: true,
549
+ },
550
+ plugins: [
551
+ json__default["default"](),
552
+ typescript__default["default"]({
553
+ rollupCommonJSResolveHack: false,
554
+ clean: true,
555
+ }),
556
+ jsx__default["default"](),
557
+ eslint__default["default"]({
558
+ include: lintInclude,
559
+ }),
560
+ ],
561
+ };
562
+ if (node) {
563
+ options.external = [...Object.keys(pkg.dependencies), 'tslib'];
564
+ options.plugins = [
565
+ ...options.plugins,
566
+ externals__default["default"](),
567
+ string({
568
+ include: '**/*.*',
569
+ exclude: stringExcludeNode,
570
+ }),
571
+ ];
572
+ }
573
+ else {
574
+ options.plugins = [
575
+ ...options.plugins,
576
+ string({
577
+ include: '**/*.*',
578
+ exclude: stringExcludeDom,
579
+ }),
580
+ polyfill__default["default"](),
581
+ image__default["default"](),
582
+ styles__default["default"]({
583
+ mode: 'inject',
584
+ url: true,
585
+ plugins: [autoprefixer__default["default"]()],
586
+ modules: cssModules,
587
+ minimize: true,
588
+ }),
589
+ injectEnv__default["default"](innetEnv),
590
+ ];
591
+ }
592
+ const bundle = yield rollup__default["default"].rollup(options);
593
+ yield bundle.write(options.output);
594
+ yield bundle.close();
595
+ });
596
+ }
597
+ yield logger__default["default"].start('Build cjs bundle', () => tslib.__awaiter(this, void 0, void 0, function* () {
598
+ yield build('cjs');
599
+ }));
600
+ yield logger__default["default"].start('Build es6 bundle', () => tslib.__awaiter(this, void 0, void 0, function* () {
601
+ yield build('es');
602
+ }));
603
+ yield logger__default["default"].start('Copy package.json', () => tslib.__awaiter(this, void 0, void 0, function* () {
604
+ const data = Object.assign({}, pkg);
605
+ delete data.private;
606
+ delete data.devDependencies;
607
+ yield fs__default["default"].writeFile(path__default["default"].resolve(this.releaseFolder, 'package.json'), JSON.stringify(data, undefined, 2), 'UTF-8');
608
+ }));
609
+ if (pkg.bin) {
610
+ yield logger__default["default"].start('Build bin', () => tslib.__awaiter(this, void 0, void 0, function* () {
611
+ const { bin } = pkg;
612
+ for (const name in bin) {
613
+ const value = bin[name];
614
+ const input = glob__default["default"].sync(`src/${value}.{${scriptExtensions.join(',')}}`);
615
+ const file = path__default["default"].join(this.releaseFolder, value);
616
+ const options = {
617
+ input,
618
+ external: [...Object.keys(pkg.dependencies), 'tslib'],
619
+ output: {
620
+ file,
621
+ format: 'cjs',
622
+ },
623
+ plugins: [
624
+ rollupPluginPreserveShebangs.preserveShebangs(),
625
+ json__default["default"](),
626
+ typescript__default["default"]({
627
+ clean: true,
628
+ tsconfigOverride: {
629
+ compilerOptions: {
630
+ declaration: false,
631
+ },
632
+ },
633
+ }),
634
+ externals__default["default"](),
635
+ jsx__default["default"](),
636
+ ],
637
+ };
638
+ const bundle = yield rollup__default["default"].rollup(options);
639
+ yield bundle.write(options.output);
640
+ yield bundle.close();
641
+ }
642
+ }));
643
+ }
644
+ if (fs__default["default"].existsSync(this.licenseFile)) {
645
+ yield logger__default["default"].start('Copy license', () => tslib.__awaiter(this, void 0, void 0, function* () {
646
+ yield fs.promises.copyFile(this.licenseFile, this.licenseReleaseFile);
647
+ }));
648
+ }
649
+ if (fs__default["default"].existsSync(this.readmeFile)) {
650
+ yield logger__default["default"].start('Copy readme', () => tslib.__awaiter(this, void 0, void 0, function* () {
651
+ yield fs.promises.copyFile(this.readmeFile, this.readmeReleaseFile);
652
+ }));
653
+ }
654
+ if (fs__default["default"].existsSync(this.declarationFile)) {
655
+ yield logger__default["default"].start('Copy declaration', () => tslib.__awaiter(this, void 0, void 0, function* () {
656
+ yield fs.promises.copyFile(this.declarationFile, this.declarationReleaseFile);
657
+ }));
658
+ }
659
+ if (pub) {
660
+ const date = (Date.now() / 1000) | 0;
661
+ yield logger__default["default"].start(`publishing v${pkg.version} ${date}`, () => tslib.__awaiter(this, void 0, void 0, function* () {
662
+ yield execAsync(`npm publish ${this.releaseFolder}`);
663
+ }));
664
+ }
550
665
  });
551
666
  }
552
667
  getPackage() {
553
- return __awaiter(this, void 0, void 0, function* () {
668
+ return tslib.__awaiter(this, void 0, void 0, function* () {
554
669
  if (this.package) {
555
670
  return this.package;
556
671
  }
557
672
  const packageFolder = path__default["default"].resolve(this.projectFolder, 'package.json');
558
- yield logger__default["default"].start('Check package.json', () => __awaiter(this, void 0, void 0, function* () {
673
+ yield logger__default["default"].start('Check package.json', () => tslib.__awaiter(this, void 0, void 0, function* () {
559
674
  if (fs__default["default"].existsSync(packageFolder)) {
560
675
  this.package = yield fs__default["default"].readJson(packageFolder);
561
676
  }
@@ -566,11 +681,12 @@ class InnetJS {
566
681
  createClient(key, cert, pkg) {
567
682
  let app;
568
683
  return {
569
- writeBundle: () => __awaiter(this, void 0, void 0, function* () {
684
+ name: 'client',
685
+ writeBundle: () => tslib.__awaiter(this, void 0, void 0, function* () {
570
686
  var _a;
571
687
  if (!app) {
572
688
  app = express__default["default"]();
573
- const update = () => __awaiter(this, void 0, void 0, function* () {
689
+ const update = () => tslib.__awaiter(this, void 0, void 0, function* () {
574
690
  const data = yield fs.promises.readFile(this.publicIndexFile);
575
691
  yield fs.promises.writeFile(this.devBuildIndexFile, yield convertIndexFile(data, pkg.version, this.baseUrl));
576
692
  });
@@ -582,7 +698,7 @@ class InnetJS {
582
698
  if ((_a = this.proxy) === null || _a === void 0 ? void 0 : _a.startsWith('http')) {
583
699
  app.use(this.api, proxy__default["default"](this.proxy, {
584
700
  https: httpsUsing,
585
- proxyReqPathResolver: req => req.originalUrl
701
+ proxyReqPathResolver: req => req.originalUrl,
586
702
  }));
587
703
  }
588
704
  app.use(/^([^.]*|.*\.[^.]{5,})$/, (req, res) => {
@@ -594,13 +710,13 @@ class InnetJS {
594
710
  console.log(`${chalk__default["default"].green('➤')} Started on http${httpsUsing ? 's' : ''}://localhost:${port} and http${httpsUsing ? 's' : ''}://${address__default["default"].ip()}:${port}`);
595
711
  };
596
712
  server.listen(port, listener);
597
- server.on('error', (e) => __awaiter(this, void 0, void 0, function* () {
713
+ server.on('error', (e) => tslib.__awaiter(this, void 0, void 0, function* () {
598
714
  if (e.code === 'EADDRINUSE') {
599
715
  port++;
600
716
  const { userPort } = yield prompt__default["default"]({
601
717
  name: 'userPort',
602
718
  type: 'number',
603
- message: `Port ${e.port} is reserved, please enter another one [${port}]:`
719
+ message: `Port ${e.port} is reserved, please enter another one [${port}]:`,
604
720
  });
605
721
  if (userPort) {
606
722
  port = userPort;
@@ -612,33 +728,37 @@ class InnetJS {
612
728
  }
613
729
  }));
614
730
  }
615
- })
731
+ }),
616
732
  };
617
733
  }
618
734
  createServer() {
619
735
  let app;
620
736
  return {
621
- writeBundle: () => __awaiter(this, void 0, void 0, function* () {
737
+ name: 'server',
738
+ writeBundle: () => tslib.__awaiter(this, void 0, void 0, function* () {
622
739
  app === null || app === void 0 ? void 0 : app.kill();
623
740
  const filePath = path__default["default"].resolve(this.devBuildFolder, 'index.js');
624
741
  app = spawn('node', ['-r', 'source-map-support/register', filePath], { stdio: 'inherit' });
625
- })
742
+ }),
626
743
  };
627
744
  }
628
745
  }
629
746
 
630
- var version = "2.1.6";
747
+ var version = "2.2.0";
631
748
 
632
749
  const dotenvConfigOutput = require('dotenv').config();
633
750
  require('dotenv-expand').expand(dotenvConfigOutput);
634
751
  const innetJS = new InnetJS();
752
+ const errorOption = new commander.Option('-e, --error', 'Show error details');
753
+ const releaseOption = new commander.Option('-r, --release <release>', 'Select release type')
754
+ .choices(['patch', 'minor', 'major']);
635
755
  commander.program
636
756
  .version(version, '-v, --version');
637
757
  commander.program
638
758
  .command('init <app-name>')
639
759
  .description('Create innet boilerplate')
640
- .option('-e, --error', 'Show error details')
641
760
  .option('-t, --template <template>', 'Select template fe or be')
761
+ .addOption(errorOption)
642
762
  .action((appName, { error, template }) => {
643
763
  innetJS.init(appName, { template }).catch(e => {
644
764
  if (error) {
@@ -650,7 +770,7 @@ commander.program
650
770
  commander.program
651
771
  .command('run <file-path>')
652
772
  .description('Run js, ts or tsx file')
653
- .option('-e, --error', 'Show error details')
773
+ .addOption(errorOption)
654
774
  .action((filePath, { error }) => {
655
775
  innetJS.run(filePath).catch(e => {
656
776
  if (error) {
@@ -662,10 +782,11 @@ commander.program
662
782
  commander.program
663
783
  .command('start')
664
784
  .description('Start development with innet boilerplate')
665
- .option('-e, --error', 'Show error details')
666
785
  .option('-n, --node', 'Start development for Node.js')
667
- .action(({ error, node }) => {
668
- innetJS.start({ node, error }).catch(e => {
786
+ .option('-i, --index <index>', 'Root index file name', 'index')
787
+ .addOption(errorOption)
788
+ .action(({ error, node, index }) => {
789
+ innetJS.start({ node, error, index }).catch(e => {
669
790
  if (error) {
670
791
  console.error(e);
671
792
  process.exit(1);
@@ -675,10 +796,27 @@ commander.program
675
796
  commander.program
676
797
  .command('build')
677
798
  .description('Build production bundle')
678
- .option('-e, --error', 'Show error details')
799
+ .addOption(errorOption)
679
800
  .option('-n, --node', 'Build for node.js')
680
- .action(({ error, node }) => {
681
- innetJS.build({ node }).catch(e => {
801
+ .option('-i, --index <index>', 'Root index file name', 'index')
802
+ .action(({ error, node, index }) => {
803
+ innetJS.build({ node, index }).catch(e => {
804
+ if (error) {
805
+ console.error(e);
806
+ process.exit(1);
807
+ }
808
+ });
809
+ });
810
+ commander.program
811
+ .command('release')
812
+ .description('Release new version of your library')
813
+ .option('-n, --node', 'Release for node.js')
814
+ .option('-i, --index <index>', 'Root index file name', 'index')
815
+ .option('-p, --public', 'Public the package')
816
+ .addOption(releaseOption)
817
+ .addOption(errorOption)
818
+ .action(({ error, node, index, release, public: pub }) => {
819
+ innetJS.release({ node, index, release, pub }).catch(e => {
682
820
  if (error) {
683
821
  console.error(e);
684
822
  process.exit(1);