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