UNPKG

use-on-demand

Version:
98 lines 4.54 kB
import os from 'os'; /** * 既然【静态接口】用不了,那我就换成【工厂模式】。 */ var RefCheckUtilsFactory = /** @class */ (function () { function RefCheckUtilsFactory() { } RefCheckUtilsFactory.getV1 = function () { if (!RefCheckUtilsFactory.v1) { RefCheckUtilsFactory.v1 = new RefCheckUtils_v1(); } return RefCheckUtilsFactory.v1; }; RefCheckUtilsFactory.getV2 = function () { if (!RefCheckUtilsFactory.v2) { RefCheckUtilsFactory.v2 = new RefCheckUtils_v2(); } return RefCheckUtilsFactory.v2; }; return RefCheckUtilsFactory; }()); export { RefCheckUtilsFactory }; var RefCheckUtils_v1 = /** @class */ (function () { function RefCheckUtils_v1() { } /** * 将元素收集起来,检查引用 * 1.避免,未在md变量中声明,就在md连线中使用 的情况。 * 2.该方法,可以用作【drawFlow】方法的外部传参之前,也可以用作【drawFlow】内部。 */ RefCheckUtils_v1.prototype.collectToCheckRef = function (eleObjs) { eleObjs.forEach(function (item) { // 先加后减,和先减后加。效果是一个样!!! item.canUseTimes += 9999; // 初始值时,凡是声明过的,都增为最大。 }); return new CheckRefWrapper(eleObjs); }; RefCheckUtils_v1.prototype.checkUsedIfOnce = function (obj) { obj.canUseTimes--; // TODO 被使用次数增加,ref值减少。(此处,最好应该使用@注解) }; /** * 基本思路 声明/引用 引用次数,计数器。 * * 1.方式一. * 1.将所有的声明,包起来,放在一个对象里。然后通过对象调用。 * 2.这样的好处是,我们拥有全集的一个对象。 * 2.方式二. * 1.方式二,通过【with】关键字。 * 2.这是基于方式一,对方式一的一种简化、修正。(但是缺陷在于,TypeScript,以及strict模式,并不支持) * 3.方式三. * 1.正在考虑。在Utils类中维护一个全局。 * 2.然后每个调用、被调用方法内,进行处理。 */ RefCheckUtils_v1.prototype.checkRefs = function (usedParams) { if (!usedParams) { throw new Error("v1\u7248\u672C\uFF0C\u9700\u8981usedParams\u3002" + os.EOL + "1.\u8BF7\u5C06\u8BE5\u53C2\u6570\u4F20\u5165" + os.EOL + "2.\u6216\u8005\uFF0C\u91CD\u65B0\u5199\u4E00\u904D\u65B9\u6CD5\u7684\u903B\u8F91"); } // FIXME 此处,似乎只能检查哪些已声明没用过????? 而检查不到,哪些用了但没声明??? // TIP 那么,只能运用【全量表】的思维了。!!!用IDE的提示,来实现。 for (var key in usedParams) { if (usedParams.hasOwnProperty(key)) { var item = usedParams[key]; if (item.canUseTimes < 0) { throw new Error("\u5B58\u5728\u672A\u5728md\u58F0\u660E\uFF0C\u5C31\u5728\u8FDE\u7EBF\u4E2D\u4F7F\u7528\u7684\u60C5\u51B5" + os.EOL + "1." + item.toString()); } } } }; return RefCheckUtils_v1; }()); var CheckRefWrapper = /** @class */ (function () { function CheckRefWrapper(eleObjs) { this.eleObjs = eleObjs; } return CheckRefWrapper; }()); export { CheckRefWrapper }; var RefCheckUtils_v2 = /** @class */ (function () { function RefCheckUtils_v2() { } RefCheckUtils_v2.prototype.collectToCheckRef = function (eleObjs) { RefCheckUtils_v2.declaredObjs = eleObjs; return new CheckRefWrapper(RefCheckUtils_v2.declaredObjs); }; RefCheckUtils_v2.prototype.checkUsedIfOnce = function (obj) { // 如果元素并非【虚拟衍生元素】,并且没有被声明,则抛出异常 if (!obj.__isVirtualEleObj() && !RefCheckUtils_v2.declaredObjs.includes(obj)) { throw new Error("" + obj.toString() + os.EOL + "1.\u8BE5\u5143\u7D20\u6B63\u5728\u88AB\u4F7F\u7528" + os.EOL + "2.\u8BE5\u5143\u7D20\u6CA1\u6709\u88AB\u58F0\u660E"); } }; RefCheckUtils_v2.prototype.checkRefs = function () { // 此处,暂时好像没有什么好检查的。 }; RefCheckUtils_v2.declaredObjs = []; return RefCheckUtils_v2; }()); //# sourceMappingURL=RefCheckUtils.js.map