@akanjs/constant 1.0.5 → 1.0.6

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/cjs/src/purify.js CHANGED
@@ -38,65 +38,53 @@ const getPurifyFn = (modelRef) => {
38
38
  const [valueRef] = (0, import_base.getNonArrayModel)(modelRef);
39
39
  return scalarPurifyMap.get(valueRef) ?? ((value) => value);
40
40
  };
41
- const purify = (metadata, value, self) => {
42
- if (metadata.nullable && (value === null || value === void 0 || typeof value === "number" && isNaN(value) || typeof value === "string" && !value.length))
41
+ const purify = (field, key, value, self) => {
42
+ if (field.nullable && (value === null || value === void 0 || typeof value === "number" && isNaN(value) || typeof value === "string" && !value.length))
43
43
  return null;
44
- if (metadata.isArray) {
44
+ if (field.isArray) {
45
45
  if (!Array.isArray(value))
46
- throw new Error(`Invalid Array Value in ${metadata.key} for value ${value}`);
47
- if (metadata.minlength && value.length < metadata.minlength)
48
- throw new Error(`Invalid Array Length (Min) in ${metadata.key} for value ${value}`);
49
- else if (metadata.maxlength && value.length > metadata.maxlength)
50
- throw new Error(`Invalid Array Length (Max) in ${metadata.key} for value ${value}`);
51
- else if (metadata.optArrDepth === 0 && metadata.validate && !metadata.validate(value, self))
52
- throw new Error(`Invalid Array Value (Failed to pass validation) in ${metadata.key} for value ${value}`);
53
- return value.map((v) => purify({ ...metadata, isArray: false }, v, v));
46
+ throw new Error(`Invalid Array Value in ${key} for value ${value}`);
47
+ if (field.minlength && value.length < field.minlength)
48
+ throw new Error(`Invalid Array Length (Min) in ${key} for value ${value}`);
49
+ else if (field.maxlength && value.length > field.maxlength)
50
+ throw new Error(`Invalid Array Length (Max) in ${key} for value ${value}`);
51
+ else if (field.optArrDepth === 0 && field.validate && !field.validate(value, self))
52
+ throw new Error(`Invalid Array Value (Failed to pass validation) in ${key} for value ${value}`);
53
+ return value.map((v) => purify({ ...field, isArray: false }, key, v, v));
54
54
  }
55
- if (metadata.isMap && metadata.of) {
56
- const purifyFn2 = getPurifyFn(metadata.of);
55
+ if (field.isMap && field.of) {
56
+ const purifyFn2 = getPurifyFn(field.of);
57
57
  return Object.fromEntries(
58
- [...value.entries()].map(([key, val]) => [key, (0, import_base.applyFnToArrayObjects)(val, purifyFn2)])
58
+ [...value.entries()].map(([key2, val]) => [key2, (0, import_base.applyFnToArrayObjects)(val, purifyFn2)])
59
59
  );
60
60
  }
61
- if (metadata.isClass)
62
- return makePurify(metadata.modelRef)(value, true);
63
- if (metadata.modelRef === Date && (0, import_base.dayjs)(value).isBefore((0, import_base.dayjs)(/* @__PURE__ */ new Date("0000"))))
64
- throw new Error(`Invalid Date Value (Default) in ${metadata.key} for value ${value}`);
65
- if ([String, import_base.ID].includes(metadata.modelRef) && (value === "" || !value))
66
- throw new Error(`Invalid String Value (Default) in ${metadata.key} for value ${value}`);
67
- if (metadata.validate && !metadata.validate(value, self))
68
- throw new Error(`Invalid Value (Failed to pass validation) / ${value} in ${metadata.key}`);
69
- if (!metadata.nullable && !value && value !== 0 && value !== false)
70
- throw new Error(`Invalid Value (Nullable) in ${metadata.key} for value ${value}`);
71
- const purifyFn = getPurifyFn(metadata.modelRef);
61
+ if (field.isClass)
62
+ return makePurify(field.modelRef)(value, true);
63
+ if (field.modelRef === Date && (0, import_base.dayjs)(value).isBefore((0, import_base.dayjs)(/* @__PURE__ */ new Date("0000"))))
64
+ throw new Error(`Invalid Date Value (Default) in ${key} for value ${value}`);
65
+ if ([String, import_base.ID].includes(field.modelRef) && (value === "" || !value))
66
+ throw new Error(`Invalid String Value (Default) in ${key} for value ${value}`);
67
+ if (field.validate && !field.validate(value, self))
68
+ throw new Error(`Invalid Value (Failed to pass validation) / ${value} in ${key}`);
69
+ if (!field.nullable && !value && value !== 0 && value !== false)
70
+ throw new Error(`Invalid Value (Nullable) in ${key} for value ${value}`);
71
+ const purifyFn = getPurifyFn(field.modelRef);
72
72
  return purifyFn(value);
73
73
  };
74
- const getPredefinedPurifyFn = (refName) => {
75
- const purify2 = Reflect.getMetadata(refName, PurifyStorage.prototype);
76
- return purify2;
77
- };
78
- const setPredefinedPurifyFn = (refName, purify2) => {
79
- Reflect.defineMetadata(refName, purify2, PurifyStorage.prototype);
80
- };
81
- const makePurify = (modelRef, option = {}) => {
82
- const refName = import__.constantInfo.getRefName(modelRef);
83
- const purifyFn = getPredefinedPurifyFn(refName);
84
- if (purifyFn && !option.overwrite)
85
- return purifyFn;
86
- const metadatas = (0, import__.getFieldMetas)(modelRef);
74
+ const makePurify = (modelRef) => {
87
75
  const fn = (self, isChild) => {
88
76
  try {
89
77
  if (isChild && !import__.constantInfo.isScalar(modelRef)) {
90
78
  const id = self.id;
91
79
  if (!id)
92
- throw new Error(`Invalid Value (No ID) for id ${refName}`);
80
+ throw new Error(`Invalid Value (No ID) for id ${modelRef}`);
93
81
  return id;
94
82
  }
95
83
  const result = {};
96
- for (const metadata of metadatas) {
97
- const value = self[metadata.key];
98
- result[metadata.key] = purify(metadata, value, self);
99
- }
84
+ Object.entries(modelRef.field).forEach(([key, field]) => {
85
+ const value = self[key];
86
+ result[key] = purify(field.getProps(), key, value, self);
87
+ });
100
88
  return result;
101
89
  } catch (err) {
102
90
  if (isChild)
@@ -105,6 +93,5 @@ const makePurify = (modelRef, option = {}) => {
105
93
  return null;
106
94
  }
107
95
  };
108
- setPredefinedPurifyFn(refName, fn);
109
96
  return fn;
110
97
  };
package/cjs/src/scalar.js CHANGED
@@ -18,15 +18,10 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
18
18
  var scalar_exports = {};
19
19
  __export(scalar_exports, {
20
20
  fieldPresets: () => fieldPresets,
21
- getFieldMetaMap: () => getFieldMetaMap,
22
- getFieldMetaMapOnPrototype: () => getFieldMetaMapOnPrototype,
23
- getFieldMetas: () => getFieldMetas,
24
21
  getGqlTypeStr: () => getGqlTypeStr,
25
22
  getScalarExample: () => getScalarExample,
26
23
  isConstantModel: () => isConstantModel,
27
- scalarExampleMap: () => scalarExampleMap,
28
- setFieldMetaMap: () => setFieldMetaMap,
29
- setFieldMetaMapOnPrototype: () => setFieldMetaMapOnPrototype
24
+ scalarExampleMap: () => scalarExampleMap
30
25
  });
31
26
  module.exports = __toCommonJS(scalar_exports);
32
27
  var import_reflect_metadata = require("reflect-metadata");
@@ -47,30 +42,6 @@ const scalarExampleMap = /* @__PURE__ */ new Map([
47
42
  const getScalarExample = (ref) => scalarExampleMap.get(ref) ?? null;
48
43
  const getGqlTypeStr = (ref) => import_base.scalarNameMap.get(ref) ?? `${import_constantInfo.constantInfo.isLight(ref) ? "Light" : ""}${(0, import_common.capitalize)(import_constantInfo.constantInfo.getRefName(ref))}${import_constantInfo.constantInfo.isInsight(ref) ? "Insight" : ""}`;
49
44
  const fieldPresets = ["email", "password", "url"];
50
- const getFieldMetas = (modelRef) => {
51
- const [target] = (0, import_base.getNonArrayModel)(modelRef);
52
- const metadataMap = Reflect.getMetadata("fields", target.prototype) ?? /* @__PURE__ */ new Map();
53
- const keySortMap = { id: -1, createdAt: 1, updatedAt: 2, removedAt: 3 };
54
- return [...metadataMap.values()].sort(
55
- (a, b) => (keySortMap[a.key] ?? 0) - (keySortMap[b.key] ?? 0)
56
- );
57
- };
58
45
  const isConstantModel = (modelRef) => {
59
46
  return Reflect.getMetadata("class", modelRef.prototype) !== void 0;
60
47
  };
61
- const getFieldMetaMap = (modelRef) => {
62
- const [target] = (0, import_base.getNonArrayModel)(modelRef);
63
- const metadataMap = Reflect.getMetadata("fields", target.prototype) ?? /* @__PURE__ */ new Map();
64
- return metadataMap;
65
- };
66
- const setFieldMetaMap = (modelRef, metadataMap) => {
67
- const [target] = (0, import_base.getNonArrayModel)(modelRef);
68
- Reflect.defineMetadata("fields", metadataMap, target.prototype);
69
- };
70
- const getFieldMetaMapOnPrototype = (prototype) => {
71
- const metadataMap = Reflect.getMetadata("fields", prototype) ?? /* @__PURE__ */ new Map();
72
- return metadataMap;
73
- };
74
- const setFieldMetaMapOnPrototype = (prototype, metadataMap) => {
75
- Reflect.defineMetadata("fields", metadataMap, prototype);
76
- };
@@ -56,9 +56,9 @@ const serializeInput = (value, inputRef, arrDepth) => {
56
56
  return value;
57
57
  else
58
58
  return Object.fromEntries(
59
- (0, import__.getFieldMetas)(inputRef).map((fieldMeta) => [
60
- fieldMeta.key,
61
- serializeInput(value[fieldMeta.key], fieldMeta.modelRef, fieldMeta.arrDepth)
59
+ Object.entries(inputRef.field).map(([key, field]) => [
60
+ key,
61
+ serializeInput(value[key], field.modelRef, field.arrDepth)
62
62
  ])
63
63
  );
64
64
  };
@@ -101,9 +101,9 @@ const deserializeInput = (value, inputRef, arrDepth) => {
101
101
  return value;
102
102
  else
103
103
  return Object.fromEntries(
104
- (0, import__.getFieldMetas)(inputRef).map((fieldMeta) => [
105
- fieldMeta.key,
106
- deserializeInput(value[fieldMeta.key], fieldMeta.modelRef, fieldMeta.arrDepth)
104
+ Object.entries(inputRef.field).map(([key, field]) => [
105
+ key,
106
+ deserializeInput(value[key], field.modelRef, field.arrDepth)
107
107
  ])
108
108
  );
109
109
  };
@@ -1,93 +1,89 @@
1
1
  import "reflect-metadata";
2
- import { ID, Int } from "@akanjs/base";
3
2
  import { applyMixins } from "@akanjs/common";
4
- import { setExtendRef } from "./classMeta";
3
+ import { immerable } from "immer";
4
+ import { crystalize, makeDefault } from ".";
5
5
  import { constantInfo } from "./constantInfo";
6
6
  import {
7
+ ConstantField,
7
8
  field,
8
9
  resolve
9
10
  } from "./fieldInfo";
10
- import { getFieldMetaMap, setFieldMetaMap } from "./scalar";
11
- const defaultFieldMeta = {
12
- fieldType: "property",
13
- immutable: false,
14
- select: true,
15
- isClass: false,
16
- isScalar: true,
17
- nullable: false,
18
- isArray: false,
19
- arrDepth: 0,
20
- optArrDepth: 0,
21
- default: null,
22
- isMap: false,
23
- meta: {}
24
- };
25
- const baseFieldMetaMap = /* @__PURE__ */ new Map([
26
- ["id", { ...defaultFieldMeta, key: "id", modelRef: ID }],
27
- ["createdAt", { ...defaultFieldMeta, key: "createdAt", modelRef: Date }],
28
- ["updatedAt", { ...defaultFieldMeta, key: "updatedAt", modelRef: Date }],
29
- ["removedAt", { ...defaultFieldMeta, key: "removedAt", modelRef: Date, nullable: true, default: null }]
30
- ]);
31
- const baseInsightFieldMetaMap = /* @__PURE__ */ new Map([
32
- ["count", { ...defaultFieldMeta, key: "count", modelRef: Int, default: 0, accumulate: { $sum: 1 } }]
33
- ]);
11
+ import { makePurify } from "./purify";
34
12
  const objectModelOf = (inputRef, fieldMap) => {
35
- class ObjectModel {
36
- }
37
- const metadataMap = new Map([...baseFieldMetaMap, ...getFieldMetaMap(inputRef)]);
38
- setFieldMetaMap(ObjectModel, metadataMap);
39
- setExtendRef(ObjectModel, inputRef);
40
- constantInfo.setModelType(ObjectModel, "object");
41
- Object.entries(fieldMap).forEach(([key, fieldInfo]) => {
42
- fieldInfo.applyFieldMeta(ObjectModel, key);
43
- });
44
- return ObjectModel;
13
+ const field2 = Object.assign(
14
+ ConstantField.getBaseModelField(),
15
+ inputRef.field,
16
+ Object.fromEntries(Object.entries(fieldMap).map(([key, fieldInfo]) => [key, fieldInfo.toField()]))
17
+ );
18
+ const baseObjectModelRef = getBaseConstantClass(field2);
19
+ applyConstantStatics(baseObjectModelRef);
20
+ constantInfo.setModelType(baseObjectModelRef, "object");
21
+ return baseObjectModelRef;
45
22
  };
46
23
  const lightModelOf = (objectRef, fields, fieldMap, ...libLightModelRefs) => {
47
- const objectFieldMetaMap = getFieldMetaMap(objectRef);
48
- const baseLightModelRef = libLightModelRefs.at(0);
49
- const fieldMetaMap = baseLightModelRef ? getFieldMetaMap(baseLightModelRef) : new Map([...baseFieldMetaMap]);
50
- class BaseLightModel {
51
- }
52
- for (const field2 of fields) {
53
- const fieldMeta = objectFieldMetaMap.get(field2);
54
- if (!fieldMeta)
55
- throw new Error(`Field ${field2} not found in objectRef`);
56
- fieldMetaMap.set(field2, fieldMeta);
57
- }
58
- applyMixins(BaseLightModel, libLightModelRefs);
59
- setFieldMetaMap(BaseLightModel, fieldMetaMap);
60
- setExtendRef(BaseLightModel, objectRef);
61
- constantInfo.setModelType(BaseLightModel, "light");
62
- Object.entries(fieldMap).forEach(([key, fieldInfo]) => {
63
- fieldInfo.applyFieldMeta(BaseLightModel, key);
64
- });
65
- return BaseLightModel;
24
+ const libLightModelRef = libLightModelRefs.at(0);
25
+ const field2 = Object.assign(
26
+ libLightModelRef?.field ?? ConstantField.getBaseModelField(),
27
+ Object.fromEntries(Object.entries(fieldMap).map(([key, field3]) => [key, field3.toField()])),
28
+ Object.fromEntries(fields.map((field3) => [field3, objectRef.field[field3]]))
29
+ );
30
+ const baseLightModelRef = getBaseConstantClass(field2);
31
+ applyConstantStatics(baseLightModelRef);
32
+ applyMixins(baseLightModelRef, libLightModelRefs);
33
+ constantInfo.setModelType(baseLightModelRef, "light");
34
+ return baseLightModelRef;
66
35
  };
67
36
  const fullModelOf = (objectRef, lightRef, fieldMap, ...libFullModelRefs) => {
68
- const fullRef = libFullModelRefs.at(0) ?? class FullModel {
69
- };
70
- const fieldMetaMap = new Map([...getFieldMetaMap(objectRef), ...getFieldMetaMap(lightRef)]);
37
+ const fullRef = libFullModelRefs.at(0) ?? getBaseConstantClass(ConstantField.getBaseModelField());
38
+ Object.assign(
39
+ fullRef.field,
40
+ objectRef.field,
41
+ lightRef.field,
42
+ Object.fromEntries(Object.entries(fieldMap).map(([key, field2]) => [key, field2.toField()]))
43
+ );
71
44
  applyMixins(fullRef, [objectRef, lightRef, ...libFullModelRefs]);
72
45
  libFullModelRefs.forEach((libFullModelRef) => {
73
46
  applyMixins(libFullModelRef, [objectRef, lightRef]);
74
47
  });
75
- setFieldMetaMap(fullRef, fieldMetaMap);
76
- setExtendRef(fullRef, objectRef);
48
+ applyConstantStatics(fullRef);
77
49
  constantInfo.setModelType(fullRef, "full");
78
- Object.entries(fieldMap).forEach(([key, fieldInfo]) => {
79
- fieldInfo.applyFieldMeta(fullRef, key);
80
- });
81
50
  return fullRef;
82
51
  };
83
- const makeBaseScalar = (fieldMap) => {
84
- class BaseScalar {
52
+ const getBaseConstantClass = (field2) => {
53
+ class BaseConstant {
54
+ static field = field2;
55
+ [immerable] = true;
56
+ constructor(obj) {
57
+ Object.assign(this, this.constructor.default);
58
+ if (obj)
59
+ this.set(obj);
60
+ }
61
+ set(obj) {
62
+ Object.entries(obj).forEach(([key, value]) => {
63
+ if (!this.constructor.field[key])
64
+ return;
65
+ const fieldProp = this.constructor.field[key].getProps();
66
+ this[key] = crystalize(fieldProp, value);
67
+ });
68
+ return this;
69
+ }
85
70
  }
86
- constantInfo.setModelType(BaseScalar, "scalar");
87
- Object.entries(fieldMap).forEach(([key, fieldInfo]) => {
88
- fieldInfo.applyFieldMeta(BaseScalar, key);
71
+ return BaseConstant;
72
+ };
73
+ const makeBaseScalar = (fieldMap) => {
74
+ const fieldObject = Object.fromEntries(Object.entries(fieldMap).map(([key, field2]) => [key, field2.toField()]));
75
+ const baseScalarRef = getBaseConstantClass(fieldObject);
76
+ applyConstantStatics(baseScalarRef);
77
+ constantInfo.setModelType(baseScalarRef, "scalar");
78
+ return baseScalarRef;
79
+ };
80
+ const applyConstantStatics = (model) => {
81
+ Object.assign(model, {
82
+ purify: makePurify(model),
83
+ default: makeDefault(model.field)
84
+ // getDefault: () => immerify(model, Object.assign(new model() as object, defaultFn)),
89
85
  });
90
- return BaseScalar;
86
+ return model;
91
87
  };
92
88
  function via(firstRefOrBuildField, secondRefOrFieldsOrBuildField, thirdRefOrResolveField, ...extendRefs) {
93
89
  if (!firstRefOrBuildField.prototype || !constantInfo.getModelType(firstRefOrBuildField, { allowEmpty: true })) {
@@ -147,41 +143,37 @@ function via(firstRefOrBuildField, secondRefOrFieldsOrBuildField, thirdRefOrReso
147
143
  }
148
144
  const extendModelInputs = (fieldMap, ...libInputModelRefs) => {
149
145
  const baseInputModelRef = libInputModelRefs.at(0);
150
- const fieldMetaMap = baseInputModelRef ? getFieldMetaMap(baseInputModelRef) : /* @__PURE__ */ new Map();
151
- class BaseInput {
152
- }
153
- setFieldMetaMap(BaseInput, fieldMetaMap);
154
- constantInfo.setModelType(BaseInput, "scalar");
155
- Object.entries(fieldMap).forEach(([key, fieldInfo]) => {
156
- fieldInfo.applyFieldMeta(BaseInput, key);
157
- });
158
- return BaseInput;
146
+ const fieldObject = Object.assign(
147
+ baseInputModelRef?.field ?? {},
148
+ Object.fromEntries(Object.entries(fieldMap).map(([key, field2]) => [key, field2.toField()]))
149
+ );
150
+ const baseInputRef = getBaseConstantClass(fieldObject);
151
+ applyConstantStatics(baseInputRef);
152
+ constantInfo.setModelType(baseInputRef, "scalar");
153
+ return baseInputRef;
159
154
  };
160
155
  const extendModelObjects = (inputRef, fieldMap, ...libObjectModelRefs) => {
161
156
  const baseObjectModelRef = libObjectModelRefs.at(0);
162
- const inputFieldMetaMap = getFieldMetaMap(inputRef);
163
- const fieldMetaMap = baseObjectModelRef ? getFieldMetaMap(baseObjectModelRef) : /* @__PURE__ */ new Map();
164
- class BaseInput {
165
- }
166
- inputFieldMetaMap.forEach((value, key) => fieldMetaMap.set(key, value));
167
- setFieldMetaMap(BaseInput, fieldMetaMap);
168
- constantInfo.setModelType(BaseInput, "object");
169
- Object.entries(fieldMap).forEach(([key, fieldInfo]) => {
170
- fieldInfo.applyFieldMeta(BaseInput, key);
171
- });
172
- return BaseInput;
157
+ const field2 = Object.assign(
158
+ baseObjectModelRef?.field ?? {},
159
+ inputRef.field,
160
+ Object.fromEntries(Object.entries(fieldMap).map(([key, fieldInfo]) => [key, fieldInfo.toField()]))
161
+ );
162
+ const baseInputRef = getBaseConstantClass(field2);
163
+ applyConstantStatics(baseInputRef);
164
+ constantInfo.setModelType(baseInputRef, "object");
165
+ return baseInputRef;
173
166
  };
174
167
  const extendModelInsights = (fieldMap, ...insightModelRefs) => {
175
168
  const baseInsightModelRef = insightModelRefs.at(0);
176
- const insightFieldMetaMap = baseInsightModelRef ? getFieldMetaMap(baseInsightModelRef) : new Map([...baseInsightFieldMetaMap]);
177
- class BaseInsight2 {
178
- }
179
- setFieldMetaMap(BaseInsight2, insightFieldMetaMap);
180
- constantInfo.setModelType(BaseInsight2, "insight");
181
- Object.entries(fieldMap).forEach(([key, fieldInfo]) => {
182
- fieldInfo.applyFieldMeta(BaseInsight2, key);
183
- });
184
- return BaseInsight2;
169
+ const field2 = Object.assign(
170
+ baseInsightModelRef?.field ?? ConstantField.getBaseInsightField(),
171
+ Object.fromEntries(Object.entries(fieldMap).map(([key, fieldInfo]) => [key, fieldInfo.toField()]))
172
+ );
173
+ const baseInsightRef = getBaseConstantClass(field2);
174
+ applyConstantStatics(baseInsightRef);
175
+ constantInfo.setModelType(baseInsightRef, "insight");
176
+ return baseInsightRef;
185
177
  };
186
178
  export {
187
179
  via
@@ -1,38 +1,23 @@
1
1
  import "reflect-metadata";
2
2
  import { constantInfo } from "./constantInfo";
3
- import { getFieldMetas } from "./scalar";
4
- const setExtendRef = (modelRef, extendRef) => {
5
- Reflect.defineMetadata("akan:extend", extendRef, modelRef.prototype);
6
- };
7
- const getExtendRef = (modelRef, { allowEmpty } = {}) => {
8
- const extendRef = Reflect.getMetadata("akan:extend", modelRef.prototype);
9
- if (!extendRef && !allowEmpty)
10
- throw new Error(`ExtendRef not found - ${modelRef.name}`);
11
- return extendRef;
12
- };
13
3
  const getChildClassRefs = (target) => {
14
- const metadatas = getFieldMetas(target);
15
4
  const refMap = /* @__PURE__ */ new Map();
16
- const childRefs = metadatas.filter((metadata) => metadata.isClass).reduce((acc, metadata) => {
17
- return [...acc, metadata.modelRef, ...getChildClassRefs(metadata.modelRef)];
5
+ const childRefs = Object.entries(target.field).filter(([_, field]) => field.isClass).reduce((acc, [key, field]) => {
6
+ return [...acc, field.modelRef, ...getChildClassRefs(field.modelRef)];
18
7
  }, []);
19
8
  childRefs.filter((modelRef, idx) => childRefs.findIndex((ref) => ref.prototype === modelRef.prototype) === idx).map((modelRef) => refMap.set(constantInfo.getRefName(modelRef), modelRef));
20
9
  return [...refMap.values()];
21
10
  };
22
11
  const getFieldEnumMetas = (modelRef) => {
23
- const fieldMetas = getFieldMetas(modelRef);
24
- return fieldMetas.filter((fieldMeta) => !!fieldMeta.enum).map((fieldMeta) => ({ key: fieldMeta.key, enum: fieldMeta.enum }));
12
+ return Object.entries(modelRef.field).filter(([_, field]) => !!field.enum).map(([key, field]) => ({ key, enum: field.enum }));
25
13
  };
26
14
  const hasTextField = (modelRef) => {
27
- const fieldMetas = getFieldMetas(modelRef);
28
- return fieldMetas.some(
29
- (fieldMeta) => !!fieldMeta.text || fieldMeta.isScalar && fieldMeta.isClass && fieldMeta.select && hasTextField(fieldMeta.modelRef)
15
+ return Object.entries(modelRef.field).some(
16
+ ([_, field]) => !!field.text || field.isScalar && field.isClass && field.select && hasTextField(field.modelRef)
30
17
  );
31
18
  };
32
19
  export {
33
20
  getChildClassRefs,
34
- getExtendRef,
35
21
  getFieldEnumMetas,
36
- hasTextField,
37
- setExtendRef
22
+ hasTextField
38
23
  };
@@ -1,7 +1,5 @@
1
1
  import "reflect-metadata";
2
2
  import { gqlScalarMap } from "@akanjs/base";
3
- import { makeCrystalize, makeDefault, makePurify } from ".";
4
- import { immerify } from "./immerify";
5
3
  const constantInfo = {
6
4
  database: /* @__PURE__ */ new Map(),
7
5
  scalar: /* @__PURE__ */ new Map(),
@@ -69,7 +67,7 @@ const constantInfo = {
69
67
  return constantInfo.getDatabase(refName)[modelType];
70
68
  }
71
69
  };
72
- const cnstOf = (refName, inputRef, objectRef, fullRef, lightRef, insightRef, option = {}) => {
70
+ const cnstOf = (refName, inputRef, objectRef, fullRef, lightRef, insightRef) => {
73
71
  [inputRef, objectRef, fullRef, lightRef, insightRef].forEach((modelRef) => {
74
72
  constantInfo.modelRefNameMap.set(modelRef, refName);
75
73
  });
@@ -85,12 +83,6 @@ const cnstOf = (refName, inputRef, objectRef, fullRef, lightRef, insightRef, opt
85
83
  full: fullRef,
86
84
  light: lightRef,
87
85
  insight: insightRef,
88
- crystalize: makeCrystalize(fullRef, option),
89
- lightCrystalize: makeCrystalize(lightRef, option),
90
- crystalizeInsight: makeCrystalize(insightRef, option),
91
- purify: makePurify(inputRef, option),
92
- getDefault: () => immerify(fullRef, Object.assign(new fullRef(), makeDefault(fullRef, option))),
93
- getDefaultInsight: () => immerify(insightRef, Object.assign(new insightRef(), makeDefault(insightRef, option))),
94
86
  _CapitalizedT: null,
95
87
  _Default: null,
96
88
  _DefaultInput: null,
@@ -111,9 +103,6 @@ const scalarCnstOf = (refName, Model) => {
111
103
  const cnst = {
112
104
  refName,
113
105
  model: Model,
114
- crystalize: makeCrystalize(Model),
115
- purify: makePurify(Model),
116
- getDefault: () => immerify(Model, Object.assign(new Model(), makeDefault(Model))),
117
106
  _Default: null,
118
107
  _Doc: null,
119
108
  _PurifiedInput: null
@@ -7,10 +7,7 @@ import {
7
7
  Int,
8
8
  JSON as GqlJSON
9
9
  } from "@akanjs/base";
10
- import { capitalize } from "@akanjs/common";
11
- import { constantInfo, getFieldMetaMap } from ".";
12
- class CrystalizeStorage {
13
- }
10
+ import { constantInfo } from ".";
14
11
  const scalarCrystalizeMap = /* @__PURE__ */ new Map([
15
12
  [Date, (value) => dayjs(value)],
16
13
  [String, (value) => value],
@@ -20,13 +17,13 @@ const scalarCrystalizeMap = /* @__PURE__ */ new Map([
20
17
  [Float, (value) => value],
21
18
  [GqlJSON, (value) => value]
22
19
  ]);
23
- const crystalize = (metadata, value) => {
20
+ const crystalize = (field, value) => {
24
21
  if (value === void 0 || value === null)
25
22
  return value;
26
- if (metadata.isArray && Array.isArray(value))
27
- return value.map((v) => crystalize({ ...metadata, isArray: false }, v));
28
- if (metadata.isMap) {
29
- const [valueRef] = getNonArrayModel(metadata.of);
23
+ if (field.isArray && Array.isArray(value))
24
+ return value.map((v) => crystalize({ ...field, isArray: false }, v));
25
+ if (field.isMap) {
26
+ const [valueRef] = getNonArrayModel(field.of);
30
27
  const crystalizeValue = scalarCrystalizeMap.get(valueRef) ?? ((value2) => value2);
31
28
  return new Map(
32
29
  Object.entries(value).map(([key, val]) => [
@@ -35,36 +32,23 @@ const crystalize = (metadata, value) => {
35
32
  ])
36
33
  );
37
34
  }
38
- if (metadata.isClass)
39
- return makeCrystalize(metadata.modelRef)(value, true);
40
- if (metadata.modelRef === Date)
35
+ if (field.isClass)
36
+ return new field.modelRef().set(value);
37
+ if (field.modelRef === Date)
41
38
  return dayjs(value);
42
- return (scalarCrystalizeMap.get(metadata.modelRef) ?? ((value2) => value2))(value);
43
- };
44
- const getPredefinedCrystalizeFn = (refName) => {
45
- const crystalize2 = Reflect.getMetadata(refName, CrystalizeStorage.prototype);
46
- return crystalize2;
47
- };
48
- const setPredefinedCrystalizeFn = (refName, crystalize2) => {
49
- Reflect.defineMetadata(refName, crystalize2, CrystalizeStorage.prototype);
39
+ return (scalarCrystalizeMap.get(field.modelRef) ?? ((value2) => value2))(value);
50
40
  };
51
41
  const makeCrystalize = (modelRef, option = {}) => {
52
- const refName = constantInfo.getRefName(modelRef);
53
- const crystalName = `${constantInfo.isLight(modelRef) ? "Light" : ""}${capitalize(refName)}${constantInfo.isInsight(modelRef) ? "Insight" : ""}`;
54
- const crystalizeFn = getPredefinedCrystalizeFn(crystalName);
55
- if (crystalizeFn && !option.overwrite && !option.partial?.length)
56
- return crystalizeFn;
57
- const fieldMetaMap = getFieldMetaMap(modelRef);
58
- const fieldKeys = option.partial?.length ? constantInfo.isScalar(modelRef) ? option.partial : ["id", ...option.partial, "updatedAt"] : [...fieldMetaMap.keys()];
59
- const metadatas = fieldKeys.map((key) => fieldMetaMap.get(key));
42
+ const fieldKeys = option.partial?.length ? constantInfo.isScalar(modelRef) ? option.partial : ["id", ...option.partial, "updatedAt"] : Object.keys(modelRef.field);
60
43
  const fn = (self, isChild) => {
61
44
  try {
62
- const result = Object.assign(new modelRef(), self);
63
- for (const metadata of metadatas.filter((m) => !!self[m.key])) {
64
- if (metadata.fieldType === "hidden")
65
- continue;
66
- result[metadata.key] = crystalize(metadata, self[metadata.key]);
67
- }
45
+ const result = new modelRef().set(self);
46
+ fieldKeys.forEach((key) => {
47
+ const field = modelRef.field[key];
48
+ if (field.fieldType === "hidden")
49
+ return;
50
+ result[key] = crystalize(field.getProps(), self[key]);
51
+ });
68
52
  return result;
69
53
  } catch (err) {
70
54
  if (isChild)
@@ -72,10 +56,9 @@ const makeCrystalize = (modelRef, option = {}) => {
72
56
  return null;
73
57
  }
74
58
  };
75
- if (!option.partial?.length)
76
- setPredefinedCrystalizeFn(crystalName, fn);
77
59
  return fn;
78
60
  };
79
61
  export {
62
+ crystalize,
80
63
  makeCrystalize
81
64
  };
@@ -1,44 +1,23 @@
1
1
  import { scalarDefaultMap } from "@akanjs/base";
2
- import { capitalize } from "@akanjs/common";
3
- import { constantInfo } from "./constantInfo";
4
- import { getFieldMetas } from "./scalar";
5
- class DefaultStorage {
6
- }
7
- const getPredefinedDefault = (refName) => {
8
- const defaultData = Reflect.getMetadata(refName, DefaultStorage.prototype);
9
- return defaultData;
10
- };
11
- const setPredefinedDefault = (refName, defaultData) => {
12
- Reflect.defineMetadata(refName, defaultData, DefaultStorage.prototype);
13
- };
14
- const makeDefault = (modelRef, option = {}) => {
15
- const refName = constantInfo.getRefName(modelRef);
16
- const defaultName = `${capitalize(refName)}${constantInfo.isInsight(modelRef) ? "Insight" : ""}`;
17
- const predefinedDefault = getPredefinedDefault(defaultName);
18
- if (predefinedDefault && !option.overwrite)
19
- return predefinedDefault;
20
- if (option.isChild && constantInfo.isScalar(modelRef))
21
- return null;
22
- const metadatas = getFieldMetas(modelRef);
2
+ const makeDefault = (fieldObj) => {
23
3
  const result = {};
24
- for (const metadata of metadatas) {
25
- if (metadata.fieldType === "hidden")
26
- result[metadata.key] = null;
27
- else if (metadata.default) {
28
- if (typeof metadata.default === "function")
29
- result[metadata.key] = metadata.default();
4
+ for (const [key, field] of Object.entries(fieldObj)) {
5
+ if (field.fieldType === "hidden")
6
+ result[key] = null;
7
+ else if (field.default) {
8
+ if (typeof field.default === "function")
9
+ result[key] = field.default();
30
10
  else
31
- result[metadata.key] = metadata.default;
32
- } else if (metadata.isArray)
33
- result[metadata.key] = [];
34
- else if (metadata.nullable)
35
- result[metadata.key] = null;
36
- else if (metadata.isClass)
37
- result[metadata.key] = metadata.isScalar ? makeDefault(metadata.modelRef) : null;
11
+ result[key] = field.default;
12
+ } else if (field.isArray)
13
+ result[key] = [];
14
+ else if (field.nullable)
15
+ result[key] = null;
16
+ else if (field.isClass)
17
+ result[key] = field.isScalar ? makeDefault(field.modelRef.field) : null;
38
18
  else
39
- result[metadata.key] = scalarDefaultMap.get(metadata.modelRef);
19
+ result[key] = scalarDefaultMap.get(field.modelRef);
40
20
  }
41
- setPredefinedDefault(defaultName, result);
42
21
  return result;
43
22
  };
44
23
  export {