| @@ -5,5 +5,9 | |||
| 
             | 
        5 | 5 | "**/.project": true, | 
| 
             | 
        6 | 6 | "**/.settings": true, | 
| 
             | 
        7 | 7 | "**/.factorypath": true | 
| 
             | 
        8 | } | |
| 
             | 
        8 | }, | |
| 
             | 
        9 | "cSpell.words": [ | |
| 
             | 
        10 | "djbase", | |
| 
             | 
        11 | "djclass" | |
| 
             | 
        12 | ] | |
| 
             | 
        9 | 13 | } No newline at end of file | 
| @@ -859,6 +859,12 | |||
| 
             | 
        859 | 859 | "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", | 
| 
             | 
        860 | 860 | "dev": true | 
| 
             | 
        861 | 861 | }, | 
| 
             | 
        862 | "requirejs": { | |
| 
             | 
        863 | "version": "2.3.6", | |
| 
             | 
        864 | "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz", | |
| 
             | 
        865 | "integrity": "sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==", | |
| 
             | 
        866 | "dev": true | |
| 
             | 
        867 | }, | |
| 
             | 
        862 | 868 | "resolve": { | 
| 
             | 
        863 | 869 | "version": "1.17.0", | 
| 
             | 
        864 | 870 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", | 
| @@ -29,6 +29,7 | |||
| 
             | 
        29 | 29 | "eslint": "6.8.0", | 
| 
             | 
        30 | 30 | "tslint": "^6.1.3", | 
| 
             | 
        31 | 31 | "typescript": "4.0.2", | 
| 
             | 
        32 | "yaml": "~1.7.2" | |
| 
             | 
        32 | "yaml": "~1.7.2", | |
| 
             | 
        33 | "requirejs": "2.3.6" | |
| 
             | 
        33 | 34 | } | 
| 
             | 
        34 | 35 | } | 
| @@ -14,11 +14,11 export interface AbstractConstructor<T = | |||
| 
             | 
        14 | 14 | interface DjMockConstructor<T = {}> { | 
| 
             | 
        15 | 15 | new(...args: any[]): T; | 
| 
             | 
        16 | 16 | mock: boolean; | 
| 
             | 
        17 | base: AbstractConstructor; | |
| 
             | 
        17 | bases: AbstractConstructor[]; | |
| 
             | 
        18 | 18 | } | 
| 
             | 
        19 | 19 | |
| 
             | 
        20 | 20 | export function djbase<T>( | 
| 
             | 
        21 | b0: AbstractConstructor<T> | |
| 
             | 
        21 | b0?: AbstractConstructor<T> | |
| 
             | 
        22 | 22 | ): DeclareConstructor<T>; | 
| 
             | 
        23 | 23 | |
| 
             | 
        24 | 24 | export function djbase<T0, T1>( | 
| @@ -96,11 +96,11 export function djbase(...bases: any[]): | |||
| 
             | 
        96 | 96 | |
| 
             | 
        97 | 97 | const t = class { | 
| 
             | 
        98 | 98 | static mock: boolean; | 
| 
             | 
        99 | static base: AbstractConstructor; | |
| 
             | 
        99 | static bases: AbstractConstructor[]; | |
| 
             | 
        100 | 100 | }; | 
| 
             | 
        101 | 101 | |
| 
             | 
        102 | 102 | t.mock = true; | 
| 
             | 
        103 | 
            
                 t.base =  | 
    |
| 
             | 
        103 | t.bases = bases; | |
| 
             | 
        104 | 104 | |
| 
             | 
        105 | 105 | return t as any; | 
| 
             | 
        106 | 106 | } | 
| @@ -122,7 +122,9 export function djclass<T extends Abstra | |||
| 
             | 
        122 | 122 | // проверка того, что класс унаследован от специальной заглушки | 
| 
             | 
        123 | 123 | if (isMockConstructor(bc)) { | 
| 
             | 
        124 | 124 | // t - базовый класс, объявленный при помощи dojo/_base/declare | 
| 
             | 
        125 | const t = bc.base; | |
| 
             | 
        125 | const t = bc.bases; | |
| 
             | 
        126 | ||
| 
             | 
        127 | const cls = declare(bc.bases, target.prototype); | |
| 
             | 
        126 | 128 | |
| 
             | 
        127 | 129 | // bc - базовый класс, bc.prototype используется как super | 
| 
             | 
        128 | 130 | // при вызове базовых методов. Нужно создать bc.prototype | 
| @@ -132,7 +134,7 export function djclass<T extends Abstra | |||
| 
             | 
        132 | 134 | // класса, но super.some_method будет использовать именно его. | 
| 
             | 
        133 | 135 | // в этом объекте будут размещены прокси для переопределенных | 
| 
             | 
        134 | 136 | // методов. | 
| 
             | 
        135 | 
            
                     bp = bc.prototype = Object.create( | 
    |
| 
             | 
        137 | bp = bc.prototype = Object.create(cls.prototype); | |
| 
             | 
        136 | 138 | bp.constructor = bc; | 
| 
             | 
        137 | 139 | |
| 
             | 
        138 | 140 | // proxy - фабрика для создания прокси-методов, которые внутри | 
| @@ -153,14 +155,12 export function djclass<T extends Abstra | |||
| 
             | 
        153 | 155 | each(target.prototype, (m: any, p: string | number | symbol) => { | 
| 
             | 
        154 | 156 | if (typeof m === "function" && | 
| 
             | 
        155 | 157 | p !== "constructor" && | 
| 
             | 
        156 | 
            
                             target.prototype.hasOwnProperty(p) | 
    |
| 
             | 
        157 | p in t.prototype | |
| 
             | 
        158 | target.prototype.hasOwnProperty(p) | |
| 
             | 
        158 | 159 | ) { | 
| 
             | 
        159 | 160 | bp[p] = proxy(m); | 
| 
             | 
        160 | 161 | } | 
| 
             | 
        161 | 162 | }); | 
| 
             | 
        162 | 163 | |
| 
             | 
        163 | const cls = declare(t, target.prototype); | |
| 
             | 
        164 | 164 | // TODO mixin static members | 
| 
             | 
        165 | 165 | return cls as any; | 
| 
             | 
        166 | 166 | } else { | 
        
        General Comments 0
    
    
  
  
                      You need to be logged in to leave comments.
                      Login now
                    
                