@akanjs/constant 0.9.47 → 0.9.49

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.
Files changed (44) hide show
  1. package/cjs/src/baseGql.js +124 -122
  2. package/cjs/src/classMeta.js +12 -117
  3. package/cjs/src/constantInfo.js +145 -0
  4. package/cjs/src/crystalize.js +89 -0
  5. package/cjs/src/default.js +67 -0
  6. package/cjs/src/fieldInfo.js +98 -0
  7. package/cjs/src/immerify.js +35 -0
  8. package/cjs/src/index.js +6 -11
  9. package/cjs/src/purify.js +110 -0
  10. package/cjs/src/scalar.js +8 -12
  11. package/cjs/src/serialize.js +116 -0
  12. package/esm/src/baseGql.js +129 -132
  13. package/esm/src/classMeta.js +13 -118
  14. package/esm/src/constantInfo.js +126 -0
  15. package/esm/src/crystalize.js +78 -0
  16. package/esm/src/default.js +48 -0
  17. package/esm/src/fieldInfo.js +88 -0
  18. package/esm/src/immerify.js +16 -0
  19. package/esm/src/index.js +6 -7
  20. package/esm/src/purify.js +99 -0
  21. package/esm/src/scalar.js +8 -12
  22. package/esm/src/serialize.js +106 -0
  23. package/package.json +2 -1
  24. package/src/baseGql.d.ts +8 -4
  25. package/src/classMeta.d.ts +5 -21
  26. package/src/constantInfo.d.ts +69 -0
  27. package/src/crystalize.d.ts +6 -0
  28. package/src/default.d.ts +6 -0
  29. package/src/fieldInfo.d.ts +37 -0
  30. package/src/immerify.d.ts +2 -0
  31. package/src/index.d.ts +6 -5
  32. package/src/purify.d.ts +14 -0
  33. package/src/scalar.d.ts +16 -46
  34. package/src/serialize.d.ts +7 -0
  35. package/src/types.d.ts +3 -23
  36. package/cjs/src/constantDecorator.js +0 -67
  37. package/cjs/src/fieldMeta.js +0 -82
  38. package/cjs/src/filterMeta.js +0 -196
  39. package/esm/src/constantDecorator.js +0 -48
  40. package/esm/src/fieldMeta.js +0 -67
  41. package/esm/src/filterMeta.js +0 -181
  42. package/src/constantDecorator.d.ts +0 -30
  43. package/src/fieldMeta.d.ts +0 -7
  44. package/src/filterMeta.d.ts +0 -61
@@ -17,7 +17,6 @@ var __copyProps = (to, from, except, desc) => {
17
17
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
18
  var baseGql_exports = {};
19
19
  __export(baseGql_exports, {
20
- as: () => as,
21
20
  via: () => via
22
21
  });
23
22
  module.exports = __toCommonJS(baseGql_exports);
@@ -25,7 +24,8 @@ var import_reflect_metadata = require("reflect-metadata");
25
24
  var import_base = require("@akanjs/base");
26
25
  var import_common = require("@akanjs/common");
27
26
  var import_classMeta = require("./classMeta");
28
- var import_filterMeta = require("./filterMeta");
27
+ var import_constantInfo = require("./constantInfo");
28
+ var import_fieldInfo = require("./fieldInfo");
29
29
  var import_scalar = require("./scalar");
30
30
  const defaultFieldMeta = {
31
31
  fieldType: "property",
@@ -41,162 +41,164 @@ const defaultFieldMeta = {
41
41
  isMap: false,
42
42
  meta: {}
43
43
  };
44
- const idFieldMeta = { ...defaultFieldMeta, key: "id", name: "ID", modelRef: import_base.ID };
45
- const createdAtFieldMeta = { ...defaultFieldMeta, key: "createdAt", name: "Date", modelRef: Date };
46
- const updatedAtFieldMeta = { ...defaultFieldMeta, key: "updatedAt", name: "Date", modelRef: Date };
47
- const removedAtFieldMeta = {
48
- ...defaultFieldMeta,
49
- key: "removedAt",
50
- name: "Date",
51
- modelRef: Date,
52
- nullable: true,
53
- default: null
54
- };
55
- const extendModel = (modelRef) => {
56
- class BaseModel {
57
- }
58
- const metadataMap = (0, import_scalar.getFieldMetaMap)(modelRef);
59
- (0, import_scalar.setFieldMetaMap)(BaseModel, metadataMap);
60
- return BaseModel;
61
- };
62
- const as = extendModel;
63
- const baseModelOf = (modelRef) => {
64
- class BaseModel {
65
- __ModelType__ = "full";
44
+ const baseFieldMetaMap = /* @__PURE__ */ new Map([
45
+ ["id", { ...defaultFieldMeta, key: "id", modelRef: import_base.ID }],
46
+ ["createdAt", { ...defaultFieldMeta, key: "createdAt", modelRef: Date }],
47
+ ["updatedAt", { ...defaultFieldMeta, key: "updatedAt", modelRef: Date }],
48
+ ["removedAt", { ...defaultFieldMeta, key: "removedAt", modelRef: Date, nullable: true, default: null }]
49
+ ]);
50
+ const baseInsightFieldMetaMap = /* @__PURE__ */ new Map([
51
+ ["count", { ...defaultFieldMeta, key: "count", modelRef: import_base.Int, default: 0, accumulate: { $sum: 1 } }]
52
+ ]);
53
+ const objectModelOf = (inputRef, fieldMap) => {
54
+ class ObjectModel {
66
55
  }
67
- const metadataMap = new Map((0, import_scalar.getFieldMetaMap)(modelRef));
68
- metadataMap.set("id", idFieldMeta);
69
- metadataMap.set("createdAt", createdAtFieldMeta);
70
- metadataMap.set("updatedAt", updatedAtFieldMeta);
71
- metadataMap.set("removedAt", removedAtFieldMeta);
72
- Reflect.defineMetadata("fields", metadataMap, BaseModel.prototype);
73
- return BaseModel;
56
+ const metadataMap = new Map([...baseFieldMetaMap, ...(0, import_scalar.getFieldMetaMap)(inputRef)]);
57
+ (0, import_scalar.setFieldMetaMap)(ObjectModel, metadataMap);
58
+ (0, import_classMeta.setExtendRef)(ObjectModel, inputRef);
59
+ import_constantInfo.constantInfo.setModelType(ObjectModel, "object");
60
+ Object.entries(fieldMap).forEach(([key, fieldInfo]) => {
61
+ fieldInfo.applyFieldMeta(ObjectModel, key);
62
+ });
63
+ return ObjectModel;
74
64
  };
75
- const lightModelOf = (objectRef, fields, ...libLightModelRefs) => {
65
+ const lightModelOf = (objectRef, fields, fieldMap, ...libLightModelRefs) => {
76
66
  const objectFieldMetaMap = (0, import_scalar.getFieldMetaMap)(objectRef);
77
67
  const baseLightModelRef = libLightModelRefs.at(0);
78
- const fieldMetaMap = baseLightModelRef ? (0, import_scalar.getFieldMetaMap)(baseLightModelRef) : /* @__PURE__ */ new Map();
68
+ const fieldMetaMap = baseLightModelRef ? (0, import_scalar.getFieldMetaMap)(baseLightModelRef) : new Map([...baseFieldMetaMap]);
79
69
  class BaseLightModel {
80
- __ModelType__ = "light";
81
70
  }
82
- fieldMetaMap.set("id", idFieldMeta);
83
- fieldMetaMap.set("createdAt", createdAtFieldMeta);
84
- fieldMetaMap.set("updatedAt", updatedAtFieldMeta);
85
- fieldMetaMap.set("removedAt", removedAtFieldMeta);
86
- for (const field of fields) {
87
- const fieldMeta = objectFieldMetaMap.get(field);
71
+ for (const field2 of fields) {
72
+ const fieldMeta = objectFieldMetaMap.get(field2);
88
73
  if (!fieldMeta)
89
- throw new Error(`Field ${field} not found in objectRef`);
90
- fieldMetaMap.set(field, fieldMeta);
74
+ throw new Error(`Field ${field2} not found in objectRef`);
75
+ fieldMetaMap.set(field2, fieldMeta);
91
76
  }
92
77
  (0, import_common.applyMixins)(BaseLightModel, libLightModelRefs);
93
- Reflect.defineMetadata("fields", fieldMetaMap, BaseLightModel.prototype);
78
+ (0, import_scalar.setFieldMetaMap)(BaseLightModel, fieldMetaMap);
79
+ (0, import_classMeta.setExtendRef)(BaseLightModel, objectRef);
80
+ import_constantInfo.constantInfo.setModelType(BaseLightModel, "light");
81
+ Object.entries(fieldMap).forEach(([key, fieldInfo]) => {
82
+ fieldInfo.applyFieldMeta(BaseLightModel, key);
83
+ });
94
84
  return BaseLightModel;
95
85
  };
96
- const fullModelOf = (modelRef, lightRef, ...libFullModelRefs) => {
97
- const modelFieldMetaMap = (0, import_scalar.getFieldMetaMap)(modelRef);
98
- const lightFieldMetaMap = (0, import_scalar.getFieldMetaMap)(lightRef);
99
- (0, import_common.applyMixins)(modelRef, [...libFullModelRefs, lightRef]);
86
+ const fullModelOf = (objectRef, lightRef, fieldMap, ...libFullModelRefs) => {
87
+ const fullRef = libFullModelRefs.at(0) ?? class FullModel {
88
+ };
89
+ const fieldMetaMap = new Map([...(0, import_scalar.getFieldMetaMap)(objectRef), ...(0, import_scalar.getFieldMetaMap)(lightRef)]);
90
+ (0, import_common.applyMixins)(fullRef, [objectRef, lightRef, ...libFullModelRefs]);
100
91
  libFullModelRefs.forEach((libFullModelRef) => {
101
- (0, import_common.applyMixins)(libFullModelRef, [lightRef, modelRef]);
92
+ (0, import_common.applyMixins)(libFullModelRef, [objectRef, lightRef]);
93
+ });
94
+ (0, import_scalar.setFieldMetaMap)(fullRef, fieldMetaMap);
95
+ (0, import_classMeta.setExtendRef)(fullRef, objectRef);
96
+ import_constantInfo.constantInfo.setModelType(fullRef, "full");
97
+ Object.entries(fieldMap).forEach(([key, fieldInfo]) => {
98
+ fieldInfo.applyFieldMeta(fullRef, key);
102
99
  });
103
- lightFieldMetaMap.forEach((value, key) => modelFieldMetaMap.set(key, value));
104
- return modelRef;
100
+ return fullRef;
105
101
  };
106
- function via(modelRef, fieldsOrLightModelRef, ...fullOrLightModelRefs) {
107
- const classMeta = (0, import_scalar.getClassMeta)(modelRef);
108
- if (!fieldsOrLightModelRef) {
109
- if (classMeta.type === "input") {
110
- const objectRefName = classMeta.refName.slice(0, -5) + "Object";
111
- const isFullModelRefDefined = (0, import_classMeta.getFullModelRefs)(objectRefName).length > 0;
112
- if (isFullModelRefDefined)
113
- return extendModelInputs(modelRef);
114
- else
115
- return baseModelOf(modelRef);
116
- } else if (classMeta.modelType === "insight")
117
- return extendModelInsights(modelRef);
118
- else
119
- throw new Error("Invalid modelRef args");
102
+ const makeBaseScalar = (fieldMap) => {
103
+ class BaseScalar {
120
104
  }
121
- if (Array.isArray(fieldsOrLightModelRef))
122
- return lightModelOf(modelRef, fieldsOrLightModelRef, ...fullOrLightModelRefs);
123
- const secondArgModelRef = fieldsOrLightModelRef;
124
- const secondArgClassMeta = (0, import_scalar.getClassMeta)(secondArgModelRef);
125
- if (classMeta.type === "input") {
126
- if (secondArgClassMeta.type === "input")
127
- return extendModelInputs(modelRef, secondArgModelRef, ...fullOrLightModelRefs);
128
- else if (secondArgClassMeta.type === "full")
129
- return extendModelObjects(modelRef, secondArgModelRef, ...fullOrLightModelRefs);
130
- else
131
- throw new Error("Invalid modelRef args");
132
- } else if (classMeta.type === "full") {
133
- if (secondArgClassMeta.type === "light")
134
- return fullModelOf(modelRef, secondArgModelRef, ...fullOrLightModelRefs);
105
+ import_constantInfo.constantInfo.setModelType(BaseScalar, "scalar");
106
+ Object.entries(fieldMap).forEach(([key, fieldInfo]) => {
107
+ fieldInfo.applyFieldMeta(BaseScalar, key);
108
+ });
109
+ return BaseScalar;
110
+ };
111
+ function via(firstRefOrBuildField, secondRefOrFieldsOrBuildField, thirdRefOrResolveField, ...extendRefs) {
112
+ if (!firstRefOrBuildField.prototype || !import_constantInfo.constantInfo.getModelType(firstRefOrBuildField, { allowEmpty: true })) {
113
+ const buildField = firstRefOrBuildField;
114
+ const fieldMap = buildField(import_fieldInfo.field);
115
+ const extendInputRefs = [
116
+ ...secondRefOrFieldsOrBuildField ? [secondRefOrFieldsOrBuildField] : [],
117
+ ...thirdRefOrResolveField ? [thirdRefOrResolveField] : [],
118
+ ...extendRefs
119
+ ];
120
+ if (!secondRefOrFieldsOrBuildField)
121
+ return makeBaseScalar(fieldMap);
135
122
  else
136
- throw new Error("Invalid modelRef args");
137
- } else if (classMeta.modelType === "insight")
138
- return extendModelInsights(modelRef, secondArgModelRef, ...fullOrLightModelRefs);
139
- else
140
- throw new Error("Invalid modelRef");
123
+ return extendModelInputs(fieldMap, ...extendInputRefs);
124
+ }
125
+ if (Array.isArray(secondRefOrFieldsOrBuildField)) {
126
+ const resolveField = thirdRefOrResolveField;
127
+ const fieldMap = resolveField(import_fieldInfo.resolve);
128
+ return lightModelOf(
129
+ firstRefOrBuildField,
130
+ secondRefOrFieldsOrBuildField,
131
+ fieldMap,
132
+ ...extendRefs
133
+ );
134
+ }
135
+ if (!secondRefOrFieldsOrBuildField.prototype || !import_constantInfo.constantInfo.getModelType(secondRefOrFieldsOrBuildField, { allowEmpty: true })) {
136
+ const buildField = secondRefOrFieldsOrBuildField;
137
+ const fieldMap = buildField(import_fieldInfo.field);
138
+ if (import_constantInfo.constantInfo.isScalar(firstRefOrBuildField)) {
139
+ if (!thirdRefOrResolveField)
140
+ return objectModelOf(firstRefOrBuildField, fieldMap);
141
+ else
142
+ return extendModelObjects(
143
+ firstRefOrBuildField,
144
+ fieldMap,
145
+ thirdRefOrResolveField,
146
+ ...extendRefs
147
+ );
148
+ }
149
+ if (import_constantInfo.constantInfo.isFull(firstRefOrBuildField)) {
150
+ const extendInsightRefs = [
151
+ ...thirdRefOrResolveField ? [thirdRefOrResolveField] : [],
152
+ ...extendRefs
153
+ ];
154
+ return extendModelInsights(fieldMap, ...extendInsightRefs);
155
+ }
156
+ } else {
157
+ const objectRef = firstRefOrBuildField;
158
+ const lightRef = secondRefOrFieldsOrBuildField;
159
+ const resolveField = thirdRefOrResolveField;
160
+ const fieldMap = resolveField(import_fieldInfo.resolve);
161
+ return fullModelOf(objectRef, lightRef, fieldMap, ...extendRefs);
162
+ }
163
+ throw new Error(
164
+ `Invalid modelRef args ${firstRefOrBuildField} ${secondRefOrFieldsOrBuildField} ${extendRefs.join(", ")}`
165
+ );
141
166
  }
142
- const extendModelInputs = (...libInputModelRefs) => {
167
+ const extendModelInputs = (fieldMap, ...libInputModelRefs) => {
143
168
  const baseInputModelRef = libInputModelRefs.at(0);
144
169
  const fieldMetaMap = baseInputModelRef ? (0, import_scalar.getFieldMetaMap)(baseInputModelRef) : /* @__PURE__ */ new Map();
145
170
  class BaseInput {
146
- __ModelType__ = "input";
147
171
  }
148
172
  (0, import_scalar.setFieldMetaMap)(BaseInput, fieldMetaMap);
173
+ import_constantInfo.constantInfo.setModelType(BaseInput, "scalar");
174
+ Object.entries(fieldMap).forEach(([key, fieldInfo]) => {
175
+ fieldInfo.applyFieldMeta(BaseInput, key);
176
+ });
149
177
  return BaseInput;
150
178
  };
151
- const extendModelObjects = (inputRef, ...libObjectModelRefs) => {
179
+ const extendModelObjects = (inputRef, fieldMap, ...libObjectModelRefs) => {
152
180
  const baseObjectModelRef = libObjectModelRefs.at(0);
153
181
  const inputFieldMetaMap = (0, import_scalar.getFieldMetaMap)(inputRef);
154
182
  const fieldMetaMap = baseObjectModelRef ? (0, import_scalar.getFieldMetaMap)(baseObjectModelRef) : /* @__PURE__ */ new Map();
155
183
  class BaseInput {
156
- __ModelType__ = "object";
157
184
  }
158
185
  inputFieldMetaMap.forEach((value, key) => fieldMetaMap.set(key, value));
159
186
  (0, import_scalar.setFieldMetaMap)(BaseInput, fieldMetaMap);
187
+ import_constantInfo.constantInfo.setModelType(BaseInput, "object");
188
+ Object.entries(fieldMap).forEach(([key, fieldInfo]) => {
189
+ fieldInfo.applyFieldMeta(BaseInput, key);
190
+ });
160
191
  return BaseInput;
161
192
  };
162
- const extendModelInsights = (...insightModelRefs) => {
193
+ const extendModelInsights = (fieldMap, ...insightModelRefs) => {
163
194
  const baseInsightModelRef = insightModelRefs.at(0);
164
- const insightFieldMetaMap = baseInsightModelRef ? (0, import_scalar.getFieldMetaMap)(baseInsightModelRef) : /* @__PURE__ */ new Map();
195
+ const insightFieldMetaMap = baseInsightModelRef ? (0, import_scalar.getFieldMetaMap)(baseInsightModelRef) : new Map([...baseInsightFieldMetaMap]);
165
196
  class BaseInsight {
166
- __ModelType__ = "insight";
167
197
  }
168
198
  (0, import_scalar.setFieldMetaMap)(BaseInsight, insightFieldMetaMap);
199
+ import_constantInfo.constantInfo.setModelType(BaseInsight, "insight");
200
+ Object.entries(fieldMap).forEach(([key, fieldInfo]) => {
201
+ fieldInfo.applyFieldMeta(BaseInsight, key);
202
+ });
169
203
  return BaseInsight;
170
204
  };
171
- const addModelOf = (modelRef, ...types) => {
172
- const modelMetadataMap = (0, import_scalar.getFieldMetaMap)(modelRef);
173
- const metadataMap = types.reduce((acc, writeRef) => {
174
- const writeMetadataMap = (0, import_scalar.getFieldMetaMap)(writeRef);
175
- (0, import_common.applyMixins)(modelRef, [writeRef]);
176
- return new Map([...acc, ...writeMetadataMap]);
177
- }, modelMetadataMap);
178
- (0, import_scalar.setFieldMetaMap)(modelRef, metadataMap);
179
- return modelRef;
180
- };
181
- const addFilterOf = (filterRef, ...types) => {
182
- const filterMeta = (0, import_filterMeta.getFilterMeta)(filterRef);
183
- const filterQueryMap = (0, import_filterMeta.getFilterQueryMap)(filterRef);
184
- const metadataMap = new Map(
185
- types.reduce((acc, writeRef) => {
186
- const writeMetadataMap = (0, import_filterMeta.getFilterQueryMap)(writeRef);
187
- (0, import_common.applyMixins)(filterRef, [writeRef]);
188
- writeMetadataMap.forEach((value, key) => {
189
- const filterArgMetas = (0, import_filterMeta.getFilterArgMetas)(writeRef, key);
190
- (0, import_filterMeta.setFilterArgMetasOnPrototype)(filterRef.prototype, key, filterArgMetas);
191
- });
192
- return new Map([...acc, ...writeMetadataMap]);
193
- }, filterQueryMap)
194
- );
195
- const filterSort = types.filter(Boolean).map((t) => (0, import_filterMeta.getFilterSortMap)(t)).reduce((acc, sort) => {
196
- Object.assign(acc, sort);
197
- return acc;
198
- }, filterMeta.sort);
199
- (0, import_filterMeta.setFilterKeyMetaMapOnPrototype)(filterRef.prototype, metadataMap);
200
- (0, import_filterMeta.setFilterMeta)(filterRef, { ...filterMeta, sort: filterSort });
201
- return filterRef;
202
- };
@@ -17,68 +17,24 @@ var __copyProps = (to, from, except, desc) => {
17
17
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
18
  var classMeta_exports = {};
19
19
  __export(classMeta_exports, {
20
- Model: () => Model,
21
- getAllFilterModelRefs: () => getAllFilterModelRefs,
22
- getAllFullModelRefs: () => getAllFullModelRefs,
23
- getAllScalarModelRefs: () => getAllScalarModelRefs,
24
20
  getChildClassRefs: () => getChildClassRefs,
21
+ getExtendRef: () => getExtendRef,
25
22
  getFieldEnumMetas: () => getFieldEnumMetas,
26
- getFullModelRef: () => getFullModelRef,
27
- getFullModelRefs: () => getFullModelRefs,
28
- getInputModelRef: () => getInputModelRef,
29
- getInputModelRefs: () => getInputModelRefs,
30
- getLightModelRef: () => getLightModelRef,
31
- getScalarModelRef: () => getScalarModelRef,
32
- getScalarModelRefs: () => getScalarModelRefs,
33
- hasTextField: () => hasTextField
23
+ hasTextField: () => hasTextField,
24
+ setExtendRef: () => setExtendRef
34
25
  });
35
26
  module.exports = __toCommonJS(classMeta_exports);
36
27
  var import_reflect_metadata = require("reflect-metadata");
37
- var import_common = require("@akanjs/common");
38
- var import_filterMeta = require("./filterMeta");
28
+ var import_constantInfo = require("./constantInfo");
39
29
  var import_scalar = require("./scalar");
40
- class InputModelStorage {
41
- }
42
- class LightModelStorage {
43
- }
44
- class FullModelStorage {
45
- }
46
- class ScalarModelStorage {
47
- }
48
- class FilterModelStorage {
49
- }
50
- const getFullModelRef = (refName) => {
51
- const modelRefs = Reflect.getMetadata((0, import_common.capitalize)(refName), FullModelStorage.prototype);
52
- const modelRef = modelRefs?.[0];
53
- if (!modelRef)
54
- throw new Error(`FullModel not found - ${refName}`);
55
- return modelRef;
30
+ const setExtendRef = (modelRef, extendRef) => {
31
+ Reflect.defineMetadata("akan:extend", extendRef, modelRef.prototype);
56
32
  };
57
- const getFullModelRefs = (refName) => {
58
- const modelRefs = Reflect.getMetadata((0, import_common.capitalize)(refName), FullModelStorage.prototype);
59
- return modelRefs ?? [];
60
- };
61
- const getInputModelRef = (refName) => {
62
- const modelRefs = Reflect.getMetadata((0, import_common.capitalize)(refName), InputModelStorage.prototype);
63
- const modelRef = modelRefs?.[0];
64
- if (!modelRef)
65
- throw new Error(`InputModel not found - ${refName}`);
66
- return modelRef;
67
- };
68
- const getInputModelRefs = (refName) => {
69
- const modelRefs = Reflect.getMetadata((0, import_common.capitalize)(refName), InputModelStorage.prototype);
70
- return modelRefs ?? [];
71
- };
72
- const getScalarModelRef = (refName) => {
73
- const modelRefs = Reflect.getMetadata((0, import_common.capitalize)(refName), ScalarModelStorage.prototype);
74
- const modelRef = modelRefs?.[0];
75
- if (!modelRef)
76
- throw new Error(`ScalarModel not found - ${refName}`);
77
- return modelRef;
78
- };
79
- const getScalarModelRefs = (refName) => {
80
- const modelRefs = Reflect.getMetadata((0, import_common.capitalize)(refName), ScalarModelStorage.prototype);
81
- return modelRefs ?? [];
33
+ const getExtendRef = (modelRef, { allowEmpty } = {}) => {
34
+ const extendRef = Reflect.getMetadata("akan:extend", modelRef.prototype);
35
+ if (!extendRef && !allowEmpty)
36
+ throw new Error(`ExtendRef not found - ${modelRef.name}`);
37
+ return extendRef;
82
38
  };
83
39
  const getChildClassRefs = (target) => {
84
40
  const metadatas = (0, import_scalar.getFieldMetas)(target);
@@ -86,7 +42,7 @@ const getChildClassRefs = (target) => {
86
42
  const childRefs = metadatas.filter((metadata) => metadata.isClass).reduce((acc, metadata) => {
87
43
  return [...acc, metadata.modelRef, ...getChildClassRefs(metadata.modelRef)];
88
44
  }, []);
89
- childRefs.filter((modelRef, idx) => childRefs.findIndex((ref) => ref.prototype === modelRef.prototype) === idx).map((modelRef) => refMap.set((0, import_scalar.getClassMeta)(modelRef).refName, modelRef));
45
+ childRefs.filter((modelRef, idx) => childRefs.findIndex((ref) => ref.prototype === modelRef.prototype) === idx).map((modelRef) => refMap.set(import_constantInfo.constantInfo.getRefName(modelRef), modelRef));
90
46
  return [...refMap.values()];
91
47
  };
92
48
  const getFieldEnumMetas = (modelRef) => {
@@ -99,64 +55,3 @@ const hasTextField = (modelRef) => {
99
55
  (fieldMeta) => !!fieldMeta.text || fieldMeta.isScalar && fieldMeta.isClass && fieldMeta.select && hasTextField(fieldMeta.modelRef)
100
56
  );
101
57
  };
102
- const applyClassMeta = (type, modelType, storage) => {
103
- return function(refName) {
104
- return function(target) {
105
- const modelRef = target;
106
- const classMeta = { refName, type, modelType, modelRef, hasTextField: hasTextField(modelRef) };
107
- Reflect.defineMetadata("class", classMeta, modelRef.prototype);
108
- const modelRefs = Reflect.getMetadata((0, import_common.capitalize)(refName), storage.prototype);
109
- if (modelRefs)
110
- modelRefs.push(modelRef);
111
- else
112
- Reflect.defineMetadata(refName, [modelRef], storage.prototype);
113
- };
114
- };
115
- };
116
- const applyFilterMeta = (storage) => {
117
- return function(refName) {
118
- return function(target) {
119
- const modelRef = target;
120
- (0, import_filterMeta.setFilterMeta)(modelRef, { refName, sort: {} });
121
- const modelRefs = Reflect.getMetadata((0, import_common.capitalize)(refName), storage.prototype);
122
- if (modelRefs)
123
- modelRefs.push(modelRef);
124
- else
125
- Reflect.defineMetadata(refName, [modelRef], storage.prototype);
126
- };
127
- };
128
- };
129
- const Model = {
130
- Light: applyClassMeta("light", "data", LightModelStorage),
131
- Object: applyClassMeta("full", "ephemeral", FullModelStorage),
132
- Full: applyClassMeta("full", "data", FullModelStorage),
133
- Input: applyClassMeta("input", "data", InputModelStorage),
134
- Scalar: applyClassMeta("scalar", "data", ScalarModelStorage),
135
- Insight: applyClassMeta("scalar", "insight", ScalarModelStorage),
136
- Filter: applyFilterMeta(FilterModelStorage)
137
- };
138
- const getLightModelRef = (modelRef) => {
139
- const classMeta = (0, import_scalar.getClassMeta)(modelRef);
140
- if (classMeta.type !== "full")
141
- return modelRef;
142
- const lightModelRefs = Reflect.getMetadata(`Light${classMeta.refName}`, LightModelStorage.prototype);
143
- const lightModelRef = lightModelRefs?.at(-1);
144
- if (!lightModelRef)
145
- throw new Error(`LightModel not found - ${classMeta.refName}`);
146
- return lightModelRef;
147
- };
148
- const getAllFullModelRefs = () => {
149
- const modelNames = Reflect.getMetadataKeys(FullModelStorage.prototype);
150
- const modelRefs = modelNames.map((modelName) => Reflect.getMetadata(modelName, FullModelStorage.prototype)).flat();
151
- return modelRefs;
152
- };
153
- const getAllScalarModelRefs = () => {
154
- const modelNames = Reflect.getMetadataKeys(ScalarModelStorage.prototype);
155
- const modelRefs = modelNames.map((modelName) => Reflect.getMetadata(modelName, ScalarModelStorage.prototype)).flat();
156
- return modelRefs;
157
- };
158
- const getAllFilterModelRefs = () => {
159
- const modelNames = Reflect.getMetadataKeys(FilterModelStorage.prototype);
160
- const modelRefs = modelNames.map((modelName) => Reflect.getMetadata(modelName, FilterModelStorage.prototype)).flat();
161
- return modelRefs;
162
- };
@@ -0,0 +1,145 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var constantInfo_exports = {};
19
+ __export(constantInfo_exports, {
20
+ cnstOf: () => cnstOf,
21
+ constantInfo: () => constantInfo,
22
+ scalarCnstOf: () => scalarCnstOf
23
+ });
24
+ module.exports = __toCommonJS(constantInfo_exports);
25
+ var import_reflect_metadata = require("reflect-metadata");
26
+ var import_base = require("@akanjs/base");
27
+ var import__ = require(".");
28
+ var import_immerify = require("./immerify");
29
+ const constantInfo = {
30
+ database: /* @__PURE__ */ new Map(),
31
+ scalar: /* @__PURE__ */ new Map(),
32
+ modelRefNameMap: /* @__PURE__ */ new Map(),
33
+ getRefName(modelRef, { allowEmpty } = {}) {
34
+ const refName = constantInfo.modelRefNameMap.get(modelRef);
35
+ if (!refName && !allowEmpty)
36
+ throw new Error(`No ref name for modelRef: ${modelRef}`);
37
+ return refName;
38
+ },
39
+ getModelType(modelRef, { allowEmpty } = {}) {
40
+ const modelType = Reflect.getMetadata("akan:modeltype", modelRef.prototype);
41
+ if (!modelType && !allowEmpty)
42
+ throw new Error(`No model type for modelRef: ${modelRef}`);
43
+ return modelType;
44
+ },
45
+ setModelType(modelRef, modelType) {
46
+ Reflect.defineMetadata("akan:modeltype", modelType, modelRef.prototype);
47
+ },
48
+ isObject(modelRef) {
49
+ return constantInfo.getModelType(modelRef, { allowEmpty: true }) === "object";
50
+ },
51
+ isFull(modelRef) {
52
+ return constantInfo.getModelType(modelRef, { allowEmpty: true }) === "full";
53
+ },
54
+ isLight(modelRef) {
55
+ return constantInfo.getModelType(modelRef, { allowEmpty: true }) === "light";
56
+ },
57
+ isInsight(modelRef) {
58
+ return constantInfo.getModelType(modelRef, { allowEmpty: true }) === "insight";
59
+ },
60
+ isFilter(modelRef) {
61
+ return constantInfo.getModelType(modelRef, { allowEmpty: true }) === "filter";
62
+ },
63
+ isScalar(modelRef) {
64
+ return constantInfo.getModelType(modelRef, { allowEmpty: true }) === "scalar";
65
+ },
66
+ setDatabase(refName, cnst) {
67
+ constantInfo.database.set(refName, cnst);
68
+ },
69
+ getDatabase(refName, { allowEmpty } = {}) {
70
+ const info = constantInfo.database.get(refName);
71
+ if (!info && !allowEmpty)
72
+ throw new Error(`No database constant model info for ${refName}`);
73
+ return info;
74
+ },
75
+ setScalar(refName, cnst) {
76
+ if (constantInfo.scalar.has(refName))
77
+ return;
78
+ constantInfo.scalar.set(refName, cnst);
79
+ },
80
+ getScalar(refName, { allowEmpty } = {}) {
81
+ const model = constantInfo.scalar.get(refName);
82
+ if (!model && !allowEmpty)
83
+ throw new Error(`No scalar constant model for ${refName}`);
84
+ return model;
85
+ },
86
+ getModelRef(refName, modelType) {
87
+ if (modelType === "scalar") {
88
+ if (import_base.gqlScalarMap.has(refName))
89
+ return import_base.gqlScalarMap.get(refName);
90
+ else
91
+ return constantInfo.getScalar(refName).model;
92
+ } else
93
+ return constantInfo.getDatabase(refName)[modelType];
94
+ }
95
+ };
96
+ const cnstOf = (refName, Input, Full, Light, Insight, option = {}) => {
97
+ [Input, Full, Light, Insight].forEach((modelRef) => {
98
+ constantInfo.modelRefNameMap.set(modelRef, refName);
99
+ });
100
+ constantInfo.setModelType(Input, "input");
101
+ constantInfo.setModelType(Full, "full");
102
+ constantInfo.setModelType(Light, "light");
103
+ constantInfo.setModelType(Insight, "insight");
104
+ const cnst = {
105
+ refName,
106
+ input: Input,
107
+ full: Full,
108
+ light: Light,
109
+ insight: Insight,
110
+ crystalize: (0, import__.makeCrystalize)(Full, option),
111
+ lightCrystalize: (0, import__.makeCrystalize)(Light, option),
112
+ crystalizeInsight: (0, import__.makeCrystalize)(Insight, option),
113
+ purify: (0, import__.makePurify)(Input, option),
114
+ getDefault: () => (0, import_immerify.immerify)(Full, Object.assign(new Full(), (0, import__.makeDefault)(Full, option))),
115
+ getDefaultInsight: () => (0, import_immerify.immerify)(Insight, Object.assign(new Insight(), (0, import__.makeDefault)(Insight, option))),
116
+ _CapitalizedT: null,
117
+ _Default: null,
118
+ _DefaultInput: null,
119
+ _DefaultState: null,
120
+ _DefaultStateInput: null,
121
+ _DefaultInsight: null,
122
+ _PurifiedInput: null,
123
+ _Doc: null,
124
+ _DocInput: null,
125
+ _QueryOfDoc: null
126
+ };
127
+ constantInfo.setDatabase(refName, cnst);
128
+ return cnst;
129
+ };
130
+ const scalarCnstOf = (refName, Model) => {
131
+ constantInfo.setModelType(Model, "scalar");
132
+ constantInfo.modelRefNameMap.set(Model, refName);
133
+ const cnst = {
134
+ refName,
135
+ model: Model,
136
+ crystalize: (0, import__.makeCrystalize)(Model),
137
+ purify: (0, import__.makePurify)(Model),
138
+ getDefault: () => (0, import_immerify.immerify)(Model, Object.assign(new Model(), (0, import__.makeDefault)(Model))),
139
+ _Default: null,
140
+ _Doc: null,
141
+ _PurifiedInput: null
142
+ };
143
+ constantInfo.setScalar(refName, cnst);
144
+ return cnst;
145
+ };