diff --git a/.circleci/config.yml b/.circleci/config.yml index a5ca486edf..8dd22fa444 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -3,13 +3,13 @@ orbs: node: circleci/node@3.0.0 executors: - node: - parameters: - image: - type: string - default: "12.13" - docker: - - image: circleci/node:<< parameters.image >> + node: + parameters: + image: + type: string + default: "14.18" + docker: + - image: circleci/node:<< parameters.image >> aliases: install_node_modules: &install_node_modules @@ -18,7 +18,7 @@ aliases: command: yarn --frozen-lockfile attach_to_bootstrap: &attach_to_bootstrap attach_workspace: - at: ./ + at: ./ jobs: bootstrap: diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000000..1faf09169d --- /dev/null +++ b/.eslintignore @@ -0,0 +1,101 @@ +# FILES TODO + +/packages/medusa/src/services/cart.js +/packages/medusa/src/services/claim-item.js +/packages/medusa/src/services/customer.js +/packages/medusa/src/services/draft-order.js +/packages/medusa/src/services/event-bus.js +/packages/medusa/src/services/fulfillment-provider.js +/packages/medusa/src/services/idempotency-key.js +/packages/medusa/src/services/inventory.js +/packages/medusa/src/services/line-item.js +/packages/medusa/src/services/middleware.js +/packages/medusa/src/services/note.js +/packages/medusa/src/services/notification.js +/packages/medusa/src/services/oauth.js +/packages/medusa/src/services/payment-provider.js +/packages/medusa/src/services/product-collection.js +/packages/medusa/src/services/product-variant.js +/packages/medusa/src/services/product.js +/packages/medusa/src/services/query-builder.js +/packages/medusa/src/services/return-reason.js +/packages/medusa/src/services/return.js +/packages/medusa/src/services/shipping-option.js +/packages/medusa/src/services/shipping-profile.js +/packages/medusa/src/services/store.js +/packages/medusa/src/services/swap.js +/packages/medusa/src/services/system-payment-provider.js +/packages/medusa/src/services/totals.js + +/packages/medusa/src/subscribers/notification.js +/packages/medusa/src/subscribers/order.js + +/packages/medusa/src/loaders/api.js +/packages/medusa/src/loaders/database.js +/packages/medusa/src/loaders/defaults.js +/packages/medusa/src/loaders/express.js +/packages/medusa/src/loaders/index.js +/packages/medusa/src/loaders/logger.js +/packages/medusa/src/loaders/models.js +/packages/medusa/src/loaders/passport.js +/packages/medusa/src/loaders/plugins.js +/packages/medusa/src/loaders/redis.js +/packages/medusa/src/loaders/repositories.js +/packages/medusa/src/loaders/services.js +/packages/medusa/src/loaders/subscribers.js + +# END OF FILES TODO + +/packages/medusa/src/api +/packages/medusa/src/models +/packages/medusa/src/repositories +/packages/medusa/src/commands +/packages/medusa/src/helpers +/packages/medusa/src/migrations +/packages/medusa/src/utils + +/integration-tests +/docs +/docs-util +/scripts +/www +/packages/babel-preset-medusa-package +/packages/create-medusa-app +/packages/medusa-cli +/packages/medusa-core-utils +/packages/medusa-dev-cli +/packages/medusa-file-s3 +/packages/medusa-file-spaces +/packages/medusa-fulfillment-manual +/packages/medusa-fulfillment-webshipper +/packages/medusa-interfaces +/packages/medusa-payment-adyen +/packages/medusa-payment-klarna +/packages/medusa-payment-manual +/packages/medusa-payment-paypal +/packages/medusa-payment-stripe +/packages/medusa-plugin-add-ons +/packages/medusa-plugin-brightpearl +/packages/medusa-plugin-contentful +/packages/medusa-plugin-discount-generator +/packages/medusa-plugin-economic +/packages/medusa-plugin-ip-lookup +/packages/medusa-plugin-mailchimp +/packages/medusa-plugin-permissions +/packages/medusa-plugin-restock-notification +/packages/medusa-plugin-segment +/packages/medusa-plugin-sendgrid +/packages/medusa-plugin-slack-notification +/packages/medusa-plugin-twilio-sms +/packages/medusa-plugin-wishlist +/packages/medusa-telemetry +/packages/medusa-test-utils + +packages/**/scripts +packages/*/*.js +**/dist/* + +**/__mocks__/* +**/__tests__/* + +jest.config.js diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index 2a889697f0..0000000000 --- a/.eslintrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "plugins": ["prettier"], - "extends": ["prettier"], - "rules": { - "prettier/prettier": "error", - "semi": "error", - "no-unused-expressions": "true" - } -} diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000000..c40421efa9 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,33 @@ +module.exports = { + parser: `@babel/eslint-parser`, + parserOptions: { + requireConfigFile: false, + ecmaFeatures: { + experimentalDecorators: true, + }, + }, + plugins: [`eslint-plugin-prettier`], + extends: [`eslint:recommended`, `google`, `eslint-config-prettier`], + rules: { + "prettier/prettier": `error`, + curly: [2, `all`], + "new-cap": `off`, + "require-jsdoc": `off`, + semi: `off`, + "no-unused-expressions": `off`, + camelcase: `off`, + }, + env: { + es6: true, + node: true, + jest: true, + }, + overrides: [ + { + files: [`*.ts`], + parser: `@typescript-eslint/parser`, + plugins: [`@typescript-eslint/eslint-plugin`], + extends: [`plugin:@typescript-eslint/recommended`], + }, + ], +} diff --git a/.gitignore b/.gitignore index 99c023dd24..b4a5fb20f6 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,5 @@ node_modules .DS_Store lerna-debug.log +.eslintcache + diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100755 index 0000000000..80160b183b --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,4 @@ +#!/bin/sh +. "$(dirname "$0")/_/husky.sh" + +node_modules/.bin/lint-staged || node scripts/on-lint-error.js diff --git a/jest-transformer.js b/jest-transformer.js index a5f750c9d6..f6d0fb7336 100644 --- a/jest-transformer.js +++ b/jest-transformer.js @@ -1,4 +1,4 @@ -const babelPreset = require(`babel-preset-medusa-package`)(); +const babelPreset = require(`babel-preset-medusa-package`)() module.exports = require(`babel-jest`).createTransformer({ ...babelPreset, -}); +}) diff --git a/package.json b/package.json index b30f2a4d29..358c4a0cb9 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "private": true, "devDependencies": { "@babel/core": "^7.12.7", + "@babel/eslint-parser": "^7.15.8", "@babel/node": "^7.12.6", "@babel/plugin-proposal-class-properties": "^7.10.4", "@babel/plugin-transform-classes": "^7.10.4", @@ -11,16 +12,24 @@ "@babel/preset-env": "^7.11.5", "@babel/register": "^7.11.5", "@babel/runtime": "^7.11.2", + "@typescript-eslint/eslint-plugin": "^5.0.0", + "@typescript-eslint/parser": "^5.0.0", "axios": "^0.21.1", "axios-mock-adapter": "^1.19.0", "babel-jest": "^26.6.3", "babel-preset-medusa-package": "^1.0.0", "cross-env": "^7.0.2", + "eslint": "^8.0.0", + "eslint-config-google": "^0.14.0", + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-prettier": "^4.0.0", "express": "^4.17.1", "get-port": "^5.1.1", + "husky": "^7.0.2", "import-from": "^3.0.0", "jest": "^26.6.3", "lerna": "^3.22.1", + "lint-staged": "^11.2.3", "microbundle": "^0.13.3", "mongoose": "^5.10.15", "pg-god": "^1.0.11", @@ -28,9 +37,16 @@ "resolve-cwd": "^3.0.0", "typeorm": "^0.2.31" }, + "lint-staged": { + "*.{js,jsx,ts,tsx}": "eslint --ext .js,.jsx,.ts,.tsx --fix", + "*.{md,yaml,yml}": "prettier --write" + }, "scripts": { + "hooks:install": "husky install", + "hooks:uninstall": "husky uninstall", "publish:next": "lerna publish --canary --preid next --dist-tag next", "bootstrap": "lerna bootstrap", + "lint": "eslint --ext .js,.jsx,.ts,.tsx .", "jest": "jest", "test": "jest", "prettier": "prettier", diff --git a/packages/medusa-cli/.eslintrc b/packages/medusa-cli/.eslintrc deleted file mode 100644 index 2a889697f0..0000000000 --- a/packages/medusa-cli/.eslintrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "plugins": ["prettier"], - "extends": ["prettier"], - "rules": { - "prettier/prettier": "error", - "semi": "error", - "no-unused-expressions": "true" - } -} diff --git a/packages/medusa-cli/.prettierrc b/packages/medusa-cli/.prettierrc deleted file mode 100644 index 70175ce150..0000000000 --- a/packages/medusa-cli/.prettierrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "endOfLine": "lf", - "semi": false, - "singleQuote": false, - "tabWidth": 2, - "trailingComma": "es5" -} \ No newline at end of file diff --git a/packages/medusa-core-utils/.eslintrc b/packages/medusa-core-utils/.eslintrc deleted file mode 100644 index 2a889697f0..0000000000 --- a/packages/medusa-core-utils/.eslintrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "plugins": ["prettier"], - "extends": ["prettier"], - "rules": { - "prettier/prettier": "error", - "semi": "error", - "no-unused-expressions": "true" - } -} diff --git a/packages/medusa-core-utils/.prettierrc b/packages/medusa-core-utils/.prettierrc deleted file mode 100644 index 70175ce150..0000000000 --- a/packages/medusa-core-utils/.prettierrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "endOfLine": "lf", - "semi": false, - "singleQuote": false, - "tabWidth": 2, - "trailingComma": "es5" -} \ No newline at end of file diff --git a/packages/medusa-file-s3/.eslintrc b/packages/medusa-file-s3/.eslintrc deleted file mode 100644 index 2a889697f0..0000000000 --- a/packages/medusa-file-s3/.eslintrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "plugins": ["prettier"], - "extends": ["prettier"], - "rules": { - "prettier/prettier": "error", - "semi": "error", - "no-unused-expressions": "true" - } -} diff --git a/packages/medusa-file-s3/.prettierrc b/packages/medusa-file-s3/.prettierrc deleted file mode 100644 index 48e90e8d40..0000000000 --- a/packages/medusa-file-s3/.prettierrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "endOfLine": "lf", - "semi": false, - "singleQuote": false, - "tabWidth": 2, - "trailingComma": "es5" -} diff --git a/packages/medusa-file-spaces/.eslintrc b/packages/medusa-file-spaces/.eslintrc deleted file mode 100644 index 2a889697f0..0000000000 --- a/packages/medusa-file-spaces/.eslintrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "plugins": ["prettier"], - "extends": ["prettier"], - "rules": { - "prettier/prettier": "error", - "semi": "error", - "no-unused-expressions": "true" - } -} diff --git a/packages/medusa-file-spaces/.prettierrc b/packages/medusa-file-spaces/.prettierrc deleted file mode 100644 index 70175ce150..0000000000 --- a/packages/medusa-file-spaces/.prettierrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "endOfLine": "lf", - "semi": false, - "singleQuote": false, - "tabWidth": 2, - "trailingComma": "es5" -} \ No newline at end of file diff --git a/packages/medusa-fulfillment-manual/.eslintrc b/packages/medusa-fulfillment-manual/.eslintrc deleted file mode 100644 index 797b6ef5bf..0000000000 --- a/packages/medusa-fulfillment-manual/.eslintrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "plugins": ["prettier"], - "extends": ["prettier"], - "rules": { - "prettier/prettier": "error", - "semi": "error", - "no-unused-expressions": "true" - } -} \ No newline at end of file diff --git a/packages/medusa-fulfillment-manual/.prettierrc b/packages/medusa-fulfillment-manual/.prettierrc deleted file mode 100644 index 70175ce150..0000000000 --- a/packages/medusa-fulfillment-manual/.prettierrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "endOfLine": "lf", - "semi": false, - "singleQuote": false, - "tabWidth": 2, - "trailingComma": "es5" -} \ No newline at end of file diff --git a/packages/medusa-fulfillment-webshipper/.eslintrc b/packages/medusa-fulfillment-webshipper/.eslintrc deleted file mode 100644 index 797b6ef5bf..0000000000 --- a/packages/medusa-fulfillment-webshipper/.eslintrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "plugins": ["prettier"], - "extends": ["prettier"], - "rules": { - "prettier/prettier": "error", - "semi": "error", - "no-unused-expressions": "true" - } -} \ No newline at end of file diff --git a/packages/medusa-fulfillment-webshipper/.prettierrc b/packages/medusa-fulfillment-webshipper/.prettierrc deleted file mode 100644 index 70175ce150..0000000000 --- a/packages/medusa-fulfillment-webshipper/.prettierrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "endOfLine": "lf", - "semi": false, - "singleQuote": false, - "tabWidth": 2, - "trailingComma": "es5" -} \ No newline at end of file diff --git a/packages/medusa-interfaces/.eslintrc b/packages/medusa-interfaces/.eslintrc deleted file mode 100644 index 2a889697f0..0000000000 --- a/packages/medusa-interfaces/.eslintrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "plugins": ["prettier"], - "extends": ["prettier"], - "rules": { - "prettier/prettier": "error", - "semi": "error", - "no-unused-expressions": "true" - } -} diff --git a/packages/medusa-interfaces/.prettierrc b/packages/medusa-interfaces/.prettierrc deleted file mode 100644 index 70175ce150..0000000000 --- a/packages/medusa-interfaces/.prettierrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "endOfLine": "lf", - "semi": false, - "singleQuote": false, - "tabWidth": 2, - "trailingComma": "es5" -} \ No newline at end of file diff --git a/packages/medusa-payment-adyen/.eslintrc b/packages/medusa-payment-adyen/.eslintrc deleted file mode 100644 index 2a889697f0..0000000000 --- a/packages/medusa-payment-adyen/.eslintrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "plugins": ["prettier"], - "extends": ["prettier"], - "rules": { - "prettier/prettier": "error", - "semi": "error", - "no-unused-expressions": "true" - } -} diff --git a/packages/medusa-payment-adyen/.prettierrc b/packages/medusa-payment-adyen/.prettierrc deleted file mode 100644 index 70175ce150..0000000000 --- a/packages/medusa-payment-adyen/.prettierrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "endOfLine": "lf", - "semi": false, - "singleQuote": false, - "tabWidth": 2, - "trailingComma": "es5" -} \ No newline at end of file diff --git a/packages/medusa-payment-klarna/.eslintrc b/packages/medusa-payment-klarna/.eslintrc deleted file mode 100644 index 2a889697f0..0000000000 --- a/packages/medusa-payment-klarna/.eslintrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "plugins": ["prettier"], - "extends": ["prettier"], - "rules": { - "prettier/prettier": "error", - "semi": "error", - "no-unused-expressions": "true" - } -} diff --git a/packages/medusa-payment-klarna/.prettierrc b/packages/medusa-payment-klarna/.prettierrc deleted file mode 100644 index 48e90e8d40..0000000000 --- a/packages/medusa-payment-klarna/.prettierrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "endOfLine": "lf", - "semi": false, - "singleQuote": false, - "tabWidth": 2, - "trailingComma": "es5" -} diff --git a/packages/medusa-payment-manual/.eslintrc b/packages/medusa-payment-manual/.eslintrc deleted file mode 100644 index 2a889697f0..0000000000 --- a/packages/medusa-payment-manual/.eslintrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "plugins": ["prettier"], - "extends": ["prettier"], - "rules": { - "prettier/prettier": "error", - "semi": "error", - "no-unused-expressions": "true" - } -} diff --git a/packages/medusa-payment-manual/.prettierrc b/packages/medusa-payment-manual/.prettierrc deleted file mode 100644 index 70175ce150..0000000000 --- a/packages/medusa-payment-manual/.prettierrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "endOfLine": "lf", - "semi": false, - "singleQuote": false, - "tabWidth": 2, - "trailingComma": "es5" -} \ No newline at end of file diff --git a/packages/medusa-payment-paypal/.eslintrc b/packages/medusa-payment-paypal/.eslintrc deleted file mode 100644 index 2a889697f0..0000000000 --- a/packages/medusa-payment-paypal/.eslintrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "plugins": ["prettier"], - "extends": ["prettier"], - "rules": { - "prettier/prettier": "error", - "semi": "error", - "no-unused-expressions": "true" - } -} diff --git a/packages/medusa-payment-paypal/.prettierrc b/packages/medusa-payment-paypal/.prettierrc deleted file mode 100644 index 70175ce150..0000000000 --- a/packages/medusa-payment-paypal/.prettierrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "endOfLine": "lf", - "semi": false, - "singleQuote": false, - "tabWidth": 2, - "trailingComma": "es5" -} \ No newline at end of file diff --git a/packages/medusa-payment-stripe/.eslintrc b/packages/medusa-payment-stripe/.eslintrc deleted file mode 100644 index 2a889697f0..0000000000 --- a/packages/medusa-payment-stripe/.eslintrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "plugins": ["prettier"], - "extends": ["prettier"], - "rules": { - "prettier/prettier": "error", - "semi": "error", - "no-unused-expressions": "true" - } -} diff --git a/packages/medusa-payment-stripe/.prettierrc b/packages/medusa-payment-stripe/.prettierrc deleted file mode 100644 index 70175ce150..0000000000 --- a/packages/medusa-payment-stripe/.prettierrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "endOfLine": "lf", - "semi": false, - "singleQuote": false, - "tabWidth": 2, - "trailingComma": "es5" -} \ No newline at end of file diff --git a/packages/medusa-plugin-add-ons/.eslintrc b/packages/medusa-plugin-add-ons/.eslintrc deleted file mode 100644 index 2a889697f0..0000000000 --- a/packages/medusa-plugin-add-ons/.eslintrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "plugins": ["prettier"], - "extends": ["prettier"], - "rules": { - "prettier/prettier": "error", - "semi": "error", - "no-unused-expressions": "true" - } -} diff --git a/packages/medusa-plugin-add-ons/.prettierrc b/packages/medusa-plugin-add-ons/.prettierrc deleted file mode 100644 index 70175ce150..0000000000 --- a/packages/medusa-plugin-add-ons/.prettierrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "endOfLine": "lf", - "semi": false, - "singleQuote": false, - "tabWidth": 2, - "trailingComma": "es5" -} \ No newline at end of file diff --git a/packages/medusa-plugin-brightpearl/.eslintrc b/packages/medusa-plugin-brightpearl/.eslintrc deleted file mode 100644 index 2a889697f0..0000000000 --- a/packages/medusa-plugin-brightpearl/.eslintrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "plugins": ["prettier"], - "extends": ["prettier"], - "rules": { - "prettier/prettier": "error", - "semi": "error", - "no-unused-expressions": "true" - } -} diff --git a/packages/medusa-plugin-brightpearl/.prettierrc b/packages/medusa-plugin-brightpearl/.prettierrc deleted file mode 100644 index 70175ce150..0000000000 --- a/packages/medusa-plugin-brightpearl/.prettierrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "endOfLine": "lf", - "semi": false, - "singleQuote": false, - "tabWidth": 2, - "trailingComma": "es5" -} \ No newline at end of file diff --git a/packages/medusa-plugin-contentful/.eslintrc b/packages/medusa-plugin-contentful/.eslintrc deleted file mode 100644 index 2a889697f0..0000000000 --- a/packages/medusa-plugin-contentful/.eslintrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "plugins": ["prettier"], - "extends": ["prettier"], - "rules": { - "prettier/prettier": "error", - "semi": "error", - "no-unused-expressions": "true" - } -} diff --git a/packages/medusa-plugin-contentful/.prettierrc b/packages/medusa-plugin-contentful/.prettierrc deleted file mode 100644 index 70175ce150..0000000000 --- a/packages/medusa-plugin-contentful/.prettierrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "endOfLine": "lf", - "semi": false, - "singleQuote": false, - "tabWidth": 2, - "trailingComma": "es5" -} \ No newline at end of file diff --git a/packages/medusa-plugin-discount-generator/.eslintrc b/packages/medusa-plugin-discount-generator/.eslintrc deleted file mode 100644 index 2a889697f0..0000000000 --- a/packages/medusa-plugin-discount-generator/.eslintrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "plugins": ["prettier"], - "extends": ["prettier"], - "rules": { - "prettier/prettier": "error", - "semi": "error", - "no-unused-expressions": "true" - } -} diff --git a/packages/medusa-plugin-discount-generator/.prettierrc b/packages/medusa-plugin-discount-generator/.prettierrc deleted file mode 100644 index 70175ce150..0000000000 --- a/packages/medusa-plugin-discount-generator/.prettierrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "endOfLine": "lf", - "semi": false, - "singleQuote": false, - "tabWidth": 2, - "trailingComma": "es5" -} \ No newline at end of file diff --git a/packages/medusa-plugin-economic/.eslintrc b/packages/medusa-plugin-economic/.eslintrc deleted file mode 100644 index 2a889697f0..0000000000 --- a/packages/medusa-plugin-economic/.eslintrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "plugins": ["prettier"], - "extends": ["prettier"], - "rules": { - "prettier/prettier": "error", - "semi": "error", - "no-unused-expressions": "true" - } -} diff --git a/packages/medusa-plugin-economic/.prettierrc b/packages/medusa-plugin-economic/.prettierrc deleted file mode 100644 index 70175ce150..0000000000 --- a/packages/medusa-plugin-economic/.prettierrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "endOfLine": "lf", - "semi": false, - "singleQuote": false, - "tabWidth": 2, - "trailingComma": "es5" -} \ No newline at end of file diff --git a/packages/medusa-plugin-ip-lookup/.prettierrc b/packages/medusa-plugin-ip-lookup/.prettierrc deleted file mode 100644 index 70175ce150..0000000000 --- a/packages/medusa-plugin-ip-lookup/.prettierrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "endOfLine": "lf", - "semi": false, - "singleQuote": false, - "tabWidth": 2, - "trailingComma": "es5" -} \ No newline at end of file diff --git a/packages/medusa-plugin-mailchimp/.eslintrc b/packages/medusa-plugin-mailchimp/.eslintrc deleted file mode 100644 index 2a889697f0..0000000000 --- a/packages/medusa-plugin-mailchimp/.eslintrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "plugins": ["prettier"], - "extends": ["prettier"], - "rules": { - "prettier/prettier": "error", - "semi": "error", - "no-unused-expressions": "true" - } -} diff --git a/packages/medusa-plugin-mailchimp/.prettierrc b/packages/medusa-plugin-mailchimp/.prettierrc deleted file mode 100644 index 70175ce150..0000000000 --- a/packages/medusa-plugin-mailchimp/.prettierrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "endOfLine": "lf", - "semi": false, - "singleQuote": false, - "tabWidth": 2, - "trailingComma": "es5" -} \ No newline at end of file diff --git a/packages/medusa-plugin-permissions/.prettierrc b/packages/medusa-plugin-permissions/.prettierrc deleted file mode 100644 index 70175ce150..0000000000 --- a/packages/medusa-plugin-permissions/.prettierrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "endOfLine": "lf", - "semi": false, - "singleQuote": false, - "tabWidth": 2, - "trailingComma": "es5" -} \ No newline at end of file diff --git a/packages/medusa-plugin-restock-notification/.eslintrc b/packages/medusa-plugin-restock-notification/.eslintrc deleted file mode 100644 index 2a889697f0..0000000000 --- a/packages/medusa-plugin-restock-notification/.eslintrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "plugins": ["prettier"], - "extends": ["prettier"], - "rules": { - "prettier/prettier": "error", - "semi": "error", - "no-unused-expressions": "true" - } -} diff --git a/packages/medusa-plugin-restock-notification/.prettierrc b/packages/medusa-plugin-restock-notification/.prettierrc deleted file mode 100644 index 70175ce150..0000000000 --- a/packages/medusa-plugin-restock-notification/.prettierrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "endOfLine": "lf", - "semi": false, - "singleQuote": false, - "tabWidth": 2, - "trailingComma": "es5" -} \ No newline at end of file diff --git a/packages/medusa-plugin-segment/.eslintrc b/packages/medusa-plugin-segment/.eslintrc deleted file mode 100644 index 2a889697f0..0000000000 --- a/packages/medusa-plugin-segment/.eslintrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "plugins": ["prettier"], - "extends": ["prettier"], - "rules": { - "prettier/prettier": "error", - "semi": "error", - "no-unused-expressions": "true" - } -} diff --git a/packages/medusa-plugin-segment/.prettierrc b/packages/medusa-plugin-segment/.prettierrc deleted file mode 100644 index 70175ce150..0000000000 --- a/packages/medusa-plugin-segment/.prettierrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "endOfLine": "lf", - "semi": false, - "singleQuote": false, - "tabWidth": 2, - "trailingComma": "es5" -} \ No newline at end of file diff --git a/packages/medusa-plugin-sendgrid/.eslintrc b/packages/medusa-plugin-sendgrid/.eslintrc deleted file mode 100644 index 2a889697f0..0000000000 --- a/packages/medusa-plugin-sendgrid/.eslintrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "plugins": ["prettier"], - "extends": ["prettier"], - "rules": { - "prettier/prettier": "error", - "semi": "error", - "no-unused-expressions": "true" - } -} diff --git a/packages/medusa-plugin-sendgrid/.prettierrc b/packages/medusa-plugin-sendgrid/.prettierrc deleted file mode 100644 index 70175ce150..0000000000 --- a/packages/medusa-plugin-sendgrid/.prettierrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "endOfLine": "lf", - "semi": false, - "singleQuote": false, - "tabWidth": 2, - "trailingComma": "es5" -} \ No newline at end of file diff --git a/packages/medusa-plugin-slack-notification/.eslintrc b/packages/medusa-plugin-slack-notification/.eslintrc deleted file mode 100644 index 2a889697f0..0000000000 --- a/packages/medusa-plugin-slack-notification/.eslintrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "plugins": ["prettier"], - "extends": ["prettier"], - "rules": { - "prettier/prettier": "error", - "semi": "error", - "no-unused-expressions": "true" - } -} diff --git a/packages/medusa-plugin-slack-notification/.prettierrc b/packages/medusa-plugin-slack-notification/.prettierrc deleted file mode 100644 index 70175ce150..0000000000 --- a/packages/medusa-plugin-slack-notification/.prettierrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "endOfLine": "lf", - "semi": false, - "singleQuote": false, - "tabWidth": 2, - "trailingComma": "es5" -} \ No newline at end of file diff --git a/packages/medusa-plugin-twilio-sms/.eslintrc b/packages/medusa-plugin-twilio-sms/.eslintrc deleted file mode 100644 index 2a889697f0..0000000000 --- a/packages/medusa-plugin-twilio-sms/.eslintrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "plugins": ["prettier"], - "extends": ["prettier"], - "rules": { - "prettier/prettier": "error", - "semi": "error", - "no-unused-expressions": "true" - } -} diff --git a/packages/medusa-plugin-twilio-sms/.prettierrc b/packages/medusa-plugin-twilio-sms/.prettierrc deleted file mode 100644 index 70175ce150..0000000000 --- a/packages/medusa-plugin-twilio-sms/.prettierrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "endOfLine": "lf", - "semi": false, - "singleQuote": false, - "tabWidth": 2, - "trailingComma": "es5" -} \ No newline at end of file diff --git a/packages/medusa-plugin-wishlist/.eslintrc b/packages/medusa-plugin-wishlist/.eslintrc deleted file mode 100644 index 2a889697f0..0000000000 --- a/packages/medusa-plugin-wishlist/.eslintrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "plugins": ["prettier"], - "extends": ["prettier"], - "rules": { - "prettier/prettier": "error", - "semi": "error", - "no-unused-expressions": "true" - } -} diff --git a/packages/medusa-plugin-wishlist/.prettierrc b/packages/medusa-plugin-wishlist/.prettierrc deleted file mode 100644 index 70175ce150..0000000000 --- a/packages/medusa-plugin-wishlist/.prettierrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "endOfLine": "lf", - "semi": false, - "singleQuote": false, - "tabWidth": 2, - "trailingComma": "es5" -} \ No newline at end of file diff --git a/packages/medusa-telemetry/.eslintrc b/packages/medusa-telemetry/.eslintrc deleted file mode 100644 index 2a889697f0..0000000000 --- a/packages/medusa-telemetry/.eslintrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "plugins": ["prettier"], - "extends": ["prettier"], - "rules": { - "prettier/prettier": "error", - "semi": "error", - "no-unused-expressions": "true" - } -} diff --git a/packages/medusa-telemetry/.prettierrc b/packages/medusa-telemetry/.prettierrc deleted file mode 100644 index 70175ce150..0000000000 --- a/packages/medusa-telemetry/.prettierrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "endOfLine": "lf", - "semi": false, - "singleQuote": false, - "tabWidth": 2, - "trailingComma": "es5" -} \ No newline at end of file diff --git a/packages/medusa-test-utils/.eslintrc b/packages/medusa-test-utils/.eslintrc deleted file mode 100644 index 2a889697f0..0000000000 --- a/packages/medusa-test-utils/.eslintrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "plugins": ["prettier"], - "extends": ["prettier"], - "rules": { - "prettier/prettier": "error", - "semi": "error", - "no-unused-expressions": "true" - } -} diff --git a/packages/medusa/.eslintrc b/packages/medusa/.eslintrc deleted file mode 100644 index 2a889697f0..0000000000 --- a/packages/medusa/.eslintrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "plugins": ["prettier"], - "extends": ["prettier"], - "rules": { - "prettier/prettier": "error", - "semi": "error", - "no-unused-expressions": "true" - } -} diff --git a/packages/medusa/.prettierrc b/packages/medusa/.prettierrc deleted file mode 100644 index 70175ce150..0000000000 --- a/packages/medusa/.prettierrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "endOfLine": "lf", - "semi": false, - "singleQuote": false, - "tabWidth": 2, - "trailingComma": "es5" -} \ No newline at end of file diff --git a/packages/medusa/src/services/auth.js b/packages/medusa/src/services/auth.js index 3216886c5d..364524843d 100644 --- a/packages/medusa/src/services/auth.js +++ b/packages/medusa/src/services/auth.js @@ -3,7 +3,7 @@ import { BaseService } from "medusa-interfaces" /** * Can authenticate a user based on email password combination - * @implements BaseService + * @extends BaseService */ class AuthService extends BaseService { constructor({ userService, customerService }) { @@ -47,7 +47,9 @@ class AuthService extends BaseService { success: true, user, } - } catch (error) {} + } catch (error) { + // ignore + } } try { diff --git a/packages/medusa/src/services/claim.js b/packages/medusa/src/services/claim.js index 9d60a28626..8e73dbf83e 100644 --- a/packages/medusa/src/services/claim.js +++ b/packages/medusa/src/services/claim.js @@ -1,7 +1,5 @@ -import _ from "lodash" -import { Validator, MedusaError } from "medusa-core-utils" +import { MedusaError } from "medusa-core-utils" import { BaseService } from "medusa-interfaces" -import { Brackets } from "typeorm" class ClaimService extends BaseService { static Events = { @@ -102,7 +100,7 @@ class ClaimService extends BaseService { } update(id, data) { - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const claimRepo = manager.getCustomRepository(this.claimRepository_) const claim = await this.retrieve(id, { relations: ["shipping_methods"] }) @@ -113,13 +111,7 @@ class ClaimService extends BaseService { ) } - const { - claim_items, - shipping_methods, - metadata, - fulfillment_status, - no_notification, - } = data + const { claim_items, shipping_methods, metadata, no_notification } = data if (metadata) { claim.metadata = this.setMetadata_(claim, metadata) @@ -183,9 +175,11 @@ class ClaimService extends BaseService { * Creates a Claim on an Order. Claims consists of items that are claimed and * optionally items to be sent as replacement for the claimed items. The * shipping address that the new items will be shipped to + * @param {Object} data - the object containing all data required to create a claim + * @return {Object} created claim */ create(data) { - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const claimRepo = manager.getCustomRepository(this.claimRepository_) const { @@ -257,8 +251,8 @@ class ClaimService extends BaseService { let toRefund = refund_amount if (type === "refund" && typeof refund_amount === "undefined") { - const lines = claim_items.map(ci => { - const orderItem = order.items.find(oi => oi.id === ci.item_id) + const lines = claim_items.map((ci) => { + const orderItem = order.items.find((oi) => oi.id === ci.item_id) return { ...orderItem, quantity: ci.quantity, @@ -274,7 +268,7 @@ class ClaimService extends BaseService { } const newItems = await Promise.all( - additional_items.map(i => + additional_items.map((i) => this.lineItemService_ .withTransaction(manager) .generate(i.variant_id, order.region_id, i.quantity) @@ -332,7 +326,7 @@ class ClaimService extends BaseService { await this.returnService_.withTransaction(manager).create({ order_id: order.id, claim_order_id: result.id, - items: claim_items.map(ci => ({ + items: claim_items.map((ci) => ({ item_id: ci.item_id, quantity: ci.quantity, metadata: ci.metadata, @@ -362,7 +356,7 @@ class ClaimService extends BaseService { ) { const { metadata, no_notification } = config - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const claim = await this.retrieve(id, { relations: [ "additional_items", @@ -429,7 +423,7 @@ class ClaimService extends BaseService { is_claim: true, no_notification: evaluatedNoNotification, }, - claim.additional_items.map(i => ({ + claim.additional_items.map((i) => ({ item_id: i.id, quantity: i.quantity, })), @@ -445,7 +439,7 @@ class ClaimService extends BaseService { for (const item of claim.additional_items) { const fulfillmentItem = successfullyFulfilled.find( - f => item.id === f.item_id + (f) => item.id === f.item_id ) if (fulfillmentItem) { @@ -485,7 +479,7 @@ class ClaimService extends BaseService { } async cancelFulfillment(fulfillmentId) { - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const canceled = await this.fulfillmentService_ .withTransaction(manager) .cancelFulfillment(fulfillmentId) @@ -508,7 +502,7 @@ class ClaimService extends BaseService { } async processRefund(id) { - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const claim = await this.retrieve(id, { relations: ["order", "order.payments"], }) @@ -560,7 +554,7 @@ class ClaimService extends BaseService { ) { const { metadata, no_notification } = config - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const claim = await this.retrieve(id, { relations: ["additional_items"], }) @@ -584,7 +578,7 @@ class ClaimService extends BaseService { claim.fulfillment_status = "shipped" for (const i of claim.additional_items) { - const shipped = shipment.items.find(si => si.item_id === i.id) + const shipped = shipment.items.find((si) => si.item_id === i.id) if (shipped) { const shippedQty = (i.shipped_quantity || 0) + shipped.quantity await this.lineItemService_.withTransaction(manager).update(i.id, { @@ -617,7 +611,7 @@ class ClaimService extends BaseService { } async cancel(id) { - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const claim = await this.retrieve(id, { relations: ["return_order", "fulfillments", "order", "order.refunds"], }) @@ -665,6 +659,7 @@ class ClaimService extends BaseService { /** * @param {Object} selector - the query object for find + * @param {Object} config - the config object containing query settings * @return {Promise} the result of the find operation */ async list( @@ -678,7 +673,8 @@ class ClaimService extends BaseService { /** * Gets an order by id. - * @param {string} orderId - id of order to retrieve + * @param {string} claimId - id of order to retrieve + * @param {Object} config - the config object containing query settings * @return {Promise} the order document */ async retrieve(claimId, config = {}) { @@ -717,7 +713,7 @@ class ClaimService extends BaseService { const keyPath = `metadata.${key}` return this.orderModel_ .updateOne({ _id: validatedId }, { $unset: { [keyPath]: "" } }) - .catch(err => { + .catch((err) => { throw new MedusaError(MedusaError.Types.DB_ERROR, err.message) }) } diff --git a/packages/medusa/src/services/discount.js b/packages/medusa/src/services/discount.js index 70f404f378..bb796208ce 100644 --- a/packages/medusa/src/services/discount.js +++ b/packages/medusa/src/services/discount.js @@ -1,14 +1,11 @@ -import _ from "lodash" -import randomize from "randomatic" import { BaseService } from "medusa-interfaces" import { Validator, MedusaError } from "medusa-core-utils" -import { MedusaErrorCodes } from "medusa-core-utils/dist/errors" import { parse, toSeconds } from "iso8601-duration" import { Brackets, ILike } from "typeorm" /** * Provides layer to manipulate discounts. - * @implements BaseService + * @implements {BaseService} */ class DiscountService extends BaseService { constructor({ @@ -17,7 +14,6 @@ class DiscountService extends BaseService { discountRuleRepository, giftCardRepository, totalsService, - productVariantService, productService, regionService, eventBusService, @@ -80,21 +76,13 @@ class DiscountService extends BaseService { id: Validator.string().optional(), description: Validator.string().optional(), type: Validator.string().required(), - value: Validator.number() - .min(0) - .required(), + value: Validator.number().min(0).required(), allocation: Validator.string().required(), valid_for: Validator.array().optional(), created_at: Validator.date().optional(), - updated_at: Validator.date() - .allow(null) - .optional(), - deleted_at: Validator.date() - .allow(null) - .optional(), - metadata: Validator.object() - .allow(null) - .optional(), + updated_at: Validator.date().allow(null).optional(), + deleted_at: Validator.date().allow(null).optional(), + metadata: Validator.object().allow(null).optional(), }) const { value, error } = schema.validate(discountRule) @@ -117,6 +105,7 @@ class DiscountService extends BaseService { /** * @param {Object} selector - the query object for find + * @param {Object} config - the config object containing query settings * @return {Promise} the result of the find operation */ async list(selector = {}, config = { relations: [], skip: 0, take: 10 }) { @@ -130,6 +119,7 @@ class DiscountService extends BaseService { /** * @param {Object} selector - the query object for find + * @param {Object} config - the config object containing query settings * @return {Promise} the result of the find operation */ async listAndCount( @@ -153,11 +143,11 @@ class DiscountService extends BaseService { delete where.code - query.where = qb => { + query.where = (qb) => { qb.where(where) qb.andWhere( - new Brackets(qb => { + new Brackets((qb) => { qb.where({ code: ILike(`%${q}%`) }) }) ) @@ -176,19 +166,19 @@ class DiscountService extends BaseService { * @return {Promise} the result of the create operation */ async create(discount) { - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const discountRepo = manager.getCustomRepository(this.discountRepository_) const ruleRepo = manager.getCustomRepository(this.discountRuleRepository_) if (discount.rule?.valid_for) { - discount.rule.valid_for = discount.rule.valid_for.map(id => ({ id })) + discount.rule.valid_for = discount.rule.valid_for.map((id) => ({ id })) } const validatedRule = this.validateDiscountRule_(discount.rule) if (discount.regions) { discount.regions = await Promise.all( - discount.regions.map(regionId => + discount.regions.map((regionId) => this.regionService_.withTransaction(manager).retrieve(regionId) ) ) @@ -209,6 +199,7 @@ class DiscountService extends BaseService { /** * Gets a discount by id. * @param {string} discountId - id of discount to retrieve + * @param {Object} config - the config object containing query settings * @return {Promise} the discount */ async retrieve(discountId, config = {}) { @@ -233,6 +224,7 @@ class DiscountService extends BaseService { /** * Gets a discount by discount code. * @param {string} discountCode - discount code of discount to retrieve + * @param {array} relations - list of relations * @return {Promise} the discount document */ async retrieveByCode(discountCode, relations = []) { @@ -269,7 +261,7 @@ class DiscountService extends BaseService { * @return {Promise} the result of the update operation */ async update(discountId, update) { - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const discountRepo = manager.getCustomRepository(this.discountRepository_) const discount = await this.retrieve(discountId) @@ -287,7 +279,7 @@ class DiscountService extends BaseService { if (regions) { discount.regions = await Promise.all( - regions.map(regionId => this.regionService_.retrieve(regionId)) + regions.map((regionId) => this.regionService_.retrieve(regionId)) ) } @@ -298,7 +290,9 @@ class DiscountService extends BaseService { if (rule) { discount.rule = this.validateDiscountRule_(rule) if (rule.valid_for) { - discount.rule.valid_for = discount.rule.valid_for.map(id => ({ id })) + discount.rule.valid_for = discount.rule.valid_for.map((id) => ({ + id, + })) } } @@ -314,11 +308,11 @@ class DiscountService extends BaseService { /** * Creates a dynamic code for a discount id. * @param {string} discountId - the id of the discount to create a code for - * @param {string} code - the code to identify the discount by + * @param {Object} data - the object containing a code to identify the discount by * @return {Promise} the newly created dynamic code */ async createDynamicCode(discountId, data) { - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const discountRepo = manager.getCustomRepository(this.discountRepository_) const discount = await this.retrieve(discountId) @@ -367,13 +361,15 @@ class DiscountService extends BaseService { * @return {Promise} the newly created dynamic code */ async deleteDynamicCode(discountId, code) { - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const discountRepo = manager.getCustomRepository(this.discountRepository_) const discount = await discountRepo.findOne({ where: { parent_discount_id: discountId, code }, }) - if (!discount) return Promise.resolve() + if (!discount) { + return Promise.resolve() + } await discountRepo.softRemove(discount) @@ -388,7 +384,7 @@ class DiscountService extends BaseService { * @return {Promise} the result of the update operation */ async addValidProduct(discountId, productId) { - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const discountRuleRepo = manager.getCustomRepository( this.discountRuleRepository_ ) @@ -399,7 +395,7 @@ class DiscountService extends BaseService { const { rule } = discount - const exists = rule.valid_for.find(p => p.id === productId) + const exists = rule.valid_for.find((p) => p.id === productId) // If product is already present, we return early if (exists) { return rule @@ -421,7 +417,7 @@ class DiscountService extends BaseService { * @return {Promise} the result of the update operation */ async removeValidProduct(discountId, productId) { - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const discountRuleRepo = manager.getCustomRepository( this.discountRuleRepository_ ) @@ -432,13 +428,13 @@ class DiscountService extends BaseService { const { rule } = discount - const exists = rule.valid_for.find(p => p.id === productId) + const exists = rule.valid_for.find((p) => p.id === productId) // If product is not present, we return early if (!exists) { return rule } - rule.valid_for = rule.valid_for.filter(p => p.id !== productId) + rule.valid_for = rule.valid_for.filter((p) => p.id !== productId) const updated = await discountRuleRepo.save(rule) return updated @@ -452,14 +448,14 @@ class DiscountService extends BaseService { * @return {Promise} the result of the update operation */ async addRegion(discountId, regionId) { - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const discountRepo = manager.getCustomRepository(this.discountRepository_) const discount = await this.retrieve(discountId, { relations: ["regions"], }) - const exists = discount.regions.find(r => r.id === regionId) + const exists = discount.regions.find((r) => r.id === regionId) // If region is already present, we return early if (exists) { return discount @@ -481,20 +477,20 @@ class DiscountService extends BaseService { * @return {Promise} the result of the update operation */ async removeRegion(discountId, regionId) { - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const discountRepo = manager.getCustomRepository(this.discountRepository_) const discount = await this.retrieve(discountId, { relations: ["regions"], }) - const exists = discount.regions.find(r => r.id === regionId) + const exists = discount.regions.find((r) => r.id === regionId) // If region is not present, we return early if (!exists) { return discount } - discount.regions = discount.regions.filter(r => r.id !== regionId) + discount.regions = discount.regions.filter((r) => r.id !== regionId) const updated = await discountRepo.save(discount) return updated @@ -507,12 +503,14 @@ class DiscountService extends BaseService { * @return {Promise} the result of the delete operation */ async delete(discountId) { - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const discountRepo = manager.getCustomRepository(this.discountRepository_) const discount = await discountRepo.findOne({ where: { id: discountId } }) - if (!discount) return Promise.resolve() + if (!discount) { + return Promise.resolve() + } await discountRepo.softRemove(discount) @@ -522,7 +520,7 @@ class DiscountService extends BaseService { /** * Decorates a discount. - * @param {Discount} discount - the discount to decorate. + * @param {string} discountId - id of discount to decorate * @param {string[]} fields - the fields to include. * @param {string[]} expandFields - fields to expand. * @return {Discount} return the decorated discount. diff --git a/packages/medusa/src/services/fulfillment.js b/packages/medusa/src/services/fulfillment.js index ed0b4e4f80..b2cd6b71bc 100644 --- a/packages/medusa/src/services/fulfillment.js +++ b/packages/medusa/src/services/fulfillment.js @@ -1,10 +1,9 @@ -import _ from "lodash" import { BaseService } from "medusa-interfaces" import { MedusaError } from "medusa-core-utils" /** * Handles Fulfillments - * @implements BaseService + * @extends BaseService */ class FulfillmentService extends BaseService { constructor({ @@ -61,7 +60,7 @@ class FulfillmentService extends BaseService { } partitionItems_(shippingMethods, items) { - let partitioned = [] + const partitioned = [] // partition order items to their dedicated shipping method for (const method of shippingMethods) { const temp = { shipping_method: method } @@ -95,12 +94,12 @@ class FulfillmentService extends BaseService { async getFulfillmentItems_(order, items, transformer) { const toReturn = await Promise.all( items.map(async ({ item_id, quantity }) => { - const item = order.items.find(i => i.id === item_id) + const item = order.items.find((i) => i.id === item_id) return transformer(item, quantity) }) ) - return toReturn.filter(i => !!i) + return toReturn.filter((i) => !!i) } /** @@ -137,6 +136,7 @@ class FulfillmentService extends BaseService { /** * Retrieves a fulfillment by its id. * @param {string} id - the id of the fulfillment to retrieve + * @param {object} config - optional values to include with fulfillmentRepository query * @return {Fulfillment} the fulfillment */ async retrieve(id, config = {}) { @@ -165,11 +165,11 @@ class FulfillmentService extends BaseService { * those partitions. * @param {Order} order - order to create fulfillment for * @param {{ item_id: string, quantity: number}[]} itemsToFulfill - the items in the order to fulfill - * @param {object} metadata - potential metadata to add + * @param {object} custom - potential custom values to add * @return {Fulfillment[]} the created fulfillments */ async createFulfillment(order, itemsToFulfill, custom = {}) { - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const fulfillmentRepository = manager.getCustomRepository( this.fulfillmentRepository_ ) @@ -190,18 +190,19 @@ class FulfillmentService extends BaseService { const ful = fulfillmentRepository.create({ ...custom, provider_id: shipping_method.shipping_option.provider_id, - items: items.map(i => ({ item_id: i.id, quantity: i.quantity })), + items: items.map((i) => ({ item_id: i.id, quantity: i.quantity })), data: {}, }) - let result = await fulfillmentRepository.save(ful) + const result = await fulfillmentRepository.save(ful) - result.data = await this.fulfillmentProviderService_.createFulfillment( - shipping_method, - items, - { ...order }, - { ...result } - ) + result.data = + await this.fulfillmentProviderService_.createFulfillment( + shipping_method, + items, + { ...order }, + { ...result } + ) return fulfillmentRepository.save(result) }) @@ -220,7 +221,7 @@ class FulfillmentService extends BaseService { * */ cancelFulfillment(fulfillmentOrId) { - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { let id = fulfillmentOrId if (typeof fulfillmentOrId === "object") { id = fulfillmentOrId.id @@ -260,9 +261,9 @@ class FulfillmentService extends BaseService { /** * Creates a shipment by marking a fulfillment as shipped. Adds - * tracking numbers and potentially more metadata. + * tracking links and potentially more metadata. * @param {Order} fulfillmentId - the fulfillment to ship - * @param {TrackingLink[]} trackingNumbers - tracking numbers for the shipment + * @param {TrackingLink[]} trackingLinks - tracking links for the shipment * @param {object} config - potential configuration settings, such as no_notification and metadata * @return {Fulfillment} the shipped fulfillment */ @@ -276,7 +277,7 @@ class FulfillmentService extends BaseService { ) { const { metadata, no_notification } = config - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const fulfillmentRepository = manager.getCustomRepository( this.fulfillmentRepository_ ) @@ -298,7 +299,7 @@ class FulfillmentService extends BaseService { const now = new Date() fulfillment.shipped_at = now - fulfillment.tracking_links = trackingLinks.map(tl => + fulfillment.tracking_links = trackingLinks.map((tl) => trackingLinkRepo.create(tl) ) diff --git a/packages/medusa/src/services/gift-card.js b/packages/medusa/src/services/gift-card.js index 3762ce36f5..b96372d223 100644 --- a/packages/medusa/src/services/gift-card.js +++ b/packages/medusa/src/services/gift-card.js @@ -5,7 +5,7 @@ import { Brackets } from "typeorm" /** * Provides layer to manipulate gift cards. - * @implements BaseService + * @extends BaseService */ class GiftCardService extends BaseService { static Events = { @@ -101,7 +101,7 @@ class GiftCardService extends BaseService { .select(["gift_card.id"]) .where(where) .andWhere( - new Brackets(qb => { + new Brackets((qb) => { return qb .where(`gift_card.code ILIKE :q`, { q: `%${q}%` }) .orWhere(`display_id::varchar(255) ILIKE :dId`, { dId: `${q}` }) @@ -111,14 +111,14 @@ class GiftCardService extends BaseService { return giftCardRepo.findWithRelations( rels, - raw.map(i => i.id) + raw.map((i) => i.id) ) } return giftCardRepo.findWithRelations(rels, query) } async createTransaction(data) { - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const gctRepo = manager.getCustomRepository(this.giftCardTransactionRepo_) const created = gctRepo.create(data) const saved = await gctRepo.save(created) @@ -132,7 +132,7 @@ class GiftCardService extends BaseService { * @return {Promise} the result of the create operation */ async create(giftCard) { - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const giftCardRepo = manager.getCustomRepository(this.giftCardRepository_) if (!giftCard.region_id) { @@ -169,6 +169,7 @@ class GiftCardService extends BaseService { /** * Gets a gift card by id. * @param {string} giftCardId - id of gift card to retrieve + * @param {object} config - optional values to include with gift card query * @return {Promise} the gift card */ async retrieve(giftCardId, config = {}) { @@ -244,7 +245,7 @@ class GiftCardService extends BaseService { * @return {Promise} the result of the update operation */ async update(giftCardId, update) { - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const giftCardRepo = manager.getCustomRepository(this.giftCardRepository_) const giftCard = await this.retrieve(giftCardId) @@ -285,12 +286,14 @@ class GiftCardService extends BaseService { * @return {Promise} the result of the delete operation */ async delete(giftCardId) { - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const giftCardRepo = manager.getCustomRepository(this.giftCardRepository_) const giftCard = await giftCardRepo.findOne({ where: { id: giftCardId } }) - if (!giftCard) return Promise.resolve() + if (!giftCard) { + return Promise.resolve() + } await giftCardRepo.softRemove(giftCard) diff --git a/packages/medusa/src/services/order.js b/packages/medusa/src/services/order.js index c63e3d2cdb..07e1a96901 100644 --- a/packages/medusa/src/services/order.js +++ b/packages/medusa/src/services/order.js @@ -178,6 +178,7 @@ class OrderService extends BaseService { /** * @param {Object} selector - the query object for find + * @param {Object} config - the config to be used for find * @return {Promise} the result of the find operation */ async list( @@ -187,9 +188,8 @@ class OrderService extends BaseService { const orderRepo = this.manager_.getCustomRepository(this.orderRepository_) const query = this.buildQuery_(selector, config) - const { select, relations, totalsToSelect } = this.transformQueryForTotals_( - config - ) + const { select, relations, totalsToSelect } = + this.transformQueryForTotals_(config) if (select && select.length) { query.select = select @@ -201,7 +201,7 @@ class OrderService extends BaseService { const raw = await orderRepo.find(query) - return raw.map(r => this.decorateTotals_(r, totalsToSelect)) + return raw.map((r) => this.decorateTotals_(r, totalsToSelect)) } async listAndCount( @@ -231,11 +231,11 @@ class OrderService extends BaseService { }, } - query.where = qb => { + query.where = (qb) => { qb.where(where) qb.andWhere( - new Brackets(qb => { + new Brackets((qb) => { qb.where(`shipping_address.first_name ILIKE :qfn`, { qfn: `%${q}%`, }) @@ -246,20 +246,19 @@ class OrderService extends BaseService { } } - const { select, relations, totalsToSelect } = this.transformQueryForTotals_( - config - ) + const { select, relations, totalsToSelect } = + this.transformQueryForTotals_(config) if (select && select.length) { query.select = select } - let rels = relations + const rels = relations delete query.relations const raw = await orderRepo.findWithRelations(rels, query) const count = await orderRepo.count(query) - const orders = raw.map(r => this.decorateTotals_(r, totalsToSelect)) + const orders = raw.map((r) => this.decorateTotals_(r, totalsToSelect)) return [orders, count] } @@ -289,7 +288,7 @@ class OrderService extends BaseService { "swaps.additional_items.refundable", ] - const totalsToSelect = select.filter(v => totalFields.includes(v)) + const totalsToSelect = select.filter((v) => totalFields.includes(v)) if (totalsToSelect.length > 0) { const relationSet = new Set(relations) relationSet.add("items") @@ -305,7 +304,7 @@ class OrderService extends BaseService { relationSet.add("region") relations = [...relationSet] - select = select.filter(v => !totalFields.includes(v)) + select = select.filter((v) => !totalFields.includes(v)) } return { @@ -318,15 +317,15 @@ class OrderService extends BaseService { /** * Gets an order by id. * @param {string} orderId - id of order to retrieve + * @param {Object} config - config of order to retrieve * @return {Promise} the order document */ async retrieve(orderId, config = {}) { const orderRepo = this.manager_.getCustomRepository(this.orderRepository_) const validatedId = this.validateId_(orderId) - const { select, relations, totalsToSelect } = this.transformQueryForTotals_( - config - ) + const { select, relations, totalsToSelect } = + this.transformQueryForTotals_(config) const query = { where: { id: validatedId }, @@ -357,14 +356,14 @@ class OrderService extends BaseService { /** * Gets an order by cart id. * @param {string} cartId - cart id to find order + * @param {Object} config - the config to be used to find order * @return {Promise} the order document */ async retrieveByCartId(cartId, config = {}) { const orderRepo = this.manager_.getCustomRepository(this.orderRepository_) - const { select, relations, totalsToSelect } = this.transformQueryForTotals_( - config - ) + const { select, relations, totalsToSelect } = + this.transformQueryForTotals_(config) const query = { where: { cart_id: cartId }, @@ -397,7 +396,7 @@ class OrderService extends BaseService { * @return {Promise} the order document */ async existsByCartId(cartId) { - const order = await this.retrieveByCartId(cartId).catch(_ => undefined) + const order = await this.retrieveByCartId(cartId).catch((_) => undefined) if (!order) { return false } @@ -409,7 +408,7 @@ class OrderService extends BaseService { * @return {Promise} the result of the find operation */ async completeOrder(orderId) { - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const order = await this.retrieve(orderId) if (order.status === "canceled") { @@ -428,7 +427,7 @@ class OrderService extends BaseService { } ) - await completeOrderJob.finished().catch(error => { + await completeOrderJob.finished().catch((error) => { throw error }) @@ -445,7 +444,7 @@ class OrderService extends BaseService { * @return {Promise} resolves to the creation result. */ async createFromCart(cartId) { - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const cart = await this.cartService_ .withTransaction(manager) .retrieve(cartId, { @@ -619,6 +618,7 @@ class OrderService extends BaseService { * @param {string} fulfillmentId - the fulfillment that has now been shipped * @param {TrackingLink[]} trackingLinks - array of tracking numebers * associated with the shipment + * @param {Object} config - the config of the order that has been shipped * @param {Dictionary} metadata - optional metadata to add to * the fulfillment * @return {order} the resulting order following the update. @@ -634,7 +634,7 @@ class OrderService extends BaseService { ) { const { metadata, no_notification } = config - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const order = await this.retrieve(orderId, { relations: ["items"] }) const shipment = await this.fulfillmentService_.retrieve(fulfillmentId) @@ -666,7 +666,7 @@ class OrderService extends BaseService { order.fulfillment_status = "shipped" for (const item of order.items) { - const shipped = shipmentRes.items.find(si => si.item_id === item.id) + const shipped = shipmentRes.items.find((si) => si.item_id === item.id) if (shipped) { const shippedQty = (item.shipped_quantity || 0) + shipped.quantity if (shippedQty !== item.quantity) { @@ -700,11 +700,11 @@ class OrderService extends BaseService { /** * Creates an order - * @param {object} order - the order to create + * @param {object} data - the data to create an order * @return {Promise} resolves to the creation result. */ async create(data) { - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const orderRepo = manager.getCustomRepository(this.orderRepository_) const order = orderRepo.create(data) const result = await orderRepo.save(order) @@ -720,7 +720,7 @@ class OrderService extends BaseService { /** * Updates the order's billing address. - * @param {string} orderId - the id of the order to update + * @param {object} order - the order to update * @param {object} address - the value to set the billing address to * @return {Promise} the result of the update operation */ @@ -755,7 +755,7 @@ class OrderService extends BaseService { /** * Updates the order's shipping address. - * @param {string} orderId - the id of the order to update + * @param {object} order - the order to update * @param {object} address - the value to set the shipping address to * @return {Promise} the result of the update operation */ @@ -787,7 +787,7 @@ class OrderService extends BaseService { } async addShippingMethod(orderId, optionId, data, config = {}) { - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const order = await this.retrieve(orderId, { select: ["subtotal"], relations: [ @@ -845,7 +845,7 @@ class OrderService extends BaseService { * @return {Promise} resolves to the update result. */ async update(orderId, update) { - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const order = await this.retrieve(orderId) if (order.status === "canceled") { @@ -874,13 +874,7 @@ class OrderService extends BaseService { ) } - const { - metadata, - items, - billing_address, - shipping_address, - ...rest - } = update + const { ...rest } = update if ("metadata" in update) { order.metadata = this.setMetadata_(order, update.metadata) @@ -932,7 +926,7 @@ class OrderService extends BaseService { * @return {Promise} result of the update operation. */ async cancel(orderId) { - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const order = await this.retrieve(orderId, { relations: [ "fulfillments", @@ -952,16 +946,16 @@ class OrderService extends BaseService { } const throwErrorIf = (arr, pred, type) => - arr?.filter(pred).find(_ => { + arr?.filter(pred).find((_) => { throw new MedusaError( MedusaError.Types.NOT_ALLOWED, `All ${type} must be canceled before canceling an order` ) }) - const notCanceled = o => !o.canceled_at + const notCanceled = (o) => !o.canceled_at throwErrorIf(order.fulfillments, notCanceled, "fulfillments") - throwErrorIf(order.returns, r => r.status !== "canceled", "returns") + throwErrorIf(order.returns, (r) => r.status !== "canceled", "returns") throwErrorIf(order.swaps, notCanceled, "swaps") throwErrorIf(order.claims, notCanceled, "claims") @@ -1000,7 +994,7 @@ class OrderService extends BaseService { * @return {Promise} result of the update operation. */ async capturePayment(orderId) { - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const orderRepo = manager.getCustomRepository(this.orderRepository_) const order = await this.retrieve(orderId, { relations: ["payments"] }) @@ -1017,7 +1011,7 @@ class OrderService extends BaseService { const result = await this.paymentProviderService_ .withTransaction(manager) .capturePayment(p) - .catch(err => { + .catch((err) => { this.eventBus_ .withTransaction(manager) .emit(OrderService.Events.PAYMENT_CAPTURE_FAILED, { @@ -1039,7 +1033,7 @@ class OrderService extends BaseService { } order.payments = payments - order.payment_status = payments.every(p => p.captured_at !== null) + order.payment_status = payments.every((p) => p.captured_at !== null) ? "captured" : "requires_action" @@ -1095,6 +1089,8 @@ class OrderService extends BaseService { * we need to partition the order items, such that they can be sent * to their respective fulfillment provider. * @param {string} orderId - id of order to cancel. + * @param {Object} itemsToFulfill - items to fulfil. + * @param {Object} config - the config to cancel. * @return {Promise} result of the update operation. */ async createFulfillment( @@ -1107,7 +1103,7 @@ class OrderService extends BaseService { ) { const { metadata, no_notification } = config - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { // NOTE: we are telling the service to calculate all totals for us which // will add to what is fetched from the database. We want this to happen // so that we get all order details. These will thereafter be forwarded @@ -1169,7 +1165,7 @@ class OrderService extends BaseService { // Update all line items to reflect fulfillment for (const item of order.items) { const fulfillmentItem = successfullyFulfilled.find( - f => item.id === f.item_id + (f) => item.id === f.item_id ) if (fulfillmentItem) { @@ -1217,10 +1213,10 @@ class OrderService extends BaseService { /** * Cancels a fulfillment (if related to an order) * @param {string} fulfillmentId - the ID of the fulfillment to cancel - * @returns updated order + * @return {Promise} updated order */ async cancelFulfillment(fulfillmentId) { - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const canceled = await this.fulfillmentService_ .withTransaction(manager) .cancelFulfillment(fulfillmentId) @@ -1264,12 +1260,12 @@ class OrderService extends BaseService { async getFulfillmentItems_(order, items, transformer) { const toReturn = await Promise.all( items.map(async ({ item_id, quantity }) => { - const item = order.items.find(i => i.id.equals(item_id)) + const item = order.items.find((i) => i.id.equals(item_id)) return transformer(item, quantity) }) ) - return toReturn.filter(i => !!i) + return toReturn.filter((i) => !!i) } /** @@ -1279,7 +1275,7 @@ class OrderService extends BaseService { * @return {Promise} the result of the update operation */ async archive(orderId) { - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const order = await this.retrieve(orderId) if (order.status !== ("completed" || "refunded")) { @@ -1298,6 +1294,12 @@ class OrderService extends BaseService { /** * Refunds a given amount back to the customer. + * @param {string} orderId - id of the order to refund. + * @param {float} refundAmount - the amount to refund. + * @param {string} reason - the reason to refund. + * @param {string} note - note for refund. + * @param {Object} config - the config for refund. + * @return {Promise} the result of the refund operation. */ async createRefund( orderId, @@ -1310,7 +1312,7 @@ class OrderService extends BaseService { ) { const { no_notification } = config - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const order = await this.retrieve(orderId, { select: ["refundable_amount", "total", "refunded_total"], relations: ["payments"], @@ -1380,7 +1382,7 @@ class OrderService extends BaseService { } if (totalsFields.includes("items.refundable")) { - order.items = order.items.map(i => ({ + order.items = order.items.map((i) => ({ ...i, refundable: this.totalsService_.getLineItemRefund(order, { ...i, @@ -1395,7 +1397,7 @@ class OrderService extends BaseService { order.swaps.length ) { for (const s of order.swaps) { - s.additional_items = s.additional_items.map(i => ({ + s.additional_items = s.additional_items.map((i) => ({ ...i, refundable: this.totalsService_.getLineItemRefund(order, { ...i, @@ -1418,10 +1420,11 @@ class OrderService extends BaseService { * mismatches. * @param {string} orderId - the order to return. * @param {object} receivedReturn - the received return + * @param {float} customRefundAmount - the custom refund amount return * @return {Promise} the result of the update operation */ async registerReturnReceived(orderId, receivedReturn, customRefundAmount) { - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const order = await this.retrieve(orderId, { select: ["total", "refunded_total", "refundable_amount"], relations: ["items", "returns", "payments"], @@ -1441,7 +1444,7 @@ class OrderService extends BaseService { ) } - let refundAmount = customRefundAmount || receivedReturn.refund_amount + const refundAmount = customRefundAmount || receivedReturn.refund_amount const orderRepo = manager.getCustomRepository(this.orderRepository_) @@ -1510,7 +1513,7 @@ class OrderService extends BaseService { const keyPath = `metadata.${key}` return this.orderModel_ .updateOne({ _id: validatedId }, { $unset: { [keyPath]: "" } }) - .catch(err => { + .catch((err) => { throw new MedusaError(MedusaError.Types.DB_ERROR, err.message) }) } diff --git a/packages/medusa/src/services/region.js b/packages/medusa/src/services/region.js index 0994214958..44d611ca0e 100644 --- a/packages/medusa/src/services/region.js +++ b/packages/medusa/src/services/region.js @@ -1,11 +1,10 @@ -import _ from "lodash" -import { Validator, MedusaError } from "medusa-core-utils" +import { MedusaError } from "medusa-core-utils" import { BaseService } from "medusa-interfaces" import { countries } from "../utils/countries" /** * Provides layer to manipulate regions. - * @implements BaseService + * @extends BaseService */ class RegionService extends BaseService { static Events = { @@ -83,11 +82,11 @@ class RegionService extends BaseService { /** * Creates a region. - * @param {Region} rawRegion - the unvalidated region + * @param {Region} regionObject - the unvalidated region * @return {Region} the newly created region */ async create(regionObject) { - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const regionRepository = manager.getCustomRepository( this.regionRepository_ ) @@ -118,7 +117,7 @@ class RegionService extends BaseService { } if (metadata) { - regionObject.metadata = this.setMetadata_(region, metadata) + regionObject.metadata = this.setMetadata_(regionObject, metadata) } for (const [key, value] of Object.entries(validated)) { @@ -145,7 +144,7 @@ class RegionService extends BaseService { * @return {Promise} the result of the update operation */ async update(regionId, update) { - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const regionRepository = manager.getCustomRepository( this.regionRepository_ ) @@ -218,17 +217,17 @@ class RegionService extends BaseService { if (region.countries) { region.countries = await Promise.all( - region.countries.map(countryCode => + region.countries.map((countryCode) => this.validateCountry_(countryCode, id) ) - ).catch(err => { + ).catch((err) => { throw err }) } if (region.payment_providers) { region.payment_providers = await Promise.all( - region.payment_providers.map(async pId => { + region.payment_providers.map(async (pId) => { const pp = await ppRepository.findOne({ where: { id: pId } }) if (!pp) { throw new MedusaError( @@ -244,7 +243,7 @@ class RegionService extends BaseService { if (region.fulfillment_providers) { region.fulfillment_providers = await Promise.all( - region.fulfillment_providers.map(async fId => { + region.fulfillment_providers.map(async (fId) => { const fp = await fpRepository.findOne({ where: { id: fId } }) if (!fp) { throw new MedusaError( @@ -283,7 +282,7 @@ class RegionService extends BaseService { .withTransaction(this.transactionManager_) .retrieve(["currencies"]) - const storeCurrencies = store.currencies.map(curr => curr.code) + const storeCurrencies = store.currencies.map((curr) => curr.code) if (!storeCurrencies.includes(currencyCode.toLowerCase())) { throw new MedusaError( @@ -305,7 +304,7 @@ class RegionService extends BaseService { ) const countryCode = code.toUpperCase() - const validCountry = countries.find(c => c.alpha2 === countryCode) + const validCountry = countries.find((c) => c.alpha2 === countryCode) if (!validCountry) { throw new MedusaError( MedusaError.Types.INVALID_DATA, @@ -339,6 +338,7 @@ class RegionService extends BaseService { /** * Retrieves a region by its id. * @param {string} regionId - the id of the region to retrieve + * @param {object} config - configuration settings * @return {Region} the region */ async retrieve(regionId, config = {}) { @@ -361,7 +361,8 @@ class RegionService extends BaseService { /** * Lists all regions based on a query - * @param {object} listOptions - query object for find + * @param {object} selector - query object for find + * @param {object} config - configuration settings * @return {Promise} result of the find operation */ async list(selector = {}, config = { relations: [], skip: 0, take: 10 }) { @@ -377,12 +378,14 @@ class RegionService extends BaseService { * @return {Promise} the result of the delete operation */ async delete(regionId) { - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const regionRepo = manager.getCustomRepository(this.regionRepository_) const region = await regionRepo.findOne({ where: { id: regionId } }) - if (!region) return Promise.resolve() + if (!region) { + return Promise.resolve() + } await regionRepo.softRemove(region) @@ -397,7 +400,7 @@ class RegionService extends BaseService { * @return {Promise} the result of the update operation */ async addCountry(regionId, code) { - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const regionRepo = manager.getCustomRepository(this.regionRepository_) const country = await this.validateCountry_(code, regionId) @@ -407,7 +410,7 @@ class RegionService extends BaseService { // Check if region already has country if ( region.countries && - region.countries.map(c => c.iso_2).includes(country.iso_2) + region.countries.map((c) => c.iso_2).includes(country.iso_2) ) { return region } @@ -434,7 +437,7 @@ class RegionService extends BaseService { * @return {Promise} the result of the update operation */ async removeCountry(regionId, code) { - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const regionRepo = manager.getCustomRepository(this.regionRepository_) const region = await this.retrieve(regionId, { relations: ["countries"] }) @@ -442,13 +445,13 @@ class RegionService extends BaseService { // Check if region contains country. If not, we simpy resolve if ( region.countries && - !region.countries.map(c => c.iso_2).includes(code) + !region.countries.map((c) => c.iso_2).includes(code) ) { return region } region.countries = region.countries.filter( - country => country.iso_2 !== code + (country) => country.iso_2 !== code ) const updated = await regionRepo.save(region) @@ -470,7 +473,7 @@ class RegionService extends BaseService { * @return {Promise} the result of the update operation */ async addPaymentProvider(regionId, providerId) { - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const regionRepo = manager.getCustomRepository(this.regionRepository_) const ppRepo = manager.getCustomRepository( this.paymentProviderRepository_ @@ -517,7 +520,7 @@ class RegionService extends BaseService { * @return {Promise} the result of the update operation */ async addFulfillmentProvider(regionId, providerId) { - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const regionRepo = manager.getCustomRepository(this.regionRepository_) const fpRepo = manager.getCustomRepository( this.fulfillmentProviderRepository_ @@ -561,7 +564,7 @@ class RegionService extends BaseService { * @return {Promise} the result of the update operation */ async removePaymentProvider(regionId, providerId) { - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const regionRepo = manager.getCustomRepository(this.regionRepository_) const region = await this.retrieve(regionId, { @@ -595,7 +598,7 @@ class RegionService extends BaseService { * @return {Promise} the result of the update operation */ async removeFulfillmentProvider(regionId, providerId) { - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const regionRepo = manager.getCustomRepository(this.regionRepository_) const region = await this.retrieve(regionId, { diff --git a/packages/medusa/src/services/transaction.js b/packages/medusa/src/services/transaction.js index 5af02ae3b0..7f57599ec6 100644 --- a/packages/medusa/src/services/transaction.js +++ b/packages/medusa/src/services/transaction.js @@ -1,9 +1,8 @@ import { BaseService } from "medusa-interfaces" import mongoose from "mongoose" -import _ from "lodash" class TransactionService extends BaseService { - constructor({}) { + constructor() { super() } diff --git a/packages/medusa/src/services/user.js b/packages/medusa/src/services/user.js index 52a55f6e01..6a254f4dd2 100644 --- a/packages/medusa/src/services/user.js +++ b/packages/medusa/src/services/user.js @@ -6,7 +6,7 @@ import { BaseService } from "medusa-interfaces" /** * Provides layer to manipulate users. - * @implements BaseService + * @extends BaseService */ class UserService extends BaseService { static Events = { @@ -48,9 +48,7 @@ class UserService extends BaseService { * @return {string} the validated email */ validateEmail_(email) { - const schema = Validator.string() - .email() - .required() + const schema = Validator.string().email().required() const { value, error } = schema.validate(email) if (error) { throw new MedusaError( @@ -75,6 +73,7 @@ class UserService extends BaseService { * Gets a user by id. * Throws in case of DB Error and if user was not found. * @param {string} userId - the id of the user to get. + * @param {Object} config - query configs * @return {Promise} the user document. */ async retrieve(userId, config = {}) { @@ -99,6 +98,7 @@ class UserService extends BaseService { * Gets a user by api token. * Throws in case of DB Error and if user was not found. * @param {string} apiToken - the token of the user to get. + * @param {string[]} relations - relations to include with the user * @return {Promise} the user document. */ async retrieveByApiToken(apiToken, relations = []) { @@ -123,6 +123,7 @@ class UserService extends BaseService { * Gets a user by email. * Throws in case of DB Error and if user was not found. * @param {string} email - the email of the user to get. + * @param {Object} config - query config * @return {Promise} the user document. */ async retrieveByEmail(email, config = {}) { @@ -144,7 +145,7 @@ class UserService extends BaseService { /** * Hashes a password * @param {string} password - the value to hash - * @return hashed password + * @return {string} hashed password */ async hashPassword_(password) { const buf = await Scrypt.kdf(password, { logN: 1, r: 1, p: 1 }) @@ -155,10 +156,11 @@ class UserService extends BaseService { * Creates a user with username being validated. * Fails if email is not a valid format. * @param {object} user - the user to create + * @param {string} password - user's password to hash * @return {Promise} the result of create */ async create(user, password) { - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const userRepo = manager.getCustomRepository(this.userRepository_) const validatedEmail = this.validateEmail_(user.email) @@ -177,11 +179,12 @@ class UserService extends BaseService { /** * Updates a user. - * @param {object} user - the user to create + * @param {object} userId - id of the user to update + * @param {object} update - the values to be updated on the user * @return {Promise} the result of create */ async update(userId, update) { - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const userRepo = manager.getCustomRepository(this.userRepository_) const validatedId = this.validateId_(userId) @@ -222,13 +225,15 @@ class UserService extends BaseService { * @return {Promise} the result of the delete operation. */ async delete(userId) { - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const userRepo = manager.getCustomRepository(this.userRepository_) // Should not fail, if user does not exist, since delete is idempotent const user = await userRepo.findOne({ where: { id: userId } }) - if (!user) return Promise.resolve() + if (!user) { + return Promise.resolve() + } await userRepo.softRemove(user) @@ -242,10 +247,10 @@ class UserService extends BaseService { * password does not work. * @param {string} userId - the userId to set password for * @param {string} password - the old password to set - * @returns {Promise} the result of the update operation + * @return {Promise} the result of the update operation */ async setPassword_(userId, password) { - return this.atomicPhase_(async manager => { + return this.atomicPhase_(async (manager) => { const userRepo = manager.getCustomRepository(this.userRepository_) const user = await this.retrieve(userId) @@ -270,8 +275,8 @@ class UserService extends BaseService { * The token will be signed with the users current password hash as a secret * a long side a payload with userId and the expiry time for the token, which * is always 15 minutes. - * @param {User} user - the user to reset password for - * @returns {string} the generated JSON web token + * @param {string} userId - the id of the user to reset password for + * @return {string} the generated JSON web token */ async generateResetPasswordToken(userId) { const user = await this.retrieve(userId) diff --git a/scripts/on-lint-error.js b/scripts/on-lint-error.js new file mode 100644 index 0000000000..8d77e79021 --- /dev/null +++ b/scripts/on-lint-error.js @@ -0,0 +1,11 @@ +console.log(` + +Oops! Medusa noticed some lint or style warnings in the code for this +commit. Your changes have been committed, but you should fix the warnings before +creating a pull request. +Use 'npm run lint' to manually re-run these checks. You can also disable these +checks: +- for a single commit: git commit --no-verify +- for all future commits: npm run hooks:uninstall + +`) diff --git a/www/docs/.eslintrc b/www/docs/.eslintrc deleted file mode 100644 index 2a889697f0..0000000000 --- a/www/docs/.eslintrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "plugins": ["prettier"], - "extends": ["prettier"], - "rules": { - "prettier/prettier": "error", - "semi": "error", - "no-unused-expressions": "true" - } -} diff --git a/www/docs/.prettierrc b/www/docs/.prettierrc deleted file mode 100644 index 48e90e8d40..0000000000 --- a/www/docs/.prettierrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "endOfLine": "lf", - "semi": false, - "singleQuote": false, - "tabWidth": 2, - "trailingComma": "es5" -} diff --git a/www/reference/.prettierrc b/www/reference/.prettierrc deleted file mode 100644 index 33d2cfa3f6..0000000000 --- a/www/reference/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "arrowParens": "avoid", - "semi": false -} diff --git a/yarn.lock b/yarn.lock index 2c3b66f84c..7f5b3d76d5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -275,6 +275,15 @@ semver "^6.3.0" source-map "^0.5.0" +"@babel/eslint-parser@^7.15.8": + version "7.15.8" + resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.15.8.tgz#8988660b59d739500b67d0585fd4daca218d9f11" + integrity sha512-fYP7QFngCvgxjUuw8O057SVH5jCXsbFFOoE77CFDcvzwBVgTOkMD/L4mIC5Ud1xf8chK/no2fRbSSn1wvNmKuQ== + dependencies: + eslint-scope "^5.1.1" + eslint-visitor-keys "^2.1.0" + semver "^6.3.0" + "@babel/generator@^7.11.5": version "7.11.6" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.6.tgz#b868900f81b163b4d464ea24545c61cbac4dc620" @@ -2985,6 +2994,21 @@ resolve-pathname "^3.0.0" tslib "^2.2.0" +"@eslint/eslintrc@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.0.2.tgz#6044884f7f93c4ecc2d1694c7486cce91ef8f746" + integrity sha512-x1ZXdEFsvTcnbTZgqcWUL9w2ybgZCw/qbKTPQnab+XnYA2bMQpJCh+/bBzCRfDJaJdlrrQlOk49jNtru9gL/6Q== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.0.0" + globals "^13.9.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + "@evocateur/libnpmaccess@^3.1.2": version "3.1.2" resolved "https://registry.yarnpkg.com/@evocateur/libnpmaccess/-/libnpmaccess-3.1.2.tgz#ecf7f6ce6b004e9f942b098d92200be4a4b1c845" @@ -3071,6 +3095,20 @@ dependencies: "@hapi/hoek" "^9.0.0" +"@humanwhocodes/config-array@^0.6.0": + version "0.6.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.6.0.tgz#b5621fdb3b32309d2d16575456cbc277fa8f021a" + integrity sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A== + dependencies: + "@humanwhocodes/object-schema" "^1.2.0" + debug "^4.1.1" + minimatch "^3.0.4" + +"@humanwhocodes/object-schema@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz#87de7af9c231826fdd68ac7258f77c429e0e5fcf" + integrity sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w== + "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" @@ -4649,6 +4687,76 @@ resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.8.3.tgz#781d360c282436494b32fe7d9f7f8e64b3118aa3" integrity sha512-fbF6oTd4sGGy0xjHPKAt+eS2CrxJ3+6gQ3FGcBoIJR2TLAyCkCyI8JqZNy+FeON0AhVgNJoUumVoZQjBFUqHkw== +"@typescript-eslint/eslint-plugin@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.0.0.tgz#ecc7cc69d1e6f342beb6ea9cf9fbc02c97a212ac" + integrity sha512-T6V6fCD2U0YesOedvydTnrNtsC8E+c2QzpawIpDdlaObX0OX5dLo7tLU5c64FhTZvA1Xrdim+cXDI7NPsVx8Cg== + dependencies: + "@typescript-eslint/experimental-utils" "5.0.0" + "@typescript-eslint/scope-manager" "5.0.0" + debug "^4.3.1" + functional-red-black-tree "^1.0.1" + ignore "^5.1.8" + regexpp "^3.1.0" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/experimental-utils@5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.0.0.tgz#c7d7e67443dfb9fd93a5d060fb72c9e9b5638bbc" + integrity sha512-Dnp4dFIsZcPawD6CT1p5NibNUQyGSEz80sULJZkyhyna8AEqArmfwMwJPbmKzWVo4PabqNVzHYlzmcdLQWk+pg== + dependencies: + "@types/json-schema" "^7.0.7" + "@typescript-eslint/scope-manager" "5.0.0" + "@typescript-eslint/types" "5.0.0" + "@typescript-eslint/typescript-estree" "5.0.0" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + +"@typescript-eslint/parser@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.0.0.tgz#50d1be2e0def82d73e863cceba74aeeac9973592" + integrity sha512-B6D5rmmQ14I1fdzs71eL3DAuvnPHTY/t7rQABrL9BLnx/H51Un8ox1xqYAchs0/V2trcoyxB1lMJLlrwrJCDgw== + dependencies: + "@typescript-eslint/scope-manager" "5.0.0" + "@typescript-eslint/types" "5.0.0" + "@typescript-eslint/typescript-estree" "5.0.0" + debug "^4.3.1" + +"@typescript-eslint/scope-manager@5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.0.0.tgz#aea0fb0e2480c1169a02e89d9005ac3f2835713f" + integrity sha512-5RFjdA/ain/MDUHYXdF173btOKncIrLuBmA9s6FJhzDrRAyVSA+70BHg0/MW6TE+UiKVyRtX91XpVS0gVNwVDQ== + dependencies: + "@typescript-eslint/types" "5.0.0" + "@typescript-eslint/visitor-keys" "5.0.0" + +"@typescript-eslint/types@5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.0.0.tgz#25d93f6d269b2d25fdc51a0407eb81ccba60eb0f" + integrity sha512-dU/pKBUpehdEqYuvkojmlv0FtHuZnLXFBn16zsDmlFF3LXkOpkAQ2vrKc3BidIIve9EMH2zfTlxqw9XM0fFN5w== + +"@typescript-eslint/typescript-estree@5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.0.0.tgz#bc20f413c6e572c7309dbe5fa3be027984952af3" + integrity sha512-V/6w+PPQMhinWKSn+fCiX5jwvd1vRBm7AX7SJQXEGQtwtBvjMPjaU3YTQ1ik2UF1u96X7tsB96HMnulG3eLi9Q== + dependencies: + "@typescript-eslint/types" "5.0.0" + "@typescript-eslint/visitor-keys" "5.0.0" + debug "^4.3.1" + globby "^11.0.3" + is-glob "^4.0.1" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/visitor-keys@5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.0.0.tgz#b789f7cd105e59bee5c0983a353942a5a48f56df" + integrity sha512-yRyd2++o/IrJdyHuYMxyFyBhU762MRHQ/bAGQeTnN3pGikfh+nEmM61XTqaDH1XDp53afZ+waXrk0ZvenoZ6xw== + dependencies: + "@typescript-eslint/types" "5.0.0" + eslint-visitor-keys "^3.0.0" + "@webassemblyjs/ast@1.11.1": version "1.11.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" @@ -4823,6 +4931,11 @@ acorn-globals@^6.0.0: acorn "^7.1.1" acorn-walk "^7.1.1" +acorn-jsx@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + acorn-walk@^7.1.1: version "7.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" @@ -4843,6 +4956,11 @@ acorn@^8.0.4, acorn@^8.2.4, acorn@^8.4.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.4.1.tgz#56c36251fc7cabc7096adc18f05afe814321a28c" integrity sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA== +acorn@^8.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.5.0.tgz#4512ccb99b3698c752591e9bb4472e38ad43cee2" + integrity sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q== + address@1.1.2, address@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" @@ -4904,7 +5022,7 @@ ajv@^5.0.1: fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.3.0" -ajv@^6.1.0, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -4958,6 +5076,11 @@ ansi-colors@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== +ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + ansi-escapes@^3.1.0, ansi-escapes@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" @@ -5164,6 +5287,11 @@ assign-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + async-each@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" @@ -6106,6 +6234,13 @@ cli-cursor@^2.1.0: dependencies: restore-cursor "^2.0.0" +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + cli-highlight@^2.1.11: version "2.1.11" resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.11.tgz#49736fa452f0aaf4fae580e30acb26828d2dc1bf" @@ -6126,6 +6261,14 @@ cli-progress@^3.4.0: colors "^1.1.2" string-width "^4.2.0" +cli-truncate@2.1.0, cli-truncate@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" + integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== + dependencies: + slice-ansi "^3.0.0" + string-width "^4.2.0" + cli-ux@^5.4.9: version "5.6.3" resolved "https://registry.yarnpkg.com/cli-ux/-/cli-ux-5.6.3.tgz#eecdb2e0261171f2b28f2be6b18c490291c3a287" @@ -6306,6 +6449,11 @@ colorette@^1.3.0: resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.3.0.tgz#ff45d2f0edb244069d3b772adeb04fed38d0a0af" integrity sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w== +colorette@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" + integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== + colors@^1.1.2: version "1.4.0" resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" @@ -6361,6 +6509,11 @@ commander@^7.1.0: resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== +commander@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.2.0.tgz#37fe2bde301d87d47a53adeff8b5915db1381ca8" + integrity sha512-LLKxDvHeL91/8MIyTAD5BFMNtoIwztGPMiM/7Bl8rIPmHCZXRxmSWr91h57dpOpnQ6jIUqEWdXE/uBYMfiVZDA== + comment-patterns@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/comment-patterns/-/comment-patterns-0.11.0.tgz#de7533d5da9b4241457e53c164cee87b907f0bb0" @@ -6690,6 +6843,17 @@ cosmiconfig@^7.0.0: path-type "^4.0.0" yaml "^1.10.0" +cosmiconfig@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" + integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + cross-env@^7.0.2: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" @@ -6697,7 +6861,7 @@ cross-env@^7.0.2: dependencies: cross-spawn "^7.0.1" -cross-spawn@7.0.3, cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.3: +cross-spawn@7.0.3, cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -7024,7 +7188,7 @@ debug@3.1.0: dependencies: ms "2.0.0" -debug@4, debug@^4.1.1, debug@^4.3.1: +debug@4, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== @@ -7102,6 +7266,11 @@ deep-extend@^0.6.0: resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" @@ -7303,6 +7472,13 @@ dns-txt@^2.0.2: dependencies: buffer-indexof "^1.0.0" +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + dom-converter@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" @@ -7533,6 +7709,13 @@ enhanced-resolve@^5.8.0: graceful-fs "^4.2.4" tapable "^2.2.0" +enquirer@^2.3.5, enquirer@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + entities@^1.1.1, entities@~1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" @@ -7667,7 +7850,24 @@ escodegen@^2.0.0: optionalDependencies: source-map "~0.6.1" -eslint-scope@5.1.1: +eslint-config-google@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/eslint-config-google/-/eslint-config-google-0.14.0.tgz#4f5f8759ba6e11b424294a219dbfa18c508bcc1a" + integrity sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw== + +eslint-config-prettier@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a" + integrity sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew== + +eslint-plugin-prettier@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz#8b99d1e4b8b24a762472b4567992023619cb98e0" + integrity sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ== + dependencies: + prettier-linter-helpers "^1.0.0" + +eslint-scope@5.1.1, eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== @@ -7675,11 +7875,96 @@ eslint-scope@5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" +eslint-scope@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-6.0.0.tgz#9cf45b13c5ac8f3d4c50f46a5121f61b3e318978" + integrity sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^2.0.0, eslint-visitor-keys@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz#e32e99c6cdc2eb063f204eda5db67bfe58bb4186" + integrity sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q== + +eslint@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.0.0.tgz#2c2d0ac6353755667ac90c9ff4a9c1315e43fcff" + integrity sha512-03spzPzMAO4pElm44m60Nj08nYonPGQXmw6Ceai/S4QK82IgwWO1EXx1s9namKzVlbVu3Jf81hb+N+8+v21/HQ== + dependencies: + "@eslint/eslintrc" "^1.0.2" + "@humanwhocodes/config-array" "^0.6.0" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + enquirer "^2.3.5" + escape-string-regexp "^4.0.0" + eslint-scope "^6.0.0" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.0.0" + espree "^9.0.0" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^6.0.1" + globals "^13.6.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.2.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.0.0.tgz#e90a2965698228502e771c7a58489b1a9d107090" + integrity sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ== + dependencies: + acorn "^8.5.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^3.0.0" + esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + esrecurse@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" @@ -7692,7 +7977,7 @@ estraverse@^4.1.1: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== -estraverse@^5.2.0: +estraverse@^5.1.0, estraverse@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== @@ -7794,7 +8079,7 @@ execa@^4.0.0: signal-exit "^3.0.2" strip-final-newline "^2.0.0" -execa@^5.0.0: +execa@^5.0.0, execa@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== @@ -7943,6 +8228,11 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== +fast-diff@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + fast-glob@^2.2.6: version "2.2.7" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" @@ -7971,7 +8261,7 @@ fast-json-stable-stringify@^2.0.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-levenshtein@~2.0.6: +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= @@ -8043,6 +8333,13 @@ figures@^3.2.0: dependencies: escape-string-regexp "^1.0.5" +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + file-loader@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" @@ -8149,6 +8446,19 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.2.tgz#64bfed5cb68fe3ca78b3eb214ad97b63bedce561" + integrity sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA== + flush-write-stream@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" @@ -8291,6 +8601,11 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" @@ -8486,6 +8801,13 @@ glob-parent@^6.0.0: dependencies: is-glob "^4.0.1" +glob-parent@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + glob-to-regexp@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" @@ -8544,6 +8866,13 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== +globals@^13.6.0, globals@^13.9.0: + version "13.11.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.11.0.tgz#40ef678da117fe7bd2e28f1fab24951bd0255be7" + integrity sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g== + dependencies: + type-fest "^0.20.2" + globalyzer@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.0.tgz#cb76da79555669a1519d5a8edf093afaa0bf1465" @@ -9149,6 +9478,11 @@ humanize-ms@^1.2.1: dependencies: ms "^2.0.0" +husky@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/husky/-/husky-7.0.2.tgz#21900da0f30199acca43a46c043c4ad84ae88dff" + integrity sha512-8yKEWNX4z2YsofXAMT7KvA1g8p+GxtB1ffV8XtpAEGuXNAbCV5wdNKH+qTpw8SM9fh4aMPDR+yQuKfgnreyZlg== + hyperlinker@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/hyperlinker/-/hyperlinker-1.0.0.tgz#23dc9e38a206b208ee49bc2d6c8ef47027df0c0e" @@ -9195,12 +9529,12 @@ ignore-walk@^3.0.1: dependencies: minimatch "^3.0.4" -ignore@^4.0.3: +ignore@^4.0.3, ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore@^5.1.4: +ignore@^5.1.4, ignore@^5.1.8: version "5.1.8" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== @@ -9225,7 +9559,7 @@ import-fresh@^2.0.0: caller-path "^2.0.0" resolve-from "^3.0.0" -import-fresh@^3.2.1, import-fresh@^3.2.2, import-fresh@^3.3.0: +import-fresh@^3.0.0, import-fresh@^3.2.1, import-fresh@^3.2.2, import-fresh@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -9627,6 +9961,13 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" +is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + is-hexadecimal@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" @@ -10405,6 +10746,11 @@ json-schema@0.2.3: resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" @@ -10566,6 +10912,14 @@ levenary@^1.1.1: dependencies: leven "^3.1.0" +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" @@ -10589,6 +10943,39 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= +lint-staged@^11.2.3: + version "11.2.3" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-11.2.3.tgz#fc3f4569cc4f46553309dfc1447b8aef69f744fb" + integrity sha512-Tfmhk8O2XFMD25EswHPv+OYhUjsijy5D7liTdxeXvhG2rsadmOLFtyj8lmlfoFFXY8oXWAIOKpoI+lJe1DB1mw== + dependencies: + cli-truncate "2.1.0" + colorette "^1.4.0" + commander "^8.2.0" + cosmiconfig "^7.0.1" + debug "^4.3.2" + enquirer "^2.3.6" + execa "^5.1.1" + listr2 "^3.12.2" + micromatch "^4.0.4" + normalize-path "^3.0.0" + please-upgrade-node "^3.2.0" + string-argv "0.3.1" + stringify-object "3.3.0" + supports-color "8.1.1" + +listr2@^3.12.2: + version "3.12.2" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.12.2.tgz#2d55cc627111603ad4768a9e87c9c7bb9b49997e" + integrity sha512-64xC2CJ/As/xgVI3wbhlPWVPx0wfTqbUAkpb7bjDi0thSWMqrf07UFhrfsGoo8YSXmF049Rp9C0cjLC8rZxK9A== + dependencies: + cli-truncate "^2.1.0" + colorette "^1.4.0" + log-update "^4.0.0" + p-map "^4.0.0" + rxjs "^6.6.7" + through "^2.3.8" + wrap-ansi "^7.0.0" + load-json-file@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" @@ -10817,6 +11204,16 @@ lodash@^4.17.14, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +log-update@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" + integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== + dependencies: + ansi-escapes "^4.3.0" + cli-cursor "^3.1.0" + slice-ansi "^4.0.0" + wrap-ansi "^6.2.0" + loglevel@^1.6.8: version "1.7.1" resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" @@ -12049,6 +12446,18 @@ optionator@^0.8.1: type-check "~0.3.2" word-wrap "~1.2.3" +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + original@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" @@ -12610,6 +13019,13 @@ pkg-up@3.1.0: dependencies: find-up "^3.0.0" +please-upgrade-node@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" + integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg== + dependencies: + semver-compare "^1.0.0" + portfinder@^1.0.26: version "1.0.28" resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" @@ -12988,6 +13404,11 @@ postgres-interval@^1.1.0: dependencies: xtend "^4.0.0" +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" @@ -12998,6 +13419,13 @@ prepend-http@^2.0.0: resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + prettier@^2.1.1: version "2.3.2" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.2.tgz#ef280a05ec253712e486233db5c6f23441e7342d" @@ -13048,6 +13476,11 @@ process@^0.11.10: resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" @@ -13658,6 +14091,11 @@ regexp.prototype.flags@^1.2.0: call-bind "^1.0.2" define-properties "^1.1.3" +regexpp@^3.1.0, regexpp@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + regexpu-core@^4.7.0, regexpu-core@^4.7.1: version "4.7.1" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" @@ -13941,6 +14379,14 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" @@ -14076,7 +14522,7 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" -rxjs@^6.4.0, rxjs@^6.6.3: +rxjs@^6.4.0, rxjs@^6.6.3, rxjs@^6.6.7: version "6.6.7" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== @@ -14198,6 +14644,11 @@ selfsigned@^1.10.8: dependencies: node-forge "^0.10.0" +semver-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" + integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= + semver-diff@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" @@ -14220,7 +14671,7 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: +semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: version "7.3.5" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== @@ -14467,6 +14918,24 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== +slice-ansi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" + integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + sliced@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/sliced/-/sliced-1.0.1.tgz#0b3a662b5d04c3177b1926bea82b03f837a2ef41" @@ -14791,6 +15260,11 @@ strict-uri-encode@^2.0.0: resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= +string-argv@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" + integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== + string-hash@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" @@ -14869,7 +15343,7 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -stringify-object@^3.3.0: +stringify-object@3.3.0, stringify-object@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== @@ -14957,6 +15431,11 @@ strip-indent@^3.0.0: dependencies: min-indent "^1.0.0" +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" @@ -14991,6 +15470,13 @@ stylehacks@^5.0.1: browserslist "^4.16.0" postcss-selector-parser "^6.0.4" +supports-color@8.1.1, supports-color@^8.0.0, supports-color@^8.1.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -15017,13 +15503,6 @@ supports-color@^7.0.0, supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -supports-color@^8.0.0, supports-color@^8.1.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - supports-hyperlinks@^2.0.0, supports-hyperlinks@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" @@ -15256,7 +15735,7 @@ through2@^4.0.0: dependencies: readable-stream "3" -through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6: +through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@^2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= @@ -15424,7 +15903,7 @@ tslib@2.0.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.1.tgz#410eb0d113e5b6356490eec749603725b021b43e" integrity sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ== -tslib@^1, tslib@^1.9.0, tslib@^1.9.3: +tslib@^1, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== @@ -15439,6 +15918,13 @@ tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e" integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg== +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -15451,6 +15937,13 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0: resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" @@ -15875,6 +16368,11 @@ uuid@^8.3.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== +v8-compile-cache@^2.0.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + v8-to-istanbul@^7.0.0: version "7.1.2" resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz#30898d1a7fa0c84d225a2c1434fb958f290883c1" @@ -16272,7 +16770,7 @@ windows-release@^3.1.0: dependencies: execa "^1.0.0" -word-wrap@~1.2.3: +word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==