functional-models 3.0.6 → 3.0.7

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/orm/query.d.ts ADDED
@@ -0,0 +1,121 @@
1
+ import { DatastoreValueType, DatesAfterQuery, DatesBeforeQuery, EqualitySymbol, MaxMatchStatement, PaginationQuery, PropertyOptions, PropertyQuery, QueryBuilder, SortOrder, SortStatement } from './types';
2
+ /**
3
+ * Creates a property query.
4
+ * @param key - The property's name/key/column to match on
5
+ * @param value - The value to match
6
+ * @param options - Additional options for changing this property query.
7
+ */
8
+ declare const property: (key: string, value: any, options?: PropertyOptions) => PropertyQuery;
9
+ /**
10
+ * Limits the number of results to the provided count.
11
+ * @param max - The maximum results to find
12
+ */
13
+ declare const take: (max: number) => MaxMatchStatement;
14
+ /**
15
+ * Creates a sort query
16
+ * @param key - The key to sort on
17
+ * @param order - The order of the sort.
18
+ */
19
+ declare const sort: (key: string, order?: SortOrder | undefined) => SortStatement;
20
+ /**
21
+ * Creates a pagination query.
22
+ * @param value - Anything
23
+ */
24
+ declare const pagination: (value: any) => PaginationQuery;
25
+ /**
26
+ * Creates a query that looks at dated objects after the given date.
27
+ * @param key - The property's key
28
+ * @param jsDate - The date value being examined
29
+ * @param options - Additional options
30
+ */
31
+ declare const datesAfter: (key: string, jsDate: Date | string, options?: {
32
+ valueType: DatastoreValueType;
33
+ equalToAndAfter: boolean;
34
+ }) => DatesAfterQuery;
35
+ /**
36
+ * Creates a search query that looks at dates before the given date.
37
+ * @param key - The property's key
38
+ * @param jsDate - The date value being examined.
39
+ * @param options - Additional options
40
+ */
41
+ declare const datesBefore: (key: string, jsDate: Date | string, options?: {
42
+ valueType: DatastoreValueType;
43
+ equalToAndBefore: boolean;
44
+ }) => DatesBeforeQuery;
45
+ /**
46
+ * Creates a builder that can create search queries.
47
+ * This is a structured way to build search queries.
48
+ */
49
+ declare const queryBuilder: () => QueryBuilder;
50
+ /**
51
+ * Determines if the value is an Orm Property based statement
52
+ * @param value
53
+ */
54
+ declare const isPropertyBasedQuery: (value: string | undefined) => boolean;
55
+ /**
56
+ * Determines if the value is a boolean
57
+ * @param value - The value to examine.
58
+ */
59
+ declare const isALinkToken: (value: string) => boolean;
60
+ /**
61
+ * Creates an AND
62
+ */
63
+ declare const and: () => string;
64
+ /**
65
+ * Creates an OR
66
+ */
67
+ declare const or: () => string;
68
+ /**
69
+ * A helper query that is text based.
70
+ * @param key - The property key/name
71
+ * @param value - The value to match
72
+ * @param options - Additional text based options
73
+ */
74
+ declare const textQuery: (key: string, value: string | undefined | null, options?: Omit<Partial<PropertyOptions>, "type" | "equalitySymbol">) => Readonly<{
75
+ type: "property";
76
+ key: string;
77
+ value: any;
78
+ valueType: DatastoreValueType;
79
+ equalitySymbol: EqualitySymbol;
80
+ options: {
81
+ caseSensitive?: boolean;
82
+ startsWith?: boolean;
83
+ endsWith?: boolean;
84
+ };
85
+ }>;
86
+ /**
87
+ * A helper query that is number based.
88
+ * @param key - The property key/name
89
+ * @param value - The value to match
90
+ * @param equalitySymbol - A matching symbol for the number
91
+ */
92
+ declare const numberQuery: (key: string, value: number | string | undefined | null, equalitySymbol?: EqualitySymbol) => Readonly<{
93
+ type: "property";
94
+ key: string;
95
+ value: any;
96
+ valueType: DatastoreValueType;
97
+ equalitySymbol: EqualitySymbol;
98
+ options: {
99
+ caseSensitive?: boolean;
100
+ startsWith?: boolean;
101
+ endsWith?: boolean;
102
+ };
103
+ }>;
104
+ /**
105
+ * A helper query that is for boolean values.
106
+ * @param key - The property key/name
107
+ * @param value - The value to match
108
+ */
109
+ declare const booleanQuery: (key: string, value: boolean | undefined | null) => Readonly<{
110
+ type: "property";
111
+ key: string;
112
+ value: any;
113
+ valueType: DatastoreValueType;
114
+ equalitySymbol: EqualitySymbol;
115
+ options: {
116
+ caseSensitive?: boolean;
117
+ startsWith?: boolean;
118
+ endsWith?: boolean;
119
+ };
120
+ }>;
121
+ export { queryBuilder, take, pagination, sort, property, and, or, isALinkToken, isPropertyBasedQuery, datesBefore, datesAfter, textQuery, numberQuery, booleanQuery, };
package/orm/query.js ADDED
@@ -0,0 +1,279 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.booleanQuery = exports.numberQuery = exports.textQuery = exports.datesAfter = exports.datesBefore = exports.isPropertyBasedQuery = exports.isALinkToken = exports.or = exports.and = exports.property = exports.sort = exports.pagination = exports.take = exports.queryBuilder = void 0;
7
+ const merge_1 = __importDefault(require("lodash/merge"));
8
+ const omit_1 = __importDefault(require("lodash/omit"));
9
+ const types_1 = require("./types");
10
+ const _objectize = (key, value) => {
11
+ return value
12
+ ? {
13
+ [key]: value,
14
+ }
15
+ : {};
16
+ };
17
+ const _additionalLink = (data) => {
18
+ const inner = _builderV2(data);
19
+ const partialLink = (0, omit_1.default)(_link(data), ['and', 'or']);
20
+ // @ts-ignore
21
+ return Object.assign(Object.assign({}, inner), partialLink);
22
+ };
23
+ const _link = (data) => {
24
+ return {
25
+ and: () => {
26
+ return _queryBuilder(Object.assign(Object.assign({}, data), { query: data.query.concat('AND') }));
27
+ },
28
+ or: () => {
29
+ return _queryBuilder(Object.assign(Object.assign({}, data), { query: data.query.concat('OR') }));
30
+ },
31
+ compile: () => {
32
+ return data;
33
+ },
34
+ take: (num) => {
35
+ return _additionalLink(Object.assign(Object.assign({}, data), { take: take(num) }));
36
+ },
37
+ sort: (key, order = types_1.SortOrder.asc) => {
38
+ return _additionalLink(Object.assign(Object.assign({}, data), { sort: sort(key, order) }));
39
+ },
40
+ pagination: (value) => {
41
+ return _additionalLink(Object.assign(Object.assign({}, data), { page: pagination(value) }));
42
+ },
43
+ };
44
+ };
45
+ const _canCompile = (obj) => {
46
+ return Boolean(obj.compile);
47
+ };
48
+ const _builderV2 = (data) => {
49
+ const _myProperty = (name, value, options) => {
50
+ // @ts-ignore
51
+ const p = property(name, value, options);
52
+ return _link((0, merge_1.default)(data, { query: data.query.concat(p) }));
53
+ };
54
+ const complex = (subBuilderFunc) => {
55
+ const subBuilder = _queryBuilder();
56
+ const result = subBuilderFunc(subBuilder);
57
+ if (_canCompile(result)) {
58
+ const queryTokens = [result.compile().query];
59
+ return _link((0, merge_1.default)(data, {
60
+ query: data.query.concat(queryTokens),
61
+ }));
62
+ }
63
+ // @ts-ignore
64
+ return _link((0, merge_1.default)(data, { query: data.query.concat([result.query]) }));
65
+ };
66
+ const thisDatesBefore = (key, jsDate, { valueType = types_1.DatastoreValueType.string, equalToAndBefore = true } = {}) => {
67
+ const p = datesBefore(key, jsDate, { valueType, equalToAndBefore });
68
+ return _link((0, merge_1.default)(data, { query: data.query.concat(p) }));
69
+ };
70
+ const thisDatesAfter = (key, jsDate, { valueType = types_1.DatastoreValueType.string, equalToAndAfter = true } = {}) => {
71
+ const p = datesAfter(key, jsDate, { valueType, equalToAndAfter });
72
+ return _link((0, merge_1.default)(data, { query: data.query.concat(p) }));
73
+ };
74
+ return {
75
+ datesBefore: thisDatesBefore,
76
+ datesAfter: thisDatesAfter,
77
+ complex,
78
+ property: _myProperty,
79
+ };
80
+ };
81
+ const _queryBuilder = (data = undefined) => {
82
+ const theData = (0, merge_1.default)({
83
+ query: [],
84
+ }, data);
85
+ const builder = _builderV2(theData);
86
+ const linkData = _additionalLink(theData);
87
+ // @ts-ignore
88
+ return Object.assign(Object.assign(Object.assign({}, builder), linkData), { compile: () => {
89
+ return Object.assign(Object.assign(Object.assign(Object.assign({}, _objectize('take', theData.take)), _objectize('sort', theData.sort)), _objectize('page', theData.page)), { query: [] });
90
+ } });
91
+ };
92
+ /**
93
+ * Creates a property query.
94
+ * @param key - The property's name/key/column to match on
95
+ * @param value - The value to match
96
+ * @param options - Additional options for changing this property query.
97
+ */
98
+ const property = (key, value, options = {}) => {
99
+ const { equalitySymbol = types_1.EqualitySymbol.eq, caseSensitive, startsWith, endsWith, type, } = options;
100
+ const typeToUse = type || types_1.DatastoreValueType.string;
101
+ if (!types_1.AllowableEqualitySymbols.includes(equalitySymbol)) {
102
+ throw new Error(`${equalitySymbol} is not a valid symbol`);
103
+ }
104
+ if (equalitySymbol !== types_1.EqualitySymbol.eq &&
105
+ typeToUse === types_1.DatastoreValueType.string) {
106
+ throw new Error(`Cannot use a non = symbol for a string type`);
107
+ }
108
+ const propertyEntry = {
109
+ type: 'property',
110
+ key,
111
+ value,
112
+ valueType: typeToUse,
113
+ equalitySymbol,
114
+ options: Object.assign(Object.assign(Object.assign({}, _objectize('caseSensitive', caseSensitive)), _objectize('startsWith', startsWith)), _objectize('endsWith', endsWith)),
115
+ };
116
+ return propertyEntry;
117
+ };
118
+ exports.property = property;
119
+ /**
120
+ * Limits the number of results to the provided count.
121
+ * @param max - The maximum results to find
122
+ */
123
+ const take = (max) => {
124
+ const parsed = parseInt(`${max}`, 10);
125
+ if (Number.isNaN(parsed)) {
126
+ throw new Error(`Number "${max}" is not integerable`);
127
+ }
128
+ return parsed;
129
+ };
130
+ exports.take = take;
131
+ /**
132
+ * Creates a sort query
133
+ * @param key - The key to sort on
134
+ * @param order - The order of the sort.
135
+ */
136
+ const sort = (key, order = types_1.SortOrder.asc) => {
137
+ if (order !== types_1.SortOrder.asc && order !== types_1.SortOrder.dsc) {
138
+ throw new Error('Sort must be either asc or dsc');
139
+ }
140
+ return {
141
+ key,
142
+ order,
143
+ };
144
+ };
145
+ exports.sort = sort;
146
+ /**
147
+ * Creates a pagination query.
148
+ * @param value - Anything
149
+ */
150
+ const pagination = (value) => {
151
+ return value;
152
+ };
153
+ exports.pagination = pagination;
154
+ /**
155
+ * Creates a query that looks at dated objects after the given date.
156
+ * @param key - The property's key
157
+ * @param jsDate - The date value being examined
158
+ * @param options - Additional options
159
+ */
160
+ const datesAfter = (key, jsDate, options = {
161
+ valueType: types_1.DatastoreValueType.string,
162
+ equalToAndAfter: true,
163
+ }) => {
164
+ const { valueType = types_1.DatastoreValueType.string, equalToAndAfter = true } = options;
165
+ return {
166
+ type: 'datesAfter',
167
+ key,
168
+ date: isDate(jsDate) ? jsDate.toISOString() : jsDate,
169
+ valueType,
170
+ options: {
171
+ equalToAndAfter,
172
+ },
173
+ };
174
+ };
175
+ exports.datesAfter = datesAfter;
176
+ /**
177
+ * Determines if the object is a Date
178
+ * @param obj - Date or string
179
+ */
180
+ const isDate = (obj) => {
181
+ // @ts-ignore
182
+ return Boolean(obj.toISOString);
183
+ };
184
+ /**
185
+ * Creates a search query that looks at dates before the given date.
186
+ * @param key - The property's key
187
+ * @param jsDate - The date value being examined.
188
+ * @param options - Additional options
189
+ */
190
+ const datesBefore = (key, jsDate, options = {
191
+ valueType: types_1.DatastoreValueType.string,
192
+ equalToAndBefore: true,
193
+ }) => {
194
+ const { valueType = types_1.DatastoreValueType.string, equalToAndBefore = true } = options;
195
+ return {
196
+ type: 'datesBefore',
197
+ key,
198
+ date: isDate(jsDate) ? jsDate.toISOString() : jsDate,
199
+ valueType,
200
+ options: {
201
+ equalToAndBefore,
202
+ },
203
+ };
204
+ };
205
+ exports.datesBefore = datesBefore;
206
+ /**
207
+ * Creates a builder that can create search queries.
208
+ * This is a structured way to build search queries.
209
+ */
210
+ const queryBuilder = () => {
211
+ return _queryBuilder();
212
+ };
213
+ exports.queryBuilder = queryBuilder;
214
+ /**
215
+ * Determines if the value is an Orm Property based statement
216
+ * @param value
217
+ */
218
+ const isPropertyBasedQuery = (value) => {
219
+ if (!value) {
220
+ return false;
221
+ }
222
+ return (value === 'property' || value === 'datesBefore' || value === 'datesAfter');
223
+ };
224
+ exports.isPropertyBasedQuery = isPropertyBasedQuery;
225
+ /**
226
+ * Determines if the value is a boolean
227
+ * @param value - The value to examine.
228
+ */
229
+ const isALinkToken = (value) => {
230
+ if (!value) {
231
+ return false;
232
+ }
233
+ value = value.toLowerCase();
234
+ return value === 'and' || value === 'or';
235
+ };
236
+ exports.isALinkToken = isALinkToken;
237
+ /**
238
+ * Creates an AND
239
+ */
240
+ const and = () => 'AND';
241
+ exports.and = and;
242
+ /**
243
+ * Creates an OR
244
+ */
245
+ const or = () => 'OR';
246
+ exports.or = or;
247
+ /**
248
+ * A helper query that is text based.
249
+ * @param key - The property key/name
250
+ * @param value - The value to match
251
+ * @param options - Additional text based options
252
+ */
253
+ const textQuery = (key, value, options) => property(key, value, Object.assign({}, options, {
254
+ equalitySymbol: undefined,
255
+ type: types_1.DatastoreValueType.string,
256
+ }));
257
+ exports.textQuery = textQuery;
258
+ /**
259
+ * A helper query that is number based.
260
+ * @param key - The property key/name
261
+ * @param value - The value to match
262
+ * @param equalitySymbol - A matching symbol for the number
263
+ */
264
+ const numberQuery = (key, value, equalitySymbol = types_1.EqualitySymbol.eq) => property(key, value, {
265
+ equalitySymbol,
266
+ type: types_1.DatastoreValueType.number,
267
+ });
268
+ exports.numberQuery = numberQuery;
269
+ /**
270
+ * A helper query that is for boolean values.
271
+ * @param key - The property key/name
272
+ * @param value - The value to match
273
+ */
274
+ const booleanQuery = (key, value) => property(key, value, {
275
+ type: types_1.DatastoreValueType.boolean,
276
+ equalitySymbol: types_1.EqualitySymbol.eq,
277
+ });
278
+ exports.booleanQuery = booleanQuery;
279
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/orm/query.ts"],"names":[],"mappings":";;;;;;AAAA,yDAAgC;AAChC,uDAA8B;AAC9B,mCAkBgB;AAEhB,MAAM,UAAU,GAAG,CAAI,GAAW,EAAE,KAAQ,EAAE,EAAE;IAC9C,OAAO,KAAK;QACV,CAAC,CAAC;YACE,CAAC,GAAG,CAAC,EAAE,KAAK;SACb;QACH,CAAC,CAAC,EAAE,CAAA;AACR,CAAC,CAAA;AAED,MAAM,eAAe,GAAG,CAAC,IAAe,EAAkC,EAAE;IAC1E,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;IAC9B,MAAM,WAAW,GAAG,IAAA,cAAI,EAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAA;IACpD,aAAa;IACb,uCACK,KAAK,GACL,WAAW,EACf;AACH,CAAC,CAAA;AAED,MAAM,KAAK,GAAG,CAAC,IAAe,EAAiB,EAAE;IAC/C,OAAO;QACL,GAAG,EAAE,GAAG,EAAE;YACR,OAAO,aAAa,iCAAM,IAAI,KAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAG,CAAA;QACpE,CAAC;QACD,EAAE,EAAE,GAAG,EAAE;YACP,OAAO,aAAa,iCAAM,IAAI,KAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAG,CAAA;QACnE,CAAC;QACD,OAAO,EAAE,GAAG,EAAE;YACZ,OAAO,IAAI,CAAA;QACb,CAAC;QACD,IAAI,EAAE,CAAC,GAAW,EAAE,EAAE;YACpB,OAAO,eAAe,iCAAM,IAAI,KAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAG,CAAA;QACtD,CAAC;QACD,IAAI,EAAE,CAAC,GAAW,EAAE,KAAK,GAAG,iBAAS,CAAC,GAAG,EAAE,EAAE;YAC3C,OAAO,eAAe,iCAAM,IAAI,KAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAG,CAAA;QAC7D,CAAC;QACD,UAAU,EAAE,CAAC,KAAU,EAAE,EAAE;YACzB,OAAO,eAAe,iCAAM,IAAI,KAAE,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,IAAG,CAAA;QAC9D,CAAC;KACF,CAAA;AACH,CAAC,CAAA;AAED,MAAM,WAAW,GAAG,CAAC,GAAQ,EAAuC,EAAE;IACpE,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;AAC7B,CAAC,CAAA;AAED,MAAM,UAAU,GAAG,CAAC,IAAe,EAAkB,EAAE;IACrD,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,KAAU,EAAE,OAAyB,EAAE,EAAE;QAC1E,aAAa;QACb,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;QACxC,OAAO,KAAK,CAAC,IAAA,eAAK,EAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAC5D,CAAC,CAAA;IAED,MAAM,OAAO,GAAG,CAAC,cAAkC,EAAE,EAAE;QACrD,MAAM,UAAU,GAAG,aAAa,EAAE,CAAA;QAClC,MAAM,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC,CAAA;QACzC,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;YACxB,MAAM,WAAW,GAA6B,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAA;YACtE,OAAO,KAAK,CACV,IAAA,eAAK,EAAC,IAAI,EAAE;gBACV,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC;aACtC,CAAC,CACH,CAAA;QACH,CAAC;QACD,aAAa;QACb,OAAO,KAAK,CAAC,IAAA,eAAK,EAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACzE,CAAC,CAAA;IAED,MAAM,eAAe,GAAG,CACtB,GAAW,EACX,MAAqB,EACrB,EAAE,SAAS,GAAG,0BAAkB,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,EAAE,GAAG,EAAE,EACvE,EAAE;QACF,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAA;QACnE,OAAO,KAAK,CAAC,IAAA,eAAK,EAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAC5D,CAAC,CAAA;IAED,MAAM,cAAc,GAAG,CACrB,GAAW,EACX,MAAqB,EACrB,EAAE,SAAS,GAAG,0BAAkB,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,EAAE,GAAG,EAAE,EACtE,EAAE;QACF,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAA;QACjE,OAAO,KAAK,CAAC,IAAA,eAAK,EAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAC5D,CAAC,CAAA;IAED,OAAO;QACL,WAAW,EAAE,eAAe;QAC5B,UAAU,EAAE,cAAc;QAC1B,OAAO;QACP,QAAQ,EAAE,WAAW;KACtB,CAAA;AACH,CAAC,CAAA;AAED,MAAM,aAAa,GAAG,CACpB,OAAuC,SAAS,EAClC,EAAE;IAChB,MAAM,OAAO,GAAG,IAAA,eAAK,EACnB;QACE,KAAK,EAAE,EAAE;KACV,EACD,IAAI,CACL,CAAA;IACD,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;IACnC,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,CAAA;IACzC,aAAa;IACb,qDACK,OAAO,GACP,QAAQ,KACX,OAAO,EAAE,GAAG,EAAE;YACZ,OAAO,4DACF,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,GAChC,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,GAChC,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,KACnC,KAAK,EAAE,EAAE,GACG,CAAA;QAChB,CAAC,IACF;AACH,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,QAAQ,GAAG,CACf,GAAW,EACX,KAAU,EACV,UAA2B,EAAE,EACd,EAAE;IACjB,MAAM,EACJ,cAAc,GAAG,sBAAc,CAAC,EAAE,EAClC,aAAa,EACb,UAAU,EACV,QAAQ,EACR,IAAI,GACL,GAAG,OAAO,CAAA;IACX,MAAM,SAAS,GAAG,IAAI,IAAI,0BAAkB,CAAC,MAAM,CAAA;IACnD,IAAI,CAAC,gCAAwB,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,GAAG,cAAc,wBAAwB,CAAC,CAAA;IAC5D,CAAC;IACD,IACE,cAAc,KAAK,sBAAc,CAAC,EAAE;QACpC,SAAS,KAAK,0BAAkB,CAAC,MAAM,EACvC,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAA;IAChE,CAAC;IAED,MAAM,aAAa,GAAkB;QACnC,IAAI,EAAE,UAAU;QAChB,GAAG;QACH,KAAK;QACL,SAAS,EAAE,SAAS;QACpB,cAAc;QACd,OAAO,gDACF,UAAU,CAAC,eAAe,EAAE,aAAa,CAAC,GAC1C,UAAU,CAAC,YAAY,EAAE,UAAU,CAAC,GACpC,UAAU,CAAC,UAAU,EAAE,QAAQ,CAAC,CACpC;KACF,CAAA;IACD,OAAO,aAAa,CAAA;AACtB,CAAC,CAAA;AAsMC,4BAAQ;AApMV;;;GAGG;AACH,MAAM,IAAI,GAAG,CAAC,GAAW,EAAqB,EAAE;IAC9C,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,GAAG,EAAE,EAAE,EAAE,CAAC,CAAA;IACrC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,WAAW,GAAG,sBAAsB,CAAC,CAAA;IACvD,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAuLC,oBAAI;AArLN;;;;GAIG;AACH,MAAM,IAAI,GAAG,CACX,GAAW,EACX,QAA+B,iBAAS,CAAC,GAAG,EAC7B,EAAE;IACjB,IAAI,KAAK,KAAK,iBAAS,CAAC,GAAG,IAAI,KAAK,KAAK,iBAAS,CAAC,GAAG,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;IACnD,CAAC;IACD,OAAO;QACL,GAAG;QACH,KAAK;KACN,CAAA;AACH,CAAC,CAAA;AAuKC,oBAAI;AArKN;;;GAGG;AACH,MAAM,UAAU,GAAG,CAAC,KAAU,EAAmB,EAAE;IACjD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AA8JC,gCAAU;AA5JZ;;;;;GAKG;AACH,MAAM,UAAU,GAAG,CACjB,GAAW,EACX,MAAqB,EACrB,UAAuE;IACrE,SAAS,EAAE,0BAAkB,CAAC,MAAM;IACpC,eAAe,EAAE,IAAI;CACtB,EACgB,EAAE;IACnB,MAAM,EAAE,SAAS,GAAG,0BAAkB,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,EAAE,GACrE,OAAO,CAAA;IACT,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,GAAG;QACH,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,MAAM;QACpD,SAAS;QACT,OAAO,EAAE;YACP,eAAe;SAChB;KACF,CAAA;AACH,CAAC,CAAA;AA2IC,gCAAU;AAzIZ;;;GAGG;AACH,MAAM,MAAM,GAAG,CAAC,GAAkB,EAAe,EAAE;IACjD,aAAa;IACb,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;AACjC,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,WAAW,GAAG,CAClB,GAAW,EACX,MAAqB,EACrB,UAAwE;IACtE,SAAS,EAAE,0BAAkB,CAAC,MAAM;IACpC,gBAAgB,EAAE,IAAI;CACvB,EACiB,EAAE;IACpB,MAAM,EAAE,SAAS,GAAG,0BAAkB,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,EAAE,GACtE,OAAO,CAAA;IACT,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,GAAG;QACH,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,MAAM;QACpD,SAAS;QACT,OAAO,EAAE;YACP,gBAAgB;SACjB;KACF,CAAA;AACH,CAAC,CAAA;AAsGC,kCAAW;AApGb;;;GAGG;AACH,MAAM,YAAY,GAAG,GAAiB,EAAE;IACtC,OAAO,aAAa,EAAE,CAAA;AACxB,CAAC,CAAA;AAqFC,oCAAY;AAnFd;;;GAGG;AACH,MAAM,oBAAoB,GAAG,CAAC,KAAyB,EAAE,EAAE;IACzD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,CACL,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,aAAa,IAAI,KAAK,KAAK,YAAY,CAC1E,CAAA;AACH,CAAC,CAAA;AAgFC,oDAAoB;AA9EtB;;;GAGG;AACH,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,EAAE;IACrC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,KAAK,CAAA;IACd,CAAC;IACD,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAA;IAC3B,OAAO,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,CAAA;AAC1C,CAAC,CAAA;AAmEC,oCAAY;AAjEd;;GAEG;AACH,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,KAAK,CAAA;AA4DrB,kBAAG;AA1DL;;GAEG;AACH,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC,IAAI,CAAA;AAwDnB,gBAAE;AAtDJ;;;;;GAKG;AACH,MAAM,SAAS,GAAG,CAChB,GAAW,EACX,KAAgC,EAChC,OAAmE,EACnE,EAAE,CACF,QAAQ,CACN,GAAG,EACH,KAAK,EACL,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE;IACzB,cAAc,EAAE,SAAS;IACzB,IAAI,EAAE,0BAAkB,CAAC,MAAM;CAChC,CAAC,CACH,CAAA;AAyCD,8BAAS;AAvCX;;;;;GAKG;AACH,MAAM,WAAW,GAAG,CAClB,GAAW,EACX,KAAyC,EACzC,iBAAiC,sBAAc,CAAC,EAAE,EAClD,EAAE,CACF,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE;IACnB,cAAc;IACd,IAAI,EAAE,0BAAkB,CAAC,MAAM;CAChC,CAAC,CAAA;AA0BF,kCAAW;AAxBb;;;;GAIG;AACH,MAAM,YAAY,GAAG,CAAC,GAAW,EAAE,KAAiC,EAAE,EAAE,CACtE,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE;IACnB,IAAI,EAAE,0BAAkB,CAAC,OAAO;IAChC,cAAc,EAAE,sBAAc,CAAC,EAAE;CAClC,CAAC,CAAA;AAgBF,oCAAY"}