@lcap/nasl
Version:
NetEase Application Specific Language
153 lines • 5.74 kB
JavaScript
;
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