* feat: replace ng2-select2 => ngx-select-ex * feat: style the ngrx-select * feat: replace secondary role select2 * feat: replace Select2OptionData => SelectOptionData * feat: replace select2 => ngx-select in macro-tab component * feat: replace select2 => ngx-select in keymap-tab component * feat: fix styles * chore: remove select2 from dependencies * fix: macro editor overflow * fix: set the same font size for the toggle button * fix: overflow * chore: use @ert78gb/ngx-select-ex version of ngx-select-ex
546 lines
19 KiB
JavaScript
546 lines
19 KiB
JavaScript
const fs = require('fs');
|
|
const path = require('path');
|
|
const CopyWebpackPlugin = require('copy-webpack-plugin');
|
|
const ProgressPlugin = require('webpack/lib/ProgressPlugin');
|
|
const CircularDependencyPlugin = require('circular-dependency-plugin');
|
|
const HtmlWebpackPlugin = require('html-webpack-plugin');
|
|
const rxPaths = require('rxjs/_esm5/path-mapping');
|
|
const autoprefixer = require('autoprefixer');
|
|
const postcssUrl = require('postcss-url');
|
|
const postcssImports = require('postcss-import');
|
|
|
|
const {NoEmitOnErrorsPlugin, SourceMapDevToolPlugin, NamedModulesPlugin} = require('webpack');
|
|
const {ScriptsWebpackPlugin, NamedLazyChunksWebpackPlugin, BaseHrefWebpackPlugin, PostcssCliResources} = require('@angular/cli/plugins/webpack');
|
|
const {CommonsChunkPlugin} = require('webpack').optimize;
|
|
const {AngularCompilerPlugin} = require('@ngtools/webpack');
|
|
|
|
const nodeModules = path.join(process.cwd(), 'node_modules');
|
|
const realNodeModules = fs.realpathSync(nodeModules);
|
|
const genDirNodeModules = path.join(process.cwd(), 'src', '$$_gendir', 'node_modules');
|
|
const entryPoints = ["inline", "polyfills", "sw-register", "styles", "scripts", "vendor", "main"];
|
|
const hashFormat = {"chunk": "", "extract": "", "file": ".[hash:20]", "script": ""};
|
|
const baseHref = "";
|
|
const deployUrl = "";
|
|
const projectRoot = process.cwd();
|
|
const maximumInlineSize = 10;
|
|
const postcssPlugins = function (loader) {
|
|
return [
|
|
postcssImports({
|
|
resolve: (url, context) => {
|
|
return new Promise((resolve, reject) => {
|
|
let hadTilde = false;
|
|
if (url && url.startsWith('~')) {
|
|
url = url.substr(1);
|
|
hadTilde = true;
|
|
}
|
|
loader.resolve(context, (hadTilde ? '' : './') + url, (err, result) => {
|
|
if (err) {
|
|
if (hadTilde) {
|
|
reject(err);
|
|
return;
|
|
}
|
|
loader.resolve(context, url, (err, result) => {
|
|
if (err) {
|
|
reject(err);
|
|
}
|
|
else {
|
|
resolve(result);
|
|
}
|
|
});
|
|
}
|
|
else {
|
|
resolve(result);
|
|
}
|
|
});
|
|
});
|
|
},
|
|
load: (filename) => {
|
|
return new Promise((resolve, reject) => {
|
|
loader.fs.readFile(filename, (err, data) => {
|
|
if (err) {
|
|
reject(err);
|
|
return;
|
|
}
|
|
const content = data.toString();
|
|
resolve(content);
|
|
});
|
|
});
|
|
}
|
|
}),
|
|
postcssUrl({
|
|
filter: ({url}) => url.startsWith('~'),
|
|
url: ({url}) => {
|
|
const fullPath = path.join(projectRoot, 'node_modules', url.substr(1));
|
|
return path.relative(loader.context, fullPath).replace(/\\/g, '/');
|
|
}
|
|
}),
|
|
postcssUrl([
|
|
{
|
|
// Only convert root relative URLs, which CSS-Loader won't process into require().
|
|
filter: ({url}) => url.startsWith('/') && !url.startsWith('//'),
|
|
url: ({url}) => {
|
|
if (deployUrl.match(/:\/\//) || deployUrl.startsWith('/')) {
|
|
// If deployUrl is absolute or root relative, ignore baseHref & use deployUrl as is.
|
|
return `${deployUrl.replace(/\/$/, '')}${url}`;
|
|
}
|
|
else if (baseHref.match(/:\/\//)) {
|
|
// If baseHref contains a scheme, include it as is.
|
|
return baseHref.replace(/\/$/, '') +
|
|
`/${deployUrl}/${url}`.replace(/\/\/+/g, '/');
|
|
}
|
|
else {
|
|
// Join together base-href, deploy-url and the original URL.
|
|
// Also dedupe multiple slashes into single ones.
|
|
return `/${baseHref}/${deployUrl}/${url}`.replace(/\/\/+/g, '/');
|
|
}
|
|
}
|
|
},
|
|
{
|
|
// TODO: inline .cur if not supporting IE (use browserslist to check)
|
|
filter: (asset) => {
|
|
return maximumInlineSize > 0 && !asset.hash && !asset.absolutePath.endsWith('.cur');
|
|
},
|
|
url: 'inline',
|
|
// NOTE: maxSize is in KB
|
|
maxSize: maximumInlineSize,
|
|
fallback: 'rebase',
|
|
},
|
|
{url: 'rebase'},
|
|
]),
|
|
PostcssCliResources({
|
|
deployUrl: loader.loaders[loader.loaderIndex].options.ident == 'extracted' ? '' : deployUrl,
|
|
loader,
|
|
filename: `[name]${hashFormat.file}.[ext]`,
|
|
}),
|
|
autoprefixer({grid: true}),
|
|
];
|
|
};
|
|
|
|
|
|
module.exports = {
|
|
"target": "electron-renderer",
|
|
"resolve": {
|
|
"extensions": [
|
|
".ts",
|
|
".js"
|
|
],
|
|
"symlinks": true,
|
|
"modules": [
|
|
"./src",
|
|
"./node_modules"
|
|
],
|
|
"alias": {
|
|
...rxPaths(),
|
|
'nouislider':path.join(projectRoot, 'node_modules/nouislider/distribute/nouislider.js'),
|
|
'ng2-nouislider':path.join(projectRoot, 'node_modules/ng2-nouislider/src/nouislider.js')
|
|
},
|
|
"mainFields": [
|
|
"browser",
|
|
"module",
|
|
"main"
|
|
]
|
|
},
|
|
"resolveLoader": {
|
|
"modules": [
|
|
"./node_modules",
|
|
"./node_modules/@angular/cli/node_modules"
|
|
],
|
|
"alias": rxPaths()
|
|
},
|
|
"entry": {
|
|
"main": [
|
|
"./src/main-renderer.ts"
|
|
],
|
|
"polyfills": [
|
|
"./src/polyfills.ts"
|
|
],
|
|
"styles": [
|
|
"./node_modules/bootstrap/dist/css/bootstrap.min.css",
|
|
"./node_modules/nouislider/distribute/nouislider.min.css",
|
|
"./src/styles.scss"
|
|
]
|
|
},
|
|
"output": {
|
|
"path": path.join(__dirname, "../uhk-agent/dist/renderer"),
|
|
"filename": "[name].bundle.js",
|
|
"chunkFilename": "[id].chunk.js",
|
|
"crossOriginLoading": false
|
|
},
|
|
"module": {
|
|
"rules": [
|
|
{
|
|
"test": /\.html$/,
|
|
"loader": "raw-loader"
|
|
},
|
|
{
|
|
"test": /\.(eot|svg|cur)$/,
|
|
"loader": "file-loader",
|
|
"options": {
|
|
"name": "[name].[hash:20].[ext]",
|
|
"limit": 10000
|
|
}
|
|
},
|
|
{
|
|
"test": /\.(jpg|png|webp|gif|otf|ttf|woff|woff2|ani)$/,
|
|
"loader": "url-loader",
|
|
"options": {
|
|
"name": "[name].[hash:20].[ext]",
|
|
"limit": 10000
|
|
}
|
|
},
|
|
{
|
|
"exclude": [
|
|
path.join(process.cwd(), "node_modules/bootstrap/dist/css/bootstrap.min.css"),
|
|
path.join(process.cwd(), "node_modules/nouislider/distribute/nouislider.min.css"),
|
|
path.join(process.cwd(), "src/styles.scss")
|
|
],
|
|
"test": /\.css$/,
|
|
"use": [
|
|
{
|
|
"loader": "raw-loader"
|
|
},
|
|
{
|
|
"loader": "postcss-loader",
|
|
"options": {
|
|
"ident": "embedded",
|
|
"plugins": postcssPlugins,
|
|
"sourceMap": true
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"exclude": [
|
|
path.join(process.cwd(), "node_modules/bootstrap/dist/css/bootstrap.min.css"),
|
|
path.join(process.cwd(), "node_modules/nouislider/distribute/nouislider.min.css"),
|
|
path.join(process.cwd(), "src/styles.scss")
|
|
],
|
|
"test": /\.scss$|\.sass$/,
|
|
"use": [
|
|
{
|
|
"loader": "raw-loader"
|
|
},
|
|
{
|
|
"loader": "postcss-loader",
|
|
"options": {
|
|
"ident": "embedded",
|
|
"plugins": postcssPlugins,
|
|
"sourceMap": true
|
|
}
|
|
},
|
|
{
|
|
"loader": "sass-loader",
|
|
"options": {
|
|
"sourceMap": true,
|
|
"precision": 8,
|
|
"includePaths": []
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"exclude": [
|
|
path.join(process.cwd(), "node_modules/bootstrap/dist/css/bootstrap.min.css"),
|
|
path.join(process.cwd(), "node_modules/nouislider/distribute/nouislider.min.css"),
|
|
path.join(process.cwd(), "src/styles.scss")
|
|
],
|
|
"test": /\.less$/,
|
|
"use": [
|
|
{
|
|
"loader": "raw-loader"
|
|
},
|
|
{
|
|
"loader": "postcss-loader",
|
|
"options": {
|
|
"ident": "embedded",
|
|
"plugins": postcssPlugins,
|
|
"sourceMap": true
|
|
}
|
|
},
|
|
{
|
|
"loader": "less-loader",
|
|
"options": {
|
|
"sourceMap": true
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"exclude": [
|
|
path.join(process.cwd(), "node_modules/bootstrap/dist/css/bootstrap.min.css"),
|
|
path.join(process.cwd(), "node_modules/nouislider/distribute/nouislider.min.css"),
|
|
path.join(process.cwd(), "src/styles.scss")
|
|
],
|
|
"test": /\.styl$/,
|
|
"use": [
|
|
{
|
|
"loader": "raw-loader"
|
|
},
|
|
{
|
|
"loader": "postcss-loader",
|
|
"options": {
|
|
"ident": "embedded",
|
|
"plugins": postcssPlugins,
|
|
"sourceMap": true
|
|
}
|
|
},
|
|
{
|
|
"loader": "stylus-loader",
|
|
"options": {
|
|
"sourceMap": true,
|
|
"paths": []
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"include": [
|
|
path.join(process.cwd(), "node_modules/bootstrap/dist/css/bootstrap.min.css"),
|
|
path.join(process.cwd(), "node_modules/nouislider/distribute/nouislider.min.css"),
|
|
path.join(process.cwd(), "src/styles.scss")
|
|
],
|
|
"test": /\.css$/,
|
|
"use": [
|
|
"style-loader",
|
|
{
|
|
"loader": "raw-loader"
|
|
},
|
|
{
|
|
"loader": "postcss-loader",
|
|
"options": {
|
|
"ident": "embedded",
|
|
"plugins": postcssPlugins,
|
|
"sourceMap": true
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"include": [
|
|
path.join(process.cwd(), "node_modules/bootstrap/dist/css/bootstrap.min.css"),
|
|
path.join(process.cwd(), "node_modules/nouislider/distribute/nouislider.min.css"),
|
|
path.join(process.cwd(), "src/styles.scss")
|
|
],
|
|
"test": /\.scss$|\.sass$/,
|
|
"use": [
|
|
"style-loader",
|
|
{
|
|
"loader": "raw-loader"
|
|
},
|
|
{
|
|
"loader": "postcss-loader",
|
|
"options": {
|
|
"ident": "embedded",
|
|
"plugins": postcssPlugins,
|
|
"sourceMap": true
|
|
}
|
|
},
|
|
{
|
|
"loader": "sass-loader",
|
|
"options": {
|
|
"sourceMap": true,
|
|
"precision": 8,
|
|
"includePaths": []
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"include": [
|
|
path.join(process.cwd(), "node_modules/bootstrap/dist/css/bootstrap.min.css"),
|
|
path.join(process.cwd(), "node_modules/nouislider/distribute/nouislider.min.css"),
|
|
path.join(process.cwd(), "src/styles.scss")
|
|
],
|
|
"test": /\.less$/,
|
|
"use": [
|
|
"style-loader",
|
|
{
|
|
"loader": "raw-loader"
|
|
},
|
|
{
|
|
"loader": "postcss-loader",
|
|
"options": {
|
|
"ident": "embedded",
|
|
"plugins": postcssPlugins,
|
|
"sourceMap": true
|
|
}
|
|
},
|
|
{
|
|
"loader": "less-loader",
|
|
"options": {
|
|
"sourceMap": true
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"include": [
|
|
path.join(process.cwd(), "node_modules/bootstrap/dist/css/bootstrap.min.css"),
|
|
path.join(process.cwd(), "node_modules/nouislider/distribute/nouislider.min.css"),
|
|
path.join(process.cwd(), "src/styles.scss")
|
|
],
|
|
"test": /\.styl$/,
|
|
"use": [
|
|
"style-loader",
|
|
{
|
|
"loader": "raw-loader"
|
|
},
|
|
{
|
|
"loader": "postcss-loader",
|
|
"options": {
|
|
"ident": "embedded",
|
|
"plugins": postcssPlugins,
|
|
"sourceMap": true
|
|
}
|
|
},
|
|
{
|
|
"loader": "stylus-loader",
|
|
"options": {
|
|
"sourceMap": true,
|
|
"paths": []
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"test": /\.ts$/,
|
|
"loader": "@ngtools/webpack"
|
|
}
|
|
]
|
|
},
|
|
"plugins": [
|
|
new NoEmitOnErrorsPlugin(),
|
|
new ScriptsWebpackPlugin({
|
|
"name": "scripts",
|
|
"sourceMap": true,
|
|
"filename": "scripts.bundle.js",
|
|
"scripts": [
|
|
path.join(process.cwd(), "node_modules/bootstrap/dist/js/bootstrap.js"),
|
|
// path.join(process.cwd(), "node_modules/nouislider/distribute/nouislider.js")
|
|
],
|
|
"basePath": path.resolve(process.cwd())
|
|
}),
|
|
new CopyWebpackPlugin([
|
|
{
|
|
"context": "src",
|
|
"to": "",
|
|
"from": {
|
|
"glob": "assets/**/*",
|
|
"dot": true
|
|
}
|
|
},
|
|
{
|
|
"context": "src",
|
|
"to": "",
|
|
"from": {
|
|
"glob": "favicon.ico",
|
|
"dot": true
|
|
}
|
|
}
|
|
], {
|
|
"ignore": [
|
|
".gitkeep",
|
|
"**/.DS_Store",
|
|
"**/Thumbs.db"
|
|
],
|
|
"debug": "warning"
|
|
}),
|
|
new ProgressPlugin(),
|
|
new CircularDependencyPlugin({
|
|
"exclude": /(\\|\/)node_modules(\\|\/)/,
|
|
"failOnError": false,
|
|
"onDetected": false,
|
|
"cwd": projectRoot
|
|
}),
|
|
new NamedLazyChunksWebpackPlugin(),
|
|
new HtmlWebpackPlugin({
|
|
"template": "./src/index.html",
|
|
"filename": "./index.html",
|
|
"hash": false,
|
|
"inject": true,
|
|
"compile": true,
|
|
"favicon": false,
|
|
"minify": false,
|
|
"cache": true,
|
|
"showErrors": true,
|
|
"chunks": "all",
|
|
"excludeChunks": [],
|
|
"title": "Webpack App",
|
|
"xhtml": true,
|
|
"chunksSortMode": function sort(left, right) {
|
|
let leftIndex = entryPoints.indexOf(left.names[0]);
|
|
let rightIndex = entryPoints.indexOf(right.names[0]);
|
|
if (leftIndex > rightIndex) {
|
|
return 1;
|
|
}
|
|
else if (leftIndex < rightIndex) {
|
|
return -1;
|
|
}
|
|
else {
|
|
return 0;
|
|
}
|
|
}
|
|
}),
|
|
new BaseHrefWebpackPlugin({baseHref: ''}),
|
|
new CommonsChunkPlugin({
|
|
"name": [
|
|
"inline"
|
|
],
|
|
"minChunks": null
|
|
}),
|
|
new CommonsChunkPlugin({
|
|
"name": [
|
|
"vendor"
|
|
],
|
|
"minChunks": (module) => {
|
|
return module.resource
|
|
&& (module.resource.startsWith(nodeModules)
|
|
|| module.resource.startsWith(genDirNodeModules)
|
|
|| module.resource.startsWith(realNodeModules));
|
|
},
|
|
"chunks": [
|
|
"main"
|
|
]
|
|
}),
|
|
new SourceMapDevToolPlugin({
|
|
"filename": "[file].map[query]",
|
|
"moduleFilenameTemplate": "[resource-path]",
|
|
"fallbackModuleFilenameTemplate": "[resource-path]?[hash]",
|
|
"sourceRoot": "webpack:///"
|
|
}),
|
|
new CommonsChunkPlugin({
|
|
"name": [
|
|
"main"
|
|
],
|
|
"minChunks": 2,
|
|
"async": "common"
|
|
}),
|
|
new NamedModulesPlugin({}),
|
|
new AngularCompilerPlugin({
|
|
"mainPath": "main-web.ts",
|
|
"platform": 0,
|
|
"hostReplacementPaths": {
|
|
"environments/environment.ts": "environments/environment.ts"
|
|
},
|
|
"sourceMap": true,
|
|
"tsConfigPath": "src/tsconfig.app.json",
|
|
"skipCodeGeneration": true,
|
|
"compilerOptions": {}
|
|
})
|
|
],
|
|
"node": {
|
|
"fs": true,
|
|
"global": true,
|
|
"crypto": "empty",
|
|
"tls": "empty",
|
|
"net": "empty",
|
|
"process": true,
|
|
"module": false,
|
|
"clearImmediate": false,
|
|
"setImmediate": false
|
|
},
|
|
"devServer": {
|
|
"historyApiFallback": true
|
|
}
|
|
};
|