@lipemat/js-boilerplate 10.12.0 → 10.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/lipemat-js-boilerplate.js +2 -1
- package/config/dev-server.config.js +38 -33
- package/config/dev-server.config.ts +44 -0
- package/config/jest.config.js +3 -0
- package/config/jest.config.ts +3 -0
- package/config/webpack.dev.js +109 -109
- package/config/webpack.dev.ts +120 -0
- package/config/webpack.dist.js +163 -162
- package/config/webpack.dist.ts +178 -0
- package/helpers/WebpackAssetsHash.js +63 -73
- package/helpers/WebpackAssetsHash.ts +75 -0
- package/helpers/config.js +4 -4
- package/helpers/config.ts +8 -6
- package/helpers/package-config.ts +1 -1
- package/package.json +14 -12
- package/scripts/analyze.ts +11 -5
- package/scripts/dist.ts +21 -0
- package/scripts/dist.js +0 -27
|
@@ -13,6 +13,7 @@ const nodeArgs = scriptIndex > 0 ? args.slice( 0, scriptIndex ) : [];
|
|
|
13
13
|
|
|
14
14
|
const TS_CONVERTED_SCRIPTS = [
|
|
15
15
|
'analyze',
|
|
16
|
+
'dist',
|
|
16
17
|
'test',
|
|
17
18
|
'lint',
|
|
18
19
|
'validate-css-modules',
|
|
@@ -27,7 +28,7 @@ switch ( script ) {
|
|
|
27
28
|
case 'start':
|
|
28
29
|
case 'test':
|
|
29
30
|
case 'validate-css-modules': {
|
|
30
|
-
// If the ts-node command is not available install it globally.
|
|
31
|
+
// If the ts-node command is not available, install it globally.
|
|
31
32
|
if ( spawn.sync( 'ts-node', [ '-v' ] ).error ) {
|
|
32
33
|
console.log( 'Installing ts-node globally.' );
|
|
33
34
|
spawn.sync( 'npm', [ 'install', '-g', 'ts-node' ] );
|
|
@@ -1,37 +1,42 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const fs_1 = __importDefault(require("fs"));
|
|
7
|
+
const package_config_1 = require("../helpers/package-config");
|
|
8
|
+
const packageConfig = (0, package_config_1.getPackageConfig)();
|
|
9
|
+
const url = new URL(packageConfig.url);
|
|
6
10
|
let server = 'https:' === url.protocol ? 'https' : 'http';
|
|
7
11
|
// Load local certificates for https during development.
|
|
8
|
-
if (
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
if ('object' === typeof (packageConfig.certificates)) {
|
|
13
|
+
server = {
|
|
14
|
+
type: 'https',
|
|
15
|
+
options: {
|
|
16
|
+
cert: fs_1.default.readFileSync(packageConfig.certificates.cert),
|
|
17
|
+
key: fs_1.default.readFileSync(packageConfig.certificates.key),
|
|
18
|
+
},
|
|
19
|
+
};
|
|
16
20
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
static: false,
|
|
21
|
+
const config = {
|
|
22
|
+
allowedHosts: 'all',
|
|
23
|
+
client: {
|
|
24
|
+
logging: 'warn',
|
|
25
|
+
overlay: {
|
|
26
|
+
errors: true,
|
|
27
|
+
warnings: false,
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
headers: {
|
|
31
|
+
'Access-Control-Allow-Origin': '*',
|
|
32
|
+
'Access-Control-Allow-Methods': '*',
|
|
33
|
+
'Access-Control-Allow-Headers': '*',
|
|
34
|
+
},
|
|
35
|
+
host: '0.0.0.0', // Allow connections from any IP.
|
|
36
|
+
hot: true,
|
|
37
|
+
port: 3000,
|
|
38
|
+
server,
|
|
39
|
+
static: false,
|
|
37
40
|
};
|
|
41
|
+
exports.default = config;
|
|
42
|
+
module.exports = config;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import {getPackageConfig} from '../helpers/package-config';
|
|
3
|
+
import type {Configuration} from 'webpack-dev-server';
|
|
4
|
+
|
|
5
|
+
const packageConfig = getPackageConfig();
|
|
6
|
+
|
|
7
|
+
const url = new URL( packageConfig.url );
|
|
8
|
+
|
|
9
|
+
let server: Configuration['server'] = 'https:' === url.protocol ? 'https' : 'http';
|
|
10
|
+
// Load local certificates for https during development.
|
|
11
|
+
if ( 'object' === typeof ( packageConfig.certificates ) ) {
|
|
12
|
+
server = {
|
|
13
|
+
type: 'https',
|
|
14
|
+
options: {
|
|
15
|
+
cert: fs.readFileSync( packageConfig.certificates.cert ),
|
|
16
|
+
key: fs.readFileSync( packageConfig.certificates.key ),
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
const config: Configuration = {
|
|
23
|
+
allowedHosts: 'all',
|
|
24
|
+
client: {
|
|
25
|
+
logging: 'warn',
|
|
26
|
+
overlay: {
|
|
27
|
+
errors: true,
|
|
28
|
+
warnings: false,
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
headers: {
|
|
32
|
+
'Access-Control-Allow-Origin': '*',
|
|
33
|
+
'Access-Control-Allow-Methods': '*',
|
|
34
|
+
'Access-Control-Allow-Headers': '*',
|
|
35
|
+
},
|
|
36
|
+
host: '0.0.0.0', // Allow connections from any IP.
|
|
37
|
+
hot: true,
|
|
38
|
+
port: 3000,
|
|
39
|
+
server,
|
|
40
|
+
static: false,
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export default config;
|
|
44
|
+
module.exports = config;
|
package/config/jest.config.js
CHANGED
|
@@ -16,6 +16,9 @@ const jestConfig = {
|
|
|
16
16
|
'is-plain-obj': 'identity-obj-proxy',
|
|
17
17
|
uuid: 'identity-obj-proxy',
|
|
18
18
|
},
|
|
19
|
+
// Does not support prettier 3 until version 30.
|
|
20
|
+
// @link https://github.com/jestjs/jest/issues/14305
|
|
21
|
+
prettierPath: null,
|
|
19
22
|
roots: [
|
|
20
23
|
'./tests',
|
|
21
24
|
],
|
package/config/jest.config.ts
CHANGED
|
@@ -21,6 +21,9 @@ const jestConfig: Config = {
|
|
|
21
21
|
'is-plain-obj': 'identity-obj-proxy',
|
|
22
22
|
uuid: 'identity-obj-proxy',
|
|
23
23
|
},
|
|
24
|
+
// Does not support prettier 3 until version 30.
|
|
25
|
+
// @link https://github.com/jestjs/jest/issues/14305
|
|
26
|
+
prettierPath: null,
|
|
24
27
|
roots: [
|
|
25
28
|
'./tests',
|
|
26
29
|
],
|
package/config/webpack.dev.js
CHANGED
|
@@ -1,115 +1,115 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const webpack_1 = require("webpack");
|
|
7
|
+
const react_refresh_webpack_plugin_1 = __importDefault(require("@pmmmwh/react-refresh-webpack-plugin"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const fork_ts_checker_webpack_plugin_1 = __importDefault(require("fork-ts-checker-webpack-plugin"));
|
|
10
|
+
const config_1 = require("../helpers/config");
|
|
11
|
+
const entries_1 = require("../helpers/entries");
|
|
12
|
+
const package_config_1 = require("../helpers/package-config");
|
|
13
|
+
const postcssOptions = (0, config_1.getConfig)('postcss.config');
|
|
14
|
+
const babelOptions = (0, config_1.getConfig)('babel.config');
|
|
15
|
+
const cssLoaderOptions = (0, config_1.getConfig)('css-loader.config');
|
|
16
|
+
const devServerOptions = (0, config_1.getConfig)('dev-server.config');
|
|
14
17
|
// To allow line numbers to show up in console errors. @see React Error Boundaries.
|
|
15
|
-
babelOptions.plugins
|
|
18
|
+
babelOptions.plugins?.unshift('@babel/plugin-transform-react-jsx-source');
|
|
16
19
|
// To support React Fast Refresh.
|
|
17
|
-
babelOptions.plugins
|
|
18
|
-
|
|
20
|
+
babelOptions.plugins?.unshift('react-refresh/babel');
|
|
19
21
|
const plugins = [
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
new webpack_1.ProvidePlugin({
|
|
23
|
+
jQuery: 'jquery',
|
|
24
|
+
$: 'jquery',
|
|
25
|
+
}),
|
|
26
|
+
new react_refresh_webpack_plugin_1.default(),
|
|
25
27
|
];
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
},
|
|
36
|
-
} ) );
|
|
28
|
+
// Loads a thread, which verifies any TypeScript on changes if the project has a "tsconfig.json" file.
|
|
29
|
+
if ('' !== (0, config_1.getTsConfigFile)()) {
|
|
30
|
+
plugins.push(new fork_ts_checker_webpack_plugin_1.default({
|
|
31
|
+
devServer: false,
|
|
32
|
+
formatter: 'basic',
|
|
33
|
+
typescript: {
|
|
34
|
+
configFile: (0, config_1.getTsConfigFile)(),
|
|
35
|
+
},
|
|
36
|
+
}));
|
|
37
37
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
],
|
|
114
|
-
},
|
|
38
|
+
const config = {
|
|
39
|
+
devtool: 'eval-source-map',
|
|
40
|
+
entry: (0, entries_1.getEntries)(),
|
|
41
|
+
mode: 'development',
|
|
42
|
+
stats: 'minimal',
|
|
43
|
+
externals: {
|
|
44
|
+
jquery: 'jQuery',
|
|
45
|
+
},
|
|
46
|
+
target: 'browserslist:' + (0, config_1.getBrowsersList)().join(', '),
|
|
47
|
+
output: {
|
|
48
|
+
path: path_1.default.resolve((0, package_config_1.getPackageConfig)().workingDirectory, 'dist'),
|
|
49
|
+
filename: '[name].js',
|
|
50
|
+
publicPath: (0, package_config_1.getPackageConfig)().url + ':' + devServerOptions.port + '/js/dist/',
|
|
51
|
+
chunkFilename: '[name].js',
|
|
52
|
+
},
|
|
53
|
+
resolve: {
|
|
54
|
+
extensions: ['.ts', '.tsx', '.js', '.jsx', '.json', '.pcss'],
|
|
55
|
+
modules: [
|
|
56
|
+
path_1.default.resolve((0, package_config_1.getPackageConfig)().workingDirectory, 'src'),
|
|
57
|
+
'node_modules',
|
|
58
|
+
],
|
|
59
|
+
},
|
|
60
|
+
plugins,
|
|
61
|
+
optimization: {
|
|
62
|
+
moduleIds: 'named',
|
|
63
|
+
emitOnErrors: false,
|
|
64
|
+
},
|
|
65
|
+
module: {
|
|
66
|
+
strictExportPresence: true,
|
|
67
|
+
rules: [
|
|
68
|
+
{
|
|
69
|
+
test: /\.[jt]sx?$/,
|
|
70
|
+
loader: 'babel-loader',
|
|
71
|
+
include: path_1.default.resolve((0, package_config_1.getPackageConfig)().workingDirectory, 'src'),
|
|
72
|
+
exclude: /node_modules/,
|
|
73
|
+
options: babelOptions,
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
test: /\.css$/,
|
|
77
|
+
use: [
|
|
78
|
+
'style-loader',
|
|
79
|
+
'css-loader',
|
|
80
|
+
],
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
test: /\.pcss$/,
|
|
84
|
+
use: [
|
|
85
|
+
'style-loader',
|
|
86
|
+
{
|
|
87
|
+
loader: '@teamsupercell/typings-for-css-modules-loader',
|
|
88
|
+
options: {
|
|
89
|
+
banner: '// Autogenerated by typings-for-css-modules-loader.',
|
|
90
|
+
disableLocalsExport: true,
|
|
91
|
+
prettierConfigFile: path_1.default.resolve(__dirname, '../helpers/.prettierrc.json'),
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
loader: 'css-loader',
|
|
96
|
+
options: cssLoaderOptions,
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
loader: 'postcss-loader',
|
|
100
|
+
options: {
|
|
101
|
+
postcssOptions,
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
].filter(loader => {
|
|
105
|
+
if (!(0, package_config_1.getPackageConfig)().cssTsFiles && 'object' === typeof loader) {
|
|
106
|
+
return loader.loader !== '@teamsupercell/typings-for-css-modules-loader';
|
|
107
|
+
}
|
|
108
|
+
return true;
|
|
109
|
+
}),
|
|
110
|
+
},
|
|
111
|
+
],
|
|
112
|
+
},
|
|
115
113
|
};
|
|
114
|
+
exports.default = config;
|
|
115
|
+
module.exports = config;
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import {type Configuration as WebpackConfig, ProvidePlugin, WebpackPluginInstance} from 'webpack';
|
|
2
|
+
import ReactRefreshWebpackPlugin from '@pmmmwh/react-refresh-webpack-plugin';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import ForkTsCheckerWebpackPlugin from 'fork-ts-checker-webpack-plugin';
|
|
5
|
+
|
|
6
|
+
import {getBrowsersList, getConfig, getTsConfigFile} from '../helpers/config';
|
|
7
|
+
import {getEntries} from '../helpers/entries';
|
|
8
|
+
import {getPackageConfig} from '../helpers/package-config';
|
|
9
|
+
import type {BabelConfig} from './babel.config';
|
|
10
|
+
|
|
11
|
+
const postcssOptions = getConfig( 'postcss.config' );
|
|
12
|
+
const babelOptions: BabelConfig = getConfig( 'babel.config' );
|
|
13
|
+
const cssLoaderOptions = getConfig( 'css-loader.config' );
|
|
14
|
+
const devServerOptions = getConfig( 'dev-server.config' );
|
|
15
|
+
|
|
16
|
+
// To allow line numbers to show up in console errors. @see React Error Boundaries.
|
|
17
|
+
babelOptions.plugins?.unshift( '@babel/plugin-transform-react-jsx-source' );
|
|
18
|
+
// To support React Fast Refresh.
|
|
19
|
+
babelOptions.plugins?.unshift( 'react-refresh/babel' );
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
const plugins: WebpackPluginInstance[] = [
|
|
23
|
+
new ProvidePlugin( {
|
|
24
|
+
jQuery: 'jquery',
|
|
25
|
+
$: 'jquery',
|
|
26
|
+
} ),
|
|
27
|
+
new ReactRefreshWebpackPlugin(),
|
|
28
|
+
];
|
|
29
|
+
|
|
30
|
+
// Loads a thread, which verifies any TypeScript on changes if the project has a "tsconfig.json" file.
|
|
31
|
+
if ( '' !== getTsConfigFile() ) {
|
|
32
|
+
plugins.push( new ForkTsCheckerWebpackPlugin( {
|
|
33
|
+
devServer: false,
|
|
34
|
+
formatter: 'basic',
|
|
35
|
+
typescript: {
|
|
36
|
+
configFile: getTsConfigFile(),
|
|
37
|
+
},
|
|
38
|
+
} ) );
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const config: WebpackConfig = {
|
|
42
|
+
devtool: 'eval-source-map',
|
|
43
|
+
entry: getEntries(),
|
|
44
|
+
mode: 'development',
|
|
45
|
+
stats: 'minimal',
|
|
46
|
+
externals: {
|
|
47
|
+
jquery: 'jQuery',
|
|
48
|
+
},
|
|
49
|
+
target: 'browserslist:' + getBrowsersList().join( ', ' ),
|
|
50
|
+
output: {
|
|
51
|
+
path: path.resolve( getPackageConfig().workingDirectory, 'dist' ),
|
|
52
|
+
filename: '[name].js',
|
|
53
|
+
publicPath: getPackageConfig().url + ':' + devServerOptions.port + '/js/dist/',
|
|
54
|
+
chunkFilename: '[name].js',
|
|
55
|
+
},
|
|
56
|
+
resolve: {
|
|
57
|
+
extensions: [ '.ts', '.tsx', '.js', '.jsx', '.json', '.pcss' ],
|
|
58
|
+
modules: [
|
|
59
|
+
path.resolve( getPackageConfig().workingDirectory, 'src' ),
|
|
60
|
+
'node_modules',
|
|
61
|
+
],
|
|
62
|
+
},
|
|
63
|
+
plugins,
|
|
64
|
+
optimization: {
|
|
65
|
+
moduleIds: 'named',
|
|
66
|
+
emitOnErrors: false,
|
|
67
|
+
},
|
|
68
|
+
module: {
|
|
69
|
+
strictExportPresence: true,
|
|
70
|
+
rules: [
|
|
71
|
+
{
|
|
72
|
+
test: /\.[jt]sx?$/,
|
|
73
|
+
loader: 'babel-loader',
|
|
74
|
+
include: path.resolve( getPackageConfig().workingDirectory, 'src' ),
|
|
75
|
+
exclude: /node_modules/,
|
|
76
|
+
options: babelOptions,
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
test: /\.css$/,
|
|
80
|
+
use: [
|
|
81
|
+
'style-loader',
|
|
82
|
+
'css-loader',
|
|
83
|
+
],
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
test: /\.pcss$/,
|
|
87
|
+
use: [
|
|
88
|
+
'style-loader',
|
|
89
|
+
{
|
|
90
|
+
loader: '@teamsupercell/typings-for-css-modules-loader',
|
|
91
|
+
options: {
|
|
92
|
+
banner: '// Autogenerated by typings-for-css-modules-loader.',
|
|
93
|
+
disableLocalsExport: true,
|
|
94
|
+
prettierConfigFile: path.resolve( __dirname, '../helpers/.prettierrc.json' ),
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
loader: 'css-loader',
|
|
99
|
+
options: cssLoaderOptions,
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
loader: 'postcss-loader',
|
|
103
|
+
options: {
|
|
104
|
+
postcssOptions,
|
|
105
|
+
},
|
|
106
|
+
},
|
|
107
|
+
].filter( loader => {
|
|
108
|
+
if ( ! getPackageConfig().cssTsFiles && 'object' === typeof loader ) {
|
|
109
|
+
return loader.loader !== '@teamsupercell/typings-for-css-modules-loader';
|
|
110
|
+
}
|
|
111
|
+
return true;
|
|
112
|
+
} ),
|
|
113
|
+
},
|
|
114
|
+
|
|
115
|
+
],
|
|
116
|
+
},
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
export default config;
|
|
120
|
+
module.exports = config;
|