-
Notifications
You must be signed in to change notification settings - Fork 12
/
index.js
106 lines (96 loc) · 3.02 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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
const path = require("path");
const { copy } = require("copy-anything");
const { merge } = require("merge-anything");
const {
configurationBuilder,
stringifyConfiguration,
toTempFile
} = require("./eslintConfigurator");
const debug = require("debug")("crafty:preset-eslint");
const MODULES = path.join(__dirname, "..", "node_modules");
module.exports = {
presets: [require.resolve("@swissquote/crafty-preset-prettier")],
defaultConfig(config) {
return {
// ESLint Override Rules
eslint: {
extends: ["plugin:@swissquote/swissquote/recommended"],
plugins: ["@swissquote/swissquote"]
}
};
},
config(config) {
// Add eslint react version
const eslintConfig = { ...config.eslint };
let extendedEslintConfig = {
config: eslintConfig,
extensions: ["js", "jsx"]
};
// Apply overrides to clean up configuration
config.loadedPresets
.filter(preset => preset.eslint)
.forEach(preset => {
debug(`${preset.presetName}.eslint(config, eslint)`);
if (typeof preset.eslint == "function") {
extendedEslintConfig = preset.eslint(config, extendedEslintConfig);
} else {
extendedEslintConfig.config = copy(
merge(extendedEslintConfig.config, preset.eslint)
);
}
});
config.eslintExtensions = extendedEslintConfig.extensions;
config.eslint = extendedEslintConfig.config;
return config;
},
ide(crafty) {
global.craftyConfig = crafty.config;
return {
".eslintrc.js": {
content: configurationBuilder(process.argv).configuration,
serializer: stringifyConfiguration
}
};
},
commands() {
return {
jsLint: {
//eslint-disable-next-line no-unused-vars
command(crafty, input, cli) {
global.craftyConfig = crafty.config;
require("./commands/jsLint");
},
description: "Lint JavaScript for errors"
}
};
},
rollup(crafty, bundle, rollupConfig) {
// Add Eslint configuration
rollupConfig.input.plugins.eslint = {
plugin: require("@swissquote/rollup-plugin-eslint"),
weight: -20,
options: {
overrideConfigFile: toTempFile(crafty.config.eslint),
resolver: require.resolve("@swissquote/crafty-preset-eslint/src/resolver.js"),
throwOnError: crafty.getEnvironment() === "production",
exclude: [/node_modules/],
include: crafty.config.eslintExtensions.map(
extension => new RegExp(`\.${extension}$`)
)
}
};
},
webpack(crafty, bundle, chain) {
chain.resolve.extensions.add(".jsx");
chain.resolve.modules.add(MODULES);
chain.resolveLoader.modules.add(MODULES);
// JavaScript linting
chain.plugin("lint-js").use(require.resolve("eslint-webpack-plugin"), [
{
extensions: crafty.config.eslintExtensions,
overrideConfigFile: toTempFile(crafty.config.eslint),
resolver: require.resolve("@swissquote/crafty-preset-eslint/src/resolver.js")
}
]);
}
};