diff --git a/CHANGELOG.md b/CHANGELOG.md index 20c01b5..893b432 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,2 +1,17 @@ # 0.1.0 -* Initial release \ No newline at end of file +* Initial release +* Reading Configuration based on Environment +* Override Configuration if Environment Variables provided +* Configurations for Chain endpoint Sections and Methods from extrinsic to Exclude, types, Openwhisk Endpoint, Openwhisk Auth Key, Trigger Endpoint, Kafka Topic and Brokers +* Connects to the chain +* Add custom type to chain initialization if provided +* Subscribes to system.events +* Filters Events based on excludes provided +* Post Events to trigger Endpoint +* Dockerfile for Substrate Event Feed Package + +# 0.1.1 +* Add dotenv to get environment variables from .env +* Add Test env config +* Update Schema Validation +* Add Configuration for Health API Port \ No newline at end of file diff --git a/README.md b/README.md index 4053179..9ea1f76 100644 --- a/README.md +++ b/README.md @@ -57,6 +57,22 @@ yarn install Configurations are passed through environment variables which can be found [here](/docs/configuration.md). +For local development and testing create a **.env** file with respective configurations in the project root folder. + +```text +CHAIN_NAME=Node Template +CHAIN_ENDPOINT=ws://localhost:9944 +LOGGERS=console,info;file,error,/logs/event-feed.log +EXCLUDES=system +TYPES_FILE=/configs/types.json +KAFKA_BROKERS=localhost:9092 +KAFKA_TOPIC=node-template-topic +OPENWHISK_API_KEY=23bc46b1-71f6-4ed5-8c54-816aa4f8c502:123zO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwP +OPENWHISK_API_HOST=https://localhost:31001 +OPENWHISK_NAMESPACE=guest +EVENT_RECEIVER=event-receiver +``` + ### Usage Start the feed in development mode. diff --git a/config/custom-environment-variables.json b/config/custom-environment-variables.json index ae9575d..1bb664e 100644 --- a/config/custom-environment-variables.json +++ b/config/custom-environment-variables.json @@ -9,5 +9,6 @@ "openwhiskApiKey": "OPENWHISK_API_KEY", "openwhiskApiHost": "OPENWHISK_API_HOST", "openwhiskNamespace": "OPENWHISK_NAMESPACE", - "eventReceiver": "EVENT_RECEIVER" + "eventReceiver": "EVENT_RECEIVER", + "healthAPIPortConfiguration": "HEALTH_API_PORT" } \ No newline at end of file diff --git a/config/default.js b/config/default.js index fb5d918..70449d2 100644 --- a/config/default.js +++ b/config/default.js @@ -1,5 +1,5 @@ const defer = require('config/defer').deferConfig; -const { loggersHelper, excludesHelper, typesHelper, kafkaBrokersHelper } = require('./helper'); +const { loggersHelper, excludesHelper, typesHelper, kafkaBrokersHelper, healthAPIPortHelper } = require('./helper'); module.exports = { // Name of the chain @@ -44,5 +44,10 @@ module.exports = { openwhiskApiKey: undefined, openwhiskApiHost: undefined, openwhiskNamespace: undefined, - eventReceiver: undefined + eventReceiver: undefined, + healthAPIPortConfiguration: "80", + + healthAPIPort: defer(function (){ + return healthAPIPortHelper(this.healthAPIPortConfiguration); + }), } diff --git a/config/helper.js b/config/helper.js index 603db28..6e4cf47 100644 --- a/config/helper.js +++ b/config/helper.js @@ -98,5 +98,9 @@ module.exports = { }, []); return kafkaBrokers; + }, + + healthAPIPortHelper: function (healthAPIPortConfiguration) { + return parseInt(healthAPIPortConfiguration); } } \ No newline at end of file diff --git a/config/schema.json b/config/schema.json index 940b8dc..fb17205 100644 --- a/config/schema.json +++ b/config/schema.json @@ -7,8 +7,8 @@ "chainName": { "description": "Name of the chain", "type": "string", - "matches": "[a-zA-Z]+", - "min": 3, + "pattern": "[a-zA-Z]+", + "minLength": 3, "maxLength": 40 }, "loggers": { @@ -57,15 +57,74 @@ } } }, - "chainEndpoint" :{ + "chainEndpoint": { "description": "Websocket endpoint of the chain node", "type": "string", "pattern": "^(ws|wss)://" + }, + "excludes": { + "description": "Sections and Methods of a specific section to be excluded", + "type": "array", + "items": { + "type": "object", + "properties": { + "section": { + "type": "string" + }, + "methods": { + "type": [ + "array", + "null" + ] + } + }, + "required": [ + "section" + ] + } + }, + "types": { + "description": "custom types for the chain.", + "type": "object" + }, + "kafkaBrokers": { + "description": "List of Kafka brokers where the event should be posted", + "type": "array" + }, + "kafkaTopic": { + "description": "Kafka topic to which events to be posted", + "type": "string" + }, + "openwhiskApiKey": { + "description": "Openwhisk authentication key", + "type": "string" + }, + "openwhiskApiHost": { + "description": "Openwhisk API Endpoint", + "type": "string" + }, + "openwhiskNamespace": { + "description": "Organization space where the actions, rules, and triggers related to aurras resides", + "type": "string" + }, + "eventReceiver": { + "description": "Trigger Endpoint where the event should be posted", + "type": "string" + }, + "healthAPIPort": { + "type": "integer", + "description": "The binding port for the Health API Endpoint" } }, "required": [ "chainName", "loggers", - "chainEndpoint" + "chainEndpoint", + "kafkaBrokers", + "kafkaTopic", + "openwhiskApiKey", + "openwhiskApiHost", + "openwhiskNamespace", + "eventReceiver" ] } \ No newline at end of file diff --git a/config/test.json b/config/test.json new file mode 100644 index 0000000..e6ccfa9 --- /dev/null +++ b/config/test.json @@ -0,0 +1,3 @@ +{ + "chainName": "Test Chain" +} \ No newline at end of file diff --git a/docs/configuration.md b/docs/configuration.md index f3bd881..7bff639 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -4,7 +4,7 @@ Configuration values below are passed through environment variables. -#### CHAIN\_NAME +#### CHAIN\_NAME [Mandatory] An alphanumeric string to identify the chain. @@ -14,7 +14,7 @@ An alphanumeric string to identify the chain. -#### CHAIN\_ENDPOINT +#### CHAIN\_ENDPOINT [Mandatory] The Endpoint of the chain node to which the event feed should connect to. Protocols Supported: ws \(WebSocket\) and wss \(WebSocket Secure\) @@ -40,7 +40,7 @@ The Endpoint of the chain node to which the event feed should connect to. Protoc -#### LOGGERS +#### LOGGERS [Mandatory] The configuration pertains to the loggers enabled for the event feed. This configuration is extensible to add multiple logging such as logging to a file, logging to console, logging to monitoring system based on different levels of logging. Winston is used under the hood. @@ -67,7 +67,7 @@ Multiple loggers can be provided separated by ";" -#### EXCLUDES +#### EXCLUDES [Optional] Sections or Methods of a specific section can be excluded provided through this configuration. @@ -86,7 +86,7 @@ Multiple methods to be separated by "," -#### TYPES\_FILE +#### TYPES\_FILE [Optional] Location to custom types for the chain. @@ -96,7 +96,7 @@ Location to custom types for the chain. -#### KAFKA\_BROKERS +#### KAFKA\_BROKERS [Mandatory] List of Kafka brokers where the event should be posted. separated by ";" @@ -106,7 +106,7 @@ List of Kafka brokers where the event should be posted. separated by ";" -#### KAFKA\_TOPIC +#### KAFKA\_TOPIC [Mandatory] Kafka topic to which events to be posted ";" @@ -116,7 +116,7 @@ Kafka topic to which events to be posted ";" -#### OPENWHISK\_API\_KEY +#### OPENWHISK\_API\_KEY [Mandatory] Openwhisk authentication key. @@ -126,7 +126,7 @@ Openwhisk authentication key. -#### OPENWHISK\_API\_HOST +#### OPENWHISK\_API\_HOST [Mandatory] Openwhisk API Endpoint @@ -136,10 +136,28 @@ Openwhisk API Endpoint -#### OPENWHISK\_NAMESPACE +#### OPENWHISK\_NAMESPACE [Mandatory] Organization space where the actions, rules, and triggers related to aurras resides. | Environment Variable | Sample Values | | :--- | :--- | | OPENWHISK\_NAMESPACE | `OPENWHISK_NAMESPACE=guest` | + + +#### EVENT\_RECEIVER [Mandatory] + +Trigger Endpoint where the event should be posted. + +| Environment Variable | Sample Values | +| :--- | :--- | +| EVENT\_RECEIVER | `EVENT_RECEIVER=event-receiver` | + + +#### HEALTH\_API\_PORT [Optional] + +Configuration for Health API port primarily used for Kubernetes readiness and liveness probe. Default port is 80. + +| Environment Variable | Sample Values | +| :--- | :--- | +| HEALTH\_API\_PORT | `HEALTH_API_PORT=8080` | diff --git a/package-scripts.js b/package-scripts.js index 444b06e..71e45d3 100644 --- a/package-scripts.js +++ b/package-scripts.js @@ -20,7 +20,7 @@ module.exports = { serve: { script: series( 'nps banner.serve', - 'nodemon --watch src --watch config' + 'nodemon -r dotenv/config --watch src --watch config' ), description: 'Serves the current app and watches for changes to restart it' }, diff --git a/package.json b/package.json index 3c37332..18ed771 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "aurras-event-feed-substrate-js", - "version": "0.1.0", + "version": "0.1.1", "description": "A JS implementation of Event Feed package for Aurras System to source events from Substrate Based chains", "main": "src/index.ts", "repository": "github:HugoByte/aurras-event-feed-substrate-js", @@ -35,14 +35,14 @@ "dependencies": { "@hugobyte/microbootstrap": "^0.1.0", "@polkadot/api": "^3.3.2", + "ajv": "^7.1.1", "config": "^3.3.3", + "dotenv": "^8.2.0", "lodash": "^4.17.20", "micro": "^9.3.4", "openwhisk": "^3.21.3", "reflect-metadata": "^0.1.13", - "schema-to-yup": "^1.10.0", "typedi": "^0.8.0", - "winston": "^3.3.3", - "yup": "^0.32.8" + "winston": "^3.3.3" } } diff --git a/src/exceptions/configuration.exception.ts b/src/exceptions/configuration.exception.ts index 1efe1a7..e5b690e 100644 --- a/src/exceptions/configuration.exception.ts +++ b/src/exceptions/configuration.exception.ts @@ -6,7 +6,24 @@ import { Exception } from './exception'; */ export class ConfigurationException extends Exception { - constructor(description) { - super('ConfigurationException', description, false); + constructor(configuration, description) { + const configurationMap = { + "/chainName": "CHAIN_NAME", + "/chainEndpoint": "CHAIN_ENDPOINT", + "/loggers": "LOGGERS", + "/loggers/console/level": "LOGGERS Console Level", + "/loggers/file/level": "LOGGERS File Level", + "/loggers/file/filename": "LOGGERS File Location", + "/excludes": "EXCLUDES", + "/kafkaBrokers": "KAFKA_BROKERS", + "/kafkaTopic": "KAFKA_TOPIC", + "/openwhiskApiKey": "OPENWHISK_API_KEY", + "/openwhiskApiHost": "OPENWHISK_API_HOST", + "/openwhiskNamespace": "OPENWHISK_NAMESPACE", + "/eventReceiver": "EVENT_RECEIVER", + "/healthAPIPort": "HEALTH_API_PORT" + } + + super('ConfigurationException', `${configurationMap[configuration] || configuration} ${description}`, false); } } diff --git a/src/modules/configuration.module.ts b/src/modules/configuration.module.ts index dcdde9e..d4df8a3 100644 --- a/src/modules/configuration.module.ts +++ b/src/modules/configuration.module.ts @@ -1,14 +1,14 @@ import { MicrobootstrapSettings, MicrobootstrapLoader } from '@hugobyte/microbootstrap'; import { util } from 'config'; -import { buildYup } from 'schema-to-yup'; import { readFileSync } from 'fs'; import { join } from 'path'; import { ConfigurationException } from "@exceptions/index"; +import Ajv, { DefinedError } from "ajv" /** * Configuration Module validates the config passed through environment variables with the schema provided in /config/schema.json. * Config is parsed and loaded using https://github.com/lorenwest/node-config. - * Config validation is done using https://github.com/jquense/yup. + * Config validation is done using https://github.com/ajv-validator/ajv. */ export const ConfigurationModule: MicrobootstrapLoader = (frameworkSettings: MicrobootstrapSettings | undefined) => { @@ -20,13 +20,21 @@ export const ConfigurationModule: MicrobootstrapLoader = (frameworkSettings: Mic validateConfiguration({ schema, configuration }); } catch (error) { - if (typeof error === 'string') throw new ConfigurationException(error); - throw new ConfigurationException(error.message); + if (typeof error === 'string') throw new ConfigurationException("", error); + throw new ConfigurationException(error.dataPath, error.message); } } } export const validateConfiguration = ({ schema, configuration }) => { - const yupSchema = buildYup(schema, {}); - return yupSchema.validateSync(configuration) + const ajv = new Ajv(); + const validate = ajv.compile(schema); + const isValidConfiguration = validate(configuration); + + if (!isValidConfiguration) { + for (const error of validate.errors as DefinedError[]) { + throw error; + } + } + return isValidConfiguration; } \ No newline at end of file diff --git a/src/modules/health.module.ts b/src/modules/health.module.ts index c27032a..fd6aa14 100644 --- a/src/modules/health.module.ts +++ b/src/modules/health.module.ts @@ -1,5 +1,6 @@ import { MicrobootstrapSettings, MicrobootstrapLoader } from '@hugobyte/microbootstrap'; import micro from 'micro'; +import { util } from 'config'; /** * Health Module to check application health for kubernetes @@ -7,8 +8,10 @@ import micro from 'micro'; export const HealthModule: MicrobootstrapLoader = (frameworkSettings: MicrobootstrapSettings | undefined) => { if (frameworkSettings) { + const { healthAPIPort } = util.loadFileConfigs(); + const server = micro(() => "OK!"); - server.listen(80); + server.listen(healthAPIPort); } } \ No newline at end of file diff --git a/tests/configuration.test.ts b/tests/configuration.test.ts index cad46dc..6951670 100644 --- a/tests/configuration.test.ts +++ b/tests/configuration.test.ts @@ -45,9 +45,7 @@ describe('Validate schema configuration', () => { chainEndpoint: "wss://localhost" } - expect(validateConfiguration({ schema, configuration })).toStrictEqual({ - chainEndpoint: "wss://localhost" - }) + expect(validateConfiguration({ schema, configuration })).toStrictEqual(true) }); test('Protocol of the chain endpoint property should be invalid', () => { diff --git a/yarn.lock b/yarn.lock index c54a136..988a0a8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -232,7 +232,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.10.5", "@babel/runtime@^7.12.5": +"@babel/runtime@^7.12.5": version "7.12.5" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e" integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg== @@ -839,11 +839,6 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= -"@types/lodash@^4.14.165": - version "4.14.166" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.166.tgz#07e7f2699a149219dbc3c35574f126ec8737688f" - integrity sha512-A3YT/c1oTlyvvW/GQqG86EyqWNrT/tisOIh2mW3YCgcx71TNjiTZA3zYZWA5BCmtsOTXjhliy4c4yEkErw6njA== - "@types/micro@^7.3.3": version "7.3.3" resolved "https://registry.yarnpkg.com/@types/micro/-/micro-7.3.3.tgz#31ead8df18ac10d58b7be1186d4b2d977b13a938" @@ -946,6 +941,16 @@ ajv@^6.12.3: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-7.1.1.tgz#1e6b37a454021fa9941713f38b952fc1c8d32a84" + integrity sha512-ga/aqDYnUy/o7vbsRTFhhTsNeXiYb5JWDIcRIeZfwRNCefwjNTVYCGdGSUrEmiu3yDK3vFvNbgJxvrQW4JXrYQ== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + ansi-align@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" @@ -1471,11 +1476,6 @@ camelcase@^2.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= -camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= - camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" @@ -2196,11 +2196,6 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -dashify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/dashify/-/dashify-2.0.0.tgz#fff270ca2868ca427fee571de35691d6e437a648" - integrity sha512-hpA5C/YrPjucXypHPPc0oJ1l9Hf6wWbiOL7Ik42cxnsUOhWiCB/fylKbKqqJalW9FgkNQCw16YO8uW9Hs0Iy1A== - data-urls@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" @@ -2368,6 +2363,11 @@ dot-prop@^5.2.0: dependencies: is-obj "^2.0.0" +dotenv@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" + integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== + duplexer3@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" @@ -2747,11 +2747,6 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" -fn-name@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fn-name/-/fn-name-2.0.1.tgz#5214d7537a4d06a4a301c0cc262feb84188002e7" - integrity sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc= - fn.name@1.x.x: version "1.1.0" resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" @@ -4016,6 +4011,11 @@ json-schema-traverse@^0.4.1: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" @@ -4174,11 +4174,6 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" -lodash-es@^4.17.11: - version "4.17.20" - resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.20.tgz#29f6332eefc60e849f869c264bc71126ad61e8f7" - integrity sha512-JD1COMZsq8maT6mnuz1UMV0jvYD0E0aUsSOdrr1/nAG3dhqQXwRRgeW0cSqH1U43INKcqxaiVIQNOUDld7gRDA== - lodash.get@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" @@ -4194,7 +4189,7 @@ lodash.sortby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= -lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.4, lodash@^4.5.1: +lodash@^4.17.14, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.4, lodash@^4.5.1: version "4.17.20" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== @@ -4472,11 +4467,6 @@ nan@^2.14.0: resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== -nanoclone@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/nanoclone/-/nanoclone-0.2.1.tgz#dd4090f8f1a110d26bb32c49ed2f5b9235209ed4" - integrity sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA== - nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" @@ -5107,16 +5097,6 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.5" -property-expr@^1.5.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-1.5.1.tgz#22e8706894a0c8e28d58735804f6ba3a3673314f" - integrity sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g== - -property-expr@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-2.0.4.tgz#37b925478e58965031bb612ec5b3260f8241e910" - integrity sha512-sFPkHQjVKheDNnPvotjQmm3KD3uk1fWKUN7CrpdbwmUx3CrG3QiM8QpTSimvig5vTXmTvjz7+TDvXOI9+4rkcg== - ps-tree@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.2.0.tgz#5e7425b89508736cdd4f2224d028f7bb3f722ebd" @@ -5387,6 +5367,11 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + require-main-filename@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" @@ -5522,16 +5507,6 @@ saxes@^5.0.0: dependencies: xmlchars "^2.2.0" -schema-to-yup@^1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/schema-to-yup/-/schema-to-yup-1.10.0.tgz#433e7a3d78fdd8f4a11cca985148ec605eeebc88" - integrity sha512-cgfcklVmS+Z4YaAG6p30LEDAYkUqvIB8zO+ekV26QlxggjTA/rE/fMIsoakjIatL3SgVXP+6v3WoHVx1r7J7aA== - dependencies: - dashify "^2.0.0" - uniq "^1.0.1" - uppercamelcase "^3.0.0" - yup "^0.27.0" - scryptsy@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/scryptsy/-/scryptsy-2.1.0.tgz#8d1e8d0c025b58fdd25b6fa9a0dc905ee8faa790" @@ -6032,11 +6007,6 @@ symbol-tree@^3.2.4: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -synchronous-promise@^2.0.6: - version "2.0.15" - resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.15.tgz#07ca1822b9de0001f5ff73595f3d08c4f720eb8e" - integrity sha512-k8uzYIkIVwmT+TcglpdN50pS2y1BDcUnBPK9iJeGu0Pl1lOI8pD6wtzgw91Pjpe+RxtTncw32tLxs/R0yNL2Mg== - tar@^4: version "4.4.13" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" @@ -6146,11 +6116,6 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" -toposort@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" - integrity sha1-riF2gXXRVZ1IvvNUILL0li8JwzA= - touch@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" @@ -6368,11 +6333,6 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^2.0.1" -uniq@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= - unique-string@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" @@ -6417,13 +6377,6 @@ update-notifier@^4.1.0: semver-diff "^3.1.1" xdg-basedir "^4.0.0" -uppercamelcase@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/uppercamelcase/-/uppercamelcase-3.0.0.tgz#380b321b8d73cba16fec4d752a575152d1ef7317" - integrity sha1-OAsyG41zy6Fv7E11KldRUtHvcxc= - dependencies: - camelcase "^4.1.0" - uri-js@^4.2.2: version "4.4.0" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" @@ -6802,28 +6755,3 @@ yn@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== - -yup@^0.27.0: - version "0.27.0" - resolved "https://registry.yarnpkg.com/yup/-/yup-0.27.0.tgz#f8cb198c8e7dd2124beddc2457571329096b06e7" - integrity sha512-v1yFnE4+u9za42gG/b/081E7uNW9mUj3qtkmelLbW5YPROZzSH/KUUyJu9Wt8vxFJcT9otL/eZopS0YK1L5yPQ== - dependencies: - "@babel/runtime" "^7.0.0" - fn-name "~2.0.1" - lodash "^4.17.11" - property-expr "^1.5.0" - synchronous-promise "^2.0.6" - toposort "^2.0.2" - -yup@^0.32.8: - version "0.32.8" - resolved "https://registry.yarnpkg.com/yup/-/yup-0.32.8.tgz#16e4a949a86a69505abf99fd0941305ac9adfc39" - integrity sha512-SZulv5FIZ9d5H99EN5tRCRPXL0eyoYxWIP1AacCrjC9d4DfP13J1dROdKGfpfRHT3eQB6/ikBl5jG21smAfCkA== - dependencies: - "@babel/runtime" "^7.10.5" - "@types/lodash" "^4.14.165" - lodash "^4.17.20" - lodash-es "^4.17.11" - nanoclone "^0.2.1" - property-expr "^2.0.4" - toposort "^2.0.2"