@akanjs/constant 0.0.4

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/README.md ADDED
@@ -0,0 +1,11 @@
1
+ # akan
2
+
3
+ This library was generated with [Nx](https://nx.dev).
4
+
5
+ ## Building
6
+
7
+ Run `nx build akan` to build the library.
8
+
9
+ ## Running unit tests
10
+
11
+ Run `nx test akan` to execute the unit tests via [Jest](https://jestjs.io).
package/index.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from "./src";
package/index.js ADDED
@@ -0,0 +1,21 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __copyProps = (to, from, except, desc) => {
6
+ if (from && typeof from === "object" || typeof from === "function") {
7
+ for (let key of __getOwnPropNames(from))
8
+ if (!__hasOwnProp.call(to, key) && key !== except)
9
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
10
+ }
11
+ return to;
12
+ };
13
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
14
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
+ var constant_exports = {};
16
+ module.exports = __toCommonJS(constant_exports);
17
+ __reExport(constant_exports, require("./src"), module.exports);
18
+ // Annotate the CommonJS export names for ESM import in node:
19
+ 0 && (module.exports = {
20
+ ...require("./src")
21
+ });
package/package.json ADDED
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "@akanjs/constant",
3
+ "version": "0.0.4",
4
+ "type": "commonjs",
5
+ "publishConfig": {
6
+ "access": "public"
7
+ },
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "https://github.com/akan-team/akanjs.git",
11
+ "directory": "pkgs/@akanjs/constant"
12
+ },
13
+ "dependencies": {
14
+ "@urql/core": "5.1.0",
15
+ "dayjs": "1.11.13",
16
+ "mongoose": "8.9.3",
17
+ "pluralize": "8.0.0",
18
+ "reflect-metadata": "0.2.2",
19
+ "tunnel-ssh": "5.2.0"
20
+ },
21
+ "main": "./index.js"
22
+ }
@@ -0,0 +1,13 @@
1
+ import "reflect-metadata";
2
+ import { BaseObject, Type } from "@akanjs/base";
3
+ export declare function ExtendModel<T>(modelRef: Type<T>): Type<T>;
4
+ export declare function BaseModel<T>(modelRef: Type<T>): Type<T & BaseObject>;
5
+ export declare function AddModel<A, T1, T2 = unknown, T3 = unknown, T4 = unknown, T5 = unknown, T6 = unknown, T7 = unknown, T8 = unknown, T9 = unknown, T10 = unknown>(modelRef: Type<A>, t1: Type<T1>, t2?: Type<T2>, t3?: Type<T3>, t4?: Type<T4>, t5?: Type<T5>, t6?: Type<T6>, t7?: Type<T7>, t8?: Type<T8>, t9?: Type<T9>, t10?: Type<T10>): Type<A & T1 & T2 & T3 & T4 & T5 & T6 & T7 & T8 & T9 & T10>;
6
+ export declare function AddFilter<A, T1 = unknown, T2 = unknown, T3 = unknown, T4 = unknown, T5 = unknown, T6 = unknown, T7 = unknown, T8 = unknown, T9 = unknown, T10 = unknown>(filterRef: Type<A>, t1?: Type<T1>, t2?: Type<T2>, t3?: Type<T3>, t4?: Type<T4>, t5?: Type<T5>, t6?: Type<T6>, t7?: Type<T7>, t8?: Type<T8>, t9?: Type<T9>, t10?: Type<T10>): Type<A & T1 & T2 & T3 & T4 & T5 & T6 & T7 & T8 & T9 & T10>;
7
+ export declare function MixModels<T1 = unknown, T2 = unknown, T3 = unknown, T4 = unknown, T5 = unknown, T6 = unknown, T7 = unknown, T8 = unknown, T9 = unknown, T10 = unknown, T11 = unknown, T12 = unknown, T13 = unknown, T14 = unknown, T15 = unknown, T16 = unknown, T17 = unknown, T18 = unknown, T19 = unknown, T20 = unknown>(t1: Type<T1>, t2?: Type<T2>, t3?: Type<T3>, t4?: Type<T4>, t5?: Type<T5>, t6?: Type<T6>, t7?: Type<T7>, t8?: Type<T8>, t9?: Type<T9>, t10?: Type<T10>, t11?: Type<T11>, t12?: Type<T12>, t13?: Type<T13>, t14?: Type<T14>, t15?: Type<T15>, t16?: Type<T16>, t17?: Type<T17>, t18?: Type<T18>, t19?: Type<T19>, t20?: Type<T20>): Type<T1 & T2 & T3 & T4 & T5 & T6 & T7 & T8 & T9 & T10 & T11 & T12 & T13 & T14 & T15 & T16 & T17 & T18 & T19 & T20>;
8
+ type NonFunctionalKeys<T> = keyof T extends (...any: any[]) => any ? never : keyof T;
9
+ export declare function Light<T, F extends NonFunctionalKeys<Omit<T, "id" | "createdAt" | "updatedAt" | "removedAt">>>(objectRef: Type<T>, fields: readonly F[]): Type<{
10
+ [K in F]: T[K];
11
+ } & BaseObject>;
12
+ export declare function Full<A, B = undefined>(modelRef: Type<A>, lightRef: Type<B>, overwriteRef?: Type, overwriteLightRef?: Type): Type<Omit<A, keyof B> & B>;
13
+ export {};
package/src/baseGql.js ADDED
@@ -0,0 +1,158 @@
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 baseGql_exports = {};
19
+ __export(baseGql_exports, {
20
+ AddFilter: () => AddFilter,
21
+ AddModel: () => AddModel,
22
+ BaseModel: () => BaseModel,
23
+ ExtendModel: () => ExtendModel,
24
+ Full: () => Full,
25
+ Light: () => Light,
26
+ MixModels: () => MixModels
27
+ });
28
+ module.exports = __toCommonJS(baseGql_exports);
29
+ var import_reflect_metadata = require("reflect-metadata");
30
+ var import_base = require("@akanjs/base");
31
+ var import_common = require("@akanjs/common");
32
+ var import_filterMeta = require("./filterMeta");
33
+ var import_scalar = require("./scalar");
34
+ const defaultFieldMeta = {
35
+ fieldType: "property",
36
+ immutable: false,
37
+ select: true,
38
+ isClass: false,
39
+ isScalar: true,
40
+ nullable: false,
41
+ isArray: false,
42
+ arrDepth: 0,
43
+ optArrDepth: 0,
44
+ default: null,
45
+ isMap: false
46
+ };
47
+ const idFieldMeta = { ...defaultFieldMeta, key: "id", name: "ID", modelRef: import_base.ID };
48
+ const createdAtFieldMeta = { ...defaultFieldMeta, key: "createdAt", name: "Date", modelRef: Date };
49
+ const updatedAtFieldMeta = { ...defaultFieldMeta, key: "updatedAt", name: "Date", modelRef: Date };
50
+ const removedAtFieldMeta = {
51
+ ...defaultFieldMeta,
52
+ key: "removedAt",
53
+ name: "Date",
54
+ modelRef: Date,
55
+ nullable: true,
56
+ default: null
57
+ };
58
+ function ExtendModel(modelRef) {
59
+ class BaseModel2 {
60
+ }
61
+ const metadataMap = (0, import_scalar.getFieldMetaMap)(modelRef);
62
+ (0, import_scalar.setFieldMetaMap)(BaseModel2, metadataMap);
63
+ return BaseModel2;
64
+ }
65
+ function BaseModel(modelRef) {
66
+ class BaseModel2 {
67
+ __ModelType__ = "full";
68
+ }
69
+ const metadataMap = (0, import_scalar.getFieldMetaMap)(modelRef);
70
+ metadataMap.set("id", idFieldMeta);
71
+ metadataMap.set("createdAt", createdAtFieldMeta);
72
+ metadataMap.set("updatedAt", updatedAtFieldMeta);
73
+ metadataMap.set("removedAt", removedAtFieldMeta);
74
+ Reflect.defineMetadata("fields", metadataMap, BaseModel2.prototype);
75
+ return BaseModel2;
76
+ }
77
+ function AddModel(modelRef, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10) {
78
+ const modelMetadataMap = (0, import_scalar.getFieldMetaMap)(modelRef);
79
+ const metadataMap = new Map(
80
+ [t1, t2, t3, t4, t5, t6, t7, t8, t9, t10].filter((t) => !!t).reduce((acc, writeRef) => {
81
+ const writeMetadataMap = (0, import_scalar.getFieldMetaMap)(writeRef);
82
+ (0, import_common.applyMixins)(modelRef, [writeRef]);
83
+ return new Map([...acc, ...writeMetadataMap]);
84
+ }, modelMetadataMap)
85
+ );
86
+ (0, import_scalar.setFieldMetaMap)(modelRef, metadataMap);
87
+ return modelRef;
88
+ }
89
+ function AddFilter(filterRef, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10) {
90
+ const filterMeta = (0, import_filterMeta.getFilterMeta)(filterRef);
91
+ const filterQueryMap = (0, import_filterMeta.getFilterQueryMap)(filterRef);
92
+ const metadataMap = new Map(
93
+ [t1, t2, t3, t4, t5, t6, t7, t8, t9, t10].filter((t) => !!t).reduce((acc, writeRef) => {
94
+ const writeMetadataMap = (0, import_filterMeta.getFilterQueryMap)(writeRef);
95
+ (0, import_common.applyMixins)(filterRef, [writeRef]);
96
+ writeMetadataMap.forEach((value, key) => {
97
+ const filterArgMetas = (0, import_filterMeta.getFilterArgMetas)(writeRef, key);
98
+ (0, import_filterMeta.setFilterArgMetasOnPrototype)(filterRef.prototype, key, filterArgMetas);
99
+ });
100
+ return new Map([...acc, ...writeMetadataMap]);
101
+ }, filterQueryMap)
102
+ );
103
+ const filterSort = [t1, t2, t3, t4, t5, t6, t7, t8, t9, t10].filter((t) => !!t).map((t) => (0, import_filterMeta.getFilterSortMap)(t)).reduce((acc, sort) => {
104
+ Object.assign(acc, sort);
105
+ return acc;
106
+ }, filterMeta.sort);
107
+ (0, import_filterMeta.setFilterKeyMetaMapOnPrototype)(filterRef.prototype, metadataMap);
108
+ (0, import_filterMeta.setFilterMeta)(filterRef, { ...filterMeta, sort: filterSort });
109
+ return filterRef;
110
+ }
111
+ function MixModels(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, t20) {
112
+ class Mix {
113
+ }
114
+ const metadataMap = new Map(
115
+ [t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, t20].filter((t) => !!t).reduce((acc, modelRef) => {
116
+ const modelMetadataMap = (0, import_scalar.getFieldMetaMap)(modelRef);
117
+ (0, import_common.applyMixins)(Mix, [modelRef]);
118
+ return [...acc, ...modelMetadataMap];
119
+ }, [])
120
+ );
121
+ (0, import_scalar.setFieldMetaMap)(Mix, metadataMap);
122
+ return Mix;
123
+ }
124
+ function Light(objectRef, fields) {
125
+ const map = /* @__PURE__ */ new Map();
126
+ const metadataMap = (0, import_scalar.getFieldMetaMap)(objectRef);
127
+ class BaseGql {
128
+ __ModelType__ = "light";
129
+ }
130
+ ["id", ...fields, "createdAt", "updatedAt", "removedAt"].forEach((key) => map.set(key, metadataMap.get(key)));
131
+ Reflect.defineMetadata("fields", map, BaseGql.prototype);
132
+ return BaseGql;
133
+ }
134
+ function Full(modelRef, lightRef, overwriteRef, overwriteLightRef) {
135
+ const modelFieldMetaMap = (0, import_scalar.getFieldMetaMap)(modelRef);
136
+ const lightFieldMetaMap = (0, import_scalar.getFieldMetaMap)(lightRef);
137
+ (0, import_common.applyMixins)(modelRef, [lightRef]);
138
+ if (overwriteRef) {
139
+ (0, import_common.applyMixins)(overwriteRef, [modelRef]);
140
+ (0, import_scalar.setFieldMetaMap)(overwriteRef, modelFieldMetaMap);
141
+ }
142
+ if (overwriteLightRef) {
143
+ (0, import_common.applyMixins)(overwriteLightRef, [lightRef]);
144
+ (0, import_scalar.setFieldMetaMap)(overwriteLightRef, lightFieldMetaMap);
145
+ }
146
+ (0, import_scalar.setFieldMetaMap)(modelRef, new Map([...modelFieldMetaMap, ...lightFieldMetaMap]));
147
+ return modelRef;
148
+ }
149
+ // Annotate the CommonJS export names for ESM import in node:
150
+ 0 && (module.exports = {
151
+ AddFilter,
152
+ AddModel,
153
+ BaseModel,
154
+ ExtendModel,
155
+ Full,
156
+ Light,
157
+ MixModels
158
+ });
@@ -0,0 +1,3 @@
1
+ export { BaseModel as Model, Full, Light, AddModel, MixModels, ExtendModel, AddFilter } from "./baseGql";
2
+ export { BaseFilter as Filter } from "./filterMeta";
3
+ export { enumOf as enum, type EnumType as Enum } from "@akanjs/base";
@@ -0,0 +1,45 @@
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 base_temp_exports = {};
19
+ __export(base_temp_exports, {
20
+ AddFilter: () => import_baseGql.AddFilter,
21
+ AddModel: () => import_baseGql.AddModel,
22
+ ExtendModel: () => import_baseGql.ExtendModel,
23
+ Filter: () => import_filterMeta.BaseFilter,
24
+ Full: () => import_baseGql.Full,
25
+ Light: () => import_baseGql.Light,
26
+ MixModels: () => import_baseGql.MixModels,
27
+ Model: () => import_baseGql.BaseModel,
28
+ enum: () => import_base.enumOf
29
+ });
30
+ module.exports = __toCommonJS(base_temp_exports);
31
+ var import_baseGql = require("./baseGql");
32
+ var import_filterMeta = require("./filterMeta");
33
+ var import_base = require("@akanjs/base");
34
+ // Annotate the CommonJS export names for ESM import in node:
35
+ 0 && (module.exports = {
36
+ AddFilter,
37
+ AddModel,
38
+ ExtendModel,
39
+ Filter,
40
+ Full,
41
+ Light,
42
+ MixModels,
43
+ Model,
44
+ enum: null
45
+ });
@@ -0,0 +1,36 @@
1
+ import "reflect-metadata";
2
+ import { type Enum, type Type } from "@akanjs/base";
3
+ export declare class InputModelStorage {
4
+ }
5
+ export declare class LightModelStorage {
6
+ }
7
+ export declare class FullModelStorage {
8
+ }
9
+ export declare class ScalarModelStorage {
10
+ }
11
+ export declare class FilterModelStorage {
12
+ }
13
+ export declare const getFullModelRef: (refName: string) => Type;
14
+ export declare const getInputModelRef: (refName: string) => Type;
15
+ export declare const getScalarModelRef: (refName: string) => Type;
16
+ export declare const getChildClassRefs: (target: Type) => Type[];
17
+ export declare const getFieldEnumMetas: (modelRef: Type) => {
18
+ key: string;
19
+ enum: Enum<string | number>;
20
+ }[];
21
+ export declare const hasTextField: (modelRef: Type) => boolean;
22
+ export type ClassType = "light" | "full" | "input" | "scalar";
23
+ export declare const Model: {
24
+ Light: (refName: string) => (target: Type) => void;
25
+ Object: (refName: string) => (target: Type) => void;
26
+ Full: (refName: string) => (target: Type) => void;
27
+ Input: (refName: string) => (target: Type) => void;
28
+ Scalar: (refName: string) => (target: Type) => void;
29
+ Summary: (refName: string) => (target: Type) => void;
30
+ Insight: (refName: string) => (target: Type) => void;
31
+ Filter: (refName: string) => (target: Type) => void;
32
+ };
33
+ export declare const getLightModelRef: (modelRef: Type) => Type;
34
+ export declare const getAllFullModelRefs: () => Type[];
35
+ export declare const getAllScalarModelRefs: () => Type[];
36
+ export declare const getAllFilterModelRefs: () => Type[];
@@ -0,0 +1,166 @@
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 classMeta_exports = {};
19
+ __export(classMeta_exports, {
20
+ FilterModelStorage: () => FilterModelStorage,
21
+ FullModelStorage: () => FullModelStorage,
22
+ InputModelStorage: () => InputModelStorage,
23
+ LightModelStorage: () => LightModelStorage,
24
+ Model: () => Model,
25
+ ScalarModelStorage: () => ScalarModelStorage,
26
+ getAllFilterModelRefs: () => getAllFilterModelRefs,
27
+ getAllFullModelRefs: () => getAllFullModelRefs,
28
+ getAllScalarModelRefs: () => getAllScalarModelRefs,
29
+ getChildClassRefs: () => getChildClassRefs,
30
+ getFieldEnumMetas: () => getFieldEnumMetas,
31
+ getFullModelRef: () => getFullModelRef,
32
+ getInputModelRef: () => getInputModelRef,
33
+ getLightModelRef: () => getLightModelRef,
34
+ getScalarModelRef: () => getScalarModelRef,
35
+ hasTextField: () => hasTextField
36
+ });
37
+ module.exports = __toCommonJS(classMeta_exports);
38
+ var import_reflect_metadata = require("reflect-metadata");
39
+ var import_common = require("@akanjs/common");
40
+ var import_filterMeta = require("./filterMeta");
41
+ var import_scalar = require("./scalar");
42
+ class InputModelStorage {
43
+ }
44
+ class LightModelStorage {
45
+ }
46
+ class FullModelStorage {
47
+ }
48
+ class ScalarModelStorage {
49
+ }
50
+ class FilterModelStorage {
51
+ }
52
+ const getFullModelRef = (refName) => {
53
+ const modelRef = Reflect.getMetadata((0, import_common.capitalize)(refName), FullModelStorage.prototype);
54
+ if (!modelRef)
55
+ throw new Error(`FullModel not found - ${refName}`);
56
+ return modelRef;
57
+ };
58
+ const getInputModelRef = (refName) => {
59
+ const modelRef = Reflect.getMetadata((0, import_common.capitalize)(refName), InputModelStorage.prototype);
60
+ if (!modelRef)
61
+ throw new Error(`InputModel not found - ${refName}`);
62
+ return modelRef;
63
+ };
64
+ const getScalarModelRef = (refName) => {
65
+ const modelRef = Reflect.getMetadata((0, import_common.capitalize)(refName), ScalarModelStorage.prototype);
66
+ if (!modelRef)
67
+ throw new Error(`ScalarModel not found - ${refName}`);
68
+ return modelRef;
69
+ };
70
+ const getChildClassRefs = (target) => {
71
+ const metadatas = (0, import_scalar.getFieldMetas)(target);
72
+ const refMap = /* @__PURE__ */ new Map();
73
+ const childRefs = metadatas.filter((metadata) => metadata.isClass).reduce((acc, metadata) => {
74
+ return [...acc, metadata.modelRef, ...getChildClassRefs(metadata.modelRef)];
75
+ }, []);
76
+ childRefs.filter((modelRef, idx) => childRefs.findIndex((ref) => ref.prototype === modelRef.prototype) === idx).map((modelRef) => refMap.set((0, import_scalar.getClassMeta)(modelRef).refName, modelRef));
77
+ return [...refMap.values()];
78
+ };
79
+ const getFieldEnumMetas = (modelRef) => {
80
+ const fieldMetas = (0, import_scalar.getFieldMetas)(modelRef);
81
+ return fieldMetas.filter((fieldMeta) => !!fieldMeta.enum).map((fieldMeta) => ({ key: fieldMeta.key, enum: fieldMeta.enum }));
82
+ };
83
+ const hasTextField = (modelRef) => {
84
+ const fieldMetas = (0, import_scalar.getFieldMetas)(modelRef);
85
+ return fieldMetas.some(
86
+ (fieldMeta) => !!fieldMeta.text || fieldMeta.isScalar && fieldMeta.isClass && fieldMeta.select && hasTextField(fieldMeta.modelRef)
87
+ );
88
+ };
89
+ const applyClassMeta = (type, modelType, storage) => {
90
+ return function(refName) {
91
+ return function(target) {
92
+ const modelRef = target;
93
+ const classMeta = { refName, type, modelType, modelRef, hasTextField: hasTextField(modelRef) };
94
+ Reflect.defineMetadata("class", classMeta, modelRef.prototype);
95
+ Reflect.defineMetadata(refName, modelRef, storage.prototype);
96
+ };
97
+ };
98
+ };
99
+ const applyFilterMeta = (storage) => {
100
+ return function(refName) {
101
+ return function(target) {
102
+ const modelRef = target;
103
+ (0, import_filterMeta.setFilterMeta)(modelRef, { refName, sort: {} });
104
+ Reflect.defineMetadata(refName, modelRef, storage.prototype);
105
+ };
106
+ };
107
+ };
108
+ const Model = {
109
+ Light: applyClassMeta("light", "data", LightModelStorage),
110
+ Object: applyClassMeta("full", "ephemeral", FullModelStorage),
111
+ Full: applyClassMeta("full", "data", FullModelStorage),
112
+ Input: applyClassMeta("input", "data", InputModelStorage),
113
+ Scalar: applyClassMeta("scalar", "data", ScalarModelStorage),
114
+ Summary: applyClassMeta("scalar", "summary", ScalarModelStorage),
115
+ Insight: applyClassMeta("scalar", "insight", ScalarModelStorage),
116
+ Filter: applyFilterMeta(FilterModelStorage)
117
+ };
118
+ const getLightModelRef = (modelRef) => {
119
+ const classMeta = (0, import_scalar.getClassMeta)(modelRef);
120
+ if (classMeta.type !== "full")
121
+ return modelRef;
122
+ const lightModelRef = Reflect.getMetadata(`Light${classMeta.refName}`, LightModelStorage.prototype);
123
+ if (!lightModelRef)
124
+ throw new Error(`LightModel not found - ${classMeta.refName}`);
125
+ return lightModelRef;
126
+ };
127
+ const getAllFullModelRefs = () => {
128
+ const modelNames = Reflect.getMetadataKeys(FullModelStorage.prototype);
129
+ const modelRefs = modelNames.map(
130
+ (modelName) => Reflect.getMetadata(modelName, FullModelStorage.prototype)
131
+ );
132
+ return modelRefs;
133
+ };
134
+ const getAllScalarModelRefs = () => {
135
+ const modelNames = Reflect.getMetadataKeys(ScalarModelStorage.prototype);
136
+ const modelRefs = modelNames.map(
137
+ (modelName) => Reflect.getMetadata(modelName, ScalarModelStorage.prototype)
138
+ );
139
+ return modelRefs;
140
+ };
141
+ const getAllFilterModelRefs = () => {
142
+ const modelNames = Reflect.getMetadataKeys(FilterModelStorage.prototype);
143
+ const modelRefs = modelNames.map(
144
+ (modelName) => Reflect.getMetadata(modelName, FilterModelStorage.prototype)
145
+ );
146
+ return modelRefs;
147
+ };
148
+ // Annotate the CommonJS export names for ESM import in node:
149
+ 0 && (module.exports = {
150
+ FilterModelStorage,
151
+ FullModelStorage,
152
+ InputModelStorage,
153
+ LightModelStorage,
154
+ Model,
155
+ ScalarModelStorage,
156
+ getAllFilterModelRefs,
157
+ getAllFullModelRefs,
158
+ getAllScalarModelRefs,
159
+ getChildClassRefs,
160
+ getFieldEnumMetas,
161
+ getFullModelRef,
162
+ getInputModelRef,
163
+ getLightModelRef,
164
+ getScalarModelRef,
165
+ hasTextField
166
+ });
@@ -0,0 +1,14 @@
1
+ import "reflect-metadata";
2
+ import type { Type } from "@akanjs/base";
3
+ import type { FilterType } from "./types";
4
+ export declare const getCnstMeta: (refName: string) => ConstantModel<any, any, any, any, any, any>;
5
+ export interface ConstantModel<T extends string, Input, Full, Light, Insight, Filter extends FilterType, Summary = any> {
6
+ refName: T;
7
+ Input: Type<Input>;
8
+ Full: Type<Full>;
9
+ Light: Type<Light>;
10
+ Insight: Type<Insight>;
11
+ Filter: Type<Filter>;
12
+ Summary?: Type<Summary>;
13
+ }
14
+ export declare const cnstOf: <T extends string, Input, Full, Light, Insight, Filter extends FilterType, Summary>(refName: T, Input: Type<Input>, Full: Type<Full>, Light: Type<Light>, Insight: Type<Insight>, Filter: Type<Filter>, Summary?: Type<Summary>) => ConstantModel<T, Input, Full, Light, Insight, Filter, Summary>;
@@ -0,0 +1,45 @@
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 constantDecorator_exports = {};
19
+ __export(constantDecorator_exports, {
20
+ cnstOf: () => cnstOf,
21
+ getCnstMeta: () => getCnstMeta
22
+ });
23
+ module.exports = __toCommonJS(constantDecorator_exports);
24
+ var import_reflect_metadata = require("reflect-metadata");
25
+ class CnstStorage {
26
+ }
27
+ const setCnstMeta = (refName, cnst) => {
28
+ Reflect.defineMetadata(refName, cnst, CnstStorage.prototype);
29
+ };
30
+ const getCnstMeta = (refName) => {
31
+ const cnst = Reflect.getMetadata(refName, CnstStorage.prototype);
32
+ if (!cnst)
33
+ throw new Error(`No cnst meta for ${refName}`);
34
+ return cnst;
35
+ };
36
+ const cnstOf = (refName, Input, Full, Light, Insight, Filter, Summary) => {
37
+ const cnst = { refName, Input, Full, Light, Insight, Filter, Summary };
38
+ setCnstMeta(refName, cnst);
39
+ return cnst;
40
+ };
41
+ // Annotate the CommonJS export names for ESM import in node:
42
+ 0 && (module.exports = {
43
+ cnstOf,
44
+ getCnstMeta
45
+ });
@@ -0,0 +1,7 @@
1
+ import { ConstantFieldProps, ReturnType } from "./scalar";
2
+ export declare const Field: {
3
+ Prop: (returns: ReturnType, fieldOption?: Omit<ConstantFieldProps, "fieldType" | "select"> | Omit<ConstantFieldProps, "nullable" | "fieldType" | "select">[]) => PropertyDecorator;
4
+ Hidden: (returns: ReturnType, fieldOption?: Omit<ConstantFieldProps, "fieldType" | "select"> | Omit<ConstantFieldProps, "nullable" | "fieldType" | "select">[]) => PropertyDecorator;
5
+ Secret: (returns: ReturnType, fieldOption?: Omit<ConstantFieldProps, "fieldType" | "select"> | Omit<ConstantFieldProps, "nullable" | "fieldType" | "select">[]) => PropertyDecorator;
6
+ Resolve: (returns: ReturnType, fieldOption?: Omit<ConstantFieldProps, "fieldType" | "select"> | Omit<ConstantFieldProps, "nullable" | "fieldType" | "select">[]) => PropertyDecorator;
7
+ };
@@ -0,0 +1,86 @@
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 fieldMeta_exports = {};
19
+ __export(fieldMeta_exports, {
20
+ Field: () => Field
21
+ });
22
+ module.exports = __toCommonJS(fieldMeta_exports);
23
+ var import_base = require("@akanjs/base");
24
+ var import_scalar = require("./scalar");
25
+ const applyFieldMeta = (modelRef, arrDepth, option, optionArrDepth) => {
26
+ const isArray = arrDepth > 0;
27
+ const isClass = !(0, import_base.isGqlScalar)(modelRef);
28
+ const isMap = (0, import_base.isGqlMap)(modelRef);
29
+ const { refName, type } = isClass ? (0, import_scalar.getClassMeta)(modelRef) : { refName: "", type: "scalar" };
30
+ const name = isClass ? refName : import_base.scalarNameMap.get(modelRef) ?? "Unknown";
31
+ if (isMap && !option.of)
32
+ throw new Error("Map type must have 'of' option");
33
+ return (prototype, key) => {
34
+ const metadata = {
35
+ nullable: option.nullable ?? false,
36
+ ref: option.ref,
37
+ refPath: option.refPath,
38
+ refType: option.refType,
39
+ default: option.default ?? (isArray ? [] : null),
40
+ type: option.type,
41
+ fieldType: option.fieldType ?? "property",
42
+ immutable: option.immutable ?? false,
43
+ min: option.min,
44
+ max: option.max,
45
+ enum: option.enum,
46
+ select: option.select ?? true,
47
+ minlength: option.minlength,
48
+ maxlength: option.maxlength,
49
+ query: option.query,
50
+ accumulate: option.accumulate,
51
+ example: option.example,
52
+ validate: option.validate,
53
+ key,
54
+ name,
55
+ isClass,
56
+ isScalar: type === "scalar",
57
+ modelRef,
58
+ arrDepth,
59
+ isArray,
60
+ optArrDepth: optionArrDepth,
61
+ isMap,
62
+ of: option.of,
63
+ text: option.text
64
+ };
65
+ const metadataMap = (0, import_scalar.getFieldMetaMapOnPrototype)(prototype);
66
+ metadataMap.set(key, metadata);
67
+ (0, import_scalar.setFieldMetaMapOnPrototype)(prototype, metadataMap);
68
+ };
69
+ };
70
+ const makeField = (customOption) => (returns, fieldOption) => {
71
+ const [modelRef, arrDepth] = (0, import_base.getNonArrayModel)(returns());
72
+ if (!fieldOption)
73
+ return applyFieldMeta(modelRef, arrDepth, { ...customOption }, arrDepth);
74
+ const [opt, optArrDepth] = (0, import_base.getNonArrayModel)(fieldOption);
75
+ return applyFieldMeta(modelRef, arrDepth, { ...opt, ...customOption }, optArrDepth);
76
+ };
77
+ const Field = {
78
+ Prop: makeField({ fieldType: "property" }),
79
+ Hidden: makeField({ fieldType: "hidden", nullable: true }),
80
+ Secret: makeField({ fieldType: "hidden", select: false, nullable: true }),
81
+ Resolve: makeField({ fieldType: "resolve" })
82
+ };
83
+ // Annotate the CommonJS export names for ESM import in node:
84
+ 0 && (module.exports = {
85
+ Field
86
+ });
@@ -0,0 +1,40 @@
1
+ import { type Type } from "@akanjs/base";
2
+ import { type ConstantFilterMeta, type FilterArgMeta, type FilterArgProps, type FilterKeyMeta, type FilterKeyProps, type ReturnType } from "./scalar";
3
+ import type { QueryOf, SortType } from "./types";
4
+ export declare const getFilterMeta: (filterRef: Type) => ConstantFilterMeta;
5
+ export declare const setFilterMeta: (filterRef: Type, filterMeta: ConstantFilterMeta) => void;
6
+ export declare const getFilterKeyMetaMapOnPrototype: (prototype: object) => Map<string, FilterKeyMeta>;
7
+ export declare const setFilterKeyMetaMapOnPrototype: (prototype: object, metadataMap: Map<string, FilterKeyMeta>) => void;
8
+ export declare const setFilterArgMetasOnPrototype: (prototype: object, key: string, filterArgMetas: FilterArgMeta[]) => void;
9
+ export declare const getFilterArgMetas: (filterRef: Type, key: string) => FilterArgMeta[];
10
+ export declare const getFilterQuery: (filterRef: Type, key: string) => (...args: any[]) => QueryOf<any>;
11
+ export declare const getFilterQueryMap: (filterRef: Type) => Map<string, FilterKeyMeta>;
12
+ export declare const getFilterSort: (filterRef: Type, key: string) => {
13
+ [key: string]: number;
14
+ };
15
+ export declare const getFilterSortMap: (filterRef: Type) => SortType;
16
+ export declare const Filter: {
17
+ Mongo: (fieldOption?: Omit<FilterKeyProps, "type">) => (prototype: object, key: string, descriptor: PropertyDescriptor) => void;
18
+ Arg: (name: string, returns: ReturnType, argOption?: FilterArgProps | FilterArgProps[]) => (prototype: object, key: string, idx: number) => void;
19
+ };
20
+ export type BaseFilterKey = "latest" | "oldest" | "any" | "byStatuses";
21
+ export declare function BaseFilter<Sort extends SortType>(modelRef: Type, sort: Sort): Type<{
22
+ latest: {
23
+ createdAt: number;
24
+ };
25
+ oldest: {
26
+ createdAt: number;
27
+ };
28
+ any(): {
29
+ removedAt: {
30
+ $exists: boolean;
31
+ };
32
+ };
33
+ byStatuses(statuses: string[] | null): {
34
+ status: {
35
+ $in: string[];
36
+ };
37
+ } | {
38
+ status?: undefined;
39
+ };
40
+ } & Sort>;
@@ -0,0 +1,165 @@
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 __decorateClass = (decorators, target, key, kind) => {
19
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
20
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
21
+ if (decorator = decorators[i])
22
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
23
+ if (kind && result)
24
+ __defProp(target, key, result);
25
+ return result;
26
+ };
27
+ var __decorateParam = (index, decorator) => (target, key) => decorator(target, key, index);
28
+ var filterMeta_exports = {};
29
+ __export(filterMeta_exports, {
30
+ BaseFilter: () => BaseFilter,
31
+ Filter: () => Filter,
32
+ getFilterArgMetas: () => getFilterArgMetas,
33
+ getFilterKeyMetaMapOnPrototype: () => getFilterKeyMetaMapOnPrototype,
34
+ getFilterMeta: () => getFilterMeta,
35
+ getFilterQuery: () => getFilterQuery,
36
+ getFilterQueryMap: () => getFilterQueryMap,
37
+ getFilterSort: () => getFilterSort,
38
+ getFilterSortMap: () => getFilterSortMap,
39
+ setFilterArgMetasOnPrototype: () => setFilterArgMetasOnPrototype,
40
+ setFilterKeyMetaMapOnPrototype: () => setFilterKeyMetaMapOnPrototype,
41
+ setFilterMeta: () => setFilterMeta
42
+ });
43
+ module.exports = __toCommonJS(filterMeta_exports);
44
+ var import_base = require("@akanjs/base");
45
+ var import_scalar = require("./scalar");
46
+ const getFilterMeta = (filterRef) => {
47
+ const filterMeta = Reflect.getMetadata("filter", filterRef.prototype);
48
+ if (!filterMeta)
49
+ throw new Error("filterMeta is not defined");
50
+ return filterMeta;
51
+ };
52
+ const setFilterMeta = (filterRef, filterMeta) => {
53
+ const existingFilterMeta = Reflect.getMetadata("filter", filterRef.prototype);
54
+ if (existingFilterMeta)
55
+ Object.assign(filterMeta.sort, existingFilterMeta.sort);
56
+ Reflect.defineMetadata("filter", filterMeta, filterRef.prototype);
57
+ };
58
+ const getFilterKeyMetaMapOnPrototype = (prototype) => {
59
+ const metadataMap = Reflect.getMetadata("filterKey", prototype) ?? /* @__PURE__ */ new Map();
60
+ return new Map(metadataMap);
61
+ };
62
+ const setFilterKeyMetaMapOnPrototype = (prototype, metadataMap) => {
63
+ Reflect.defineMetadata("filterKey", new Map(metadataMap), prototype);
64
+ };
65
+ const applyFilterKeyMeta = (option) => {
66
+ return (prototype, key, descriptor) => {
67
+ const metadata = { key, ...option, descriptor };
68
+ const metadataMap = getFilterKeyMetaMapOnPrototype(prototype);
69
+ metadataMap.set(key, metadata);
70
+ setFilterKeyMetaMapOnPrototype(prototype, metadataMap);
71
+ };
72
+ };
73
+ const makeFilter = (customOption) => (fieldOption) => {
74
+ return applyFilterKeyMeta({ ...customOption, ...fieldOption });
75
+ };
76
+ const getFilterArgMetasOnPrototype = (prototype, key) => {
77
+ const filterArgMetas = Reflect.getMetadata("filterArg", prototype, key) ?? [];
78
+ return filterArgMetas;
79
+ };
80
+ const setFilterArgMetasOnPrototype = (prototype, key, filterArgMetas) => {
81
+ Reflect.defineMetadata("filterArg", filterArgMetas, prototype, key);
82
+ };
83
+ const getFilterArgMetas = (filterRef, key) => {
84
+ const filterArgMetas = getFilterArgMetasOnPrototype(filterRef.prototype, key);
85
+ return filterArgMetas;
86
+ };
87
+ const applyFilterArgMeta = (name, returns, argOption) => {
88
+ return (prototype, key, idx) => {
89
+ const [modelRef, arrDepth] = (0, import_base.getNonArrayModel)(returns());
90
+ const [opt, optArrDepth] = (0, import_base.getNonArrayModel)(argOption ?? {});
91
+ const filterArgMeta = { name, ...opt, modelRef, arrDepth, isArray: arrDepth > 0, optArrDepth };
92
+ const filterArgMetas = getFilterArgMetasOnPrototype(prototype, key);
93
+ filterArgMetas[idx] = filterArgMeta;
94
+ setFilterArgMetasOnPrototype(prototype, key, filterArgMetas);
95
+ };
96
+ };
97
+ const getFilterQuery = (filterRef, key) => {
98
+ const filterKeyMetaMap = getFilterKeyMetaMapOnPrototype(filterRef.prototype);
99
+ const filterKeyMeta = filterKeyMetaMap.get(key);
100
+ if (!filterKeyMeta?.descriptor.value)
101
+ throw new Error(`filterKeyMeta is not defined for key: ${key}`);
102
+ return filterKeyMeta.descriptor.value;
103
+ };
104
+ const getFilterQueryMap = (filterRef) => {
105
+ const filterKeyMetaMap = getFilterKeyMetaMapOnPrototype(filterRef.prototype);
106
+ return filterKeyMetaMap;
107
+ };
108
+ const getFilterSort = (filterRef, key) => {
109
+ const filterMeta = getFilterMeta(filterRef);
110
+ const sort = filterMeta.sort[key];
111
+ return sort;
112
+ };
113
+ const getFilterSortMap = (filterRef) => {
114
+ const filterMeta = getFilterMeta(filterRef);
115
+ return filterMeta.sort;
116
+ };
117
+ const Filter = {
118
+ Mongo: makeFilter({ type: "mongo" }),
119
+ // Meili: makeFilter({ fieldType: "hidden", nullable: true }),
120
+ Arg: applyFilterArgMeta
121
+ };
122
+ function BaseFilter(modelRef, sort) {
123
+ const fieldMetaMap = (0, import_scalar.getFieldMetaMap)(modelRef);
124
+ const statusFieldMeta = fieldMetaMap.get("status");
125
+ if (!statusFieldMeta)
126
+ throw new Error(`No status field meta fount in ${modelRef.name}`);
127
+ class BaseFilter2 {
128
+ latest = { createdAt: -1 };
129
+ oldest = { createdAt: 1 };
130
+ any() {
131
+ return { removedAt: { $exists: false } };
132
+ }
133
+ byStatuses(statuses) {
134
+ return statuses?.length ? { status: { $in: statuses } } : {};
135
+ }
136
+ }
137
+ __decorateClass([
138
+ Filter.Mongo()
139
+ ], BaseFilter2.prototype, "any", 1);
140
+ __decorateClass([
141
+ Filter.Mongo(),
142
+ __decorateParam(0, Filter.Arg("statuses", () => [String], { nullable: true, enum: statusFieldMeta?.enum }))
143
+ ], BaseFilter2.prototype, "byStatuses", 1);
144
+ Object.assign(BaseFilter2.prototype, sort);
145
+ setFilterMeta(BaseFilter2, {
146
+ refName: "BaseFilter",
147
+ sort: Object.assign({ latest: { createdAt: -1 }, oldest: { createdAt: 1 } }, sort)
148
+ });
149
+ return BaseFilter2;
150
+ }
151
+ // Annotate the CommonJS export names for ESM import in node:
152
+ 0 && (module.exports = {
153
+ BaseFilter,
154
+ Filter,
155
+ getFilterArgMetas,
156
+ getFilterKeyMetaMapOnPrototype,
157
+ getFilterMeta,
158
+ getFilterQuery,
159
+ getFilterQueryMap,
160
+ getFilterSort,
161
+ getFilterSortMap,
162
+ setFilterArgMetasOnPrototype,
163
+ setFilterKeyMetaMapOnPrototype,
164
+ setFilterMeta
165
+ });
package/src/index.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ export * as base from "./base_temp";
2
+ export * from "./types";
3
+ export * from "./fieldMeta";
4
+ export * from "./scalar";
5
+ export * from "./constantDecorator";
6
+ export * from "./filterMeta";
7
+ export * from "./baseGql";
8
+ export * from "./classMeta";
package/src/index.js ADDED
@@ -0,0 +1,52 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var src_exports = {};
30
+ __export(src_exports, {
31
+ base: () => base
32
+ });
33
+ module.exports = __toCommonJS(src_exports);
34
+ var base = __toESM(require("./base_temp"));
35
+ __reExport(src_exports, require("./types"), module.exports);
36
+ __reExport(src_exports, require("./fieldMeta"), module.exports);
37
+ __reExport(src_exports, require("./scalar"), module.exports);
38
+ __reExport(src_exports, require("./constantDecorator"), module.exports);
39
+ __reExport(src_exports, require("./filterMeta"), module.exports);
40
+ __reExport(src_exports, require("./baseGql"), module.exports);
41
+ __reExport(src_exports, require("./classMeta"), module.exports);
42
+ // Annotate the CommonJS export names for ESM import in node:
43
+ 0 && (module.exports = {
44
+ base,
45
+ ...require("./types"),
46
+ ...require("./fieldMeta"),
47
+ ...require("./scalar"),
48
+ ...require("./constantDecorator"),
49
+ ...require("./filterMeta"),
50
+ ...require("./baseGql"),
51
+ ...require("./classMeta")
52
+ });
@@ -0,0 +1,90 @@
1
+ import "reflect-metadata";
2
+ import { type Dayjs, type Enum, Float, type GqlScalar, ID, Int, JSON, type SingleFieldType, type Type, Upload } from "@akanjs/base";
3
+ import type { AccumulatorOperator } from "mongoose";
4
+ import { type QueryOf, type SortType } from "./types";
5
+ export declare const scalarExampleMap: Map<MapConstructor | typeof Int | typeof Upload | typeof Float | typeof ID | typeof JSON | StringConstructor | BooleanConstructor | DateConstructor, string | number | boolean | object>;
6
+ export declare const getScalarExample: (ref: GqlScalar) => string | number | boolean | object | null;
7
+ export declare const getGqlTypeStr: (ref: GqlScalar) => string;
8
+ export interface ConstantClassMeta {
9
+ refName: string;
10
+ modelRef: any;
11
+ type: "input" | "full" | "light" | "scalar";
12
+ modelType: "data" | "ephemeral" | "summary" | "insight";
13
+ hasTextField: boolean;
14
+ }
15
+ export interface ConstantFilterMeta {
16
+ refName: string;
17
+ sort: SortType;
18
+ }
19
+ export interface FilterKeyProps {
20
+ type?: "mongo" | "meili";
21
+ }
22
+ export interface FilterKeyMeta extends FilterKeyProps {
23
+ key: string;
24
+ descriptor: PropertyDescriptor;
25
+ }
26
+ export interface FilterArgProps {
27
+ nullable?: boolean;
28
+ ref?: string;
29
+ default?: string | number | boolean | object | null | (() => string | number | boolean | object | null);
30
+ renderOption?: (value: any) => string;
31
+ enum?: Enum<string | number>;
32
+ }
33
+ export interface FilterArgMeta extends FilterArgProps {
34
+ name: string;
35
+ modelRef: Type;
36
+ arrDepth: number;
37
+ isArray: boolean;
38
+ optArrDepth: number;
39
+ }
40
+ export declare const fieldTypes: readonly ["email", "password", "url"];
41
+ export type FieldType = (typeof fieldTypes)[number];
42
+ export type ReturnType<T extends SingleFieldType = SingleFieldType> = (of?: any) => T | [T] | [[T]] | Map<string, any>;
43
+ export interface ConstantFieldProps {
44
+ nullable?: boolean;
45
+ ref?: string;
46
+ refPath?: string;
47
+ refType?: "child" | "parent" | "relation";
48
+ default?: string | number | boolean | object | null | Enum<string | number>;
49
+ type?: FieldType;
50
+ fieldType?: "property" | "hidden" | "resolve";
51
+ immutable?: boolean;
52
+ min?: number;
53
+ max?: number;
54
+ enum?: Enum<string | number>;
55
+ select?: boolean;
56
+ minlength?: number;
57
+ maxlength?: number;
58
+ query?: QueryOf<any> | (() => QueryOf<any>);
59
+ accumulate?: AccumulatorOperator;
60
+ example?: string | number | boolean | Dayjs | string[] | number[] | boolean[] | Dayjs[];
61
+ of?: GqlScalar;
62
+ validate?: (value: any, model: any) => boolean;
63
+ text?: "search" | "filter";
64
+ }
65
+ export type ConstantFieldMeta = ConstantFieldProps & {
66
+ nullable: boolean;
67
+ default: any;
68
+ fieldType: "property" | "hidden" | "resolve";
69
+ immutable: boolean;
70
+ select: boolean;
71
+ } & {
72
+ key: string;
73
+ name: string;
74
+ isClass: boolean;
75
+ isScalar: boolean;
76
+ modelRef: Type;
77
+ arrDepth: number;
78
+ isArray: boolean;
79
+ optArrDepth: number;
80
+ isMap: boolean;
81
+ };
82
+ export declare const getClassMeta: (modelRef: Type) => ConstantClassMeta;
83
+ export declare const getFieldMetas: (modelRef: Type) => ConstantFieldMeta[];
84
+ export declare const getFieldMetaMap: (modelRef: Type) => Map<string, ConstantFieldMeta>;
85
+ export declare const setFieldMetaMap: (modelRef: Type, metadataMap: Map<string, ConstantFieldMeta>) => void;
86
+ export declare const getFieldMetaMapOnPrototype: (prototype: object) => Map<string, ConstantFieldMeta>;
87
+ export declare const setFieldMetaMapOnPrototype: (prototype: object, metadataMap: Map<string, ConstantFieldMeta>) => void;
88
+ export declare const getQueryMap: (modelRef: Type) => {
89
+ [key: string]: QueryOf<any> | undefined | (() => QueryOf<any>);
90
+ };
package/src/scalar.js ADDED
@@ -0,0 +1,97 @@
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 scalar_exports = {};
19
+ __export(scalar_exports, {
20
+ fieldTypes: () => fieldTypes,
21
+ getClassMeta: () => getClassMeta,
22
+ getFieldMetaMap: () => getFieldMetaMap,
23
+ getFieldMetaMapOnPrototype: () => getFieldMetaMapOnPrototype,
24
+ getFieldMetas: () => getFieldMetas,
25
+ getGqlTypeStr: () => getGqlTypeStr,
26
+ getQueryMap: () => getQueryMap,
27
+ getScalarExample: () => getScalarExample,
28
+ scalarExampleMap: () => scalarExampleMap,
29
+ setFieldMetaMap: () => setFieldMetaMap,
30
+ setFieldMetaMapOnPrototype: () => setFieldMetaMapOnPrototype
31
+ });
32
+ module.exports = __toCommonJS(scalar_exports);
33
+ var import_reflect_metadata = require("reflect-metadata");
34
+ var import_base = require("@akanjs/base");
35
+ const scalarExampleMap = /* @__PURE__ */ new Map([
36
+ [import_base.ID, "1234567890abcdef12345678"],
37
+ [import_base.Int, 0],
38
+ [import_base.Float, 0],
39
+ [String, "String"],
40
+ [Boolean, true],
41
+ [Date, (/* @__PURE__ */ new Date()).toISOString()],
42
+ [import_base.Upload, "FileUpload"],
43
+ [import_base.JSON, {}],
44
+ [Map, {}]
45
+ ]);
46
+ const getScalarExample = (ref) => scalarExampleMap.get(ref) ?? null;
47
+ const getGqlTypeStr = (ref) => import_base.scalarNameMap.get(ref) ?? getClassMeta(ref).refName;
48
+ const fieldTypes = ["email", "password", "url"];
49
+ const getClassMeta = (modelRef) => {
50
+ const [target] = (0, import_base.getNonArrayModel)(modelRef);
51
+ const classMeta = Reflect.getMetadata("class", target.prototype);
52
+ if (!classMeta)
53
+ throw new Error(`No ClassMeta for this target ${target.name}`);
54
+ return classMeta;
55
+ };
56
+ const getFieldMetas = (modelRef) => {
57
+ const [target] = (0, import_base.getNonArrayModel)(modelRef);
58
+ const metadataMap = Reflect.getMetadata("fields", target.prototype) ?? /* @__PURE__ */ new Map();
59
+ const keySortMap = { id: -1, createdAt: 1, updatedAt: 2, removedAt: 3 };
60
+ return [...metadataMap.values()].sort((a, b) => (keySortMap[a.key] ?? 0) - (keySortMap[b.key] ?? 0));
61
+ };
62
+ const getFieldMetaMap = (modelRef) => {
63
+ const [target] = (0, import_base.getNonArrayModel)(modelRef);
64
+ const metadataMap = Reflect.getMetadata("fields", target.prototype) ?? /* @__PURE__ */ new Map();
65
+ return new Map(metadataMap);
66
+ };
67
+ const setFieldMetaMap = (modelRef, metadataMap) => {
68
+ const [target] = (0, import_base.getNonArrayModel)(modelRef);
69
+ Reflect.defineMetadata("fields", new Map(metadataMap), target.prototype);
70
+ };
71
+ const getFieldMetaMapOnPrototype = (prototype) => {
72
+ const metadataMap = Reflect.getMetadata("fields", prototype) ?? /* @__PURE__ */ new Map();
73
+ return new Map(metadataMap);
74
+ };
75
+ const setFieldMetaMapOnPrototype = (prototype, metadataMap) => {
76
+ Reflect.defineMetadata("fields", new Map(metadataMap), prototype);
77
+ };
78
+ const getQueryMap = (modelRef) => {
79
+ const fieldMetas = getFieldMetas(modelRef);
80
+ return Object.fromEntries(
81
+ fieldMetas.filter((fieldMeta) => !!fieldMeta.query).map((fieldMeta) => [fieldMeta.key, fieldMeta.query])
82
+ );
83
+ };
84
+ // Annotate the CommonJS export names for ESM import in node:
85
+ 0 && (module.exports = {
86
+ fieldTypes,
87
+ getClassMeta,
88
+ getFieldMetaMap,
89
+ getFieldMetaMapOnPrototype,
90
+ getFieldMetas,
91
+ getGqlTypeStr,
92
+ getQueryMap,
93
+ getScalarExample,
94
+ scalarExampleMap,
95
+ setFieldMetaMap,
96
+ setFieldMetaMapOnPrototype
97
+ });
package/src/types.d.ts ADDED
@@ -0,0 +1,91 @@
1
+ import { type BaseObject, Dayjs } from "@akanjs/base";
2
+ import type { FilterQuery, HydratedDocument, ProjectionType } from "mongoose";
3
+ export type { FilterQuery as QueryOf };
4
+ type Optional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>;
5
+ type OptionalKeys<T> = T extends {
6
+ [key: string]: any;
7
+ } ? {
8
+ [K in keyof T]-?: null extends T[K] ? K : never;
9
+ }[keyof T] : never;
10
+ type ObjectToId<O, D = Dayjs> = O extends BaseObject ? string : O extends BaseObject[] ? string[] : O extends Dayjs ? D : O extends {
11
+ [key: string]: any;
12
+ } ? DocumentModel<O> : O;
13
+ export interface SortType {
14
+ [key: string]: {
15
+ [key: string]: number;
16
+ };
17
+ }
18
+ export type SortOf<Filter> = keyof GetStateObject<Filter>;
19
+ export type FilterType = Record<string, any>;
20
+ export interface ListQueryOption<Sort, Obj> {
21
+ skip?: number | null;
22
+ limit?: number | null;
23
+ sort?: Sort | null;
24
+ sample?: number;
25
+ select?: ProjectionType<Obj>;
26
+ }
27
+ export interface FindQueryOption<Sort, Obj> {
28
+ skip?: number | null;
29
+ sort?: Sort | null;
30
+ sample?: boolean;
31
+ select?: ProjectionType<Obj>;
32
+ }
33
+ export type DocumentModel<T, D = Dayjs> = T extends (infer S)[] ? DocumentModel<S>[] : T extends string ? T : T extends number ? T : T extends boolean ? T : T extends Dayjs ? T : T extends Map<infer K, infer V> ? Map<K, DocumentModel<V, D>> : Optional<{
34
+ [K in keyof GetStateObject<T>]: T[K] extends infer S ? S extends null ? undefined : ObjectToId<T[K], D> : never;
35
+ }, OptionalKeys<GetStateObject<T>>>;
36
+ export interface ListOption {
37
+ limit?: number;
38
+ skip?: number;
39
+ sort?: string;
40
+ }
41
+ export declare const defaultListOption: ListOption;
42
+ export type GetPlainObject<T, O extends string> = Omit<{
43
+ [K in keyof T as T[K] extends (...args: any) => any ? never : K extends keyof HydratedDocument<any> ? never : K]: T[K];
44
+ }, O>;
45
+ export type GetStateObject<T> = Omit<{
46
+ [K in keyof T as T[K] extends (...args: any) => any ? never : K]: T[K];
47
+ }, "prototype">;
48
+ export type GetActionObject<T> = Omit<{
49
+ [K in keyof T as T[K] extends (...args: any) => any ? K : never]: T[K];
50
+ }, "prototype">;
51
+ export interface ProtoFile {
52
+ id: string;
53
+ filename: string;
54
+ abstractData: string | null;
55
+ imageSize: [number, number];
56
+ progress: number | null;
57
+ url: string;
58
+ size: number;
59
+ status: string;
60
+ createdAt: Dayjs;
61
+ updatedAt: Dayjs;
62
+ removedAt: Dayjs | null;
63
+ mimetype: string;
64
+ encoding: string;
65
+ origin: string | null;
66
+ lastModifiedAt: Dayjs;
67
+ }
68
+ export interface ProtoAppInfo {
69
+ appId: string | null;
70
+ appName: string;
71
+ deviceId: string | null;
72
+ platform: "ios" | "android" | null;
73
+ major: number;
74
+ minor: number;
75
+ patch: number;
76
+ branch: string;
77
+ buildNum: string | null;
78
+ versionOs: string | null;
79
+ isEmulator: boolean | null;
80
+ }
81
+ export interface ProtoPatch {
82
+ source: ProtoFile;
83
+ build: ProtoFile;
84
+ appBuild: ProtoFile | null;
85
+ status: "active" | "expired";
86
+ at: Dayjs;
87
+ }
88
+ export declare const DEFAULT_PAGE_SIZE = 20;
89
+ export interface TextDoc {
90
+ [key: string]: string | TextDoc;
91
+ }
package/src/types.js ADDED
@@ -0,0 +1,34 @@
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 types_exports = {};
19
+ __export(types_exports, {
20
+ DEFAULT_PAGE_SIZE: () => DEFAULT_PAGE_SIZE,
21
+ defaultListOption: () => defaultListOption
22
+ });
23
+ module.exports = __toCommonJS(types_exports);
24
+ const defaultListOption = {
25
+ limit: 20,
26
+ skip: 0,
27
+ sort: "latest"
28
+ };
29
+ const DEFAULT_PAGE_SIZE = 20;
30
+ // Annotate the CommonJS export names for ESM import in node:
31
+ 0 && (module.exports = {
32
+ DEFAULT_PAGE_SIZE,
33
+ defaultListOption
34
+ });