├── .npmignore ├── .gitignore ├── cli-index.js ├── .prettierrc.js ├── src ├── log.ts ├── soap │ ├── xmlUtils.ts │ ├── serverUtils.ts │ ├── ocppSoap.ts │ ├── nodeSoapUtils.ts │ └── wsdl │ │ └── 15 │ │ ├── ocpp_centralsystemservice_1.5_final.wsdl │ │ └── ocpp_chargepointservice_1.5_final.wsdl ├── chargerSimulatorCli.ts └── ChargerSimulator.ts ├── tsconfig.json ├── package.json ├── LICENSE ├── README.md └── yarn.lock /.npmignore: -------------------------------------------------------------------------------- 1 | .idea 2 | node_modules 3 | *.iml -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | /dist 3 | *.iml 4 | node_modules -------------------------------------------------------------------------------- /cli-index.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | require("./dist/chargerSimulatorCli.js") -------------------------------------------------------------------------------- /.prettierrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | printWidth: 100, 3 | semi: false, 4 | trailingComma: "es5", 5 | bracketSpacing: false, 6 | htmlWhitespaceSensitivity: "ignore", 7 | }; 8 | -------------------------------------------------------------------------------- /src/log.ts: -------------------------------------------------------------------------------- 1 | export const log = { 2 | info: (s, ...rest) => console.log(`[info] ${s}`, ...rest), 3 | debug: (s, ...rest) => console.log(`[debug] ${s}`, ...rest), 4 | error: (s, ...rest) => console.log(`[error] ${s}`, ...rest), 5 | } 6 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "module": "CommonJS", 5 | "outDir": "dist", 6 | "esModuleInterop": true, 7 | "lib": [ 8 | "es6" 9 | ], 10 | "declaration": true 11 | }, 12 | "include": ["src/**/*.ts"] 13 | } -------------------------------------------------------------------------------- /src/soap/xmlUtils.ts: -------------------------------------------------------------------------------- 1 | import {Builder, parseString} from "xml2js" 2 | 3 | export async function prettyPrintXml(xml): Promise { 4 | return new Promise((resolve, reject) => { 5 | parseString(xml, (err, parsed) => { 6 | if (err) { 7 | reject(err) 8 | return 9 | } 10 | 11 | try { 12 | const formatted = new Builder({headless: true}).buildObject(parsed) 13 | 14 | resolve("\n" + formatted.replace(/n\/ \n/g)) 15 | } catch (e) { 16 | reject(e) 17 | } 18 | }) 19 | }) 20 | } 21 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "charger-simulator", 3 | "version": "1.0.3", 4 | "main": "dist/index.js", 5 | "bin": { 6 | "charger-simulator": "cli-index.js" 7 | }, 8 | "types": "dist/index.d.ts", 9 | "scripts": { 10 | "start": "ts-node src/chargerSimulatorCli.ts", 11 | "prepublishOnly": "tsc", 12 | "build": "tsc", 13 | "docs": "typedoc --out docs ./src" 14 | }, 15 | "license": "MIT", 16 | "devDependencies": { 17 | "@types/node": "16", 18 | "prettier": "^3.1.1", 19 | "ts-node": "^10.9.2", 20 | "typescript": "^5.3.3" 21 | }, 22 | "repository": "https://github.com/vasyas/charger-simulator.git", 23 | "author": "Vasyl Stashuk ", 24 | "publishConfig": { 25 | "access": "public" 26 | }, 27 | "dependencies": { 28 | "@push-rpc/core": "^1.8.3", 29 | "@push-rpc/websocket": "^1.8.3", 30 | "@types/ws": "^8.5.10", 31 | "command-line-args": "^5.1.1", 32 | "command-line-usage": "^6.1.0", 33 | "strong-soap": "1.21.0", 34 | "ws": "^8.16.0", 35 | "xml2js": "^0.4.23" 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Vasyl Stashuk 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/soap/serverUtils.ts: -------------------------------------------------------------------------------- 1 | export type Invoker = (impl, name, ...args) => any 2 | 3 | export function proxy(target: T, invoker: Invoker, keys: string[]): T { 4 | const r = {...(target as any)} 5 | 6 | keys.forEach((key) => { 7 | r[key] = function (...args) { 8 | const impl = target[key] 9 | return invoker(impl, key, ...args) 10 | } 11 | }) 12 | 13 | return r as any 14 | } 15 | 16 | export function proxify(target: object, invoker: Invoker, keys: string[]): void { 17 | keys.forEach((key) => { 18 | const impl = target[key] 19 | 20 | target[key] = function (...args) { 21 | return invoker(impl, key, ...args) 22 | } 23 | }) 24 | } 25 | 26 | export function convertDateToString(message, format) { 27 | if (!message) return message 28 | 29 | Object.keys(message).forEach((key) => { 30 | const prop = message[key] 31 | 32 | if (typeof prop != "object") return 33 | 34 | if (prop instanceof Date) { 35 | message[key] = format(prop) 36 | return 37 | } 38 | 39 | if (!Array.isArray(prop)) return convertDateToString(prop, format) 40 | 41 | for (let i = 0; i < prop.length; i++) { 42 | convertDateToString(prop[i], format) 43 | } 44 | }) 45 | 46 | return message 47 | } 48 | 49 | export function convertStringToDate(message, match, parse) { 50 | if (!message) return message 51 | 52 | Object.keys(message).forEach((key) => { 53 | const prop = message[key] 54 | 55 | if (!prop) return 56 | 57 | if (typeof prop == "string") { 58 | if (match(prop)) message[key] = parse(prop) 59 | 60 | return 61 | } 62 | 63 | if (typeof prop != "object") return 64 | 65 | if (!Array.isArray(prop)) return convertStringToDate(prop, match, parse) 66 | 67 | for (let i = 0; i < prop.length; i++) { 68 | convertStringToDate(prop[i], match, parse) 69 | } 70 | }) 71 | 72 | return message 73 | } 74 | 75 | export const ISO8601 = /^\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d.\d\d\dZ$/ 76 | export const ISO8601_secs = /^\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\dZ$/ 77 | export const ISO8601_date = /^\d\d\d\d-\d\d-\d\d$/ -------------------------------------------------------------------------------- /src/soap/ocppSoap.ts: -------------------------------------------------------------------------------- 1 | // SOAP bindings for OCPP 1.5 2 | 3 | import * as path from "path" 4 | import * as UUID from "uuid-js" 5 | import {createClient, createServer, getClientKeys, promisifyServer} from "./nodeSoapUtils" 6 | import { proxy } from "./serverUtils" 7 | 8 | export function createChargePointServer(target, port) { 9 | const keys = Object.keys(target) 10 | 11 | const a = promisifyServer(target, keys) 12 | 13 | const soapService = { 14 | ChargePointService: { 15 | ChargePointServiceSoap12: a, 16 | }, 17 | } 18 | 19 | return createServer({ 20 | wsdlFile: path.resolve(__dirname, "wsdl", "15", "ocpp_chargepointservice_1.5_final.wsdl"), 21 | 22 | path: "/", 23 | port, 24 | soapService, 25 | }) 26 | } 27 | 28 | export async function createCentralSystemClient( 29 | endpoint, 30 | chargeBoxIdentity, 31 | chargeBoxEndpoint 32 | ): Promise { 33 | const client = await createClient( 34 | chargeBoxIdentity, 35 | path.resolve(__dirname, "wsdl", "15", "ocpp_centralsystemservice_1.5_final.wsdl"), 36 | endpoint 37 | ) 38 | return withSetWsAddressingHeaders( 39 | client, 40 | chargeBoxIdentity, 41 | chargeBoxEndpoint, 42 | endpoint, 43 | getClientKeys(client), 44 | "urn://Ocpp/Cs/2012/06/" 45 | ) 46 | } 47 | 48 | function withSetWsAddressingHeaders( 49 | target, 50 | chargeBoxIdentity, 51 | fromEndPoint, 52 | toEndPoint, 53 | keys, 54 | idNs 55 | ) { 56 | const wsa = `xmlns:a="http://www.w3.org/2005/08/addressing"` 57 | 58 | return proxy( 59 | target, 60 | (impl, key, ...args) => { 61 | target.clearSoapHeaders() 62 | 63 | const action = "/" + key 64 | const uuid = UUID.create() 65 | 66 | target.addSoapHeader( 67 | `${chargeBoxIdentity}` 68 | ) 69 | target.addSoapHeader(`urn:uuid:${uuid}`) 70 | target.addSoapHeader(`${fromEndPoint}`) 71 | target.addSoapHeader( 72 | `http://www.w3.org/2005/08/addressing/anonymous` 73 | ) 74 | target.addSoapHeader(`${toEndPoint}`) 75 | target.addSoapHeader(`${action}`) 76 | 77 | return impl(...args) 78 | }, 79 | keys 80 | ) 81 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | EV charger simulator. Supports OCPP/J version 1.6 and OCPP/SOAP version 1.5. 2 | Can be used as CLI program, or as library in any JS environment. 3 | 4 | # CLI usage 5 | 6 | ## Getting started 7 | 8 | Install in project 9 | ``` 10 | yarn add vasyas/charger-simulator 11 | ``` 12 | 13 | or globally 14 | ``` 15 | yarn global add vasyas/charger-simulator 16 | ``` 17 | 18 | Then launch it with command 19 | ``` 20 | charger-simulator 21 | ``` 22 | 23 | You can also run from a cloned git repository 24 | ``` 25 | yarn start 26 | ``` 27 | 28 | On successfull launch, you will get this message 29 | 30 | ``` 31 | debug] OCPP connected 32 | [info] Connected to Central System 33 | [info] Supported keys: 34 | Ctrl+C: quit 35 | 36 | Control connector 1 37 | --- 38 | a: send Available status 39 | p: send Preparing status 40 | c: send Charging status 41 | f: send Finishing status 42 | ``` 43 | 44 | You can press keys to send connector status updates to central server. 45 | 46 | ## CLI options 47 | ``` 48 | charger-simulator 49 | 50 | Start OCPP charging station simulator, connect simulator to Central System 51 | server. 52 | 53 | Options 54 | 55 | -s, --csURL URL URL of the Central System server to connect to, ws://server.name/path. 56 | This is also a default option. 57 | -i, --chargerId ChargerId OCPP ID to be used for simulating charger. 58 | Default is 'test'. 59 | -c, --connectorId ConnectorId ID of the connector to send status when pressing keys. 60 | Defaults to 1. 61 | -t, --idTag idTag ID Tag to start transaction. 62 | Defaults to 123456. 63 | -u, --username username Username for Basic Authentication 64 | -w, --password password Password for Basic Authentication 65 | ``` 66 | 67 | ## Default behavior 68 | 69 | By default simulator implements following OCPP operations. 70 | 71 | *RemoteStartTransaction*. Will successfully start new transaction. Call RemoteStartTransaction by server 72 | will result in StartTransaction and multiple MeterValues to be sent to central system. 73 | 74 | *RemoteStopTransaction*. Will stop running transaction. 75 | 76 | *GetConfiguration*. Return charge point configuration. 77 | 78 | *ChangeConfiguration*. Change charge point configuration. 79 | 80 | *ChangeAvailability, ClearCache, ReserveNow, CancelReservation, Reset*. Return 'Accepted', but do nothing. 81 | 82 | All other methods are not implemented. 83 | 84 | # Library usage 85 | 86 | ## Getting started 87 | TBD 88 | 89 | ## API 90 | TBD 91 | 92 | -------------------------------------------------------------------------------- /src/soap/nodeSoapUtils.ts: -------------------------------------------------------------------------------- 1 | import * as fs from "fs" 2 | import * as http from "http" 3 | import {soap} from "strong-soap" 4 | import {convertDateToString, convertStringToDate, ISO8601, ISO8601_secs, proxify, proxy,} from "./serverUtils" 5 | import {prettyPrintXml} from "./xmlUtils" 6 | import {log} from "../log" 7 | 8 | let server = null 9 | 10 | export function createServer({ 11 | wsdlFile, 12 | soapService, 13 | path, 14 | port, 15 | }): Promise { 16 | const wsdl = fs.readFileSync(wsdlFile, "utf8") 17 | 18 | return new Promise((resolve, reject) => { 19 | const createServer = () => { 20 | server = http.createServer((request, response) => { 21 | response.end(`404: Not Found: ${request.url}`) 22 | }) 23 | 24 | server.listen(port, () => { 25 | log.info(`OCPP Server is listening on port ${port}`) 26 | resolve(server) 27 | }) 28 | 29 | const soapServer = soap.listen(server, path, soapService, wsdl) 30 | soapServer.log = soapServerLog 31 | } 32 | 33 | if (server) { 34 | server.close(createServer) 35 | } else { 36 | createServer() 37 | } 38 | }) 39 | } 40 | 41 | export async function createClient(chargeBoxId, wsdlFile, endpoint): Promise { 42 | return new Promise((resolve, reject) => { 43 | soap.createClient(wsdlFile, {endpoint, attributesKey: "attributes"}, (err, client) => { 44 | if (err) reject(err) 45 | else { 46 | const keys = getClientKeys(client) 47 | 48 | promisifyClient(chargeBoxId, client, keys) 49 | resolve(client) 50 | } 51 | }) 52 | }) 53 | } 54 | 55 | export function getClientKeys(client): string[] { 56 | const d = client.describe() 57 | 58 | const service = d[Object.keys(d)[0]] 59 | const binding = service[Object.keys(service)[0]] 60 | 61 | return Object.keys(binding) 62 | } 63 | 64 | function uncap(s) { 65 | return s[0].toLowerCase() + s.substring(1) 66 | } 67 | 68 | function promisifyClient(chargeBoxId, target, keys) { 69 | target.on("request", (envelope) => { 70 | logOcppRequest(chargeBoxId, envelope) 71 | }) 72 | 73 | proxify( 74 | target, 75 | (impl, key, message) => { 76 | return new Promise((resolve, reject) => { 77 | const inputMessage = wrapMessage(key, soapDateToString(message), "Request") 78 | 79 | impl(inputMessage, (err, result, envelope) => { 80 | logOcppResponse(chargeBoxId, envelope) 81 | 82 | if (err) { 83 | const e = err.Fault ? err.Fault : err 84 | log.error(`Failed to call ${key}`, e) 85 | reject(e) 86 | } else { 87 | resolve(result) 88 | } 89 | }) 90 | }) 91 | }, 92 | keys 93 | ) 94 | } 95 | 96 | // see https://github.com/strongloop/strong-soap/issues/49 97 | // see https://github.com/strongloop/strong-soap/issues/113 98 | function wrapMessage(operationName, message, wrapperName) { 99 | return { 100 | [uncap(operationName) + wrapperName]: message, 101 | } 102 | } 103 | 104 | function soapDateToString(message) { 105 | return convertDateToString(message, (d) => d.toISOString()) 106 | } 107 | 108 | function soapStringToDate(message) { 109 | return convertStringToDate( 110 | message, 111 | (s) => ISO8601.test(s) || ISO8601_secs.test(s), 112 | (s) => new Date(s) 113 | ) 114 | } 115 | 116 | /** Convert promise-based WS impl to node-soap compat, also date fixes */ 117 | export function promisifyServer(target, keys) { 118 | return proxy( 119 | target, 120 | (impl, key, args, callback, headers, req) => { 121 | const promise = impl(soapStringToDate(args), headers, req) 122 | 123 | promise 124 | .then((r) => { 125 | callback(wrapMessage(key, soapDateToString(r), "Response")) 126 | }) 127 | .catch((e) => { 128 | log.error(`Failed to serve ${key}`, e.Fault ? e.Fault : e) 129 | 130 | callback(null, { 131 | Fault: { 132 | Code: { 133 | Value: "soap:Sender", 134 | Subcode: {value: "rpc:BadArguments"}, 135 | }, 136 | Reason: {Text: "Processing Error"}, 137 | }, 138 | }) 139 | }) 140 | }, 141 | keys 142 | ) 143 | } 144 | 145 | function soapServerLog(type, data) { 146 | if (type == "error") log.error(data) 147 | } 148 | 149 | export async function logOcppRequest(chargeBoxId, envelope) { 150 | if (process.env.noRequestLogging) return 151 | const details = await prettyPrintXml(envelope) 152 | log.debug("OCPP out", details) 153 | 154 | } 155 | 156 | export async function logOcppResponse(chargeBoxId, envelope) { 157 | if (process.env.noRequestLogging) return 158 | const details = await prettyPrintXml(envelope) 159 | log.debug("OCPP in", details) 160 | } 161 | -------------------------------------------------------------------------------- /src/chargerSimulatorCli.ts: -------------------------------------------------------------------------------- 1 | import commandLineArgs from "command-line-args" 2 | import commandLineUsage from "command-line-usage" 3 | import readline from "readline" 4 | 5 | import {log} from "./log" 6 | import {ChargerSimulator} from "./ChargerSimulator" 7 | 8 | const optionList = [ 9 | { 10 | name: "csURL", 11 | type: String, 12 | description: 13 | "URL of the Central System server to connect to, ws://server.name/path.\nThis is also a default option.", 14 | typeLabel: "{underline URL}", 15 | alias: "s", 16 | defaultOption: true, 17 | }, 18 | { 19 | name: "cpPort", 20 | type: Number, 21 | description: 22 | "Port number to bind ChargePoint SOAP service. If specified, emulator will use SOAP protocol to connect to Central System, otherwise, WebSocket will be used", 23 | typeLabel: "{underline Number}", 24 | alias: "p", 25 | }, 26 | { 27 | name: "chargerId", 28 | type: String, 29 | description: "OCPP ID to be used for simulating charger.\nDefault is 'test'.", 30 | typeLabel: "{underline ChargerId}", 31 | alias: "i", 32 | defaultValue: "test", 33 | }, 34 | { 35 | name: "connectorId", 36 | type: String, 37 | description: "ID of the connector to send status when pressing keys.\nDefaults to 1.", 38 | typeLabel: "{underline ConnectorId}", 39 | alias: "c", 40 | defaultValue: 1, 41 | }, 42 | { 43 | name: "idTag", 44 | type: String, 45 | description: "ID Tag to start transaction.\nDefaults to 123456.", 46 | typeLabel: "{underline idTag}", 47 | alias: "t", 48 | defaultValue: "12345678", 49 | }, 50 | { 51 | name: "username", 52 | type: String, 53 | description: "Username for Basic Authentication", 54 | typeLabel: "{underline username}", 55 | alias: "u", 56 | }, 57 | { 58 | name: "password", 59 | type: String, 60 | description: "Password for Basic Authentication", 61 | typeLabel: "{underline password}", 62 | alias: "w", 63 | }, 64 | ] 65 | 66 | const usageSections = [ 67 | { 68 | header: "charger-simulator", 69 | content: "Start OCPP charging station simulator, connect simulator to Central System server.", 70 | }, 71 | { 72 | header: "Options", 73 | optionList, 74 | }, 75 | ] 76 | 77 | ;(async () => { 78 | const {connectorId, csURL, cpPort, chargerId, idTag, username, password} = 79 | commandLineArgs(optionList) 80 | 81 | if (!connectorId || !csURL || !chargerId) { 82 | const usage = commandLineUsage(usageSections) 83 | console.log(usage) 84 | return 85 | } 86 | 87 | log.info("Starting charger simulator", { 88 | csURL, 89 | connectorId, 90 | chargerId, 91 | idTag, 92 | }) 93 | 94 | const simulator = new ChargerSimulator({ 95 | centralSystemEndpoint: csURL, 96 | chargerIdentity: chargerId, 97 | chargePointPort: cpPort, 98 | username, 99 | password, 100 | }) 101 | await simulator.start() 102 | 103 | log.info(`Supported keys: 104 | Ctrl+C: quit 105 | 106 | -- 107 | b: send BootNotification 108 | o: send BootNotification with optional parameters 109 | d: send DataTransfer 110 | i: disconnect from Central System 111 | 112 | Connector ${connectorId} status 113 | --- 114 | a: send Available status 115 | p: send Preparing status 116 | c: send Charging status 117 | e: send SuspendedEV status 118 | f: send Finishing status 119 | 120 | Transaction on connector ${connectorId}, tag ${idTag} 121 | -- 122 | u: Authorize 123 | s: StartTransaction 124 | t: StopTransaction 125 | `) 126 | 127 | async function sendStatus(status: string) { 128 | await simulator.centralSystem.StatusNotification({ 129 | connectorId: connectorId, 130 | errorCode: "NoError", 131 | status, 132 | }) 133 | } 134 | 135 | const commands = { 136 | b: () => 137 | simulator.centralSystem.BootNotification({ 138 | chargePointVendor: "OC", 139 | chargePointModel: "OCX", 140 | }), 141 | o: () => 142 | simulator.centralSystem.BootNotification({ 143 | chargePointVendor: "OC", 144 | chargePointModel: "OCX", 145 | chargePointSerialNumber: "1234-5678", 146 | meterSerialNumber: "1234-5678-AA-BB", 147 | firmwareVersion: "AA-001", 148 | iccid: "OMEGA-PEPEGA", 149 | imsi: "ENERGY-001", 150 | }), 151 | d: () => 152 | simulator.centralSystem.DataTransfer({ 153 | vendorId: "Emulator", 154 | messageId: "MessageID", 155 | data: "Data", 156 | }), 157 | 158 | i: () => simulator.disconnect(), 159 | 160 | a: () => sendStatus("Available"), 161 | p: () => sendStatus("Preparing"), 162 | c: () => sendStatus("Charging"), 163 | e: () => sendStatus("SuspendedEV"), 164 | f: () => sendStatus("Finishing"), 165 | 166 | u: () => simulator.centralSystem.Authorize({idTag}), 167 | s: () => simulator.startTransaction({idTag, connectorId}, false), 168 | t: () => simulator.stopTransaction(false), 169 | } 170 | 171 | readline.emitKeypressEvents(process.stdin) 172 | process.stdin.setRawMode(true) 173 | 174 | process.stdin.on("keypress", (ch, key) => { 175 | if (key.ctrl && key.name === "c") { 176 | process.exit() 177 | } 178 | 179 | if (ch) { 180 | const command = commands[ch] 181 | command && command() 182 | } 183 | }) 184 | })() 185 | -------------------------------------------------------------------------------- /src/ChargerSimulator.ts: -------------------------------------------------------------------------------- 1 | import {createRpcClient} from "@push-rpc/core" 2 | import {wrapWebsocket} from "@push-rpc/websocket/dist/server" 3 | import WebSocket from "ws" 4 | import {log} from "./log" 5 | import {createCentralSystemClient, createChargePointServer} from "./soap/ocppSoap" 6 | 7 | export interface Config { 8 | defaultHeartbeatIntervalSec?: number 9 | chargePointVendor?: string 10 | chargePointModel?: string 11 | startDelayMs?: number 12 | stopDelayMs?: number 13 | keepAliveTimeoutMs?: number // set to null to disable pings 14 | meterValuesIntervalSec?: number 15 | 16 | centralSystemEndpoint: string 17 | chargerIdentity: string 18 | chargePointPort?: number 19 | username?: string 20 | password?: string 21 | } 22 | 23 | const defaultConfig: Partial = { 24 | defaultHeartbeatIntervalSec: 30, 25 | chargePointVendor: "Test", 26 | chargePointModel: "1", 27 | startDelayMs: 8 * 1000, 28 | stopDelayMs: 8 * 1000, 29 | keepAliveTimeoutMs: 50 * 1000, 30 | meterValuesIntervalSec: 20, 31 | } 32 | 33 | let ws: WebSocket 34 | 35 | export class ChargerSimulator { 36 | constructor(config: Config) { 37 | this.config = {...defaultConfig, ...config} 38 | 39 | this.configurationKeys = [ 40 | {key: "HeartBeatInterval", readonly: false, value: "" + config.defaultHeartbeatIntervalSec}, 41 | {key: "ResetRetries", readonly: false, value: "1"}, 42 | {key: "MeterValueSampleInterval", readonly: false, value: config.meterValuesIntervalSec}, 43 | ] 44 | } 45 | 46 | public async start() { 47 | if (this.config.chargePointPort) { 48 | await createChargePointServer(this.chargePoint, this.config.chargePointPort) 49 | log.info( 50 | `Started SOAP Charge Point server at http://localhost:${this.config.chargePointPort}/` 51 | ) 52 | 53 | this.centralSystem = await createCentralSystemClient( 54 | this.config.centralSystemEndpoint, 55 | this.config.chargerIdentity, 56 | `http://localhost:${this.config.chargePointPort}/` 57 | ) 58 | log.info(`Will send messages to Central System at ${this.config.centralSystemEndpoint}`) 59 | } else { 60 | const {username, password} = this.config 61 | const {remote} = await createRpcClient( 62 | async () => { 63 | ws = new WebSocket( 64 | this.config.centralSystemEndpoint + "/" + this.config.chargerIdentity, 65 | "ocpp1.6", 66 | { 67 | auth: username && password ? `${username}:${password}` : undefined, 68 | } 69 | ) 70 | 71 | return wrapWebsocket(ws) 72 | }, 73 | { 74 | local: this.chargePoint, 75 | reconnect: true, 76 | keepAliveTimeout: this.config.keepAliveTimeoutMs, 77 | 78 | listeners: { 79 | messageIn: (data) => { 80 | log.debug("OCPP in", data) 81 | }, 82 | messageOut: (data) => { 83 | log.debug("OCPP out", data) 84 | }, 85 | connected() { 86 | log.debug("OCPP connected") 87 | }, 88 | disconnected({code, reason}) { 89 | log.debug("OCPP disconnected", {code, reason}) 90 | }, 91 | subscribed(subscriptions: number): void {}, 92 | unsubscribed(subscriptions: number): void {}, 93 | }, 94 | } 95 | ) 96 | 97 | log.info( 98 | `Connected to Central System at ${this.config.centralSystemEndpoint} using WebSocket` 99 | ) 100 | 101 | this.centralSystem = remote 102 | } 103 | 104 | if (this.config.defaultHeartbeatIntervalSec) { 105 | setInterval(() => { 106 | this.centralSystem.Heartbeat() 107 | }, this.config.defaultHeartbeatIntervalSec * 1000) 108 | } 109 | } 110 | 111 | public startTransaction({connectorId, idTag}, delay) { 112 | if (this.meterTimer) { 113 | return false 114 | } 115 | 116 | setTimeout( 117 | async () => { 118 | this.transactionId = ( 119 | await this.centralSystem.StartTransaction({ 120 | connectorId, 121 | idTag, 122 | timestamp: new Date(), 123 | meterStart: 0, 124 | }) 125 | ).transactionId 126 | 127 | this.charged = 0 128 | 129 | this.meterTimer = setInterval(() => { 130 | this.charged += Math.random() > 0.66 ? 30 : 20 // 26.6 W / 10s avg = 9.36 Kw 131 | 132 | this.centralSystem.MeterValues({ 133 | connectorId, 134 | transactionId: this.transactionId, 135 | meterValue: [ 136 | { 137 | timestamp: new Date(), 138 | sampledValue: [ 139 | { 140 | value: "" + this.charged, 141 | measurand: "Energy.Active.Import.Register", 142 | unit: "Wh", 143 | }, 144 | { 145 | value: "38", 146 | measurand: "SoC", 147 | unit: "Percent", 148 | }, 149 | ], 150 | }, 151 | ], 152 | }) 153 | }, this.config.meterValuesIntervalSec * 1000) 154 | }, 155 | delay ? this.config.startDelayMs : 0 156 | ) 157 | 158 | return true 159 | } 160 | 161 | public stopTransaction(delay) { 162 | if (!this.meterTimer) { 163 | return false 164 | } 165 | 166 | clearInterval(this.meterTimer) 167 | 168 | setTimeout( 169 | async () => { 170 | await this.centralSystem.StopTransaction({ 171 | transactionId: this.transactionId, 172 | timestamp: new Date(), 173 | meterStop: this.charged, 174 | }) 175 | 176 | this.meterTimer = null 177 | this.transactionId = null 178 | }, 179 | delay ? this.config.stopDelayMs : 0 180 | ) 181 | 182 | return true 183 | } 184 | 185 | disconnect() { 186 | ws.close() 187 | } 188 | 189 | public centralSystem = null 190 | 191 | private config: Config = null 192 | private meterTimer = null 193 | private charged = 0 194 | private configurationKeys = [] 195 | private transactionId = null 196 | private chargePoint = { 197 | RemoteStartTransaction: async (req) => { 198 | return { 199 | status: this.startTransaction(req, true) ? "Accepted" : "Rejected", 200 | // status: "Rejected", 201 | } 202 | }, 203 | 204 | RemoteStopTransaction: async (req) => { 205 | return { 206 | status: this.stopTransaction(true) ? "Accepted" : "Rejected", 207 | } 208 | }, 209 | 210 | GetConfiguration: async (req) => { 211 | await new Promise((r) => setTimeout(r, 2000)) 212 | 213 | return {configurationKey: this.configurationKeys} 214 | }, 215 | ChangeConfiguration: async (req) => { 216 | for (let i = 0; i < this.configurationKeys.length; i++) { 217 | if (this.configurationKeys[i].key == req.key) { 218 | this.configurationKeys[i].value = "" + req.value 219 | } 220 | } 221 | 222 | return {status: "Accepted"} 223 | }, 224 | 225 | ChangeAvailability: async (req) => { 226 | return {status: "Accepted"} 227 | }, 228 | 229 | ClearCache: async (req) => { 230 | return {status: "Accepted"} 231 | }, 232 | 233 | ReserveNow: async (req) => { 234 | return {status: "Accepted"} 235 | }, 236 | 237 | CancelReservation: async (req) => { 238 | return {status: "Accepted"} 239 | }, 240 | 241 | Reset: async (req) => { 242 | return {status: "Accepted"} 243 | }, 244 | 245 | TriggerMessage: async (req) => { 246 | return {status: "Accepted"} 247 | }, 248 | 249 | UpdateFirmware: async (req) => { 250 | return {status: "Accepted"} 251 | }, 252 | 253 | SetChargingProfile: async (req) => { 254 | log.info( 255 | "SetChargingProfile", 256 | req.csChargingProfiles?.chargingSchedule?.chargingSchedulePeriod?.[0]?.limit 257 | ) 258 | 259 | return {status: "Accepted"} 260 | }, 261 | } 262 | } 263 | -------------------------------------------------------------------------------- /src/soap/wsdl/15/ocpp_centralsystemservice_1.5_final.wsdl: -------------------------------------------------------------------------------- 1 | 2 | 10 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | Type of string defining identification token, e.g. RFID or credit card number. To be treated as case insensitive. 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | Defines the authorization-status-value 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | String type of max 25 chars that is to be treated as case insensitive. 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | String type of max 20 chars that is to be treated as case insensitive. 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | String type of max 25 chars that is to be treated as case insensitive. 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | String type of max 20 chars that is to be treated as case insensitive. 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | String type of max 50 chars that is to be treated as case insensitive. 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | String type of max 20 chars that is to be treated as case insensitive. 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | String type of max 20 chars that is to be treated as case insensitive. 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | String type of max 25 chars that is to be treated as case insensitive. 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | String type of max 25 chars that is to be treated as case insensitive. 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | Defines the Authorize.req PDU 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | Defines the Authorize.conf PDU 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | Defines the StartTransaction.req PDU 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | Defines the StartTransaction.conf PDU 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | This contains transaction usage details relevant for billing purposes in StopTransaction.req PDU 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | Defines the StopTransaction.req PDU 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | Defines the StopTransaction.conf PDU 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | Defines the Heartbeat.req PDU 223 | 224 | 225 | 226 | 227 | 228 | Defines the Heartbeat.conf PDU 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | Defines single value of the meter-value-value 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | Defines the MeterValues.req PDU 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | Defines the MeterValues.conf PDU 334 | 335 | 336 | 337 | 338 | 339 | Defines the BootNotification.req PDU 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | Defines the registration-status-value 357 | 358 | 359 | 360 | 361 | 362 | 363 | 364 | 365 | 366 | Defines the BootNotification.conf PDU 367 | 368 | 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | Defines the charge-point-error-value 378 | 379 | 380 | 381 | 382 | 383 | 384 | 385 | 386 | 387 | 388 | 389 | 390 | 391 | 392 | 393 | 394 | 395 | 396 | 397 | 398 | Defines the charge-point-status-value 399 | 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | Defines the StatusNotification.req PDU 412 | 413 | 414 | 415 | 416 | 417 | 418 | 419 | 420 | 421 | 422 | 423 | 424 | 425 | 426 | Defines the StatusNotification.conf PDU 427 | 428 | 429 | 430 | 431 | 432 | Defines the firmware-status-value 433 | 434 | 435 | 436 | 437 | 438 | 439 | 440 | 441 | 442 | 443 | 444 | Defines the FirmwareStatusNotification.req PDU 445 | 446 | 447 | 448 | 449 | 450 | 451 | 452 | 453 | Defines the FirmwareStatusNotification.conf PDU 454 | 455 | 456 | 457 | 458 | 459 | Defines the diagnostics-status-value 460 | 461 | 462 | 463 | 464 | 465 | 466 | 467 | 468 | 469 | Defines the DiagnosticsStatusNotification.req PDU 470 | 471 | 472 | 473 | 474 | 475 | 476 | 477 | 478 | Defines the DiagnosticsStatusNotification.conf PDU 479 | 480 | 481 | 482 | 483 | 484 | Defines the DataTransfer.req PDU 485 | 486 | 487 | 488 | 489 | 490 | 491 | 492 | 493 | 494 | 495 | Defines the status returned in DataTransfer.conf 496 | 497 | 498 | 499 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | Defines the DataTransfer.conf PDU 508 | 509 | 510 | 511 | 512 | 513 | 514 | 515 | 516 | 517 | 518 | 519 | 520 | 521 | 522 | 523 | 524 | 525 | 526 | 527 | 528 | 529 | 530 | 531 | 532 | 533 | 534 | 535 | 536 | 537 | 538 | 539 | 540 | 541 | 542 | 543 | 544 | 545 | 546 | 547 | 548 | 549 | 550 | 551 | 552 | 553 | 554 | 555 | 556 | 557 | 558 | 559 | 560 | 561 | 562 | 563 | 564 | 565 | 566 | 567 | 568 | 569 | 570 | 571 | 572 | 573 | 574 | 575 | 576 | 577 | 578 | 579 | 580 | 581 | 582 | 583 | 584 | 585 | 586 | 587 | 588 | 589 | 590 | 591 | 592 | 593 | 594 | 595 | 596 | 597 | 598 | 599 | 600 | 601 | 602 | 603 | 604 | 605 | 606 | 607 | 608 | 609 | 610 | 611 | 612 | 613 | 614 | 615 | 616 | 617 | 618 | 619 | 620 | 621 | 622 | 623 | 624 | 625 | 626 | 627 | 628 | 629 | 630 | 631 | 632 | 633 | 634 | 635 | 636 | 637 | 638 | 639 | 640 | 641 | 642 | 643 | 644 | 645 | 646 | 647 | 648 | 649 | 650 | 651 | 652 | 653 | 654 | 655 | 656 | 657 | 658 | 659 | 660 | 661 | 662 | 663 | 664 | 665 | 666 | 667 | 668 | 669 | 670 | 671 | 672 | 673 | 674 | 675 | 676 | 677 | 678 | 679 | 680 | 681 | 682 | 683 | 684 | 685 | 686 | 687 | 688 | 689 | 690 | 691 | 692 | 693 | 694 | 695 | 696 | 697 | 698 | 699 | 700 | 701 | 702 | 703 | 704 | 705 | 706 | 707 | 708 | 709 | 710 | 711 | 712 | 713 | 714 | 715 | 716 | 717 | 718 | 719 | 720 | 721 | 722 | 723 | 724 | 725 | 726 | 727 | 728 | 729 | 730 | 731 | 732 | 733 | 734 | 735 | 736 | 737 | 738 | 739 | 740 | 741 | 742 | 743 | 744 | 745 | 746 | 747 | 748 | 749 | 750 | The Central System Service for the Open Charge Point Protocol 751 | 752 | 753 | 754 | 755 | 756 | 757 | -------------------------------------------------------------------------------- /src/soap/wsdl/15/ocpp_chargepointservice_1.5_final.wsdl: -------------------------------------------------------------------------------- 1 | 2 | 10 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | Type of string defining identification token, e.g. RFID or credit card number. To be treated as case insensitive. 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | Defines the authorization-status-value 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | Defines the unlock-status-value 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | Defines the UnlockConnector.req PDU 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | Defines the UnlockConnector.conf PDU 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | Defines the reset-type-value 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | Defines the Reset.req PDU 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | Defines the reset-status-value 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | Defines the availability-type-value 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | Defines the ChangeAvailability.req PDU 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | Defines the availability-status-value 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | Defines the ChangeAvailability.conf PDU 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | Defines the GetDiagnostics.req PDU 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | Defines the GetDiagnostics.conf PDU 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | Defines the ClearCache.req PDU 195 | 196 | 197 | 198 | 199 | 200 | Defines the clear-cache-status-value 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | Defines the ClearCache.conf PDU 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | Defines the ChangeConfiguration.req PDU 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | Defines the configuration-status-value 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | Defines the ChangeConfiguration.conf PDU 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | Defines the RemoteStartTransaction.req PDU 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | Defines the remote-start-stop-status-value 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | Defines the RemoteStartTransaction.conf PDU 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | Defines the RemoteStopTransaction.req PDU 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | Defines the RemoteStopTransaction.conf PDU 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | Defines the CancelReservation.req PDU 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | Defines the CancelReservation.conf PDU 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | Defines the DataTransfer.req PDU 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | Defines the status returned in DataTransfer.conf 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | Defines the DataTransfer.conf PDU 357 | 358 | 359 | 360 | 361 | 362 | 363 | 364 | 365 | 366 | Defines the GetConfiguration.req PDU 367 | 368 | 369 | 370 | 371 | 372 | 373 | 374 | 375 | Key-Value pairs returned by GetConfiguration.conf PDU 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | 384 | 385 | 386 | Defines the GetConfiguration.req PDU 387 | 388 | 389 | 390 | 391 | 392 | 393 | 394 | 395 | 396 | Defines the GetLocalListVersion.req PDU 397 | 398 | 399 | 400 | 401 | 402 | Defines the GetLocalListVersion.conf PDU 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | Defines the ReserveNow.req PDU 412 | 413 | 414 | 415 | 416 | 417 | 418 | 419 | 420 | 421 | 422 | 423 | 424 | 425 | 426 | 427 | 428 | 429 | 430 | 431 | 432 | 433 | 434 | Defines the ReserveNow.conf PDU 435 | 436 | 437 | 438 | 439 | 440 | 441 | 442 | 443 | 444 | 445 | 446 | 447 | 448 | 449 | 450 | 451 | 452 | 453 | 454 | 455 | 456 | 457 | Defines the SendLocalList.req PDU 458 | 459 | 460 | 461 | 462 | 463 | 464 | 465 | 466 | 467 | 468 | 469 | 470 | 471 | 472 | 473 | 474 | 475 | 476 | 477 | 478 | 479 | Defines the SendLocalList.conf PDU 480 | 481 | 482 | 483 | 484 | 485 | 486 | 487 | 488 | 489 | 490 | 491 | 492 | 493 | 494 | 495 | 496 | 497 | 498 | 499 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 509 | 510 | 511 | 512 | 513 | 514 | 515 | 516 | 517 | 518 | 519 | 520 | 521 | 522 | 523 | 524 | 525 | 526 | 527 | 528 | 529 | 530 | 531 | 532 | 533 | 534 | 535 | 536 | 537 | 538 | 539 | 540 | 541 | 542 | 543 | 544 | 545 | 546 | 547 | 548 | 549 | 550 | 551 | 552 | 553 | 554 | 555 | 556 | 557 | 558 | 559 | 560 | 561 | 562 | 563 | 564 | 565 | 566 | 567 | 568 | 569 | 570 | 571 | 572 | 573 | 574 | 575 | 576 | 577 | 578 | 579 | 580 | 581 | 582 | 583 | 584 | 585 | 586 | 587 | 588 | 589 | 590 | 591 | 592 | 593 | 594 | 595 | 596 | 597 | 598 | 599 | 600 | 601 | 602 | 603 | 604 | 605 | 606 | 607 | 608 | 609 | 610 | 611 | 612 | 613 | 614 | 615 | 616 | 617 | 618 | 619 | 620 | 621 | 622 | 623 | 624 | 625 | 626 | 627 | 628 | 629 | 630 | 631 | 632 | 633 | 634 | 635 | 636 | 637 | 638 | 639 | 640 | 641 | 642 | 643 | 644 | 645 | 646 | 647 | 648 | 649 | 650 | 651 | 652 | 653 | 654 | 655 | 656 | 657 | 658 | 659 | 660 | 661 | 662 | 663 | 664 | 665 | 666 | 667 | 668 | 669 | 670 | 671 | 672 | 673 | 674 | 675 | 676 | 677 | 678 | 679 | 680 | 681 | 682 | 683 | 684 | 685 | 686 | 687 | 688 | 689 | 690 | 691 | 692 | 693 | 694 | 695 | 696 | 697 | 698 | 699 | 700 | 701 | 702 | 703 | 704 | 705 | 706 | 707 | 708 | 709 | 710 | 711 | 712 | 713 | 714 | 715 | 716 | 717 | 718 | 719 | 720 | 721 | 722 | 723 | 724 | 725 | 726 | 727 | 728 | 729 | 730 | 731 | 732 | 733 | 734 | 735 | 736 | 737 | 738 | 739 | 740 | 741 | 742 | 743 | 744 | 745 | 746 | 747 | 748 | 749 | 750 | 751 | 752 | 753 | 754 | 755 | 756 | 757 | 758 | 759 | 760 | 761 | 762 | 763 | 764 | 765 | 766 | 767 | 768 | 769 | 770 | 771 | 772 | 773 | 774 | 775 | 776 | 777 | 778 | 779 | 780 | 781 | 782 | 783 | 784 | 785 | 786 | 787 | 788 | 789 | 790 | 791 | 792 | 793 | 794 | 795 | 796 | 797 | 798 | 799 | 800 | 801 | 802 | 803 | 804 | 805 | 806 | 807 | 808 | 809 | 810 | 811 | 812 | 813 | 814 | 815 | 816 | 817 | 818 | 819 | 820 | 821 | 822 | 823 | 824 | 825 | 826 | 827 | 828 | 829 | 830 | 831 | 832 | 833 | 834 | 835 | 836 | 837 | 838 | 839 | 840 | 841 | 842 | 843 | 844 | 845 | 846 | 847 | 848 | 849 | 850 | 851 | 852 | 853 | 854 | 855 | 856 | 857 | 858 | 859 | 860 | 861 | 862 | 863 | 864 | 865 | 866 | 867 | 868 | 869 | 870 | 871 | 872 | 873 | 874 | 875 | 876 | 877 | 878 | 879 | 880 | 881 | 882 | 883 | 884 | 885 | 886 | 887 | 888 | 889 | 890 | 891 | 892 | 893 | 894 | 895 | 896 | 897 | 898 | 899 | The ChargePoint Service for the Open Charge Point Protocol 900 | 901 | 902 | 903 | 904 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@cspotcode/source-map-support@^0.8.0": 6 | version "0.8.1" 7 | resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" 8 | integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== 9 | dependencies: 10 | "@jridgewell/trace-mapping" "0.3.9" 11 | 12 | "@jridgewell/resolve-uri@^3.0.3": 13 | version "3.1.1" 14 | resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" 15 | integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== 16 | 17 | "@jridgewell/sourcemap-codec@^1.4.10": 18 | version "1.4.15" 19 | resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" 20 | integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== 21 | 22 | "@jridgewell/trace-mapping@0.3.9": 23 | version "0.3.9" 24 | resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" 25 | integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== 26 | dependencies: 27 | "@jridgewell/resolve-uri" "^3.0.3" 28 | "@jridgewell/sourcemap-codec" "^1.4.10" 29 | 30 | "@push-rpc/core@^1.8.3": 31 | version "1.8.3" 32 | resolved "https://registry.npmjs.org/@push-rpc/core/-/core-1.8.3.tgz#d6d8bcdf99a915fa84a856f70be6b025ad586ef6" 33 | integrity sha512-A0vcIJ3O3HGd4s2xO4zHa6uCgryTZkSd81srfndOEtlidJySf1cqxjjZAxmS8fwNmRnD+MYIUSjMsw0Wrw836g== 34 | dependencies: 35 | json-stringify-safe "^5.0.1" 36 | uuid-js "^0.7.5" 37 | 38 | "@push-rpc/websocket@^1.8.3": 39 | version "1.8.3" 40 | resolved "https://registry.npmjs.org/@push-rpc/websocket/-/websocket-1.8.3.tgz#fa80e83c6079ca09a8245137a76a3ded4a72b495" 41 | integrity sha512-OA23BiEn7fHaH+RkPC+r9weUdHCWMWI+Tq++HWABu24HXwmdEaMhnYbQv79/bkEHGfPt1iIGz61N0dvNUk/nUQ== 42 | dependencies: 43 | "@push-rpc/core" "^1.8.3" 44 | ws "^7.2.0" 45 | 46 | "@tsconfig/node10@^1.0.7": 47 | version "1.0.9" 48 | resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" 49 | integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== 50 | 51 | "@tsconfig/node12@^1.0.7": 52 | version "1.0.11" 53 | resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" 54 | integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== 55 | 56 | "@tsconfig/node14@^1.0.0": 57 | version "1.0.3" 58 | resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" 59 | integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== 60 | 61 | "@tsconfig/node16@^1.0.2": 62 | version "1.0.4" 63 | resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" 64 | integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== 65 | 66 | "@types/node@*": 67 | version "20.2.5" 68 | resolved "https://registry.npmjs.org/@types/node/-/node-20.2.5.tgz#26d295f3570323b2837d322180dfbf1ba156fefb" 69 | integrity sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ== 70 | 71 | "@types/node@16": 72 | version "16.18.69" 73 | resolved "https://registry.npmjs.org/@types/node/-/node-16.18.69.tgz#84853c5562baeabc6e864e36ea106f8c09495b24" 74 | integrity sha512-AfDKv5fWd9XStaEuqFa6PYcM8FgTqxVMsP4BPk60emeB9YX+pp2P0zZ8nU1BQg8hyPGFrMt7MGMRMis8IrcPyg== 75 | 76 | "@types/ws@^8.5.10": 77 | version "8.5.10" 78 | resolved "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz#4acfb517970853fa6574a3a6886791d04a396787" 79 | integrity sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A== 80 | dependencies: 81 | "@types/node" "*" 82 | 83 | accept-language@^3.0.18: 84 | version "3.0.18" 85 | resolved "https://registry.yarnpkg.com/accept-language/-/accept-language-3.0.18.tgz#f5025f17bf65a466a845838ccf98cdb877d83384" 86 | integrity sha1-9QJfF79lpGaoRYOMz5jNuHfYM4Q= 87 | dependencies: 88 | bcp47 "^1.1.2" 89 | stable "^0.1.6" 90 | 91 | acorn-walk@^8.1.1: 92 | version "8.3.1" 93 | resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.1.tgz#2f10f5b69329d90ae18c58bf1fa8fccd8b959a43" 94 | integrity sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw== 95 | 96 | acorn@^8.4.1: 97 | version "8.11.2" 98 | resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" 99 | integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== 100 | 101 | ajv@^6.12.3: 102 | version "6.12.6" 103 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 104 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 105 | dependencies: 106 | fast-deep-equal "^3.1.1" 107 | fast-json-stable-stringify "^2.0.0" 108 | json-schema-traverse "^0.4.1" 109 | uri-js "^4.2.2" 110 | 111 | ansi-styles@^3.2.1: 112 | version "3.2.1" 113 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 114 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 115 | dependencies: 116 | color-convert "^1.9.0" 117 | 118 | arg@^4.1.0: 119 | version "4.1.3" 120 | resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" 121 | integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== 122 | 123 | argparse@^1.0.7: 124 | version "1.0.10" 125 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 126 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 127 | dependencies: 128 | sprintf-js "~1.0.2" 129 | 130 | array-back@^3.0.1: 131 | version "3.1.0" 132 | resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0" 133 | integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== 134 | 135 | array-back@^4.0.0, array-back@^4.0.1: 136 | version "4.0.1" 137 | resolved "https://registry.yarnpkg.com/array-back/-/array-back-4.0.1.tgz#9b80312935a52062e1a233a9c7abeb5481b30e90" 138 | integrity sha512-Z/JnaVEXv+A9xabHzN43FiiiWEE7gPCRXMrVmRm00tWbjZRul1iHm7ECzlyNq1p4a4ATXz+G9FJ3GqGOkOV3fg== 139 | 140 | asn1@^0.2.4, asn1@~0.2.3: 141 | version "0.2.4" 142 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" 143 | integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== 144 | dependencies: 145 | safer-buffer "~2.1.0" 146 | 147 | assert-plus@1.0.0, assert-plus@^1.0.0: 148 | version "1.0.0" 149 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 150 | integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= 151 | 152 | asynckit@^0.4.0: 153 | version "0.4.0" 154 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 155 | integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= 156 | 157 | aws-sign2@~0.7.0: 158 | version "0.7.0" 159 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" 160 | integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= 161 | 162 | aws4@^1.8.0: 163 | version "1.11.0" 164 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" 165 | integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== 166 | 167 | balanced-match@^1.0.0: 168 | version "1.0.2" 169 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 170 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 171 | 172 | bcp47@^1.1.2: 173 | version "1.1.2" 174 | resolved "https://registry.yarnpkg.com/bcp47/-/bcp47-1.1.2.tgz#354be3307ffd08433a78f5e1e2095845f89fc7fe" 175 | integrity sha1-NUvjMH/9CEM6ePXh4glYRfifx/4= 176 | 177 | bcrypt-pbkdf@^1.0.0: 178 | version "1.0.2" 179 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" 180 | integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= 181 | dependencies: 182 | tweetnacl "^0.14.3" 183 | 184 | brace-expansion@^1.1.7: 185 | version "1.1.11" 186 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 187 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 188 | dependencies: 189 | balanced-match "^1.0.0" 190 | concat-map "0.0.1" 191 | 192 | brackets2dots@^1.1.0: 193 | version "1.1.0" 194 | resolved "https://registry.yarnpkg.com/brackets2dots/-/brackets2dots-1.1.0.tgz#3f3d40375fc660ce0fd004fa27d67b34f9469ac3" 195 | integrity sha1-Pz1AN1/GYM4P0AT6J9Z7NPlGmsM= 196 | 197 | caseless@~0.12.0: 198 | version "0.12.0" 199 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 200 | integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= 201 | 202 | chalk@^2.4.2: 203 | version "2.4.2" 204 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 205 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 206 | dependencies: 207 | ansi-styles "^3.2.1" 208 | escape-string-regexp "^1.0.5" 209 | supports-color "^5.3.0" 210 | 211 | charenc@0.0.2: 212 | version "0.0.2" 213 | resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" 214 | integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= 215 | 216 | cldrjs@^0.5.4: 217 | version "0.5.5" 218 | resolved "https://registry.yarnpkg.com/cldrjs/-/cldrjs-0.5.5.tgz#5c92ca2de89a8a16dea76cb2dfc4e00104428e52" 219 | integrity sha512-KDwzwbmLIPfCgd8JERVDpQKrUUM1U4KpFJJg2IROv89rF172lLufoJnqJ/Wea6fXL5bO6WjuLMzY8V52UWPvkA== 220 | 221 | color-convert@^1.9.0: 222 | version "1.9.3" 223 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 224 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 225 | dependencies: 226 | color-name "1.1.3" 227 | 228 | color-name@1.1.3: 229 | version "1.1.3" 230 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 231 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 232 | 233 | combined-stream@^1.0.6, combined-stream@~1.0.6: 234 | version "1.0.8" 235 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 236 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 237 | dependencies: 238 | delayed-stream "~1.0.0" 239 | 240 | command-line-args@^5.1.1: 241 | version "5.1.1" 242 | resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-5.1.1.tgz#88e793e5bb3ceb30754a86863f0401ac92fd369a" 243 | integrity sha512-hL/eG8lrll1Qy1ezvkant+trihbGnaKaeEjj6Scyr3DN+RC7iQ5Rz84IeLERfAWDGo0HBSNAakczwgCilDXnWg== 244 | dependencies: 245 | array-back "^3.0.1" 246 | find-replace "^3.0.0" 247 | lodash.camelcase "^4.3.0" 248 | typical "^4.0.0" 249 | 250 | command-line-usage@^6.1.0: 251 | version "6.1.0" 252 | resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-6.1.0.tgz#f28376a3da3361ff3d36cfd31c3c22c9a64c7cb6" 253 | integrity sha512-Ew1clU4pkUeo6AFVDFxCbnN7GIZfXl48HIOQeFQnkO3oOqvpI7wdqtLRwv9iOCZ/7A+z4csVZeiDdEcj8g6Wiw== 254 | dependencies: 255 | array-back "^4.0.0" 256 | chalk "^2.4.2" 257 | table-layout "^1.0.0" 258 | typical "^5.2.0" 259 | 260 | compress@^0.99.0: 261 | version "0.99.0" 262 | resolved "https://registry.yarnpkg.com/compress/-/compress-0.99.0.tgz#97e301c25c4d01f097d85103f65eccb2e7796502" 263 | integrity sha1-l+MBwlxNAfCX2FED9l7Msud5ZQI= 264 | 265 | concat-map@0.0.1: 266 | version "0.0.1" 267 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 268 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 269 | 270 | core-util-is@1.0.2: 271 | version "1.0.2" 272 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 273 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= 274 | 275 | create-require@^1.1.0: 276 | version "1.1.1" 277 | resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" 278 | integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== 279 | 280 | cross-spawn@^6.0.0: 281 | version "6.0.5" 282 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" 283 | integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== 284 | dependencies: 285 | nice-try "^1.0.4" 286 | path-key "^2.0.1" 287 | semver "^5.5.0" 288 | shebang-command "^1.2.0" 289 | which "^1.2.9" 290 | 291 | crypt@0.0.2: 292 | version "0.0.2" 293 | resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" 294 | integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= 295 | 296 | curry2@^1.0.0: 297 | version "1.0.3" 298 | resolved "https://registry.yarnpkg.com/curry2/-/curry2-1.0.3.tgz#38191d55f1060bfea47ca08009385bb878f6612f" 299 | integrity sha1-OBkdVfEGC/6kfKCACThbuHj2YS8= 300 | dependencies: 301 | fast-bind "^1.0.0" 302 | 303 | dashdash@^1.12.0: 304 | version "1.14.1" 305 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 306 | integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= 307 | dependencies: 308 | assert-plus "^1.0.0" 309 | 310 | debug@^2.5.2: 311 | version "2.6.9" 312 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 313 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 314 | dependencies: 315 | ms "2.0.0" 316 | 317 | debug@^4.1.1: 318 | version "4.3.2" 319 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" 320 | integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== 321 | dependencies: 322 | ms "2.1.2" 323 | 324 | deep-extend@~0.6.0: 325 | version "0.6.0" 326 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" 327 | integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== 328 | 329 | delayed-stream@~1.0.0: 330 | version "1.0.0" 331 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 332 | integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= 333 | 334 | diff@^4.0.1: 335 | version "4.0.2" 336 | resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" 337 | integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== 338 | 339 | dotsplit.js@^1.0.3: 340 | version "1.1.0" 341 | resolved "https://registry.yarnpkg.com/dotsplit.js/-/dotsplit.js-1.1.0.tgz#25a239eabe922a91ffa5d2a172d6c9fb82451e02" 342 | integrity sha1-JaI56r6SKpH/pdKhctbJ+4JFHgI= 343 | 344 | ecc-jsbn@~0.1.1: 345 | version "0.1.2" 346 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" 347 | integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= 348 | dependencies: 349 | jsbn "~0.1.0" 350 | safer-buffer "^2.1.0" 351 | 352 | end-of-stream@^1.1.0: 353 | version "1.4.4" 354 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" 355 | integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== 356 | dependencies: 357 | once "^1.4.0" 358 | 359 | escape-string-regexp@^1.0.5: 360 | version "1.0.5" 361 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 362 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 363 | 364 | execa@^1.0.0: 365 | version "1.0.0" 366 | resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" 367 | integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== 368 | dependencies: 369 | cross-spawn "^6.0.0" 370 | get-stream "^4.0.0" 371 | is-stream "^1.1.0" 372 | npm-run-path "^2.0.0" 373 | p-finally "^1.0.0" 374 | signal-exit "^3.0.0" 375 | strip-eof "^1.0.0" 376 | 377 | extend@~3.0.2: 378 | version "3.0.2" 379 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" 380 | integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== 381 | 382 | extsprintf@1.3.0: 383 | version "1.3.0" 384 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" 385 | integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= 386 | 387 | extsprintf@^1.2.0: 388 | version "1.4.0" 389 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" 390 | integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= 391 | 392 | fast-bind@^1.0.0: 393 | version "1.0.0" 394 | resolved "https://registry.yarnpkg.com/fast-bind/-/fast-bind-1.0.0.tgz#7fa9652cb3325f5cd1e252d6cb4f160de1a76e75" 395 | integrity sha1-f6llLLMyX1zR4lLWy08WDeGnbnU= 396 | 397 | fast-deep-equal@^3.1.1: 398 | version "3.1.3" 399 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 400 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 401 | 402 | fast-json-stable-stringify@^2.0.0: 403 | version "2.1.0" 404 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 405 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 406 | 407 | find-replace@^3.0.0: 408 | version "3.0.0" 409 | resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-3.0.0.tgz#3e7e23d3b05167a76f770c9fbd5258b0def68c38" 410 | integrity sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ== 411 | dependencies: 412 | array-back "^3.0.1" 413 | 414 | forever-agent@~0.6.1: 415 | version "0.6.1" 416 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 417 | integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= 418 | 419 | form-data@~2.3.2: 420 | version "2.3.3" 421 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" 422 | integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== 423 | dependencies: 424 | asynckit "^0.4.0" 425 | combined-stream "^1.0.6" 426 | mime-types "^2.1.12" 427 | 428 | fs.realpath@^1.0.0: 429 | version "1.0.0" 430 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 431 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 432 | 433 | get-stream@^4.0.0: 434 | version "4.1.0" 435 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" 436 | integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== 437 | dependencies: 438 | pump "^3.0.0" 439 | 440 | getpass@^0.1.1: 441 | version "0.1.7" 442 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" 443 | integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= 444 | dependencies: 445 | assert-plus "^1.0.0" 446 | 447 | glob@^7.0.5: 448 | version "7.1.7" 449 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" 450 | integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== 451 | dependencies: 452 | fs.realpath "^1.0.0" 453 | inflight "^1.0.4" 454 | inherits "2" 455 | minimatch "^3.0.4" 456 | once "^1.3.0" 457 | path-is-absolute "^1.0.0" 458 | 459 | globalize@^1.4.2: 460 | version "1.6.0" 461 | resolved "https://registry.yarnpkg.com/globalize/-/globalize-1.6.0.tgz#b6c659cfa6a47fa1a8279187a45689560d8591b1" 462 | integrity sha512-MTuAU3Tnbtga8PvxbpSPdQNIs6K5UdATWIuarWJK2Z3e1DghXpxb/GmShSVagzHqCOYgZr7N/Hi7D1mrHG30jQ== 463 | dependencies: 464 | cldrjs "^0.5.4" 465 | 466 | har-schema@^2.0.0: 467 | version "2.0.0" 468 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" 469 | integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= 470 | 471 | har-validator@~5.1.3: 472 | version "5.1.5" 473 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" 474 | integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== 475 | dependencies: 476 | ajv "^6.12.3" 477 | har-schema "^2.0.0" 478 | 479 | has-flag@^3.0.0: 480 | version "3.0.0" 481 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 482 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 483 | 484 | http-signature@~1.2.0: 485 | version "1.2.0" 486 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" 487 | integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= 488 | dependencies: 489 | assert-plus "^1.0.0" 490 | jsprim "^1.2.2" 491 | sshpk "^1.7.0" 492 | 493 | httpntlm@^1.7.6: 494 | version "1.7.7" 495 | resolved "https://registry.yarnpkg.com/httpntlm/-/httpntlm-1.7.7.tgz#51b914f18e5de2868d4bfe50aeecdb1db23218a1" 496 | integrity sha512-Pv2Rvrz8H0qv1Dne5mAdZ9JegG1uc6Vu5lwLflIY6s8RKHdZQbW39L4dYswSgqMDT0pkJILUTKjeyU0VPNRZjA== 497 | dependencies: 498 | httpreq ">=0.4.22" 499 | underscore "~1.12.1" 500 | 501 | httpreq@>=0.4.22: 502 | version "0.5.2" 503 | resolved "https://registry.yarnpkg.com/httpreq/-/httpreq-0.5.2.tgz#be6777292fa1038d7771d7c01d9a5e1219de951c" 504 | integrity sha512-2Jm+x9WkExDOeFRrdBCBSpLPT5SokTcRHkunV3pjKmX/cx6av8zQ0WtHUMDrYb6O4hBFzNU6sxJEypvRUVYKnw== 505 | 506 | inflight@^1.0.4: 507 | version "1.0.6" 508 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 509 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 510 | dependencies: 511 | once "^1.3.0" 512 | wrappy "1" 513 | 514 | inherits@2: 515 | version "2.0.4" 516 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 517 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 518 | 519 | invert-kv@^2.0.0: 520 | version "2.0.0" 521 | resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" 522 | integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== 523 | 524 | is-buffer@~1.1.6: 525 | version "1.1.6" 526 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" 527 | integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== 528 | 529 | is-stream@^1.1.0: 530 | version "1.1.0" 531 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 532 | integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= 533 | 534 | is-typedarray@~1.0.0: 535 | version "1.0.0" 536 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 537 | integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= 538 | 539 | isexe@^2.0.0: 540 | version "2.0.0" 541 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 542 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 543 | 544 | isstream@~0.1.2: 545 | version "0.1.2" 546 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 547 | integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= 548 | 549 | jsbn@~0.1.0: 550 | version "0.1.1" 551 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 552 | integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= 553 | 554 | json-schema-traverse@^0.4.1: 555 | version "0.4.1" 556 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 557 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 558 | 559 | json-schema@0.2.3: 560 | version "0.2.3" 561 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 562 | integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= 563 | 564 | json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: 565 | version "5.0.1" 566 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 567 | integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= 568 | 569 | jsprim@^1.2.2: 570 | version "1.4.1" 571 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" 572 | integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= 573 | dependencies: 574 | assert-plus "1.0.0" 575 | extsprintf "1.3.0" 576 | json-schema "0.2.3" 577 | verror "1.10.0" 578 | 579 | lcid@^2.0.0: 580 | version "2.0.0" 581 | resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" 582 | integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== 583 | dependencies: 584 | invert-kv "^2.0.0" 585 | 586 | lodash.camelcase@^4.3.0: 587 | version "4.3.0" 588 | resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" 589 | integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= 590 | 591 | lodash@^4.17.11, lodash@^4.17.4: 592 | version "4.17.21" 593 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 594 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 595 | 596 | make-error@^1.1.1: 597 | version "1.3.6" 598 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" 599 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== 600 | 601 | map-age-cleaner@^0.1.1: 602 | version "0.1.3" 603 | resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" 604 | integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== 605 | dependencies: 606 | p-defer "^1.0.0" 607 | 608 | md5@^2.2.1: 609 | version "2.3.0" 610 | resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" 611 | integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== 612 | dependencies: 613 | charenc "0.0.2" 614 | crypt "0.0.2" 615 | is-buffer "~1.1.6" 616 | 617 | mem@^4.0.0: 618 | version "4.3.0" 619 | resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" 620 | integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== 621 | dependencies: 622 | map-age-cleaner "^0.1.1" 623 | mimic-fn "^2.0.0" 624 | p-is-promise "^2.0.0" 625 | 626 | mime-db@1.48.0: 627 | version "1.48.0" 628 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.48.0.tgz#e35b31045dd7eada3aaad537ed88a33afbef2d1d" 629 | integrity sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ== 630 | 631 | mime-types@^2.1.12, mime-types@~2.1.19: 632 | version "2.1.31" 633 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.31.tgz#a00d76b74317c61f9c2db2218b8e9f8e9c5c9e6b" 634 | integrity sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg== 635 | dependencies: 636 | mime-db "1.48.0" 637 | 638 | mimic-fn@^2.0.0: 639 | version "2.1.0" 640 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" 641 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== 642 | 643 | minimatch@^3.0.4: 644 | version "3.0.4" 645 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 646 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 647 | dependencies: 648 | brace-expansion "^1.1.7" 649 | 650 | minimist@^1.2.5: 651 | version "1.2.5" 652 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 653 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== 654 | 655 | mkdirp@^0.5.1: 656 | version "0.5.5" 657 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" 658 | integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== 659 | dependencies: 660 | minimist "^1.2.5" 661 | 662 | ms@2.0.0: 663 | version "2.0.0" 664 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 665 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 666 | 667 | ms@2.1.2: 668 | version "2.1.2" 669 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 670 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 671 | 672 | nice-try@^1.0.4: 673 | version "1.0.5" 674 | resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" 675 | integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== 676 | 677 | node-rsa@^1.0.5: 678 | version "1.1.1" 679 | resolved "https://registry.yarnpkg.com/node-rsa/-/node-rsa-1.1.1.tgz#efd9ad382097782f506153398496f79e4464434d" 680 | integrity sha512-Jd4cvbJMryN21r5HgxQOpMEqv+ooke/korixNNK3mGqfGJmy0M77WDDzo/05969+OkMy3XW1UuZsSmW9KQm7Fw== 681 | dependencies: 682 | asn1 "^0.2.4" 683 | 684 | npm-run-path@^2.0.0: 685 | version "2.0.2" 686 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" 687 | integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= 688 | dependencies: 689 | path-key "^2.0.0" 690 | 691 | oauth-sign@~0.9.0: 692 | version "0.9.0" 693 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" 694 | integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== 695 | 696 | once@^1.3.0, once@^1.3.1, once@^1.4.0: 697 | version "1.4.0" 698 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 699 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 700 | dependencies: 701 | wrappy "1" 702 | 703 | os-locale@^3.1.0: 704 | version "3.1.0" 705 | resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" 706 | integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== 707 | dependencies: 708 | execa "^1.0.0" 709 | lcid "^2.0.0" 710 | mem "^4.0.0" 711 | 712 | p-defer@^1.0.0: 713 | version "1.0.0" 714 | resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" 715 | integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= 716 | 717 | p-finally@^1.0.0: 718 | version "1.0.0" 719 | resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" 720 | integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= 721 | 722 | p-is-promise@^2.0.0: 723 | version "2.1.0" 724 | resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" 725 | integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== 726 | 727 | path-is-absolute@^1.0.0: 728 | version "1.0.1" 729 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 730 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 731 | 732 | path-key@^2.0.0, path-key@^2.0.1: 733 | version "2.0.1" 734 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" 735 | integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= 736 | 737 | performance-now@^2.1.0: 738 | version "2.1.0" 739 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" 740 | integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= 741 | 742 | prettier@^3.1.1: 743 | version "3.1.1" 744 | resolved "https://registry.npmjs.org/prettier/-/prettier-3.1.1.tgz#6ba9f23165d690b6cbdaa88cb0807278f7019848" 745 | integrity sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw== 746 | 747 | psl@^1.1.28: 748 | version "1.8.0" 749 | resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" 750 | integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== 751 | 752 | pump@^3.0.0: 753 | version "3.0.0" 754 | resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" 755 | integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== 756 | dependencies: 757 | end-of-stream "^1.1.0" 758 | once "^1.3.1" 759 | 760 | punycode@^2.1.0, punycode@^2.1.1: 761 | version "2.1.1" 762 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 763 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 764 | 765 | qs@~6.5.2: 766 | version "6.5.2" 767 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" 768 | integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== 769 | 770 | reduce-flatten@^2.0.0: 771 | version "2.0.0" 772 | resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-2.0.0.tgz#734fd84e65f375d7ca4465c69798c25c9d10ae27" 773 | integrity sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w== 774 | 775 | request@^2.72.0: 776 | version "2.88.2" 777 | resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" 778 | integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== 779 | dependencies: 780 | aws-sign2 "~0.7.0" 781 | aws4 "^1.8.0" 782 | caseless "~0.12.0" 783 | combined-stream "~1.0.6" 784 | extend "~3.0.2" 785 | forever-agent "~0.6.1" 786 | form-data "~2.3.2" 787 | har-validator "~5.1.3" 788 | http-signature "~1.2.0" 789 | is-typedarray "~1.0.0" 790 | isstream "~0.1.2" 791 | json-stringify-safe "~5.0.1" 792 | mime-types "~2.1.19" 793 | oauth-sign "~0.9.0" 794 | performance-now "^2.1.0" 795 | qs "~6.5.2" 796 | safe-buffer "^5.1.2" 797 | tough-cookie "~2.5.0" 798 | tunnel-agent "^0.6.0" 799 | uuid "^3.3.2" 800 | 801 | safe-buffer@^5.0.1, safe-buffer@^5.1.2: 802 | version "5.2.1" 803 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 804 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 805 | 806 | safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: 807 | version "2.1.2" 808 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 809 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 810 | 811 | sax@>=0.6.0, sax@^1.2: 812 | version "1.2.4" 813 | resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" 814 | integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== 815 | 816 | selectn@^1.0.20: 817 | version "1.1.2" 818 | resolved "https://registry.yarnpkg.com/selectn/-/selectn-1.1.2.tgz#fc8acd91df3f45acb01891c6773ae529851d6b17" 819 | integrity sha1-/IrNkd8/RaywGJHGdzrlKYUdaxc= 820 | dependencies: 821 | brackets2dots "^1.1.0" 822 | curry2 "^1.0.0" 823 | debug "^2.5.2" 824 | dotsplit.js "^1.0.3" 825 | 826 | semver@^5.5.0: 827 | version "5.7.1" 828 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 829 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 830 | 831 | shebang-command@^1.2.0: 832 | version "1.2.0" 833 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 834 | integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= 835 | dependencies: 836 | shebang-regex "^1.0.0" 837 | 838 | shebang-regex@^1.0.0: 839 | version "1.0.0" 840 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 841 | integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= 842 | 843 | signal-exit@^3.0.0: 844 | version "3.0.3" 845 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" 846 | integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== 847 | 848 | sprintf-js@~1.0.2: 849 | version "1.0.3" 850 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 851 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 852 | 853 | sshpk@^1.7.0: 854 | version "1.16.1" 855 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" 856 | integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== 857 | dependencies: 858 | asn1 "~0.2.3" 859 | assert-plus "^1.0.0" 860 | bcrypt-pbkdf "^1.0.0" 861 | dashdash "^1.12.0" 862 | ecc-jsbn "~0.1.1" 863 | getpass "^0.1.1" 864 | jsbn "~0.1.0" 865 | safer-buffer "^2.0.2" 866 | tweetnacl "~0.14.0" 867 | 868 | stable@^0.1.6: 869 | version "0.1.8" 870 | resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" 871 | integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== 872 | 873 | strip-eof@^1.0.0: 874 | version "1.0.0" 875 | resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" 876 | integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= 877 | 878 | strong-globalize@^4.1.3: 879 | version "4.1.3" 880 | resolved "https://registry.yarnpkg.com/strong-globalize/-/strong-globalize-4.1.3.tgz#7ee33da3b22cb867217a194bbb6d42d997fed2cd" 881 | integrity sha512-SJegV7w5D4AodEspZJtJ7rls3fmi+Zc0PdyJCqBsg4RN9B8TC80/uAI2fikC+s1Jp9FLvr2vDX8f0Fqc62M4OA== 882 | dependencies: 883 | accept-language "^3.0.18" 884 | debug "^4.1.1" 885 | globalize "^1.4.2" 886 | lodash "^4.17.4" 887 | md5 "^2.2.1" 888 | mkdirp "^0.5.1" 889 | os-locale "^3.1.0" 890 | yamljs "^0.3.0" 891 | 892 | strong-soap@1.21.0: 893 | version "1.21.0" 894 | resolved "https://registry.yarnpkg.com/strong-soap/-/strong-soap-1.21.0.tgz#14106001b3b3310391bddc6988a683970582c74c" 895 | integrity sha512-ahHGZRzICF/t1QYWXP7/J6djyz9CW9z48fSPoCbEX2lgsPIJ/gGirX3ik2tmIamKDfgmzW+rmZBXJ7YLd2NcJQ== 896 | dependencies: 897 | compress "^0.99.0" 898 | debug "^4.1.1" 899 | httpntlm "^1.7.6" 900 | lodash "^4.17.11" 901 | node-rsa "^1.0.5" 902 | request "^2.72.0" 903 | sax "^1.2" 904 | selectn "^1.0.20" 905 | strong-globalize "^4.1.3" 906 | uuid "^3.2.1" 907 | xml-crypto "^1.4.0" 908 | xmlbuilder "^10.1.1" 909 | 910 | supports-color@^5.3.0: 911 | version "5.5.0" 912 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 913 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 914 | dependencies: 915 | has-flag "^3.0.0" 916 | 917 | table-layout@^1.0.0: 918 | version "1.0.1" 919 | resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-1.0.1.tgz#8411181ee951278ad0638aea2f779a9ce42894f9" 920 | integrity sha512-dEquqYNJiGwY7iPfZ3wbXDI944iqanTSchrACLL2nOB+1r+h1Nzu2eH+DuPPvWvm5Ry7iAPeFlgEtP5bIp5U7Q== 921 | dependencies: 922 | array-back "^4.0.1" 923 | deep-extend "~0.6.0" 924 | typical "^5.2.0" 925 | wordwrapjs "^4.0.0" 926 | 927 | tough-cookie@~2.5.0: 928 | version "2.5.0" 929 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" 930 | integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== 931 | dependencies: 932 | psl "^1.1.28" 933 | punycode "^2.1.1" 934 | 935 | ts-node@^10.9.2: 936 | version "10.9.2" 937 | resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" 938 | integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== 939 | dependencies: 940 | "@cspotcode/source-map-support" "^0.8.0" 941 | "@tsconfig/node10" "^1.0.7" 942 | "@tsconfig/node12" "^1.0.7" 943 | "@tsconfig/node14" "^1.0.0" 944 | "@tsconfig/node16" "^1.0.2" 945 | acorn "^8.4.1" 946 | acorn-walk "^8.1.1" 947 | arg "^4.1.0" 948 | create-require "^1.1.0" 949 | diff "^4.0.1" 950 | make-error "^1.1.1" 951 | v8-compile-cache-lib "^3.0.1" 952 | yn "3.1.1" 953 | 954 | tunnel-agent@^0.6.0: 955 | version "0.6.0" 956 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 957 | integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= 958 | dependencies: 959 | safe-buffer "^5.0.1" 960 | 961 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 962 | version "0.14.5" 963 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 964 | integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= 965 | 966 | typescript@^5.3.3: 967 | version "5.3.3" 968 | resolved "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" 969 | integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== 970 | 971 | typical@^4.0.0: 972 | version "4.0.0" 973 | resolved "https://registry.yarnpkg.com/typical/-/typical-4.0.0.tgz#cbeaff3b9d7ae1e2bbfaf5a4e6f11eccfde94fc4" 974 | integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw== 975 | 976 | typical@^5.0.0, typical@^5.2.0: 977 | version "5.2.0" 978 | resolved "https://registry.yarnpkg.com/typical/-/typical-5.2.0.tgz#4daaac4f2b5315460804f0acf6cb69c52bb93066" 979 | integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg== 980 | 981 | underscore@~1.12.1: 982 | version "1.12.1" 983 | resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.12.1.tgz#7bb8cc9b3d397e201cf8553336d262544ead829e" 984 | integrity sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw== 985 | 986 | uri-js@^4.2.2: 987 | version "4.4.1" 988 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 989 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 990 | dependencies: 991 | punycode "^2.1.0" 992 | 993 | uuid-js@^0.7.5: 994 | version "0.7.5" 995 | resolved "https://registry.yarnpkg.com/uuid-js/-/uuid-js-0.7.5.tgz#6c886d02a53d2d40dcf25d91a170b4a7b25b94d0" 996 | integrity sha1-bIhtAqU9LUDc8l2RoXC0p7JblNA= 997 | 998 | uuid@^3.2.1, uuid@^3.3.2: 999 | version "3.4.0" 1000 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" 1001 | integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== 1002 | 1003 | v8-compile-cache-lib@^3.0.1: 1004 | version "3.0.1" 1005 | resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" 1006 | integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== 1007 | 1008 | verror@1.10.0: 1009 | version "1.10.0" 1010 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" 1011 | integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= 1012 | dependencies: 1013 | assert-plus "^1.0.0" 1014 | core-util-is "1.0.2" 1015 | extsprintf "^1.2.0" 1016 | 1017 | which@^1.2.9: 1018 | version "1.3.1" 1019 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 1020 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== 1021 | dependencies: 1022 | isexe "^2.0.0" 1023 | 1024 | wordwrapjs@^4.0.0: 1025 | version "4.0.0" 1026 | resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-4.0.0.tgz#9aa9394155993476e831ba8e59fb5795ebde6800" 1027 | integrity sha512-Svqw723a3R34KvsMgpjFBYCgNOSdcW3mQFK4wIfhGQhtaFVOJmdYoXgi63ne3dTlWgatVcUc7t4HtQ/+bUVIzQ== 1028 | dependencies: 1029 | reduce-flatten "^2.0.0" 1030 | typical "^5.0.0" 1031 | 1032 | wrappy@1: 1033 | version "1.0.2" 1034 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1035 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 1036 | 1037 | ws@^7.2.0: 1038 | version "7.5.9" 1039 | resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" 1040 | integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== 1041 | 1042 | ws@^8.16.0: 1043 | version "8.16.0" 1044 | resolved "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz#d1cd774f36fbc07165066a60e40323eab6446fd4" 1045 | integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== 1046 | 1047 | xml-crypto@^1.4.0: 1048 | version "1.5.3" 1049 | resolved "https://registry.yarnpkg.com/xml-crypto/-/xml-crypto-1.5.3.tgz#a8f500b90f0dfaf0efa3331c345ecb0fff993c34" 1050 | integrity sha512-uHkmpUtX15xExe5iimPmakAZN+6CqIvjmaJTy4FwqGzaTjrKRBNeqMh8zGEzVNgW0dk6beFYpyQSgqV/J6C5xA== 1051 | dependencies: 1052 | xmldom "0.1.27" 1053 | xpath "0.0.27" 1054 | 1055 | xml2js@^0.4.23: 1056 | version "0.4.23" 1057 | resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" 1058 | integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug== 1059 | dependencies: 1060 | sax ">=0.6.0" 1061 | xmlbuilder "~11.0.0" 1062 | 1063 | xmlbuilder@^10.1.1: 1064 | version "10.1.1" 1065 | resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-10.1.1.tgz#8cae6688cc9b38d850b7c8d3c0a4161dcaf475b0" 1066 | integrity sha512-OyzrcFLL/nb6fMGHbiRDuPup9ljBycsdCypwuyg5AAHvyWzGfChJpCXMG88AGTIMFhGZ9RccFN1e6lhg3hkwKg== 1067 | 1068 | xmlbuilder@~11.0.0: 1069 | version "11.0.1" 1070 | resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" 1071 | integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== 1072 | 1073 | xmldom@0.1.27: 1074 | version "0.1.27" 1075 | resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.27.tgz#d501f97b3bdb403af8ef9ecc20573187aadac0e9" 1076 | integrity sha1-1QH5ezvbQDr4757MIFcxh6rawOk= 1077 | 1078 | xpath@0.0.27: 1079 | version "0.0.27" 1080 | resolved "https://registry.yarnpkg.com/xpath/-/xpath-0.0.27.tgz#dd3421fbdcc5646ac32c48531b4d7e9d0c2cfa92" 1081 | integrity sha512-fg03WRxtkCV6ohClePNAECYsmpKKTv5L8y/X3Dn1hQrec3POx2jHZ/0P2qQ6HvsrU1BmeqXcof3NGGueG6LxwQ== 1082 | 1083 | yamljs@^0.3.0: 1084 | version "0.3.0" 1085 | resolved "https://registry.yarnpkg.com/yamljs/-/yamljs-0.3.0.tgz#dc060bf267447b39f7304e9b2bfbe8b5a7ddb03b" 1086 | integrity sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ== 1087 | dependencies: 1088 | argparse "^1.0.7" 1089 | glob "^7.0.5" 1090 | 1091 | yn@3.1.1: 1092 | version "3.1.1" 1093 | resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" 1094 | integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== 1095 | --------------------------------------------------------------------------------