diff --git a/build/build.ts b/build/build.ts index e507495..a56a51c 100644 --- a/build/build.ts +++ b/build/build.ts @@ -55,7 +55,6 @@ const externals = [ "crypto", "util", "mongodb", - "libxmljs", "vm", "later", "parsimmon", diff --git a/lib/config.ts b/lib/config.ts index 31d0248..8d8ed8d 100644 --- a/lib/config.ts +++ b/lib/config.ts @@ -98,14 +98,6 @@ const options = { CONNECTION_REQUEST_ALLOW_BASIC_AUTH: { type: "bool", default: false }, MAX_COMMIT_ITERATIONS: { type: "int", default: 32 }, - // XML configuration - XML_RECOVER: { type: "bool", default: false }, - XML_IGNORE_ENC: { type: "bool", default: false }, - XML_FORMAT: { type: "bool", default: false }, - XML_NO_DECL: { type: "bool", default: false }, - XML_NO_EMPTY: { type: "bool", default: false }, - XML_LIBXMLJS: { type: "bool", default: false }, - // Should probably never be changed DEVICE_ONLINE_THRESHOLD: { type: "int", default: 4000 } }; @@ -167,12 +159,6 @@ function setConfig(name, value, commandLineArgument = false): boolean { ) setConfig("GPV_BATCH_SIZE", value); - if (name === "XML_PARSE_IGNORE_ENC" || name === "xml-parse-ignore-enc") - setConfig("XML_IGNORE_ENC", value); - - if (name === "XML_PARSE_RECOVER" || name === "xml-parse-recover") - setConfig("XML_RECOVER", value); - if (name === "FS_IP" || name === "fs-ip") setConfig("FS_HOSTNAME", value); function cast(val, type): string | number | boolean { diff --git a/lib/cwmp.ts b/lib/cwmp.ts index 2a20a24..8206bb8 100644 --- a/lib/cwmp.ts +++ b/lib/cwmp.ts @@ -23,8 +23,7 @@ import { Socket } from "net"; import * as auth from "./auth"; import * as config from "./config"; import * as common from "./common"; -import * as soapCustom from "./soap"; -import * as soapLibxmljs from "./soap-libxmljs"; +import * as soap from "./soap"; import * as session from "./session"; import { evaluateAsync, evaluate, extractParams } from "./common/expression"; import * as device from "./device"; @@ -51,14 +50,9 @@ import { Readable } from "stream"; import { promisify } from "util"; import { TLSSocket } from "tls"; import { decode, encodingExists } from "iconv-lite"; -import { dependencies as DEPENDENCIES } from "../package.json"; import { parseXmlDeclaration } from "./xml-parser"; import * as debug from "./debug"; -const soap = - DEPENDENCIES["libxmljs"] && config.get("XML_LIBXMLJS") - ? soapLibxmljs - : soapCustom; const gzipPromisified = promisify(zlib.gzip); const deflatePromisified = promisify(zlib.deflate); diff --git a/lib/soap-libxmljs.ts b/lib/soap-libxmljs.ts deleted file mode 100644 index a71c5a7..0000000 --- a/lib/soap-libxmljs.ts +++ /dev/null @@ -1,745 +0,0 @@ -/** - * Copyright 2013-2019 GenieACS Inc. - * - * This file is part of GenieACS. - * - * GenieACS is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * GenieACS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with GenieACS. If not, see . - */ - -import { parseXml, Document, Element, ParserOptions } from "libxmljs"; -import * as config from "./config"; -import { version as VERSION } from "../package.json"; -import { - CpeGetResponse, - CpeSetResponse, - InformRequest, - AcsResponse, - CpeRequest, - FaultStruct, - SpvFault, - CpeFault, - SoapMessage, - TransferCompleteRequest -} from "./types"; - -const SERVER_NAME = `GenieACS/${VERSION}`; - -const NAMESPACES = { - "1.0": { - "soap-enc": "http://schemas.xmlsoap.org/soap/encoding/", - "soap-env": "http://schemas.xmlsoap.org/soap/envelope/", - xsd: "http://www.w3.org/2001/XMLSchema", - xsi: "http://www.w3.org/2001/XMLSchema-instance", - cwmp: "urn:dslforum-org:cwmp-1-0" - }, - "1.1": { - "soap-enc": "http://schemas.xmlsoap.org/soap/encoding/", - "soap-env": "http://schemas.xmlsoap.org/soap/envelope/", - xsd: "http://www.w3.org/2001/XMLSchema", - xsi: "http://www.w3.org/2001/XMLSchema-instance", - cwmp: "urn:dslforum-org:cwmp-1-1" - }, - "1.2": { - "soap-enc": "http://schemas.xmlsoap.org/soap/encoding/", - "soap-env": "http://schemas.xmlsoap.org/soap/envelope/", - xsd: "http://www.w3.org/2001/XMLSchema", - xsi: "http://www.w3.org/2001/XMLSchema-instance", - cwmp: "urn:dslforum-org:cwmp-1-2" - }, - "1.3": { - "soap-enc": "http://schemas.xmlsoap.org/soap/encoding/", - "soap-env": "http://schemas.xmlsoap.org/soap/envelope/", - xsd: "http://www.w3.org/2001/XMLSchema", - xsi: "http://www.w3.org/2001/XMLSchema-instance", - cwmp: "urn:dslforum-org:cwmp-1-2" - }, - "1.4": { - "soap-enc": "http://schemas.xmlsoap.org/soap/encoding/", - "soap-env": "http://schemas.xmlsoap.org/soap/envelope/", - xsd: "http://www.w3.org/2001/XMLSchema", - xsi: "http://www.w3.org/2001/XMLSchema-instance", - cwmp: "urn:dslforum-org:cwmp-1-3" - } -}; - -const LIBXMLJS_PARSE_OPTIONS: ParserOptions = { - nocdata: true, - recover: !!config.get("XML_RECOVER"), - /* eslint-disable-next-line @typescript-eslint/camelcase */ - ignore_enc: !!config.get("XML_IGNORE_ENC") -}; - -interface WriterOptions { - declaration?: boolean; - format?: boolean; - selfCloseEmpty?: boolean; - whitespace?: boolean; - type?: "XML" | "HTML" | "XHTML"; -} - -declare module "libxmljs" { - interface Document { - toString(formatting: boolean | WriterOptions): string; - } -} - -const LIBXMLJS_SAVE_OPTIONS: WriterOptions = { - format: !!config.get("XML_FORMAT"), - declaration: !config.get("XML_NO_DECL"), - selfCloseEmpty: !config.get("XML_NO_EMPTY") -}; - -let warnings; - -function parseBool(v): boolean { - v = "" + v; - if (v === "true" || v === "TRUE" || v === "True" || v === "1") return true; - else if (v === "false" || v === "FALSE" || v === "False" || v === "0") - return false; - else return null; -} - -function event(xml): string[] { - return xml - .childNodes() - .filter(n => n.name() === "EventStruct") - .map(c => - c - .childNodes() - .find(n => n.name() === "EventCode") - .text() - .trim() - ); -} - -function parameterInfoList(xml): [string, boolean][] { - return xml - .childNodes() - .filter(e => e.name() === "ParameterInfoStruct") - .map(e => { - let param, value; - for (const c of e.childNodes()) { - switch (c.name()) { - case "Name": - param = c.text(); - break; - case "Writable": - value = c.text(); - break; - } - } - - let parsed = parseBool(value); - - if (parsed === null) { - warnings.push({ - message: "Invalid writable attribute", - parameter: param - }); - parsed = false; - } - - return [param, parsed]; - }); -} - -function parameterValueList( - xml -): [string, string | number | boolean, string][] { - return xml - .childNodes() - .filter(e => e.name() === "ParameterValueStruct") - .map(e => { - let valueElement, param; - for (const c of e.childNodes()) { - switch (c.name()) { - case "Name": - param = c.text(); - break; - case "Value": - valueElement = c; - break; - } - } - - const valueType = valueElement.attr("type").value(); - const value = valueElement.text(); - let parsed = value; - if (valueType === "xsd:boolean") { - parsed = parseBool(value); - if (parsed === null) { - warnings.push({ - message: "Invalid value attribute", - parameter: param - }); - parsed = value; - } - } else if (valueType === "xsd:int" || valueType === "xsd:unsignedInt") { - parsed = parseInt(value); - if (isNaN(parsed)) { - warnings.push({ - message: "Invalid value attribute", - parameter: param - }); - parsed = value; - } - } else if (valueType === "xsd:dateTime") { - parsed = Date.parse(value); - if (isNaN(parsed)) { - warnings.push({ - message: "Invalid value attribute", - parameter: param - }); - parsed = value; - } - } - - return [param, parsed, valueType]; - }); -} - -function GetParameterNames(xml, methodRequest): void { - const el = xml.node("cwmp:GetParameterNames"); - el.node("ParameterPath").text(methodRequest.parameterPath); - el.node("NextLevel").text(+methodRequest.nextLevel); -} - -function GetParameterNamesResponse(xml): CpeGetResponse { - return { - name: "GetParameterNamesResponse", - parameterList: parameterInfoList( - xml.childNodes().find(n => n.name() === "ParameterList") - ) - }; -} - -function GetParameterValues(xml, methodRequest): void { - const el = xml.node("cwmp:GetParameterValues").node("ParameterNames"); - el.attr({ - "soap-enc:arrayType": `xsd:string[${methodRequest.parameterNames.length}]` - }); - - for (const p of methodRequest.parameterNames) el.node("string").text(p); -} - -function GetParameterValuesResponse(xml): CpeGetResponse { - return { - name: "GetParameterValuesResponse", - parameterList: parameterValueList( - xml.childNodes().find(n => n.name() === "ParameterList") - ) - }; -} - -function SetParameterValues(xml, methodRequest): void { - const el = xml.node("cwmp:SetParameterValues"); - const paramList = el.node("ParameterList"); - paramList.attr({ - "soap-enc:arrayType": `cwmp:ParameterValueStruct[${methodRequest.parameterList.length}]` - }); - - for (const p of methodRequest.parameterList) { - const pvs = paramList.node("ParameterValueStruct"); - pvs.node("Name").text(p[0]); - let val = p[1]; - if (p[2] === "xsd:dateTime" && typeof val === "number") { - val = new Date(val).toISOString(); - if (methodRequest.DATETIME_MILLISECONDS === false) - val = val.replace(".000", ""); - } - if (p[2] === "xsd:boolean" && typeof val === "boolean") - if (methodRequest.BOOLEAN_LITERAL === false) val = +val; - - pvs - .node("Value") - .attr({ "xsi:type": p[2] }) - .text(val); - } - - el.node("ParameterKey").text(methodRequest.parameterKey || ""); -} - -function SetParameterValuesResponse(xml): CpeSetResponse { - return { - name: "SetParameterValuesResponse", - status: parseInt( - xml - .childNodes() - .find(n => n.name() === "Status") - .text() - ) - }; -} - -function AddObject(xml, methodRequest): void { - const el = xml.node("cwmp:AddObject"); - el.node("ObjectName").text(methodRequest.objectName); - el.node("ParameterKey").text(methodRequest.parameterKey || ""); -} - -function AddObjectResponse(xml): CpeSetResponse { - let instanceNumber, status; - for (const c of xml.childNodes()) { - switch (c.name()) { - case "InstanceNumber": - instanceNumber = parseInt(c.text()); - break; - case "Status": - status = parseInt(c.text()); - break; - } - } - - return { - name: "AddObjectResponse", - instanceNumber: instanceNumber, - status: status - }; -} - -function DeleteObject(xml, methodRequest): void { - const el = xml.node("cwmp:DeleteObject"); - el.node("ObjectName").text(methodRequest.objectName); - el.node("ParameterKey").text(methodRequest.parameterKey || ""); -} - -function DeleteObjectResponse(xml): CpeSetResponse { - return { - name: "DeleteObjectResponse", - status: parseInt( - xml - .childNodes() - .find(n => n.name() === "Status") - .text() - ) - }; -} - -function Reboot(xml, methodRequest): void { - const el = xml.node("cwmp:Reboot"); - el.node("CommandKey").text(methodRequest.commandKey || ""); -} - -function RebootResponse(): CpeSetResponse { - return { - name: "RebootResponse" - }; -} - -function FactoryReset(xml): void { - xml.node("cwmp:FactoryReset"); -} - -function FactoryResetResponse(): CpeSetResponse { - return { - name: "FactoryResetResponse" - }; -} - -function Download(xml, methodRequest): void { - const el = xml.node("cwmp:Download"); - el.node("CommandKey").text(methodRequest.commandKey || ""); - el.node("FileType").text(methodRequest.fileType); - el.node("URL").text(methodRequest.url); - el.node("Username").text(methodRequest.username || ""); - el.node("Password").text(methodRequest.password || ""); - el.node("FileSize").text(methodRequest.fileSize || "0"); - el.node("TargetFileName").text(methodRequest.targetFileName || ""); - el.node("DelaySeconds").text(methodRequest.delaySeconds || "0"); - el.node("SuccessURL").text(methodRequest.successUrl || ""); - el.node("FailureURL").text(methodRequest.failureUrl || ""); -} - -function DownloadResponse(xml): CpeSetResponse { - let status, startTime, completeTime; - for (const c of xml.childNodes()) { - switch (c.name()) { - case "Status": - status = parseInt(c.text()); - break; - case "StartTime": - startTime = Date.parse(c.text()); - break; - case "CompleteTime": - completeTime = Date.parse(c.text()); - break; - } - } - - return { - name: "DownloadResponse", - status: status, - startTime: startTime, - completeTime: completeTime - }; -} - -function Inform(xml): InformRequest { - let retryCount, evnt, parameterList; - const deviceId = { - Manufacturer: null, - OUI: null, - ProductClass: null, - SerialNumber: null - }; - - for (const c of xml.childNodes()) { - switch (c.name()) { - case "ParameterList": - parameterList = parameterValueList(c); - break; - case "DeviceId": - for (const cc of c.childNodes()) { - const n = cc.name(); - if (n in deviceId) deviceId[n] = cc.text(); - } - break; - case "Event": - evnt = event(c); - break; - case "RetryCount": - retryCount = parseInt(c.text()); - break; - } - } - - return { - name: "Inform", - parameterList: parameterList, - deviceId: deviceId, - event: evnt, - retryCount: retryCount - }; -} - -function InformResponse(xml): void { - xml - .node("cwmp:InformResponse") - .node("MaxEnvelopes") - .text(1); -} - -function GetRPCMethods(): AcsResponse { - return { name: "GetRPCMethods" }; -} - -function GetRPCMethodsResponse(xml, methodResponse): void { - const el = xml.node("cwmp:GetRPCMethodsResponse").node("MethodList"); - el.attr({ - "soap-enc:arrayType": `xsd:string[${methodResponse.methodList.length}]` - }); - - for (const m of methodResponse.methodList) el.node("string").text(m); -} - -function TransferComplete(xml): TransferCompleteRequest { - let commandKey, _faultStruct, startTime, completeTime; - for (const c of xml.childNodes()) { - switch (c.name()) { - case "CommandKey": - commandKey = c.text(); - break; - case "FaultStruct": - _faultStruct = faultStruct(c); - break; - case "StartTime": - startTime = Date.parse(c.text()); - break; - case "CompleteTime": - completeTime = Date.parse(c.text()); - break; - } - } - - return { - name: "TransferComplete", - commandKey: commandKey, - faultStruct: _faultStruct, - startTime: startTime, - completeTime: completeTime - }; -} - -function TransferCompleteResponse(xml): void { - xml.node("cwmp:TransferCompleteResponse").text(""); -} - -function RequestDownload(xml): CpeRequest { - return { - name: "RequestDownload", - fileType: xml - .childNodes() - .find(n => n.name() === "FileType") - .text() - }; -} - -function RequestDownloadResponse(xml): void { - xml.node("cwmp:RequestDownloadResponse").text(""); -} - -function faultStruct(xml): FaultStruct { - let faultCode, faultString, setParameterValuesFault: SpvFault[], pn, fc, fs; - for (const c of xml.childNodes()) { - switch (c.name()) { - case "FaultCode": - faultCode = c.text(); - break; - case "FaultString": - faultString = c.text(); - break; - case "SetParameterValuesFault": - setParameterValuesFault = setParameterValuesFault || []; - for (const cc of c.childNodes()) { - switch (cc.name()) { - case "ParameterName": - pn = cc.text(); - break; - case "FaultCode": - fc = cc.text(); - break; - case "FaultString": - fs = cc.text(); - break; - } - } - setParameterValuesFault.push({ - parameterName: pn, - faultCode: fc, - faultString: fs - }); - } - } - - return { faultCode, faultString, setParameterValuesFault }; -} - -function fault(xml): CpeFault { - let faultCode, faultString, detail; - for (const c of xml.childNodes()) { - switch (c.name()) { - case "faultcode": - faultCode = c.text(); - break; - case "faultstring": - faultString = c.text(); - break; - case "detail": - detail = faultStruct(c.childNodes().find(n => n.name() === "Fault")); - break; - } - } - - return { faultCode, faultString, detail }; -} - -export function request(data, cwmpVersion, warn): SoapMessage { - warnings = warn; - - const rpc = { - id: null, - cwmpVersion: cwmpVersion, - sessionTimeout: null, - cpeRequest: null, - cpeFault: null, - cpeResponse: null - }; - - if (!data.length) return rpc; - - const xml = parseXml(data, LIBXMLJS_PARSE_OPTIONS); - - let headerElement, bodyElement; - - for (const c of xml.childNodes()) { - switch (c.name()) { - case "Header": - headerElement = c; - break; - case "Body": - bodyElement = c; - break; - } - } - - if (headerElement) { - for (const c of headerElement.childNodes()) { - switch (c.name()) { - case "ID": - rpc.id = c.text(); - break; - case "sessionTimeout": - rpc.sessionTimeout = parseInt(c.text()); - break; - } - } - } - - for (const methodElement of bodyElement.childNodes()) { - const methodName = methodElement.name(); - if (methodName === "text") continue; - - if (!rpc.cwmpVersion && methodName !== "Fault") { - switch (methodElement.namespace().href()) { - case "urn:dslforum-org:cwmp-1-0": - rpc.cwmpVersion = "1.0"; - break; - case "urn:dslforum-org:cwmp-1-1": - rpc.cwmpVersion = "1.1"; - break; - case "urn:dslforum-org:cwmp-1-2": - if (rpc.sessionTimeout) rpc.cwmpVersion = "1.3"; - else rpc.cwmpVersion = "1.2"; - - break; - case "urn:dslforum-org:cwmp-1-3": - rpc.cwmpVersion = "1.4"; - break; - default: - throw new Error("Unrecognized CWMP version"); - } - } - - switch (methodName) { - case "Inform": - rpc.cpeRequest = Inform(methodElement); - break; - case "GetRPCMethods": - rpc.cpeRequest = GetRPCMethods(); - break; - case "TransferComplete": - rpc.cpeRequest = TransferComplete(methodElement); - break; - case "RequestDownload": - rpc.cpeRequest = RequestDownload(methodElement); - break; - case "GetParameterNamesResponse": - rpc.cpeResponse = GetParameterNamesResponse(methodElement); - break; - case "GetParameterValuesResponse": - rpc.cpeResponse = GetParameterValuesResponse(methodElement); - break; - case "SetParameterValuesResponse": - rpc.cpeResponse = SetParameterValuesResponse(methodElement); - break; - case "AddObjectResponse": - rpc.cpeResponse = AddObjectResponse(methodElement); - break; - case "DeleteObjectResponse": - rpc.cpeResponse = DeleteObjectResponse(methodElement); - break; - case "RebootResponse": - rpc.cpeResponse = RebootResponse(); - break; - case "FactoryResetResponse": - rpc.cpeResponse = FactoryResetResponse(); - break; - case "DownloadResponse": - rpc.cpeResponse = DownloadResponse(methodElement); - break; - case "Fault": - rpc.cpeFault = fault(methodElement); - break; - default: - throw new Error(`8000 Method not supported ${methodName}`); - } - } - - return rpc; -} - -function createSoapEnv(cwmpVersion: string): Element { - const xml = new Document(); - const env = xml.node("soap-env:Envelope"); - - for (const prefix of Object.keys(NAMESPACES[cwmpVersion])) - env.defineNamespace(prefix, NAMESPACES[cwmpVersion][prefix]); - - return env; -} - -export function response(rpc): { code: number; headers: {}; data: string } { - const headers = { - Server: SERVER_NAME, - SOAPServer: SERVER_NAME - }; - - if (!rpc) return { code: 204, headers: headers, data: "" }; - - const env = createSoapEnv(rpc.cwmpVersion); - const header = env.node("soap-env:Header"); - header - .node("cwmp:ID") - .attr({ - "soap-env:mustUnderstand": "1" - }) - .text(rpc.id); - - const body = env.node("soap-env:Body"); - - if (rpc.acsResponse) { - switch (rpc.acsResponse.name) { - case "InformResponse": - InformResponse(body); - break; - case "GetRPCMethodsResponse": - GetRPCMethodsResponse(body, rpc.acsResponse); - break; - case "TransferCompleteResponse": - TransferCompleteResponse(body); - break; - case "RequestDownloadResponse": - RequestDownloadResponse(body); - break; - default: - throw new Error(`Unknown method response type ${rpc.acsResponse.name}`); - } - } else if (rpc.acsRequest) { - switch (rpc.acsRequest.name) { - case "GetParameterNames": - GetParameterNames(body, rpc.acsRequest); - break; - case "GetParameterValues": - GetParameterValues(body, rpc.acsRequest); - break; - case "SetParameterValues": - SetParameterValues(body, rpc.acsRequest); - break; - case "AddObject": - AddObject(body, rpc.acsRequest); - break; - case "DeleteObject": - DeleteObject(body, rpc.acsRequest); - break; - case "Reboot": - Reboot(body, rpc.acsRequest); - break; - case "FactoryReset": - FactoryReset(body); - break; - case "Download": - Download(body, rpc.acsRequest); - break; - default: - throw new Error(`Unknown method request ${rpc.acsRequest.name}`); - } - } - - headers["Content-Type"] = 'text/xml; charset="utf-8"'; - return { - code: 200, - headers: headers, - data: env.doc().toString(LIBXMLJS_SAVE_OPTIONS) - }; -} diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index fc25732..e096d87 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -606,15 +606,6 @@ "@types/koa-send": "*" } }, - "@types/libxmljs": { - "version": "0.18.3", - "resolved": "https://registry.npmjs.org/@types/libxmljs/-/libxmljs-0.18.3.tgz", - "integrity": "sha512-EvYww5XELtacMKQkvvEj2DrFSm9F4cusPoegt4C2S9OTw2MCJ2RZW5FMUP4MiU5307yIMZDCP25C/oBuJros1w==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, "@types/mime": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.1.tgz", @@ -931,12 +922,6 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "optional": true - }, "accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", @@ -1055,12 +1040,6 @@ "type-fest": "^0.5.2" } }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "optional": true - }, "ansi-styles": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.0.0.tgz", @@ -1105,17 +1084,8 @@ "aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true }, "arg": { "version": "4.1.1", @@ -1423,7 +1393,8 @@ "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true }, "base": { "version": "0.11.2", @@ -1504,12 +1475,6 @@ "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", "dev": true }, - "bindings": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.3.1.tgz", - "integrity": "sha512-i47mqjF9UbjxJhxGf+pZ6kSxrnI3wBLlnGI2ArWJ4r0VrvDS7ZYXkprq/pLaBWYq4GM0r4zdHY+NNRqEMU7uew==", - "optional": true - }, "bluebird": { "version": "3.5.5", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", @@ -1606,6 +1571,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1998,7 +1964,8 @@ "chownr": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.2.tgz", - "integrity": "sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==" + "integrity": "sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==", + "dev": true }, "chrome-trace-event": { "version": "1.0.2", @@ -2199,12 +2166,6 @@ "convert-to-spaces": "^1.0.1" } }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "optional": true - }, "codemirror": { "version": "5.48.2", "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.48.2.tgz", @@ -2291,7 +2252,8 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "concat-stream": { "version": "1.6.2", @@ -2401,12 +2363,6 @@ "date-now": "^0.1.4" } }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "optional": true - }, "constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", @@ -2499,7 +2455,8 @@ "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true }, "cosmiconfig": { "version": "5.2.1", @@ -2878,7 +2835,8 @@ "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true }, "deep-is": { "version": "0.1.3", @@ -3035,12 +2993,6 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", - "optional": true - }, "diff": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz", @@ -3975,15 +3927,6 @@ "readable-stream": "^2.0.0" } }, - "fs-minipass": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.6.tgz", - "integrity": "sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ==", - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, "fs-write-stream-atomic": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", @@ -3999,7 +3942,8 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, "fsevents": { "version": "2.0.7", @@ -4020,22 +3964,6 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, "get-port": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.0.0.tgz", @@ -4075,6 +4003,7 @@ "version": "7.1.4", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -4181,12 +4110,6 @@ "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", "dev": true }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "optional": true - }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -4397,15 +4320,6 @@ "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", "dev": true }, - "ignore-walk": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", - "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, "import-fresh": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", @@ -4466,6 +4380,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -4479,7 +4394,8 @@ "ini": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true }, "inquirer": { "version": "6.5.0", @@ -4760,15 +4676,6 @@ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, "is-generator-function": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.7.tgz", @@ -5273,17 +5180,6 @@ "type-check": "~0.3.2" } }, - "libxmljs": { - "version": "0.19.5", - "resolved": "https://registry.npmjs.org/libxmljs/-/libxmljs-0.19.5.tgz", - "integrity": "sha512-mKlafbSIsgZCXcha6loyMN/Q1kcbNJ5N3VC/rS0vrJXdI99TzEI2i2rPp10HN/B70vSPh6bq6nHhoCT19eGtTw==", - "optional": true, - "requires": { - "bindings": "~1.3.0", - "nan": "~2.10.0", - "node-pre-gyp": "~0.11.0" - } - }, "load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", @@ -5729,6 +5625,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -5736,7 +5633,8 @@ "minimist": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true }, "minimist-options": { "version": "3.0.2", @@ -5756,25 +5654,6 @@ } } }, - "minipass": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", - "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", - "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, "mississippi": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", @@ -5839,6 +5718,7 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, "requires": { "minimist": "0.0.8" } @@ -5898,12 +5778,6 @@ "thenify-all": "^1.0.0" } }, - "nan": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", - "optional": true - }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -5929,37 +5803,6 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, - "needle": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz", - "integrity": "sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==", - "optional": true, - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } - } - }, "negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", @@ -6016,24 +5859,6 @@ } } }, - "node-pre-gyp": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz", - "integrity": "sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==", - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, "node-releases": { "version": "1.1.26", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.26.tgz", @@ -6043,16 +5868,6 @@ "semver": "^5.3.0" } }, - "nopt": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", - "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -6083,22 +5898,6 @@ "integrity": "sha512-0NLtR71o4k6GLP+mr6Ty34c5GA6CMoEsncKJxvQd8NzPxaHRJNnb5gZE8R1XF4CPIS7QPHLJ74IFszwtNVAHVQ==", "dev": true }, - "npm-bundled": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz", - "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==", - "optional": true - }, - "npm-packlist": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.4.tgz", - "integrity": "sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw==", - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", @@ -6108,18 +5907,6 @@ "path-key": "^2.0.0" } }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, "nth-check": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", @@ -6135,12 +5922,6 @@ "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", "dev": true }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "optional": true - }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -6273,6 +6054,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "requires": { "wrappy": "1" } @@ -6376,26 +6158,11 @@ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", "dev": true }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "optional": true - }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true }, "p-any": { "version": "1.1.0", @@ -7548,7 +7315,8 @@ "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true }, "progress": { "version": "2.0.3", @@ -7700,6 +7468,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, "requires": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -7710,7 +7479,8 @@ "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true } } }, @@ -7824,6 +7594,7 @@ "version": "2.3.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -7837,12 +7608,14 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true } } }, @@ -8115,6 +7888,7 @@ "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, "requires": { "glob": "^7.1.3" } @@ -8255,7 +8029,8 @@ "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true }, "schema-utils": { "version": "1.0.0", @@ -8299,12 +8074,6 @@ "integrity": "sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA==", "dev": true }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "optional": true - }, "set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", @@ -8382,7 +8151,8 @@ "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true }, "simple-swizzle": { "version": "0.2.2", @@ -8770,21 +8540,11 @@ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", "dev": true }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, "requires": { "safe-buffer": "~5.1.0" }, @@ -8792,19 +8552,11 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true } } }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", @@ -8835,7 +8587,8 @@ "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true }, "stylehacks": { "version": "4.0.3", @@ -9014,21 +8767,6 @@ "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", "dev": true }, - "tar": { - "version": "4.4.10", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.10.tgz", - "integrity": "sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA==", - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.5", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - } - }, "term-size": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", @@ -9570,7 +9308,8 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true }, "util.promisify": { "version": "1.0.0", @@ -10564,15 +10303,6 @@ "isexe": "^2.0.0" } }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, "widest-line": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", @@ -10633,7 +10363,8 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "write": { "version": "1.0.3", @@ -10677,7 +10408,8 @@ "yallist": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "dev": true }, "yaml": { "version": "1.6.0", diff --git a/package.json b/package.json index e0f9816..e9b1f37 100644 --- a/package.json +++ b/package.json @@ -34,16 +34,12 @@ "seedrandom": "^3.0.1", "yaml": "^1.6.0" }, - "optionalDependencies": { - "libxmljs": "^0.19.5" - }, "devDependencies": { "@types/jsonwebtoken": "^8.3.2", "@types/koa": "^2.0.49", "@types/koa-compress": "^2.0.9", "@types/koa-router": "^7.0.42", "@types/koa-static": "^4.0.1", - "@types/libxmljs": "^0.18.3", "@types/mithril": "^2.0.0", "@types/mongodb": "^3.1.31", "@types/parsimmon": "^1.10.0",