UNPKG

@lcap/nasl

Version:

NetEase Application Specific Language

114 lines (112 loc) 4.46 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.genSimpleBundleFile = void 0; const nasl_unified_frontend_generator_1 = require("@lcap/nasl-unified-frontend-generator"); const genBundleFiles_1 = require("./genBundleFiles"); /** * 只用于 NASL 沙箱简单打包用 */ function genSimpleBundleFile(app, frontend, options) { const views = frontend.views; const routes = []; const files = {}; let importStr = ''; const typeKeyMap = {}; const enumMap = {}; app.enums.forEach((enumItem) => { enumMap['app.enums.' + enumItem.name] = true; }); app.dataSources[0]?.entities.forEach((entity) => { typeKeyMap[entity.name] = typeKeyMap[entity.name] || {}; entity.properties.forEach((property) => { typeKeyMap[entity.name][property.name] = property.typeAnnotation?.typeKey; }); }); function traverseView(view, prefixName = '', parentPath = '') { const isRootView = view.parentNode?.concept !== 'View'; let path = isRootView ? `${frontend.prefixPath}/${view.name}` : view.name; let prefixPath = parentPath ? `${parentPath}/${view.name}` : view.name; let fullName = prefixName ? `${prefixName}_${view.name}` : view.name; let content = view.toVue({ isComposition: true, creatorDevMode: true }); // naslJSON 有标注就不需要这个了 // content = content // .replace( // /(:text="\$utils\['ToString'\]\('undefined', \$utils\['EnumItemToText'\]\()('([^']+)', )?current\?\.item\?\.(\w+)(?:\?\.(\w+))?\)/g, // (m, $1, $2, $3, $4, $5) => { // let typeKey = ''; // if ($5) { // const entityName = upperFirst($4); // typeKey = typeKeyMap[entityName]?.[$5]; // } else { // typeKey = `app.enums.${upperFirst($4).replace(/\d+$/, '')}`; // } // if (typeKey && enumMap[typeKey]) // return `${$1}'${typeKey}', current?.item?.${$4}${$5 ? `?.${$5}` : ''})`; // return m; // } // ) // .replace( // /('ListTransform'\]\(.+?, \(item\) => \(\$utils\['EnumItemToText'\]\()('([^']+)', )?item\?\.(\w+)(?:\?\.(\w+))?\)\)/g, // (m, $1, $2, $3, $4, $5) => { // let typeKey = ''; // if ($5) { // const entityName = upperFirst($4); // typeKey = typeKeyMap[entityName]?.[$5]; // } else { // typeKey = `app.enums.${upperFirst($4).replace(/\d+$/, '')}`; // } // if (typeKey && enumMap[typeKey]) // return `${$1}'${typeKey}', item?.${$4}${$5 ? `?.${$5}` : ''}))`; // return m; // } // ); const fileName = `/${fullName}.vue`; files[fileName] = { code: content }; importStr += `const ${fullName} = () => import('.${fileName}');\n`; const children = []; view.children.forEach((child) => { children.push(traverseView(child, fullName, prefixPath)); }); const route = { path, component: `##${fullName}##`, meta: view.getRouteMeta(), children, }; if (route.meta.first) { route.redirect = `/${prefixPath}/${route.meta.first}`; } return route; } views.forEach((view) => { routes.push(traverseView(view)); if (view.isIndex) { routes.push({ path: frontend.prefixPath ? frontend.prefixPath : '/', redirect: `${frontend.prefixPath}/${view.name}`, }); } }); routes.push({ path: '/:pathMatch(.*)*', redirect: options?.notFoundRedirect || '/notFound', }); const routesStr = JSON.stringify(routes).replace(/"##|##"/g, ''); const metaData = (0, nasl_unified_frontend_generator_1.genMetaData)(app, frontend, undefined); const metaDataStr = (0, genBundleFiles_1.stringifyMetaData)(metaData); files['/router.js'] = { code: ` ${importStr} export const routes = ${routesStr}; export const metaData = ${metaDataStr}; `, }; files['/index.css'] = { code: frontend.genThemeCSS(), }; return { files, }; } exports.genSimpleBundleFile = genSimpleBundleFile; //# sourceMappingURL=genSimpleBundleFile.js.map