@liminalfunctions/framework 1.0.0

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 (181) hide show
  1. package/.mocharc.json +5 -0
  2. package/dist/F_Client_Collection_Registry.d.ts +18 -0
  3. package/dist/F_Client_Collection_Registry.js +36 -0
  4. package/dist/F_Client_Collection_Registry.js.map +1 -0
  5. package/dist/F_Collection.d.ts +21 -0
  6. package/dist/F_Collection.js +36 -0
  7. package/dist/F_Collection.js.map +1 -0
  8. package/dist/F_Collection_Registry.d.ts +11 -0
  9. package/dist/F_Collection_Registry.js +18 -0
  10. package/dist/F_Collection_Registry.js.map +1 -0
  11. package/dist/F_Compile.d.ts +4 -0
  12. package/dist/F_Compile.js +298 -0
  13. package/dist/F_Compile.js.map +1 -0
  14. package/dist/F_Security_Models/F_SM_Open_Access.d.ts +11 -0
  15. package/dist/F_Security_Models/F_SM_Open_Access.js +14 -0
  16. package/dist/F_Security_Models/F_SM_Open_Access.js.map +1 -0
  17. package/dist/F_Security_Models/F_SM_Ownership.d.ts +12 -0
  18. package/dist/F_Security_Models/F_SM_Ownership.js +46 -0
  19. package/dist/F_Security_Models/F_SM_Ownership.js.map +1 -0
  20. package/dist/F_Security_Models/F_SM_Role_Membership.d.ts +19 -0
  21. package/dist/F_Security_Models/F_SM_Role_Membership.js +73 -0
  22. package/dist/F_Security_Models/F_SM_Role_Membership.js.map +1 -0
  23. package/dist/F_Security_Models/F_Security_Model.d.ts +41 -0
  24. package/dist/F_Security_Models/F_Security_Model.js +29 -0
  25. package/dist/F_Security_Models/F_Security_Model.js.map +1 -0
  26. package/dist/code_generation/generate_client_library.d.ts +4 -0
  27. package/dist/code_generation/generate_client_library.js +158 -0
  28. package/dist/code_generation/generate_client_library.js.map +1 -0
  29. package/dist/code_generation/templates/.gitignore.mustache +383 -0
  30. package/dist/code_generation/templates/collection.mustache +106 -0
  31. package/dist/code_generation/templates/main.mustache +24 -0
  32. package/dist/code_generation/templates/package.json.mustache +18 -0
  33. package/dist/code_generation/templates/tsconfig.json.mustache +14 -0
  34. package/dist/code_generation/templates/types.mustache +4 -0
  35. package/dist/code_generation/templates/utils.ts.mustache +17 -0
  36. package/dist/code_generation/utils/tab_indent.d.ts +1 -0
  37. package/dist/code_generation/utils/tab_indent.js +4 -0
  38. package/dist/code_generation/utils/tab_indent.js.map +1 -0
  39. package/dist/code_generation/utils/type_from_zod.d.ts +2 -0
  40. package/dist/code_generation/utils/type_from_zod.js +102 -0
  41. package/dist/code_generation/utils/type_from_zod.js.map +1 -0
  42. package/dist/utils/cache.d.ts +13 -0
  43. package/dist/utils/cache.js +101 -0
  44. package/dist/utils/cache.js.map +1 -0
  45. package/dist/utils/mongoose_from_zod.d.ts +13 -0
  46. package/dist/utils/mongoose_from_zod.js +164 -0
  47. package/dist/utils/mongoose_from_zod.js.map +1 -0
  48. package/dist/utils/pretty_print_zod.d.ts +2 -0
  49. package/dist/utils/pretty_print_zod.js +63 -0
  50. package/dist/utils/pretty_print_zod.js.map +1 -0
  51. package/dist/utils/query_object_to_mongodb_query.d.ts +3 -0
  52. package/dist/utils/query_object_to_mongodb_query.js +61 -0
  53. package/dist/utils/query_object_to_mongodb_query.js.map +1 -0
  54. package/dist/utils/query_validator_from_zod.d.ts +6 -0
  55. package/dist/utils/query_validator_from_zod.js +216 -0
  56. package/dist/utils/query_validator_from_zod.js.map +1 -0
  57. package/package.json +36 -0
  58. package/src/F_Collection.ts +50 -0
  59. package/src/F_Collection_Registry.ts +29 -0
  60. package/src/F_Compile.ts +368 -0
  61. package/src/F_Security_Models/F_SM_Open_Access.ts +21 -0
  62. package/src/F_Security_Models/F_SM_Ownership.ts +72 -0
  63. package/src/F_Security_Models/F_SM_Role_Membership.ts +87 -0
  64. package/src/F_Security_Models/F_Security_Model.ts +85 -0
  65. package/src/code_generation/generate_client_library.ts +197 -0
  66. package/src/code_generation/templates/.gitignore.mustache +383 -0
  67. package/src/code_generation/templates/collection.mustache +106 -0
  68. package/src/code_generation/templates/main.mustache +24 -0
  69. package/src/code_generation/templates/package.json.mustache +18 -0
  70. package/src/code_generation/templates/tsconfig.json.mustache +14 -0
  71. package/src/code_generation/templates/types.mustache +4 -0
  72. package/src/code_generation/templates/utils.ts.mustache +17 -0
  73. package/src/code_generation/utils/tab_indent.ts +3 -0
  74. package/src/code_generation/utils/type_from_zod.ts +140 -0
  75. package/src/utils/cache.ts +149 -0
  76. package/src/utils/mongoose_from_zod.ts +191 -0
  77. package/src/utils/pretty_print_zod.ts +75 -0
  78. package/src/utils/query_object_to_mongodb_query.ts +73 -0
  79. package/src/utils/query_validator_from_zod.ts +246 -0
  80. package/test/0_0_mongoose_from_zod.test.ts +260 -0
  81. package/test/0_1_query_validator_from_zod.test.ts +518 -0
  82. package/test/0_2_query_validator_to_mongodb_query.test.ts +365 -0
  83. package/test/0_3_cache.test.ts +204 -0
  84. package/test/1_0_basic_server.test.ts +530 -0
  85. package/test/1_1_security_ownership.test.ts +328 -0
  86. package/test/1_2_role_membership.test.ts +731 -0
  87. package/test/2_0_client_library_basic_type_generation.test.ts +444 -0
  88. package/test/2_0_client_library_query_type_generation.test.ts +352 -0
  89. package/test/2_1_client_library_generation.test.ts +255 -0
  90. package/test/tmp/dist/Brief_News_Category.d.ts +16 -0
  91. package/test/tmp/dist/Brief_News_Category.js +85 -0
  92. package/test/tmp/dist/Brief_News_Category.js.map +1 -0
  93. package/test/tmp/dist/Client.d.ts +19 -0
  94. package/test/tmp/dist/Client.js +97 -0
  95. package/test/tmp/dist/Client.js.map +1 -0
  96. package/test/tmp/dist/Institution.d.ts +18 -0
  97. package/test/tmp/dist/Institution.js +94 -0
  98. package/test/tmp/dist/Institution.js.map +1 -0
  99. package/test/tmp/dist/Project.d.ts +16 -0
  100. package/test/tmp/dist/Project.js +85 -0
  101. package/test/tmp/dist/Project.js.map +1 -0
  102. package/test/tmp/dist/index.d.ts +4 -0
  103. package/test/tmp/dist/index.js +14 -0
  104. package/test/tmp/dist/index.js.map +1 -0
  105. package/test/tmp/dist/types/brief_news_category.d.ts +7 -0
  106. package/test/tmp/dist/types/brief_news_category.js +2 -0
  107. package/test/tmp/dist/types/brief_news_category.js.map +1 -0
  108. package/test/tmp/dist/types/brief_news_category_post.d.ts +7 -0
  109. package/test/tmp/dist/types/brief_news_category_post.js +2 -0
  110. package/test/tmp/dist/types/brief_news_category_post.js.map +1 -0
  111. package/test/tmp/dist/types/brief_news_category_put.d.ts +7 -0
  112. package/test/tmp/dist/types/brief_news_category_put.js +2 -0
  113. package/test/tmp/dist/types/brief_news_category_put.js.map +1 -0
  114. package/test/tmp/dist/types/brief_news_category_query.d.ts +26 -0
  115. package/test/tmp/dist/types/brief_news_category_query.js +2 -0
  116. package/test/tmp/dist/types/brief_news_category_query.js.map +1 -0
  117. package/test/tmp/dist/types/client.d.ts +5 -0
  118. package/test/tmp/dist/types/client.js +2 -0
  119. package/test/tmp/dist/types/client.js.map +1 -0
  120. package/test/tmp/dist/types/client_post.d.ts +5 -0
  121. package/test/tmp/dist/types/client_post.js +2 -0
  122. package/test/tmp/dist/types/client_post.js.map +1 -0
  123. package/test/tmp/dist/types/client_put.d.ts +5 -0
  124. package/test/tmp/dist/types/client_put.js +2 -0
  125. package/test/tmp/dist/types/client_put.js.map +1 -0
  126. package/test/tmp/dist/types/client_query.d.ts +18 -0
  127. package/test/tmp/dist/types/client_query.js +2 -0
  128. package/test/tmp/dist/types/client_query.js.map +1 -0
  129. package/test/tmp/dist/types/institution.d.ts +4 -0
  130. package/test/tmp/dist/types/institution.js +2 -0
  131. package/test/tmp/dist/types/institution.js.map +1 -0
  132. package/test/tmp/dist/types/institution_post.d.ts +4 -0
  133. package/test/tmp/dist/types/institution_post.js +2 -0
  134. package/test/tmp/dist/types/institution_post.js.map +1 -0
  135. package/test/tmp/dist/types/institution_put.d.ts +4 -0
  136. package/test/tmp/dist/types/institution_put.js +2 -0
  137. package/test/tmp/dist/types/institution_put.js.map +1 -0
  138. package/test/tmp/dist/types/institution_query.d.ts +14 -0
  139. package/test/tmp/dist/types/institution_query.js +2 -0
  140. package/test/tmp/dist/types/institution_query.js.map +1 -0
  141. package/test/tmp/dist/types/project.d.ts +7 -0
  142. package/test/tmp/dist/types/project.js +2 -0
  143. package/test/tmp/dist/types/project.js.map +1 -0
  144. package/test/tmp/dist/types/project_post.d.ts +7 -0
  145. package/test/tmp/dist/types/project_post.js +2 -0
  146. package/test/tmp/dist/types/project_post.js.map +1 -0
  147. package/test/tmp/dist/types/project_put.d.ts +7 -0
  148. package/test/tmp/dist/types/project_put.js +2 -0
  149. package/test/tmp/dist/types/project_put.js.map +1 -0
  150. package/test/tmp/dist/types/project_query.d.ts +27 -0
  151. package/test/tmp/dist/types/project_query.js +2 -0
  152. package/test/tmp/dist/types/project_query.js.map +1 -0
  153. package/test/tmp/dist/utils/utils.d.ts +11 -0
  154. package/test/tmp/dist/utils/utils.js +13 -0
  155. package/test/tmp/dist/utils/utils.js.map +1 -0
  156. package/test/tmp/package-lock.json +573 -0
  157. package/test/tmp/package.json +18 -0
  158. package/test/tmp/src/Brief_News_Category.ts +94 -0
  159. package/test/tmp/src/Client.ts +106 -0
  160. package/test/tmp/src/Institution.ts +103 -0
  161. package/test/tmp/src/Project.ts +94 -0
  162. package/test/tmp/src/index.ts +20 -0
  163. package/test/tmp/src/types/brief_news_category.ts +7 -0
  164. package/test/tmp/src/types/brief_news_category_post.ts +7 -0
  165. package/test/tmp/src/types/brief_news_category_put.ts +7 -0
  166. package/test/tmp/src/types/brief_news_category_query.ts +26 -0
  167. package/test/tmp/src/types/client.ts +5 -0
  168. package/test/tmp/src/types/client_post.ts +5 -0
  169. package/test/tmp/src/types/client_put.ts +5 -0
  170. package/test/tmp/src/types/client_query.ts +18 -0
  171. package/test/tmp/src/types/institution.ts +4 -0
  172. package/test/tmp/src/types/institution_post.ts +4 -0
  173. package/test/tmp/src/types/institution_put.ts +4 -0
  174. package/test/tmp/src/types/institution_query.ts +14 -0
  175. package/test/tmp/src/types/project.ts +7 -0
  176. package/test/tmp/src/types/project_post.ts +7 -0
  177. package/test/tmp/src/types/project_put.ts +7 -0
  178. package/test/tmp/src/types/project_query.ts +27 -0
  179. package/test/tmp/src/utils/utils.ts +17 -0
  180. package/test/tmp/tsconfig.json +14 -0
  181. package/tsconfig.json +14 -0
@@ -0,0 +1,13 @@
1
+ export declare class Cache<T> {
2
+ timeout_map: Map<string, NodeJS.Timeout>;
3
+ base_cache: Map<string, T>;
4
+ refetch_map: Map<string, Promise<T>>;
5
+ duration: number;
6
+ constructor(duration: number);
7
+ get(key: string): T;
8
+ set(key: string, value: T): void;
9
+ reset_expiry_timer_for(key: string): void;
10
+ delete(key: string): void;
11
+ first_get_then_fetch(key: string, fetch_function: () => Promise<T>): Promise<T>;
12
+ first_fetch_then_refresh(key: string, fetch_function: () => Promise<T>): Promise<T>;
13
+ }
@@ -0,0 +1,101 @@
1
+ export class Cache {
2
+ timeout_map;
3
+ base_cache;
4
+ refetch_map;
5
+ duration;
6
+ constructor(duration) {
7
+ this.timeout_map = new Map();
8
+ this.base_cache = new Map();
9
+ this.refetch_map = new Map();
10
+ this.duration = duration;
11
+ }
12
+ get(key) {
13
+ this.reset_expiry_timer_for(key);
14
+ return this.base_cache.get(key);
15
+ }
16
+ set(key, value) {
17
+ this.base_cache.set(key, value);
18
+ this.reset_expiry_timer_for(key);
19
+ }
20
+ reset_expiry_timer_for(key) {
21
+ if (this.timeout_map.has(key)) {
22
+ clearTimeout(this.timeout_map.get(key));
23
+ }
24
+ if (this.base_cache.has(key)) {
25
+ this.timeout_map.set(key, setTimeout(() => {
26
+ this.base_cache.delete(key);
27
+ this.timeout_map.delete(key);
28
+ }, this.duration));
29
+ }
30
+ }
31
+ delete(key) {
32
+ this.base_cache.delete(key);
33
+ clearTimeout(this.timeout_map.get(key));
34
+ this.timeout_map.delete(key);
35
+ }
36
+ async first_get_then_fetch(key, fetch_function) {
37
+ if (this.base_cache.has(key)) {
38
+ return this.get(key);
39
+ }
40
+ if (this.refetch_map.has(key)) {
41
+ let result_value;
42
+ try {
43
+ result_value = await this.refetch_map.get(key);
44
+ }
45
+ catch (err) {
46
+ return Promise.reject(err);
47
+ }
48
+ return result_value;
49
+ }
50
+ let result_value;
51
+ let fetch_promise = fetch_function().finally(() => {
52
+ this.refetch_map.delete(key);
53
+ });
54
+ this.refetch_map.set(key, fetch_promise);
55
+ try {
56
+ result_value = await fetch_promise;
57
+ }
58
+ catch (err) {
59
+ return Promise.reject(err);
60
+ }
61
+ this.set(key, result_value);
62
+ return result_value;
63
+ }
64
+ async first_fetch_then_refresh(key, fetch_function) {
65
+ if (this.refetch_map.has(key)) {
66
+ if (this.base_cache.has(key)) {
67
+ return this.get(key);
68
+ }
69
+ let result_value;
70
+ try {
71
+ result_value = await this.refetch_map.get(key);
72
+ }
73
+ catch (err) {
74
+ return Promise.reject(err);
75
+ }
76
+ return result_value;
77
+ }
78
+ if (this.base_cache.has(key)) {
79
+ let result_value = this.get(key);
80
+ let fetch_promise = fetch_function().finally(() => {
81
+ this.refetch_map.delete(key);
82
+ });
83
+ this.refetch_map.set(key, fetch_promise);
84
+ return result_value;
85
+ }
86
+ let retval;
87
+ let fetch_promise = fetch_function().finally(() => {
88
+ this.refetch_map.delete(key);
89
+ });
90
+ this.refetch_map.set(key, fetch_promise);
91
+ try {
92
+ retval = await fetch_promise;
93
+ }
94
+ catch (err) {
95
+ return Promise.reject(err);
96
+ }
97
+ this.set(key, retval);
98
+ return retval;
99
+ }
100
+ }
101
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { z } from "zod/v4";
2
+ import mongoose from "mongoose";
3
+ export declare const magic_values: z.core.$ZodRegistry<{
4
+ override_type: string;
5
+ }, z.core.$ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
6
+ export declare const z_mongodb_id: z.ZodCustom<string, string>;
7
+ export declare function mongoose_from_zod<T>(schema_name: string, zod_definition: z.core.$ZodType): mongoose.Model<T, {}, {}, {}, mongoose.IfAny<T, any, mongoose.Document<unknown, {}, T, {}, {}> & (mongoose.Require_id<T> extends infer T_1 ? T_1 extends mongoose.Require_id<T> ? T_1 extends {
8
+ __v?: infer U;
9
+ } ? T_1 : T_1 & {
10
+ __v: number;
11
+ } : never : never)>, any>;
12
+ export declare function schema_from_zod(zod_definition: z.core.$ZodType): any;
13
+ export declare function schema_entry_from_zod(zod_definition: z.ZodType, loop_detector?: Set<any>): any;
@@ -0,0 +1,164 @@
1
+ import { z } from "zod/v4";
2
+ import mongoose, { Schema } from "mongoose";
3
+ export const magic_values = z.registry();
4
+ const underlying_mongodb_id_validator = z.string().length(24);
5
+ export const z_mongodb_id = z.custom((val) => {
6
+ if (!val) {
7
+ return false;
8
+ }
9
+ return underlying_mongodb_id_validator.parse(val) === val;
10
+ }).meta({
11
+ "type": "string",
12
+ "format": "string",
13
+ }).register(magic_values, { override_type: 'mongodb_id' });
14
+ export function mongoose_from_zod(schema_name, zod_definition) {
15
+ let mongoose_schema = schema_from_zod(zod_definition);
16
+ return mongoose.model(schema_name, mongoose_schema);
17
+ }
18
+ export function schema_from_zod(zod_definition) {
19
+ let mongoose_schema = schema_entry_from_zod(zod_definition);
20
+ delete mongoose_schema.type.required;
21
+ delete mongoose_schema.type._id;
22
+ return mongoose_schema.type;
23
+ }
24
+ export function schema_entry_from_zod(zod_definition, loop_detector = new Set()) {
25
+ if (!zod_definition) {
26
+ console.error('ISSUE');
27
+ console.error(zod_definition);
28
+ }
29
+ let result;
30
+ switch (zod_definition._zod.def.type) {
31
+ case "string":
32
+ result = parse_string(zod_definition._zod.def);
33
+ result.required = !zod_definition.safeParse(undefined).success;
34
+ return result;
35
+ case "number":
36
+ case "int":
37
+ result = parse_number(zod_definition._zod.def);
38
+ result.required = !zod_definition.safeParse(undefined).success;
39
+ return result;
40
+ case "object":
41
+ result = parse_object(zod_definition._zod.def, loop_detector);
42
+ result.required = !zod_definition.safeParse(undefined).success;
43
+ return result;
44
+ case "boolean":
45
+ result = parse_boolean(zod_definition._zod.def);
46
+ result.required = !zod_definition.safeParse(undefined).success;
47
+ return result;
48
+ case "date":
49
+ result = parse_date(zod_definition._zod.def);
50
+ result.required = !zod_definition.safeParse(undefined).success;
51
+ return result;
52
+ case "undefined":
53
+ throw new Error(`Zod type not yet supported: ${zod_definition._zod.def.type});`);
54
+ case "null":
55
+ throw new Error(`Zod type not yet supported: ${zod_definition._zod.def.type});`);
56
+ case "array":
57
+ result = parse_array(zod_definition._zod.def, loop_detector);
58
+ result.required = !zod_definition.safeParse(undefined).success;
59
+ return result;
60
+ case "nullable":
61
+ return schema_entry_from_zod(zod_definition._zod.def.innerType, loop_detector);
62
+ case "optional":
63
+ return parse_optional(zod_definition._zod.def, loop_detector);
64
+ case "map":
65
+ result = parse_map(zod_definition._zod.def, loop_detector);
66
+ result.required = !zod_definition.safeParse(undefined).success;
67
+ return result;
68
+ case "any":
69
+ result = { type: Schema.Types.Mixed };
70
+ case "default":
71
+ result = parse_default(zod_definition._zod.def, loop_detector);
72
+ result.required = true;
73
+ return result;
74
+ case "enum":
75
+ result = parse_enum(zod_definition._zod.def);
76
+ result.required = !zod_definition.safeParse(undefined).success;
77
+ return result;
78
+ case "union":
79
+ result = parse_union(zod_definition._zod.def);
80
+ result.required = !zod_definition.safeParse(undefined).success;
81
+ return result;
82
+ case "readonly":
83
+ throw new Error(`Zod type not yet supported: ${zod_definition._zod.def.type});`);
84
+ case "custom":
85
+ if (!magic_values.has(zod_definition)) {
86
+ throw new Error(`could not find custom parser in the magic value dictionary`);
87
+ }
88
+ let { override_type } = magic_values.get(zod_definition);
89
+ if (override_type === 'mongodb_id') {
90
+ result = parse_mongodb_id(zod_definition._zod.def);
91
+ }
92
+ else {
93
+ throw new Error(`could not find custom parser for ${override_type} in the magic value dictionary`);
94
+ }
95
+ result.required = !zod_definition.safeParse(undefined).success;
96
+ return result;
97
+ default:
98
+ throw new Error("Cannot process zod type: " + zod_definition._zod.def.type);
99
+ }
100
+ }
101
+ function parse_object(def, loop_detector) {
102
+ if (loop_detector.has(def)) {
103
+ return { type: Schema.Types.Mixed, required: true };
104
+ }
105
+ loop_detector.add(def);
106
+ let retval = {};
107
+ for (let [key, value] of Object.entries(def.shape)) {
108
+ retval[key] = schema_entry_from_zod(value, loop_detector);
109
+ }
110
+ return { type: retval, required: true };
111
+ }
112
+ function parse_array(def, loop_detector) {
113
+ let retval = { type: [schema_entry_from_zod(def.element, loop_detector)] };
114
+ retval.required = true;
115
+ return retval;
116
+ }
117
+ function parse_enum(def) {
118
+ let retval = { type: String };
119
+ retval.required = true;
120
+ return retval;
121
+ }
122
+ function parse_union(def) {
123
+ let retval = { type: Schema.Types.Mixed };
124
+ retval.required = true;
125
+ return retval;
126
+ }
127
+ function parse_map(def, loop_detector) {
128
+ if (def.keyType._zod.def.type !== 'string') {
129
+ throw new Error('mongoDB only supports maps where the key is a string.');
130
+ }
131
+ let retval = { type: Schema.Types.Map, of: schema_entry_from_zod(def.valueType, loop_detector), required: true };
132
+ retval.required = true;
133
+ return retval;
134
+ }
135
+ function parse_string(def) {
136
+ let retval = { type: String };
137
+ return retval;
138
+ }
139
+ function parse_number(def) {
140
+ let retval = { type: Number };
141
+ return retval;
142
+ }
143
+ function parse_boolean(def) {
144
+ let retval = { type: Boolean };
145
+ return retval;
146
+ }
147
+ function parse_date(def) {
148
+ let retval = { type: Date };
149
+ return retval;
150
+ }
151
+ function parse_default(def, loop_detector) {
152
+ let type_definition = schema_entry_from_zod(def.innerType, loop_detector);
153
+ type_definition.default = def.defaultValue;
154
+ return type_definition;
155
+ }
156
+ function parse_optional(def, loop_detector) {
157
+ let type_definition = schema_entry_from_zod(def.innerType, loop_detector);
158
+ type_definition.required = false;
159
+ return type_definition;
160
+ }
161
+ function parse_mongodb_id(def) {
162
+ return { type: Schema.Types.ObjectId };
163
+ }
164
+ //# sourceMappingURL=mongoose_from_zod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongoose_from_zod.js","sourceRoot":"","sources":["../../src/utils/mongoose_from_zod.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { z } from "zod/v4";
2
+ export declare function pretty_print(zod_definition: z.ZodObject): void;
@@ -0,0 +1,63 @@
1
+ import { magic_values } from "./mongoose_from_zod.js";
2
+ export function pretty_print(zod_definition) {
3
+ console.log(parse_object(zod_definition._zod.def, new Set()));
4
+ }
5
+ function parse_any(zod_definition, loop_detector = new Set()) {
6
+ switch (zod_definition._zod.def.type) {
7
+ case "enum":
8
+ return parse_enum(zod_definition._zod.def);
9
+ case "string":
10
+ return 'string';
11
+ case "number":
12
+ case "int":
13
+ return 'number';
14
+ case "object":
15
+ return parse_object(zod_definition._zod.def, loop_detector);
16
+ case "boolean":
17
+ return 'boolean';
18
+ case "date":
19
+ return 'date';
20
+ case "array":
21
+ return parse_array(zod_definition._zod.def, loop_detector);
22
+ case "union":
23
+ return parse_union(zod_definition._zod.def);
24
+ case "custom":
25
+ if (!magic_values.has(zod_definition)) {
26
+ throw new Error(`could not find custom parser in the magic value dictionary`);
27
+ }
28
+ let { override_type } = magic_values.get(zod_definition);
29
+ if (override_type === 'mongodb_id') {
30
+ return 'mongodb_id';
31
+ }
32
+ else {
33
+ throw new Error(`could not find custom parser for ${override_type} in the magic value dictionary`);
34
+ }
35
+ case "default":
36
+ return parse_any(zod_definition._zod.def.innerType, loop_detector);
37
+ case "optional":
38
+ return parse_any(zod_definition._zod.def.innerType, loop_detector);
39
+ default:
40
+ return `unknown type ${zod_definition._zod.def.type}`;
41
+ }
42
+ }
43
+ function parse_array(def, loop_detector) {
44
+ return [parse_any(def.element, loop_detector)];
45
+ }
46
+ function parse_object(def, loop_detector) {
47
+ if (loop_detector.has(def)) {
48
+ return 'RECURSION';
49
+ }
50
+ loop_detector.add(def);
51
+ let retval = {};
52
+ for (let [key, value] of Object.entries(def.shape)) {
53
+ retval[key] = parse_any(value, loop_detector);
54
+ }
55
+ return retval;
56
+ }
57
+ function parse_union(def) {
58
+ return { or: def.options.map(ele => parse_any(ele)) };
59
+ }
60
+ function parse_enum(definition) {
61
+ return { enum: definition.entries };
62
+ }
63
+ //# sourceMappingURL=pretty_print_zod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pretty_print_zod.js","sourceRoot":"","sources":["../../src/utils/pretty_print_zod.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { QueryWithHelpers } from "mongoose";
2
+ export declare function query_object_to_mongodb_query(query_object: any): any;
3
+ export declare function query_object_to_mongodb_limits(query: QueryWithHelpers<any, any>, query_object: any, max_limit?: number): import("mongoose").Query<any, any, {}, any, "find", Record<string, never>>;
@@ -0,0 +1,61 @@
1
+ let complex_query_map = {
2
+ '_gt': '$gt',
3
+ '_lt': '$lt',
4
+ '_gte': '$gte',
5
+ '_lte': '$lte',
6
+ '_in': '$in'
7
+ };
8
+ let query_meta_map = {
9
+ 'limit': true,
10
+ 'cursor': true,
11
+ 'sort': true,
12
+ 'sort_order': true,
13
+ };
14
+ export function query_object_to_mongodb_query(query_object) {
15
+ let retval = {};
16
+ for (let [key, value] of Object.entries(query_object)) {
17
+ if (Object.keys(query_meta_map).includes(key)) {
18
+ continue;
19
+ }
20
+ let complex_suffix = Object.keys(complex_query_map).find(ele => key.endsWith(ele));
21
+ if (complex_suffix) {
22
+ let modified_key = key.slice(0, -complex_suffix.length);
23
+ if (!retval[modified_key]) {
24
+ retval[modified_key] = {};
25
+ }
26
+ retval[modified_key][complex_query_map[complex_suffix]] = value;
27
+ }
28
+ else {
29
+ retval[key] = value;
30
+ }
31
+ }
32
+ return retval;
33
+ }
34
+ export function query_object_to_mongodb_limits(query, query_object, max_limit = 100) {
35
+ if (query_object.sort) {
36
+ let sort = {};
37
+ sort[query_object.sort] = query_object.sort_order ? query_object.sort_order : 'ascending';
38
+ query.sort(sort);
39
+ }
40
+ if (query_object.sort_order && !query_object.sort) {
41
+ query.sort({ '_id': query_object.sort_order });
42
+ }
43
+ if (query_object.limit) {
44
+ query.limit(Math.min(Number.parseInt(query_object.limit), max_limit));
45
+ }
46
+ else {
47
+ query.limit(max_limit);
48
+ }
49
+ if (query_object.cursor) {
50
+ if (query_object.sort === '_id' && query_object.sort_order === 'descending') {
51
+ query.sort({ '_id': 'descending' });
52
+ query.lt('_id', query_object.cursor);
53
+ }
54
+ else {
55
+ query.sort({ '_id': 'ascending' });
56
+ query.gt('_id', query_object.cursor);
57
+ }
58
+ }
59
+ return query;
60
+ }
61
+ //# sourceMappingURL=query_object_to_mongodb_query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query_object_to_mongodb_query.js","sourceRoot":"","sources":["../../src/utils/query_object_to_mongodb_query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { z } from "zod/v4";
2
+ type Mode = 'client' | 'server';
3
+ export declare function query_validator_from_zod(zod_definition: z.ZodObject, mode?: Mode): z.ZodObject<{
4
+ [x: string]: any;
5
+ }, z.core.$strict>;
6
+ export {};