mirror of
https://github.com/alibaba/lowcode-engine.git
synced 2025-12-13 20:36:34 +00:00
71 lines
2.1 KiB
TypeScript
71 lines
2.1 KiB
TypeScript
import 'ts-polyfill';
|
|
import { remove, lstatSync } from 'fs-extra';
|
|
import { join, isAbsolute } from 'path';
|
|
import {
|
|
IMaterializeOptions,
|
|
IMaterializeLocalOptions,
|
|
IMaterializeOnlineOptions,
|
|
IInternalMaterializeOptions,
|
|
} from './types';
|
|
import { ComponentMeta } from './core';
|
|
import scan from './scan';
|
|
import generate from './generate';
|
|
import parse from './parse';
|
|
import localize from './localize';
|
|
|
|
export { default as validate } from './validate';
|
|
export { default as schema } from './validate/schema.json';
|
|
|
|
export * from './types';
|
|
|
|
export default async function (options: IMaterializeOptions): Promise<ComponentMeta[]> {
|
|
const { accesser = 'local', dslType } = options;
|
|
|
|
let { entry = '' } = options;
|
|
const internalOptions: IInternalMaterializeOptions = {
|
|
...options,
|
|
accesser,
|
|
entry: options.entry || '',
|
|
root: (options as IMaterializeLocalOptions)?.root || '',
|
|
} as IInternalMaterializeOptions;
|
|
|
|
if (accesser === 'local') {
|
|
const { root } = options as IMaterializeLocalOptions;
|
|
internalOptions.root = root;
|
|
if (!root) {
|
|
const stats = lstatSync(entry);
|
|
if (stats.isDirectory()) {
|
|
internalOptions.root = entry;
|
|
} else {
|
|
internalOptions.root = process.cwd();
|
|
}
|
|
} else if (!isAbsolute(entry)) {
|
|
internalOptions.entry = join(root, entry);
|
|
}
|
|
}
|
|
|
|
let workDir = internalOptions.root || '';
|
|
let moduleDir = '';
|
|
if (accesser === 'online') {
|
|
const result = await localize(internalOptions as IMaterializeOnlineOptions);
|
|
workDir = result.workDir;
|
|
moduleDir = result.moduleDir;
|
|
internalOptions.entry = result.entry ? join(moduleDir, result.entry) : moduleDir;
|
|
internalOptions.root = moduleDir;
|
|
}
|
|
const scanedModel = await scan(internalOptions);
|
|
const parsedModel = await parse({
|
|
...scanedModel,
|
|
dslType,
|
|
accesser,
|
|
npmClient: internalOptions.npmClient,
|
|
workDir,
|
|
moduleDir,
|
|
});
|
|
const result = await generate(scanedModel, parsedModel, internalOptions);
|
|
if (workDir && accesser === 'online') {
|
|
await remove(workDir);
|
|
}
|
|
return result;
|
|
}
|