import path from 'path' import { Obj } from 'src/type' import log from 'src/log' import { isCloud } from 'src/env' import { pathExistsSync } from 'src/fs' import { PKG_JSON_FILE_NAME, pkgJsonExistsSync, loadPkgJson, } from 'src/package-json' import { callCone } from 'src/cone' import { logError } from 'src/error' const prefix = 'upload-component' /** * 此 API 开放给 rax 模板使用了, 请谨慎修改 */ export async function uploadComponent({ dir, config = {}, }: { dir: string config?: Obj }) { if (!isCloud) { return } if (!dir) { log.error(prefix, 'dir 是必填参数') return } if (!pkgJsonExistsSync(dir)) { log.error(prefix, `请确保 ${PKG_JSON_FILE_NAME} 存在`) return } try { log.info(prefix, '组件上传中...') const pkgJson = await loadPkgJson(dir) // https://yuque.antfin.com/docs/share/c5834c76-e8ce-432d-840a-c318d2279d2b const payload: Obj = { package_name: pkgJson.name || '', name: pkgJson.name || '', description: pkgJson.description || '', // 物料类型,1组件,2区块,3模板 type: 1, // js库,1React,2Rax,3Vue,4其他 js_library: 1, // 适用场景,1Web PC,2Web h5, 4小程序,5一码多端 platform: 1, // DevMode,1搭建,2源码 dev_mode: 2, // 基础组件库,1Next,2Antd,3Meet,4None component_library: 1, has_storybook_doc: pathExistsSync(path.join(dir, 'stories')) ? 1 : 0, has_readme_doc: pathExistsSync(path.join(dir, 'README.md')) ? 1 : 0, has_changelog_doc: pathExistsSync(path.join(dir, 'CHANGELOG.md')) ? 1 : 0, has_contributing_doc: pathExistsSync(path.join(dir, 'CONTRIBUTING.md')) ? 1 : 0, ...config, } if (isCloud) { payload.user_id = process.env.BUILD_USER } const res = await callCone({ method: 'POST', urlPath: '/api/component/cli/create', isAsset: true, data: payload, }) log.verbose(prefix, 'done') } catch (err) { // ignore upload error logError(err as Obj) log.verbose(prefix, 'err') } }