From 8638d620a9c8f63c310731ee55e65a00320b8641 Mon Sep 17 00:00:00 2001 From: sedinkinya Date: Thu, 10 Oct 2024 18:40:54 -0400 Subject: [PATCH 1/7] Implement %factory LF-3037 --- CHANGELOG.md | 4 + package-lock.json | 4 +- package.json | 2 +- src/factory.js | 762 ++++++++++++++++++++++++++++++++++++++++ src/fhirpath.js | 2 + src/misc.js | 41 +-- src/types.js | 67 +++- test/cases/factory.yaml | 611 ++++++++++++++++++++++++++++++++ test/fhirpath.test.js | 6 +- 9 files changed, 1448 insertions(+), 51 deletions(-) create mode 100644 src/factory.js create mode 100644 test/cases/factory.yaml diff --git a/CHANGELOG.md b/CHANGELOG.md index 84b86b4..46fa839 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,10 @@ This log documents significant changes for each release. This project follows [Semantic Versioning](http://semver.org/). +## [3.16.0] - 2024-10-10 +### Added +- Support for type factory API (%factory). + ## [3.15.1] - 2024-08-06 ### Fixed - Return data type for `evaluate` and `compile` in TypeScript type declarations. diff --git a/package-lock.json b/package-lock.json index b310131..9e74c0d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "fhirpath", - "version": "3.15.1", + "version": "3.16.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "fhirpath", - "version": "3.15.1", + "version": "3.16.0", "hasInstallScript": true, "license": "SEE LICENSE in LICENSE.md", "dependencies": { diff --git a/package.json b/package.json index 2a03a10..a6fb68c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fhirpath", - "version": "3.15.1", + "version": "3.16.0", "description": "A FHIRPath engine", "main": "src/fhirpath.js", "types": "src/fhirpath.d.ts", diff --git a/src/factory.js b/src/factory.js new file mode 100644 index 0000000..2a4c8f2 --- /dev/null +++ b/src/factory.js @@ -0,0 +1,762 @@ +// This file contains a class that implements the Type Factory API. +// See https://hl7.org/fhir/fhirpath.html#factory for details. +const util = require("./utilities"); +const { ResourceNode, TypeInfo, instantRE, timeRE, dateRE, dateTimeRE} = require("./types"); + +class Factory { + // Same as fhirpath.invocationTable, but for %factory methods + static invocationTable = { + Extension: {fn: Factory.Extension, arity: {2: ['String', 'AnyAtRoot']}}, + Identifier: { + fn: Factory.Identifier, + arity: { + 1: ['String'], + 2: ['String', 'String'], + 3: ['String', 'String', 'String'], + 4: ['String', 'String', 'String', 'Any'] + } + }, + HumanName: { + fn: Factory.HumanName, + arity: { + 1: ['String'], + 2: ['String', 'AnyAtRoot'], + 3: ['String', 'AnyAtRoot', 'String'], + 4: ['String', 'AnyAtRoot', 'String', 'String'], + 5: ['String', 'AnyAtRoot', 'String', 'String', 'String'], + 6: ['String', 'AnyAtRoot', 'String', 'String', 'String', 'String'] + }, + }, + ContactPoint: { + fn: Factory.ContactPoint, + arity: { + 1: ['String'], + 2: ['String', 'String'], + 3: ['String', 'String', 'String'] + }, + }, + Address: { + fn: Factory.Address, + arity: { + 1: ['AnyAtRoot'], + 2: ['AnyAtRoot', 'String'], + 3: ['AnyAtRoot', 'String', 'String'], + 4: ['AnyAtRoot', 'String', 'String', 'String'], + 5: ['AnyAtRoot', 'String', 'String', 'String', 'String'], + 6: ['AnyAtRoot', 'String', 'String', 'String', 'String', 'String'], + 7: ['AnyAtRoot', 'String', 'String', 'String', 'String', 'String', 'String'] + }, + }, + Quantity: { + fn: Factory.Quantity, + arity: { + 1: ['String'], + 2: ['String', 'String'], + 3: ['String', 'String', 'String or Number'], + 4: ['String', 'String', 'String or Number', 'String'] + } + }, + Coding: { + fn: Factory.Coding, + arity: { + 1: ['String'], + 2: ['String', 'String'], + 3: ['String', 'String', 'String'], + 4: ['String', 'String', 'String', 'String'] + } + }, + CodeableConcept: { + fn: Factory.CodeableConcept, + arity: { + 1: ['AnyAtRoot'], + 2: ['AnyAtRoot', 'String'] + } + }, + create: { + fn: Factory.create, + arity: { + 1: ['TypeSpecifier'] + } + }, + withExtension: { + fn: Factory.withExtension, + arity: { + 3: ['AnyAtRoot', 'String', 'AnyAtRoot'] + } + }, + withProperty: { + fn: Factory.withProperty, + arity: { + 3: ['AnyAtRoot', 'String', 'AnyAtRoot'] + } + } + }; + + // Create functions to create primitive types and add these functions to the + // invocationTable. + static { + [ + { + type: 'string', + getValue: function (v) { + if (typeof v === 'string' && /^[\s\S]+$/.test(v)) { + return String(v); + } + throw new Error(`"${v}" is not a string.` ); + } + }, + { + type: 'integer', + getValue: (v) => { + const n = Number(v); + if (Number.isInteger(n)) { + return n; + } + throw new Error(`"${v}" is not an integer.` ); + } + }, + { + type: 'unsignedInt', + getValue: (v) => { + const n = Number(v); + if (Number.isInteger(n) && n >= 0) { + return n; + } + throw new Error(`"${v}" is not an unsignedInt.` ); + } + }, + { + type: 'positiveInt', + getValue: (v) => { + const n = Number(v); + if (Number.isInteger(n) && n > 0) { + return n; + } + throw new Error(`"${v}" is not a positiveInt.` ); + } + }, + { + type: 'integer64', + getValue: (v) => { + const n = Number(v); + if (Number.isInteger(n)) { + return n; + } + throw new Error(`"${v}" is not an integer.` ); + } + }, + { + type: 'markdown', + getValue(v) { + if (typeof v === 'string' && /^[\s\S]+$/.test(v)) { + return v; + } + throw new Error(`"${v}" is not a markdown.` ); + } + }, + { + type: 'url', + getValue(v) { + if (typeof v === 'string' && /^\S*$/.test(v)) { + return v; + } + throw new Error(`"${v}" is not a url.` ); + } + }, + { + type: 'uri', + getValue(v) { + if (typeof v === 'string' && /^\S*$/.test(v)) { + return v; + } + throw new Error(`"${v}" is not a uri.` ); + } + }, + { + type: 'instant', + getValue(v) { + if (typeof v === 'string' && instantRE.test(v)) { + return v; + } + throw new Error(`"${v}" is not an instant.` ); + } + }, + { + type: 'time', + getValue(v) { + if (typeof v === 'string' && timeRE.test(v)) { + return v; + } + throw new Error(`"${v}" is not a time.` ); + } + }, + { + type: 'date', + getValue(v) { + if (typeof v === 'string' && dateRE.test(v)) { + return v; + } + throw new Error(`"${v}" is not a date.` ); + } + }, + { + type: 'dateTime', + getValue(v) { + if (typeof v === 'string' && dateTimeRE.test(v)) { + return v; + } + throw new Error(`"${v}" is not a dateTime.` ); + } + }, + { + type: 'base64Binary', + getValue(v) { + if (typeof v === 'string' && + /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/ + .test(v)) { + return v; + } + throw new Error(`"${v}" is not a dateTime.` ); + } + }, + { + type: 'decimal', + getValue(v) { + const n = Number(v); + if (Number.isNaN(n)) { + throw new Error(`"${v}" is not an integer.` ); + } + return n; + } + }, + { + type: 'boolean', + getValue(v) { + if (v === true || v === 'true') { + return true; + } else if (v === false || v === 'false') { + return false; + } else { + throw new Error(`"${v}" is not a boolean.` ); + } + } + }, + { + type: 'code', + getValue(v) { + if (typeof v === 'string' && /^\S+( \S+)*$/.test(v)) { + return v; + } + throw new Error(`"${v}" is not a code.` ); + } + }, + { + type: 'id', + getValue(v) { + if (typeof v === 'string' && /^[A-Za-z0-9\-.]{1,64}$/.test(v)) { + return v; + } + throw new Error(`"${v}" is not an id.` ); + } + }, + { + type: 'oid', + getValue(v) { + if (typeof v === 'string' && /^urn:oid:[0-2](\.(0|[1-9][0-9]*))+$/.test(v)) { + return v; + } + throw new Error(`"${v}" is not an oid.` ); + } + }, + { + type: 'uuid', + getValue(v) { + if (typeof v === 'string' && /^urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/.test(v)) { + return v; + } + throw new Error(`"${v}" is not an uuid.` ); + } + }, + { + type: 'canonical', + getValue(v) { + if (typeof v === 'string' && /^\S*$/.test(v)) { + return v; + } + throw new Error(`"${v}" is not an canonical.` ); + } + } + ].forEach(({type: primitiveType, getValue}) => { + /** + * Creates an instance of the type with the value and possibly one or more + * extensions. + * See primitive type descriptions here: + * https://hl7.org/fhir/datatypes.html#primitive + * @param {Factory[]} self - an array with one element, which is the + * Factory class. + * @param {*} valueColl - a collection that should contain a single value + * of a primitive type. + * @param {Extension[]} [extensions] - an optional array of Extensions. + * @return {ResourceNode} - a new ResourceNode. + */ + Factory[primitiveType] = function (self, valueColl, extensions) { + let data; + if (valueColl.length > 1) { + throw new Error('Unexpected collection ' + JSON.stringify(valueColl) + + ` as a value for %factory.${primitiveType}(value, extensions)`); + } else if (valueColl.length === 0) { + data = null; + } else { + const v = util.valData(valueColl[0]); + if (v == null) { + data = null; + } if (typeof v !== 'object') { + data = getValue(v); + } else { + throw new Error(`"${v}" is not a ${primitiveType}` ); + } + } + + let _data = null; + if (extensions?.length > 0) { + _data = { + extension: extensions.map(e => { + const extensionDataType = TypeInfo.fromValue(e); + if (TypeInfo.isType(extensionDataType.name, 'Extension')) { + return util.valData(e); + } else { + throw new Error(`Expected "FHIR.Extension", got "${extensionDataType}"` ); + } + }) + }; + } + + return ResourceNode.makeResNode(data, null, primitiveType, _data, primitiveType); + }; + + Factory.invocationTable[primitiveType] = { + fn: Factory[primitiveType], + arity: {1: ['AnyAtRoot'], 2: ['AnyAtRoot', 'Any']} + }; + }); + } + + /** + * Creates an extension with the given url and value + * @param {Factory[]} self - an array with one element, which is the Factory + * class. + * @param {string} url - a string value that identifies the extension + * @param {*} value - the value of the extension (any valid type for + * extension.value[x]). + * @return {ResourceNode} + */ + static Extension(self, url, value) { + if (value.length !== 1) { + if (value.length > 1) { + throw new Error("Unexpected collection " + JSON.stringify(value) + + " as a value for %factory.Extension(url, value)"); + } + + if (value.length === 0) { + throw new Error("Unexpected empty collection " + JSON.stringify(value) + + " as a value for %factory.Extension(url, value)"); + } + } else { + return ResourceNode.makeResNode(Factory.createExtensionObject(url, value[0]), + null, 'Extension', null, 'Extension'); + } + } + + /** + * Creates an object to store the extension value. + * @param {string} url - a string value that identifies the extension + * @param {*} value - the value of the extension (any valid type for + * extension.value[x]). + * @return {{[p: string]: *, url}} + */ + static createExtensionObject(url, value) { + const valuePropertyName = 'value' + + TypeInfo.fromValue(value).name.replace(/^\w/, c => c.toUpperCase()); + return { + url, + [valuePropertyName]: util.valData(value) + }; + } + + /** + * Creates an identifier with the given properties. + * @param {Factory[]} self - an array with one element, which is the Factory + * class. + * @param {string} system - a string value that goes in Identifier.system. + * @param {string} value - a string value that goes in Identifier.value. + * @param {string} use - a string value that goes in Identifier.use. + * @param {ResourceNode[]} typeColl - a CodeableConcept that goes in + * Identifier.type. + * @return {ResourceNode} + */ + static Identifier (self, system, value, use, typeColl) { + if (typeColl?.length > 1) { + throw new Error("Unexpected collection " + JSON.stringify(typeColl) + + " as a type for %factory.Identifier{system, value, use, type)"); + } + const data = {}; + if (util.isSome(system)) { + data.system = system; + } + if (util.isSome(value)) { + data.value = value; + } + if (util.isSome(use)) { + data.use = use; + } + if (util.isSome(typeColl)) { + const typeInfo = TypeInfo.fromValue(typeColl[0]); + if (!TypeInfo.isType(typeInfo.name, 'CodeableConcept')) { + throw new Error(`Expected "FHIR.CodeableConcept", got "${typeInfo}"` ); + } + data.type = typeColl[0]; + } + return ResourceNode.makeResNode(data, null, 'Identifier', null, + 'Identifier'); + } + + /** + * Create a human name with the given properties. + * @param {Factory[]} self - an array with one element, which is the Factory + * class. + * @param {string} family - a string value that goes in HumanName.system. + * @param {ResourceNode[]} givenColl - a collection of string values that goes + * in HumanName.given. + * @param {string} prefix - a string value that goes in HumanName.prefix. + * @param {string} suffix - a string value that goes in HumanName.suffix. + * @param {string} text - a string value that goes in HumanName.text. + * @param {string} use - a string value that goes in HumanName.use. + * @return {ResourceNode} + */ + static HumanName(self, family, givenColl, prefix, suffix, text, use) { + const data = {}; + if (util.isSome(family)) { + data.family = family; + } + if (util.isSome(givenColl)) { + data.given = givenColl.map(given => { + const v = util.valData(given); + if (typeof v === "string") { + return v; + } + throw new Error(`Expected string, but got: ${JSON.stringify(v)}`); + }); + } + if (util.isSome(prefix)) { + data.prefix = prefix; + } + if (util.isSome(suffix)) { + data.suffix = suffix; + } + if (util.isSome(text)) { + data.text = text; + } + if (util.isSome(use)) { + data.use = use; + } + return ResourceNode.makeResNode(data, null, 'HumanName', null, + 'HumanName'); + } + + /** + * Creates a ContactPoint. + * @param {Factory[]} self - an array with one element, which is the Factory + * class. + * @param {string} system - a string value that goes in ContactPoint.system. + * @param {string} value - a string value that goes in ContactPoint.value. + * @param {string} use - a string value that goes in ContactPoint.use. + * @return {ResourceNode} + */ + static ContactPoint(self, system, value, use) { + const data = {}; + if (util.isSome(system)) { + data.system = system; + } + if (util.isSome(value)) { + data.value = value; + } + if (util.isSome(use)) { + data.use = use; + } + return ResourceNode.makeResNode(data, null, 'ContactPoint', null, + 'ContactPoint'); + } + + /** + * Creates an Address + * @param {Factory[]} self - an array with one element, which is the Factory + * class. + * @param {ResourceNode[]} lineColl - a collection of string values that goes + * in Address.line. + * @param {string} city - a string value that goes in Address.city. + * @param {string} state - a string value that goes in Address.state. + * @param {string} postalCode - a string value that goes in Address.postalCode. + * @param {string} country - a string value that goes in Address.country. + * @param {string} use - a string value that goes in Address.use. + * @param {string} type - a string value that goes in Address.type. + * @return {ResourceNode} + */ + static Address(self, lineColl, city, state, postalCode, country, use, type) { + const data = {}; + if (util.isSome(lineColl)) { + data.line = lineColl.map(line => { + const v = util.valData(line); + if (typeof v === "string") { + return v; + } + throw new Error(`Expected string, but got: ${JSON.stringify(v)}`); + }); + } + if (util.isSome(city)) { + data.city = city; + } + if (util.isSome(state)) { + data.state = state; + } + if (util.isSome(postalCode)) { + data.postalCode = postalCode; + } + if (util.isSome(country)) { + data.country = country; + } + if (util.isSome(use)) { + data.use = use; + } + if (util.isSome(type)) { + data.type = type; + } + return ResourceNode.makeResNode(data, null, 'Address', null, + 'Address'); + } + + /** + * Creates a Quantity. + * @param {Factory[]} self - an array with one element, which is the Factory + * class. + * @param {string} system - a string value that goes in Quantity.system. + * @param {string} code - a string value that goes in Quantity.code. + * @param {string} value - a string or decimal value that goes in + * Quantity.value. + * @param {string} unit - a string value that goes in Quantity.unit. + * @return {ResourceNode} + */ + static Quantity(self, system, code, value, unit) { + const data = {}; + if (util.isSome(system)) { + data.system = system; + } + if (util.isSome(code)) { + data.code = code; + } + if (util.isSome(value)) { + data.value = Number(value); + } + if (util.isSome(unit)) { + data.unit = unit; + } + return ResourceNode.makeResNode(data, null, 'Quantity', null, + 'Quantity'); + } + + /** + * Creates a Coding. + * @param {Factory[]} self - an array with one element, which is the Factory + * class. + * @param {string} system - a string value that goes in Coding.system. + * @param {string} code - a string value that goes in Coding.code. + * @param {string} display - a string value that goes in Coding.display. + * @param {string} version - a string value that goes in Coding.version. + * @return {ResourceNode} + */ + static Coding(self, system, code, display, version) { + const data = {}; + if (util.isSome(system)) { + data.system = system; + } + if (util.isSome(code)) { + data.code = code; + } + if (util.isSome(display)) { + data.display = display; + } + if (util.isSome(version)) { + data.version = version; + } + return ResourceNode.makeResNode(data, null, 'Coding', null, + 'Coding'); + } + + /** + * Creates a CodeableConcept. + * @param {Factory[]} self - an array with one element, which is the Factory + * class. + * @param {ResourceNode[]} valueColl - a collection of Coding that goes in + * CodeableConcept.coding. + * @param {string} text - a string value that goes in CodeableConcept.text. + * @return {ResourceNode} + */ + static CodeableConcept(self, valueColl, text) { + const data = valueColl?.length > 0 ? + { + coding: valueColl.map(coding => { + if (coding instanceof ResourceNode && + coding.getTypeInfo().name === 'Coding') { + return util.valData(coding); + } + throw new Error("Unexpected value " + JSON.stringify(coding) + + "; expected value of type Coding"); + }) + } + : {}; + + if (util.isSome(text)) { + data.text = text; + } + + return ResourceNode.makeResNode(data, null, 'CodeableConcept', null, + 'CodeableConcept'); + } + + /** + * Create an instance of the named type. + * @param {Factory[]} self - an array with one element that refers to + * the current Factory instance. + * @param {TypeInfo} typeInfo - a value that is the type to create. + * @return {ResourceNode} + */ + static create(self, typeInfo) { + if (typeInfo.namespace === TypeInfo.System) { + throw new Error('%factory.create(type) doesn\'t support system types.'); + } + return ResourceNode.makeResNode(null, null, typeInfo.name, null, + typeInfo.name); + } + + /** + * Add an extension, and return the new type. + * @param {Factory[]} self - an array with one element that refers to + * the current Factory instance. + * @param {ResourceNode[]} instanceColl - a collection that should contain the + * instance to which the extension is to be added. + * @param {string} url - a string value that goes in Extension.url. + * specification this could also be an actual ValueSet, but I don't want to + * complicate this example. + * @param {ResourceNode[]} value - the value of the extension. + * @return {ResourceNode|[]} + */ + static withExtension(self, instanceColl, url, value) { + if (instanceColl.length > 1 ) { + throw new Error("Unexpected collection " + JSON.stringify(instanceColl) + + " as an instance for %factory.withExtension(instance, url, value)"); + } + + if (value.length !== 1) { + if (value.length > 1) { + throw new Error("Unexpected collection " + JSON.stringify(value) + + " as a value for %factory.withExtension(instance, url, value)"); + } + + if (value.length === 0) { + throw new Error("Unexpected empty collection " + JSON.stringify(value) + + " as a value for %factory.withExtension(instance, url, value)"); + } + } + + if (instanceColl.length === 0) { + return []; + } + + const instance = instanceColl[0]; + + if (instance instanceof ResourceNode) { + let data = instance.data; + let _data = instance._data; + if (TypeInfo.isPrimitive(instance.getTypeInfo())) { + _data = { + ...(instance._data || {}), + extension: [ + ...(instance._data?.extension || []), + Factory.createExtensionObject(url, value[0]) + ] + }; + } else { + data = { + ...(instance.data || {}), + extension: [ + ...(instance.data?.extension || []), + Factory.createExtensionObject(url, value[0]) + ] + }; + } + return ResourceNode.makeResNode(data, null, instance.path, _data, + instance.fhirNodeDataType); + } else { + throw new Error('Expected a ResourceNode.'); + } + } + + /** + * Set a property value, and return the new type. + * @param {Factory[]} self - an array with one element that refers to + * the current Factory instance. + * @param {ResourceNode[]} instanceColl - a collection that should contain the + * instance to set the property on. + * @param {string} name - a string value that identifies the property to set. + * @param {string} value - the value of the property + * @return {ResourceNode|*[]} + */ + static withProperty(self, instanceColl, name, value) { + if (instanceColl.length > 1 ) { + throw new Error("Unexpected collection " + JSON.stringify(instanceColl) + + " as an instance for %factory.withProperty(instance, name, value)"); + } + + if (value.length !== 1) { + if (value.length > 1) { + throw new Error("Unexpected collection " + JSON.stringify(value) + + " as a value for %factory.withProperty(instance, name, value)"); + } + + if (value.length === 0) { + throw new Error("Unexpected empty collection " + JSON.stringify(value) + + " as a value for %factory.withProperty(instance, name, value)"); + } + } + + if (instanceColl.length === 0) { + return []; + } + + const instance = instanceColl[0]; + + if (instance instanceof ResourceNode) { + let data = instance.data; + let _data = instance._data; + if (TypeInfo.isPrimitive(instance.getTypeInfo())) { + _data = { + ...(instance._data || {}), + [name]: util.valData(value[0]), + ...(value[0]?._data ? { ['_' + name]: value[0]._data } : {}) + }; + } else { + data = { + ...(instance.data || {}), + [name]: util.valData(value[0]), + ...(value[0]?._data ? { ['_' + name]: value[0]._data } : {}) + }; + } + return ResourceNode.makeResNode(data, null, instance.path, _data, + instance.fhirNodeDataType); + } else { + throw new Error('Expected a ResourceNode.'); + } + } + +} + +module.exports = Factory; diff --git a/src/fhirpath.js b/src/fhirpath.js index 59d239c..4902218 100644 --- a/src/fhirpath.js +++ b/src/fhirpath.js @@ -56,6 +56,7 @@ const { } = types; let makeResNode = ResourceNode.makeResNode; const Terminologies = require('./terminologies'); +const Factory = require('./factory'); // * fn: handler // * arity: is index map with type signature @@ -760,6 +761,7 @@ function applyParsedPath(resource, parsedPath, context, model, options) { if (options.terminologyUrl) { ctx.processedVars.terminologies = new Terminologies(options.terminologyUrl); } + ctx.processedVars.factory = Factory; const res = engine.doEval(ctx, dataRoot, parsedPath.children[0]); return res instanceof Promise ? res.then(r => prepareEvalResult(r, options)) diff --git a/src/misc.js b/src/misc.js index 393d5cd..b983701 100644 --- a/src/misc.js +++ b/src/misc.js @@ -293,6 +293,11 @@ const singletonEvalByType = { return d; } }, + "String or Number": function(d){ + if (typeof d === "string" || typeof d === "number") { + return d; + } + }, "AnySingletonAtRoot": function (d) { return d; } @@ -330,43 +335,9 @@ engine.singleton = function (coll, type) { throw new Error('Not supported type ' + type); }; -/** - * Checks whether a primitve value is present - */ -const primitives = new Set(); -// IE11 probably doesn't support `new Set(iterable)` -[ - "instant", - "time", - "date", - "dateTime", - "base64Binary", - "decimal", - "integer64", - "boolean", - "string", - "code", - "markdown", - "id", - "integer", - "unsignedInt", - "positiveInt", - "uri", - "oid", - "uuid", - "canonical", - "url", - "Integer", - "Decimal", - "String", - "Date", - "DateTime", - "Time" -].forEach(i => primitives.add(i)); - engine.hasValueFn = function(coll) { return coll.length === 1 && util.valData(coll[0]) != null - && primitives.has(TypeInfo.fromValue(coll[0]).name); + && TypeInfo.isPrimitive(TypeInfo.fromValue(coll[0])); }; module.exports = engine; diff --git a/src/types.js b/src/types.js index 6ae0189..e03c597 100644 --- a/src/types.js +++ b/src/types.js @@ -1524,6 +1524,49 @@ TypeInfo.fromValue = function (value) { : TypeInfo.createByValueInSystemNamespace(value); }; +/** + * Set of primitive data type names. + */ +const primitives = new Set(); +// IE11 probably doesn't support `new Set(iterable)` +[ + "instant", + "time", + "date", + "dateTime", + "base64Binary", + "decimal", + "integer64", + "boolean", + "string", + "code", + "markdown", + "id", + "integer", + "unsignedInt", + "positiveInt", + "uri", + "oid", + "uuid", + "canonical", + "url", + "Integer", + "Decimal", + "String", + "Date", + "DateTime", + "Time" +].forEach(i => primitives.add(i)); + +/** + * Checks whether the specified type information contains a primitive data type. + * @param {TypeInfo} typeInfo + * @return {boolean} + */ +TypeInfo.isPrimitive = function(typeInfo) { + return primitives.has(typeInfo.name); +}; + /** * Basic "type()" function implementation * (see http://hl7.org/fhirpath/#reflection) @@ -1575,17 +1618,19 @@ function asFn(coll, typeInfo) { } module.exports = { - FP_Type: FP_Type, - FP_TimeBase: FP_TimeBase, - FP_Date: FP_Date, - FP_DateTime: FP_DateTime, - FP_Instant: FP_Instant, - FP_Time: FP_Time, - FP_Quantity: FP_Quantity, - timeRE: timeRE, - dateTimeRE: dateTimeRE, - ResourceNode: ResourceNode, - TypeInfo: TypeInfo, + FP_Type, + FP_TimeBase, + FP_Date, + FP_DateTime, + FP_Instant, + FP_Time, + FP_Quantity, + timeRE, + dateTimeRE, + dateRE, + instantRE, + ResourceNode, + TypeInfo, typeFn, isFn, asFn diff --git a/test/cases/factory.yaml b/test/cases/factory.yaml new file mode 100644 index 0000000..0890f25 --- /dev/null +++ b/test/cases/factory.yaml @@ -0,0 +1,611 @@ +tests: + # https://hl7.org/fhir/fhirpath.html#factory + - 'group: Type Factory API (%factory)': + - 'group: primitives': + + - desc: '** create a base64Binary without an extension' + model: r4 + expression: >- + %factory.base64Binary('ZHNmZHNm').where($this is base64Binary) + .decode('base64') + result: + - 'dsfdsf' + + - desc: '** create a base64Binary with an extension' + model: r4 + expression: >- + %factory.base64Binary('ZHNmZHNm', %factory.Extension('someExt', + 'someString')).extension('someExt').value = 'someString' + result: + - true + + - desc: '** creating a base64Binary may throw an exception' + model: r4 + expression: >- + %factory.base64Binary('dsfdsf') + error: true + + - desc: '** create a boolean without an extension' + model: r4 + expression: >- + %factory.boolean(true).where($this is boolean) + result: + - true + + - desc: '** create a boolean with an extension' + model: r4 + expression: >- + %factory.boolean('false', %factory.Extension('someExt', + 'someString')).where($this is boolean and $this = false) + .extension('someExt').value = 'someString' + result: + - true + + - desc: '** creating a boolean may throw an exception' + model: r4 + expression: >- + %factory.boolean('dsfdsf') + error: true + + - desc: '** create a canonical without an extension' + model: r4 + expression: >- + %factory.canonical('someUrl').where($this is canonical) + result: + - 'someUrl' + + - desc: '** create a canonical with an extension' + model: r4 + expression: >- + %factory.canonical('someUrl', %factory.Extension('someExt', + 'someString')).where($this is canonical and $this = 'someUrl') + .extension('someExt').value = 'someString' + result: + - true + + - desc: '** creating a canonical may throw an exception' + model: r4 + expression: >- + %factory.canonical('some Url') + error: true + + - desc: '** create a code without an extension' + model: r4 + expression: >- + %factory.code('some code').where($this is code) + result: + - 'some code' + + - desc: '** create a code with an extension' + model: r4 + expression: >- + %factory.code('some code', %factory.Extension('someExt', + 'someString')).where($this is code and $this = 'some code') + .extension('someExt').value = 'someString' + result: + - true + + - desc: '** creating a code may throw an exception' + model: r4 + expression: >- + %factory.code('some code ') + error: true + + - desc: '** create a date without an extension' + model: r4 + expression: >- + %factory.date('2024-01-01').where($this is date) = @2024-01-01 + result: + - true + + - desc: '** create a date with an extension' + model: r4 + expression: >- + %factory.date('2024-01-01', %factory.Extension('someExt', + 'someString')).where($this is date and $this = @2024-01-01) + .extension('someExt').value = 'someString' + result: + - true + + - desc: '** creating a date may throw an exception' + model: r4 + expression: >- + %factory.date('something') + error: true + + - desc: '** create a dateTime without an extension' + model: r4 + expression: >- + %factory.dateTime('2024-01-01T01:01:01').where($this is dateTime) = + @2024-01-01T01:01:01 + result: + - true + + - desc: '** create a dateTime with an extension' + model: r4 + expression: >- + %factory.dateTime('2024-01-01T01:01:01', %factory.Extension('someExt', + 'someString')).where($this is dateTime and $this = @2024-01-01T01:01:01) + .extension('someExt').value = 'someString' + result: + - true + + - desc: '** creating a dateTime may throw an exception' + model: r4 + expression: >- + %factory.dateTime('something') + error: true + + - desc: '** create a decimal without an extension' + model: r4 + expression: >- + %factory.decimal(1.1).where($this is decimal) + result: + - 1.1 + + - desc: '** create a decimal with an extension' + model: r4 + expression: >- + %factory.decimal('1.1', %factory.Extension('someExt', 'someString')) + .where($this is decimal and $this = 1.1).extension('someExt').value + = 'someString' + result: + - true + + - desc: '** creating a decimal may throw an exception' + model: r4 + expression: >- + %factory.decimal('sdfds') + error: true + + - desc: '** create an id without an extension' + model: r4 + expression: >- + %factory.id('someId-123').where($this is id) = 'someId-123' + result: + - true + + - desc: '** create an id with an extension' + model: r4 + expression: >- + %factory.id('someId-123', %factory.Extension('someExt', + 'someString')).where($this is id and $this = 'someId-123') + .extension('someExt').value = 'someString' + result: + - true + + - desc: '** creating an id may throw an exception' + model: r4 + expression: >- + %factory.id('someId 123') + error: true + + - desc: '** create an instant without an extension' + model: r4 + expression: >- + %factory.instant('2024-01-01T01:01:01+01:00').where($this is instant) = + @2024-01-01T01:01:01+01:00 + result: + - true + + - desc: '** create an instant with an extension' + model: r4 + expression: >- + %factory.instant('2024-01-01T01:01:01+01:00', %factory.Extension('someExt', + 'someString')).where($this is instant and $this = @2024-01-01T01:01:01+01:00) + .extension('someExt').value = 'someString' + result: + - true + + - desc: '** creating an instant may throw an exception' + model: r4 + expression: >- + %factory.instant('something') + error: true + + - desc: '** create an integer without an extension' + model: r4 + expression: >- + %factory.integer(134).where($this is integer) + result: + - 134 + + - desc: '** create an integer with an extension' + model: r4 + expression: >- + %factory.integer(-134, %factory.Extension('someExt', 'someString')) + .where($this is integer and $this = -134) + .extension('someExt').value = 'someString' + result: + - true + + - desc: '** creating an integer may throw an exception' + model: r4 + expression: >- + %factory.integer(1.1) + error: true + + - desc: '** create an integer64 without an extension' + model: r5 + expression: >- + %factory.integer64(134).where($this is integer64) + result: + - 134 + + - desc: '** create an integer64 with an extension' + model: r5 + expression: >- + %factory.integer64(134, %factory.Extension('someExt', 'someString')) + .extension('someExt').value = 'someString' + result: + - true + + - desc: '** creating an integer64 may throw an exception' + model: r5 + expression: >- + %factory.integer64(1.1) + error: true + + - desc: '** create a markdown without an extension' + model: r4 + expression: >- + %factory.markdown(' md md ').where($this is markdown) + result: + - ' md md ' + + - desc: '** create a markdown with an extension' + model: r4 + expression: >- + %factory.markdown(' md md ', %factory.Extension('someExt', 'someString')) + .where($this is markdown and $this = ' md md ') + .extension('someExt').value = 'someString' + result: + - true + + - desc: '** creating an markdown may throw an exception' + model: r4 + expression: >- + %factory.markdown('') + error: true + + - desc: '** create an oid without an extension' + model: r4 + expression: >- + %factory.oid('urn:oid:1.2.3').where($this is oid) + result: + - 'urn:oid:1.2.3' + + - desc: '** create an oid with an extension' + model: r4 + expression: >- + %factory.oid('urn:oid:1.2.3', %factory.Extension('someExt', 'someString')) + .where($this is oid and $this = 'urn:oid:1.2.3') + .extension('someExt').value = 'someString' + result: + - true + + - desc: '** creating an oid may throw an exception' + model: r4 + expression: >- + %factory.oid('urn:oid:3.2.3') + error: true + + - desc: '** create a string without an extension' + model: r4 + expression: >- + %factory.string('some string').where($this is string) + result: + - 'some string' + + - desc: '** create a string with an extension' + model: r4 + expression: >- + %factory.string('some string', %factory.Extension('someExt', 'someString')) + .where($this is string and $this = 'some string') + .extension('someExt').value = 'someString' + result: + - true + + - desc: '** creating a string may throw an exception' + model: r4 + expression: >- + %factory.string('') + error: true + + - desc: '** create a positiveInt without an extension' + model: r4 + expression: >- + %factory.positiveInt(134).where($this is positiveInt) + result: + - 134 + + - desc: '** create a positiveInt with an extension' + model: r4 + expression: >- + %factory.positiveInt(134, %factory.Extension('someExt', 'someString')) + .where($this is positiveInt and $this = 134) + .extension('someExt').value = 'someString' + result: + - true + + - desc: '** creating a positiveInt may throw an exception' + model: r4 + expression: >- + %factory.positiveInt(0) + error: true + + - desc: '** create a time without an extension' + model: r4 + expression: >- + %factory.time('10:00').where($this is time) = @T10:00 + result: + - true + + - desc: '** create a time with an extension' + model: r4 + expression: >- + %factory.time('10:00', %factory.Extension('someExt', 'someString')) + .where($this is time and $this = @T10:00) + .extension('someExt').value = 'someString' + result: + - true + + - desc: '** creating a time may throw an exception' + model: r4 + expression: >- + %factory.time('something') + error: true + + - desc: '** create a unsignedInt without an extension' + model: r4 + expression: >- + %factory.unsignedInt(134).where($this is unsignedInt) + result: + - 134 + + - desc: '** create a unsignedInt with an extension' + model: r4 + expression: >- + %factory.unsignedInt(0, %factory.Extension('someExt', 'someString')) + .where($this is unsignedInt and $this = 0) + .extension('someExt').value = 'someString' + result: + - true + + - desc: '** creating a unsignedInt may throw an exception' + model: r4 + expression: >- + %factory.unsignedInt(-1) + error: true + + - desc: '** create a uri without an extension' + model: r4 + expression: >- + %factory.uri('/something').where($this is uri) + result: + - '/something' + + - desc: '** create a uri with an extension' + model: r4 + expression: >- + %factory.uri('', %factory.Extension('someExt', 'someString')) + .where($this is uri and $this = '') + .extension('someExt').value = 'someString' + result: + - true + + - desc: '** creating a uri may throw an exception' + model: r4 + expression: >- + %factory.uri(123) + error: true + + - desc: '** create a url without an extension' + model: r4 + expression: >- + %factory.url('/something').where($this is url) + result: + - '/something' + + - desc: '** create a uri with an extension' + model: r4 + expression: >- + %factory.url('', %factory.Extension('someExt', 'someString')) + .where($this is url and $this = '') + .extension('someExt').value = 'someString' + result: + - true + + - desc: '** creating a url may throw an exception' + model: r4 + expression: >- + %factory.url(123) + error: true + + - desc: '** create a uuid without an extension' + model: r4 + expression: >- + %factory.uuid('urn:uuid:c757873d-ec9a-4326-a141-556f43239520') + .where($this is uuid) + result: + - 'urn:uuid:c757873d-ec9a-4326-a141-556f43239520' + + - desc: '** create a uuid with an extension' + model: r4 + expression: >- + %factory.uuid('urn:uuid:c757873d-ec9a-4326-a141-556f43239520', + %factory.Extension('someExt', 'someString')).where($this is uuid and + $this = 'urn:uuid:c757873d-ec9a-4326-a141-556f43239520') + .extension('someExt').value = 'someString' + result: + - true + + - desc: '** creating a uuid may throw an exception' + model: r4 + expression: >- + %factory.uuid('something') + error: true + + - 'group: Extension': + + - desc: '** create an extension of the string data type' + model: r4 + expression: >- + %factory.Extension('someExt', 'someString').where($this is Extension + and $this.valueString is string).value = 'someString' + result: + - true + + - desc: '** create an extension of the integer data type' + model: r4 + expression: >- + %factory.Extension('someExt', 11).where($this is Extension + and $this.valueInteger is integer).value = 11 + result: + - true + + - desc: '** create an extension of the decimal data type' + model: r4 + expression: >- + %factory.Extension('someExt', 11.1).where($this is Extension + and $this.valueDecimal is decimal).value = 11.1 + result: + - true + + - 'group: Identifier': + + - desc: '** created an Identifier' + model: r4 + expression: >- + %factory.Identifier('someSystem', 'someValue', 'someUse', %factory + .create(CodeableConcept)).where($this.system = 'someSystem' and + $this.value = 'someValue' and $this.use = 'someUse' and $this.type + is CodeableConcept) is Identifier + result: + - true + + - desc: '** created an Identifier without system' + model: r4 + expression: >- + %factory.Identifier({}, 'someValue', 'someUse', %factory + .create(CodeableConcept)).where($this.system.empty() and + $this.value = 'someValue' and $this.use = 'someUse' and $this.type + is CodeableConcept) is Identifier + result: + - true + + - 'group: HumanName': + + - desc: '** created an HumanName' + model: r4 + expression: >- + %factory.HumanName('Smith', 'Julia' | 'A', {}, {}, 'Julia Smith').where( + family = 'Smith' and given = ('Julia' | 'A') and prefix.empty() and + suffix.empty() and text = 'Julia Smith' and use.empty() + ) is HumanName + result: + - true + + - 'group: ContactPoint': + + - desc: '** created an ContactPoint' + model: r4 + expression: >- + %factory.ContactPoint('email', 'coyote@acme.com', 'work').where( + system = 'email' and value = 'coyote@acme.com' and use = 'work' + ) is ContactPoint + result: + - true + + - 'group: Address': + + - desc: '** created an Address' + model: r4 + expression: >- + %factory.Address('5 Nowhere Road' | 'second line', 'SomeCity', 'EW', + '0000', {}, 'home', 'physical').where(line = ('5 Nowhere Road' | + 'second line') and city = 'SomeCity' and state = 'EW' and postalCode + = '0000' and country.empty() and use = 'home' and type = 'physical') + is Address + result: + - true + + - 'group: Quantity': + + - desc: '** created a Quantity using a string value' + model: r4 + expression: >- + %factory.Quantity('http://unitsofmeasure.org', 'mg/dL', '5.03', + 'mg/dL').where(system = 'http://unitsofmeasure.org' and code = + 'mg/dL') = 5.03 'mg/dL' + result: + - true + + - desc: '** created a Quantity using a number value' + model: r4 + expression: >- + %factory.Quantity('http://unitsofmeasure.org', 'mg/dL', 5.03, + 'mg/dL') = 5.03 'mg/dL' + result: + - true + + - desc: '** created a Quantity without system' + model: r4 + expression: >- + %factory.Quantity({}, 'mg/dL', 5.03, 'mg/dL').where(system.empty()) + is Quantity + result: + - true + + - 'group: Coding': + + - desc: '** created a Coding' + model: r4 + expression: >- + %factory.Coding('http://loinc.org', '1234-5', 'An example test', + '1.02').where(system = 'http://loinc.org' and code = '1234-5' and + display = 'An example test' and version = '1.02') is Coding + result: + - true + + - 'group: CodeableConcept': + + - desc: '** created a CodeableConcept' + model: r4 + expression: >- + %factory.CodeableConcept(%factory.Coding('system1', '1') | %factory + .Coding('system2', '2'), 'Example Test').where(coding.code = '1' | + '2' and text = 'Example Test') is CodeableConcept + result: + - true + + - 'group: create': + + - desc: '** the created instance has the correct data type' + model: r4 + expression: >- + %factory.create(integer) is FHIR.integer + result: + - true + + - 'group: withExtension': + + - desc: '** adding an extension to an existing list of extensions' + model: r4 + expression: >- + %factory.withExtension(%factory.integer(134, %factory.Extension( + 'someExt1', 'someString')), 'someExt2', 1).extension.value = + 'someString' | 1 + result: + - true + + - 'group: withProperty': + + - desc: '** adding a property to an instance' + model: r4 + expression: >- + %factory.withProperty(%factory.integer(134, %factory.Extension( + 'someExt1', 'someString')), 'id', 'someId').where(extension.value = + 'someString').id = 'someId' + result: + - true diff --git a/test/fhirpath.test.js b/test/fhirpath.test.js index 9c59929..6820b7b 100644 --- a/test/fhirpath.test.js +++ b/test/fhirpath.test.js @@ -10,8 +10,10 @@ const FP_DateTime = require('../src/types').FP_DateTime; const items = fs.readdirSync(__dirname + '/cases/'); // Set "focus" to true to turn on focus option -const focus = false; -const focusFile = /.*.yaml/; +// const focus = false; +// const focusFile = /.*.yaml/; +const focus = true; +const focusFile = /factory\.yaml/; const endWith = (s, postfix) => { From 959852426b01593f75074f9809cf990c1f961194 Mon Sep 17 00:00:00 2001 From: sedinkinya Date: Fri, 11 Oct 2024 10:09:07 -0400 Subject: [PATCH 2/7] Reverted unnecessary changes LF-3037 --- test/fhirpath.test.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/test/fhirpath.test.js b/test/fhirpath.test.js index 6820b7b..9c59929 100644 --- a/test/fhirpath.test.js +++ b/test/fhirpath.test.js @@ -10,10 +10,8 @@ const FP_DateTime = require('../src/types').FP_DateTime; const items = fs.readdirSync(__dirname + '/cases/'); // Set "focus" to true to turn on focus option -// const focus = false; -// const focusFile = /.*.yaml/; -const focus = true; -const focusFile = /factory\.yaml/; +const focus = false; +const focusFile = /.*.yaml/; const endWith = (s, postfix) => { From 7273d5444d4f60ac8edeee9d030041300d42e79c Mon Sep 17 00:00:00 2001 From: sedinkinya Date: Tue, 5 Nov 2024 18:42:11 -0500 Subject: [PATCH 3/7] Changes as per review LF-3037 --- src/factory.js | 4 +-- src/misc.js | 2 +- test/cases/factory.yaml | 73 +++++++++++++++++++++++++++++++++++++++-- 3 files changed, 73 insertions(+), 6 deletions(-) diff --git a/src/factory.js b/src/factory.js index 2a4c8f2..0624306 100644 --- a/src/factory.js +++ b/src/factory.js @@ -52,8 +52,8 @@ class Factory { arity: { 1: ['String'], 2: ['String', 'String'], - 3: ['String', 'String', 'String or Number'], - 4: ['String', 'String', 'String or Number', 'String'] + 3: ['String', 'String', 'StringOrNumber'], + 4: ['String', 'String', 'StringOrNumber', 'String'] } }, Coding: { diff --git a/src/misc.js b/src/misc.js index b983701..5a1c0b0 100644 --- a/src/misc.js +++ b/src/misc.js @@ -293,7 +293,7 @@ const singletonEvalByType = { return d; } }, - "String or Number": function(d){ + "StringOrNumber": function(d){ if (typeof d === "string" || typeof d === "number") { return d; } diff --git a/test/cases/factory.yaml b/test/cases/factory.yaml index 0890f25..3d85462 100644 --- a/test/cases/factory.yaml +++ b/test/cases/factory.yaml @@ -407,7 +407,7 @@ tests: result: - '/something' - - desc: '** create a uri with an extension' + - desc: '** create a url with an extension' model: r4 expression: >- %factory.url('', %factory.Extension('someExt', 'someString')) @@ -494,9 +494,18 @@ tests: result: - true + - desc: '** creating an Identifier may throw an exception' + model: r4 + expression: >- + %factory.Identifier(1, 'someValue', 'someUse', %factory + .create(CodeableConcept)).where($this.system.empty() and + $this.value = 'someValue' and $this.use = 'someUse' and $this.type + is CodeableConcept) is Identifier + error: true + - 'group: HumanName': - - desc: '** created an HumanName' + - desc: '** created a HumanName' model: r4 expression: >- %factory.HumanName('Smith', 'Julia' | 'A', {}, {}, 'Julia Smith').where( @@ -506,9 +515,18 @@ tests: result: - true + - desc: '** creating a HumanName may throw an exception' + model: r4 + expression: >- + %factory.HumanName(1, 'Julia' | 'A', {}, {}, 'Julia Smith').where( + family = 'Smith' and given = ('Julia' | 'A') and prefix.empty() and + suffix.empty() and text = 'Julia Smith' and use.empty() + ) is HumanName + error: true + - 'group: ContactPoint': - - desc: '** created an ContactPoint' + - desc: '** created a ContactPoint' model: r4 expression: >- %factory.ContactPoint('email', 'coyote@acme.com', 'work').where( @@ -517,6 +535,14 @@ tests: result: - true + - desc: '** creating a ContactPoint may throw an exception' + model: r4 + expression: >- + %factory.ContactPoint(1, 'coyote@acme.com', 'work').where( + system = 'email' and value = 'coyote@acme.com' and use = 'work' + ) is ContactPoint + error: true + - 'group: Address': - desc: '** created an Address' @@ -530,6 +556,16 @@ tests: result: - true + - desc: '** creating an Address may throw an exception' + model: r4 + expression: >- + %factory.Address(1 | 'second line', 'SomeCity', 'EW', + '0000', {}, 'home', 'physical').where(line = ('5 Nowhere Road' | + 'second line') and city = 'SomeCity' and state = 'EW' and postalCode + = '0000' and country.empty() and use = 'home' and type = 'physical') + is Address + error: true + - 'group: Quantity': - desc: '** created a Quantity using a string value' @@ -557,6 +593,13 @@ tests: result: - true + - desc: '** creating a Quantity may throw an exception' + model: r4 + expression: >- + %factory.Quantity(1, 'mg/dL', 5.03, 'mg/dL').where(system.empty()) + is Quantity + error: true + - 'group: Coding': - desc: '** created a Coding' @@ -568,6 +611,14 @@ tests: result: - true + - desc: '** creating a Coding may throw an exception' + model: r4 + expression: >- + %factory.Coding(1, '1234-5', 'An example test', + '1.02').where(system = 'http://loinc.org' and code = '1234-5' and + display = 'An example test' and version = '1.02') is Coding + error: true + - 'group: CodeableConcept': - desc: '** created a CodeableConcept' @@ -579,6 +630,14 @@ tests: result: - true + - desc: '** creating a CodeableConcept may throw an exception' + model: r4 + expression: >- + %factory.CodeableConcept(1 | %factory + .Coding('system2', '2'), 'Example Test').where(coding.code = '1' | + '2' and text = 'Example Test') is CodeableConcept + error: true + - 'group: create': - desc: '** the created instance has the correct data type' @@ -599,6 +658,14 @@ tests: result: - true + - desc: '** create an instance with no data and add an extension later' + model: r4 + expression: >- + %factory.withExtension(%factory.integer({}), 'someExt', 1).extension( + 'someExt').value = 1 + result: + - true + - 'group: withProperty': - desc: '** adding a property to an instance' From c4db76806733ca9a9f099cc9375ecee9a70c79fe Mon Sep 17 00:00:00 2001 From: sedinkinya Date: Wed, 6 Nov 2024 17:05:56 -0500 Subject: [PATCH 4/7] Changes as per review LF-3037 --- test/cases/factory.yaml | 32 +++++++++----------------------- 1 file changed, 9 insertions(+), 23 deletions(-) diff --git a/test/cases/factory.yaml b/test/cases/factory.yaml index 3d85462..ecbd7af 100644 --- a/test/cases/factory.yaml +++ b/test/cases/factory.yaml @@ -498,9 +498,7 @@ tests: model: r4 expression: >- %factory.Identifier(1, 'someValue', 'someUse', %factory - .create(CodeableConcept)).where($this.system.empty() and - $this.value = 'someValue' and $this.use = 'someUse' and $this.type - is CodeableConcept) is Identifier + .create(CodeableConcept)) error: true - 'group: HumanName': @@ -518,10 +516,7 @@ tests: - desc: '** creating a HumanName may throw an exception' model: r4 expression: >- - %factory.HumanName(1, 'Julia' | 'A', {}, {}, 'Julia Smith').where( - family = 'Smith' and given = ('Julia' | 'A') and prefix.empty() and - suffix.empty() and text = 'Julia Smith' and use.empty() - ) is HumanName + %factory.HumanName(1, 'Julia' | 'A', {}, {}, 'Julia Smith') error: true - 'group: ContactPoint': @@ -538,9 +533,7 @@ tests: - desc: '** creating a ContactPoint may throw an exception' model: r4 expression: >- - %factory.ContactPoint(1, 'coyote@acme.com', 'work').where( - system = 'email' and value = 'coyote@acme.com' and use = 'work' - ) is ContactPoint + %factory.ContactPoint(1, 'coyote@acme.com', 'work') error: true - 'group: Address': @@ -559,11 +552,8 @@ tests: - desc: '** creating an Address may throw an exception' model: r4 expression: >- - %factory.Address(1 | 'second line', 'SomeCity', 'EW', - '0000', {}, 'home', 'physical').where(line = ('5 Nowhere Road' | - 'second line') and city = 'SomeCity' and state = 'EW' and postalCode - = '0000' and country.empty() and use = 'home' and type = 'physical') - is Address + %factory.Address(1 | 'second line', 'SomeCity', 'EW', '0000', {}, + 'home', 'physical') error: true - 'group: Quantity': @@ -596,8 +586,7 @@ tests: - desc: '** creating a Quantity may throw an exception' model: r4 expression: >- - %factory.Quantity(1, 'mg/dL', 5.03, 'mg/dL').where(system.empty()) - is Quantity + %factory.Quantity(1, 'mg/dL', 5.03, 'mg/dL') error: true - 'group: Coding': @@ -614,9 +603,7 @@ tests: - desc: '** creating a Coding may throw an exception' model: r4 expression: >- - %factory.Coding(1, '1234-5', 'An example test', - '1.02').where(system = 'http://loinc.org' and code = '1234-5' and - display = 'An example test' and version = '1.02') is Coding + %factory.Coding(1, '1234-5', 'An example test', '1.02') error: true - 'group: CodeableConcept': @@ -633,9 +620,8 @@ tests: - desc: '** creating a CodeableConcept may throw an exception' model: r4 expression: >- - %factory.CodeableConcept(1 | %factory - .Coding('system2', '2'), 'Example Test').where(coding.code = '1' | - '2' and text = 'Example Test') is CodeableConcept + %factory.CodeableConcept(1 | %factory.Coding('system2', '2'), + 'Example Test') error: true - 'group: create': From 12aeb030f220a2dee44f7c539509845139a1ca2b Mon Sep 17 00:00:00 2001 From: sedinkinya Date: Tue, 12 Nov 2024 10:44:55 -0500 Subject: [PATCH 5/7] Updated NodeJS version LF-3173 --- bashrc.fhirpath | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bashrc.fhirpath b/bashrc.fhirpath index 3a11dce..54105b3 100644 --- a/bashrc.fhirpath +++ b/bashrc.fhirpath @@ -1,7 +1,7 @@ # The following is the standard bashrc file for the # development team for this repository. -NODE=node-v18.14.2-linux-x64 +NODE=node-v22.11.0-linux-x64 # # Set path PATH=~/${NODE}/bin:/bin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/etc From 5c6b0afb08b7c9856f62fe0e26d7f54d43fd8d6e Mon Sep 17 00:00:00 2001 From: sedinkinya Date: Thu, 21 Nov 2024 15:46:22 -0500 Subject: [PATCH 6/7] Changes as per review LF-3037 --- src/factory.js | 4 ++-- test/cases/factory.yaml | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/factory.js b/src/factory.js index 0624306..517ab3a 100644 --- a/src/factory.js +++ b/src/factory.js @@ -216,7 +216,7 @@ class Factory { .test(v)) { return v; } - throw new Error(`"${v}" is not a dateTime.` ); + throw new Error(`"${v}" is not a base64Binary.` ); } }, { @@ -224,7 +224,7 @@ class Factory { getValue(v) { const n = Number(v); if (Number.isNaN(n)) { - throw new Error(`"${v}" is not an integer.` ); + throw new Error(`"${v}" is not an decimal.` ); } return n; } diff --git a/test/cases/factory.yaml b/test/cases/factory.yaml index ecbd7af..66cdb6a 100644 --- a/test/cases/factory.yaml +++ b/test/cases/factory.yaml @@ -472,6 +472,14 @@ tests: result: - true + - desc: '** create an extension of the code data type' + model: r4 + expression: >- + %factory.Extension('someExt', %factory.code('some code')).where($this is Extension + and $this.valueCode is code).value = 'some code' + result: + - true + - 'group: Identifier': - desc: '** created an Identifier' From a46a6bc16449d5475ca6265dc74a2af99b173c61 Mon Sep 17 00:00:00 2001 From: sedinkinya Date: Fri, 10 Jan 2025 17:48:56 -0500 Subject: [PATCH 7/7] npm audit fix LF-3037 --- demo/package-lock.json | 1098 ++++++++++++++++++++-------------------- package-lock.json | 13 +- 2 files changed, 553 insertions(+), 558 deletions(-) diff --git a/demo/package-lock.json b/demo/package-lock.json index 2ae4eea..4406a6d 100644 --- a/demo/package-lock.json +++ b/demo/package-lock.json @@ -636,10 +636,11 @@ } }, "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "dev": true, + "license": "MIT", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.5", @@ -649,7 +650,7 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.11.0", + "qs": "6.13.0", "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" @@ -664,6 +665,7 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -673,50 +675,11 @@ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, - "node_modules/body-parser/node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "node_modules/body-parser/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, "node_modules/bonjour-service": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", @@ -804,17 +767,29 @@ "node": ">= 0.8" } }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "node_modules/call-bind-apply-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", "dev": true, + "license": "MIT", "dependencies": { - "es-define-property": "^1.0.0", "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", + "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -991,15 +966,17 @@ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -1017,10 +994,11 @@ "dev": true }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -1117,23 +1095,6 @@ "node": ">= 10" } }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/define-lazy-prop": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", @@ -1157,6 +1118,7 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" @@ -1266,11 +1228,27 @@ "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", "dev": true }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true, + "license": "MIT" }, "node_modules/electron-to-chromium": { "version": "1.5.13", @@ -1288,10 +1266,11 @@ } }, "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -1331,13 +1310,11 @@ } }, "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.4" - }, + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -1347,6 +1324,7 @@ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -1357,6 +1335,19 @@ "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", "dev": true }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -1432,6 +1423,7 @@ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -1484,37 +1476,38 @@ } }, "node_modules/express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", "dev": true, + "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.2", + "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.6.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.2.0", + "finalhandler": "1.3.1", "fresh": "0.5.2", "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", + "merge-descriptors": "1.0.3", "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", + "path-to-regexp": "0.1.12", "proxy-addr": "~2.0.7", - "qs": "6.11.0", + "qs": "6.13.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", + "send": "0.19.0", + "serve-static": "1.16.2", "setprototypeof": "1.2.0", "statuses": "2.0.1", "type-is": "~1.6.18", @@ -1523,6 +1516,10 @@ }, "engines": { "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/express/node_modules/array-flatten": { @@ -1552,22 +1549,6 @@ "node": ">= 0.8" } }, - "node_modules/express/node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/express/node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -1588,12 +1569,6 @@ } ] }, - "node_modules/express/node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, "node_modules/express/node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -1603,15 +1578,6 @@ "node": ">= 0.8" } }, - "node_modules/express/node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -1675,13 +1641,14 @@ } }, "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "dev": true, + "license": "MIT", "dependencies": { "debug": "2.6.9", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", @@ -1697,6 +1664,7 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -1733,8 +1701,9 @@ "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -1775,16 +1744,22 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", + "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", "dev": true, + "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "get-proto": "^1.0.0", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -1793,6 +1768,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -1844,12 +1833,13 @@ "dev": true }, "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" + "license": "MIT", + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -1888,35 +1878,12 @@ "node": ">=8" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -1929,6 +1896,7 @@ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -2053,6 +2021,43 @@ "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", "dev": true }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/http-parser-js": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.5.tgz", @@ -2074,10 +2079,11 @@ } }, "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz", + "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==", "dev": true, + "license": "MIT", "dependencies": { "@types/http-proxy": "^1.17.8", "http-proxy": "^1.18.1", @@ -2102,6 +2108,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -2423,11 +2430,22 @@ "node": ">=10" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -2445,10 +2463,14 @@ } }, "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/merge-stream": { "version": "2.0.0", @@ -2483,6 +2505,7 @@ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -2558,9 +2581,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", "dev": true, "funding": [ { @@ -2568,6 +2591,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -2655,10 +2679,14 @@ } }, "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -2674,6 +2702,7 @@ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, + "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -2817,10 +2846,11 @@ "dev": true }, "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "dev": true, + "license": "MIT" }, "node_modules/picocolors": { "version": "1.0.1", @@ -2994,12 +3024,13 @@ } }, "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" }, "engines": { "node": ">=0.6" @@ -3031,6 +3062,7 @@ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dev": true, + "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -3046,59 +3078,11 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, - "node_modules/raw-body/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "node_modules/raw-body/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, "node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -3213,7 +3197,8 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/schema-utils": { "version": "3.3.0", @@ -3267,10 +3252,11 @@ } }, "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "dev": true, + "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -3295,22 +3281,17 @@ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, - "node_modules/send/node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true, - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -3319,32 +3300,19 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/send/node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/send/node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, - "node_modules/send/node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, "node_modules/serialize-javascript": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", @@ -3400,36 +3368,27 @@ "dev": true }, "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "dev": true, + "license": "MIT", "dependencies": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.18.0" + "send": "0.19.0" }, "engines": { "node": ">= 0.8.0" } }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true, - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } + "license": "ISC" }, "node_modules/shallow-clone": { "version": "3.0.1", @@ -3474,15 +3433,73 @@ } }, "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -3790,6 +3807,16 @@ "node": ">=8.0" } }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, "node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", @@ -3801,6 +3828,7 @@ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, + "license": "MIT", "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -3814,6 +3842,7 @@ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -4980,9 +5009,9 @@ "dev": true }, "body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "dev": true, "requires": { "bytes": "3.1.2", @@ -4993,7 +5022,7 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.11.0", + "qs": "6.13.0", "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" @@ -5010,37 +5039,6 @@ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true } } }, @@ -5105,17 +5103,24 @@ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", "dev": true }, - "call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "call-bind-apply-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", "dev": true, "requires": { - "es-define-property": "^1.0.0", "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "function-bind": "^1.1.2" + } + }, + "call-bound": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", + "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "dev": true, + "requires": { + "call-bind-apply-helpers": "^1.0.1", + "get-intrinsic": "^1.2.6" } }, "camel-case": { @@ -5249,9 +5254,9 @@ "dev": true }, "cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "dev": true }, "cookie-signature": { @@ -5267,9 +5272,9 @@ "dev": true }, "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "requires": { "path-key": "^3.1.0", @@ -5336,17 +5341,6 @@ "execa": "^5.0.0" } }, - "define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "requires": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - } - }, "define-lazy-prop": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", @@ -5450,10 +5444,21 @@ } } }, + "dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "requires": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + } + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "dev": true }, "electron-to-chromium": { @@ -5469,9 +5474,9 @@ "dev": true }, "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "dev": true }, "enhanced-resolve": { @@ -5497,13 +5502,10 @@ "dev": true }, "es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.2.4" - } + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true }, "es-errors": { "version": "1.3.0", @@ -5517,6 +5519,15 @@ "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", "dev": true }, + "es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "requires": { + "es-errors": "^1.3.0" + } + }, "escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -5611,37 +5622,37 @@ } }, "express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", "dev": true, "requires": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.2", + "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.6.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.2.0", + "finalhandler": "1.3.1", "fresh": "0.5.2", "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", + "merge-descriptors": "1.0.3", "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", + "path-to-regexp": "0.1.12", "proxy-addr": "~2.0.7", - "qs": "6.11.0", + "qs": "6.13.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", + "send": "0.19.0", + "serve-static": "1.16.2", "setprototypeof": "1.2.0", "statuses": "2.0.1", "type-is": "~1.6.18", @@ -5670,42 +5681,17 @@ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, "statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true } } }, @@ -5756,13 +5742,13 @@ } }, "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "dev": true, "requires": { "debug": "2.6.9", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", @@ -5793,7 +5779,7 @@ "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true }, "fs-monkey": { @@ -5822,16 +5808,31 @@ "dev": true }, "get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", + "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", "dev": true, "requires": { + "call-bind-apply-helpers": "^1.0.1", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "get-proto": "^1.0.0", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + } + }, + "get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "requires": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" } }, "get-stream": { @@ -5870,13 +5871,10 @@ "dev": true }, "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.3" - } + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true }, "graceful-fs": { "version": "4.2.11", @@ -5905,25 +5903,10 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "requires": { - "es-define-property": "^1.0.0" - } - }, - "has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "dev": true - }, "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true }, "hasown": { @@ -6028,6 +6011,33 @@ "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", "dev": true }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "dependencies": { + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + } + } + }, "http-parser-js": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.5.tgz", @@ -6046,9 +6056,9 @@ } }, "http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz", + "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==", "dev": true, "requires": { "@types/http-proxy": "^1.17.8", @@ -6303,10 +6313,16 @@ "yallist": "^4.0.0" } }, + "math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "dev": true }, "memfs": { @@ -6319,9 +6335,9 @@ } }, "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", "dev": true }, "merge-stream": { @@ -6405,9 +6421,9 @@ } }, "nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", "dev": true }, "negotiator": { @@ -6477,9 +6493,9 @@ } }, "object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", "dev": true }, "obuf": { @@ -6607,9 +6623,9 @@ "dev": true }, "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", "dev": true }, "picocolors": { @@ -6728,12 +6744,12 @@ "dev": true }, "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "dev": true, "requires": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" } }, "randombytes": { @@ -6768,43 +6784,6 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true } } }, @@ -6933,9 +6912,9 @@ } }, "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "dev": true, "requires": { "debug": "2.6.9", @@ -6959,18 +6938,11 @@ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true }, "ms": { "version": "2.1.3", @@ -6978,23 +6950,11 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, "statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true } } }, @@ -7049,30 +7009,22 @@ } }, "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "dev": true, "requires": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.18.0" + "send": "0.19.0" } }, - "set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, - "requires": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - } + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true }, "shallow-clone": { "version": "3.0.1", @@ -7105,15 +7057,51 @@ "dev": true }, "side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + } + }, + "side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + } + }, + "side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + } + }, + "side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "dev": true, "requires": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" } }, "signal-exit": { @@ -7335,6 +7323,12 @@ "is-number": "^7.0.0" } }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true + }, "tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", diff --git a/package-lock.json b/package-lock.json index ec5c962..49f9289 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4633,10 +4633,11 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -16294,9 +16295,9 @@ } }, "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "requires": { "path-key": "^3.1.0",