@medplum/core 2.0.7 → 2.0.9
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/dist/cjs/index.cjs +247 -333
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.min.cjs +1 -1
- package/dist/esm/client.mjs +8 -5
- package/dist/esm/client.mjs.map +1 -1
- package/dist/esm/index.min.mjs +1 -1
- package/dist/esm/index.mjs +3 -3
- package/dist/esm/outcomes.mjs +21 -3
- package/dist/esm/outcomes.mjs.map +1 -1
- package/dist/esm/search/search.mjs +215 -111
- package/dist/esm/search/search.mjs.map +1 -1
- package/dist/types/client.d.ts +11 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/outcomes.d.ts +6 -0
- package/dist/types/search/search.d.ts +16 -5
- package/package.json +1 -1
- package/dist/esm/search/parse.mjs +0 -218
- package/dist/esm/search/parse.mjs.map +0 -1
- package/dist/types/search/parse.d.ts +0 -17
|
@@ -46,13 +46,24 @@ export declare enum Operator {
|
|
|
46
46
|
IN = "in",
|
|
47
47
|
NOT_IN = "not-in",
|
|
48
48
|
OF_TYPE = "of-type",
|
|
49
|
-
MISSING = "missing"
|
|
49
|
+
MISSING = "missing",
|
|
50
|
+
IDENTIFIER = "identifier"
|
|
50
51
|
}
|
|
51
52
|
/**
|
|
52
|
-
* Parses a URL into a
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
53
|
+
* Parses a search URL into a search request.
|
|
54
|
+
* @param resourceType The FHIR resource type.
|
|
55
|
+
* @param query The collection of query string parameters.
|
|
56
|
+
* @returns A parsed SearchRequest.
|
|
57
|
+
*/
|
|
58
|
+
export declare function parseSearchRequest(resourceType: ResourceType, query: Record<string, string[] | string | undefined>): SearchRequest;
|
|
59
|
+
/**
|
|
60
|
+
* Parses a search URL into a search request.
|
|
61
|
+
* @param url The search URL.
|
|
62
|
+
* @returns A parsed SearchRequest.
|
|
63
|
+
*/
|
|
64
|
+
export declare function parseSearchUrl(url: URL): SearchRequest;
|
|
65
|
+
/**
|
|
66
|
+
* Parses a URL string into a SearchRequest.
|
|
56
67
|
* @param url The URL to parse.
|
|
57
68
|
* @returns Parsed search definition.
|
|
58
69
|
*/
|
package/package.json
CHANGED
|
@@ -1,218 +0,0 @@
|
|
|
1
|
-
import { __classPrivateFieldGet } from '../node_modules/tslib/tslib.es6.mjs';
|
|
2
|
-
import { globalSchema } from '../types.mjs';
|
|
3
|
-
import { Operator } from './search.mjs';
|
|
4
|
-
|
|
5
|
-
var _SearchParser_instances, _SearchParser_parseKeyValue, _SearchParser_parseSortRule, _SearchParser_parseParameter, _SearchParser_parsePrefixType, _SearchParser_parseModifierType, _SearchParser_parseReference, _SearchParser_parseQuantity, _SearchParser_parseUnknownParameter;
|
|
6
|
-
/**
|
|
7
|
-
* Parses a FHIR search query.
|
|
8
|
-
* See: https://www.hl7.org/fhir/search.html
|
|
9
|
-
*/
|
|
10
|
-
/**
|
|
11
|
-
* For the ordered parameter types of number, date, and quantity,
|
|
12
|
-
* a prefix to the parameter value may be used to control the nature
|
|
13
|
-
* of the matching.
|
|
14
|
-
* See: https://www.hl7.org/fhir/search.html#prefix
|
|
15
|
-
*/
|
|
16
|
-
const prefixMap = {
|
|
17
|
-
eq: Operator.EQUALS,
|
|
18
|
-
ne: Operator.NOT_EQUALS,
|
|
19
|
-
lt: Operator.LESS_THAN,
|
|
20
|
-
le: Operator.LESS_THAN_OR_EQUALS,
|
|
21
|
-
gt: Operator.GREATER_THAN,
|
|
22
|
-
ge: Operator.GREATER_THAN_OR_EQUALS,
|
|
23
|
-
sa: Operator.STARTS_AFTER,
|
|
24
|
-
eb: Operator.ENDS_BEFORE,
|
|
25
|
-
ap: Operator.APPROXIMATELY,
|
|
26
|
-
};
|
|
27
|
-
/**
|
|
28
|
-
* Parameter names may specify a modifier as a suffix.
|
|
29
|
-
* The modifiers are separated from the parameter name by a colon.
|
|
30
|
-
* See: https://www.hl7.org/fhir/search.html#modifiers
|
|
31
|
-
*/
|
|
32
|
-
const modifierMap = {
|
|
33
|
-
contains: Operator.CONTAINS,
|
|
34
|
-
exact: Operator.EXACT,
|
|
35
|
-
above: Operator.ABOVE,
|
|
36
|
-
below: Operator.BELOW,
|
|
37
|
-
text: Operator.TEXT,
|
|
38
|
-
not: Operator.NOT,
|
|
39
|
-
in: Operator.IN,
|
|
40
|
-
'not-in': Operator.NOT_IN,
|
|
41
|
-
'of-type': Operator.OF_TYPE,
|
|
42
|
-
};
|
|
43
|
-
/**
|
|
44
|
-
* Parses a search URL into a search request.
|
|
45
|
-
* @param resourceType The FHIR resource type.
|
|
46
|
-
* @param query The collection of query string parameters.
|
|
47
|
-
* @returns A parsed SearchRequest.
|
|
48
|
-
*/
|
|
49
|
-
function parseSearchRequest(resourceType, query) {
|
|
50
|
-
return new SearchParser(resourceType, query);
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Parses a search URL into a search request.
|
|
54
|
-
* @param url The search URL.
|
|
55
|
-
* @returns A parsed SearchRequest.
|
|
56
|
-
*/
|
|
57
|
-
function parseSearchUrl(url) {
|
|
58
|
-
const resourceType = url.pathname.split('/').pop();
|
|
59
|
-
return new SearchParser(resourceType, Object.fromEntries(url.searchParams.entries()));
|
|
60
|
-
}
|
|
61
|
-
class SearchParser {
|
|
62
|
-
constructor(resourceType, query) {
|
|
63
|
-
_SearchParser_instances.add(this);
|
|
64
|
-
this.resourceType = resourceType;
|
|
65
|
-
this.filters = [];
|
|
66
|
-
this.sortRules = [];
|
|
67
|
-
for (const [key, value] of Object.entries(query)) {
|
|
68
|
-
if (Array.isArray(value)) {
|
|
69
|
-
value.forEach((element) => __classPrivateFieldGet(this, _SearchParser_instances, "m", _SearchParser_parseKeyValue).call(this, key, element));
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
__classPrivateFieldGet(this, _SearchParser_instances, "m", _SearchParser_parseKeyValue).call(this, key, value ?? '');
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
_SearchParser_instances = new WeakSet(), _SearchParser_parseKeyValue = function _SearchParser_parseKeyValue(key, value) {
|
|
78
|
-
let code;
|
|
79
|
-
let modifier;
|
|
80
|
-
const colonIndex = key.indexOf(':');
|
|
81
|
-
if (colonIndex >= 0) {
|
|
82
|
-
code = key.substring(0, colonIndex);
|
|
83
|
-
modifier = key.substring(colonIndex + 1);
|
|
84
|
-
}
|
|
85
|
-
else {
|
|
86
|
-
code = key;
|
|
87
|
-
modifier = '';
|
|
88
|
-
}
|
|
89
|
-
switch (code) {
|
|
90
|
-
case '_sort':
|
|
91
|
-
__classPrivateFieldGet(this, _SearchParser_instances, "m", _SearchParser_parseSortRule).call(this, value);
|
|
92
|
-
break;
|
|
93
|
-
case '_count':
|
|
94
|
-
this.count = parseInt(value);
|
|
95
|
-
break;
|
|
96
|
-
case '_offset':
|
|
97
|
-
this.offset = parseInt(value);
|
|
98
|
-
break;
|
|
99
|
-
case '_total':
|
|
100
|
-
this.total = value;
|
|
101
|
-
break;
|
|
102
|
-
case '_summary':
|
|
103
|
-
this.total = 'estimate';
|
|
104
|
-
this.count = 0;
|
|
105
|
-
break;
|
|
106
|
-
case '_revinclude':
|
|
107
|
-
this.revInclude = value;
|
|
108
|
-
break;
|
|
109
|
-
default: {
|
|
110
|
-
const param = globalSchema.types[this.resourceType]?.searchParams?.[code];
|
|
111
|
-
if (param) {
|
|
112
|
-
__classPrivateFieldGet(this, _SearchParser_instances, "m", _SearchParser_parseParameter).call(this, param, modifier, value);
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
115
|
-
__classPrivateFieldGet(this, _SearchParser_instances, "m", _SearchParser_parseUnknownParameter).call(this, code, modifier, value);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
}, _SearchParser_parseSortRule = function _SearchParser_parseSortRule(value) {
|
|
120
|
-
for (const field of value.split(',')) {
|
|
121
|
-
let code;
|
|
122
|
-
let descending = false;
|
|
123
|
-
if (field.startsWith('-')) {
|
|
124
|
-
code = field.substring(1);
|
|
125
|
-
descending = true;
|
|
126
|
-
}
|
|
127
|
-
else {
|
|
128
|
-
code = field;
|
|
129
|
-
}
|
|
130
|
-
this.sortRules.push({ code, descending });
|
|
131
|
-
}
|
|
132
|
-
}, _SearchParser_parseParameter = function _SearchParser_parseParameter(searchParam, modifier, value) {
|
|
133
|
-
if (modifier === 'missing') {
|
|
134
|
-
this.filters.push({
|
|
135
|
-
code: searchParam.code,
|
|
136
|
-
operator: Operator.MISSING,
|
|
137
|
-
value,
|
|
138
|
-
});
|
|
139
|
-
return;
|
|
140
|
-
}
|
|
141
|
-
switch (searchParam.type) {
|
|
142
|
-
case 'number':
|
|
143
|
-
case 'date':
|
|
144
|
-
__classPrivateFieldGet(this, _SearchParser_instances, "m", _SearchParser_parsePrefixType).call(this, searchParam, value);
|
|
145
|
-
break;
|
|
146
|
-
case 'string':
|
|
147
|
-
case 'token':
|
|
148
|
-
case 'uri':
|
|
149
|
-
__classPrivateFieldGet(this, _SearchParser_instances, "m", _SearchParser_parseModifierType).call(this, searchParam, modifier, value);
|
|
150
|
-
break;
|
|
151
|
-
case 'reference':
|
|
152
|
-
__classPrivateFieldGet(this, _SearchParser_instances, "m", _SearchParser_parseReference).call(this, searchParam, value);
|
|
153
|
-
break;
|
|
154
|
-
case 'quantity':
|
|
155
|
-
__classPrivateFieldGet(this, _SearchParser_instances, "m", _SearchParser_parseQuantity).call(this, searchParam, value);
|
|
156
|
-
break;
|
|
157
|
-
}
|
|
158
|
-
}, _SearchParser_parsePrefixType = function _SearchParser_parsePrefixType(param, input) {
|
|
159
|
-
const { operator, value } = parsePrefix(input);
|
|
160
|
-
this.filters.push({
|
|
161
|
-
code: param.code,
|
|
162
|
-
operator,
|
|
163
|
-
value,
|
|
164
|
-
});
|
|
165
|
-
}, _SearchParser_parseModifierType = function _SearchParser_parseModifierType(param, modifier, value) {
|
|
166
|
-
this.filters.push({
|
|
167
|
-
code: param.code,
|
|
168
|
-
operator: parseModifier(modifier),
|
|
169
|
-
value,
|
|
170
|
-
});
|
|
171
|
-
}, _SearchParser_parseReference = function _SearchParser_parseReference(param, value) {
|
|
172
|
-
this.filters.push({
|
|
173
|
-
code: param.code,
|
|
174
|
-
operator: Operator.EQUALS,
|
|
175
|
-
value: value,
|
|
176
|
-
});
|
|
177
|
-
}, _SearchParser_parseQuantity = function _SearchParser_parseQuantity(param, input) {
|
|
178
|
-
const [prefixNumber, unitSystem, unitCode] = input.split('|');
|
|
179
|
-
const { operator, value } = parsePrefix(prefixNumber);
|
|
180
|
-
this.filters.push({
|
|
181
|
-
code: param.code,
|
|
182
|
-
operator,
|
|
183
|
-
value,
|
|
184
|
-
unitSystem,
|
|
185
|
-
unitCode,
|
|
186
|
-
});
|
|
187
|
-
}, _SearchParser_parseUnknownParameter = function _SearchParser_parseUnknownParameter(code, modifier, value) {
|
|
188
|
-
let operator = Operator.EQUALS;
|
|
189
|
-
if (modifier) {
|
|
190
|
-
operator = modifier;
|
|
191
|
-
}
|
|
192
|
-
else {
|
|
193
|
-
for (const prefix of Object.keys(prefixMap)) {
|
|
194
|
-
if (value.match(new RegExp('^' + prefix + '\\d'))) {
|
|
195
|
-
operator = prefix;
|
|
196
|
-
value = value.substring(prefix.length);
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
this.filters.push({
|
|
201
|
-
code,
|
|
202
|
-
operator,
|
|
203
|
-
value,
|
|
204
|
-
});
|
|
205
|
-
};
|
|
206
|
-
function parsePrefix(input) {
|
|
207
|
-
const prefix = input.substring(0, 2);
|
|
208
|
-
if (prefix in prefixMap) {
|
|
209
|
-
return { operator: prefixMap[prefix], value: input.substring(2) };
|
|
210
|
-
}
|
|
211
|
-
return { operator: Operator.EQUALS, value: input };
|
|
212
|
-
}
|
|
213
|
-
function parseModifier(modifier) {
|
|
214
|
-
return modifierMap[modifier] || Operator.EQUALS;
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
export { parseSearchRequest, parseSearchUrl };
|
|
218
|
-
//# sourceMappingURL=parse.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parse.mjs","sources":["../../../src/search/parse.ts"],"sourcesContent":["import { ResourceType, SearchParameter } from '@medplum/fhirtypes';\nimport { URL } from 'url';\nimport { globalSchema } from '../types';\nimport { Filter, Operator, SearchRequest, SortRule } from './search';\n\n/**\n * Parses a FHIR search query.\n * See: https://www.hl7.org/fhir/search.html\n */\n\n/**\n * For the ordered parameter types of number, date, and quantity,\n * a prefix to the parameter value may be used to control the nature\n * of the matching.\n * See: https://www.hl7.org/fhir/search.html#prefix\n */\nconst prefixMap: Record<string, Operator> = {\n eq: Operator.EQUALS,\n ne: Operator.NOT_EQUALS,\n lt: Operator.LESS_THAN,\n le: Operator.LESS_THAN_OR_EQUALS,\n gt: Operator.GREATER_THAN,\n ge: Operator.GREATER_THAN_OR_EQUALS,\n sa: Operator.STARTS_AFTER,\n eb: Operator.ENDS_BEFORE,\n ap: Operator.APPROXIMATELY,\n};\n\n/**\n * Parameter names may specify a modifier as a suffix.\n * The modifiers are separated from the parameter name by a colon.\n * See: https://www.hl7.org/fhir/search.html#modifiers\n */\nconst modifierMap: Record<string, Operator> = {\n contains: Operator.CONTAINS,\n exact: Operator.EXACT,\n above: Operator.ABOVE,\n below: Operator.BELOW,\n text: Operator.TEXT,\n not: Operator.NOT,\n in: Operator.IN,\n 'not-in': Operator.NOT_IN,\n 'of-type': Operator.OF_TYPE,\n};\n\n/**\n * Parses a search URL into a search request.\n * @param resourceType The FHIR resource type.\n * @param query The collection of query string parameters.\n * @returns A parsed SearchRequest.\n */\nexport function parseSearchRequest(\n resourceType: ResourceType,\n query: Record<string, string[] | string | undefined>\n): SearchRequest {\n return new SearchParser(resourceType, query);\n}\n\n/**\n * Parses a search URL into a search request.\n * @param url The search URL.\n * @returns A parsed SearchRequest.\n */\nexport function parseSearchUrl(url: URL): SearchRequest {\n const resourceType = url.pathname.split('/').pop() as ResourceType;\n return new SearchParser(resourceType, Object.fromEntries(url.searchParams.entries()));\n}\n\nclass SearchParser implements SearchRequest {\n readonly resourceType: ResourceType;\n readonly filters: Filter[];\n readonly sortRules: SortRule[];\n count?: number;\n offset?: number;\n total?: 'none' | 'estimate' | 'accurate';\n revInclude?: string;\n\n constructor(resourceType: ResourceType, query: Record<string, string[] | string | undefined>) {\n this.resourceType = resourceType;\n this.filters = [];\n this.sortRules = [];\n\n for (const [key, value] of Object.entries(query)) {\n if (Array.isArray(value)) {\n value.forEach((element) => this.#parseKeyValue(key, element));\n } else {\n this.#parseKeyValue(key, value ?? '');\n }\n }\n }\n\n #parseKeyValue(key: string, value: string): void {\n let code;\n let modifier;\n\n const colonIndex = key.indexOf(':');\n if (colonIndex >= 0) {\n code = key.substring(0, colonIndex);\n modifier = key.substring(colonIndex + 1);\n } else {\n code = key;\n modifier = '';\n }\n\n switch (code) {\n case '_sort':\n this.#parseSortRule(value);\n break;\n\n case '_count':\n this.count = parseInt(value);\n break;\n\n case '_offset':\n this.offset = parseInt(value);\n break;\n\n case '_total':\n this.total = value as 'none' | 'estimate' | 'accurate';\n break;\n\n case '_summary':\n this.total = 'estimate';\n this.count = 0;\n break;\n\n case '_revinclude':\n this.revInclude = value;\n break;\n\n default: {\n const param = globalSchema.types[this.resourceType]?.searchParams?.[code];\n if (param) {\n this.#parseParameter(param, modifier, value);\n } else {\n this.#parseUnknownParameter(code, modifier, value);\n }\n }\n }\n }\n\n #parseSortRule(value: string): void {\n for (const field of value.split(',')) {\n let code;\n let descending = false;\n if (field.startsWith('-')) {\n code = field.substring(1);\n descending = true;\n } else {\n code = field;\n }\n this.sortRules.push({ code, descending });\n }\n }\n\n #parseParameter(searchParam: SearchParameter, modifier: string, value: string): void {\n if (modifier === 'missing') {\n this.filters.push({\n code: searchParam.code as string,\n operator: Operator.MISSING,\n value,\n });\n return;\n }\n switch (searchParam.type) {\n case 'number':\n case 'date':\n this.#parsePrefixType(searchParam, value);\n break;\n case 'string':\n case 'token':\n case 'uri':\n this.#parseModifierType(searchParam, modifier, value);\n break;\n case 'reference':\n this.#parseReference(searchParam, value);\n break;\n case 'quantity':\n this.#parseQuantity(searchParam, value);\n break;\n }\n }\n\n #parsePrefixType(param: SearchParameter, input: string): void {\n const { operator, value } = parsePrefix(input);\n this.filters.push({\n code: param.code as string,\n operator,\n value,\n });\n }\n\n #parseModifierType(param: SearchParameter, modifier: string, value: string): void {\n this.filters.push({\n code: param.code as string,\n operator: parseModifier(modifier),\n value,\n });\n }\n\n #parseReference(param: SearchParameter, value: string): void {\n this.filters.push({\n code: param.code as string,\n operator: Operator.EQUALS,\n value: value,\n });\n }\n\n #parseQuantity(param: SearchParameter, input: string): void {\n const [prefixNumber, unitSystem, unitCode] = input.split('|');\n const { operator, value } = parsePrefix(prefixNumber);\n this.filters.push({\n code: param.code as string,\n operator,\n value,\n unitSystem,\n unitCode,\n });\n }\n\n #parseUnknownParameter(code: string, modifier: string, value: string): void {\n let operator = Operator.EQUALS;\n if (modifier) {\n operator = modifier as Operator;\n } else {\n for (const prefix of Object.keys(prefixMap)) {\n if (value.match(new RegExp('^' + prefix + '\\\\d'))) {\n operator = prefix as Operator;\n value = value.substring(prefix.length);\n }\n }\n }\n\n this.filters.push({\n code,\n operator,\n value,\n });\n }\n}\n\nfunction parsePrefix(input: string): { operator: Operator; value: string } {\n const prefix = input.substring(0, 2);\n if (prefix in prefixMap) {\n return { operator: prefixMap[prefix], value: input.substring(2) };\n }\n return { operator: Operator.EQUALS, value: input };\n}\n\nfunction parseModifier(modifier: string): Operator {\n return modifierMap[modifier] || Operator.EQUALS;\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
import { ResourceType } from '@medplum/fhirtypes';
|
|
3
|
-
import { URL } from 'url';
|
|
4
|
-
import { SearchRequest } from './search';
|
|
5
|
-
/**
|
|
6
|
-
* Parses a search URL into a search request.
|
|
7
|
-
* @param resourceType The FHIR resource type.
|
|
8
|
-
* @param query The collection of query string parameters.
|
|
9
|
-
* @returns A parsed SearchRequest.
|
|
10
|
-
*/
|
|
11
|
-
export declare function parseSearchRequest(resourceType: ResourceType, query: Record<string, string[] | string | undefined>): SearchRequest;
|
|
12
|
-
/**
|
|
13
|
-
* Parses a search URL into a search request.
|
|
14
|
-
* @param url The search URL.
|
|
15
|
-
* @returns A parsed SearchRequest.
|
|
16
|
-
*/
|
|
17
|
-
export declare function parseSearchUrl(url: URL): SearchRequest;
|