in packages/build-plugin-lowcode/src/index.js [515:619]
async function initLowCodeSchema(
rootDir,
package,
componentsPath,
devAlias,
metaFormat,
components,
npmClient = 'tnpm',
lowcodeDir = 'lowcode',
entryPath,
) {
if (INIT_STATE) {
return;
}
INIT_STATE = true;
if (!PARSED_NPM_NAME) {
PARSED_NPM_NAME = parseNpmName(package.name);
}
const entry = getEntry(rootDir, entryPath);
const lowcodeDirExists = await fse.existsSync(path.resolve(rootDir, lowcodeDir));
if (lowcodeDirExists) {
const lowcodeDirs = await fse.readdir(path.resolve(rootDir, lowcodeDir));
const componentsDirs = await fse.readdir(
path.resolve(rootDir, componentsPath || 'src/components'),
);
const lowcodeDirMap = {};
lowcodeDirs.forEach((item) => {
lowcodeDirMap[item] = true;
});
const newComponentDir = componentsDirs.filter((dir) => !lowcodeDirMap[dir]);
if (!newComponentDir || !newComponentDir.length) {
return;
}
}
let result = await parser.default({ accesser: 'local', entry, npmClient });
if (!result) {
// 未解析出结果,默认生成结果
result = [
formatComponentSchema({
componentName: PARSED_NPM_NAME.uniqueName,
npm: {
package: package.name,
version: package.version,
exportName: 'default',
main: 'lib/index.js',
destructuring: false,
subName: '',
},
}),
];
} else if (result.length === 1 && result[0].componentName === 'default') {
result[0].componentName = PARSED_NPM_NAME.uniqueName;
if (result[0].title === 'default') {
result[0].title = PARSED_NPM_NAME.uniqueName;
}
}
const metaDevSubfix = devAlias ? `.${devAlias}` : '';
const filteredComponents =
!components || !components.length
? result
: result.filter((item) => item && components.includes(item.componentName));
filteredComponents.forEach((item) => {
const componentNameFolder = camel2KebabComponentName(item.componentName);
if (
!fse.existsSync(
path.resolve(
rootDir,
`${lowcodeDir}/${componentNameFolder}/meta${metaDevSubfix}.${metaFormat || 'ts'}`,
),
) &&
!fse.existsSync(
path.resolve(rootDir, `${lowcodeDir}/${componentNameFolder}/meta${metaDevSubfix}.js`),
)
) {
const schema = formatComponentSchema(item);
if (schema.title === package.name) {
schema.title = schema.componentName;
}
const { snippets } = schema;
const componentDescription = schema;
delete componentDescription.snippets;
fse.outputFileSync(
path.resolve(
rootDir,
`${lowcodeDir}/${componentNameFolder}/meta${metaDevSubfix}.${metaFormat || 'ts'}`,
),
`
import { IPublicTypeComponentMetadata, IPublicTypeSnippet } from '@alilc/lowcode-types';
const ${item.componentName}Meta: IPublicTypeComponentMetadata = ${JSON.stringify(
componentDescription,
null,
2,
)};
const snippets: IPublicTypeSnippet[] = ${JSON.stringify(snippets, null, 2)};
export default {
...${item.componentName}Meta,
snippets
};
`,
);
}
});
}