@plumile/filter-query 0.1.17

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 (82) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +202 -0
  3. package/lib/errors.d.ts +39 -0
  4. package/lib/errors.d.ts.map +1 -0
  5. package/lib/errors.js +2 -0
  6. package/lib/esm/errors.d.ts +39 -0
  7. package/lib/esm/errors.d.ts.map +1 -0
  8. package/lib/esm/errors.js +2 -0
  9. package/lib/esm/index.d.ts +7 -0
  10. package/lib/esm/index.d.ts.map +1 -0
  11. package/lib/esm/index.js +5 -0
  12. package/lib/esm/mutate.d.ts +6 -0
  13. package/lib/esm/mutate.d.ts.map +1 -0
  14. package/lib/esm/mutate.js +88 -0
  15. package/lib/esm/parse.d.ts +3 -0
  16. package/lib/esm/parse.d.ts.map +1 -0
  17. package/lib/esm/parse.js +164 -0
  18. package/lib/esm/schema.d.ts +5 -0
  19. package/lib/esm/schema.d.ts.map +1 -0
  20. package/lib/esm/schema.js +55 -0
  21. package/lib/esm/stringify.d.ts +3 -0
  22. package/lib/esm/stringify.d.ts.map +1 -0
  23. package/lib/esm/stringify.js +50 -0
  24. package/lib/esm/types.d.ts +43 -0
  25. package/lib/esm/types.d.ts.map +1 -0
  26. package/lib/esm/types.js +2 -0
  27. package/lib/index.d.ts +7 -0
  28. package/lib/index.d.ts.map +1 -0
  29. package/lib/index.js +5 -0
  30. package/lib/mutate.d.ts +6 -0
  31. package/lib/mutate.d.ts.map +1 -0
  32. package/lib/mutate.js +88 -0
  33. package/lib/parse.d.ts +3 -0
  34. package/lib/parse.d.ts.map +1 -0
  35. package/lib/parse.js +164 -0
  36. package/lib/schema.d.ts +5 -0
  37. package/lib/schema.d.ts.map +1 -0
  38. package/lib/schema.js +55 -0
  39. package/lib/stringify.d.ts +3 -0
  40. package/lib/stringify.d.ts.map +1 -0
  41. package/lib/stringify.js +50 -0
  42. package/lib/tsconfig.esm.tsbuildinfo +1 -0
  43. package/lib/types/errors.d.ts +39 -0
  44. package/lib/types/errors.d.ts.map +1 -0
  45. package/lib/types/index.d.ts +7 -0
  46. package/lib/types/index.d.ts.map +1 -0
  47. package/lib/types/mutate.d.ts +6 -0
  48. package/lib/types/mutate.d.ts.map +1 -0
  49. package/lib/types/parse.d.ts +3 -0
  50. package/lib/types/parse.d.ts.map +1 -0
  51. package/lib/types/schema.d.ts +5 -0
  52. package/lib/types/schema.d.ts.map +1 -0
  53. package/lib/types/stringify.d.ts +3 -0
  54. package/lib/types/stringify.d.ts.map +1 -0
  55. package/lib/types/types.d.ts +43 -0
  56. package/lib/types/types.d.ts.map +1 -0
  57. package/lib/types.d.ts +43 -0
  58. package/lib/types.d.ts.map +1 -0
  59. package/lib/types.js +2 -0
  60. package/package.json +43 -0
  61. package/src/__tests__/additional-coverage.test.ts +82 -0
  62. package/src/__tests__/list-edge.test.ts +26 -0
  63. package/src/__tests__/mutate.test.ts +33 -0
  64. package/src/__tests__/parse-stringify.test.ts +104 -0
  65. package/src/__tests__/remove-filter.test.ts +46 -0
  66. package/src/__tests__/schema-edge.test.ts +46 -0
  67. package/src/__tests__/schema-infer.test-d.ts +24 -0
  68. package/src/__tests__/stability-and-diagnostics.test.ts +40 -0
  69. package/src/errors.ts +46 -0
  70. package/src/index.ts +6 -0
  71. package/src/mutate.ts +132 -0
  72. package/src/parse.ts +221 -0
  73. package/src/schema.ts +81 -0
  74. package/src/stringify.ts +60 -0
  75. package/src/types.ts +88 -0
  76. package/tools/build-package.sh +5 -0
  77. package/tools/test-build-package.sh +4 -0
  78. package/tsconfig.build.json +8 -0
  79. package/tsconfig.esm.json +7 -0
  80. package/tsconfig.json +8 -0
  81. package/tsconfig.types.json +9 -0
  82. package/vitest.config.ts +7 -0
@@ -0,0 +1,164 @@
1
+ const BETWEEN = 'between';
2
+ const LIST_OPS = ['in', 'nin'];
3
+ function ensureFieldObject(filters, field) {
4
+ const existing = filters[field];
5
+ if (existing !== undefined) {
6
+ return { container: filters, target: existing };
7
+ }
8
+ const clone = { ...filters };
9
+ const created = {};
10
+ clone[field] = created;
11
+ return { container: clone, target: created };
12
+ }
13
+ function decodeValue(value, field, operator, diagnostics) {
14
+ try {
15
+ return decodeURIComponent(value);
16
+ }
17
+ catch {
18
+ diagnostics.push({
19
+ kind: 'DecodeError',
20
+ field,
21
+ operator,
22
+ detail: 'Failed to decode',
23
+ });
24
+ return undefined;
25
+ }
26
+ }
27
+ function parseSingleValue(descriptor, raw) {
28
+ if (descriptor.kind === 'number') {
29
+ if (raw === '') {
30
+ return undefined;
31
+ }
32
+ const n = Number(raw);
33
+ if (!Number.isFinite(n)) {
34
+ return undefined;
35
+ }
36
+ return n;
37
+ }
38
+ return raw;
39
+ }
40
+ function handleBetween(descriptor, decoded, field, operator, acc) {
41
+ const parts = decoded.split(',');
42
+ if (parts.length !== 2) {
43
+ acc.diagnostics.push({
44
+ kind: 'InvalidArity',
45
+ field,
46
+ operator,
47
+ detail: 'Expected exactly 2 values',
48
+ });
49
+ return;
50
+ }
51
+ const [aRaw, bRaw] = parts;
52
+ const a = parseSingleValue(descriptor, aRaw);
53
+ const b = parseSingleValue(descriptor, bRaw);
54
+ if (a === undefined || b === undefined) {
55
+ acc.diagnostics.push({
56
+ kind: 'InvalidValue',
57
+ field,
58
+ operator,
59
+ detail: 'One of the between values invalid',
60
+ });
61
+ return;
62
+ }
63
+ const ensured = ensureFieldObject(acc.filters, field);
64
+ acc.filters = ensured.container;
65
+ if (Object.prototype.hasOwnProperty.call(ensured.target, 'between')) {
66
+ acc.diagnostics.push({ kind: 'DuplicateBetween', field });
67
+ return;
68
+ }
69
+ ensured.target.between = [a, b];
70
+ }
71
+ function handleList(descriptor, decoded, field, operator, acc) {
72
+ const listRaw = decoded.split(',');
73
+ const parsedList = [];
74
+ for (const item of listRaw) {
75
+ const parsed = parseSingleValue(descriptor, item);
76
+ if (parsed === undefined) {
77
+ acc.diagnostics.push({
78
+ kind: 'InvalidValue',
79
+ field,
80
+ operator,
81
+ detail: 'List item invalid',
82
+ });
83
+ }
84
+ else {
85
+ parsedList.push(parsed);
86
+ }
87
+ }
88
+ if (parsedList.length === 0) {
89
+ return;
90
+ }
91
+ const ensured = ensureFieldObject(acc.filters, field);
92
+ acc.filters = ensured.container;
93
+ const targetObj = ensured.target;
94
+ const existing = targetObj[operator];
95
+ if (Array.isArray(existing)) {
96
+ targetObj[operator] = [...existing, ...parsedList];
97
+ }
98
+ else {
99
+ targetObj[operator] = parsedList;
100
+ }
101
+ }
102
+ function handleScalar(descriptor, decoded, field, operator, acc) {
103
+ const scalar = parseSingleValue(descriptor, decoded);
104
+ if (scalar === undefined) {
105
+ acc.diagnostics.push({ kind: 'InvalidValue', field, operator });
106
+ return;
107
+ }
108
+ const ensured = ensureFieldObject(acc.filters, field);
109
+ acc.filters = ensured.container;
110
+ const scalarTarget = ensured.target;
111
+ scalarTarget[operator] = scalar;
112
+ }
113
+ export function parse(rawSearch, schema) {
114
+ const acc = { filters: {}, diagnostics: [] };
115
+ let search = rawSearch;
116
+ if (search.startsWith('?')) {
117
+ search = search.slice(1);
118
+ }
119
+ if (search.trim() === '') {
120
+ return acc;
121
+ }
122
+ const segments = search.split('&');
123
+ for (const seg of segments) {
124
+ const eqIdx = seg.indexOf('=');
125
+ const validBasic = seg !== '' && eqIdx !== -1;
126
+ if (validBasic) {
127
+ const rawKey = seg.slice(0, eqIdx);
128
+ const rawVal = seg.slice(eqIdx + 1);
129
+ const lastDot = rawKey.lastIndexOf('.');
130
+ const keyShapeOk = !(lastDot <= 0 || lastDot === rawKey.length - 1);
131
+ if (keyShapeOk) {
132
+ const field = rawKey.slice(0, lastDot);
133
+ const operator = rawKey.slice(lastDot + 1);
134
+ const descriptor = schema[field];
135
+ const descOk = descriptor?.operators.includes(operator) === true;
136
+ if (!descOk) {
137
+ if (descriptor === undefined) {
138
+ acc.diagnostics.push({ kind: 'UnknownField', field });
139
+ }
140
+ else {
141
+ acc.diagnostics.push({ kind: 'UnknownOperator', field, operator });
142
+ }
143
+ }
144
+ else {
145
+ const decoded = decodeValue(rawVal, field, operator, acc.diagnostics);
146
+ if (decoded !== undefined) {
147
+ const isList = LIST_OPS.includes(operator);
148
+ if (operator === BETWEEN) {
149
+ handleBetween(descriptor, decoded, field, operator, acc);
150
+ }
151
+ else if (isList) {
152
+ handleList(descriptor, decoded, field, operator, acc);
153
+ }
154
+ else {
155
+ handleScalar(descriptor, decoded, field, operator, acc);
156
+ }
157
+ }
158
+ }
159
+ }
160
+ }
161
+ }
162
+ return acc;
163
+ }
164
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGFyc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBV0EsTUFBTSxPQUFPLEdBQW9CLFNBQVMsQ0FBQztBQUMzQyxNQUFNLFFBQVEsR0FBNEIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFReEQsU0FBUyxpQkFBaUIsQ0FDeEIsT0FBd0IsRUFDeEIsS0FBYTtJQUViLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxLQUFnQixDQUU1QixDQUFDO0lBQ2QsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDM0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQ2xELENBQUM7SUFDRCxNQUFNLEtBQUssR0FBb0IsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDO0lBQzlDLE1BQU0sT0FBTyxHQUE0QixFQUFFLENBQUM7SUFDM0MsS0FBaUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLENBQUM7SUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDO0FBQy9DLENBQUM7QUFHRCxTQUFTLFdBQVcsQ0FDbEIsS0FBYSxFQUNiLEtBQWEsRUFDYixRQUFnQixFQUNoQixXQUF5QjtJQUV6QixJQUFJLENBQUM7UUFDSCxPQUFPLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxXQUFXLENBQUMsSUFBSSxDQUFDO1lBQ2YsSUFBSSxFQUFFLGFBQWE7WUFDbkIsS0FBSztZQUNMLFFBQVE7WUFDUixNQUFNLEVBQUUsa0JBQWtCO1NBQzNCLENBQUMsQ0FBQztRQUNILE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7QUFDSCxDQUFDO0FBR0QsU0FBUyxnQkFBZ0IsQ0FDdkIsVUFBMkIsRUFDM0IsR0FBVztJQUVY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TyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7d0JBQzNELENBQUM7NkJBQU0sSUFBSSxNQUFNLEVBQUUsQ0FBQzs0QkFDbEIsVUFBVSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQzt3QkFDeEQsQ0FBQzs2QkFBTSxDQUFDOzRCQUNOLFlBQVksQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7d0JBQzFELENBQUM7b0JBQ0gsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBTY2hlbWEsXG4gIE9wZXJhdG9yLFxuICBMaXN0T3BlcmF0b3IsXG4gIEJldHdlZW5PcGVyYXRvcixcbiAgSW5mZXJGaWx0ZXJzLFxuICBGaWVsZERlc2NyaXB0b3IsXG4gIFBhcnNlUmVzdWx0LFxufSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgRGlhZ25vc3RpYyB9IGZyb20gJy4vZXJyb3JzLmpzJztcblxuY29uc3QgQkVUV0VFTjogQmV0d2Vlbk9wZXJhdG9yID0gJ2JldHdlZW4nO1xuY29uc3QgTElTVF9PUFM6IHJlYWRvbmx5IExpc3RPcGVyYXRvcltdID0gWydpbicsICduaW4nXTtcblxuaW50ZXJmYWNlIEludGVybmFsQWNjdW11bGF0b3I8UyBleHRlbmRzIFNjaGVtYT4ge1xuICBmaWx0ZXJzOiBJbmZlckZpbHRlcnM8Uz47XG4gIGRpYWdub3N0aWNzOiBEaWFnbm9zdGljW107XG59XG5cbi8qKiBTaGFsbG93IGNsb25lIHBsdXMgZW5zdXJlIGZpZWxkIG9iamVjdCBoZWxwZXIgKGltbXV0YWJsZSB1cGRhdGUpLiAqL1xuZnVuY3Rpb24gZW5zdXJlRmllbGRPYmplY3Q8UyBleHRlbmRzIFNjaGVtYT4oXG4gIGZpbHRlcnM6IEluZmVyRmlsdGVyczxTPixcbiAgZmllbGQ6IHN0cmluZyxcbik6IHsgY29udGFpbmVyOiBJbmZlckZpbHRlcnM8Uz47IHRhcmdldDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfSB7XG4gIGNvbnN0IGV4aXN0aW5nID0gZmlsdGVyc1tmaWVsZCBhcyBrZXlvZiBTXSBhc1xuICAgIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICB8IHVuZGVmaW5lZDtcbiAgaWYgKGV4aXN0aW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4geyBjb250YWluZXI6IGZpbHRlcnMsIHRhcmdldDogZXhpc3RpbmcgfTtcbiAgfVxuICBjb25zdCBjbG9uZTogSW5mZXJGaWx0ZXJzPFM+ID0geyAuLi5maWx0ZXJzIH07XG4gIGNvbnN0IGNyZWF0ZWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gIChjbG9uZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbZmllbGRdID0gY3JlYXRlZDtcbiAgcmV0dXJuIHsgY29udGFpbmVyOiBjbG9uZSwgdGFyZ2V0OiBjcmVhdGVkIH07XG59XG5cbi8qKiBEZWNvZGUgY29tcG9uZW50LCByZWNvcmRpbmcgYSBkaWFnbm9zdGljIG9uIGZhaWx1cmUuICovXG5mdW5jdGlvbiBkZWNvZGVWYWx1ZShcbiAgdmFsdWU6IHN0cmluZyxcbiAgZmllbGQ6IHN0cmluZyxcbiAgb3BlcmF0b3I6IHN0cmluZyxcbiAgZGlhZ25vc3RpY3M6IERpYWdub3N0aWNbXSxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG4gIH0gY2F0Y2gge1xuICAgIGRpYWdub3N0aWNzLnB1c2goe1xuICAgICAga2luZDogJ0RlY29kZUVycm9yJyxcbiAgICAgIGZpZWxkLFxuICAgICAgb3BlcmF0b3IsXG4gICAgICBkZXRhaWw6ICdGYWlsZWQgdG8gZGVjb2RlJyxcbiAgICB9KTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKiBQYXJzZSBhIHNpbmdsZSByYXcgdmFsdWUgYWNjb3JkaW5nIHRvIGZpZWxkIGtpbmQuICovXG5mdW5jdGlvbiBwYXJzZVNpbmdsZVZhbHVlKFxuICBkZXNjcmlwdG9yOiBGaWVsZERlc2NyaXB0b3IsXG4gIHJhdzogc3RyaW5nLFxuKTogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGRlc2NyaXB0b3Iua2luZCA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAocmF3ID09PSAnJykge1xuICAgICAgLy8gVHJlYXQgZW1wdHkgc3RyaW5nIGFzIGludmFsaWQgZm9yIG51bWVyaWMgZmllbGRzIChyZWplY3QgaW5zdGVhZCBvZiBjb2VyY2luZyB0byAwKVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgbiA9IE51bWJlcihyYXcpO1xuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKG4pKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gbjtcbiAgfVxuICByZXR1cm4gcmF3O1xufVxuXG4vKiogSGFuZGxlIGEgYmV0d2VlbiBvcGVyYXRvciB2YWx1ZS4gKi9cbmZ1bmN0aW9uIGhhbmRsZUJldHdlZW48UyBleHRlbmRzIFNjaGVtYT4oXG4gIGRlc2NyaXB0b3I6IEZpZWxkRGVzY3JpcHRvcixcbiAgZGVjb2RlZDogc3RyaW5nLFxuICBmaWVsZDogc3RyaW5nLFxuICBvcGVyYXRvcjogc3RyaW5nLFxuICBhY2M6IEludGVybmFsQWNjdW11bGF0b3I8Uz4sXG4pOiB2b2lkIHtcbiAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gZGVjb2RlZC5zcGxpdCgnLCcpO1xuICBpZiAocGFydHMubGVuZ3RoICE9PSAyKSB7XG4gICAgYWNjLmRpYWdub3N0aWNzLnB1c2goe1xuICAgICAga2luZDogJ0ludmFsaWRBcml0eScsXG4gICAgICBmaWVsZCxcbiAgICAgIG9wZXJhdG9yLFxuICAgICAgZGV0YWlsOiAnRXhwZWN0ZWQgZXhhY3RseSAyIHZhbHVlcycsXG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IFthUmF3LCBiUmF3XSA9IHBhcnRzIGFzIFtzdHJpbmcsIHN0cmluZ107XG4gIGNvbnN0IGEgPSBwYXJzZVNpbmdsZVZhbHVlKGRlc2NyaXB0b3IsIGFSYXcpO1xuICBjb25zdCBiID0gcGFyc2VTaW5nbGVWYWx1ZShkZXNjcmlwdG9yLCBiUmF3KTtcbiAgaWYgKGEgPT09IHVuZGVmaW5lZCB8fCBiID09PSB1bmRlZmluZWQpIHtcbiAgICBhY2MuZGlhZ25vc3RpY3MucHVzaCh7XG4gICAgICBraW5kOiAnSW52YWxpZFZhbHVlJyxcbiAgICAgIGZpZWxkLFxuICAgICAgb3BlcmF0b3IsXG4gICAgICBkZXRhaWw6ICdPbmUgb2YgdGhlIGJldHdlZW4gdmFsdWVzIGludmFsaWQnLFxuICAgIH0pO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBlbnN1cmVkID0gZW5zdXJlRmllbGRPYmplY3QoYWNjLmZpbHRlcnMsIGZpZWxkKTtcbiAgYWNjLmZpbHRlcnMgPSBlbnN1cmVkLmNvbnRhaW5lcjtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlbnN1cmVkLnRhcmdldCwgJ2JldHdlZW4nKSkge1xuICAgIGFjYy5kaWFnbm9zdGljcy5wdXNoKHsga2luZDogJ0R1cGxpY2F0ZUJldHdlZW4nLCBmaWVsZCB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgZW5zdXJlZC50YXJnZXQuYmV0d2VlbiA9IFthLCBiXSBhcyB1bmtub3duO1xufVxuXG4vKiogSGFuZGxlIGxpc3Qgb3BlcmF0b3JzIChpbiwgbmluKS4gKi9cbmZ1bmN0aW9uIGhhbmRsZUxpc3Q8UyBleHRlbmRzIFNjaGVtYT4oXG4gIGRlc2NyaXB0b3I6IEZpZWxkRGVzY3JpcHRvcixcbiAgZGVjb2RlZDogc3RyaW5nLFxuICBmaWVsZDogc3RyaW5nLFxuICBvcGVyYXRvcjogc3RyaW5nLFxuICBhY2M6IEludGVybmFsQWNjdW11bGF0b3I8Uz4sXG4pOiB2b2lkIHtcbiAgY29uc3QgbGlzdFJhdyA9IGRlY29kZWQuc3BsaXQoJywnKTtcbiAgY29uc3QgcGFyc2VkTGlzdDogKHN0cmluZyB8IG51bWJlcilbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGl0ZW0gb2YgbGlzdFJhdykge1xuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlU2luZ2xlVmFsdWUoZGVzY3JpcHRvciwgaXRlbSk7XG4gICAgaWYgKHBhcnNlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBhY2MuZGlhZ25vc3RpY3MucHVzaCh7XG4gICAgICAgIGtpbmQ6ICdJbnZhbGlkVmFsdWUnLFxuICAgICAgICBmaWVsZCxcbiAgICAgICAgb3BlcmF0b3IsXG4gICAgICAgIGRldGFpbDogJ0xpc3QgaXRlbSBpbnZhbGlkJyxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJzZWRMaXN0LnB1c2gocGFyc2VkKTtcbiAgICB9XG4gIH1cbiAgaWYgKHBhcnNlZExpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGVuc3VyZWQgPSBlbnN1cmVGaWVsZE9iamVjdChhY2MuZmlsdGVycywgZmllbGQpO1xuICBhY2MuZmlsdGVycyA9IGVuc3VyZWQuY29udGFpbmVyO1xuICBjb25zdCB0YXJnZXRPYmo6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gZW5zdXJlZC50YXJnZXQ7XG4gIGNvbnN0IGV4aXN0aW5nID0gdGFyZ2V0T2JqW29wZXJhdG9yXTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoZXhpc3RpbmcpKSB7XG4gICAgdGFyZ2V0T2JqW29wZXJhdG9yXSA9IFsuLi5leGlzdGluZywgLi4ucGFyc2VkTGlzdF07XG4gIH0gZWxzZSB7XG4gICAgdGFyZ2V0T2JqW29wZXJhdG9yXSA9IHBhcnNlZExpc3Q7XG4gIH1cbn1cblxuLyoqIEhhbmRsZSBzY2FsYXIgb3BlcmF0b3IgdmFsdWVzLiAqL1xuZnVuY3Rpb24gaGFuZGxlU2NhbGFyPFMgZXh0ZW5kcyBTY2hlbWE+KFxuICBkZXNjcmlwdG9yOiBGaWVsZERlc2NyaXB0b3IsXG4gIGRlY29kZWQ6IHN0cmluZyxcbiAgZmllbGQ6IHN0cmluZyxcbiAgb3BlcmF0b3I6IHN0cmluZyxcbiAgYWNjOiBJbnRlcm5hbEFjY3VtdWxhdG9yPFM+LFxuKTogdm9pZCB7XG4gIGNvbnN0IHNjYWxhciA9IHBhcnNlU2luZ2xlVmFsdWUoZGVzY3JpcHRvciwgZGVjb2RlZCk7XG4gIGlmIChzY2FsYXIgPT09IHVuZGVmaW5lZCkge1xuICAgIGFjYy5kaWFnbm9zdGljcy5wdXNoKHsga2luZDogJ0ludmFsaWRWYWx1ZScsIGZpZWxkLCBvcGVyYXRvciB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgZW5zdXJlZCA9IGVuc3VyZUZpZWxkT2JqZWN0KGFjYy5maWx0ZXJzLCBmaWVsZCk7XG4gIGFjYy5maWx0ZXJzID0gZW5zdXJlZC5jb250YWluZXI7XG4gIGNvbnN0IHNjYWxhclRhcmdldDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBlbnN1cmVkLnRhcmdldDtcbiAgc2NhbGFyVGFyZ2V0W29wZXJhdG9yXSA9IHNjYWxhcjtcbn1cblxuLyoqIFBhcnNlIGEgcmF3IHNlYXJjaCBzdHJpbmcgKGxlYWRpbmcgPyBvcHRpb25hbCkgYWNjb3JkaW5nIHRvIHRoZSBwcm92aWRlZCBzY2hlbWEuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2U8UyBleHRlbmRzIFNjaGVtYT4oXG4gIHJhd1NlYXJjaDogc3RyaW5nLFxuICBzY2hlbWE6IFMsXG4pOiBQYXJzZVJlc3VsdDxTPiB7XG4gIGNvbnN0IGFjYzogSW50ZXJuYWxBY2N1bXVsYXRvcjxTPiA9IHsgZmlsdGVyczoge30sIGRpYWdub3N0aWNzOiBbXSB9O1xuICBsZXQgc2VhcmNoID0gcmF3U2VhcmNoO1xuICBpZiAoc2VhcmNoLnN0YXJ0c1dpdGgoJz8nKSkge1xuICAgIHNlYXJjaCA9IHNlYXJjaC5zbGljZSgxKTtcbiAgfVxuICBpZiAoc2VhcmNoLnRyaW0oKSA9PT0gJycpIHtcbiAgICByZXR1cm4gYWNjO1xuICB9XG4gIGNvbnN0IHNlZ21lbnRzID0gc2VhcmNoLnNwbGl0KCcmJyk7XG4gIGZvciAoY29uc3Qgc2VnIG9mIHNlZ21lbnRzKSB7XG4gICAgY29uc3QgZXFJZHggPSBzZWcuaW5kZXhPZignPScpO1xuICAgIGNvbnN0IHZhbGlkQmFzaWMgPSBzZWcgIT09ICcnICYmIGVxSWR4ICE9PSAtMTtcbiAgICBpZiAodmFsaWRCYXNpYykge1xuICAgICAgY29uc3QgcmF3S2V5ID0gc2VnLnNsaWNlKDAsIGVxSWR4KTtcbiAgICAgIGNvbnN0IHJhd1ZhbCA9IHNlZy5zbGljZShlcUlkeCArIDEpO1xuICAgICAgY29uc3QgbGFzdERvdCA9IHJhd0tleS5sYXN0SW5kZXhPZignLicpO1xuICAgICAgY29uc3Qga2V5U2hhcGVPayA9ICEobGFzdERvdCA8PSAwIHx8IGxhc3REb3QgPT09IHJhd0tleS5sZW5ndGggLSAxKTtcbiAgICAgIGlmIChrZXlTaGFwZU9rKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gcmF3S2V5LnNsaWNlKDAsIGxhc3REb3QpO1xuICAgICAgICBjb25zdCBvcGVyYXRvciA9IHJhd0tleS5zbGljZShsYXN0RG90ICsgMSkgYXMgT3BlcmF0b3I7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBzY2hlbWFbZmllbGRdO1xuICAgICAgICBjb25zdCBkZXNjT2sgPSBkZXNjcmlwdG9yPy5vcGVyYXRvcnMuaW5jbHVkZXMob3BlcmF0b3IpID09PSB0cnVlO1xuICAgICAgICBpZiAoIWRlc2NPaykge1xuICAgICAgICAgIGlmIChkZXNjcmlwdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFjYy5kaWFnbm9zdGljcy5wdXNoKHsga2luZDogJ1Vua25vd25GaWVsZCcsIGZpZWxkIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhY2MuZGlhZ25vc3RpY3MucHVzaCh7IGtpbmQ6ICdVbmtub3duT3BlcmF0b3InLCBmaWVsZCwgb3BlcmF0b3IgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGRlY29kZWQgPSBkZWNvZGVWYWx1ZShyYXdWYWwsIGZpZWxkLCBvcGVyYXRvciwgYWNjLmRpYWdub3N0aWNzKTtcbiAgICAgICAgICBpZiAoZGVjb2RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBpc0xpc3QgPSAoTElTVF9PUFMgYXMgcmVhZG9ubHkgc3RyaW5nW10pLmluY2x1ZGVzKG9wZXJhdG9yKTtcbiAgICAgICAgICAgIGlmIChvcGVyYXRvciA9PT0gQkVUV0VFTikge1xuICAgICAgICAgICAgICBoYW5kbGVCZXR3ZWVuKGRlc2NyaXB0b3IsIGRlY29kZWQsIGZpZWxkLCBvcGVyYXRvciwgYWNjKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNMaXN0KSB7XG4gICAgICAgICAgICAgIGhhbmRsZUxpc3QoZGVzY3JpcHRvciwgZGVjb2RlZCwgZmllbGQsIG9wZXJhdG9yLCBhY2MpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaGFuZGxlU2NhbGFyKGRlc2NyaXB0b3IsIGRlY29kZWQsIGZpZWxkLCBvcGVyYXRvciwgYWNjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFjYztcbn1cbiJdfQ==
@@ -0,0 +1,5 @@
1
+ import type { FieldDescriptor, NumberFieldDescriptor, Schema, StringFieldDescriptor, Operator } from './types.js';
2
+ export declare function numberField(ops?: readonly Operator[]): NumberFieldDescriptor;
3
+ export declare function stringField(ops?: readonly Operator[]): StringFieldDescriptor;
4
+ export declare function defineSchema<S extends Record<string, FieldDescriptor>>(schema: S): Schema & S;
5
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EACrB,MAAM,EACN,qBAAqB,EACrB,QAAQ,EACT,MAAM,YAAY,CAAC;AA0BpB,wBAAgB,WAAW,CACzB,GAAG,GAAE,SAAS,QAAQ,EAA6B,GAClD,qBAAqB,CAmBvB;AAKD,wBAAgB,WAAW,CACzB,GAAG,GAAE,SAAS,QAAQ,EAA6B,GAClD,qBAAqB,CAWvB;AAKD,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,EACpE,MAAM,EAAE,CAAC,GACR,MAAM,GAAG,CAAC,CAEZ"}
@@ -0,0 +1,55 @@
1
+ const DEFAULT_NUMBER_OPERATORS = [
2
+ 'gt',
3
+ 'gte',
4
+ 'lt',
5
+ 'lte',
6
+ 'eq',
7
+ 'neq',
8
+ 'between',
9
+ 'in',
10
+ 'nin',
11
+ ];
12
+ const DEFAULT_STRING_OPERATORS = [
13
+ 'contains',
14
+ 'sw',
15
+ 'ew',
16
+ 'eq',
17
+ 'neq',
18
+ 'in',
19
+ 'nin',
20
+ ];
21
+ export function numberField(ops = DEFAULT_NUMBER_OPERATORS) {
22
+ return {
23
+ kind: 'number',
24
+ operators: ops,
25
+ parse(raw) {
26
+ if (raw === '') {
27
+ return undefined;
28
+ }
29
+ const n = Number(raw);
30
+ if (Number.isFinite(n)) {
31
+ return n;
32
+ }
33
+ return undefined;
34
+ },
35
+ serialize(value) {
36
+ return String(value);
37
+ },
38
+ };
39
+ }
40
+ export function stringField(ops = DEFAULT_STRING_OPERATORS) {
41
+ return {
42
+ kind: 'string',
43
+ operators: ops,
44
+ parse(raw) {
45
+ return raw;
46
+ },
47
+ serialize(value) {
48
+ return String(value);
49
+ },
50
+ };
51
+ }
52
+ export function defineSchema(schema) {
53
+ return Object.freeze({ ...schema });
54
+ }
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQSxNQUFNLHdCQUF3QixHQUF3QjtJQUNwRCxJQUFJO0lBQ0osS0FBSztJQUNMLElBQUk7SUFDSixLQUFLO0lBQ0wsSUFBSTtJQUNKLEtBQUs7SUFDTCxTQUFTO0lBQ1QsSUFBSTtJQUNKLEtBQUs7Q0FDTixDQUFDO0FBQ0YsTUFBTSx3QkFBd0IsR0FBd0I7SUFDcEQsVUFBVTtJQUNWLElBQUk7SUFDSixJQUFJO0lBQ0osSUFBSTtJQUNKLEtBQUs7SUFDTCxJQUFJO0lBQ0osS0FBSztDQUNOLENBQUM7QUFLRixNQUFNLFVBQVUsV0FBVyxDQUN6QixNQUEyQix3QkFBd0I7SUFFbkQsT0FBTztRQUNMLElBQUksRUFBRSxRQUFRO1FBQ2QsU0FBUyxFQUFFLEdBQUc7UUFDZCxLQUFLLENBQUMsR0FBVztZQUNmLElBQUksR0FBRyxLQUFLLEVBQUUsRUFBRSxDQUFDO2dCQUNmLE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUM7WUFDRCxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEIsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZCLE9BQU8sQ0FBQyxDQUFDO1lBQ1gsQ0FBQztZQUNELE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFFRCxTQUFTLENBQUMsS0FBYztZQUN0QixPQUFPLE1BQU0sQ0FBQyxLQUFlLENBQUMsQ0FBQztRQUNqQyxDQUFDO0tBQ3VCLENBQUM7QUFDN0IsQ0FBQztBQUtELE1BQU0sVUFBVSxXQUFXLENBQ3pCLE1BQTJCLHdCQUF3QjtJQUVuRCxPQUFPO1FBQ0wsSUFBSSxFQUFFLFFBQVE7UUFDZCxTQUFTLEVBQUUsR0FBRztRQUNkLEtBQUssQ0FBQyxHQUFXO1lBQ2YsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDO1FBQ0QsU0FBUyxDQUFDLEtBQWM7WUFDdEIsT0FBTyxNQUFNLENBQUMsS0FBZSxDQUFDLENBQUM7UUFDakMsQ0FBQztLQUN1QixDQUFDO0FBQzdCLENBQUM7QUFLRCxNQUFNLFVBQVUsWUFBWSxDQUMxQixNQUFTO0lBRVQsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQ3RDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIEZpZWxkRGVzY3JpcHRvcixcbiAgTnVtYmVyRmllbGREZXNjcmlwdG9yLFxuICBTY2hlbWEsXG4gIFN0cmluZ0ZpZWxkRGVzY3JpcHRvcixcbiAgT3BlcmF0b3IsXG59IGZyb20gJy4vdHlwZXMuanMnO1xuXG5jb25zdCBERUZBVUxUX05VTUJFUl9PUEVSQVRPUlM6IHJlYWRvbmx5IE9wZXJhdG9yW10gPSBbXG4gICdndCcsXG4gICdndGUnLFxuICAnbHQnLFxuICAnbHRlJyxcbiAgJ2VxJyxcbiAgJ25lcScsXG4gICdiZXR3ZWVuJyxcbiAgJ2luJyxcbiAgJ25pbicsXG5dO1xuY29uc3QgREVGQVVMVF9TVFJJTkdfT1BFUkFUT1JTOiByZWFkb25seSBPcGVyYXRvcltdID0gW1xuICAnY29udGFpbnMnLFxuICAnc3cnLFxuICAnZXcnLFxuICAnZXEnLFxuICAnbmVxJyxcbiAgJ2luJyxcbiAgJ25pbicsXG5dO1xuXG4vKipcbiAqIENyZWF0ZSBhIG51bWVyaWMgZmllbGQgZGVzY3JpcHRvciB3aXRoIGEgZ2l2ZW4gb3BlcmF0b3Igd2hpdGVsaXN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbnVtYmVyRmllbGQoXG4gIG9wczogcmVhZG9ubHkgT3BlcmF0b3JbXSA9IERFRkFVTFRfTlVNQkVSX09QRVJBVE9SUyxcbik6IE51bWJlckZpZWxkRGVzY3JpcHRvciB7XG4gIHJldHVybiB7XG4gICAga2luZDogJ251bWJlcicsXG4gICAgb3BlcmF0b3JzOiBvcHMsXG4gICAgcGFyc2UocmF3OiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgICAgaWYgKHJhdyA9PT0gJycpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG4gPSBOdW1iZXIocmF3KTtcbiAgICAgIGlmIChOdW1iZXIuaXNGaW5pdGUobikpIHtcbiAgICAgICAgcmV0dXJuIG47XG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0sXG4gICAgLy8gQWNjZXB0IHVua25vd24gdG8gc2F0aXNmeSBiYXNlIGludGVyZmFjZSBpbnRlcnNlY3Rpb247IGNhbGxlciBlbnN1cmVzIHR5cGUgY29ycmVjdG5lc3NcbiAgICBzZXJpYWxpemUodmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSBhcyBudW1iZXIpO1xuICAgIH0sXG4gIH0gYXMgTnVtYmVyRmllbGREZXNjcmlwdG9yO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHN0cmluZyBmaWVsZCBkZXNjcmlwdG9yIHdpdGggYSBnaXZlbiBvcGVyYXRvciB3aGl0ZWxpc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdGaWVsZChcbiAgb3BzOiByZWFkb25seSBPcGVyYXRvcltdID0gREVGQVVMVF9TVFJJTkdfT1BFUkFUT1JTLFxuKTogU3RyaW5nRmllbGREZXNjcmlwdG9yIHtcbiAgcmV0dXJuIHtcbiAgICBraW5kOiAnc3RyaW5nJyxcbiAgICBvcGVyYXRvcnM6IG9wcyxcbiAgICBwYXJzZShyYXc6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICByZXR1cm4gcmF3O1xuICAgIH0sXG4gICAgc2VyaWFsaXplKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiBTdHJpbmcodmFsdWUgYXMgc3RyaW5nKTtcbiAgICB9LFxuICB9IGFzIFN0cmluZ0ZpZWxkRGVzY3JpcHRvcjtcbn1cblxuLyoqXG4gKiBGcmVlemUgYW5kIHJldHVybiB0aGUgc2NoZW1hIChpbW11dGFiaWxpdHkgZ3VhcmQgZm9yIGNvbnN1bWVycykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVTY2hlbWE8UyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIEZpZWxkRGVzY3JpcHRvcj4+KFxuICBzY2hlbWE6IFMsXG4pOiBTY2hlbWEgJiBTIHtcbiAgcmV0dXJuIE9iamVjdC5mcmVlemUoeyAuLi5zY2hlbWEgfSk7XG59XG4iXX0=
@@ -0,0 +1,3 @@
1
+ import type { InferFilters, Schema } from './types.js';
2
+ export declare function stringify<S extends Schema>(filters: InferFilters<S>, schema: S): string;
3
+ //# sourceMappingURL=stringify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stringify.d.ts","sourceRoot":"","sources":["../../src/stringify.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAY,MAAM,YAAY,CAAC;AAQjE,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,EACxC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EACxB,MAAM,EAAE,CAAC,GACR,MAAM,CAgDR"}
@@ -0,0 +1,50 @@
1
+ function encodeKey(field, op) {
2
+ return `${field}.${op}`;
3
+ }
4
+ export function stringify(filters, schema) {
5
+ const parts = [];
6
+ for (const field of Object.keys(schema)) {
7
+ const value = filters[field];
8
+ const descriptor = schema[field];
9
+ if (value === undefined || descriptor === undefined) {
10
+ }
11
+ else {
12
+ for (const op of descriptor.operators) {
13
+ if (op === 'between') {
14
+ const tuple = value.between;
15
+ if (Array.isArray(tuple) && tuple.length === 2) {
16
+ const first = encodeURIComponent(String(tuple[0]));
17
+ const second = encodeURIComponent(String(tuple[1]));
18
+ parts.push(`${encodeKey(field, op)}=${first},${second}`);
19
+ }
20
+ }
21
+ else if (op === 'in' || op === 'nin') {
22
+ const list = value[op];
23
+ if (Array.isArray(list) && list.length > 0) {
24
+ const encodedItems = list
25
+ .map((v) => {
26
+ return encodeURIComponent(String(v));
27
+ })
28
+ .join(',');
29
+ parts.push(`${encodeKey(field, op)}=${encodedItems}`);
30
+ }
31
+ }
32
+ else {
33
+ const scalar = value[op];
34
+ if (scalar !== undefined) {
35
+ let printable;
36
+ if (typeof scalar === 'string' || typeof scalar === 'number') {
37
+ printable = scalar;
38
+ }
39
+ else {
40
+ printable = JSON.stringify(scalar);
41
+ }
42
+ parts.push(`${encodeKey(field, op)}=${encodeURIComponent(String(printable))}`);
43
+ }
44
+ }
45
+ }
46
+ }
47
+ }
48
+ return parts.join('&');
49
+ }
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5naWZ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0cmluZ2lmeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxTQUFTLFNBQVMsQ0FBQyxLQUFhLEVBQUUsRUFBWTtJQUM1QyxPQUFPLEdBQUcsS0FBSyxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQzFCLENBQUM7QUFHRCxNQUFNLFVBQVUsU0FBUyxDQUN2QixPQUF3QixFQUN4QixNQUFTO0lBRVQsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFDO0lBQzNCLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ3hDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFnQixDQUFDLENBQUM7UUFDeEMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxVQUFVLEtBQUssU0FBUyxFQUFFLENBQUM7UUFFdEQsQ0FBQzthQUFNLENBQUM7WUFDTixLQUFLLE1BQU0sRUFBRSxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDdEMsSUFBSSxFQUFFLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQ3JCLE1BQU0sS0FBSyxHQUFJLEtBQWlDLENBQUMsT0FFcEMsQ0FBQztvQkFDZCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQzt3QkFDL0MsTUFBTSxLQUFLLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ25ELE1BQU0sTUFBTSxHQUFHLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNwRCxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUMsQ0FBQztvQkFDM0QsQ0FBQztnQkFDSCxDQUFDO3FCQUFNLElBQUksRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxFQUFFLENBQUM7b0JBQ3ZDLE1BQU0sSUFBSSxHQUFJLEtBQWlDLENBQUMsRUFBRSxDQUVyQyxDQUFDO29CQUNkLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO3dCQUMzQyxNQUFNLFlBQVksR0FBRyxJQUFJOzZCQUN0QixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTs0QkFDVCxPQUFPLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUN2QyxDQUFDLENBQUM7NkJBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUNiLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLFlBQVksRUFBRSxDQUFDLENBQUM7b0JBQ3hELENBQUM7Z0JBQ0gsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE1BQU0sTUFBTSxHQUFJLEtBQWlDLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ3RELElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO3dCQUN6QixJQUFJLFNBQWtCLENBQUM7d0JBQ3ZCLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDOzRCQUM3RCxTQUFTLEdBQUcsTUFBTSxDQUFDO3dCQUNyQixDQUFDOzZCQUFNLENBQUM7NEJBQ04sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQ3JDLENBQUM7d0JBQ0QsS0FBSyxDQUFDLElBQUksQ0FDUixHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksa0JBQWtCLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FDbkUsQ0FBQztvQkFDSixDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgSW5mZXJGaWx0ZXJzLCBTY2hlbWEsIE9wZXJhdG9yIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8qKiBCdWlsZCBlbmNvZGVkIGtleSBwb3J0aW9uIGZpZWxkLm9wICovXG5mdW5jdGlvbiBlbmNvZGVLZXkoZmllbGQ6IHN0cmluZywgb3A6IE9wZXJhdG9yKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke2ZpZWxkfS4ke29wfWA7XG59XG5cbi8qKiBTZXJpYWxpemUgZmlsdGVycyBvYmplY3QgaW50byBhIHF1ZXJ5IHN0cmluZy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnk8UyBleHRlbmRzIFNjaGVtYT4oXG4gIGZpbHRlcnM6IEluZmVyRmlsdGVyczxTPixcbiAgc2NoZW1hOiBTLFxuKTogc3RyaW5nIHtcbiAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgZmllbGQgb2YgT2JqZWN0LmtleXMoc2NoZW1hKSkge1xuICAgIGNvbnN0IHZhbHVlID0gZmlsdGVyc1tmaWVsZCBhcyBrZXlvZiBTXTtcbiAgICBjb25zdCBkZXNjcmlwdG9yID0gc2NoZW1hW2ZpZWxkXTtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCBkZXNjcmlwdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHNraXAgYWJzZW50XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3Qgb3Agb2YgZGVzY3JpcHRvci5vcGVyYXRvcnMpIHtcbiAgICAgICAgaWYgKG9wID09PSAnYmV0d2VlbicpIHtcbiAgICAgICAgICBjb25zdCB0dXBsZSA9ICh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikuYmV0d2VlbiBhc1xuICAgICAgICAgICAgfCB1bmtub3duW11cbiAgICAgICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHR1cGxlKSAmJiB0dXBsZS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0ID0gZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyh0dXBsZVswXSkpO1xuICAgICAgICAgICAgY29uc3Qgc2Vjb25kID0gZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyh0dXBsZVsxXSkpO1xuICAgICAgICAgICAgcGFydHMucHVzaChgJHtlbmNvZGVLZXkoZmllbGQsIG9wKX09JHtmaXJzdH0sJHtzZWNvbmR9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG9wID09PSAnaW4nIHx8IG9wID09PSAnbmluJykge1xuICAgICAgICAgIGNvbnN0IGxpc3QgPSAodmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW29wXSBhc1xuICAgICAgICAgICAgfCB1bmtub3duW11cbiAgICAgICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGxpc3QpICYmIGxpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZW5jb2RlZEl0ZW1zID0gbGlzdFxuICAgICAgICAgICAgICAubWFwKCh2KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChTdHJpbmcodikpO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuam9pbignLCcpO1xuICAgICAgICAgICAgcGFydHMucHVzaChgJHtlbmNvZGVLZXkoZmllbGQsIG9wKX09JHtlbmNvZGVkSXRlbXN9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHNjYWxhciA9ICh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbb3BdO1xuICAgICAgICAgIGlmIChzY2FsYXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbGV0IHByaW50YWJsZTogdW5rbm93bjtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NhbGFyID09PSAnc3RyaW5nJyB8fCB0eXBlb2Ygc2NhbGFyID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICBwcmludGFibGUgPSBzY2FsYXI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwcmludGFibGUgPSBKU09OLnN0cmluZ2lmeShzY2FsYXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFydHMucHVzaChcbiAgICAgICAgICAgICAgYCR7ZW5jb2RlS2V5KGZpZWxkLCBvcCl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyhwcmludGFibGUpKX1gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHBhcnRzLmpvaW4oJyYnKTtcbn1cbiJdfQ==
@@ -0,0 +1,43 @@
1
+ import type { Diagnostic } from './errors.js';
2
+ export type ScalarOperator = 'gt' | 'gte' | 'lt' | 'lte' | 'eq' | 'neq' | 'contains' | 'sw' | 'ew';
3
+ export type BetweenOperator = 'between';
4
+ export type ListOperator = 'in' | 'nin';
5
+ export type Operator = ScalarOperator | BetweenOperator | ListOperator;
6
+ export type PrimitiveKind = 'number' | 'string';
7
+ export interface FieldDescriptorBase<TKind extends PrimitiveKind> {
8
+ readonly kind: TKind;
9
+ readonly operators: readonly Operator[];
10
+ readonly parse?: (raw: string) => unknown;
11
+ readonly serialize?: (value: unknown) => string;
12
+ }
13
+ export type NumberFieldDescriptor = FieldDescriptorBase<'number'> & {
14
+ readonly parse?: (raw: string) => number | undefined;
15
+ readonly serialize?: (value: number) => string;
16
+ };
17
+ export type StringFieldDescriptor = FieldDescriptorBase<'string'> & {
18
+ readonly parse?: (raw: string) => string | undefined;
19
+ readonly serialize?: (value: string) => string;
20
+ };
21
+ export type FieldDescriptor = NumberFieldDescriptor | StringFieldDescriptor;
22
+ export type Schema = Readonly<Record<string, FieldDescriptor>>;
23
+ type OperatorKeys<D extends FieldDescriptor> = Extract<D['operators'][number], ScalarOperator>;
24
+ type ScalarMap<D extends FieldDescriptor> = D extends FieldDescriptorBase<'number'> ? Record<OperatorKeys<D>, number | undefined> : Record<OperatorKeys<D>, string | undefined>;
25
+ type BetweenMap<D extends FieldDescriptor> = 'between' extends D['operators'][number] ? {
26
+ between?: D extends FieldDescriptorBase<'number'> ? readonly [number, number] : readonly [string, string];
27
+ } : Record<never, never>;
28
+ type ListOps<D extends FieldDescriptor> = Extract<D['operators'][number], ListOperator>;
29
+ type ListMap<D extends FieldDescriptor> = ('in' extends ListOps<D> ? {
30
+ in?: D extends FieldDescriptorBase<'number'> ? readonly number[] : readonly string[];
31
+ } : Record<never, never>) & ('nin' extends ListOps<D> ? {
32
+ nin?: D extends FieldDescriptorBase<'number'> ? readonly number[] : readonly string[];
33
+ } : Record<never, never>);
34
+ export type InferField<D extends FieldDescriptor> = Partial<ScalarMap<D> & BetweenMap<D> & ListMap<D>>;
35
+ export type InferFilters<S extends Schema> = {
36
+ [K in keyof S]?: InferField<S[K]>;
37
+ };
38
+ export interface ParseResult<S extends Schema> {
39
+ readonly filters: InferFilters<S>;
40
+ readonly diagnostics: Diagnostic[];
41
+ }
42
+ export {};
43
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRGlhZ25vc3RpYyB9IGZyb20gJy4vZXJyb3JzLmpzJztcblxuZXhwb3J0IHR5cGUgU2NhbGFyT3BlcmF0b3IgPVxuICB8ICdndCdcbiAgfCAnZ3RlJ1xuICB8ICdsdCdcbiAgfCAnbHRlJ1xuICB8ICdlcSdcbiAgfCAnbmVxJ1xuICB8ICdjb250YWlucydcbiAgfCAnc3cnXG4gIHwgJ2V3JztcbmV4cG9ydCB0eXBlIEJldHdlZW5PcGVyYXRvciA9ICdiZXR3ZWVuJztcbmV4cG9ydCB0eXBlIExpc3RPcGVyYXRvciA9ICdpbicgfCAnbmluJztcbmV4cG9ydCB0eXBlIE9wZXJhdG9yID0gU2NhbGFyT3BlcmF0b3IgfCBCZXR3ZWVuT3BlcmF0b3IgfCBMaXN0T3BlcmF0b3I7XG5cbmV4cG9ydCB0eXBlIFByaW1pdGl2ZUtpbmQgPSAnbnVtYmVyJyB8ICdzdHJpbmcnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZpZWxkRGVzY3JpcHRvckJhc2U8VEtpbmQgZXh0ZW5kcyBQcmltaXRpdmVLaW5kPiB7XG4gIHJlYWRvbmx5IGtpbmQ6IFRLaW5kO1xuICByZWFkb25seSBvcGVyYXRvcnM6IHJlYWRvbmx5IE9wZXJhdG9yW107XG4gIHJlYWRvbmx5IHBhcnNlPzogKHJhdzogc3RyaW5nKSA9PiB1bmtub3duO1xuICByZWFkb25seSBzZXJpYWxpemU/OiAodmFsdWU6IHVua25vd24pID0+IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgTnVtYmVyRmllbGREZXNjcmlwdG9yID0gRmllbGREZXNjcmlwdG9yQmFzZTwnbnVtYmVyJz4gJiB7XG4gIHJlYWRvbmx5IHBhcnNlPzogKHJhdzogc3RyaW5nKSA9PiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IHNlcmlhbGl6ZT86ICh2YWx1ZTogbnVtYmVyKSA9PiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgU3RyaW5nRmllbGREZXNjcmlwdG9yID0gRmllbGREZXNjcmlwdG9yQmFzZTwnc3RyaW5nJz4gJiB7XG4gIHJlYWRvbmx5IHBhcnNlPzogKHJhdzogc3RyaW5nKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IHNlcmlhbGl6ZT86ICh2YWx1ZTogc3RyaW5nKSA9PiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBGaWVsZERlc2NyaXB0b3IgPSBOdW1iZXJGaWVsZERlc2NyaXB0b3IgfCBTdHJpbmdGaWVsZERlc2NyaXB0b3I7XG5cbmV4cG9ydCB0eXBlIFNjaGVtYSA9IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIEZpZWxkRGVzY3JpcHRvcj4+O1xuXG4vLyBJbmZlciBvcGVyYXRvciBtYXBwaW5nIGZvciBhIHNpbmdsZSBmaWVsZCBkZXNjcmlwdG9yXG50eXBlIE9wZXJhdG9yS2V5czxEIGV4dGVuZHMgRmllbGREZXNjcmlwdG9yPiA9IEV4dHJhY3Q8XG4gIERbJ29wZXJhdG9ycyddW251bWJlcl0sXG4gIFNjYWxhck9wZXJhdG9yXG4+O1xudHlwZSBTY2FsYXJNYXA8RCBleHRlbmRzIEZpZWxkRGVzY3JpcHRvcj4gPVxuICBEIGV4dGVuZHMgRmllbGREZXNjcmlwdG9yQmFzZTwnbnVtYmVyJz5cbiAgICA/IFJlY29yZDxPcGVyYXRvcktleXM8RD4sIG51bWJlciB8IHVuZGVmaW5lZD5cbiAgICA6IFJlY29yZDxPcGVyYXRvcktleXM8RD4sIHN0cmluZyB8IHVuZGVmaW5lZD47XG5cbnR5cGUgQmV0d2Vlbk1hcDxEIGV4dGVuZHMgRmllbGREZXNjcmlwdG9yPiA9XG4gICdiZXR3ZWVuJyBleHRlbmRzIERbJ29wZXJhdG9ycyddW251bWJlcl1cbiAgICA/IHtcbiAgICAgICAgYmV0d2Vlbj86IEQgZXh0ZW5kcyBGaWVsZERlc2NyaXB0b3JCYXNlPCdudW1iZXInPlxuICAgICAgICAgID8gcmVhZG9ubHkgW251bWJlciwgbnVtYmVyXVxuICAgICAgICAgIDogcmVhZG9ubHkgW3N0cmluZywgc3RyaW5nXTtcbiAgICAgIH1cbiAgICA6IFJlY29yZDxuZXZlciwgbmV2ZXI+O1xuXG50eXBlIExpc3RPcHM8RCBleHRlbmRzIEZpZWxkRGVzY3JpcHRvcj4gPSBFeHRyYWN0PFxuICBEWydvcGVyYXRvcnMnXVtudW1iZXJdLFxuICBMaXN0T3BlcmF0b3Jcbj47XG50eXBlIExpc3RNYXA8RCBleHRlbmRzIEZpZWxkRGVzY3JpcHRvcj4gPSAoJ2luJyBleHRlbmRzIExpc3RPcHM8RD5cbiAgPyB7XG4gICAgICBpbj86IEQgZXh0ZW5kcyBGaWVsZERlc2NyaXB0b3JCYXNlPCdudW1iZXInPlxuICAgICAgICA/IHJlYWRvbmx5IG51bWJlcltdXG4gICAgICAgIDogcmVhZG9ubHkgc3RyaW5nW107XG4gICAgfVxuICA6IFJlY29yZDxuZXZlciwgbmV2ZXI+KSAmXG4gICgnbmluJyBleHRlbmRzIExpc3RPcHM8RD5cbiAgICA/IHtcbiAgICAgICAgbmluPzogRCBleHRlbmRzIEZpZWxkRGVzY3JpcHRvckJhc2U8J251bWJlcic+XG4gICAgICAgICAgPyByZWFkb25seSBudW1iZXJbXVxuICAgICAgICAgIDogcmVhZG9ubHkgc3RyaW5nW107XG4gICAgICB9XG4gICAgOiBSZWNvcmQ8bmV2ZXIsIG5ldmVyPik7XG5cbmV4cG9ydCB0eXBlIEluZmVyRmllbGQ8RCBleHRlbmRzIEZpZWxkRGVzY3JpcHRvcj4gPSBQYXJ0aWFsPFxuICBTY2FsYXJNYXA8RD4gJiBCZXR3ZWVuTWFwPEQ+ICYgTGlzdE1hcDxEPlxuPjtcblxuZXhwb3J0IHR5cGUgSW5mZXJGaWx0ZXJzPFMgZXh0ZW5kcyBTY2hlbWE+ID0ge1xuICBbSyBpbiBrZXlvZiBTXT86IEluZmVyRmllbGQ8U1tLXT47XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlUmVzdWx0PFMgZXh0ZW5kcyBTY2hlbWE+IHtcbiAgcmVhZG9ubHkgZmlsdGVyczogSW5mZXJGaWx0ZXJzPFM+O1xuICByZWFkb25seSBkaWFnbm9zdGljczogRGlhZ25vc3RpY1tdO1xufVxuIl19
package/lib/index.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ export type * from './types.js';
2
+ export * from './schema.js';
3
+ export type * from './errors.js';
4
+ export * from './parse.js';
5
+ export * from './stringify.js';
6
+ export * from './mutate.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mBAAmB,YAAY,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,mBAAmB,aAAa,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC"}
package/lib/index.js ADDED
@@ -0,0 +1,5 @@
1
+ export * from './schema.js';
2
+ export * from './parse.js';
3
+ export * from './stringify.js';
4
+ export * from './mutate.js';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsY0FBYyxhQUFhLENBQUM7QUFFNUIsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlICogZnJvbSAnLi90eXBlcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NjaGVtYS5qcyc7XG5leHBvcnQgdHlwZSAqIGZyb20gJy4vZXJyb3JzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcGFyc2UuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zdHJpbmdpZnkuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9tdXRhdGUuanMnO1xuIl19
@@ -0,0 +1,6 @@
1
+ import type { InferFilters, Schema } from './types.js';
2
+ export declare function setFilter<S extends Schema, F extends keyof S, O extends keyof NonNullable<InferFilters<S>[F]>>(filters: Readonly<InferFilters<S>>, _schema: S, field: F, operator: O, value: NonNullable<InferFilters<S>[F]>[O] | undefined): InferFilters<S>;
3
+ export declare function removeFilter<S extends Schema, F extends keyof S>(filters: Readonly<InferFilters<S>>, field: F, operator?: keyof NonNullable<InferFilters<S>[F]>): InferFilters<S>;
4
+ export declare function mergeFilters<S extends Schema>(base: Readonly<InferFilters<S>>, patch: Readonly<InferFilters<S>>): InferFilters<S>;
5
+ export declare function isEmpty<S extends Schema>(filters: Readonly<InferFilters<S>>): boolean;
6
+ //# sourceMappingURL=mutate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutate.d.ts","sourceRoot":"","sources":["../src/mutate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAmCvD,wBAAgB,SAAS,CACvB,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,MAAM,CAAC,EACjB,CAAC,SAAS,MAAM,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAE/C,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAClC,OAAO,EAAE,CAAC,EACV,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,CAAC,EACX,KAAK,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,GACpD,YAAY,CAAC,CAAC,CAAC,CAwBjB;AAKD,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,EAC9D,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAClC,KAAK,EAAE,CAAC,EACR,QAAQ,CAAC,EAAE,MAAM,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAC/C,YAAY,CAAC,CAAC,CAAC,CAkBjB;AAKD,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,EAC3C,IAAI,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAC/B,KAAK,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAC/B,YAAY,CAAC,CAAC,CAAC,CAoBjB;AAGD,wBAAgB,OAAO,CAAC,CAAC,SAAS,MAAM,EACtC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GACjC,OAAO,CAET"}
package/lib/mutate.js ADDED
@@ -0,0 +1,88 @@
1
+ function shallowEqual(a, b) {
2
+ if (a === b) {
3
+ return true;
4
+ }
5
+ if (typeof a !== 'object' ||
6
+ a === null ||
7
+ typeof b !== 'object' ||
8
+ b === null) {
9
+ return false;
10
+ }
11
+ const aObj = a;
12
+ const bObj = b;
13
+ const aKeys = Object.keys(aObj);
14
+ const bKeys = Object.keys(bObj);
15
+ if (aKeys.length !== bKeys.length) {
16
+ return false;
17
+ }
18
+ for (const k of aKeys) {
19
+ if (aObj[k] !== bObj[k]) {
20
+ return false;
21
+ }
22
+ }
23
+ return true;
24
+ }
25
+ export function setFilter(filters, _schema, field, operator, value) {
26
+ const currentField = filters[field];
27
+ if (value === undefined) {
28
+ if (currentField === undefined) {
29
+ return filters;
30
+ }
31
+ const { [operator]: _removed, ...rest } = currentField;
32
+ if (Object.keys(rest).length === 0) {
33
+ const { [field]: _f, ...clone } = filters;
34
+ return clone;
35
+ }
36
+ return { ...filters, [field]: rest };
37
+ }
38
+ const newField = {
39
+ ...currentField,
40
+ [operator]: value,
41
+ };
42
+ if (currentField !== undefined && shallowEqual(currentField, newField)) {
43
+ return filters;
44
+ }
45
+ return { ...filters, [field]: newField };
46
+ }
47
+ export function removeFilter(filters, field, operator) {
48
+ const currentField = filters[field];
49
+ if (currentField === undefined) {
50
+ return filters;
51
+ }
52
+ if (operator === undefined) {
53
+ const { [field]: _removed, ...clone } = filters;
54
+ return clone;
55
+ }
56
+ const { [operator]: _opRemoved, ...rest } = currentField;
57
+ if (Object.keys(rest).length === 0) {
58
+ const { [field]: _f, ...clone } = filters;
59
+ return clone;
60
+ }
61
+ return { ...filters, [field]: rest };
62
+ }
63
+ export function mergeFilters(base, patch) {
64
+ let changed = false;
65
+ const result = { ...base };
66
+ for (const key of Object.keys(patch)) {
67
+ const existing = base[key];
68
+ const incoming = patch[key];
69
+ if (incoming === undefined) {
70
+ }
71
+ else if (existing === undefined) {
72
+ result[key] = incoming;
73
+ changed = true;
74
+ }
75
+ else if (!shallowEqual(existing, incoming)) {
76
+ result[key] = incoming;
77
+ changed = true;
78
+ }
79
+ }
80
+ if (changed) {
81
+ return result;
82
+ }
83
+ return base;
84
+ }
85
+ export function isEmpty(filters) {
86
+ return Object.keys(filters).length === 0;
87
+ }
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXV0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL211dGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxTQUFTLFlBQVksQ0FBQyxDQUFVLEVBQUUsQ0FBVTtJQUMxQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNaLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELElBQ0UsT0FBTyxDQUFDLEtBQUssUUFBUTtRQUNyQixDQUFDLEtBQUssSUFBSTtRQUNWLE9BQU8sQ0FBQyxLQUFLLFFBQVE7UUFDckIsQ0FBQyxLQUFLLElBQUksRUFDVixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsTUFBTSxJQUFJLEdBQUcsQ0FBNEIsQ0FBQztJQUMxQyxNQUFNLElBQUksR0FBRyxDQUE0QixDQUFDO0lBQzFDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2xDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELEtBQUssTUFBTSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUM7UUFDdEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDeEIsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUtELE1BQU0sVUFBVSxTQUFTLENBS3ZCLE9BQWtDLEVBQ2xDLE9BQVUsRUFDVixLQUFRLEVBQ1IsUUFBVyxFQUNYLEtBQXFEO0lBRXJELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwQyxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN4QixJQUFJLFlBQVksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMvQixPQUFPLE9BQTBCLENBQUM7UUFDcEMsQ0FBQztRQUNELE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFFBQVEsRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLFlBR3pDLENBQUM7UUFDRixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ25DLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEtBQUssRUFBRSxHQUFHLE9BQWtDLENBQUM7WUFDckUsT0FBTyxLQUF3QixDQUFDO1FBQ2xDLENBQUM7UUFDRCxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLEVBQXFCLENBQUM7SUFDMUQsQ0FBQztJQUNELE1BQU0sUUFBUSxHQUFHO1FBQ2YsR0FBSSxZQUFvRDtRQUN4RCxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUs7S0FDbEIsQ0FBQztJQUNGLElBQUksWUFBWSxLQUFLLFNBQVMsSUFBSSxZQUFZLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDdkUsT0FBTyxPQUEwQixDQUFDO0lBQ3BDLENBQUM7SUFDRCxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLEVBQXFCLENBQUM7QUFDOUQsQ0FBQztBQUtELE1BQU0sVUFBVSxZQUFZLENBQzFCLE9BQWtDLEVBQ2xDLEtBQVEsRUFDUixRQUFnRDtJQUVoRCxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEMsSUFBSSxZQUFZLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDL0IsT0FBTyxPQUEwQixDQUFDO0lBQ3BDLENBQUM7SUFDRCxJQUFJLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUMzQixNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLEVBQUUsR0FBRyxLQUFLLEVBQUUsR0FBRyxPQUFrQyxDQUFDO1FBQzNFLE9BQU8sS0FBd0IsQ0FBQztJQUNsQyxDQUFDO0lBQ0QsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsVUFBVSxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsWUFHM0MsQ0FBQztJQUNGLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbkMsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsS0FBSyxFQUFFLEdBQUcsT0FBa0MsQ0FBQztRQUNyRSxPQUFPLEtBQXdCLENBQUM7SUFDbEMsQ0FBQztJQUNELE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBcUIsQ0FBQztBQUMxRCxDQUFDO0FBS0QsTUFBTSxVQUFVLFlBQVksQ0FDMUIsSUFBK0IsRUFDL0IsS0FBZ0M7SUFFaEMsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLE1BQU0sTUFBTSxHQUE2QixFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUM7SUFDckQsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBZ0IsRUFBRSxDQUFDO1FBQ3BELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUIsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7UUFFN0IsQ0FBQzthQUFNLElBQUksUUFBUSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUF1QyxDQUFDO1lBQ3RELE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDakIsQ0FBQzthQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDN0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQXVDLENBQUM7WUFDdEQsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNqQixDQUFDO0lBQ0gsQ0FBQztJQUNELElBQUksT0FBTyxFQUFFLENBQUM7UUFDWixPQUFPLE1BQXlCLENBQUM7SUFDbkMsQ0FBQztJQUNELE9BQU8sSUFBdUIsQ0FBQztBQUNqQyxDQUFDO0FBR0QsTUFBTSxVQUFVLE9BQU8sQ0FDckIsT0FBa0M7SUFFbEMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7QUFDM0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgSW5mZXJGaWx0ZXJzLCBTY2hlbWEgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLyoqXG4gKiBTaGFsbG93IG9iamVjdCBlcXVhbGl0eSAob3duIGVudW1lcmFibGUgc3RyaW5nIGtleXMgb25seSkuXG4gKi9cbmZ1bmN0aW9uIHNoYWxsb3dFcXVhbChhOiB1bmtub3duLCBiOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGlmIChhID09PSBiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKFxuICAgIHR5cGVvZiBhICE9PSAnb2JqZWN0JyB8fFxuICAgIGEgPT09IG51bGwgfHxcbiAgICB0eXBlb2YgYiAhPT0gJ29iamVjdCcgfHxcbiAgICBiID09PSBudWxsXG4gICkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBhT2JqID0gYSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3QgYk9iaiA9IGIgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IGFLZXlzID0gT2JqZWN0LmtleXMoYU9iaik7XG4gIGNvbnN0IGJLZXlzID0gT2JqZWN0LmtleXMoYk9iaik7XG4gIGlmIChhS2V5cy5sZW5ndGggIT09IGJLZXlzLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBmb3IgKGNvbnN0IGsgb2YgYUtleXMpIHtcbiAgICBpZiAoYU9ialtrXSAhPT0gYk9ialtrXSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBTZXQgb3IgdW5zZXQgYSBzcGVjaWZpYyBvcGVyYXRvciB2YWx1ZSBmb3IgYSBmaWVsZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEZpbHRlcjxcbiAgUyBleHRlbmRzIFNjaGVtYSxcbiAgRiBleHRlbmRzIGtleW9mIFMsXG4gIE8gZXh0ZW5kcyBrZXlvZiBOb25OdWxsYWJsZTxJbmZlckZpbHRlcnM8Uz5bRl0+LFxuPihcbiAgZmlsdGVyczogUmVhZG9ubHk8SW5mZXJGaWx0ZXJzPFM+PixcbiAgX3NjaGVtYTogUywgLy8gcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB2YWxpZGF0aW9uIGhvb2tzXG4gIGZpZWxkOiBGLFxuICBvcGVyYXRvcjogTyxcbiAgdmFsdWU6IE5vbk51bGxhYmxlPEluZmVyRmlsdGVyczxTPltGXT5bT10gfCB1bmRlZmluZWQsXG4pOiBJbmZlckZpbHRlcnM8Uz4ge1xuICBjb25zdCBjdXJyZW50RmllbGQgPSBmaWx0ZXJzW2ZpZWxkXTtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoY3VycmVudEZpZWxkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmaWx0ZXJzIGFzIEluZmVyRmlsdGVyczxTPjtcbiAgICB9XG4gICAgY29uc3QgeyBbb3BlcmF0b3JdOiBfcmVtb3ZlZCwgLi4ucmVzdCB9ID0gY3VycmVudEZpZWxkIGFzIFJlY29yZDxcbiAgICAgIHN0cmluZyxcbiAgICAgIHVua25vd25cbiAgICA+O1xuICAgIGlmIChPYmplY3Qua2V5cyhyZXN0KS5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN0IHsgW2ZpZWxkXTogX2YsIC4uLmNsb25lIH0gPSBmaWx0ZXJzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgcmV0dXJuIGNsb25lIGFzIEluZmVyRmlsdGVyczxTPjtcbiAgICB9XG4gICAgcmV0dXJuIHsgLi4uZmlsdGVycywgW2ZpZWxkXTogcmVzdCB9IGFzIEluZmVyRmlsdGVyczxTPjtcbiAgfVxuICBjb25zdCBuZXdGaWVsZCA9IHtcbiAgICAuLi4oY3VycmVudEZpZWxkIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkKSxcbiAgICBbb3BlcmF0b3JdOiB2YWx1ZSxcbiAgfTtcbiAgaWYgKGN1cnJlbnRGaWVsZCAhPT0gdW5kZWZpbmVkICYmIHNoYWxsb3dFcXVhbChjdXJyZW50RmllbGQsIG5ld0ZpZWxkKSkge1xuICAgIHJldHVybiBmaWx0ZXJzIGFzIEluZmVyRmlsdGVyczxTPjtcbiAgfVxuICByZXR1cm4geyAuLi5maWx0ZXJzLCBbZmllbGRdOiBuZXdGaWVsZCB9IGFzIEluZmVyRmlsdGVyczxTPjtcbn1cblxuLyoqXG4gKiBSZW1vdmUgZWl0aGVyIGFuIGVudGlyZSBmaWVsZCBvciBhIHNwZWNpZmljIG9wZXJhdG9yIGluc2lkZSBhIGZpZWxkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRmlsdGVyPFMgZXh0ZW5kcyBTY2hlbWEsIEYgZXh0ZW5kcyBrZXlvZiBTPihcbiAgZmlsdGVyczogUmVhZG9ubHk8SW5mZXJGaWx0ZXJzPFM+PixcbiAgZmllbGQ6IEYsXG4gIG9wZXJhdG9yPzoga2V5b2YgTm9uTnVsbGFibGU8SW5mZXJGaWx0ZXJzPFM+W0ZdPixcbik6IEluZmVyRmlsdGVyczxTPiB7XG4gIGNvbnN0IGN1cnJlbnRGaWVsZCA9IGZpbHRlcnNbZmllbGRdO1xuICBpZiAoY3VycmVudEZpZWxkID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZmlsdGVycyBhcyBJbmZlckZpbHRlcnM8Uz47XG4gIH1cbiAgaWYgKG9wZXJhdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCB7IFtmaWVsZF06IF9yZW1vdmVkLCAuLi5jbG9uZSB9ID0gZmlsdGVycyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICByZXR1cm4gY2xvbmUgYXMgSW5mZXJGaWx0ZXJzPFM+O1xuICB9XG4gIGNvbnN0IHsgW29wZXJhdG9yXTogX29wUmVtb3ZlZCwgLi4ucmVzdCB9ID0gY3VycmVudEZpZWxkIGFzIFJlY29yZDxcbiAgICBzdHJpbmcsXG4gICAgdW5rbm93blxuICA+O1xuICBpZiAoT2JqZWN0LmtleXMocmVzdCkubGVuZ3RoID09PSAwKSB7XG4gICAgY29uc3QgeyBbZmllbGRdOiBfZiwgLi4uY2xvbmUgfSA9IGZpbHRlcnMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgcmV0dXJuIGNsb25lIGFzIEluZmVyRmlsdGVyczxTPjtcbiAgfVxuICByZXR1cm4geyAuLi5maWx0ZXJzLCBbZmllbGRdOiByZXN0IH0gYXMgSW5mZXJGaWx0ZXJzPFM+O1xufVxuXG4vKipcbiAqIE1lcmdlIHR3byBmaWx0ZXJzIG9iamVjdHMgcHJlc2VydmluZyByZWZlcmVuY2UgaWRlbnRpdHkgZm9yIHVuY2hhbmdlZCBmaWVsZHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUZpbHRlcnM8UyBleHRlbmRzIFNjaGVtYT4oXG4gIGJhc2U6IFJlYWRvbmx5PEluZmVyRmlsdGVyczxTPj4sXG4gIHBhdGNoOiBSZWFkb25seTxJbmZlckZpbHRlcnM8Uz4+LFxuKTogSW5mZXJGaWx0ZXJzPFM+IHtcbiAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcbiAgY29uc3QgcmVzdWx0OiBQYXJ0aWFsPEluZmVyRmlsdGVyczxTPj4gPSB7IC4uLmJhc2UgfTtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocGF0Y2gpIGFzIChrZXlvZiBTKVtdKSB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBiYXNlW2tleV07XG4gICAgY29uc3QgaW5jb21pbmcgPSBwYXRjaFtrZXldO1xuICAgIGlmIChpbmNvbWluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBza2lwIHVuZGVmaW5lZCBpbmNvbWluZ1xuICAgIH0gZWxzZSBpZiAoZXhpc3RpbmcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVzdWx0W2tleV0gPSBpbmNvbWluZyBhcyBJbmZlckZpbHRlcnM8Uz5bdHlwZW9mIGtleV07XG4gICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKCFzaGFsbG93RXF1YWwoZXhpc3RpbmcsIGluY29taW5nKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBpbmNvbWluZyBhcyBJbmZlckZpbHRlcnM8Uz5bdHlwZW9mIGtleV07XG4gICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgaWYgKGNoYW5nZWQpIHtcbiAgICByZXR1cm4gcmVzdWx0IGFzIEluZmVyRmlsdGVyczxTPjtcbiAgfVxuICByZXR1cm4gYmFzZSBhcyBJbmZlckZpbHRlcnM8Uz47XG59XG5cbi8qKiBEZXRlcm1pbmUgaWYgdGhlIGZpbHRlcnMgb2JqZWN0IGlzIGVtcHR5IChubyBmaWVsZHMpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHk8UyBleHRlbmRzIFNjaGVtYT4oXG4gIGZpbHRlcnM6IFJlYWRvbmx5PEluZmVyRmlsdGVyczxTPj4sXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGZpbHRlcnMpLmxlbmd0aCA9PT0gMDtcbn1cbiJdfQ==
package/lib/parse.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ import type { Schema, ParseResult } from './types.js';
2
+ export declare function parse<S extends Schema>(rawSearch: string, schema: S): ParseResult<S>;
3
+ //# sourceMappingURL=parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EAMN,WAAW,EACZ,MAAM,YAAY,CAAC;AAmKpB,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EACpC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,CAAC,GACR,WAAW,CAAC,CAAC,CAAC,CA8ChB"}