mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-09-11 19:39:43 +02:00
Merge pull request #4734 from mermaid-js/sidv/tinyMermaid
Add `mermaid.tiny.min.js`. 69.7% size reduction.
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
import { build } from 'esbuild';
|
import { build } from 'esbuild';
|
||||||
import { mkdir, writeFile } from 'node:fs/promises';
|
import { mkdir, readFile, rename, writeFile } from 'node:fs/promises';
|
||||||
import { packageOptions } from '../.build/common.js';
|
import { packageOptions } from '../.build/common.js';
|
||||||
import { generateLangium } from '../.build/generateLangium.js';
|
import { generateLangium } from '../.build/generateLangium.js';
|
||||||
import type { MermaidBuildOptions } from './util.js';
|
import type { MermaidBuildOptions } from './util.js';
|
||||||
@@ -31,7 +31,15 @@ const buildPackage = async (entryName: keyof typeof packageOptions) => {
|
|||||||
// mermaid.js
|
// mermaid.js
|
||||||
{ ...iifeOptions },
|
{ ...iifeOptions },
|
||||||
// mermaid.min.js
|
// mermaid.min.js
|
||||||
{ ...iifeOptions, minify: true, metafile: shouldVisualize }
|
{ ...iifeOptions, minify: true, metafile: shouldVisualize },
|
||||||
|
// mermaid.tiny.min.js
|
||||||
|
{
|
||||||
|
...iifeOptions,
|
||||||
|
minify: true,
|
||||||
|
includeLargeFeatures: false,
|
||||||
|
metafile: shouldVisualize,
|
||||||
|
sourcemap: false,
|
||||||
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (entryName === 'mermaid-zenuml') {
|
if (entryName === 'mermaid-zenuml') {
|
||||||
@@ -70,6 +78,20 @@ const handler = (e) => {
|
|||||||
process.exit(1);
|
process.exit(1);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const buildTinyMermaid = async () => {
|
||||||
|
await mkdir('./packages/tiny/dist', { recursive: true });
|
||||||
|
await rename(
|
||||||
|
'./packages/mermaid/dist/mermaid.tiny.min.js',
|
||||||
|
'./packages/tiny/dist/mermaid.tiny.js'
|
||||||
|
);
|
||||||
|
// Copy version from mermaid's package.json to tiny's package.json
|
||||||
|
const mermaidPkg = JSON.parse(await readFile('./packages/mermaid/package.json', 'utf8'));
|
||||||
|
const tinyPkg = JSON.parse(await readFile('./packages/tiny/package.json', 'utf8'));
|
||||||
|
tinyPkg.version = mermaidPkg.version;
|
||||||
|
|
||||||
|
await writeFile('./packages/tiny/package.json', JSON.stringify(tinyPkg, null, 2) + '\n');
|
||||||
|
};
|
||||||
|
|
||||||
const main = async () => {
|
const main = async () => {
|
||||||
await generateLangium();
|
await generateLangium();
|
||||||
await mkdir('stats', { recursive: true });
|
await mkdir('stats', { recursive: true });
|
||||||
@@ -78,6 +100,7 @@ const main = async () => {
|
|||||||
for (const pkg of packageNames) {
|
for (const pkg of packageNames) {
|
||||||
await buildPackage(pkg).catch(handler);
|
await buildPackage(pkg).catch(handler);
|
||||||
}
|
}
|
||||||
|
await buildTinyMermaid();
|
||||||
};
|
};
|
||||||
|
|
||||||
void main();
|
void main();
|
||||||
|
@@ -14,6 +14,7 @@ export interface MermaidBuildOptions extends BuildOptions {
|
|||||||
metafile: boolean;
|
metafile: boolean;
|
||||||
format: 'esm' | 'iife';
|
format: 'esm' | 'iife';
|
||||||
options: PackageOptions;
|
options: PackageOptions;
|
||||||
|
includeLargeFeatures: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const defaultOptions: Omit<MermaidBuildOptions, 'entryName' | 'options'> = {
|
export const defaultOptions: Omit<MermaidBuildOptions, 'entryName' | 'options'> = {
|
||||||
@@ -21,6 +22,7 @@ export const defaultOptions: Omit<MermaidBuildOptions, 'entryName' | 'options'>
|
|||||||
metafile: false,
|
metafile: false,
|
||||||
core: false,
|
core: false,
|
||||||
format: 'esm',
|
format: 'esm',
|
||||||
|
includeLargeFeatures: true,
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
const buildOptions = (override: BuildOptions): BuildOptions => {
|
const buildOptions = (override: BuildOptions): BuildOptions => {
|
||||||
@@ -39,12 +41,18 @@ const buildOptions = (override: BuildOptions): BuildOptions => {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
const getFileName = (fileName: string, { core, format, minify }: MermaidBuildOptions) => {
|
const getFileName = (
|
||||||
|
fileName: string,
|
||||||
|
{ core, format, minify, includeLargeFeatures }: MermaidBuildOptions
|
||||||
|
) => {
|
||||||
if (core) {
|
if (core) {
|
||||||
fileName += '.core';
|
fileName += '.core';
|
||||||
} else if (format === 'esm') {
|
} else if (format === 'esm') {
|
||||||
fileName += '.esm';
|
fileName += '.esm';
|
||||||
}
|
}
|
||||||
|
if (!includeLargeFeatures) {
|
||||||
|
fileName += '.tiny';
|
||||||
|
}
|
||||||
if (minify) {
|
if (minify) {
|
||||||
fileName += '.min';
|
fileName += '.min';
|
||||||
}
|
}
|
||||||
@@ -54,25 +62,27 @@ const getFileName = (fileName: string, { core, format, minify }: MermaidBuildOpt
|
|||||||
export const getBuildConfig = (options: MermaidBuildOptions): BuildOptions => {
|
export const getBuildConfig = (options: MermaidBuildOptions): BuildOptions => {
|
||||||
const {
|
const {
|
||||||
core,
|
core,
|
||||||
metafile,
|
|
||||||
format,
|
format,
|
||||||
minify,
|
|
||||||
options: { name, file, packageName },
|
options: { name, file, packageName },
|
||||||
globalName = 'mermaid',
|
globalName = 'mermaid',
|
||||||
|
includeLargeFeatures,
|
||||||
|
...rest
|
||||||
} = options;
|
} = options;
|
||||||
|
|
||||||
const external: string[] = ['require', 'fs', 'path'];
|
const external: string[] = ['require', 'fs', 'path'];
|
||||||
const outFileName = getFileName(name, options);
|
const outFileName = getFileName(name, options);
|
||||||
const output: BuildOptions = buildOptions({
|
const output: BuildOptions = buildOptions({
|
||||||
|
...rest,
|
||||||
absWorkingDir: resolve(__dirname, `../packages/${packageName}`),
|
absWorkingDir: resolve(__dirname, `../packages/${packageName}`),
|
||||||
entryPoints: {
|
entryPoints: {
|
||||||
[outFileName]: `src/${file}`,
|
[outFileName]: `src/${file}`,
|
||||||
},
|
},
|
||||||
metafile,
|
|
||||||
minify,
|
|
||||||
globalName,
|
globalName,
|
||||||
logLevel: 'info',
|
logLevel: 'info',
|
||||||
chunkNames: `chunks/${outFileName}/[name]-[hash]`,
|
chunkNames: `chunks/${outFileName}/[name]-[hash]`,
|
||||||
define: {
|
define: {
|
||||||
|
// This needs to be stringified for esbuild
|
||||||
|
includeLargeFeatures: `${includeLargeFeatures}`,
|
||||||
'import.meta.vitest': 'undefined',
|
'import.meta.vitest': 'undefined',
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
@@ -94,6 +94,10 @@ export const getBuildConfig = ({ minify, core, watch, entryName }: BuildOptions)
|
|||||||
}),
|
}),
|
||||||
...visualizerOptions(packageName, core),
|
...visualizerOptions(packageName, core),
|
||||||
],
|
],
|
||||||
|
define: {
|
||||||
|
// Needs to be string
|
||||||
|
includeLargeFeatures: 'true',
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
if (watch && config.build) {
|
if (watch && config.build) {
|
||||||
|
@@ -98,6 +98,12 @@ Mermaid can load multiple diagrams, in the same page.
|
|||||||
> Try it out, save this code as HTML and load it using any browser.
|
> Try it out, save this code as HTML and load it using any browser.
|
||||||
> (Except Internet Explorer, please don't use Internet Explorer.)
|
> (Except Internet Explorer, please don't use Internet Explorer.)
|
||||||
|
|
||||||
|
## Tiny Mermaid
|
||||||
|
|
||||||
|
We offer a smaller version of Mermaid that's approximately half the size of the full library. This tiny version doesn't support Mindmap Diagrams, Architecture Diagrams, KaTeX rendering, or lazy loading.
|
||||||
|
|
||||||
|
If you need a more lightweight version without these features, you can use [Mermaid Tiny](https://github.com/mermaid-js/mermaid/tree/develop/packages/tiny).
|
||||||
|
|
||||||
## Enabling Click Event and Tags in Nodes
|
## Enabling Click Event and Tags in Nodes
|
||||||
|
|
||||||
A `securityLevel` configuration has to first be cleared. `securityLevel` sets the level of trust for the parsed diagrams and limits click functionality. This was introduced in version 8.2 as a security improvement, aimed at preventing malicious use.
|
A `securityLevel` configuration has to first be cleared. `securityLevel` sets the level of trust for the parsed diagrams and limits click functionality. This was introduced in version 8.2 as a security improvement, aimed at preventing malicious use.
|
||||||
|
@@ -354,6 +354,7 @@ To Deploy Mermaid:
|
|||||||
|
|
||||||
- [Mermaid Live Editor](https://github.com/mermaid-js/mermaid-live-editor)
|
- [Mermaid Live Editor](https://github.com/mermaid-js/mermaid-live-editor)
|
||||||
- [Mermaid CLI](https://github.com/mermaid-js/mermaid-cli)
|
- [Mermaid CLI](https://github.com/mermaid-js/mermaid-cli)
|
||||||
|
- [Mermaid Tiny](https://github.com/mermaid-js/mermaid/tree/develop/packages/tiny)
|
||||||
- [Mermaid Webpack Demo](https://github.com/mermaidjs/mermaid-webpack-demo)
|
- [Mermaid Webpack Demo](https://github.com/mermaidjs/mermaid-webpack-demo)
|
||||||
- [Mermaid Parcel Demo](https://github.com/mermaidjs/mermaid-parcel-demo)
|
- [Mermaid Parcel Demo](https://github.com/mermaidjs/mermaid-parcel-demo)
|
||||||
|
|
||||||
|
@@ -27,6 +27,7 @@ import block from '../diagrams/block/blockDetector.js';
|
|||||||
import architecture from '../diagrams/architecture/architectureDetector.js';
|
import architecture from '../diagrams/architecture/architectureDetector.js';
|
||||||
import { registerLazyLoadedDiagrams } from './detectType.js';
|
import { registerLazyLoadedDiagrams } from './detectType.js';
|
||||||
import { registerDiagram } from './diagramAPI.js';
|
import { registerDiagram } from './diagramAPI.js';
|
||||||
|
import '../type.d.ts';
|
||||||
|
|
||||||
let hasLoadedDiagrams = false;
|
let hasLoadedDiagrams = false;
|
||||||
export const addDiagrams = () => {
|
export const addDiagrams = () => {
|
||||||
@@ -69,6 +70,11 @@ export const addDiagrams = () => {
|
|||||||
return text.toLowerCase().trimStart().startsWith('---');
|
return text.toLowerCase().trimStart().startsWith('---');
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if (includeLargeFeatures) {
|
||||||
|
registerLazyLoadedDiagrams(flowchartElk, mindmap, architecture);
|
||||||
|
}
|
||||||
|
|
||||||
// Ordering of detectors is important. The first one to return true will be used.
|
// Ordering of detectors is important. The first one to return true will be used.
|
||||||
registerLazyLoadedDiagrams(
|
registerLazyLoadedDiagrams(
|
||||||
c4,
|
c4,
|
||||||
@@ -81,10 +87,8 @@ export const addDiagrams = () => {
|
|||||||
pie,
|
pie,
|
||||||
requirement,
|
requirement,
|
||||||
sequence,
|
sequence,
|
||||||
flowchartElk,
|
|
||||||
flowchartV2,
|
flowchartV2,
|
||||||
flowchart,
|
flowchart,
|
||||||
mindmap,
|
|
||||||
timeline,
|
timeline,
|
||||||
git,
|
git,
|
||||||
stateV2,
|
stateV2,
|
||||||
@@ -95,7 +99,6 @@ export const addDiagrams = () => {
|
|||||||
packet,
|
packet,
|
||||||
xychart,
|
xychart,
|
||||||
block,
|
block,
|
||||||
architecture,
|
|
||||||
radar
|
radar
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@@ -341,29 +341,36 @@ export const renderKatex = async (text: string, config: MermaidConfig): Promise<
|
|||||||
return text.replace(katexRegex, 'MathML is unsupported in this environment.');
|
return text.replace(katexRegex, 'MathML is unsupported in this environment.');
|
||||||
}
|
}
|
||||||
|
|
||||||
const { default: katex } = await import('katex');
|
if (includeLargeFeatures) {
|
||||||
const outputMode =
|
const { default: katex } = await import('katex');
|
||||||
config.forceLegacyMathML || (!isMathMLSupported() && config.legacyMathML)
|
const outputMode =
|
||||||
? 'htmlAndMathml'
|
config.forceLegacyMathML || (!isMathMLSupported() && config.legacyMathML)
|
||||||
: 'mathml';
|
? 'htmlAndMathml'
|
||||||
return text
|
: 'mathml';
|
||||||
.split(lineBreakRegex)
|
return text
|
||||||
.map((line) =>
|
.split(lineBreakRegex)
|
||||||
hasKatex(line)
|
.map((line) =>
|
||||||
? `<div style="display: flex; align-items: center; justify-content: center; white-space: nowrap;">${line}</div>`
|
hasKatex(line)
|
||||||
: `<div>${line}</div>`
|
? `<div style="display: flex; align-items: center; justify-content: center; white-space: nowrap;">${line}</div>`
|
||||||
)
|
: `<div>${line}</div>`
|
||||||
.join('')
|
)
|
||||||
.replace(katexRegex, (_, c) =>
|
.join('')
|
||||||
katex
|
.replace(katexRegex, (_, c) =>
|
||||||
.renderToString(c, {
|
katex
|
||||||
throwOnError: true,
|
.renderToString(c, {
|
||||||
displayMode: true,
|
throwOnError: true,
|
||||||
output: outputMode,
|
displayMode: true,
|
||||||
})
|
output: outputMode,
|
||||||
.replace(/\n/g, ' ')
|
})
|
||||||
.replace(/<annotation.*<\/annotation>/g, '')
|
.replace(/\n/g, ' ')
|
||||||
);
|
.replace(/<annotation.*<\/annotation>/g, '')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return text.replace(
|
||||||
|
katexRegex,
|
||||||
|
'Katex is not supported in @mermaid-js/tiny. Please use the full mermaid library.'
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
@@ -1,7 +1,9 @@
|
|||||||
import type { InfoFields, InfoDB } from './infoTypes.js';
|
import type { InfoFields, InfoDB } from './infoTypes.js';
|
||||||
import packageJson from '../../../package.json' assert { type: 'json' };
|
import packageJson from '../../../package.json' assert { type: 'json' };
|
||||||
|
|
||||||
export const DEFAULT_INFO_DB: InfoFields = { version: packageJson.version } as const;
|
export const DEFAULT_INFO_DB: InfoFields = {
|
||||||
|
version: packageJson.version + (includeLargeFeatures ? '' : '-tiny'),
|
||||||
|
} as const;
|
||||||
|
|
||||||
export const getVersion = (): string => DEFAULT_INFO_DB.version;
|
export const getVersion = (): string => DEFAULT_INFO_DB.version;
|
||||||
|
|
||||||
|
@@ -92,6 +92,12 @@ Mermaid can load multiple diagrams, in the same page.
|
|||||||
> Try it out, save this code as HTML and load it using any browser.
|
> Try it out, save this code as HTML and load it using any browser.
|
||||||
> (Except Internet Explorer, please don't use Internet Explorer.)
|
> (Except Internet Explorer, please don't use Internet Explorer.)
|
||||||
|
|
||||||
|
## Tiny Mermaid
|
||||||
|
|
||||||
|
We offer a smaller version of Mermaid that's approximately half the size of the full library. This tiny version doesn't support Mindmap Diagrams, Architecture Diagrams, KaTeX rendering, or lazy loading.
|
||||||
|
|
||||||
|
If you need a more lightweight version without these features, you can use [Mermaid Tiny](https://github.com/mermaid-js/mermaid/tree/develop/packages/tiny).
|
||||||
|
|
||||||
## Enabling Click Event and Tags in Nodes
|
## Enabling Click Event and Tags in Nodes
|
||||||
|
|
||||||
A `securityLevel` configuration has to first be cleared. `securityLevel` sets the level of trust for the parsed diagrams and limits click functionality. This was introduced in version 8.2 as a security improvement, aimed at preventing malicious use.
|
A `securityLevel` configuration has to first be cleared. `securityLevel` sets the level of trust for the parsed diagrams and limits click functionality. This was introduced in version 8.2 as a security improvement, aimed at preventing malicious use.
|
||||||
|
@@ -109,6 +109,7 @@ To Deploy Mermaid:
|
|||||||
|
|
||||||
- [Mermaid Live Editor](https://github.com/mermaid-js/mermaid-live-editor)
|
- [Mermaid Live Editor](https://github.com/mermaid-js/mermaid-live-editor)
|
||||||
- [Mermaid CLI](https://github.com/mermaid-js/mermaid-cli)
|
- [Mermaid CLI](https://github.com/mermaid-js/mermaid-cli)
|
||||||
|
- [Mermaid Tiny](https://github.com/mermaid-js/mermaid/tree/develop/packages/tiny)
|
||||||
- [Mermaid Webpack Demo](https://github.com/mermaidjs/mermaid-webpack-demo)
|
- [Mermaid Webpack Demo](https://github.com/mermaidjs/mermaid-webpack-demo)
|
||||||
- [Mermaid Parcel Demo](https://github.com/mermaidjs/mermaid-parcel-demo)
|
- [Mermaid Parcel Demo](https://github.com/mermaidjs/mermaid-parcel-demo)
|
||||||
|
|
||||||
|
@@ -5,7 +5,6 @@
|
|||||||
// @ts-ignore TODO: Investigate D3 issue
|
// @ts-ignore TODO: Investigate D3 issue
|
||||||
import { select } from 'd3';
|
import { select } from 'd3';
|
||||||
import { compile, serialize, stringify } from 'stylis';
|
import { compile, serialize, stringify } from 'stylis';
|
||||||
// @ts-ignore: TODO Fix ts errors
|
|
||||||
import DOMPurify from 'dompurify';
|
import DOMPurify from 'dompurify';
|
||||||
import isEmpty from 'lodash-es/isEmpty.js';
|
import isEmpty from 'lodash-es/isEmpty.js';
|
||||||
import packageJson from '../package.json' assert { type: 'json' };
|
import packageJson from '../package.json' assert { type: 'json' };
|
||||||
|
2
packages/mermaid/src/type.d.ts
vendored
Normal file
2
packages/mermaid/src/type.d.ts
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
// eslint-disable-next-line no-var
|
||||||
|
declare var includeLargeFeatures: boolean;
|
43
packages/tiny/README.md
Normal file
43
packages/tiny/README.md
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
# Tiny Mermaid
|
||||||
|
|
||||||
|
This is a tiny version of mermaid that is optimized for the web. It is a subset of the mermaid library and is designed to be used in the browser via CDN.
|
||||||
|
|
||||||
|
## Lazy loading
|
||||||
|
|
||||||
|
The original mermaid library supports lazy loading, so it will be faster on the initial load, and only load the required diagrams.
|
||||||
|
This is not supported in the tiny mermaid library. So it's always recommended to use the full mermaid library unless you have a very specific reason to reduce the bundle size.
|
||||||
|
|
||||||
|
## Removals from mermaid
|
||||||
|
|
||||||
|
This does not support
|
||||||
|
|
||||||
|
- Mindmap Diagram
|
||||||
|
- Architecture Diagram
|
||||||
|
- Katex rendering
|
||||||
|
- Lazy loading
|
||||||
|
|
||||||
|
## Usage via NPM
|
||||||
|
|
||||||
|
This package is not meant to be installed directly from npm. It is designed to be used via CDN.
|
||||||
|
If you need to use mermaid in your project, please install the full [`mermaid` package](https://www.npmjs.com/package/mermaid) instead.
|
||||||
|
|
||||||
|
## Usage via CDN
|
||||||
|
|
||||||
|
### Latest version
|
||||||
|
|
||||||
|
```html
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/@mermaid-js/tiny/dist/mermaid.tiny.js"></script>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Specific version
|
||||||
|
|
||||||
|
```html
|
||||||
|
<!-- Format -->
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/@mermaid-js/tiny@<MERMAID_MAJOR_VERSION>/dist/mermaid.tiny.js"></script>
|
||||||
|
|
||||||
|
<!-- Pinning major version -->
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/@mermaid-js/tiny@11/dist/mermaid.tiny.js"></script>
|
||||||
|
|
||||||
|
<!-- Pinning specific version -->
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/@mermaid-js/tiny@11.6.0/dist/mermaid.tiny.js"></script>
|
||||||
|
```
|
25
packages/tiny/package.json
Normal file
25
packages/tiny/package.json
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"name": "@mermaid-js/tiny",
|
||||||
|
"version": "11.6.0",
|
||||||
|
"description": "Tiny version of mermaid",
|
||||||
|
"type": "commonjs",
|
||||||
|
"main": "./dist/mermaid.tiny.js",
|
||||||
|
"scripts": {
|
||||||
|
"clean": "rimraf dist"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/mermaid-js/mermaid"
|
||||||
|
},
|
||||||
|
"author": "Sidharth Vinod",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {},
|
||||||
|
"devDependencies": {},
|
||||||
|
"files": [
|
||||||
|
"dist/",
|
||||||
|
"README.md"
|
||||||
|
],
|
||||||
|
"publishConfig": {
|
||||||
|
"access": "public"
|
||||||
|
}
|
||||||
|
}
|
2
pnpm-lock.yaml
generated
2
pnpm-lock.yaml
generated
@@ -518,6 +518,8 @@ importers:
|
|||||||
specifier: ^11.0.3
|
specifier: ^11.0.3
|
||||||
version: 11.0.3
|
version: 11.0.3
|
||||||
|
|
||||||
|
packages/tiny: {}
|
||||||
|
|
||||||
tests/webpack:
|
tests/webpack:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@mermaid-js/mermaid-example-diagram':
|
'@mermaid-js/mermaid-example-diagram':
|
||||||
|
@@ -35,6 +35,8 @@ export default defineConfig({
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
define: {
|
define: {
|
||||||
|
// Needs to be string
|
||||||
|
includeLargeFeatures: 'true',
|
||||||
'import.meta.vitest': 'undefined',
|
'import.meta.vitest': 'undefined',
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
Reference in New Issue
Block a user