From 291b5ff3bc02fa6d47724c254ed3f98fb8cb8132 Mon Sep 17 00:00:00 2001 From: Alexandre Hajjar Date: Mon, 27 Apr 2020 20:38:39 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9C=85=20TS-aware=20eslint=20+=20in=20CI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Use @typescript-eslint/parser * Add npm/yarn scripts: prettier check and eslint on all files * Run all of this in CI (along with eslintrc checker) * Use typescript parser only for ts{x,} files * Fix test & cypress sub-configs * Fix .test.js + off explicit-function-return-type --- .eslintignore | 2 + .eslintrc.js | 90 ++++++++++ .eslintrc.yaml | 44 ----- .prettierignore | 1 + circle.yml | 15 +- cypress/.eslintrc.yaml | 3 +- package.json | 13 +- source/engine/remove-diacritics.js | 272 ----------------------------- source/types/import-markdown.ts | 4 - test/.eslintrc.yaml | 3 + tsconfig.json | 2 +- yarn.lock | 78 ++++++++- 12 files changed, 193 insertions(+), 334 deletions(-) create mode 100644 .eslintignore create mode 100644 .eslintrc.js delete mode 100644 .eslintrc.yaml create mode 100644 .prettierignore delete mode 100644 source/engine/remove-diacritics.js delete mode 100644 source/types/import-markdown.ts create mode 100644 test/.eslintrc.yaml diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 000000000..f06235c46 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,2 @@ +node_modules +dist diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 000000000..a372722ea --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,90 @@ +module.exports = { + root: true, + parser: "babel-eslint", + parserOptions: { + "ecmaFeatures": { + "jsx": true + } + }, + env: { + "browser": true, + "commonjs": true, + "es6": true, + }, + globals: { + "process": false + }, + plugins: [ + "react", + "react-hooks" + ], + rules: { + "quotes": [ + 1, + "single", + { + "avoidEscape": true + } + ], + "no-console": 1, + "no-restricted-globals": [ + 2, + "length" + ], + "no-global-assign": 0, + "no-unsafe-negation": 0, + "react/prop-types": 0, + "react/jsx-no-target-blank": 0, + "react/no-unescaped-entities": 0, + "react/display-name": 1, + "react-hooks/rules-of-hooks": "error", + "react-hooks/exhaustive-deps": "warn" + }, + settings: { + "react": { + "version": "detect" + } + }, + overrides: [ + { + files: [ "**/*.{ts,tsx}" ], + parser: "@typescript-eslint/parser", + parserOptions: { + "ecmaFeatures": { + "jsx": true + }, + "tsconfigRootDir": __dirname, + "project": [ "./tsconfig.json" ] + }, + plugins: [ "@typescript-eslint" ], + rules: { + "@typescript-eslint/no-empty-function": 0, + "@typescript-eslint/no-use-before-define": 0, + "@typescript-eslint/member-delimiter-style": [2, { + multiline: { + delimiter: "none" + } + }], + "@typescript-eslint/explicit-function-return-type": 0 + }, + extends: [ + "plugin:@typescript-eslint/eslint-recommended", + "plugin:@typescript-eslint/recommended", + "plugin:@typescript-eslint/recommended-requiring-type-checking" + ] + }, + { + files: [ "**/*.test.js" ], + env: { + mocha: true + } + } + ], + extends: [ + "eslint:recommended", + "plugin:react/recommended", + "prettier", + "prettier/react", + "prettier/@typescript-eslint" + ] +} diff --git a/.eslintrc.yaml b/.eslintrc.yaml deleted file mode 100644 index 198aa4887..000000000 --- a/.eslintrc.yaml +++ /dev/null @@ -1,44 +0,0 @@ -rules: - quotes: - - 1 # While https://github.com/eslint/eslint/issues/9662#issuecomment-353958854 we don't enforce this - - single - - avoidEscape: true - no-console: 1 - no-restricted-globals: [2, 'length'] - no-global-assign: 0 - no-unsafe-negation: 0 - react/prop-types: 0 - react/jsx-no-target-blank: 0 - react/no-unescaped-entities: 0 - react/display-name: 1 - react-hooks/rules-of-hooks: error - react-hooks/exhaustive-deps: warn -parser: babel-eslint - -plugins: - - react - - react-hooks -env: - browser: true - commonjs: true - es6: true -settings: - react: - version: 'detect' - -overrides: - - files: ['*.test.js', 'cypress/integration/**/*.js'] - env: - mocha: true - -globals: - process: false - -extends: - - eslint:recommended - - plugin:react/recommended - - prettier - - prettier/react -parserOptions: - ecmaFeatures: - jsx: true diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 000000000..a9ba028ce --- /dev/null +++ b/.prettierignore @@ -0,0 +1 @@ +.eslintrc.js diff --git a/circle.yml b/circle.yml index 663bf1e0e..fe22e128d 100644 --- a/circle.yml +++ b/circle.yml @@ -30,13 +30,22 @@ commands: - run: CYPRESS_baseUrl=<< parameters.base_url >> yarn run cypress run --record --key 21660df5-36a5-4c49-b23d-801799b0c759 --env language=<< parameters.language >> --config integrationFolder=cypress/integration/<< parameters.integration_folder >> jobs: + lint: + docker: + - image: node:12.16.1-buster + steps: + - install + - run: | + yarn eslintrc-check + yarn eslint-check --quiet + yarn prettier-check type-check: docker: - image: node:12.16.1-buster steps: - install - run: | - yarn run type-check + yarn type-check i18n-check: docker: - image: node:12.16.1-buster @@ -53,7 +62,6 @@ jobs: git config --global core.quotepath false yarn test yarn test-regressions - end-to-end-test: docker: - image: cypress/base:12.16.1 @@ -73,7 +81,6 @@ jobs: - cypress: base_url: http://localhost:5002 integration_folder: publi.codes - bundlesize-test: docker: - image: cypress/base:12.16.1 @@ -84,7 +91,6 @@ jobs: - run: | yarn run simple-compile yarn test-bundlesize - production-end-to-end-test: docker: - image: cypress/base:12.16.1 @@ -113,6 +119,7 @@ workflows: version: 2 test: jobs: + - lint - type-check - i18n-check - unit-test diff --git a/cypress/.eslintrc.yaml b/cypress/.eslintrc.yaml index 00d3d5fdd..538969434 100644 --- a/cypress/.eslintrc.yaml +++ b/cypress/.eslintrc.yaml @@ -2,4 +2,5 @@ globals: cy: false Cypress: false expect: false -parser: esprima +env: + mocha: true diff --git a/package.json b/package.json index 54e8cde50..4cc332e56 100644 --- a/package.json +++ b/package.json @@ -68,12 +68,14 @@ "compile": "yarn run webpack --config source/webpack.prod.js && yarn run webpack --config source/webpack.prod.legacyBrowser.js", "simple-compile": "yarn run webpack --config source/webpack.prod.js", "stats": "webpack --config source/webpack.prod.js --profile --json > stats.json", - "eslint-check": "eslint --print-config .eslintrc | eslint-config-prettier-check", - "eslint": "LIST=`git diff --cached --name-only --diff-filter=AMR HEAD | grep .*\\.js | grep -v json`; if [ \"$LIST\" ]; then eslint $LIST; fi", + "eslintrc-check": "eslint --print-config .eslintrc.js | eslint-config-prettier-check", + "eslint-check": "eslint . --ext .js,.jsx,.ts,.tsx", + "prettier-check": "prettier --check \"{source,test,cypress}/**/*.{js,jsx,ts,tsx}\"", + "lint": "yarn eslintrc-check && yarn eslint-check && yarn prettier-check", + "type-check": "tsc --noEmit", "externalize": "node source/scripts/externalize.js", "analyze-bundle": "ANALYZE_BUNDLE=1 yarn run compile", "heroku-postbuild": "yarn install --production=false && yarn compile", - "pretest": "LIST=`git diff --name-only --diff-filter=AMR HEAD^..HEAD | grep .*\\.js | grep -v json`; if [ \"$LIST\" ]; then eslint $LIST; fi", "start": "node source/server.js", "test-inversions": "yarn test-watch --grep 'inversions'", "test-meca": "yarn test-watch --grep 'Mécanismes'", @@ -89,7 +91,6 @@ "test-units": "mocha-webpack --webpack-config source/webpack.test.js --require source-map-support/register --include componentTestSetup.js --require mock-local-storage --require test/helpers/browser.js test/units.test.js", "test-regressions": "jest", "test-bundlesize": "bundlesize", - "type-check": "tsc --noEmit", "compile-lib": "yarn webpack --config source/webpack.lib.js", "compile-dev": "FR_SITE='http://localhost:5000${path}' EN_SITE='http://localhost:5001${path}' yarn run compile", "i18n:rules:check": "node source/scripts/i18n/check-missing-rule-translation.js", @@ -141,6 +142,8 @@ "@types/webpack-bundle-analyzer": "^2.13.3", "@types/webpack-env": "^1.14.1", "@types/workbox-webpack-plugin": "^5.1.0", + "@typescript-eslint/eslint-plugin": "^2.29.0", + "@typescript-eslint/parser": "^2.29.0", "akh": "^3.1.2", "autoprefixer": "^9.3.1", "babel-eslint": "^11.0.0-beta.0", @@ -161,7 +164,7 @@ "dotenv": "=8.1.0", "enzyme": "^3.3.0", "enzyme-adapter-react-16": "^1.1.1", - "eslint": "^6.5.1", + "eslint": "^6.8.0", "eslint-config-prettier": "^4.0.0", "eslint-plugin-react": "^7.12.4", "eslint-plugin-react-hooks": "^2.0.1", diff --git a/source/engine/remove-diacritics.js b/source/engine/remove-diacritics.js deleted file mode 100644 index 67c4dd226..000000000 --- a/source/engine/remove-diacritics.js +++ /dev/null @@ -1,272 +0,0 @@ -/* - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -let defaultDiacriticsRemovalMap = [ - { - base: 'A', - letters: - '\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F' - }, - { base: 'AA', letters: '\uA732' }, - { base: 'AE', letters: '\u00C6\u01FC\u01E2' }, - { base: 'AO', letters: '\uA734' }, - { base: 'AU', letters: '\uA736' }, - { base: 'AV', letters: '\uA738\uA73A' }, - { base: 'AY', letters: '\uA73C' }, - { - base: 'B', - letters: '\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181' - }, - { - base: 'C', - letters: - '\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E' - }, - { - base: 'D', - letters: - '\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779' - }, - { base: 'DZ', letters: '\u01F1\u01C4' }, - { base: 'Dz', letters: '\u01F2\u01C5' }, - { - base: 'E', - letters: - '\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E' - }, - { base: 'F', letters: '\u0046\u24BB\uFF26\u1E1E\u0191\uA77B' }, - { - base: 'G', - letters: - '\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E' - }, - { - base: 'H', - letters: - '\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D' - }, - { - base: 'I', - letters: - '\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197' - }, - { base: 'J', letters: '\u004A\u24BF\uFF2A\u0134\u0248' }, - { - base: 'K', - letters: - '\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2' - }, - { - base: 'L', - letters: - '\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780' - }, - { base: 'LJ', letters: '\u01C7' }, - { base: 'Lj', letters: '\u01C8' }, - { base: 'M', letters: '\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C' }, - { - base: 'N', - letters: - '\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4' - }, - { base: 'NJ', letters: '\u01CA' }, - { base: 'Nj', letters: '\u01CB' }, - { - base: 'O', - letters: - '\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u00D6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C' - }, - { base: 'OI', letters: '\u01A2' }, - { base: 'OO', letters: '\uA74E' }, - { base: 'OU', letters: '\u0222' }, - { base: 'OE', letters: '\u008C\u0152' }, - { base: 'oe', letters: '\u009C\u0153' }, - { - base: 'P', - letters: '\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754' - }, - { base: 'Q', letters: '\u0051\u24C6\uFF31\uA756\uA758\u024A' }, - { - base: 'R', - letters: - '\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782' - }, - { - base: 'S', - letters: - '\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784' - }, - { - base: 'T', - letters: - '\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786' - }, - { base: 'TZ', letters: '\uA728' }, - { - base: 'U', - letters: - '\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u00DC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244' - }, - { base: 'V', letters: '\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245' }, - { base: 'VY', letters: '\uA760' }, - { - base: 'W', - letters: '\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72' - }, - { base: 'X', letters: '\u0058\u24CD\uFF38\u1E8A\u1E8C' }, - { - base: 'Y', - letters: - '\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE' - }, - { - base: 'Z', - letters: - '\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762' - }, - { - base: 'a', - letters: - '\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250' - }, - { base: 'aa', letters: '\uA733' }, - { base: 'ae', letters: '\u00E6\u01FD\u01E3' }, - { base: 'ao', letters: '\uA735' }, - { base: 'au', letters: '\uA737' }, - { base: 'av', letters: '\uA739\uA73B' }, - { base: 'ay', letters: '\uA73D' }, - { - base: 'b', - letters: '\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253' - }, - { - base: 'c', - letters: - '\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184' - }, - { - base: 'd', - letters: - '\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A' - }, - { base: 'dz', letters: '\u01F3\u01C6' }, - { - base: 'e', - letters: - '\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD' - }, - { base: 'f', letters: '\u0066\u24D5\uFF46\u1E1F\u0192\uA77C' }, - { - base: 'g', - letters: - '\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F' - }, - { - base: 'h', - letters: - '\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265' - }, - { base: 'hv', letters: '\u0195' }, - { - base: 'i', - letters: - '\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131' - }, - { base: 'j', letters: '\u006A\u24D9\uFF4A\u0135\u01F0\u0249' }, - { - base: 'k', - letters: - '\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3' - }, - { - base: 'l', - letters: - '\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747' - }, - { base: 'lj', letters: '\u01C9' }, - { base: 'm', letters: '\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F' }, - { - base: 'n', - letters: - '\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5' - }, - { base: 'nj', letters: '\u01CC' }, - { - base: 'o', - letters: - '\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275' - }, - { base: 'oi', letters: '\u01A3' }, - { base: 'ou', letters: '\u0223' }, - { base: 'oo', letters: '\uA74F' }, - { - base: 'p', - letters: '\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755' - }, - { base: 'q', letters: '\u0071\u24E0\uFF51\u024B\uA757\uA759' }, - { - base: 'r', - letters: - '\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783' - }, - { - base: 's', - letters: - '\u0073\u24E2\uFF53\u00DF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B' - }, - { - base: 't', - letters: - '\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787' - }, - { base: 'tz', letters: '\uA729' }, - { - base: 'u', - letters: - '\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289' - }, - { base: 'v', letters: '\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C' }, - { base: 'vy', letters: '\uA761' }, - { - base: 'w', - letters: - '\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73' - }, - { base: 'x', letters: '\u0078\u24E7\uFF58\u1E8B\u1E8D' }, - { - base: 'y', - letters: - '\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF' - }, - { - base: 'z', - letters: - '\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763' - } -] - -let diacriticsMap = {} -for (var i = 0; i < defaultDiacriticsRemovalMap.length; i++) { - var letters = defaultDiacriticsRemovalMap[i].letters - for (var j = 0; j < letters.length; j++) { - diacriticsMap[letters[j]] = defaultDiacriticsRemovalMap[i].base - } -} - -// "what?" version ... http://jsperf.com/diacritics/12 -export default str => - str != null && str.replace(/[^\u0000-\u007E]/g, a => diacriticsMap[a] || a) - -var paragraph = - "L'avantage d'utiliser le lorem ipsum est bien évidemment de pouvoir créer des maquettes ou de remplir un site internet de contenus qui présentent un rendu s'approchant un maximum du rendu final. \n Par défaut lorem ipsum ne contient pas d'accent ni de caractères spéciaux contrairement à la langue française qui en contient beaucoup. C'est sur ce critère que nous proposons une solution avec cet outil qui générant du faux-texte lorem ipsum mais avec en plus, des caractères spéciaux tel que les accents ou certains symboles utiles pour la langue française. \n L'utilisation du lorem standard est facile d’utilisation mais lorsque le futur client utilisera votre logiciel il se peut que certains caractères spéciaux ou qu'un accent ne soient pas codés correctement. \n Cette page a pour but donc de pouvoir perdre le moins de temps possible et donc de tester directement si tous les encodages de base de donnée ou des sites sont les bons de plus il permet de récuperer un code css avec le texte formaté !" -// alert(removeDiacritics(paragraph)) diff --git a/source/types/import-markdown.ts b/source/types/import-markdown.ts deleted file mode 100644 index a20f1eb04..000000000 --- a/source/types/import-markdown.ts +++ /dev/null @@ -1,4 +0,0 @@ -declare module '*.md' { - const content: string - export default content -} diff --git a/test/.eslintrc.yaml b/test/.eslintrc.yaml new file mode 100644 index 000000000..726568911 --- /dev/null +++ b/test/.eslintrc.yaml @@ -0,0 +1,3 @@ +env: + mocha: true + jest: true diff --git a/tsconfig.json b/tsconfig.json index 3765378bf..fe0ce4c0c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -38,5 +38,5 @@ "Types/*": ["types/*"] } }, - "include": ["source"] + "include": ["source", "test", "cypress"] } diff --git a/yarn.lock b/yarn.lock index 2ceb75ea7..c1b8f2dc0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1336,6 +1336,11 @@ dependencies: "@types/d3-path" "*" +"@types/eslint-visitor-keys@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" + integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== + "@types/history@*": version "4.7.5" resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.5.tgz#527d20ef68571a4af02ed74350164e7a67544860" @@ -1397,6 +1402,11 @@ resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-3.12.3.tgz#abf383c5b639d0aa8b8c4a420d6a85f703357d6c" integrity sha512-otRe77JNNWzoVGLKw8TCspKswRoQToys4tuL6XYVBFxjgeM0RUrx7m3jkaTdxILxeGry3zM8mGYkGXMeQ02guA== +"@types/json-schema@^7.0.3": + version "7.0.4" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339" + integrity sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA== + "@types/mime-types@^2.1.0": version "2.1.0" resolved "https://registry.yarnpkg.com/@types/mime-types/-/mime-types-2.1.0.tgz#9ca52cda363f699c69466c2a6ccdaad913ea7a73" @@ -1652,6 +1662,49 @@ dependencies: "@types/yargs-parser" "*" +"@typescript-eslint/eslint-plugin@^2.29.0": + version "2.29.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.29.0.tgz#c9efab7624e3dd6d144a0e4577a541d1bd42c2ac" + integrity sha512-X/YAY7azKirENm4QRpT7OVmzok02cSkqeIcLmdz6gXUQG4Hk0Fi9oBAynSAyNXeGdMRuZvjBa0c1Lu0dn/u6VA== + dependencies: + "@typescript-eslint/experimental-utils" "2.29.0" + functional-red-black-tree "^1.0.1" + regexpp "^3.0.0" + tsutils "^3.17.1" + +"@typescript-eslint/experimental-utils@2.29.0": + version "2.29.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.29.0.tgz#3cb8060de9265ba131625a96bbfec31ba6d4a0fe" + integrity sha512-H/6VJr6eWYstyqjWXBP2Nn1hQJyvJoFdDtsHxGiD+lEP7piGnGpb/ZQd+z1ZSB1F7dN+WsxUDh8+S4LwI+f3jw== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/typescript-estree" "2.29.0" + eslint-scope "^5.0.0" + eslint-utils "^2.0.0" + +"@typescript-eslint/parser@^2.29.0": + version "2.29.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.29.0.tgz#6e3c4e21ed6393dc05b9d8b47f0b7e731ef21c9c" + integrity sha512-H78M+jcu5Tf6m/5N8iiFblUUv+HJDguMSdFfzwa6vSg9lKR8Mk9BsgeSjO8l2EshKnJKcbv0e8IDDOvSNjl0EA== + dependencies: + "@types/eslint-visitor-keys" "^1.0.0" + "@typescript-eslint/experimental-utils" "2.29.0" + "@typescript-eslint/typescript-estree" "2.29.0" + eslint-visitor-keys "^1.1.0" + +"@typescript-eslint/typescript-estree@2.29.0": + version "2.29.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.29.0.tgz#1be6612bb02fc37ac9f466521c1459a4744e8d3a" + integrity sha512-3YGbtnWy4az16Egy5Fj5CckkVlpIh0MADtAQza+jiMADRSKkjdpzZp/5WuvwK/Qib3Z0HtzrDFeWanS99dNhnA== + dependencies: + debug "^4.1.1" + eslint-visitor-keys "^1.1.0" + glob "^7.1.6" + is-glob "^4.0.1" + lodash "^4.17.15" + semver "^6.3.0" + tsutils "^3.17.1" + "@webassemblyjs/ast@1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" @@ -4685,12 +4738,19 @@ eslint-utils@^1.4.3: dependencies: eslint-visitor-keys "^1.1.0" +eslint-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.0.0.tgz#7be1cc70f27a72a76cd14aa698bcabed6890e1cd" + integrity sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA== + dependencies: + eslint-visitor-keys "^1.1.0" + eslint-visitor-keys@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== -eslint@^6.5.1: +eslint@^6.8.0: version "6.8.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== @@ -5535,7 +5595,7 @@ glob@7.1.2: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: +glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -10043,6 +10103,11 @@ regexpp@^2.0.1: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== +regexpp@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" + integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== + regexpu-core@^4.6.0, regexpu-core@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" @@ -11560,11 +11625,18 @@ ts-toolbelt@^6.3.3: resolved "https://registry.yarnpkg.com/ts-toolbelt/-/ts-toolbelt-6.3.12.tgz#2a9eb22759ef65d2ee3e01544f68059ea80917bf" integrity sha512-hxX5rMtZRLGdRrz0LpEJO37K/SiSBoT/P1xx3WW1vON3P8FMqsCHIxrbynyWlEWHQOsLENwKV9AfEBTBNcv4eg== -tslib@^1.9.0, tslib@^1.9.3: +tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: version "1.11.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA== +tsutils@^3.17.1: + version "3.17.1" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" + integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== + dependencies: + tslib "^1.8.1" + tty-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"