@nsshunt/stsfhirpg 1.2.1 → 1.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/stsfhirpg.cjs +226 -316
- package/dist/stsfhirpg.cjs.map +1 -1
- package/dist/stsfhirpg.mjs +226 -316
- package/dist/stsfhirpg.mjs.map +1 -1
- package/package.json +1 -1
- package/types/fhir-database/dbsearchindex.d.ts +1 -7
- package/types/fhir-database/dbsearchindex.d.ts.map +1 -1
- package/types/fhir-utils/resourceHelper.d.ts +8 -1
- package/types/fhir-utils/resourceHelper.d.ts.map +1 -1
package/dist/stsfhirpg.mjs
CHANGED
|
@@ -7023,7 +7023,8 @@ class ResourceHelper {
|
|
|
7023
7023
|
this.#definitions = {
|
|
7024
7024
|
resources: {},
|
|
7025
7025
|
types: {},
|
|
7026
|
-
|
|
7026
|
+
searchParametersByUrl: {},
|
|
7027
|
+
searchParametersByResourceType: {}
|
|
7027
7028
|
};
|
|
7028
7029
|
}
|
|
7029
7030
|
__resources.entry.forEach((entry) => {
|
|
@@ -7040,25 +7041,22 @@ class ResourceHelper {
|
|
|
7040
7041
|
}
|
|
7041
7042
|
});
|
|
7042
7043
|
__searchParams.entry.forEach((entry) => {
|
|
7043
|
-
this.#definitions.
|
|
7044
|
+
this.#definitions.searchParametersByUrl[entry.fullUrl] = entry.resource;
|
|
7044
7045
|
});
|
|
7046
|
+
this._LoadSearchParameters();
|
|
7045
7047
|
return this.#definitions;
|
|
7046
7048
|
};
|
|
7047
|
-
|
|
7049
|
+
get definitions() {
|
|
7048
7050
|
if (!this.#definitions) {
|
|
7049
7051
|
this.#LoadDefinitions();
|
|
7050
7052
|
}
|
|
7051
|
-
|
|
7052
|
-
|
|
7053
|
-
|
|
7054
|
-
|
|
7055
|
-
return [];
|
|
7053
|
+
return this.#definitions;
|
|
7054
|
+
}
|
|
7055
|
+
GetType = (typeName) => {
|
|
7056
|
+
return this.definitions.types[typeName];
|
|
7056
7057
|
};
|
|
7057
7058
|
GetResource = (resourceType) => {
|
|
7058
|
-
|
|
7059
|
-
this.#LoadDefinitions();
|
|
7060
|
-
}
|
|
7061
|
-
return this.#definitions.resources[resourceType];
|
|
7059
|
+
return this.definitions.resources[resourceType];
|
|
7062
7060
|
};
|
|
7063
7061
|
GetResourceField = (resourceType, fieldPath) => {
|
|
7064
7062
|
const resource = this.GetResource(resourceType);
|
|
@@ -7071,22 +7069,215 @@ class ResourceHelper {
|
|
|
7071
7069
|
}
|
|
7072
7070
|
};
|
|
7073
7071
|
GetSearchParam = (url) => {
|
|
7074
|
-
|
|
7075
|
-
this.#LoadDefinitions();
|
|
7076
|
-
}
|
|
7077
|
-
return this.#definitions.searchParameters[url];
|
|
7072
|
+
return this.definitions.searchParametersByUrl[url];
|
|
7078
7073
|
};
|
|
7079
7074
|
GetSearchParams = () => {
|
|
7080
|
-
|
|
7081
|
-
this.#LoadDefinitions();
|
|
7082
|
-
}
|
|
7083
|
-
return this.#definitions.searchParameters;
|
|
7075
|
+
return this.definitions.searchParametersByUrl;
|
|
7084
7076
|
};
|
|
7085
7077
|
GetSearchParamsByResource = (resource) => {
|
|
7086
|
-
|
|
7087
|
-
|
|
7078
|
+
return Object.values(this.definitions.searchParametersByUrl).filter((sp) => sp.base.includes(resource)).map((sp) => sp);
|
|
7079
|
+
};
|
|
7080
|
+
// ------------------------------------------------------------------------------------------------------------------
|
|
7081
|
+
// Remove ( ) when either are present
|
|
7082
|
+
#RemoveOuterParentheses = (input) => {
|
|
7083
|
+
return input.replace(/^\(|\)$/g, "");
|
|
7084
|
+
};
|
|
7085
|
+
// Remove ( ) only when both are present
|
|
7086
|
+
#RemoveSurroundingParentheses = (input) => {
|
|
7087
|
+
return input.replace(/^\((.*)\)$/, "$1").trim();
|
|
7088
|
+
};
|
|
7089
|
+
/*
|
|
7090
|
+
|
|
7091
|
+
NamingSystem derived-from reference NamingSystem.relatedArtifact.where(type='derived-from').resource
|
|
7092
|
+
|
|
7093
|
+
NamingSystem predecessor reference NamingSystem.relatedArtifact.where(type='predecessor').resource
|
|
7094
|
+
|
|
7095
|
+
ClinicalUseDefinition product reference ClinicalUseDefinition.subject.where(resolve() is MedicinalProductDefinition)
|
|
7096
|
+
|
|
7097
|
+
OrganizationAffiliation email token OrganizationAffiliation.contact.telecom.where(system='email')
|
|
7098
|
+
OrganizationAffiliation phone token OrganizationAffiliation.contact.telecom.where(system='phone')
|
|
7099
|
+
|
|
7100
|
+
PackagedProductDefinition biological reference PackagedProductDefinition.packaging.containedItem.item.reference
|
|
7101
|
+
PackagedProductDefinition contained-item reference PackagedProductDefinition.packaging.containedItem.item.reference
|
|
7102
|
+
|
|
7103
|
+
Patient deceased token Patient.deceased.exists() and Patient.deceased != false
|
|
7104
|
+
Practitioner deceased token Practitioner.deceased.exists() and Practitioner.deceased != false
|
|
7105
|
+
|
|
7106
|
+
Location contains special Location.extension('http://hl7.org/fhir/StructureDefinition/location-boundary-geojson').value
|
|
7107
|
+
|
|
7108
|
+
QuestionnaireResponse item-subject reference QuestionnaireResponse.item.where(extension('http://hl7.org/fhir/StructureDefinition/questionnaireresponse-isSubject').exists()).answer.valueReference
|
|
7109
|
+
*/
|
|
7110
|
+
ProcessExpressions = (resourceName, SP_EXPRESSION) => {
|
|
7111
|
+
let expressions = [];
|
|
7112
|
+
expressions = SP_EXPRESSION.split("|").map((e) => e.trim());
|
|
7113
|
+
expressions = expressions.map((e) => this.#RemoveSurroundingParentheses(e).trim());
|
|
7114
|
+
if (resourceName !== "") {
|
|
7115
|
+
expressions = expressions.filter((e) => e.split(".")[0].trim().localeCompare(resourceName) === 0);
|
|
7116
|
+
}
|
|
7117
|
+
let original_expressions = [...expressions];
|
|
7118
|
+
expressions = expressions.map((e) => {
|
|
7119
|
+
let capturedTypeOf = void 0;
|
|
7120
|
+
return {
|
|
7121
|
+
path: e.replace(
|
|
7122
|
+
/\.ofType\(([^)]+)\)/g,
|
|
7123
|
+
(_, typeName) => {
|
|
7124
|
+
capturedTypeOf = true;
|
|
7125
|
+
return typeName.charAt(0).toUpperCase() + typeName.slice(1);
|
|
7126
|
+
}
|
|
7127
|
+
),
|
|
7128
|
+
typeOf: capturedTypeOf
|
|
7129
|
+
};
|
|
7130
|
+
});
|
|
7131
|
+
expressions.forEach((expression) => {
|
|
7132
|
+
try {
|
|
7133
|
+
const sp = expression;
|
|
7134
|
+
if (sp.path.indexOf("exists()") >= 0) {
|
|
7135
|
+
const parts = sp.path.split(" ");
|
|
7136
|
+
const i = parts[0].indexOf("exists()");
|
|
7137
|
+
if (i >= 0) {
|
|
7138
|
+
let fieldExistsEx = parts[0].substring(0, i - 1);
|
|
7139
|
+
let op = parts[1];
|
|
7140
|
+
let fieldTestEx = parts[2];
|
|
7141
|
+
let comparator = parts[3];
|
|
7142
|
+
let value = parts[4];
|
|
7143
|
+
const fieldExistsParts = fieldExistsEx.split(".");
|
|
7144
|
+
let fieldExists = fieldExistsParts.slice(1).join(".");
|
|
7145
|
+
const fieldTestParts = fieldTestEx.split(".");
|
|
7146
|
+
let fieldTest = fieldTestParts.slice(1).join(".");
|
|
7147
|
+
sp.exists = {
|
|
7148
|
+
fieldExists: [`${fieldExists}Boolean`, `${fieldExists}DataTime`],
|
|
7149
|
+
// [x]Boolean or [x]DateTime
|
|
7150
|
+
op,
|
|
7151
|
+
fieldTest: [`${fieldTest}Boolean`, `${fieldTest}DataTime`],
|
|
7152
|
+
comparator,
|
|
7153
|
+
value: [value, void 0]
|
|
7154
|
+
};
|
|
7155
|
+
}
|
|
7156
|
+
}
|
|
7157
|
+
} catch (error) {
|
|
7158
|
+
}
|
|
7159
|
+
});
|
|
7160
|
+
let capturedType;
|
|
7161
|
+
expressions = expressions.map((obj) => {
|
|
7162
|
+
capturedType = void 0;
|
|
7163
|
+
const { path, typeOf, exists } = obj;
|
|
7164
|
+
return {
|
|
7165
|
+
path: path.replace(
|
|
7166
|
+
/\.where\(resolve\(\)\s+is\s+([^)]+)\)/,
|
|
7167
|
+
(_, typeName) => {
|
|
7168
|
+
capturedType = typeName;
|
|
7169
|
+
return "";
|
|
7170
|
+
}
|
|
7171
|
+
),
|
|
7172
|
+
typeOf,
|
|
7173
|
+
reference: capturedType,
|
|
7174
|
+
exists
|
|
7175
|
+
};
|
|
7176
|
+
});
|
|
7177
|
+
let capturedWhere = void 0;
|
|
7178
|
+
expressions = expressions.map((obj) => {
|
|
7179
|
+
capturedWhere = void 0;
|
|
7180
|
+
const { path, reference, typeOf, exists } = obj;
|
|
7181
|
+
const retVal = {
|
|
7182
|
+
path: path.replace(/([^.]+)\.where\(([^=]+)='([^']+)'\)/g, (_, field, subfield, value) => {
|
|
7183
|
+
capturedWhere = { field, subfield, value };
|
|
7184
|
+
return field;
|
|
7185
|
+
}),
|
|
7186
|
+
typeOf,
|
|
7187
|
+
reference,
|
|
7188
|
+
exists
|
|
7189
|
+
};
|
|
7190
|
+
if (capturedWhere) {
|
|
7191
|
+
capturedWhere.full = `${capturedWhere.field}[*].${capturedWhere.subfield}=${capturedWhere.value}`;
|
|
7192
|
+
retVal.where = capturedWhere;
|
|
7193
|
+
}
|
|
7194
|
+
return retVal;
|
|
7195
|
+
});
|
|
7196
|
+
return {
|
|
7197
|
+
expressions,
|
|
7198
|
+
original_expressions
|
|
7199
|
+
};
|
|
7200
|
+
};
|
|
7201
|
+
_LoadSearchParameters = () => {
|
|
7202
|
+
for (const [key, val] of Object.entries(this.GetSearchParams())) {
|
|
7203
|
+
const { id, url, code, base, type, expression, component, target } = val;
|
|
7204
|
+
for (let i = 0; i < base.length; i++) {
|
|
7205
|
+
const resourceName = base[i];
|
|
7206
|
+
if (!this.#definitions?.searchParametersByResourceType[resourceName]) {
|
|
7207
|
+
this.#definitions.searchParametersByResourceType[resourceName] = {
|
|
7208
|
+
resourceName,
|
|
7209
|
+
params: []
|
|
7210
|
+
};
|
|
7211
|
+
}
|
|
7212
|
+
const SP_ID = id;
|
|
7213
|
+
const SP_NAME = code;
|
|
7214
|
+
const SP_TYPE = type;
|
|
7215
|
+
const SP_URL = url;
|
|
7216
|
+
const SP_TARGET = target;
|
|
7217
|
+
let SP_EXPRESSION = expression;
|
|
7218
|
+
let expressions = [];
|
|
7219
|
+
let original_expressions = [];
|
|
7220
|
+
if (SP_EXPRESSION) {
|
|
7221
|
+
const retVal = this.ProcessExpressions(resourceName, SP_EXPRESSION);
|
|
7222
|
+
expressions = retVal.expressions;
|
|
7223
|
+
original_expressions = retVal.original_expressions;
|
|
7224
|
+
}
|
|
7225
|
+
const record = {
|
|
7226
|
+
SP_ID,
|
|
7227
|
+
SP_NAME,
|
|
7228
|
+
SP_TYPE,
|
|
7229
|
+
SP_URL,
|
|
7230
|
+
SP_TARGET,
|
|
7231
|
+
expressions,
|
|
7232
|
+
original_expressions,
|
|
7233
|
+
SP_DEFINITION: this.GetSearchParam(SP_URL)
|
|
7234
|
+
};
|
|
7235
|
+
for (let i2 = 0; i2 < record.expressions.length; i2++) {
|
|
7236
|
+
const rf = this.GetResourceField(resourceName, record.expressions[i2].path);
|
|
7237
|
+
if (rf) {
|
|
7238
|
+
expressions[i2].RES_FIELD = rf;
|
|
7239
|
+
}
|
|
7240
|
+
}
|
|
7241
|
+
if (component) {
|
|
7242
|
+
record.component = [...component];
|
|
7243
|
+
record.component.forEach((c) => {
|
|
7244
|
+
const retVal = this.ProcessExpressions("", c.expression);
|
|
7245
|
+
c.expressions = retVal.expressions;
|
|
7246
|
+
c.original_expressions = retVal.original_expressions;
|
|
7247
|
+
const def = this.GetSearchParam(c.definition);
|
|
7248
|
+
if (def && def.type) {
|
|
7249
|
+
c.type = def.type;
|
|
7250
|
+
}
|
|
7251
|
+
});
|
|
7252
|
+
}
|
|
7253
|
+
this.#definitions.searchParametersByResourceType[resourceName].params.push(record);
|
|
7254
|
+
}
|
|
7255
|
+
}
|
|
7256
|
+
};
|
|
7257
|
+
GetSearchParamFromResourceTypeUrl = (resourceType, url) => {
|
|
7258
|
+
const filterByNameAndUrl = this.definitions.searchParametersByResourceType[resourceType].params.filter((rt) => rt.SP_URL.localeCompare(url) === 0);
|
|
7259
|
+
if (filterByNameAndUrl.length > 0) {
|
|
7260
|
+
return filterByNameAndUrl[0];
|
|
7088
7261
|
}
|
|
7089
|
-
|
|
7262
|
+
};
|
|
7263
|
+
/*
|
|
7264
|
+
GetSearchParamFromResourceType = (resourceType: string, name: string): ISearchParamRecord | undefined => {
|
|
7265
|
+
const filterByName = this.definitions.searchParametersByResourceType[resourceType].params.filter(rt => rt.SP_NAME.localeCompare(name) === 0);
|
|
7266
|
+
if (filterByName.length > 0) {
|
|
7267
|
+
return filterByName[0];
|
|
7268
|
+
}
|
|
7269
|
+
}
|
|
7270
|
+
|
|
7271
|
+
GetPathsFromResourceType = (resourceType: string, name: string): string[] => {
|
|
7272
|
+
const filterByName = this.definitions.searchParametersByResourceType[resourceType].params.filter(rt => rt.SP_NAME.localeCompare(name) === 0);
|
|
7273
|
+
if (filterByName.length > 0) {
|
|
7274
|
+
return filterByName[0].expressions.map(e => e.path)
|
|
7275
|
+
}
|
|
7276
|
+
return [ ];
|
|
7277
|
+
}
|
|
7278
|
+
*/
|
|
7279
|
+
GetSearchParamsFromResourceType = (resourceType) => {
|
|
7280
|
+
return this.definitions.searchParametersByResourceType[resourceType].params;
|
|
7090
7281
|
};
|
|
7091
7282
|
}
|
|
7092
7283
|
var ansiStyles = { exports: {} };
|
|
@@ -10564,7 +10755,7 @@ class DBSearchIndexComposite extends DBSearchIndexBase {
|
|
|
10564
10755
|
searchFieldRecord.component.forEach((searchParamComponentRecord) => {
|
|
10565
10756
|
components.push([]);
|
|
10566
10757
|
const url = searchParamComponentRecord.definition;
|
|
10567
|
-
const sp = searchIndex.GetSearchParamFromResourceTypeUrl(resource.resourceType, url);
|
|
10758
|
+
const sp = searchIndex.resourceHelper.GetSearchParamFromResourceTypeUrl(resource.resourceType, url);
|
|
10568
10759
|
if (this.IsDefined(sp)) {
|
|
10569
10760
|
const tir2 = {
|
|
10570
10761
|
PID: v4(),
|
|
@@ -11219,27 +11410,13 @@ class DBSearchIndex {
|
|
|
11219
11410
|
return [];
|
|
11220
11411
|
}
|
|
11221
11412
|
};
|
|
11222
|
-
ResolveFhirChoiceType = (path) => {
|
|
11223
|
-
const match2 = path.match(/^(.+?)\.ofType\((.+?)\)$/);
|
|
11224
|
-
if (!match2) {
|
|
11225
|
-
return path;
|
|
11226
|
-
}
|
|
11227
|
-
const base = match2[1];
|
|
11228
|
-
const fhirType = match2[2];
|
|
11229
|
-
const capitalizedType = fhirType.charAt(0).toUpperCase() + fhirType.slice(1);
|
|
11230
|
-
return `${base}${capitalizedType}`;
|
|
11231
|
-
};
|
|
11232
11413
|
GetSearchIndexData = (resource) => {
|
|
11233
11414
|
try {
|
|
11234
|
-
const
|
|
11235
|
-
if (!this.#searchParams) {
|
|
11236
|
-
this.LoadSearchParameters();
|
|
11237
|
-
}
|
|
11415
|
+
const searchParamRecords = this.resourceHelper.GetSearchParamsFromResourceType(resource.resourceType);
|
|
11238
11416
|
const searchIndexData = [];
|
|
11239
|
-
for (let i = 0; i <
|
|
11240
|
-
const searchRecord =
|
|
11417
|
+
for (let i = 0; i < searchParamRecords.length; i++) {
|
|
11418
|
+
const searchRecord = searchParamRecords[i];
|
|
11241
11419
|
try {
|
|
11242
|
-
const st2 = performance.now();
|
|
11243
11420
|
const retVal = this.UpdateIndex(resource, searchRecord);
|
|
11244
11421
|
if (retVal && retVal.length > 0) {
|
|
11245
11422
|
searchIndexData.push(...retVal);
|
|
@@ -11254,286 +11431,19 @@ class DBSearchIndex {
|
|
|
11254
11431
|
return [];
|
|
11255
11432
|
}
|
|
11256
11433
|
};
|
|
11257
|
-
GetSearchParamFromResourceTypeUrl = (resourceType, url) => {
|
|
11258
|
-
if (!this.#searchParams) {
|
|
11259
|
-
this.LoadSearchParameters();
|
|
11260
|
-
}
|
|
11261
|
-
const filterByNameAndUrl = this.#searchParams[resourceType].params.filter((rt) => rt.SP_URL.localeCompare(url) === 0);
|
|
11262
|
-
if (filterByNameAndUrl.length > 0) {
|
|
11263
|
-
return filterByNameAndUrl[0];
|
|
11264
|
-
}
|
|
11265
|
-
};
|
|
11266
|
-
GetSearchParamFromResourceType = (resourceType, name) => {
|
|
11267
|
-
if (!this.#searchParams) {
|
|
11268
|
-
this.LoadSearchParameters();
|
|
11269
|
-
}
|
|
11270
|
-
const filterByName = this.#searchParams[resourceType].params.filter((rt) => rt.SP_NAME.localeCompare(name) === 0);
|
|
11271
|
-
if (filterByName.length > 0) {
|
|
11272
|
-
return filterByName[0];
|
|
11273
|
-
}
|
|
11274
|
-
};
|
|
11275
|
-
GetPathsFromResourceType = (resourceType, name) => {
|
|
11276
|
-
if (!this.#searchParams) {
|
|
11277
|
-
this.LoadSearchParameters();
|
|
11278
|
-
}
|
|
11279
|
-
const filterByName = this.#searchParams[resourceType].params.filter((rt) => rt.SP_NAME.localeCompare(name) === 0);
|
|
11280
|
-
if (filterByName.length > 0) {
|
|
11281
|
-
return filterByName[0].expressions.map((e) => e.path);
|
|
11282
|
-
}
|
|
11283
|
-
return [];
|
|
11284
|
-
};
|
|
11285
|
-
// Remove ( ) when either are present
|
|
11286
|
-
#RemoveOuterParentheses = (input) => {
|
|
11287
|
-
return input.replace(/^\(|\)$/g, "");
|
|
11288
|
-
};
|
|
11289
|
-
// Remove ( ) only when both are present
|
|
11290
|
-
#RemoveSurroundingParentheses = (input) => {
|
|
11291
|
-
return input.replace(/^\((.*)\)$/, "$1").trim();
|
|
11292
|
-
};
|
|
11293
11434
|
/*
|
|
11294
|
-
|
|
11295
|
-
|
|
11296
|
-
|
|
11297
|
-
NamingSystem predecessor reference NamingSystem.relatedArtifact.where(type='predecessor').resource
|
|
11298
|
-
|
|
11299
|
-
ClinicalUseDefinition product reference ClinicalUseDefinition.subject.where(resolve() is MedicinalProductDefinition)
|
|
11300
|
-
|
|
11301
|
-
OrganizationAffiliation email token OrganizationAffiliation.contact.telecom.where(system='email')
|
|
11302
|
-
OrganizationAffiliation phone token OrganizationAffiliation.contact.telecom.where(system='phone')
|
|
11303
|
-
|
|
11304
|
-
PackagedProductDefinition biological reference PackagedProductDefinition.packaging.containedItem.item.reference
|
|
11305
|
-
PackagedProductDefinition contained-item reference PackagedProductDefinition.packaging.containedItem.item.reference
|
|
11306
|
-
|
|
11307
|
-
Patient deceased token Patient.deceased.exists() and Patient.deceased != false
|
|
11308
|
-
Practitioner deceased token Practitioner.deceased.exists() and Practitioner.deceased != false
|
|
11309
|
-
|
|
11310
|
-
Location contains special Location.extension('http://hl7.org/fhir/StructureDefinition/location-boundary-geojson').value
|
|
11311
|
-
|
|
11312
|
-
QuestionnaireResponse item-subject reference QuestionnaireResponse.item.where(extension('http://hl7.org/fhir/StructureDefinition/questionnaireresponse-isSubject').exists()).answer.valueReference
|
|
11313
|
-
*/
|
|
11314
|
-
ProcessExpressions = (resourceName, SP_EXPRESSION) => {
|
|
11315
|
-
let expressions = [];
|
|
11316
|
-
expressions = SP_EXPRESSION.split("|").map((e) => e.trim());
|
|
11317
|
-
expressions = expressions.map((e) => this.#RemoveSurroundingParentheses(e).trim());
|
|
11318
|
-
if (resourceName !== "") {
|
|
11319
|
-
expressions = expressions.filter((e) => e.split(".")[0].trim().localeCompare(resourceName) === 0);
|
|
11320
|
-
}
|
|
11321
|
-
let original_expressions = [...expressions];
|
|
11322
|
-
expressions = expressions.map((e) => {
|
|
11323
|
-
let capturedTypeOf = void 0;
|
|
11324
|
-
return {
|
|
11325
|
-
path: e.replace(
|
|
11326
|
-
/\.ofType\(([^)]+)\)/g,
|
|
11327
|
-
(_, typeName) => {
|
|
11328
|
-
capturedTypeOf = true;
|
|
11329
|
-
return typeName.charAt(0).toUpperCase() + typeName.slice(1);
|
|
11330
|
-
}
|
|
11331
|
-
),
|
|
11332
|
-
typeOf: capturedTypeOf
|
|
11333
|
-
};
|
|
11334
|
-
});
|
|
11335
|
-
expressions.forEach((expression) => {
|
|
11336
|
-
try {
|
|
11337
|
-
const sp = expression;
|
|
11338
|
-
if (sp.path.indexOf("exists()") >= 0) {
|
|
11339
|
-
const parts = sp.path.split(" ");
|
|
11340
|
-
const i = parts[0].indexOf("exists()");
|
|
11341
|
-
if (i >= 0) {
|
|
11342
|
-
let fieldExistsEx = parts[0].substring(0, i - 1);
|
|
11343
|
-
let op = parts[1];
|
|
11344
|
-
let fieldTestEx = parts[2];
|
|
11345
|
-
let comparator = parts[3];
|
|
11346
|
-
let value = parts[4];
|
|
11347
|
-
const fieldExistsParts = fieldExistsEx.split(".");
|
|
11348
|
-
let fieldExists = fieldExistsParts.slice(1).join(".");
|
|
11349
|
-
const fieldTestParts = fieldTestEx.split(".");
|
|
11350
|
-
let fieldTest = fieldTestParts.slice(1).join(".");
|
|
11351
|
-
sp.exists = {
|
|
11352
|
-
fieldExists: [`${fieldExists}Boolean`, `${fieldExists}DataTime`],
|
|
11353
|
-
// [x]Boolean or [x]DateTime
|
|
11354
|
-
op,
|
|
11355
|
-
fieldTest: [`${fieldTest}Boolean`, `${fieldTest}DataTime`],
|
|
11356
|
-
comparator,
|
|
11357
|
-
value: [value, void 0]
|
|
11358
|
-
};
|
|
11359
|
-
}
|
|
11360
|
-
}
|
|
11361
|
-
} catch (error) {
|
|
11362
|
-
}
|
|
11363
|
-
});
|
|
11364
|
-
let capturedType;
|
|
11365
|
-
expressions = expressions.map((obj) => {
|
|
11366
|
-
capturedType = void 0;
|
|
11367
|
-
const { path, typeOf, exists } = obj;
|
|
11368
|
-
return {
|
|
11369
|
-
path: path.replace(
|
|
11370
|
-
/\.where\(resolve\(\)\s+is\s+([^)]+)\)/,
|
|
11371
|
-
(_, typeName) => {
|
|
11372
|
-
capturedType = typeName;
|
|
11373
|
-
return "";
|
|
11374
|
-
}
|
|
11375
|
-
),
|
|
11376
|
-
typeOf,
|
|
11377
|
-
reference: capturedType,
|
|
11378
|
-
exists
|
|
11379
|
-
};
|
|
11380
|
-
});
|
|
11381
|
-
let capturedWhere = void 0;
|
|
11382
|
-
expressions = expressions.map((obj) => {
|
|
11383
|
-
capturedWhere = void 0;
|
|
11384
|
-
const { path, reference, typeOf, exists } = obj;
|
|
11385
|
-
const retVal = {
|
|
11386
|
-
path: path.replace(/([^.]+)\.where\(([^=]+)='([^']+)'\)/g, (_, field, subfield, value) => {
|
|
11387
|
-
capturedWhere = { field, subfield, value };
|
|
11388
|
-
return field;
|
|
11389
|
-
}),
|
|
11390
|
-
typeOf,
|
|
11391
|
-
reference,
|
|
11392
|
-
exists
|
|
11393
|
-
};
|
|
11394
|
-
if (capturedWhere) {
|
|
11395
|
-
capturedWhere.full = `${capturedWhere.field}[*].${capturedWhere.subfield}=${capturedWhere.value}`;
|
|
11396
|
-
retVal.where = capturedWhere;
|
|
11435
|
+
GetSearchParamFromResourceTypeUrl = (resourceType: string, url: string): ISearchParamRecord | undefined => {
|
|
11436
|
+
return this.resourceHelper.GetSearchParamFromResourceTypeUrl(resourceType, url);
|
|
11397
11437
|
}
|
|
11398
|
-
return retVal;
|
|
11399
|
-
});
|
|
11400
|
-
return {
|
|
11401
|
-
expressions,
|
|
11402
|
-
original_expressions
|
|
11403
|
-
};
|
|
11404
|
-
};
|
|
11405
|
-
LoadSearchParameters = () => {
|
|
11406
|
-
const searchParamData = {};
|
|
11407
|
-
for (const [key, val] of Object.entries(this.resourceHelper.GetSearchParams())) {
|
|
11408
|
-
const { id, url, code, base, type, expression, component, target } = val;
|
|
11409
|
-
for (let i = 0; i < base.length; i++) {
|
|
11410
|
-
const resourceName = base[i];
|
|
11411
|
-
if (!searchParamData[resourceName]) {
|
|
11412
|
-
searchParamData[resourceName] = {
|
|
11413
|
-
resourceName,
|
|
11414
|
-
params: []
|
|
11415
|
-
};
|
|
11416
|
-
}
|
|
11417
|
-
const SP_ID = id;
|
|
11418
|
-
const SP_NAME = code;
|
|
11419
|
-
const SP_TYPE = type;
|
|
11420
|
-
const SP_URL = url;
|
|
11421
|
-
const SP_TARGET = target;
|
|
11422
|
-
let SP_EXPRESSION = expression;
|
|
11423
|
-
let expressions = [];
|
|
11424
|
-
let original_expressions = [];
|
|
11425
|
-
if (SP_EXPRESSION) {
|
|
11426
|
-
const retVal = this.ProcessExpressions(resourceName, SP_EXPRESSION);
|
|
11427
|
-
expressions = retVal.expressions;
|
|
11428
|
-
original_expressions = retVal.original_expressions;
|
|
11429
|
-
}
|
|
11430
|
-
const record = {
|
|
11431
|
-
SP_ID,
|
|
11432
|
-
SP_NAME,
|
|
11433
|
-
SP_TYPE,
|
|
11434
|
-
SP_URL,
|
|
11435
|
-
SP_TARGET,
|
|
11436
|
-
expressions,
|
|
11437
|
-
original_expressions,
|
|
11438
|
-
SP_DEFINITION: this.resourceHelper.GetSearchParam(SP_URL)
|
|
11439
|
-
};
|
|
11440
|
-
for (let i2 = 0; i2 < record.expressions.length; i2++) {
|
|
11441
|
-
const rf = this.resourceHelper.GetResourceField(resourceName, record.expressions[i2].path);
|
|
11442
|
-
if (rf) {
|
|
11443
|
-
expressions[i2].RES_FIELD = rf;
|
|
11444
|
-
}
|
|
11445
|
-
}
|
|
11446
|
-
if (component) {
|
|
11447
|
-
record.component = [...component];
|
|
11448
|
-
record.component.forEach((c) => {
|
|
11449
|
-
const retVal = this.ProcessExpressions("", c.expression);
|
|
11450
|
-
c.expressions = retVal.expressions;
|
|
11451
|
-
c.original_expressions = retVal.original_expressions;
|
|
11452
|
-
const def = this.resourceHelper.GetSearchParam(c.definition);
|
|
11453
|
-
if (def && def.type) {
|
|
11454
|
-
c.type = def.type;
|
|
11455
|
-
}
|
|
11456
|
-
});
|
|
11457
|
-
}
|
|
11458
|
-
searchParamData[resourceName].params.push(record);
|
|
11459
|
-
}
|
|
11460
|
-
}
|
|
11461
|
-
this.#searchParams = searchParamData;
|
|
11462
|
-
return searchParamData;
|
|
11463
|
-
};
|
|
11464
|
-
/*
|
|
11465
|
-
|
|
11466
|
-
|
|
11467
|
-
for (const [resourceName,val] of Object.entries(searchParams)) {
|
|
11468
|
-
|
|
11469
|
-
const patientSearchList: Record<string, any> = (val as any).resourceSpecific;
|
|
11470
|
-
|
|
11471
|
-
for (const [key2,val2] of Object.entries(patientSearchList)) {
|
|
11472
|
-
|
|
11473
|
-
const SP_ID = val2.id;
|
|
11474
|
-
const SP_NAME = key2;
|
|
11475
|
-
const SP_TYPE = val2.type;
|
|
11476
|
-
const SP_URL = val2.url;
|
|
11477
|
-
let SP_EXPRESSION: string = val2.expression;
|
|
11478
|
-
let expressions: any[] = [];
|
|
11479
|
-
let original_expressions: any[] = [];
|
|
11480
|
-
if (SP_EXPRESSION) {
|
|
11481
|
-
const retVal = this.ProcessExpressions(resourceName, SP_EXPRESSION);
|
|
11482
|
-
expressions = retVal.expressions;
|
|
11483
|
-
original_expressions = retVal.original_expressions;
|
|
11484
|
-
}
|
|
11485
11438
|
|
|
11486
|
-
|
|
11487
|
-
|
|
11488
|
-
|
|
11489
|
-
params: [ ]
|
|
11490
|
-
}
|
|
11491
|
-
}
|
|
11492
|
-
|
|
11493
|
-
// GetResourceField
|
|
11494
|
-
|
|
11495
|
-
const record: ISearchParamRecord = {
|
|
11496
|
-
SP_ID,
|
|
11497
|
-
SP_NAME,
|
|
11498
|
-
SP_TYPE,
|
|
11499
|
-
SP_URL,
|
|
11500
|
-
expressions,
|
|
11501
|
-
original_expressions,
|
|
11502
|
-
SP_DEFINITION: this.resourceHelper.GetSearchParam(SP_URL)
|
|
11503
|
-
};
|
|
11504
|
-
|
|
11505
|
-
for (let i=0; i < record.expressions.length; i++) {
|
|
11506
|
-
//console.log(record.expressions[i]);
|
|
11507
|
-
const rf = this.resourceHelper.GetResourceField(resourceName, record.expressions[i].path);
|
|
11508
|
-
if (rf) {
|
|
11509
|
-
expressions[i].RES_FIELD = rf;
|
|
11510
|
-
}
|
|
11511
|
-
}
|
|
11512
|
-
|
|
11513
|
-
if (val2.component) {
|
|
11514
|
-
record.component = [ ...val2.component ];
|
|
11515
|
-
(record.component as any[]).forEach(c => {
|
|
11516
|
-
//c.SP_RAW_PATHS = (c.expression.split('|') as any[]).map(rp => rp.trim());
|
|
11517
|
-
//c.SP_PATHS = (c.SP_RAW_PATHS as any[]).map(rawPath => this.ResolveFhirChoiceType(rawPath));
|
|
11518
|
-
const retVal = this.ProcessExpressions('', c.expression);
|
|
11519
|
-
c.expressions = retVal.expressions;
|
|
11520
|
-
c.original_expressions = retVal.original_expressions;
|
|
11521
|
-
const def = this.resourceHelper.GetSearchParam(c.definition);
|
|
11522
|
-
if (def && def.type) {
|
|
11523
|
-
c.type = def.type
|
|
11524
|
-
}
|
|
11525
|
-
})
|
|
11526
|
-
}
|
|
11527
|
-
|
|
11528
|
-
searchParamData[resourceName].params.push(record);
|
|
11529
|
-
}
|
|
11530
|
-
}
|
|
11531
|
-
|
|
11532
|
-
this.#searchParams = searchParamData;
|
|
11439
|
+
GetSearchParamFromResourceType = (resourceType: string, name: string): ISearchParamRecord | undefined => {
|
|
11440
|
+
return this.resourceHelper.GetSearchParamFromResourceType(resourceType, name);
|
|
11441
|
+
}
|
|
11533
11442
|
|
|
11534
|
-
|
|
11443
|
+
GetPathsFromResourceType = (resourceType: string, name: string): string[] => {
|
|
11444
|
+
return this.resourceHelper.GetPathsFromResourceType(resourceType, name);
|
|
11535
11445
|
}
|
|
11536
|
-
|
|
11446
|
+
*/
|
|
11537
11447
|
}
|
|
11538
11448
|
var lib$1 = { exports: {} };
|
|
11539
11449
|
var defaults = { exports: {} };
|