@cocojs/mvc 0.1.0-beta.13 → 0.1.0-beta.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs.js CHANGED
@@ -621,8 +621,8 @@ function createDecoratorExpFactory(fn) {
621
621
  }
622
622
  case KindMethod:
623
623
  case KindField:
624
- break;
625
624
  case KindGetter:
625
+ break;
626
626
  case KindSetter:
627
627
  case KindAccessor:
628
628
  default:
@@ -632,6 +632,7 @@ function createDecoratorExpFactory(fn) {
632
632
  switch (context.kind) {
633
633
  case KindField:
634
634
  case KindMethod:
635
+ case KindGetter:
635
636
  fn(isPlaceholderExp, this.constructor, {
636
637
  metadataKind: context.kind,
637
638
  metadataClass: MetaClsOrPlaceholderMetaCls,
@@ -717,6 +718,7 @@ var Type;
717
718
  Type[Type["Class"] = KindClass] = "Class";
718
719
  Type[Type["Field"] = KindField] = "Field";
719
720
  Type[Type["Method"] = KindMethod] = "Method";
721
+ Type[Type["Getter"] = KindGetter] = "Getter";
720
722
  })(Type || (Type = {}));
721
723
  /**
722
724
  * @public
@@ -971,6 +973,9 @@ class MetadataRepository {
971
973
  case KindMethod:
972
974
  this.addMethodKindMetadata(beDecoratedCls, field, metadataClass, metadataParam);
973
975
  break;
976
+ case KindGetter:
977
+ this.addGetterKindMetadata(beDecoratedCls, field, metadataClass, metadataParam);
978
+ break;
974
979
  }
975
980
  }
976
981
  }
@@ -994,7 +999,8 @@ class MetadataRepository {
994
999
  config = {
995
1000
  classMetadata: [],
996
1001
  fieldMetadata: new Map(),
997
- methodMetadata: new Map()
1002
+ methodMetadata: new Map(),
1003
+ getterMetadata: new Map()
998
1004
  };
999
1005
  map.set(cls, config);
1000
1006
  }
@@ -1044,6 +1050,22 @@ class MetadataRepository {
1044
1050
  const metadata = instantiateMetadata(MetadataCls, args);
1045
1051
  methodMetas.push(metadata);
1046
1052
  }
1053
+ addGetterKindMetadata(Cls, fieldName, MetadataCls, args) {
1054
+ let config = this.getMetadataByClass(Cls);
1055
+ if (!config) {
1056
+ config = this.addToMap(Cls);
1057
+ }
1058
+ const {
1059
+ getterMetadata
1060
+ } = config;
1061
+ let methodMetas = getterMetadata.get(fieldName);
1062
+ if (!methodMetas) {
1063
+ methodMetas = [];
1064
+ getterMetadata.set(fieldName, methodMetas);
1065
+ }
1066
+ const metadata = instantiateMetadata(MetadataCls, args);
1067
+ methodMetas.push(metadata);
1068
+ }
1047
1069
  /**
1048
1070
  * 获取指定类的类类型的元数据
1049
1071
  * @param beDecoratedCls 指定类
@@ -2084,7 +2106,8 @@ class IocComponentFactory {
2084
2106
  const {
2085
2107
  classMetadata,
2086
2108
  methodMetadata,
2087
- fieldMetadata
2109
+ fieldMetadata,
2110
+ getterMetadata
2088
2111
  } = metadatas;
2089
2112
  for (const meta of classMetadata) {
2090
2113
  const option = getCreateDecoratorOption(meta.constructor);
@@ -2114,6 +2137,17 @@ class IocComponentFactory {
2114
2137
  }
2115
2138
  }
2116
2139
  }
2140
+ for (const [getter, metaList] of getterMetadata.entries()) {
2141
+ for (const meta of metaList) {
2142
+ const option = getCreateDecoratorOption(meta.constructor);
2143
+ if (option) {
2144
+ option.componentPostConstruct.call(component, meta, application, {
2145
+ name: getter,
2146
+ kind: KindGetter
2147
+ });
2148
+ }
2149
+ }
2150
+ }
2117
2151
  }
2118
2152
  return component;
2119
2153
  }
@@ -2859,7 +2893,7 @@ let _Memoized;
2859
2893
  new class extends _identity {
2860
2894
  static [class Memoized extends Metadata {
2861
2895
  static {
2862
- [_Memoized, _initClass$k] = _applyDecs2311(this, [target([Target.Type.Method, Target.Type.Field])], [], 0, void 0, Metadata).c;
2896
+ [_Memoized, _initClass$k] = _applyDecs2311(this, [target([Target.Type.Method, Target.Type.Field, Target.Type.Getter])], [], 0, void 0, Metadata).c;
2863
2897
  }
2864
2898
  }];
2865
2899
  $$id = "Memoized";
@@ -2937,6 +2971,19 @@ var memoized = createDecoratorExp(Memoized, {
2937
2971
  const diagnose = createDiagnose(DiagnoseCode.CO10028, this.constructor.name, name, name, type);
2938
2972
  console.error(stringifyDiagnose(diagnose));
2939
2973
  }
2974
+ } else if (kind === KindGetter) {
2975
+ const descriptor = Object.getOwnPropertyDescriptor(this.constructor.prototype, name);
2976
+ const getter = descriptor?.get;
2977
+ if (typeof getter !== 'function') {
2978
+ console.error("不应该拿不到getter函数");
2979
+ return;
2980
+ }
2981
+ const subscriber = new Subscriber(getter.bind(this));
2982
+ const memoizedGetter = subscriber.memoizedFn;
2983
+ Object.defineProperty(this, name, {
2984
+ ...descriptor,
2985
+ get: memoizedGetter
2986
+ });
2940
2987
  } else ;
2941
2988
  }
2942
2989
  });
@@ -7901,7 +7948,7 @@ let _Route;
7901
7948
  new class extends _identity {
7902
7949
  static [class Route {
7903
7950
  static {
7904
- [_Route, _initClass$6] = _applyDecs2311(this, [store()], []).c;
7951
+ [_Route, _initClass$6] = _applyDecs2311(this, [component()], []).c;
7905
7952
  }
7906
7953
  // window.location.pathname
7907
7954
  pathname;
package/dist/index.d.ts CHANGED
@@ -167,18 +167,21 @@ declare interface BizMetadata {
167
167
  classMetadata: Metadata[];
168
168
  fieldMetadata: Map<Field, Metadata[]>;
169
169
  methodMetadata: Map<Field, Metadata[]>;
170
+ getterMetadata: Map<Field, Metadata[]>;
170
171
  }
171
172
 
172
173
  declare interface BizMetadata_2 {
173
174
  classMetadata: Metadata_2[];
174
175
  fieldMetadata: Map<Field_2, Metadata_2[]>;
175
176
  methodMetadata: Map<Field_2, Metadata_2[]>;
177
+ getterMetadata: Map<Field_2, Metadata_2[]>;
176
178
  }
177
179
 
178
180
  declare interface BizMetadata_3 {
179
181
  classMetadata: Metadata_4[];
180
182
  fieldMetadata: Map<Field_3, Metadata_4[]>;
181
183
  methodMetadata: Map<Field_3, Metadata_4[]>;
184
+ getterMetadata: Map<Field_3, Metadata_4[]>;
182
185
  }
183
186
 
184
187
  /**
@@ -221,7 +224,12 @@ declare type ComponentClassPostConstructFn = (metadata: Metadata, application: A
221
224
  */
222
225
  declare type ComponentFieldPostConstructFn = (metadata: Metadata, application: Application, target: {
223
226
  name: Field;
224
- kind: Kind;
227
+ kind: typeof KindField;
228
+ }) => void;
229
+
230
+ declare type ComponentGetterPostConstructFn = (metadata: Metadata, application: Application, target: {
231
+ name: Field;
232
+ kind: typeof KindGetter;
225
233
  }) => void;
226
234
 
227
235
  declare class ComponentMetadataClass {
@@ -283,10 +291,10 @@ declare class ComponentMetadataClass_3 {
283
291
  */
284
292
  declare type ComponentMethodPostConstructFn = (metadata: Metadata, application: Application, target: {
285
293
  name: Field;
286
- kind: Kind;
294
+ kind: typeof KindMethod;
287
295
  }) => void;
288
296
 
289
- declare type ComponentPostConstruct = ComponentClassPostConstructFn | ComponentMethodPostConstructFn | ComponentFieldPostConstructFn;
297
+ declare type ComponentPostConstruct = ComponentClassPostConstructFn | ComponentMethodPostConstructFn | ComponentFieldPostConstructFn | ComponentGetterPostConstructFn;
290
298
 
291
299
  /**
292
300
  * @public
@@ -760,11 +768,11 @@ declare function jsx(component: any, config: any, maybeKey?: any): {
760
768
  export { jsx }
761
769
  export { jsx as jsxs }
762
770
 
763
- declare type Kind = typeof KindClass | typeof KindField | typeof KindMethod;
771
+ declare type Kind = typeof KindClass | typeof KindField | typeof KindMethod | typeof KindGetter;
764
772
 
765
- declare type Kind_2 = typeof KindClass_2 | typeof KindField_2 | typeof KindMethod_2;
773
+ declare type Kind_2 = typeof KindClass_2 | typeof KindField_2 | typeof KindMethod_2 | typeof KindGetter_2;
766
774
 
767
- declare type Kind_3 = typeof KindClass_3 | typeof KindField_3 | typeof KindMethod_3;
775
+ declare type Kind_3 = typeof KindClass_3 | typeof KindField_3 | typeof KindMethod_3 | typeof KindGetter_3;
768
776
 
769
777
  export declare const KindClass = "class";
770
778
 
@@ -778,6 +786,12 @@ declare const KindField_2 = "field";
778
786
 
779
787
  declare const KindField_3 = "field";
780
788
 
789
+ declare const KindGetter = "getter";
790
+
791
+ declare const KindGetter_2 = "getter";
792
+
793
+ declare const KindGetter_3 = "getter";
794
+
781
795
  export declare const KindMethod = "method";
782
796
 
783
797
  declare const KindMethod_2 = "method";
@@ -854,11 +868,13 @@ declare class MetadataRepository {
854
868
  classMetadata: Metadata[];
855
869
  fieldMetadata?: Map<Field, Metadata[]>;
856
870
  methodMetadata?: Map<Field, Metadata[]>;
871
+ getterMetadata?: Map<Field, Metadata[]>;
857
872
  };
858
873
  private addToMap;
859
874
  addClassKindMetadata(cls: Class<any>, MetadataCls?: Class<Metadata>, args?: any): void;
860
875
  addFieldKindMetadata(Cls: Class<any>, fieldName: Field, MetadataCls: Class<Metadata>, args?: any): void;
861
876
  addMethodKindMetadata(Cls: Class<any>, fieldName: Field, MetadataCls: Class<Metadata>, args?: any): void;
877
+ addGetterKindMetadata(Cls: Class<any>, fieldName: Field, MetadataCls: Class<Metadata>, args?: any): void;
862
878
  /**
863
879
  * 获取指定类的类类型的元数据
864
880
  * @param beDecoratedCls 指定类
@@ -911,11 +927,13 @@ declare class MetadataRepository_2 {
911
927
  classMetadata: Metadata_2[];
912
928
  fieldMetadata?: Map<Field_2, Metadata_2[]>;
913
929
  methodMetadata?: Map<Field_2, Metadata_2[]>;
930
+ getterMetadata?: Map<Field_2, Metadata_2[]>;
914
931
  };
915
932
  private addToMap;
916
933
  addClassKindMetadata(cls: Class<any>, MetadataCls?: Class<Metadata_2>, args?: any): void;
917
934
  addFieldKindMetadata(Cls: Class<any>, fieldName: Field_2, MetadataCls: Class<Metadata_2>, args?: any): void;
918
935
  addMethodKindMetadata(Cls: Class<any>, fieldName: Field_2, MetadataCls: Class<Metadata_2>, args?: any): void;
936
+ addGetterKindMetadata(Cls: Class<any>, fieldName: Field_2, MetadataCls: Class<Metadata_2>, args?: any): void;
919
937
  /**
920
938
  * 获取指定类的类类型的元数据
921
939
  * @param beDecoratedCls 指定类
@@ -968,11 +986,13 @@ declare class MetadataRepository_3 {
968
986
  classMetadata: Metadata_4[];
969
987
  fieldMetadata?: Map<Field_3, Metadata_4[]>;
970
988
  methodMetadata?: Map<Field_3, Metadata_4[]>;
989
+ getterMetadata?: Map<Field_3, Metadata_4[]>;
971
990
  };
972
991
  private addToMap;
973
992
  addClassKindMetadata(cls: Class<any>, MetadataCls?: Class<Metadata_4>, args?: any): void;
974
993
  addFieldKindMetadata(Cls: Class<any>, fieldName: Field_3, MetadataCls: Class<Metadata_4>, args?: any): void;
975
994
  addMethodKindMetadata(Cls: Class<any>, fieldName: Field_3, MetadataCls: Class<Metadata_4>, args?: any): void;
995
+ addGetterKindMetadata(Cls: Class<any>, fieldName: Field_3, MetadataCls: Class<Metadata_4>, args?: any): void;
976
996
  /**
977
997
  * 获取指定类的类类型的元数据
978
998
  * @param beDecoratedCls 指定类
@@ -1019,18 +1039,21 @@ declare interface MetaMetadata {
1019
1039
  classMetadata: Metadata[];
1020
1040
  fieldMetadata: Map<Field, Metadata[]>;
1021
1041
  methodMetadata: Map<Field, Metadata[]>;
1042
+ getterMetadata: Map<Field, Metadata[]>;
1022
1043
  }
1023
1044
 
1024
1045
  declare interface MetaMetadata_2 {
1025
1046
  classMetadata: Metadata_2[];
1026
1047
  fieldMetadata: Map<Field_2, Metadata_2[]>;
1027
1048
  methodMetadata: Map<Field_2, Metadata_2[]>;
1049
+ getterMetadata: Map<Field_2, Metadata_2[]>;
1028
1050
  }
1029
1051
 
1030
1052
  declare interface MetaMetadata_3 {
1031
1053
  classMetadata: Metadata_4[];
1032
1054
  fieldMetadata: Map<Field_3, Metadata_4[]>;
1033
1055
  methodMetadata: Map<Field_3, Metadata_4[]>;
1056
+ getterMetadata: Map<Field_3, Metadata_4[]>;
1034
1057
  }
1035
1058
 
1036
1059
  /**
@@ -1267,7 +1290,8 @@ export declare const target: DecoratorExpWithDecoratorSelf<Type[]>;
1267
1290
  export declare enum Type {
1268
1291
  Class = "class",
1269
1292
  Field = "field",
1270
- Method = "method"
1293
+ Method = "method",
1294
+ Getter = "getter"
1271
1295
  }
1272
1296
 
1273
1297
  /**
package/dist/index.esm.js CHANGED
@@ -619,8 +619,8 @@ function createDecoratorExpFactory(fn) {
619
619
  }
620
620
  case KindMethod:
621
621
  case KindField:
622
- break;
623
622
  case KindGetter:
623
+ break;
624
624
  case KindSetter:
625
625
  case KindAccessor:
626
626
  default:
@@ -630,6 +630,7 @@ function createDecoratorExpFactory(fn) {
630
630
  switch (context.kind) {
631
631
  case KindField:
632
632
  case KindMethod:
633
+ case KindGetter:
633
634
  fn(isPlaceholderExp, this.constructor, {
634
635
  metadataKind: context.kind,
635
636
  metadataClass: MetaClsOrPlaceholderMetaCls,
@@ -715,6 +716,7 @@ var Type;
715
716
  Type[Type["Class"] = KindClass] = "Class";
716
717
  Type[Type["Field"] = KindField] = "Field";
717
718
  Type[Type["Method"] = KindMethod] = "Method";
719
+ Type[Type["Getter"] = KindGetter] = "Getter";
718
720
  })(Type || (Type = {}));
719
721
  /**
720
722
  * @public
@@ -969,6 +971,9 @@ class MetadataRepository {
969
971
  case KindMethod:
970
972
  this.addMethodKindMetadata(beDecoratedCls, field, metadataClass, metadataParam);
971
973
  break;
974
+ case KindGetter:
975
+ this.addGetterKindMetadata(beDecoratedCls, field, metadataClass, metadataParam);
976
+ break;
972
977
  }
973
978
  }
974
979
  }
@@ -992,7 +997,8 @@ class MetadataRepository {
992
997
  config = {
993
998
  classMetadata: [],
994
999
  fieldMetadata: new Map(),
995
- methodMetadata: new Map()
1000
+ methodMetadata: new Map(),
1001
+ getterMetadata: new Map()
996
1002
  };
997
1003
  map.set(cls, config);
998
1004
  }
@@ -1042,6 +1048,22 @@ class MetadataRepository {
1042
1048
  const metadata = instantiateMetadata(MetadataCls, args);
1043
1049
  methodMetas.push(metadata);
1044
1050
  }
1051
+ addGetterKindMetadata(Cls, fieldName, MetadataCls, args) {
1052
+ let config = this.getMetadataByClass(Cls);
1053
+ if (!config) {
1054
+ config = this.addToMap(Cls);
1055
+ }
1056
+ const {
1057
+ getterMetadata
1058
+ } = config;
1059
+ let methodMetas = getterMetadata.get(fieldName);
1060
+ if (!methodMetas) {
1061
+ methodMetas = [];
1062
+ getterMetadata.set(fieldName, methodMetas);
1063
+ }
1064
+ const metadata = instantiateMetadata(MetadataCls, args);
1065
+ methodMetas.push(metadata);
1066
+ }
1045
1067
  /**
1046
1068
  * 获取指定类的类类型的元数据
1047
1069
  * @param beDecoratedCls 指定类
@@ -2082,7 +2104,8 @@ class IocComponentFactory {
2082
2104
  const {
2083
2105
  classMetadata,
2084
2106
  methodMetadata,
2085
- fieldMetadata
2107
+ fieldMetadata,
2108
+ getterMetadata
2086
2109
  } = metadatas;
2087
2110
  for (const meta of classMetadata) {
2088
2111
  const option = getCreateDecoratorOption(meta.constructor);
@@ -2112,6 +2135,17 @@ class IocComponentFactory {
2112
2135
  }
2113
2136
  }
2114
2137
  }
2138
+ for (const [getter, metaList] of getterMetadata.entries()) {
2139
+ for (const meta of metaList) {
2140
+ const option = getCreateDecoratorOption(meta.constructor);
2141
+ if (option) {
2142
+ option.componentPostConstruct.call(component, meta, application, {
2143
+ name: getter,
2144
+ kind: KindGetter
2145
+ });
2146
+ }
2147
+ }
2148
+ }
2115
2149
  }
2116
2150
  return component;
2117
2151
  }
@@ -2857,7 +2891,7 @@ let _Memoized;
2857
2891
  new class extends _identity {
2858
2892
  static [class Memoized extends Metadata {
2859
2893
  static {
2860
- [_Memoized, _initClass$k] = _applyDecs2311(this, [target([Target.Type.Method, Target.Type.Field])], [], 0, void 0, Metadata).c;
2894
+ [_Memoized, _initClass$k] = _applyDecs2311(this, [target([Target.Type.Method, Target.Type.Field, Target.Type.Getter])], [], 0, void 0, Metadata).c;
2861
2895
  }
2862
2896
  }];
2863
2897
  $$id = "Memoized";
@@ -2935,6 +2969,19 @@ var memoized = createDecoratorExp(Memoized, {
2935
2969
  const diagnose = createDiagnose(DiagnoseCode.CO10028, this.constructor.name, name, name, type);
2936
2970
  console.error(stringifyDiagnose(diagnose));
2937
2971
  }
2972
+ } else if (kind === KindGetter) {
2973
+ const descriptor = Object.getOwnPropertyDescriptor(this.constructor.prototype, name);
2974
+ const getter = descriptor?.get;
2975
+ if (typeof getter !== 'function') {
2976
+ console.error("不应该拿不到getter函数");
2977
+ return;
2978
+ }
2979
+ const subscriber = new Subscriber(getter.bind(this));
2980
+ const memoizedGetter = subscriber.memoizedFn;
2981
+ Object.defineProperty(this, name, {
2982
+ ...descriptor,
2983
+ get: memoizedGetter
2984
+ });
2938
2985
  } else ;
2939
2986
  }
2940
2987
  });
@@ -7899,7 +7946,7 @@ let _Route;
7899
7946
  new class extends _identity {
7900
7947
  static [class Route {
7901
7948
  static {
7902
- [_Route, _initClass$6] = _applyDecs2311(this, [store()], []).c;
7949
+ [_Route, _initClass$6] = _applyDecs2311(this, [component()], []).c;
7903
7950
  }
7904
7951
  // window.location.pathname
7905
7952
  pathname;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cocojs/mvc",
3
- "version": "0.1.0-beta.13",
3
+ "version": "0.1.0-beta.14",
4
4
  "description": "由装饰器驱动,快速构建可扩展的 Web 应用。",
5
5
  "main": "dist/index.cjs.js",
6
6
  "module": "dist/index.esm.js",