UNPKG

2.91 kBJavaScriptView Raw
1const path = require('path');
2
3const componentsPath = [path.join(__dirname, 'components')];
4
5function resolveLoader(loader) {
6 return require.resolve(`${loader}-loader`);
7}
8
9function loadersObjectToArray(loaders) {
10 return Object.keys(loaders).map(name => loaders[name]);
11}
12
13const svgInlineLoader = {
14 test: /\.svg$/,
15 loader: resolveLoader('svg-inline'),
16 options: {removeSVGTagAttrs: false},
17 include: [require('@jetbrains/icons')]
18};
19
20const svgSpriteLoaderBackwardCompatibilityHack = {
21 get include() {
22 throw new Error(`
23***
24 ERROR: Ring UI svgSpriteLoader is REMOVED in 2.0.0. Looks like your webpack config is patching it.
25 The most simple fix is to replace "svgSpriteLoader.include.push(...)" with "svgInlineLoader.include.push(...)"
26 Please consider using your own "svg-inline-loader". More details: https://youtrack.jetbrains.com/issue/RG-1646
27***
28 `);
29 }
30};
31
32const svgLoader = {
33 test: /\.svg$/,
34 loader: `${resolveLoader('url')}?limit=10000`,
35 include: componentsPath
36};
37
38const scssLoader = {
39 test: /\.scss$/,
40 include: componentsPath,
41 use: [
42 resolveLoader('style'),
43 resolveLoader('css'),
44 {
45 loader: resolveLoader('postcss')
46 },
47 {
48 loader: `${resolveLoader('sass')}?outputStyle=expanded`,
49 options: {
50 implementation: require('sass') // Dart implementation of SASS compiler
51 }
52 }
53 ]
54};
55
56const cssLoader = {
57 test: /\.css$/,
58 include: componentsPath,
59 use: [
60 resolveLoader('style'),
61 {
62 loader: resolveLoader('css'),
63 options: {
64 modules: true,
65 importLoaders: 1,
66 localIdentName: '[local]_[hash:3]'
67 }
68 },
69 {
70 loader: resolveLoader('postcss')
71 }
72 ]
73};
74
75const externalCssLoader = {
76 test: /\.css$/,
77 include: [
78 path.dirname(require.resolve('highlight.js/package.json'))
79 ],
80 use: [
81 resolveLoader('style'),
82 resolveLoader('css')
83 ]
84};
85
86const babelLoader = {
87 test: /\.js$/,
88 include: componentsPath,
89 loader: `${resolveLoader('babel')}?${JSON.stringify({
90 configFile: path.join(__dirname, '.babelrc'),
91 cacheDirectory: true
92 })}`
93};
94
95const whatwgLoader = {
96 test: require.resolve('whatwg-fetch'),
97 loader: resolveLoader('imports')
98};
99
100const htmlLoader = {
101 test: /-ng(\\|\/)\S*(-ng|-ng__)\S*\.html$/,
102 include: componentsPath,
103 loader: resolveLoader('html'),
104 query: {
105 collapseBooleanAttributes: false
106 }
107};
108
109const gifLoader = {
110 test: /\.gif$/,
111 include: componentsPath,
112 loader: resolveLoader('url')
113};
114
115const loaders = {
116 svgInlineLoader,
117 svgLoader,
118 cssLoader,
119 externalCssLoader,
120 scssLoader,
121 babelLoader,
122 whatwgLoader,
123 htmlLoader,
124 gifLoader
125};
126
127// Minimal config for building components
128module.exports = {
129 config: {
130 module: {
131 rules: loadersObjectToArray(loaders)
132 }
133 },
134
135 componentsPath,
136
137 loaders: {
138 ...loaders,
139 svgSpriteLoader: svgSpriteLoaderBackwardCompatibilityHack
140 }
141};