UNPKG

@lark-project/cli

Version:

飞书项目插件开发工具

127 lines (126 loc) 6.14 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateResourceCode = exports.getDocs = exports.copyProjectWithTemplate = void 0; const path_1 = __importDefault(require("path")); const fs_extra_1 = require("fs-extra"); const ejs_1 = __importDefault(require("ejs")); const fs_1 = __importDefault(require("fs")); const globby_1 = __importDefault(require("globby")); async function copyProjectWithTemplate({ templateTargetDir, templateId, targetDir, renderCtx, filter, }) { const globbyCWD = path_1.default.join(templateTargetDir, templateId ? `project/${templateId}` : ''); const entries = await (0, globby_1.default)(['**'], { cwd: globbyCWD, objectMode: true, dot: true, }); for (const entry of entries) { const absolutePath = path_1.default.resolve(globbyCWD, entry.path); const isFilter = filter ? filter(entry.path) : false; if (entry.name.endsWith('.ejs') && !isFilter) { const templateFile = (0, fs_extra_1.readFileSync)(absolutePath); const compiledFileContent = ejs_1.default.render(templateFile.toString(), renderCtx); const pathWithoutEJS = path_1.default.parse(entry.path).name; (0, fs_extra_1.writeFileSync)(path_1.default.resolve(targetDir, pathWithoutEJS), compiledFileContent); } else { // 模板描述文件不复制 if (entry.name !== 'tempale-meta.json') { const targetFilePath = path_1.default.resolve(targetDir, entry.path); (0, fs_extra_1.copySync)(absolutePath, targetFilePath); } } } } exports.copyProjectWithTemplate = copyProjectWithTemplate; const getDocs = (domain) => ([{ url: `${domain}/openapp/start_guide`, text: 'Get Started', type: 'primary', }, { url: `${domain}/b/helpcenter/1p8d7djs/x4l57qtx`, text: 'Client API', type: 'secondary', }, { url: `${domain}/b/helpcenter/1p8d7djs/aa6btca8`, text: 'Client Component', type: 'secondary', }]); exports.getDocs = getDocs; const generateResourceCode = async ({ localConfig, remoteConfig, targetDir, siteDomain }) => { var _a; const localResourceIds = (_a = ((localConfig === null || localConfig === void 0 ? void 0 : localConfig.resources) || [])) === null || _a === void 0 ? void 0 : _a.map((item) => item.id); const remoteWebResourceIds = remoteConfig.features.map((item) => { var _a, _b; return (_b = (_a = item.web) === null || _a === void 0 ? void 0 : _a.resourceId) === null || _b === void 0 ? void 0 : _b.resource; }).filter(Boolean); const remoteAddWebResourceIds = remoteWebResourceIds.filter((item) => item && !localResourceIds.includes(item)); const remoteMobileResourceIds = remoteConfig.features.map((item) => { var _a, _b; return (_b = (_a = item.mobile) === null || _a === void 0 ? void 0 : _a.resourceId) === null || _b === void 0 ? void 0 : _b.resource; }).filter(Boolean); const remoteAddMobileResourceIds = remoteMobileResourceIds.filter((item) => item && !localResourceIds.includes(item)); const needRemoveResourceIds = localResourceIds.filter((item) => !remoteWebResourceIds.includes(item) && !remoteMobileResourceIds.includes(item)); const renderCtx = { pluginName: remoteConfig.name, pluginIcon: remoteConfig.icon, docs: (0, exports.getDocs)(siteDomain), }; const featureDir = path_1.default.join(targetDir, './src/features/'); if (!fs_1.default.existsSync(featureDir)) { fs_1.default.mkdirSync(featureDir); } const newResourceRelation = []; const syncResourceIds = []; const unSyncResourceIds = []; const templateWebTargetDir = path_1.default.join(targetDir, './.template/project/react-initialized/src/features/web'); const templateMobileTargetDir = path_1.default.join(targetDir, './.template/project/react-initialized/src/features/mobile'); const webList = remoteAddWebResourceIds.map((resourceId) => { const entryPath = `./src/features/${resourceId}/index.tsx`; if (fs_1.default.existsSync(path_1.default.join(featureDir, resourceId))) { newResourceRelation.push({ id: resourceId, entry: '', }); unSyncResourceIds.push(resourceId); return; } fs_1.default.mkdirSync(`${targetDir}/src/features/${resourceId}`); syncResourceIds.push(resourceId); newResourceRelation.push({ id: resourceId, entry: entryPath, }); return copyProjectWithTemplate({ templateTargetDir: templateWebTargetDir, targetDir: `${targetDir}/src/features/${resourceId}`, renderCtx: Object.assign(Object.assign({}, renderCtx), { entryPath }), }); }); const mobileList = remoteAddMobileResourceIds.map((resourceId) => { const entryPath = `./src/features/${resourceId}/index.tsx`; if (fs_1.default.existsSync(path_1.default.join(featureDir, resourceId))) { newResourceRelation.push({ id: resourceId, entry: '', }); unSyncResourceIds.push(resourceId); return; } fs_1.default.mkdirSync(`${targetDir}/src/features/${resourceId}`); syncResourceIds.push(resourceId); newResourceRelation.push({ id: resourceId, entry: entryPath, }); return copyProjectWithTemplate({ templateTargetDir: templateMobileTargetDir, targetDir: `${targetDir}/src/features/${resourceId}`, renderCtx: Object.assign(Object.assign({}, renderCtx), { entryPath }), }); }); return { list: [...webList, ...mobileList], newResourceRelation, syncResourceIds, unSyncResourceIds, needRemoveResourceIds, }; }; exports.generateResourceCode = generateResourceCode;