mirror of
https://github.com/WeBankFinTech/fes.js.git
synced 2025-04-06 03:59:53 +08:00
* fix: 优化类型提示 * fix: 添加 enums 接口类型声明 * feat: 配置插件api提示 Co-authored-by: wanchun <445436867@qq.com>
94 lines
2.7 KiB
JavaScript
94 lines
2.7 KiB
JavaScript
import { readFileSync } from 'fs';
|
|
import { join } from 'path';
|
|
import { name } from '../package.json';
|
|
|
|
const namespace = 'plugin-monaco-editor';
|
|
|
|
export default (api) => {
|
|
const {
|
|
utils: { Mustache },
|
|
} = api;
|
|
|
|
api.describe({
|
|
key: 'monacoEditor',
|
|
config: {
|
|
schema(joi) {
|
|
return joi.object().keys({
|
|
filename: joi.string(),
|
|
publicPath: joi.string(),
|
|
languages: joi.array(),
|
|
features: joi.array(),
|
|
globalAPI: joi.boolean(),
|
|
});
|
|
},
|
|
},
|
|
default: {},
|
|
});
|
|
|
|
const absoluteFilePath = join(namespace, 'core.js');
|
|
const absRuntimeFilePath = join(namespace, 'runtime.js');
|
|
const absLoaderFilePath = join(namespace, 'loader.js');
|
|
const absEditorFilePath = join(namespace, 'editor.vue');
|
|
|
|
api.onGenerateFiles(() => {
|
|
// 文件写出
|
|
api.writeTmpFile({
|
|
path: absoluteFilePath,
|
|
content: Mustache.render(readFileSync(join(__dirname, 'runtime/core.tpl'), 'utf-8'), {}),
|
|
});
|
|
|
|
api.writeTmpFile({
|
|
path: absRuntimeFilePath,
|
|
content: Mustache.render(readFileSync(join(__dirname, 'runtime/runtime.tpl'), 'utf-8')),
|
|
});
|
|
|
|
api.writeTmpFile({
|
|
path: absLoaderFilePath,
|
|
content: Mustache.render(readFileSync(join(__dirname, 'runtime/loader.tpl'), 'utf-8'), {
|
|
MONACO_EDITOR: 'monaco-editor',
|
|
}),
|
|
});
|
|
|
|
api.writeTmpFile({
|
|
path: absEditorFilePath,
|
|
content: Mustache.render(readFileSync(join(__dirname, 'runtime/editor.tpl'), 'utf-8'), {
|
|
LODASH_ES: 'lodash-es',
|
|
}),
|
|
});
|
|
|
|
api.copyTmpFiles({
|
|
namespace,
|
|
path: join(__dirname, 'runtime'),
|
|
ignore: ['.tpl'],
|
|
});
|
|
});
|
|
|
|
api.addPluginExports(() => [
|
|
{
|
|
specifiers: ['monaco', 'MonacoEditor'],
|
|
source: absoluteFilePath,
|
|
},
|
|
]);
|
|
|
|
api.addRuntimePluginKey(() => 'monacoEditor');
|
|
|
|
api.addRuntimePlugin(() => `@@/${absRuntimeFilePath}`);
|
|
|
|
if (api.builder.name === 'vite') {
|
|
api.modifyBundleConfig((config) => {
|
|
const monacoEditorPlugin = require('vite-plugin-monaco-editor').default;
|
|
config?.plugins?.push(monacoEditorPlugin(api.config?.monacoEditor || {}));
|
|
});
|
|
//
|
|
} else {
|
|
api.chainWebpack((webpackConfig) => {
|
|
webpackConfig.plugin('monaco-editor').use(require('monaco-editor-webpack-plugin'), [api.config?.monacoEditor || {}]);
|
|
return webpackConfig;
|
|
});
|
|
}
|
|
|
|
api.addConfigType(() => ({
|
|
source: name,
|
|
}));
|
|
};
|