UNPKG

@lcap/nasl

Version:

NetEase Application Specific Language

153 lines 5.74 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.loadBasicUICSSInfo = exports.loadBasicUIDeclaration = exports.loadBasicUINaslAPI = exports.formatNodesAPI = exports.loadBasicMainfest = exports.getUIPackageInfo = void 0; const lodash_1 = require("lodash"); const format_1 = require("./format"); const utils_1 = require("./utils"); const manifest_1 = require("./manifest"); function getUIPackageInfo(app, framework, scope) { const { packageInfos } = app; const pkgScopeInfo = packageInfos.find((pkg) => pkg.scope === scope); if (!pkgScopeInfo) { throw new Error(`未在 packageInfos 中找到 scope: ${scope}`); } const pkgUIInfo = pkgScopeInfo.ui.find((ui) => ui.frameworkKind === framework); if (!pkgUIInfo) { throw new Error(`未找到 ${framework} 资源配置`); } return { name: pkgUIInfo.name, version: pkgUIInfo.version, scope, frameworkKind: framework, }; } exports.getUIPackageInfo = getUIPackageInfo; async function loadBasicMainfest({ axios, appInfo }, pkgInfo) { const url = `${appInfo.STATIC_URL}${manifest_1.BASIC_PREFIX}/${pkgInfo.name}@${pkgInfo.version}/manifest.json?t=${Date.now()}`; try { return await (0, utils_1.fetchFile)(url, axios); } catch (e) { return { nasl: [ 'dist-theme/nasl.ui.json', 'dist-theme/nasl.ui.d.ts' ], runtime: [ 'dist-theme/index.js', 'dist-theme/index.css' ], theme: [ 'dist-theme/theme.json', ], package: [ 'zip.tgz', ], i18n: [ 'dist-theme/i18n.json' ], ide: [], }; } } exports.loadBasicMainfest = loadBasicMainfest; function formatNodesAPI(list, pkgInfo) { const nodesAPI = {}; const useName = pkgInfo.frameworkKind && pkgInfo.frameworkKind.startsWith('vue') ? (item) => item.kebabName || (0, lodash_1.kebabCase)(item.name) : (item) => item.name; list.forEach((item) => { item.name = useName(item); const { name } = item; const jsonSchema = item.jsonSchema || item; jsonSchema.title = jsonSchema.title || item.alias; const { children } = jsonSchema; // 暂时代码,待后续组件库定义后优化 if (Array.isArray(jsonSchema.props)) { jsonSchema.props.forEach((prop) => (0, format_1.formatBasicCompose)(prop, jsonSchema)); } (0, format_1.formatPropsMap)(jsonSchema, 'readableProps', { frameworkKind: pkgInfo.frameworkKind }); (0, format_1.formatPropsMap)(jsonSchema, 'props', { frameworkKind: pkgInfo.frameworkKind }); (0, format_1.formatTableSlots)(jsonSchema); // 给组件写入组件库信息 jsonSchema.package = pkgInfo; nodesAPI[name] = jsonSchema; Object.assign(nodesAPI[name], { componentLevel: 'root', }); if (Array.isArray(children)) { children.forEach((child) => { child.package = pkgInfo; (0, format_1.formatSub)(child, nodesAPI, useName); }); } }); return { allNodesAPI: nodesAPI, componentList: list, }; } exports.formatNodesAPI = formatNodesAPI; async function loadBasicUINaslAPI({ axios, appInfo }, pkgInfo, manifest) { const url = (0, manifest_1.getFetchURL)('nasl', 'nasl.ui.json', { staticURL: appInfo.STATIC_URL, name: pkgInfo.name, version: pkgInfo.version, manifest, }); if (!url) { throw new Error(`${pkgInfo.name}@${pkgInfo.version} 包中未找到 nasl.ui.json`); } try { const list = await (0, utils_1.fetchFile)(url, axios); // 往packageInfo写入 manifest 信息 pkgInfo.manifest = manifest; pkgInfo.treeShaking = (manifest?.modules || []).some(x => x.endsWith('/modules.json')); return formatNodesAPI(list, pkgInfo); } catch (e) { throw new Error(`基础组件库资源加载/解析失败:${e.stack}`); } } exports.loadBasicUINaslAPI = loadBasicUINaslAPI; async function loadBasicUIDeclaration({ axios, appInfo }, pkgInfo, manifest) { const url = (0, manifest_1.getFetchURL)('nasl', 'nasl.ui.d.ts', { staticURL: appInfo.STATIC_URL, name: pkgInfo.name, version: pkgInfo.version, manifest, }); if (!url) { throw new Error(`${pkgInfo.name}@${pkgInfo.version} 包中未找到 nasl.ui.d.ts`); } try { const text = await (0, utils_1.fetchFile)(url, axios, true); const code = text.replace(/\/\/\/\s<reference\s.+?\/>/g, ''); return code; } catch (e) { throw new Error(`加载 ${pkgInfo.name}@${pkgInfo.version} nasl.ui.d.ts 失败:${e.stack}`); } } exports.loadBasicUIDeclaration = loadBasicUIDeclaration; async function loadBasicUICSSInfo({ axios, appInfo }, pkgInfo, manifest) { const url = (0, manifest_1.getFetchURL)('style', 'index.css-info-map.json', { staticURL: appInfo.STATIC_URL, name: pkgInfo.name, version: pkgInfo.version, manifest, }); if (!url) { console.warn(`${pkgInfo.name}@${pkgInfo.version} 包中未找到 index.css-info-map.json`); return {}; } let result = {}; try { result = await (0, utils_1.fetchFile)(url, axios); } catch (e) { console.warn(`加载 ${pkgInfo.name}@${pkgInfo.version} index.css-info-map.json 失败:${e.stack}`); } return result; } exports.loadBasicUICSSInfo = loadBasicUICSSInfo; //# sourceMappingURL=basic.js.map