Skip to content

Commit

Permalink
perf: simplify node_modules RegExps (#2816)
Browse files Browse the repository at this point in the history
  • Loading branch information
chenjiahan committed Jul 5, 2024
1 parent 40d9f3f commit a78fde1
Show file tree
Hide file tree
Showing 23 changed files with 61 additions and 62 deletions.
2 changes: 1 addition & 1 deletion e2e/cases/server/ssr/rsbuild.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ export default defineConfig({
minSize: 0,
cacheGroups: {
'lib-react': {
test: /[\\/]node_modules[\\/](react|react-dom|scheduler|react-refresh|@rspack[\\/]plugin-react-refresh)[\\/]/,
test: /node_modules[\\/](react|react-dom|scheduler|react-refresh|@rspack[\\/]plugin-react-refresh)[\\/]/,
priority: 0,
name: 'lib-react',
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -248,12 +248,12 @@ exports[`applyDefaultPlugins > should apply default plugins correctly 1`] = `
"lib-axios": {
"name": "lib-axios",
"priority": 0,
"test": /\\[\\\\\\\\/\\]node_modules\\[\\\\\\\\/\\]axios\\(-\\.\\+\\)\\?\\[\\\\\\\\/\\]/,
"test": /node_modules\\[\\\\\\\\/\\]axios\\(-\\.\\+\\)\\?\\[\\\\\\\\/\\]/,
},
"lib-lodash": {
"name": "lib-lodash",
"priority": 0,
"test": /\\[\\\\\\\\/\\]node_modules\\[\\\\\\\\/\\]lodash\\(-es\\)\\?\\[\\\\\\\\/\\]/,
"test": /node_modules\\[\\\\\\\\/\\]lodash\\(-es\\)\\?\\[\\\\\\\\/\\]/,
},
},
"chunks": "all",
Expand Down Expand Up @@ -660,12 +660,12 @@ exports[`applyDefaultPlugins > should apply default plugins correctly when produ
"lib-axios": {
"name": "lib-axios",
"priority": 0,
"test": /\\[\\\\\\\\/\\]node_modules\\[\\\\\\\\/\\]axios\\(-\\.\\+\\)\\?\\[\\\\\\\\/\\]/,
"test": /node_modules\\[\\\\\\\\/\\]axios\\(-\\.\\+\\)\\?\\[\\\\\\\\/\\]/,
},
"lib-lodash": {
"name": "lib-lodash",
"priority": 0,
"test": /\\[\\\\\\\\/\\]node_modules\\[\\\\\\\\/\\]lodash\\(-es\\)\\?\\[\\\\\\\\/\\]/,
"test": /node_modules\\[\\\\\\\\/\\]lodash\\(-es\\)\\?\\[\\\\\\\\/\\]/,
},
},
"chunks": "all",
Expand Down
6 changes: 3 additions & 3 deletions packages/core/src/plugins/splitChunks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,13 +68,13 @@ function splitByExperience(ctx: SplitChunksContext): SplitChunks {
const experienceCacheGroup: CacheGroups = {};

const packageRegExps: Record<string, RegExp> = {
lodash: /[\\/]node_modules[\\/]lodash(-es)?[\\/]/,
axios: /[\\/]node_modules[\\/]axios(-.+)?[\\/]/,
lodash: /node_modules[\\/]lodash(-es)?[\\/]/,
axios: /node_modules[\\/]axios(-.+)?[\\/]/,
};

if (polyfill === 'entry' || polyfill === 'usage') {
packageRegExps.polyfill =
/[\\/]node_modules[\\/](?:tslib|core-js|@swc[\\/]helpers)[\\/]/;
/node_modules[\\/](?:tslib|core-js|@swc[\\/]helpers)[\\/]/;
}

for (const [name, test] of Object.entries(packageRegExps)) {
Expand Down
4 changes: 2 additions & 2 deletions packages/core/tests/__snapshots__/builder.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -298,12 +298,12 @@ exports[`should use rspack as default bundler > apply rspack correctly 1`] = `
"lib-axios": {
"name": "lib-axios",
"priority": 0,
"test": /\\[\\\\\\\\/\\]node_modules\\[\\\\\\\\/\\]axios\\(-\\.\\+\\)\\?\\[\\\\\\\\/\\]/,
"test": /node_modules\\[\\\\\\\\/\\]axios\\(-\\.\\+\\)\\?\\[\\\\\\\\/\\]/,
},
"lib-lodash": {
"name": "lib-lodash",
"priority": 0,
"test": /\\[\\\\\\\\/\\]node_modules\\[\\\\\\\\/\\]lodash\\(-es\\)\\?\\[\\\\\\\\/\\]/,
"test": /node_modules\\[\\\\\\\\/\\]lodash\\(-es\\)\\?\\[\\\\\\\\/\\]/,
},
},
"chunks": "all",
Expand Down
12 changes: 6 additions & 6 deletions packages/core/tests/__snapshots__/default.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -298,12 +298,12 @@ exports[`applyDefaultPlugins > should apply default plugins correctly 1`] = `
"lib-axios": {
"name": "lib-axios",
"priority": 0,
"test": /\\[\\\\\\\\/\\]node_modules\\[\\\\\\\\/\\]axios\\(-\\.\\+\\)\\?\\[\\\\\\\\/\\]/,
"test": /node_modules\\[\\\\\\\\/\\]axios\\(-\\.\\+\\)\\?\\[\\\\\\\\/\\]/,
},
"lib-lodash": {
"name": "lib-lodash",
"priority": 0,
"test": /\\[\\\\\\\\/\\]node_modules\\[\\\\\\\\/\\]lodash\\(-es\\)\\?\\[\\\\\\\\/\\]/,
"test": /node_modules\\[\\\\\\\\/\\]lodash\\(-es\\)\\?\\[\\\\\\\\/\\]/,
},
},
"chunks": "all",
Expand Down Expand Up @@ -759,12 +759,12 @@ exports[`applyDefaultPlugins > should apply default plugins correctly when prod
"lib-axios": {
"name": "lib-axios",
"priority": 0,
"test": /\\[\\\\\\\\/\\]node_modules\\[\\\\\\\\/\\]axios\\(-\\.\\+\\)\\?\\[\\\\\\\\/\\]/,
"test": /node_modules\\[\\\\\\\\/\\]axios\\(-\\.\\+\\)\\?\\[\\\\\\\\/\\]/,
},
"lib-lodash": {
"name": "lib-lodash",
"priority": 0,
"test": /\\[\\\\\\\\/\\]node_modules\\[\\\\\\\\/\\]lodash\\(-es\\)\\?\\[\\\\\\\\/\\]/,
"test": /node_modules\\[\\\\\\\\/\\]lodash\\(-es\\)\\?\\[\\\\\\\\/\\]/,
},
},
"chunks": "all",
Expand Down Expand Up @@ -1552,12 +1552,12 @@ exports[`tools.rspack > should match snapshot 1`] = `
"lib-axios": {
"name": "lib-axios",
"priority": 0,
"test": /\\[\\\\\\\\/\\]node_modules\\[\\\\\\\\/\\]axios\\(-\\.\\+\\)\\?\\[\\\\\\\\/\\]/,
"test": /node_modules\\[\\\\\\\\/\\]axios\\(-\\.\\+\\)\\?\\[\\\\\\\\/\\]/,
},
"lib-lodash": {
"name": "lib-lodash",
"priority": 0,
"test": /\\[\\\\\\\\/\\]node_modules\\[\\\\\\\\/\\]lodash\\(-es\\)\\?\\[\\\\\\\\/\\]/,
"test": /node_modules\\[\\\\\\\\/\\]lodash\\(-es\\)\\?\\[\\\\\\\\/\\]/,
},
},
"chunks": "all",
Expand Down
4 changes: 2 additions & 2 deletions packages/core/tests/__snapshots__/environments.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -1628,12 +1628,12 @@ exports[`environment config > tools.rspack / bundlerChain can be used in environ
"lib-axios": {
"name": "lib-axios",
"priority": 0,
"test": /\\[\\\\\\\\/\\]node_modules\\[\\\\\\\\/\\]axios\\(-\\.\\+\\)\\?\\[\\\\\\\\/\\]/,
"test": /node_modules\\[\\\\\\\\/\\]axios\\(-\\.\\+\\)\\?\\[\\\\\\\\/\\]/,
},
"lib-lodash": {
"name": "lib-lodash",
"priority": 0,
"test": /\\[\\\\\\\\/\\]node_modules\\[\\\\\\\\/\\]lodash\\(-es\\)\\?\\[\\\\\\\\/\\]/,
"test": /node_modules\\[\\\\\\\\/\\]lodash\\(-es\\)\\?\\[\\\\\\\\/\\]/,
},
},
"chunks": "all",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,12 @@ exports[`plugin-module-federation > should set environment module federation con
"lib-axios": {
"name": "lib-axios",
"priority": 0,
"test": /\\[\\\\\\\\/\\]node_modules\\[\\\\\\\\/\\]axios\\(-\\.\\+\\)\\?\\[\\\\\\\\/\\]/,
"test": /node_modules\\[\\\\\\\\/\\]axios\\(-\\.\\+\\)\\?\\[\\\\\\\\/\\]/,
},
"lib-lodash": {
"name": "lib-lodash",
"priority": 0,
"test": /\\[\\\\\\\\/\\]node_modules\\[\\\\\\\\/\\]lodash\\(-es\\)\\?\\[\\\\\\\\/\\]/,
"test": /node_modules\\[\\\\\\\\/\\]lodash\\(-es\\)\\?\\[\\\\\\\\/\\]/,
},
},
"chunks": "all",
Expand Down
10 changes: 5 additions & 5 deletions packages/core/tests/__snapshots__/splitChunks.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -98,17 +98,17 @@ exports[`plugin-split-chunks > should set split-by-experience config 1`] = `
"lib-axios": {
"name": "lib-axios",
"priority": 0,
"test": /\\[\\\\\\\\/\\]node_modules\\[\\\\\\\\/\\]axios\\(-\\.\\+\\)\\?\\[\\\\\\\\/\\]/,
"test": /node_modules\\[\\\\\\\\/\\]axios\\(-\\.\\+\\)\\?\\[\\\\\\\\/\\]/,
},
"lib-lodash": {
"name": "lib-lodash",
"priority": 0,
"test": /\\[\\\\\\\\/\\]node_modules\\[\\\\\\\\/\\]lodash\\(-es\\)\\?\\[\\\\\\\\/\\]/,
"test": /node_modules\\[\\\\\\\\/\\]lodash\\(-es\\)\\?\\[\\\\\\\\/\\]/,
},
"lib-polyfill": {
"name": "lib-polyfill",
"priority": 0,
"test": /\\[\\\\\\\\/\\]node_modules\\[\\\\\\\\/\\]\\(\\?:tslib\\|core-js\\|@swc\\[\\\\\\\\/\\]helpers\\)\\[\\\\\\\\/\\]/,
"test": /node_modules\\[\\\\\\\\/\\]\\(\\?:tslib\\|core-js\\|@swc\\[\\\\\\\\/\\]helpers\\)\\[\\\\\\\\/\\]/,
},
},
"chunks": "all",
Expand All @@ -126,12 +126,12 @@ exports[`plugin-split-chunks > should set split-by-experience config correctly w
"lib-axios": {
"name": "lib-axios",
"priority": 0,
"test": /\\[\\\\\\\\/\\]node_modules\\[\\\\\\\\/\\]axios\\(-\\.\\+\\)\\?\\[\\\\\\\\/\\]/,
"test": /node_modules\\[\\\\\\\\/\\]axios\\(-\\.\\+\\)\\?\\[\\\\\\\\/\\]/,
},
"lib-lodash": {
"name": "lib-lodash",
"priority": 0,
"test": /\\[\\\\\\\\/\\]node_modules\\[\\\\\\\\/\\]lodash\\(-es\\)\\?\\[\\\\\\\\/\\]/,
"test": /node_modules\\[\\\\\\\\/\\]lodash\\(-es\\)\\?\\[\\\\\\\\/\\]/,
},
},
"chunks": "all",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ exports[`plugins/babel > babel-loader should works with builtin:swc-loader 1`] =
],
},
/\\\\\\.\\(\\?:ts\\|tsx\\|jsx\\|mts\\|cts\\)\\$/,
/\\[\\\\\\\\/\\]node_modules\\[\\\\\\\\/\\]query-string\\[\\\\\\\\/\\]/,
/node_modules\\[\\\\\\\\/\\]query-string\\[\\\\\\\\/\\]/,
],
"test": /\\\\\\.\\(\\?:js\\|jsx\\|mjs\\|cjs\\|ts\\|tsx\\|mts\\|cts\\)\\$/,
"type": "javascript/auto",
Expand Down
2 changes: 1 addition & 1 deletion packages/plugin-babel/tests/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ describe('plugins/babel', () => {
const rsbuild = await createStubRsbuild({
rsbuildConfig: {
source: {
include: [/[\\/]node_modules[\\/]query-string[\\/]/],
include: [/node_modules[\\/]query-string[\\/]/],
exclude: ['src/example'],
},
performance: {
Expand Down
9 changes: 4 additions & 5 deletions packages/plugin-react/src/splitChunks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ export const applySplitChunksRule = (
router: true,
},
): void => {
api.modifyBundlerChain((chain, { environment }) => {
api.modifyBundlerChain((chain, { environment, isProd }) => {
const { config } = environment;
if (config.performance.chunkSplit.strategy !== 'split-by-experience') {
return;
Expand All @@ -27,20 +27,19 @@ export const applySplitChunksRule = (
const extraGroups: CacheGroups = {};

if (options.react) {
const isProd = process.env.NODE_ENV === 'production';
extraGroups.react = {
name: 'lib-react',
test: isProd
? /[\\/]node_modules[\\/](?:react|react-dom|scheduler)[\\/]/
: /[\\/]node_modules[\\/](?:react|react-dom|scheduler|react-refresh|@rspack[\\/]plugin-react-refresh)[\\/]/,
? /node_modules[\\/](?:react|react-dom|scheduler)[\\/]/
: /node_modules[\\/](?:react|react-dom|scheduler|react-refresh|@rspack[\\/]plugin-react-refresh)[\\/]/,
priority: 0,
};
}

if (options.router) {
extraGroups.router = {
name: 'lib-router',
test: /[\\/]node_modules[\\/](?:react-router|react-router-dom|history|@remix-run[\\/]router)[\\/]/,
test: /node_modules[\\/](?:react-router|react-router-dom|history|@remix-run[\\/]router)[\\/]/,
priority: 0,
};
}
Expand Down
12 changes: 6 additions & 6 deletions packages/plugin-react/tests/__snapshots__/features.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,22 @@ exports[`splitChunks > should apply antd/semi/... splitChunks rule when pkg is i
"lib-axios": {
"name": "lib-axios",
"priority": 0,
"test": /\\[\\\\\\\\/\\]node_modules\\[\\\\\\\\/\\]axios\\(-\\.\\+\\)\\?\\[\\\\\\\\/\\]/,
"test": /node_modules\\[\\\\\\\\/\\]axios\\(-\\.\\+\\)\\?\\[\\\\\\\\/\\]/,
},
"lib-lodash": {
"name": "lib-lodash",
"priority": 0,
"test": /\\[\\\\\\\\/\\]node_modules\\[\\\\\\\\/\\]lodash\\(-es\\)\\?\\[\\\\\\\\/\\]/,
"test": /node_modules\\[\\\\\\\\/\\]lodash\\(-es\\)\\?\\[\\\\\\\\/\\]/,
},
"react": {
"name": "lib-react",
"priority": 0,
"test": /\\[\\\\\\\\/\\]node_modules\\[\\\\\\\\/\\]\\(\\?:react\\|react-dom\\|scheduler\\|react-refresh\\|@rspack\\[\\\\\\\\/\\]plugin-react-refresh\\)\\[\\\\\\\\/\\]/,
"test": /node_modules\\[\\\\\\\\/\\]\\(\\?:react\\|react-dom\\|scheduler\\|react-refresh\\|@rspack\\[\\\\\\\\/\\]plugin-react-refresh\\)\\[\\\\\\\\/\\]/,
},
"router": {
"name": "lib-router",
"priority": 0,
"test": /\\[\\\\\\\\/\\]node_modules\\[\\\\\\\\/\\]\\(\\?:react-router\\|react-router-dom\\|history\\|@remix-run\\[\\\\\\\\/\\]router\\)\\[\\\\\\\\/\\]/,
"test": /node_modules\\[\\\\\\\\/\\]\\(\\?:react-router\\|react-router-dom\\|history\\|@remix-run\\[\\\\\\\\/\\]router\\)\\[\\\\\\\\/\\]/,
},
},
"chunks": "all",
Expand All @@ -35,12 +35,12 @@ exports[`splitChunks > should apply splitChunks.react/router plugin option when
"lib-axios": {
"name": "lib-axios",
"priority": 0,
"test": /\\[\\\\\\\\/\\]node_modules\\[\\\\\\\\/\\]axios\\(-\\.\\+\\)\\?\\[\\\\\\\\/\\]/,
"test": /node_modules\\[\\\\\\\\/\\]axios\\(-\\.\\+\\)\\?\\[\\\\\\\\/\\]/,
},
"lib-lodash": {
"name": "lib-lodash",
"priority": 0,
"test": /\\[\\\\\\\\/\\]node_modules\\[\\\\\\\\/\\]lodash\\(-es\\)\\?\\[\\\\\\\\/\\]/,
"test": /node_modules\\[\\\\\\\\/\\]lodash\\(-es\\)\\?\\[\\\\\\\\/\\]/,
},
},
"chunks": "all",
Expand Down
8 changes: 4 additions & 4 deletions packages/plugin-react/tests/__snapshots__/index.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -324,22 +324,22 @@ exports[`plugins/react > should work with swc-loader 1`] = `
"lib-axios": {
"name": "lib-axios",
"priority": 0,
"test": /\\[\\\\\\\\/\\]node_modules\\[\\\\\\\\/\\]axios\\(-\\.\\+\\)\\?\\[\\\\\\\\/\\]/,
"test": /node_modules\\[\\\\\\\\/\\]axios\\(-\\.\\+\\)\\?\\[\\\\\\\\/\\]/,
},
"lib-lodash": {
"name": "lib-lodash",
"priority": 0,
"test": /\\[\\\\\\\\/\\]node_modules\\[\\\\\\\\/\\]lodash\\(-es\\)\\?\\[\\\\\\\\/\\]/,
"test": /node_modules\\[\\\\\\\\/\\]lodash\\(-es\\)\\?\\[\\\\\\\\/\\]/,
},
"react": {
"name": "lib-react",
"priority": 0,
"test": /\\[\\\\\\\\/\\]node_modules\\[\\\\\\\\/\\]\\(\\?:react\\|react-dom\\|scheduler\\|react-refresh\\|@rspack\\[\\\\\\\\/\\]plugin-react-refresh\\)\\[\\\\\\\\/\\]/,
"test": /node_modules\\[\\\\\\\\/\\]\\(\\?:react\\|react-dom\\|scheduler\\|react-refresh\\|@rspack\\[\\\\\\\\/\\]plugin-react-refresh\\)\\[\\\\\\\\/\\]/,
},
"router": {
"name": "lib-router",
"priority": 0,
"test": /\\[\\\\\\\\/\\]node_modules\\[\\\\\\\\/\\]\\(\\?:react-router\\|react-router-dom\\|history\\|@remix-run\\[\\\\\\\\/\\]router\\)\\[\\\\\\\\/\\]/,
"test": /node_modules\\[\\\\\\\\/\\]\\(\\?:react-router\\|react-router-dom\\|history\\|@remix-run\\[\\\\\\\\/\\]router\\)\\[\\\\\\\\/\\]/,
},
},
"chunks": "all",
Expand Down
4 changes: 2 additions & 2 deletions packages/plugin-vue/src/splitChunks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,15 +29,15 @@ export const applySplitChunksRule = (
if (options.vue) {
extraGroups.vue = {
name: 'lib-vue',
test: /[\\/]node_modules[\\/](?:vue|vue-loader|@vue[\\/]shared|@vue[\\/]reactivity|@vue[\\/]runtime-dom|@vue[\\/]runtime-core)[\\/]/,
test: /node_modules[\\/](?:vue|vue-loader|@vue[\\/]shared|@vue[\\/]reactivity|@vue[\\/]runtime-dom|@vue[\\/]runtime-core)[\\/]/,
priority: 0,
};
}

if (options.router) {
extraGroups.router = {
name: 'lib-router',
test: /[\\/]node_modules[\\/]vue-router[\\/]/,
test: /node_modules[\\/]vue-router[\\/]/,
priority: 0,
};
}
Expand Down
4 changes: 2 additions & 2 deletions packages/plugin-vue2/src/splitChunks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,15 +29,15 @@ export const applySplitChunksRule = (
if (options.router) {
extraGroups.vue = {
name: 'lib-vue',
test: /[\\/]node_modules[\\/](?:vue|vue-loader)[\\/]/,
test: /node_modules[\\/](?:vue|vue-loader)[\\/]/,
priority: 0,
};
}

if (options.router) {
extraGroups.router = {
name: 'lib-router',
test: /[\\/]node_modules[\\/]vue-router[\\/]/,
test: /node_modules[\\/]vue-router[\\/]/,
priority: 0,
};
}
Expand Down
4 changes: 2 additions & 2 deletions website/docs/en/config/performance/chunk-split.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ export default {
splitChunks: {
cacheGroups: {
react: {
test: /[\\/]node_modules[\\/](react|react-dom)[\\/]/,
test: /node_modules[\\/](react|react-dom)[\\/]/,
name: 'react',
chunks: 'all',
},
Expand All @@ -161,7 +161,7 @@ export default {
override: {
cacheGroups: {
react: {
test: /[\\/]node_modules[\\/](react|react-dom)[\\/]/,
test: /node_modules[\\/](react|react-dom)[\\/]/,
name: 'react',
chunks: 'all',
},
Expand Down
8 changes: 4 additions & 4 deletions website/docs/en/config/source/include.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,8 @@ export default {
path.dirname(require.resolve('query-string')),
// Method 2:
// Match by regular expression
// All paths containing `/node_modules/query-string/` will be matched
/[\\/]node_modules[\\/]query-string[\\/]/,
// All paths containing `node_modules/query-string/` will be matched
/node_modules[\\/]query-string[\\/]/,
],
},
};
Expand All @@ -75,8 +75,8 @@ Take `query-string` for example, it depends on the `decode-uri-component` packag
export default {
source: {
include: [
/[\\/]node_modules[\\/]query-string[\\/]/,
/[\\/]node_modules[\\/]decode-uri-component[\\/]/,
/node_modules[\\/]query-string[\\/]/,
/node_modules[\\/]decode-uri-component[\\/]/,
],
},
};
Expand Down
2 changes: 1 addition & 1 deletion website/docs/en/config/source/transform-import.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ If you want to process the code in node_modules through `transformImport`, pleas
```ts
export default {
source: {
include: [/[\\/]node_modules[\\/]some-package[\\/]/],
include: [/node_modules[\\/]some-package[\\/]/],
},
};
```
Expand Down
2 changes: 1 addition & 1 deletion website/docs/en/guide/advanced/browser-compatibility.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ import path from 'node:path';

export default {
source: {
include: [/[\\/]node_modules[\\/]query-string[\\/]/],
include: [/node_modules[\\/]query-string[\\/]/],
},
};
```
Expand Down
Loading

0 comments on commit a78fde1

Please sign in to comment.