async function initLowCodeSchema()

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
};
`,
      );
    }
  });
}