innetjs 1.12.0 → 2.0.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.
Files changed (38) hide show
  1. package/README.md +0 -3
  2. package/bin/innet +144 -68
  3. package/declaration.d.ts +39 -0
  4. package/extract.d.ts +1 -0
  5. package/index.d.ts +6 -2
  6. package/index.es6.js +165 -91
  7. package/index.js +143 -67
  8. package/package.json +17 -14
  9. package/templates/be/.env +0 -1
  10. package/templates/be/README.md +0 -15
  11. package/templates/be/package.json +0 -13
  12. package/templates/be/src/controller/index.tsx +0 -7
  13. package/templates/be/src/declaration.d.ts +0 -4
  14. package/templates/be/src/index.tsx +0 -6
  15. package/templates/be/src/view/App/App.css +0 -12
  16. package/templates/be/src/view/App/App.tsx +0 -15
  17. package/templates/be/src/view/App/index.ts +0 -1
  18. package/templates/be/src/view/Page/Page.css +0 -7
  19. package/templates/be/src/view/Page/Page.tsx +0 -24
  20. package/templates/be/src/view/Page/index.ts +0 -1
  21. package/templates/be/src/view/index.ts +0 -2
  22. package/templates/be/tsconfig.json +0 -31
  23. package/templates/fe/.env +0 -1
  24. package/templates/fe/README.md +0 -84
  25. package/templates/fe/package.json +0 -16
  26. package/templates/fe/public/favicon.ico +0 -0
  27. package/templates/fe/public/index.html +0 -14
  28. package/templates/fe/src/App.scss +0 -48
  29. package/templates/fe/src/App.tsx +0 -36
  30. package/templates/fe/src/componenst/Page/Page.scss +0 -22
  31. package/templates/fe/src/componenst/Page/Page.tsx +0 -18
  32. package/templates/fe/src/componenst/Page/index.ts +0 -1
  33. package/templates/fe/src/declaration.d.ts +0 -9
  34. package/templates/fe/src/index.tsx +0 -6
  35. package/templates/fe/src/pages/HomePage/HomePage.scss +0 -25
  36. package/templates/fe/src/pages/HomePage/HomePage.tsx +0 -24
  37. package/templates/fe/src/pages/HomePage/index.ts +0 -1
  38. package/templates/fe/tsconfig.json +0 -30
package/README.md CHANGED
@@ -58,9 +58,6 @@ Use the command in the project folder to build it.
58
58
  innetjs build
59
59
  ```
60
60
 
61
- ## Links
62
- Check [README.md](https://github.com/d8corp/innetjs/tree/main/src/templates/fe) of `fe` template
63
-
64
61
  ## Issues
65
62
  If you find a bug or have a suggestion, please file an issue on [GitHub](https://github.com/d8corp/innetjs/issues).
66
63
 
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 postcss = require('rollup-plugin-postcss');
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,23 @@ 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 image = require('@rollup/plugin-image');
27
+ var unzipper = require('unzipper');
25
28
  var commander = require('commander');
26
29
 
27
30
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
28
31
 
29
- var path__default = /*#__PURE__*/_interopDefaultLegacy(path);
32
+ var path__default = /*#__PURE__*/_interopDefaultLegacy(path$1);
30
33
  var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
31
34
  var http__default = /*#__PURE__*/_interopDefaultLegacy(http);
32
35
  var https__default = /*#__PURE__*/_interopDefaultLegacy(https);
36
+ var axios__default = /*#__PURE__*/_interopDefaultLegacy(axios);
33
37
  var logger__default = /*#__PURE__*/_interopDefaultLegacy(logger);
34
38
  var chalk__default = /*#__PURE__*/_interopDefaultLegacy(chalk);
35
39
  var rollup__default = /*#__PURE__*/_interopDefaultLegacy(rollup);
36
40
  var commonjs__default = /*#__PURE__*/_interopDefaultLegacy(commonjs);
37
41
  var typescript__default = /*#__PURE__*/_interopDefaultLegacy(typescript);
38
- var postcss__default = /*#__PURE__*/_interopDefaultLegacy(postcss);
42
+ var styles__default = /*#__PURE__*/_interopDefaultLegacy(styles);
39
43
  var autoprefixer__default = /*#__PURE__*/_interopDefaultLegacy(autoprefixer);
40
44
  var express__default = /*#__PURE__*/_interopDefaultLegacy(express);
41
45
  var json__default = /*#__PURE__*/_interopDefaultLegacy(json);
@@ -44,8 +48,9 @@ var proxy__default = /*#__PURE__*/_interopDefaultLegacy(proxy);
44
48
  var selector__default = /*#__PURE__*/_interopDefaultLegacy(selector);
45
49
  var jsx__default = /*#__PURE__*/_interopDefaultLegacy(jsx);
46
50
  var filesize__default = /*#__PURE__*/_interopDefaultLegacy(filesize);
51
+ var image__default = /*#__PURE__*/_interopDefaultLegacy(image);
47
52
 
48
- /*! *****************************************************************************
53
+ /******************************************************************************
49
54
  Copyright (c) Microsoft Corporation.
50
55
 
51
56
  Permission to use, copy, modify, and/or distribute this software for any
@@ -70,11 +75,54 @@ function __awaiter(thisArg, _arguments, P, generator) {
70
75
  });
71
76
  }
72
77
 
78
+ const Writer = require('fstream').Writer;
79
+ const path = require('path');
80
+ const stream = require('stream');
81
+ const duplexer2 = require('duplexer2');
82
+ const Promise$1 = require('bluebird');
83
+ function Extract(opts, template) {
84
+ const reduceCount = 19 + template.length;
85
+ // make sure path is normalized before using it
86
+ opts.path = path.resolve(path.normalize(opts.path));
87
+ // @ts-ignore
88
+ const parser = new unzipper.Parse(opts);
89
+ const outStream = new stream.Writable({ objectMode: true });
90
+ outStream._write = function (entry, encoding, cb) {
91
+ if (entry.type === 'Directory')
92
+ return cb();
93
+ const extractPath = path.join(opts.path, entry.path.slice(reduceCount));
94
+ if (extractPath.indexOf(opts.path) !== 0) {
95
+ return cb();
96
+ }
97
+ const writer = opts.getWriter ? opts.getWriter({ path: extractPath }) : Writer({ path: extractPath });
98
+ entry.pipe(writer)
99
+ .on('error', cb)
100
+ .on('close', cb);
101
+ };
102
+ const extract = duplexer2(parser, outStream);
103
+ parser.once('crx-header', function (crxHeader) {
104
+ extract.crxHeader = crxHeader;
105
+ });
106
+ parser
107
+ .pipe(outStream)
108
+ .on('finish', function () {
109
+ extract.emit('close');
110
+ });
111
+ extract.promise = function () {
112
+ return new Promise$1(function (resolve, reject) {
113
+ extract.on('close', resolve);
114
+ extract.on('error', reject);
115
+ });
116
+ };
117
+ return extract;
118
+ }
119
+
73
120
  const livereload = require('rollup-plugin-livereload');
74
121
  const { string } = require('rollup-plugin-string');
75
122
  const { exec, spawn } = require('child_process');
76
123
  const readline = require('readline');
77
124
  const execAsync = util.promisify(exec);
125
+ const copyFiles = util.promisify(fs__default["default"].copy);
78
126
  require('dotenv').config();
79
127
  function getFile(file) {
80
128
  file = path__default["default"].resolve(file);
@@ -98,16 +146,49 @@ function getFile(file) {
98
146
  }
99
147
  return file;
100
148
  }
149
+ function convertIndexFile(data, version) {
150
+ return __awaiter(this, void 0, void 0, function* () {
151
+ return data
152
+ .toString()
153
+ .replace('</head>', `<script type="module" defer src="index.js${version ? `?v=${version}` : ''}"></script></head>`);
154
+ });
155
+ }
101
156
  const reporter = (options, outputOptions, info) => {
102
157
  logger__default["default"].log(`${chalk__default["default"].yellow(info.fileName)} ${chalk__default["default"].green(info.bundleSize)} [ gzip: ${chalk__default["default"].green(info.gzipSize)} ]`);
103
158
  return '';
104
159
  };
160
+ const stringExcludeDom = [
161
+ '**/*.ts',
162
+ '**/*.tsx',
163
+ '**/*.js',
164
+ '**/*.jsx',
165
+ '**/*.json',
166
+ '**/*.css',
167
+ '**/*.scss',
168
+ '**/*.webp',
169
+ '**/*.gif',
170
+ '**/*.png',
171
+ '**/*.jpeg',
172
+ '**/*.jpg',
173
+ '**/*.svg',
174
+ ];
175
+ const stringExcludeNode = [
176
+ '**/*.ts',
177
+ '**/*.tsx',
178
+ '**/*.js',
179
+ '**/*.jsx',
180
+ '**/*.json',
181
+ ];
105
182
  class InnetJS {
106
- constructor({ projectFolder = process.env.PROJECT_FOLDER || '', publicFolder = process.env.PUBLIC_FOLDER || 'public', buildFolder = process.env.BUILD_FOLDER || path__default["default"].join('public', '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' : false, cssInJs = process.env.CSS_IN_JS ? process.env.CSS_IN_JS === 'true' : false, 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 || '*', } = {}) {
183
+ 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
184
  this.projectFolder = path__default["default"].resolve(projectFolder);
108
185
  this.publicFolder = path__default["default"].resolve(publicFolder);
109
186
  this.buildFolder = path__default["default"].resolve(buildFolder);
110
187
  this.srcFolder = path__default["default"].resolve(srcFolder);
188
+ this.publicIndexFile = path__default["default"].join(publicFolder, 'index.html');
189
+ this.buildIndexFile = path__default["default"].join(buildFolder, 'index.html');
190
+ this.devBuildFolder = path__default["default"].resolve(projectFolder, 'node_modules', '.cache', 'innetjs', 'build');
191
+ this.devBuildIndexFile = path__default["default"].join(this.devBuildFolder, 'index.html');
111
192
  this.sourcemap = sourcemap;
112
193
  this.cssModules = cssModules;
113
194
  this.cssInJs = cssInJs;
@@ -121,14 +202,18 @@ class InnetJS {
121
202
  init(appName, { template, force = false } = {}) {
122
203
  return __awaiter(this, void 0, void 0, function* () {
123
204
  const appPath = path__default["default"].resolve(appName);
124
- if (!template) {
205
+ 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'); }));
206
+ const templates = data.map(({ name }) => name).filter(name => name !== 'main');
207
+ if (!template || !templates.includes(template)) {
125
208
  logger__default["default"].log(chalk__default["default"].green(`Select one of those templates`));
126
209
  const { value } = yield selector__default["default"]({
127
- values: ['fe', 'be']
210
+ values: templates
128
211
  });
129
212
  template = value;
130
213
  readline.moveCursor(process.stdout, 0, -1);
131
- logger__default["default"].log(`Selected ${value} template`);
214
+ const text = `Selected template: ${chalk__default["default"].white(value)}`;
215
+ logger__default["default"].start(text);
216
+ logger__default["default"].end(text);
132
217
  }
133
218
  if (!force) {
134
219
  yield logger__default["default"].start('Check if app folder is available', () => __awaiter(this, void 0, void 0, function* () {
@@ -148,14 +233,16 @@ class InnetJS {
148
233
  }
149
234
  }));
150
235
  }
151
- const libPath = path__default["default"].resolve(__dirname, '..');
152
- const templatePath = path__default["default"].resolve(libPath, 'templates', template);
153
- yield logger__default["default"].start('Check if the template exists', () => __awaiter(this, void 0, void 0, function* () {
154
- if (!fs__default["default"].existsSync(templatePath)) {
155
- throw Error(`The template '${template}' is not exist`);
156
- }
236
+ yield logger__default["default"].start('Download template', () => __awaiter(this, void 0, void 0, function* () {
237
+ const { data } = yield axios__default["default"].get(`https://github.com/d8corp/innetjs-templates/archive/refs/heads/${template}.zip`, {
238
+ responseType: 'stream'
239
+ });
240
+ yield new Promise((resolve, reject) => {
241
+ data.pipe(Extract({
242
+ path: appPath,
243
+ }, template)).on('finish', resolve).on('error', reject);
244
+ });
157
245
  }));
158
- yield logger__default["default"].start('Copy files', () => fs__default["default"].copy(templatePath, appPath));
159
246
  yield logger__default["default"].start('Install packages', () => execAsync(`cd ${appPath} && npm i`));
160
247
  });
161
248
  }
@@ -166,6 +253,7 @@ class InnetJS {
166
253
  const pkg = node && (yield this.getPackage());
167
254
  const inputOptions = {
168
255
  input: path__default["default"].resolve(this.srcFolder, `index.${indexExtension}`),
256
+ preserveEntrySignatures: 'strict',
169
257
  plugins: [
170
258
  commonjs__default["default"](),
171
259
  json__default["default"](),
@@ -184,33 +272,20 @@ class InnetJS {
184
272
  moduleDirectories: [path__default["default"].resolve(this.buildFolder, 'node_modules')]
185
273
  }), string({
186
274
  include: '**/*.*',
187
- exclude: [
188
- '**/*.ts',
189
- '**/*.tsx',
190
- '**/*.js',
191
- '**/*.jsx',
192
- '**/*.json',
193
- ]
275
+ exclude: stringExcludeNode,
194
276
  }));
195
277
  }
196
278
  else {
197
- inputOptions.plugins.push(pluginNodeResolve.nodeResolve(), string({
279
+ inputOptions.plugins.push(pluginNodeResolve.nodeResolve(), image__default["default"](), string({
198
280
  include: '**/*.*',
199
- exclude: [
200
- '**/*.ts',
201
- '**/*.tsx',
202
- '**/*.js',
203
- '**/*.jsx',
204
- '**/*.json',
205
- '**/*.css',
206
- '**/*.scss',
207
- ]
208
- }), postcss__default["default"]({
281
+ exclude: stringExcludeDom,
282
+ }), styles__default["default"]({
283
+ mode: this.cssInJs ? 'inject' : 'extract',
284
+ url: true,
209
285
  plugins: [autoprefixer__default["default"]()],
210
- extract: !this.cssInJs,
211
286
  modules: this.cssModules,
212
287
  sourceMap: this.sourcemap,
213
- minimize: true
288
+ minimize: true,
214
289
  }));
215
290
  outputOptions.format = 'es';
216
291
  outputOptions.plugins = [
@@ -224,6 +299,12 @@ class InnetJS {
224
299
  const bundle = yield rollup__default["default"].rollup(inputOptions);
225
300
  yield bundle.write(outputOptions);
226
301
  yield bundle.close();
302
+ if (!node) {
303
+ yield copyFiles(this.publicFolder, this.buildFolder);
304
+ const data = yield fs.promises.readFile(this.publicIndexFile);
305
+ const pkg = yield this.getPackage();
306
+ yield fs.promises.writeFile(this.buildIndexFile, yield convertIndexFile(data, pkg.version));
307
+ }
227
308
  }));
228
309
  if (pkg) {
229
310
  yield logger__default["default"].start('Copy package.json', () => __awaiter(this, void 0, void 0, function* () {
@@ -244,12 +325,13 @@ class InnetJS {
244
325
  start({ node = false, error = false } = {}) {
245
326
  return __awaiter(this, void 0, void 0, function* () {
246
327
  const indexExtension = yield this.getProjectExtension();
247
- const pkg = node && (yield this.getPackage());
248
- yield logger__default["default"].start('Remove build', () => fs__default["default"].remove(this.buildFolder));
328
+ const pkg = yield this.getPackage();
329
+ yield logger__default["default"].start('Remove build', () => fs__default["default"].remove(this.devBuildFolder));
249
330
  const options = {
250
331
  input: path__default["default"].resolve(this.srcFolder, `index.${indexExtension}`),
332
+ preserveEntrySignatures: 'strict',
251
333
  output: {
252
- dir: this.buildFolder,
334
+ dir: this.devBuildFolder,
253
335
  sourcemap: true
254
336
  },
255
337
  plugins: [
@@ -272,13 +354,7 @@ class InnetJS {
272
354
  moduleDirectories: [path__default["default"].resolve(this.srcFolder, 'node_modules')]
273
355
  }), string({
274
356
  include: '**/*.*',
275
- exclude: [
276
- '**/*.ts',
277
- '**/*.tsx',
278
- '**/*.js',
279
- '**/*.jsx',
280
- '**/*.json',
281
- ]
357
+ exclude: stringExcludeNode,
282
358
  }), this.createServer(options.external));
283
359
  }
284
360
  else {
@@ -293,26 +369,19 @@ class InnetJS {
293
369
  ? fs__default["default"].readFileSync(this.sslCrt)
294
370
  : undefined;
295
371
  options.output.format = 'es';
296
- options.plugins.push(pluginNodeResolve.nodeResolve(), string({
372
+ options.plugins.push(pluginNodeResolve.nodeResolve(), image__default["default"](), string({
297
373
  include: '**/*.*',
298
- exclude: [
299
- '**/*.ts',
300
- '**/*.tsx',
301
- '**/*.js',
302
- '**/*.jsx',
303
- '**/*.json',
304
- '**/*.css',
305
- '**/*.scss',
306
- ]
307
- }), postcss__default["default"]({
374
+ exclude: stringExcludeDom,
375
+ }), styles__default["default"]({
376
+ mode: this.cssInJs ? 'inject' : 'extract',
377
+ url: true,
308
378
  plugins: [autoprefixer__default["default"]()],
309
379
  modules: this.cssModules,
310
380
  sourceMap: true,
311
- extract: !this.cssInJs,
312
- }), this.createClient(key, cert), livereload(Object.assign({ watch: this.publicFolder, verbose: false }, (key && cert ? { https: { key, cert } } : {}))));
381
+ }), this.createClient(key, cert, pkg), livereload(Object.assign({ watch: this.publicFolder, verbose: false }, (key && cert ? { https: { key, cert } } : {}))));
313
382
  }
314
383
  const watcher = rollup__default["default"].watch(options);
315
- watcher.on('event', e => {
384
+ watcher.on('event', (e) => __awaiter(this, void 0, void 0, function* () {
316
385
  if (e.code == 'ERROR') {
317
386
  logger__default["default"].end('Bundling', error ? e.error.stack : e.error.message);
318
387
  }
@@ -322,7 +391,7 @@ class InnetJS {
322
391
  else if (e.code === 'BUNDLE_END') {
323
392
  logger__default["default"].end('Bundling');
324
393
  }
325
- });
394
+ }));
326
395
  });
327
396
  }
328
397
  run(file) {
@@ -414,14 +483,21 @@ class InnetJS {
414
483
  return this.package;
415
484
  });
416
485
  }
417
- createClient(key, cert) {
486
+ createClient(key, cert, pkg) {
418
487
  let app;
419
488
  return {
420
- writeBundle: () => {
489
+ writeBundle: () => __awaiter(this, void 0, void 0, function* () {
421
490
  var _a;
422
491
  if (!app) {
423
- const httpsUsing = !!(cert && key);
424
492
  app = express__default["default"]();
493
+ const update = () => __awaiter(this, void 0, void 0, function* () {
494
+ const data = yield fs.promises.readFile(this.publicIndexFile);
495
+ yield fs.promises.writeFile(this.devBuildIndexFile, yield convertIndexFile(data, pkg.version));
496
+ });
497
+ fs__default["default"].watch(this.publicIndexFile, update);
498
+ yield update();
499
+ const httpsUsing = !!(cert && key);
500
+ app.use(express__default["default"].static(this.devBuildFolder));
425
501
  app.use(express__default["default"].static(this.publicFolder));
426
502
  if ((_a = this.proxy) === null || _a === void 0 ? void 0 : _a.startsWith('http')) {
427
503
  app.use(this.api, proxy__default["default"](this.proxy, {
@@ -430,14 +506,14 @@ class InnetJS {
430
506
  }));
431
507
  }
432
508
  app.use(/^[^.]+$/, (req, res) => {
433
- res.sendFile(this.publicFolder + '/index.html');
509
+ res.sendFile(this.devBuildFolder + '/index.html');
434
510
  });
435
511
  const server = httpsUsing ? https__default["default"].createServer({ key, cert }, app) : http__default["default"].createServer(app);
436
512
  server.listen(this.port, () => {
437
513
  console.log(`${chalk__default["default"].green('➤')} Server started on http${httpsUsing ? 's' : ''}://localhost:${this.port}`);
438
514
  });
439
515
  }
440
- }
516
+ })
441
517
  };
442
518
  }
443
519
  createServer(external) {
@@ -456,7 +532,7 @@ class InnetJS {
456
532
  }
457
533
  }
458
534
 
459
- var version = "1.12.0";
535
+ var version = "2.0.1";
460
536
 
461
537
  require('dotenv').config();
462
538
  const innetJS = new InnetJS();
@@ -0,0 +1,39 @@
1
+ declare module '*.scss' {
2
+ const content: Record<string, string>
3
+ export default content
4
+ }
5
+
6
+ declare module '*.css' {
7
+ const content: Record<string, string>
8
+ export default content
9
+ }
10
+
11
+ declare module '*.svg' {
12
+ const content: string
13
+ export default content
14
+ }
15
+
16
+ declare module '*.jpg' {
17
+ const content: string
18
+ export default content
19
+ }
20
+
21
+ declare module '*.jpeg' {
22
+ const content: string
23
+ export default content
24
+ }
25
+
26
+ declare module '*.png' {
27
+ const content: string
28
+ export default content
29
+ }
30
+
31
+ declare module '*.gif' {
32
+ const content: string
33
+ export default content
34
+ }
35
+
36
+ declare module '*.webp' {
37
+ const content: string
38
+ export default content
39
+ }
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>;