UNPKG

dehub

Version:
224 lines (223 loc) 7.91 kB
"use strict"; /** * DEHub类型定义模块 * 包含了DEHub系统中使用的所有类型定义、接口和工具函数 * @module DETypes */ Object.defineProperty(exports, "__esModule", { value: true }); exports.DataProxy = exports.rejectedCheck = exports.sleep = exports.getDiff = exports.clearNullNodes = exports.mergeObject = exports.TagsSerializer = exports.MAX_TAG_KEYS = exports.EventStage = exports.ObjectStatus = exports.EventNames = exports.Tag = void 0; class Tag { #tag; #path; #keys; constructor(tag) { this.#tag = tag; this.#keys = Object.keys(tag); this.#path = exports.TagsSerializer.toPath(tag); } get members() { return this.#tag; } get path() { return this.#path; } get keys() { return this.#keys; } equal(others) { const otherType = typeof others; if (otherType === 'string') return others === this.#path; if (others instanceof Tag) return others.path === this.#path; if (Object.keys(others).length !== this.#keys.length) return false; for (const key of this.#keys) { if (this.#tag[key] !== others[key]) return false; } return true; } toString() { return this.#path; } } exports.Tag = Tag; var EventNames; (function (EventNames) { EventNames["ValueChanged"] = "$valueChanged"; EventNames["StatusChanging"] = "$statusChanged"; EventNames["Submit"] = "$submit"; EventNames["StateChanging"] = "$stateChanged"; EventNames["Mounting"] = "$mount"; EventNames["Registration"] = "$reg"; EventNames["WillUnmount"] = "$unmount"; EventNames["ComponentsLoaded"] = "$allCmpLoaded"; EventNames["Exception"] = "$error"; })(EventNames = exports.EventNames || (exports.EventNames = {})); var ObjectStatus; (function (ObjectStatus) { ObjectStatus["New"] = "new"; ObjectStatus["Ready"] = "ready"; ObjectStatus["Loading"] = "loading"; ObjectStatus["Clear"] = "clear"; ObjectStatus["Reset"] = "reset"; ObjectStatus["Uploading"] = "uploading"; ObjectStatus["Deleting"] = "deleting"; ObjectStatus["Deleted"] = "deleted"; ObjectStatus["Failed"] = "failed"; ObjectStatus["Timeout"] = "Timeout"; })(ObjectStatus = exports.ObjectStatus || (exports.ObjectStatus = {})); var EventStage; (function (EventStage) { EventStage["PreOperation"] = "pre"; EventStage["PostOperation"] = "post"; })(EventStage = exports.EventStage || (exports.EventStage = {})); exports.MAX_TAG_KEYS = 10; exports.TagsSerializer = { toPath: (tag) => { const sortedKeys = Object.keys(tag).sort(); let queryString = ''; for (const key of sortedKeys) { if (tag[key] !== undefined) { const value = tag[key] === null ? '' : tag[key]; queryString += `${key}=${value}&`; } } return queryString.slice(0, -1); }, selfAndChildTags: (baseTags) => { const result = []; const keys = Object.keys(baseTags.members); const n = keys.length; if (n > exports.MAX_TAG_KEYS) { console.warn(`[DEHub] Tag has ${n} keys exceeding safe limit ${exports.MAX_TAG_KEYS}. Keys: ${keys.join(', ')}`); } for (let i = 1; i < (1 << n); i++) { const gVal = {}; for (let j = 0; j < n; j++) { if (i & (1 << j)) { gVal[keys[j]] = baseTags.members[keys[j]]; } } result.push(exports.TagsSerializer.toPath(gVal)); } return result; }, fromPath: (path) => { const obj = {}; const paramsArr = path.split('&'); for (const param of paramsArr) { const [key, value] = param.split('='); obj[key] = value; } return obj; } }; const mergeObject = (objA, objB, deep = false) => { if (objA === null && objB === null) return null; if (objB === null) return objB; if (objA == null || objB == null) return objB ?? objA ?? undefined; if (typeof objA !== 'object' || typeof objB !== 'object') return objA ?? objB; let mergedObj = {}; const allKeys = Array.from(new Set(Object.keys(objA).concat(Object.keys(objB)))); if (allKeys.length > 0) { for (const ak of allKeys) { if (Array.isArray(objA[ak]) && !Array.isArray(objB[ak])) { mergedObj[ak] = objA[ak]; } else if (deep === true && !Array.isArray(objA[ak]) && !Array.isArray(objB[ak]) && typeof objA[ak] === 'object' && typeof objB[ak] === 'object') { mergedObj[ak] = (0, exports.mergeObject)(objA[ak], objB[ak], deep); } else { mergedObj[ak] = objB[ak] === undefined ? objA[ak] : objB[ak]; } } } else { mergedObj = objB; } return mergedObj; }; exports.mergeObject = mergeObject; const clearNullNodes = (obj) => { if (obj != null && typeof obj === 'object') { const nullKeys = []; for (const [okey, oval] of Object.entries(obj)) { if (oval == null) { nullKeys.push(okey); } else if (typeof oval === 'object') { (0, exports.clearNullNodes)(oval); } } for (const key of nullKeys) { delete obj[key]; } } return obj; }; exports.clearNullNodes = clearNullNodes; const getDiff = (obj1, obj2) => { const updated = {}; for (const key of Object.keys(obj1)) { if (!obj2.hasOwnProperty(key)) { updated[key] = obj1[key]; } else { const value1 = obj1[key]; const value2 = obj2[key]; if (typeof value1 === "object" && typeof value2 === "object" && !Array.isArray(value1) && !Array.isArray(value2)) { const childDiff = (0, exports.getDiff)(value1, value2); if (Object.keys(childDiff).length > 0) { updated[key] = childDiff; } } else if (value1 !== value2) { updated[key] = value1; } } } for (const key of Object.keys(obj2)) { if (!obj1.hasOwnProperty(key)) { updated[key] = undefined; } } return updated; }; exports.getDiff = getDiff; const sleep = (millisecond) => { return new Promise((resolve) => { setTimeout(() => resolve(), millisecond); }); }; exports.sleep = sleep; const rejectedCheck = (results) => { const rejectedReasons = results .filter((r) => r.status === 'rejected') .map(r => r.reason); if (rejectedReasons.length > 0) { throw new AggregateError(rejectedReasons, `${rejectedReasons.length} promise(s) rejected`); } }; exports.rejectedCheck = rejectedCheck; const DataProxy = (obj) => new Proxy(obj, { get(target, property) { const propertyStr = property.toString(); if (propertyStr in target) { return target[propertyStr]; } const mKey = Object.keys(target).find(key => key.toLowerCase() === propertyStr.toLowerCase()); return mKey ? target[mKey] : null; }, set(target, property, value) { const propertyStr = property.toString(); const mKey = Object.keys(target).find(key => key.toLowerCase() === propertyStr.toLowerCase()); if (mKey) { target[mKey] = value; } else { target[propertyStr] = value; } return true; } }); exports.DataProxy = DataProxy;