tmagic-editor/rolldown.dts.config.mjs
roymondchen 94fae10ae0 feat(editor): 新增 SDK 层并将核心服务迁移至 sdk 目录
- 新增 packages/editor/src/sdk,通过 sdk.ts 对外导出
- 将 services 下的核心服务迁移至 sdk/services
- 工具函数拆分至 sdk/utils,校验逻辑迁移至 sdk/validate,新增 sdk/wiring
- services/sdk-instance.ts 负责在编辑器中实例化 SDK
- 补充 SDK 相关单元测试,新增 docs/api/editor/sdk.md 文档
2026-10-08 19:58:03 +08:00

89 lines
2.9 KiB
JavaScript

import { existsSync, readdirSync, readFileSync, writeFileSync } from 'node:fs';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
import { dts } from 'rolldown-plugin-dts';
if (!existsSync('temp')) {
console.warn(
'no temp dts files found. run `tsc -p tsconfig.build-browser.json && vue-tsc --declaration --emitDeclarationOnly --project tsconfig.build-vue.json` first.',
);
process.exit(1);
}
removeScss('temp/packages/editor/src/index.d.ts');
removeScss('temp/packages/form/src/index.d.ts');
removeScss('temp/packages/design/src/index.d.ts');
removeScss('temp/packages/table/src/index.d.ts');
const packages = readdirSync('temp/packages');
const runtimes = readdirSync('temp/runtime');
const targets = process.env.TARGETS ? process.env.TARGETS.split(',') : null;
const targetPackages = targets ? packages.filter((pkg) => targets.includes(pkg)) : packages;
const dirname = path.dirname(fileURLToPath(import.meta.url));
const aliasEntries = [
{ find: /^@form\//, replacement: `${path.join(dirname, './temp/packages/form/src')}/` },
{ find: /^@editor\//, replacement: `${path.join(dirname, './temp/packages/editor/src')}/` },
{ find: /^@data-source\//, replacement: `${path.join(dirname, './temp/packages/data-source/src')}/` },
];
function aliasPlugin() {
return {
name: 'dts-alias',
resolveId(source) {
for (const { find, replacement } of aliasEntries) {
if (find.test(source)) {
let resolved = source.replace(find, replacement);
resolved = resolved.replace(/\/\//g, '/');
resolved = resolved.replace(/\.js$/, '');
if (existsSync(`${resolved}.d.ts`)) {
return `${resolved}.d.ts`;
}
if (existsSync(resolved)) {
return resolved;
}
return `${resolved}.d.ts`;
}
}
},
};
}
function rolldownConfig(pkg, base, entry = 'index') {
return {
input: `./temp/${base}/${pkg}/src/${entry}.d.ts`,
external: (id) =>
!id.startsWith('.') &&
!id.startsWith('/') &&
!id.startsWith('@editor/') &&
!id.startsWith('@form/') &&
!id.startsWith('@data-source/'),
plugins: [aliasPlugin(), ...dts({ dtsInput: true, tsconfig: false })],
output: {
file: `${base}/${pkg}/types/${entry}.d.ts`,
format: 'es',
},
};
}
function packageDtsConfigs(pkg, base) {
const configs = [rolldownConfig(pkg, base, 'index')];
for (const entry of ['headless', 'sdk']) {
if (existsSync(`./temp/${base}/${pkg}/src/${entry}.d.ts`)) {
configs.push(rolldownConfig(pkg, base, entry));
}
}
return configs;
}
export default [
...targetPackages.flatMap((pkg) => packageDtsConfigs(pkg, 'packages')),
...runtimes.flatMap((pkg) => packageDtsConfigs(pkg, 'runtime')),
];
function removeScss(path) {
writeFileSync(path, readFileSync(path).toString().replace("import './theme/index.scss';", ''));
}