diff --git a/.babelrc b/.babelrc index abe7e1ef3f..3710e20a37 100644 --- a/.babelrc +++ b/.babelrc @@ -1,20 +1,25 @@ { + "sourceMaps": "inline", "presets": [ - "react", - "es2015", - "es2016" + ["@babel/preset-env", { + "targets": { + "browsers": [ + "last 2 versions" + ], + "node": 12 + }, + "modules": "commonjs" + }], + "@babel/preset-typescript", + "@babel/preset-flow", + "@babel/preset-react" ], "plugins": [ - [ - "transform-builtin-extend", - { - "globals": ["Error"] - } - ], - "transform-class-properties", - "transform-object-rest-spread", - "transform-runtime", - "add-module-exports", - "syntax-dynamic-import" + "@babel/plugin-proposal-numeric-separator", + "@babel/plugin-proposal-class-properties", + "@babel/plugin-proposal-object-rest-spread", + "@babel/plugin-transform-flow-comments", + "@babel/plugin-syntax-dynamic-import", + "@babel/plugin-transform-runtime" ] } diff --git a/.buildkite/pipeline.yaml b/.buildkite/pipeline.yaml index be0d5e404c..8bbcdf78a4 100644 --- a/.buildkite/pipeline.yaml +++ b/.buildkite/pipeline.yaml @@ -1,13 +1,39 @@ steps: - - label: ":eslint: Lint" + - label: ":eslint: JS Lint" command: - "echo '--- Install js-sdk'" - "./scripts/ci/install-deps.sh" - - "yarn lintwithexclusions" - - "yarn stylelint" + - "yarn lint:js" plugins: - docker#v3.0.1: - image: "node:10" + image: "node:12" + + - label: ":eslint: TS Lint" + command: + - "echo '--- Install js-sdk'" + - "./scripts/ci/install-deps.sh" + - "yarn lint:ts" + plugins: + - docker#v3.0.1: + image: "node:12" + + - label: ":eslint: Types Lint" + command: + - "echo '--- Install js-sdk'" + - "./scripts/ci/install-deps.sh" + - "yarn lint:types" + plugins: + - docker#v3.0.1: + image: "node:12" + + - label: "🛠 Build" + command: + - "echo '--- Install js-sdk'" + - "./scripts/ci/install-deps.sh" + - "yarn build" + plugins: + - docker#v3.0.1: + image: "node:12" - label: ":chains: End-to-End Tests" agents: diff --git a/karma.conf.js b/karma.conf.js index d55be049bb..92e4e0e886 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -8,7 +8,7 @@ var fs = require('fs'); * to build everything; however it's the easiest way to load our dependencies * from node_modules. * - * If you run karma in multi-run mode (with `yarn test-multi`), it will watch + * If you run karma in multi-run mode (with `yarn test:multi`), it will watch * the tests for changes, and webpack will rebuild using a cache. This is much quicker * than a clean rebuild. */ diff --git a/package.json b/package.json index 2f35ab7750..3b6e571d0c 100644 --- a/package.json +++ b/package.json @@ -8,10 +8,7 @@ "url": "https://github.com/matrix-org/matrix-react-sdk" }, "license": "Apache-2.0", - "main": "lib/index.js", "files": [ - ".babelrc", - ".eslintrc.js", "CHANGELOG.md", "CONTRIBUTING.rst", "LICENSE", @@ -19,14 +16,11 @@ "code_style.md", "git-revision.txt", "header", - "jenkins.sh", - "karma.conf.js", "lib", "package.json", - "release.sh", "scripts", + "docs", "src", - "test", "res" ], "bin": { @@ -34,32 +28,33 @@ "matrix-gen-i18n": "scripts/gen-i18n.js", "matrix-prune-i18n": "scripts/prune-i18n.js" }, + "main": "lib/index.js", + "typings": "lib/index.d.ts", "scripts": { - "reskindex": "node scripts/reskindex.js -h header", - "reskindex:watch": "node scripts/reskindex.js -h header -w", - "rethemendex": "res/css/rethemendex.sh", "i18n": "matrix-gen-i18n", "prunei18n": "matrix-prune-i18n", "diff-i18n": "cp src/i18n/strings/en_EN.json src/i18n/strings/en_EN_orig.json && ./scripts/gen-i18n.js && node scripts/compare-file.js src/i18n/strings/en_EN_orig.json src/i18n/strings/en_EN.json", - "build": "yarn reskindex && yarn start:init", - "build:watch": "babel src -w --skip-initial-build -d lib --source-maps --copy-files", "emoji-data-strip": "node scripts/emoji-data-strip.js", - "start": "yarn start:init && yarn start:all", - "start:all": "concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n build,reskindex \"yarn build:watch\" \"yarn reskindex:watch\"", - "start:init": "babel src -d lib --source-maps --copy-files", - "lint": "eslint src/", - "lintall": "eslint src/ test/", - "lintwithexclusions": "eslint --max-warnings 0 --ignore-path .eslintignore.errorfiles src test", - "stylelint": "stylelint 'res/css/**/*.scss'", + "reskindex": "node scripts/reskindex.js -h header", + "reskindex:watch": "node scripts/reskindex.js -h header -w", + "rethemendex": "res/css/rethemendex.sh", "clean": "rimraf lib", - "prepare": "yarn clean && yarn build && git rev-parse HEAD > git-revision.txt", + "build": "yarn clean && git rev-parse HEAD > git-revision.txt && yarn build:compile && yarn build:types", + "build:compile": "yarn reskindex && babel src -s -d lib --verbose --extensions \".ts,.js\"", + "build:types": "tsc --emitDeclarationOnly", + "start": "echo THIS IS FOR LEGACY PURPOSES ONLY. && yarn start:all", + "start:all": "concurrently --kill-others-on-fail --prefix \"{time} [{name}]\" -n build,reskindex \"yarn start:build\" \"yarn reskindex:watch\"", + "start:build": "babel src -w -s -d lib --verbose --extensions \".ts,.js\"", + "lint": "yarn lint:types && yarn lint:ts && yarn lint:js && yarn lint:style", + "lint:js": "eslint --max-warnings 0 --ignore-path .eslintignore.errorfiles src test", + "lint:ts": "tslint --project ./tsconfig.json -t stylish", + "lint:types": "tsc --noEmit", + "lint:style": "stylelint 'res/css/**/*.scss'", "test": "karma start --single-run=true --browsers VectorChromeHeadless", - "test-multi": "karma start", - "e2etests": "./test/end-to-end-tests/run.sh --riot-url http://localhost:8080" + "test:multi": "karma start", + "test:e2e": "./test/end-to-end-tests/run.sh --riot-url http://localhost:8080" }, "dependencies": { - "babel-plugin-syntax-dynamic-import": "^6.18.0", - "babel-runtime": "^6.26.0", "blueimp-canvas-to-blob": "^3.5.0", "browser-encrypt-attachment": "^0.3.0", "browser-request": "^0.3.3", @@ -115,20 +110,20 @@ "zxcvbn": "^4.4.2" }, "devDependencies": { - "babel-cli": "^6.26.0", - "babel-core": "^6.26.3", - "babel-eslint": "^10.0.1", - "babel-loader": "^7.1.5", - "babel-plugin-add-module-exports": "^0.2.1", - "babel-plugin-transform-builtin-extend": "^1.1.2", - "babel-plugin-transform-class-properties": "^6.24.1", - "babel-plugin-transform-object-rest-spread": "^6.26.0", - "babel-plugin-transform-runtime": "^6.23.0", - "babel-polyfill": "^6.26.0", - "babel-preset-es2015": "^6.24.1", - "babel-preset-es2016": "^6.24.1", - "babel-preset-es2017": "^6.24.1", - "babel-preset-react": "^6.24.1", + "@babel/cli": "^7.7.5", + "@babel/core": "^7.7.5", + "@babel/plugin-proposal-class-properties": "^7.7.4", + "@babel/plugin-proposal-numeric-separator": "^7.7.4", + "@babel/plugin-proposal-object-rest-spread": "^7.7.4", + "@babel/plugin-transform-flow-comments": "^7.7.4", + "@babel/plugin-transform-runtime": "^7.7.6", + "@babel/preset-env": "^7.7.6", + "@babel/preset-flow": "^7.7.4", + "@babel/preset-react": "^7.7.4", + "@babel/preset-typescript": "^7.7.4", + "@babel/register": "^7.7.4", + "@babel/runtime": "^7.7.6", + "babel-eslint": "^10.0.3", "chokidar": "^2.1.2", "concurrently": "^4.0.1", "eslint": "^5.12.0", @@ -163,6 +158,8 @@ "stylelint": "^9.10.1", "stylelint-config-standard": "^18.2.0", "stylelint-scss": "^3.9.0", + "tslint": "^5.20.1", + "typescript": "^3.7.3", "walk": "^2.3.9", "webpack": "^4.20.2", "webpack-cli": "^3.1.1"