diff --git a/config-overrides.js b/config-overrides.js index aa9f020056..f54ad88e07 100644 --- a/config-overrides.js +++ b/config-overrides.js @@ -1,9 +1,19 @@ +const CopyWebpackPlugin = require('copy-webpack-plugin'); const { override, useEslintRc, + addWebpackExternals, + addWebpackPlugin } = require("customize-cra"); module.exports = override( useEslintRc(), + addWebpackExternals({ + 'fhir-mapper': "Mapper", + 'babel-polyfill': "_babelPolyfill" + }), + addWebpackPlugin(new CopyWebpackPlugin([ + { context:'node_modules/fhir-mapper/dist/', from: 'app.bundle.js*', to: 'static/js/fhir-mapper' } + ])) ); diff --git a/package.json b/package.json index 0799720dd5..14a46416df 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "downshift": "^1.31.16", "elasticlunr": "https://github.com/mgramigna/elasticlunr.js", "es6-shim": "0.35.3", - "fhir-mapper": "^1.0.6", + "fhir-mapper": "^2.0.1", "fhirclient": "^0.1.12", "flat": "^4.1.0", "flux_notes_treatment_options_rest_client": "^1.1.2", @@ -95,7 +95,8 @@ "react-scripts": "2.1.8", "react-test-renderer": "15.6.2", "redux-mock-store": "1.5.3", - "testcafe": "0.17.1" + "testcafe": "0.17.1", + "copy-webpack-plugin" : "5.0.4" }, "resolutions": { "moment": "2.22.0", diff --git a/public/config.js b/public/config.js index 31ac7e9823..f43f8bccee 100644 --- a/public/config.js +++ b/public/config.js @@ -13,8 +13,8 @@ CONFIG = { isExact: true, launchContext: { client: { - client_id: '6c12dff4-24e7-4475-a742-b08972c4ea27', - scope: 'patient/*.read user/*.* openid profile', + client_id: '5a14eeb1-973b-4362-9289-59ff27fcc29a', + scope: 'patient/AllergyIntolerance.read patient/Appointment.read patient/Binary.read patient/CarePlan.read patient/Condition.read patient/Contract.read patient/Device.read patient/DiagnosticReport.read patient/DocumentReference.read patient/Encounter.read patient/Goal.read patient/Immunization.read patient/MedicationAdministration.read patient/MedicationOrder.read patient/MedicationStatement.read patient/Observation.read patient/Patient.read patient/Person.read patient/Procedure.read patient/ProcedureRequest.read patient/RelatedPerson.read patient/Schedule.read patient/Slot.read user/AllergyIntolerance.read user/Appointment.read user/Binary.read user/CarePlan.read user/Condition.read user/Contract.read user/Device.read user/DiagnosticReport.read user/DocumentReference.read user/Encounter.read user/Goal.read user/Immunization.read user/MedicationAdministration.read user/MedicationOrder.read user/MedicationStatement.read user/Observation.read user/Patient.read user/Person.read user/Practitioner.read user/Procedure.read user/ProcedureRequest.read user/RelatedPerson.read user/Schedule.read user/Slot.read openid profile', // note: the redirect_uri below may need to change in different environments. // a relative URL (ex. /smart or ../smart) won't work in IE redirect_uri: 'http://localhost:3000/smartcompass' @@ -30,9 +30,10 @@ CONFIG = { display: 'Compass™', app: "SmartCompassApp", isExact: true, - dataSource: 'McodeV05SmartOnFhirDataSource', + dataSource: 'GenericSmartOnFhirDstu2DataSource', dataSourceProps: { - resourceTypes: ['Patient', 'Condition', 'Encounter', 'MedicationOrder', 'Observation', 'Organization', 'Practitioner', 'Procedure'] + mapper: 'cernerSandbox', + resourceTypes: ['Patient', 'Condition', 'Encounter', 'MedicationOrder', 'Observation', 'Procedure'] }, logoObject: { path: './compass-logo.png', @@ -60,7 +61,7 @@ CONFIG = { // (aka, the server listed here can be used as a 'shim') // server: "http://localhost:3001/1_0_2" } - }, + }, { path: '/smart', display: 'Flux Notes™', @@ -96,7 +97,7 @@ CONFIG = { dataSource: 'GenericSmartOnFhirDstu2DataSource', shortcuts: [], dataSourceProps: { - mapper: 'syntheaToV05' + mapper: 'cernerSandbox' } }, { diff --git a/public/index.html b/public/index.html index 78370c96c0..cf50c78502 100644 --- a/public/index.html +++ b/public/index.html @@ -13,7 +13,9 @@ return window.fluxnotes_app.receive_command(name,data); } + +
diff --git a/public/mapper.js b/public/mapper.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/dataaccess/GenericSmartOnFhirDstu2DataSource.jsx b/src/dataaccess/GenericSmartOnFhirDstu2DataSource.jsx index e44d550811..0420b3e5dc 100644 --- a/src/dataaccess/GenericSmartOnFhirDstu2DataSource.jsx +++ b/src/dataaccess/GenericSmartOnFhirDstu2DataSource.jsx @@ -1,11 +1,15 @@ import McodeV05SmartOnFhirDataSource from "./McodeV05SmartOnFhirDataSource"; import processFHIRResources from './utils/fhir-entry-processor'; -import mappers from 'fhir-mapper'; +import mappers from './mappers'; class GenericSmartOnFhirDstu2DataSource extends McodeV05SmartOnFhirDataSource { constructor(props) { super(props); - this.mapper = props && props.mapper ? mappers[props.mapper] : null; + if (props && typeof props.mapper === 'string') { + this.mapper = mappers[props.mapper]; + } else { + this.mapper = props && props.mapper ? props.mapper: null; + } } getPatient(id, callback) { diff --git a/src/dataaccess/McodeV05SmartOnFhirDataSource.jsx b/src/dataaccess/McodeV05SmartOnFhirDataSource.jsx index ef18813a33..fdf230e9a9 100644 --- a/src/dataaccess/McodeV05SmartOnFhirDataSource.jsx +++ b/src/dataaccess/McodeV05SmartOnFhirDataSource.jsx @@ -69,7 +69,7 @@ class McodeV05SmartOnFhirDataSource extends IDataSource { } _handleResponseBundle(newBundle, prevBundle=null) { - if (prevBundle) { + if (prevBundle && newBundle && newBundle.entry) { // merge the entries from the previous bundle into the new one newBundle.entry.unshift(...prevBundle.entry); newBundle.total = newBundle.entry.length; diff --git a/src/dataaccess/mappers/CernerSandboxMapper.js b/src/dataaccess/mappers/CernerSandboxMapper.js new file mode 100644 index 0000000000..22d56738f1 --- /dev/null +++ b/src/dataaccess/mappers/CernerSandboxMapper.js @@ -0,0 +1,76 @@ +import { + buildMappers, + mappers, + utils +} from 'fhir-mapper'; + +const primaryCancerConditionCodes = [ + '254837009', // Malignant neoplasm of breast (disorder) (B) + '93761005', // Primary malignant neoplasm of colon (C) + '109838007', // Overlapping malignant neoplasm of colon (C) + '363406005', // Malignant tumor of colon (C) + '94260004', // Secondary malignant neoplasm of colon (C) -- note this is a "secondary" code but is intended to be a primary cancer + '254637007', // Non-small cell lung cancer (disorder) (L) + '254632001', // Small cell carcinoma of lung (disorder) (L) + '424132000', // Non-small cell carcinoma of lung, TNM stage 1 (disorder) (L) + '425048006', // Non-small cell carcinoma of lung, TNM stage 2 (disorder) (L) + '422968005', // Non-small cell carcinoma of lung, TNM stage 3 (disorder) (L) + '423121009', // Non-small cell carcinoma of lung, TNM stage 4 (disorder) (L) + '67811000119102', // Primary small cell malignant neoplasm of lung, TNM stage 1 (disorder) (L) + '67821000119109', // Primary small cell malignant neoplasm of lung, TNM stage 2 (disorder) (L) + '67831000119107', // Primary small cell malignant neoplasm of lung, TNM stage 3 (disorder) (L) + '67841000119103', // Primary small cell malignant neoplasm of lung, TNM stage 4 (disorder) (L) + // note that none of the 3 prostate cancer codes are in the recommended VS + '126906006', // Neoplasm of prostate (P) + '92691004', // Carcinoma in situ of prostate (disorder) (P) + '314994000', // Metastasis from malignant tumor of prostate (disorder) (P) -- also a "secondary" code but intended to be a primary cancer +]; + + + +let mapper = { + filter: () => true, + default: (resource, context) => mappers['syntheaToV05'].execute(resource, context), + mappers: [ + { + filter: "Condition.code.coding.where($this.code in %primaryCancerConditionCodes.first())", + exec: (resource, context) => + utils.applyProfile(resource, 'http://hl7.org/fhir/us/fhirURL/StructureDefinition/oncocore-CancerDisorderPresent') + }, + {filter: "Observation.code.text = 'AJCCV7 Breast Distant Metastasis (M) Pat'", + exec: (resource, context) => { + resource.code = {coding: [{code: '21901-4' , system: 'http://loinc.org'}]}; + resource.valueCodeableConcept.coding = [{code: resource.valueCodeableConcept.text }]; + + // utils.applyProfile(resource, 'http://hl7.org/fhir/us/fhirURL/StructureDefinition/'); + return resource; + } + }, + {filter: "Observation.code.text = 'AJCCV7 Breast Distant Metastasis (M) Cli'", + exec: (resource, context) => { + resource.code = {coding: [{code: '21907-1' , system: 'http://loinc.org'}]}; + resource.valueCodeableConcept.coding = [{code: resource.valueCodeableConcept.text }]; + utils.applyProfile(resource, 'http://hl7.org/fhir/us/fhirURL/StructureDefinition/oncocore-TNMClinicalDistantMetastasesClassification'); + return resource; + } + }, + {filter: "Observation.code.text = 'AJCCV7 Breast Regional Lymph Nodes (N) P'", + exec: (resource, context) => { + resource.code = {coding: [{code: '21900-6' , system: 'http://loinc.org'}]}; + resource.valueCodeableConcept.coding = [{code: resource.valueCodeableConcept.text }]; + //utils.applyProfile(resource, 'http://hl7.org/fhir/us/fhirURL/StructureDefinition/'); + return resource; + } + }, + {filter: "Observation.code.text = 'AJCCV7 Breast Regional Lymph Nodes (N) C'", + exec: (resource, context) => { + resource.code = {coding: [{code: '21906-3' , system: 'http://loinc.org'}]}; + resource.valueCodeableConcept.coding = [{code: resource.valueCodeableConcept.text }]; + utils.applyProfile(resource, 'http://hl7.org/fhir/us/fhirURL/StructureDefinition/oncocore-TNMClinicalRegionalNodesClassification'); + return resource; + } + }], +}; +export default buildMappers(mapper, { + primaryCancerConditionCodes +}); diff --git a/src/dataaccess/mappers/index.js b/src/dataaccess/mappers/index.js new file mode 100644 index 0000000000..e69875e0cd --- /dev/null +++ b/src/dataaccess/mappers/index.js @@ -0,0 +1,3 @@ +import {mappers} from 'fhir-mapper'; +import cernerSandbox from './CernerSandboxMapper'; +export default {...mappers, cernerSandbox}; \ No newline at end of file diff --git a/src/model/base/FluxConditionPresentAssertion.js b/src/model/base/FluxConditionPresentAssertion.js index 94df307a16..bfd84c2cc8 100644 --- a/src/model/base/FluxConditionPresentAssertion.js +++ b/src/model/base/FluxConditionPresentAssertion.js @@ -42,13 +42,13 @@ class FluxConditionPresentAssertion extends FluxEntry { } get code() { - if (!this._condition.findingTopicCode || !this._condition.findingTopicCode.value) return null; - return this._condition.findingTopicCode.value.coding[0].code.value; + if (!this._getTopicCodeCoding()){ return null;} + return this._getTopicCodeCoding().code.value; } get codeSystem() { - if (!this._condition.findingTopicCode || !this._condition.findingTopicCode.value) return null; - return this._condition.findingTopicCode.value.coding[0].codeSystem.value; + if (!this._getTopicCodeCoding()) return null; + return this._getTopicCodeCoding().codeSystem.value; } get codeURL() { @@ -56,8 +56,8 @@ class FluxConditionPresentAssertion extends FluxEntry { } get type() { - if (!this._condition.findingTopicCode || !this._condition.findingTopicCode.value) return null; - return this._displayTextOrCode(this._condition.findingTopicCode.value.coding[0]); + if (!this._getTopicCodeCoding()) return null; + return this._displayTextOrCode(this._getTopicCodeCoding()); } get observation() { @@ -599,6 +599,13 @@ class FluxConditionPresentAssertion extends FluxEntry { return 0; } + _getTopicCodeCoding(){ + if (this._condition.findingTopicCode && + this._condition.findingTopicCode.value && + this._condition.findingTopicCode.value.coding && + this._condition.findingTopicCode.value.coding.length > 0 ) return this._condition.findingTopicCode.value.coding[0]; + return null; + } /** * Extract a human-readable string from a code. * diff --git a/yarn.lock b/yarn.lock index 558d953ac7..971c1eb60d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2286,6 +2286,11 @@ bluebird@^3.5.1, bluebird@^3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7" +bluebird@^3.5.5: + version "3.5.5" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f" + integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w== + bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: version "4.11.8" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" @@ -2508,6 +2513,26 @@ cacache@^11.0.2: unique-filename "^1.1.1" y18n "^4.0.0" +cacache@^11.3.3: + version "11.3.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.3.tgz#8bd29df8c6a718a6ebd2d010da4d7972ae3bbadc" + integrity sha512-p8WcneCytvzPxhDvYp31PD039vi77I12W+/KfR9S8AZbaiARFBCpsPJS+9uhWfeBfeAtW7o/4vt3MUqLkbY6nA== + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -3114,6 +3139,24 @@ copy-to-clipboard@^3: dependencies: toggle-selection "^1.0.6" +copy-webpack-plugin@5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-5.0.4.tgz#c78126f604e24f194c6ec2f43a64e232b5d43655" + integrity sha512-YBuYGpSzoCHSSDGyHy6VJ7SHojKp6WHT4D7ItcQFNAYx2hrwkMe56e97xfVR0/ovDuMTrMffXUiltvQljtAGeg== + dependencies: + cacache "^11.3.3" + find-cache-dir "^2.1.0" + glob-parent "^3.1.0" + globby "^7.1.1" + is-glob "^4.0.1" + loader-utils "^1.2.3" + minimatch "^3.0.4" + normalize-path "^3.0.0" + p-limit "^2.2.0" + schema-utils "^1.0.0" + serialize-javascript "^1.7.0" + webpack-log "^2.0.0" + core-js-compat@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.0.0.tgz#cd9810b8000742535a4a43773866185e310bd4f7" @@ -3503,9 +3546,9 @@ currently-unhandled@^0.4.1: array-find-index "^1.0.1" customize-cra@^0.2.12: - version "0.2.12" - resolved "https://registry.yarnpkg.com/customize-cra/-/customize-cra-0.2.12.tgz#ffc9b6378cbdffbe29ad02c479ae5d7a502aca69" - integrity sha512-kTNJtB35ZxHO8E3wbHNNkngQHH4u8uD8zAK4hQ29qSRRyLe1dln3k678GeyWd9TAERIqLq/5uJR37Y0P+lJLRA== + version "0.2.14" + resolved "https://registry.yarnpkg.com/customize-cra/-/customize-cra-0.2.14.tgz#41f9b2d96d9a318bec760c4c9b3dc9c26d5a7594" + integrity sha512-LtEMXNzkhnnqGPc1dP5fnPlF1ic1dj34hDbRVJIzfMQgOaGByHhx51fTR7fv7sTPEbCPrOBP777MkCo0GPV57g== dependencies: lodash.flow "^3.5.0" @@ -3802,6 +3845,13 @@ dir-glob@2.0.0: arrify "^1.0.1" path-type "^3.0.0" +dir-glob@^2.0.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" + integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== + dependencies: + path-type "^3.0.0" + direction@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/direction/-/direction-0.1.5.tgz#ce5d797f97e26f8be7beff53f7dc40e1c1a9ec4c" @@ -4682,13 +4732,13 @@ fbjs@^0.8.1, fbjs@^0.8.16, fbjs@^0.8.6, fbjs@^0.8.9: setimmediate "^1.0.5" ua-parser-js "^0.7.18" -fhir-mapper@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/fhir-mapper/-/fhir-mapper-1.0.6.tgz#1c82971ff236feb82b2f0fc9ef7e530dcd56727c" - integrity sha512-UttkCJIJ7/cX/8jg6/toWJvPgHG9qwJK5iXuosS1IEBKWCVikifp418FHVU8zkSZA2CON1drD6bWBtkDXKsdNg== +fhir-mapper@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fhir-mapper/-/fhir-mapper-2.0.1.tgz#412d7888065ba4225187d369e6e4e6e4fd81f5a0" + integrity sha512-BPuK6OZT/EkbliucYHRLAfbpWOLesDvs5QHCvDZpQ/qYhSpCNi8euP8GnxlM8Zjwh+MdUFoDsTn10RzOY2Meww== dependencies: fhirpath "^0.10.3" - lodash "^4.17.11" + lodash "^4.17.13" fhirclient@^0.1.12: version "0.1.15" @@ -4780,7 +4830,7 @@ find-cache-dir@^0.1.1: mkdirp "^0.5.1" pkg-dir "^1.0.0" -find-cache-dir@^2.0.0: +find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" dependencies: @@ -5127,7 +5177,7 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@~7.1.1: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.1.3: +glob@^7.1.3, glob@^7.1.4: version "7.1.4" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== @@ -5201,6 +5251,18 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" +globby@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" + integrity sha1-+yzP+UAfhgCUXfral0QMypcrhoA= + dependencies: + array-union "^1.0.1" + dir-glob "^2.0.0" + glob "^7.1.2" + ignore "^3.3.5" + pify "^3.0.0" + slash "^1.0.0" + globule@^1.0.0: version "1.2.1" resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.1.tgz#5dffb1b191f22d20797a9369b49eab4e9839696d" @@ -5952,7 +6014,7 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" -is-glob@^4.0.0: +is-glob@^4.0.0, is-glob@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" dependencies: @@ -6842,7 +6904,7 @@ loader-runner@^2.3.0: version "2.4.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" -loader-utils@1.2.3, loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0: +loader-utils@1.2.3, loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" dependencies: @@ -7017,6 +7079,11 @@ lodash@4.17.13, "lodash@4.6.1 || ^4.16.1", "lodash@>=3.5 <5", lodash@^4.0.0, lod resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.13.tgz#0bdc3a6adc873d2f4e0c4bac285df91b64fc7b93" integrity sha512-vm3/XWXfWtRua0FkUyEHBZy8kCPjErNBT9fJx8Zvs+U6zjqPbTUOpkaoum3O5uiA8sm+yNMHXfYkTUHFoMxFNA== +lodash@^4.17.13: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== + log-update@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/log-update/-/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1" @@ -8009,7 +8076,7 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" -p-limit@^2.0.0: +p-limit@^2.0.0, p-limit@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" dependencies: @@ -10014,6 +10081,13 @@ rimraf@2, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@~2. dependencies: glob "^7.1.3" +rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" @@ -10193,6 +10267,11 @@ serialize-javascript@^1.4.0: version "1.6.1" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.6.1.tgz#4d1f697ec49429a847ca6f442a2a755126c4d879" +serialize-javascript@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.7.0.tgz#d6e0dfb2a3832a8c94468e6eb1db97e55a192a65" + integrity sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA== + serve-index@^1.7.2: version "1.9.1" resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239"