@thisisagile/easy-mongo 17.26.0 → 17.26.2

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.
@@ -0,0 +1,155 @@
1
+ import {
2
+ toMongoType
3
+ } from "./chunk-MZE7UWQC.mjs";
4
+
5
+ // src/Stages.ts
6
+ import {
7
+ asNumber,
8
+ asString,
9
+ ifDefined,
10
+ ifNotEmpty,
11
+ isDefined,
12
+ isPresent,
13
+ isPrimitive,
14
+ isString,
15
+ meta,
16
+ ofGet,
17
+ on,
18
+ toArray,
19
+ use
20
+ } from "@thisisagile/easy";
21
+ var asc = 1;
22
+ var desc = -1;
23
+ var FilterBuilder = class {
24
+ constructor(filters) {
25
+ this.filters = filters;
26
+ }
27
+ from = (q = {}) => stages.match.match(
28
+ meta(q).entries().reduce((acc, [key, value]) => ({ ...acc, ...ifDefined(this.filters[key], (f) => f(value)) }), {})
29
+ );
30
+ };
31
+ var SortBuilder = class {
32
+ constructor(sorts) {
33
+ this.sorts = sorts;
34
+ }
35
+ get keys() {
36
+ return Object.keys(this.sorts);
37
+ }
38
+ from = (s = {}, alt) => stages.sort.sort(this.sorts[s?.s ?? ""] ?? this.sorts[alt ?? ""]);
39
+ };
40
+ var IncludeBuilder = class {
41
+ constructor(includes) {
42
+ this.includes = includes;
43
+ }
44
+ get keys() {
45
+ return Object.keys(this.includes);
46
+ }
47
+ from = (i = {}, alt) => stages.project.include(...this.includes[i?.i ?? ""] ?? this.includes[alt ?? ""] ?? []);
48
+ };
49
+ var escapeRegex = (s) => s.replace(/[|\\{}()[\]^$+*?.]/g, "\\$&").replace(/-/g, "\\x2d");
50
+ var stages = {
51
+ root: "$$ROOT",
52
+ current: "$$CURRENT",
53
+ id: "_id",
54
+ decode: {
55
+ object: (f) => use(Object.entries(f)[0], ([k, v]) => ofGet(v, k)),
56
+ fields: (f) => Object.entries(f).reduce((res, [k, v]) => on(res, (r) => ifDefined(ofGet(v, k), (nv) => r[k] = nv)), {}),
57
+ fieldsArrays: (f) => Object.entries(f).reduce((res, [k, v]) => on(res, (r) => r[k] = use(toArray(v), (vs) => vs.map((v2) => ofGet(v2, k)))), {}),
58
+ id: (f) => isString(f) ? `$${asString(f)}` : isPrimitive(f) ? f : Object.entries(f).map(([k, v]) => ofGet(v, k))[0]
59
+ },
60
+ match: {
61
+ match: (f) => ({ $match: stages.decode.fields(f) }),
62
+ filter: (filters) => new FilterBuilder(filters),
63
+ or: (...filters) => ({ $or: toArray(filters).map((f) => stages.decode.object(f)) }),
64
+ gt: (value) => ({ $gt: value }),
65
+ gte: (value) => ({ $gte: value }),
66
+ lt: (value) => ({ $lt: value }),
67
+ lte: (value) => ({ $lte: value }),
68
+ isIn: (value, separator = ",") => ({ $in: isString(value) ? value.split(separator) : value }),
69
+ notIn: (value, separator = ",") => ({ $nin: isString(value) ? value.split(separator) : value }),
70
+ after: (date) => stages.match.gte(toMongoType(date)),
71
+ before: (date) => stages.match.lt(toMongoType(date)),
72
+ anywhere: (q) => ({ $regex: escapeRegex(q), $options: "i" }),
73
+ money: (currency, value) => (key) => ({
74
+ [`${key}.currency`]: currency.id,
75
+ ...stages.decode.fields({ [`${key}.value`]: value })
76
+ })
77
+ },
78
+ sort: {
79
+ sort: ($sort) => isPresent($sort) ? { $sort } : void 0,
80
+ sorter: (sorts) => new SortBuilder(sorts),
81
+ asc: (key) => stages.sort.sort({ [key]: asc }),
82
+ desc: (key) => stages.sort.sort({ [key]: desc })
83
+ },
84
+ group: {
85
+ group: (fields) => ({
86
+ by: (by) => ({ $group: Object.assign({ _id: stages.decode.id(by) }, stages.decode.fields(fields)) })
87
+ }),
88
+ date: (format = "%Y-%m-%d") => (key) => ({ $dateToString: { date: `$${key}`, format } }),
89
+ count: () => ({ $count: {} }),
90
+ sum: (from) => isDefined(from) ? { $sum: `$${from}` } : { $sum: 1 },
91
+ avg: (from) => ({ $avg: `$${from}` }),
92
+ multiply: (...multiply) => ({ $multiply: multiply.map((m) => `$${m}`) }),
93
+ first: (from) => ({ $first: `$${from}` }),
94
+ last: (from) => ({ $last: `$${from}` }),
95
+ min: (from) => ({ $min: `$${from}` }),
96
+ max: (from) => ({ $max: `$${from}` }),
97
+ addToSet: (from) => ({ $addToSet: `$${from}` }),
98
+ push: (from = "$ROOT") => ({ $push: `$${from}` }),
99
+ size: (from) => ({ $size: `$${from}` })
100
+ },
101
+ search: {
102
+ search: (f) => ifDefined(stages.decode.id(f), ($search) => ({ $search })),
103
+ auto: (value) => (key) => ifDefined(value, (v) => ({ autocomplete: { path: key, query: [v] } })),
104
+ fuzzy: (value, maxEdits = 1) => (key) => ifDefined(value, (v) => ({
105
+ text: {
106
+ query: v,
107
+ path: key === "wildcard" ? { wildcard: "*" } : key,
108
+ fuzzy: { maxEdits }
109
+ }
110
+ }))
111
+ },
112
+ set: {
113
+ set: (f) => ({ $set: stages.decode.fields(f) }),
114
+ score: () => ({ $meta: "searchScore" })
115
+ },
116
+ skip: {
117
+ skip: (o = {}) => ifDefined(o.skip, { $skip: asNumber(o.skip) }),
118
+ take: (o = {}) => ifDefined(o.take, { $limit: asNumber(o.take) })
119
+ },
120
+ project: {
121
+ include: (...includes) => ifNotEmpty(includes, (es) => ({ $project: es.reduce((a, b) => ({ ...a, ...isString(b) ? { [b]: 1 } : b }), {}) })),
122
+ exclude: (...excludes) => ifNotEmpty(excludes, (es) => ({ $project: es.reduce((a, b) => ({ ...a, ...isString(b) ? { [b]: 0 } : b }), {}) })),
123
+ includes: (includes) => new IncludeBuilder(includes),
124
+ project: (project) => ifDefined(project, ($project) => ({ $project })),
125
+ date: (key, format) => ({ $toDate: `$${key}`, ...ifDefined(format, { format }) }),
126
+ duration: (from, to) => ({ $divide: [{ $subtract: [stages.project.date(from), stages.project.date(to)] }, 1e3] })
127
+ },
128
+ replaceWith: {
129
+ replaceWith: (f) => ifDefined(f, { $replaceWith: f }),
130
+ merge: (...objects) => ifNotEmpty(objects, (os) => ({ $mergeObjects: os })),
131
+ rootAnd: (...objects) => stages.replaceWith.merge(stages.root, ...objects),
132
+ currentAnd: (...objects) => stages.replaceWith.merge(stages.current, ...objects),
133
+ reroot: (prop) => ({ $replaceRoot: { newRoot: `$${prop}` } }),
134
+ concat: (...props) => ifNotEmpty(props, (ps) => ({ $concatArrays: ps.map((p) => `$${p}`) }))
135
+ },
136
+ facet: {
137
+ facet: (f) => ({ $facet: stages.decode.fieldsArrays(f) }),
138
+ unwind: (from) => (f) => ({ $unwind: `$${from ?? f}` }),
139
+ count: (from) => (f) => ({ $sortByCount: `$${from ?? f}` }),
140
+ data: () => []
141
+ },
142
+ unwind: {
143
+ unwind: (prop) => ({ $unwind: `$${prop}` })
144
+ }
145
+ };
146
+
147
+ export {
148
+ asc,
149
+ desc,
150
+ FilterBuilder,
151
+ SortBuilder,
152
+ IncludeBuilder,
153
+ stages
154
+ };
155
+ //# sourceMappingURL=chunk-WEJO6T5Q.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/Stages.ts"],"sourcesContent":["import { Filter, FindOptions } from './MongoProvider';\nimport {\n asNumber,\n asString,\n Currency,\n Get,\n Id,\n ifDefined,\n ifNotEmpty,\n isDefined,\n isPresent,\n isPrimitive,\n isString,\n meta,\n ofGet,\n on,\n OneOrMore,\n Optional,\n PartialRecord,\n toArray,\n use,\n} from '@thisisagile/easy';\nimport { toMongoType } from './Utils';\n\nexport const asc = 1;\nexport const desc = -1;\nexport type Accumulators = '$sum' | '$count' | '$multiply' | '$avg' | '$first' | '$last' | '$min' | '$max' | '$push' | '$addToSet' | '$size';\nexport type Accumulator = PartialRecord<Accumulators, Filter>;\n\nexport class FilterBuilder<Options> {\n constructor(private filters: { [K in keyof Options]: (v: Options[K]) => Filter }) {}\n\n from = (q: Partial<Options> = {}): Filter =>\n stages.match.match(\n meta(q)\n .entries()\n .reduce((acc, [key, value]) => ({ ...acc, ...ifDefined(this.filters[key as keyof Options], f => f(value as Options[keyof Options])) }), {})\n );\n}\n\ntype Sort = Record<string, typeof asc | typeof desc>;\n\nexport class SortBuilder {\n constructor(private sorts: Record<string, Sort>) {}\n\n get keys(): string[] {\n return Object.keys(this.sorts);\n }\n\n from = (\n s: {\n s?: string;\n } = {},\n alt?: string\n ): Optional<Filter> => stages.sort.sort(this.sorts[s?.s ?? ''] ?? this.sorts[alt ?? '']);\n}\n\nexport class IncludeBuilder {\n constructor(private includes: Record<string, (string | Record<string, 1>)[]>) {}\n\n get keys(): string[] {\n return Object.keys(this.includes);\n }\n\n from = (\n i: {\n i?: string;\n } = {},\n alt?: string\n ): Optional<Filter> => stages.project.include(...(this.includes[i?.i ?? ''] ?? this.includes[alt ?? ''] ?? []));\n}\n\nconst escapeRegex = (s: string) => s.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&').replace(/-/g, '\\\\x2d');\n\nexport const stages = {\n root: '$$ROOT',\n current: '$$CURRENT',\n id: '_id',\n decode: {\n object: (f: Filter) => use(Object.entries(f)[0], ([k, v]) => ofGet(v, k)),\n fields: (f: Filter) => Object.entries(f).reduce((res, [k, v]) => on(res, r => ifDefined(ofGet(v, k), nv => (r[k] = nv))), {} as any),\n fieldsArrays: (f: Filter) => Object.entries(f).reduce((res, [k, v]) => on(res, r => (r[k] = use(toArray(v), vs => vs.map(v => ofGet(v, k))))), {} as any),\n id: (f: Filter | string) => (isString(f) ? `$${asString(f)}` : isPrimitive(f) ? f : Object.entries(f).map(([k, v]) => ofGet(v, k))[0]),\n },\n match: {\n match: (f: Record<string, Get<Optional<Filter>, string>>) => ({ $match: stages.decode.fields(f) }),\n filter: <Options>(filters: { [K in keyof Options]: (v: Options[K]) => Filter }) => new FilterBuilder<Options>(filters),\n or: (...filters: Filter[]) => ({ $or: toArray(filters).map(f => stages.decode.object(f)) }),\n gt: (value: Filter) => ({ $gt: value }),\n gte: (value: Filter) => ({ $gte: value }),\n lt: (value: Filter) => ({ $lt: value }),\n lte: (value: Filter) => ({ $lte: value }),\n isIn: (value: OneOrMore<unknown>, separator = ',') => ({ $in: isString(value) ? value.split(separator) : value }),\n notIn: (value: OneOrMore<unknown>, separator = ',') => ({ $nin: isString(value) ? value.split(separator) : value }),\n after: (date: unknown) => stages.match.gte(toMongoType(date)),\n before: (date: unknown) => stages.match.lt(toMongoType(date)),\n anywhere: (q: string) => ({ $regex: escapeRegex(q), $options: 'i' }),\n money: (currency: Currency, value: Filter) => (key: string) => ({\n [`${key}.currency`]: currency.id,\n ...stages.decode.fields({ [`${key}.value`]: value }),\n }),\n },\n sort: {\n sort: ($sort: Sort) => (isPresent($sort) ? { $sort } : undefined),\n sorter: (sorts: Record<string, Sort>) => new SortBuilder(sorts),\n asc: (key: string) => stages.sort.sort({ [key]: asc }),\n desc: (key: string) => stages.sort.sort({ [key]: desc }),\n },\n group: {\n group: (fields: Record<string, Accumulator>) => ({\n by: (by: Filter) => ({ $group: Object.assign({ _id: stages.decode.id(by) }, stages.decode.fields(fields)) }),\n }),\n date:\n (format = '%Y-%m-%d') =>\n (key: string) => ({ $dateToString: { date: `$${key}`, format } }),\n count: (): Accumulator => ({ $count: {} }),\n sum: (from?: string): Accumulator => (isDefined(from) ? { $sum: `$${from}` } : { $sum: 1 }),\n avg: (from?: string) => ({ $avg: `$${from}` }),\n multiply: (...multiply: string[]) => ({ $multiply: multiply.map(m => `$${m}`) }),\n first: (from?: string): Accumulator => ({ $first: `$${from}` }),\n last: (from?: string): Accumulator => ({ $last: `$${from}` }),\n min: (from?: string): Accumulator => ({ $min: `$${from}` }),\n max: (from?: string): Accumulator => ({ $max: `$${from}` }),\n addToSet: (from?: string): Accumulator => ({ $addToSet: `$${from}` }),\n push: (from = '$ROOT'): Accumulator => ({ $push: `$${from}` }),\n size: (from?: string): Accumulator => ({ $size: `$${from}` }),\n },\n search: {\n search: (f: Record<string, Get<Filter, string>>) => ifDefined(stages.decode.id(f), $search => ({ $search })),\n auto: (value?: Id) => (key: string) => ifDefined(value, v => ({ autocomplete: { path: key, query: [v] } })),\n fuzzy:\n (value?: string, maxEdits = 1) =>\n (key?: string) =>\n ifDefined(value, v => ({\n text: {\n query: v,\n path: key === 'wildcard' ? { wildcard: '*' } : key,\n fuzzy: { maxEdits },\n },\n })),\n },\n set: {\n set: (f: Record<string, Get<Filter, string>>) => ({ $set: stages.decode.fields(f) }),\n score: () => ({ $meta: 'searchScore' }),\n },\n skip: {\n skip: (o: FindOptions = {}): Optional<Filter> => ifDefined(o.skip, { $skip: asNumber(o.skip) }),\n take: (o: FindOptions = {}): Optional<Filter> => ifDefined(o.take, { $limit: asNumber(o.take) }),\n },\n project: {\n include: (...includes: (string | Record<string, 1 | string>)[]): Optional<Filter> =>\n ifNotEmpty(includes, es => ({ $project: es.reduce((a: Filter, b: Filter) => ({ ...a, ...(isString(b) ? { [b]: 1 } : b) }), {}) })),\n exclude: (...excludes: (string | Record<string, 0>)[]): Optional<Filter> =>\n ifNotEmpty(excludes, es => ({ $project: es.reduce((a: Filter, b: Filter) => ({ ...a, ...(isString(b) ? { [b]: 0 } : b) }), {}) })),\n includes: (includes: Record<string, (string | Record<string, 1>)[]>) => new IncludeBuilder(includes),\n project: (project?: Filter) => ifDefined(project, $project => ({ $project })),\n date: (key: string, format?: string) => ({ $toDate: `$${key}`, ...ifDefined(format, { format }) }),\n duration: (from: string, to: string) => ({ $divide: [{ $subtract: [stages.project.date(from), stages.project.date(to)] }, 1000] }),\n },\n replaceWith: {\n replaceWith: (f?: Filter): Optional<Filter> => ifDefined(f, { $replaceWith: f }),\n merge: (...objects: Filter[]): Optional<Filter> => ifNotEmpty(objects, os => ({ $mergeObjects: os })),\n rootAnd: (...objects: Filter[]): Optional<Filter> => stages.replaceWith.merge(stages.root, ...objects),\n currentAnd: (...objects: Filter[]): Optional<Filter> => stages.replaceWith.merge(stages.current, ...objects),\n reroot: (prop: string): Filter => ({ $replaceRoot: { newRoot: `$${prop}` } }),\n concat: (...props: string[]): Optional<Filter> => ifNotEmpty(props, ps => ({ $concatArrays: ps.map(p => `$${p}`) })),\n },\n facet: {\n facet: (f: Record<string, OneOrMore<Get<Optional<Filter>, string>>>) => ({ $facet: stages.decode.fieldsArrays(f) }),\n unwind: (from?: string) => (f?: string) => ({ $unwind: `$${from ?? f}` }),\n count: (from?: string) => (f?: string) => ({ $sortByCount: `$${from ?? f}` }),\n data: () => [],\n },\n unwind: {\n unwind: (prop?: string) => ({ $unwind: `$${prop}` }),\n },\n};\n"],"mappings":"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","names":["v"]}