diff --git a/.babelrc b/.babelrc index c89969271..6f4f54a93 100644 --- a/.babelrc +++ b/.babelrc @@ -3,10 +3,7 @@ "presets": [ ["@babel/preset-env", { "targets": { - "browsers": [ - "last 2 versions" - ], - "node": 12 + "node": 10 }, "modules": "commonjs" }], diff --git a/README.md b/README.md index 29c2653d0..c252447c4 100644 --- a/README.md +++ b/README.md @@ -15,8 +15,9 @@ https://github.com/matrix-org/matrix-js-sdk/releases/latest and add that as a attached to ``window`` through which you can access the SDK. See below for how to include libolm to enable end-to-end-encryption. -Note that your application will be required to minify the JS if desired - the js-sdk -doesn't guarantee that the output will be minified. +The browser bundle supports recent versions of browsers. Typically this is ES2015 +or `> 0.5%, last 2 versions, Firefox ESR, not dead` if using +[browserlists](https://github.com/browserslist/browserslist). Please check [the working browser example](examples/browser) for more information. @@ -25,13 +26,18 @@ In Node.js Ensure you have the latest LTS version of Node.js installed. -Using `yarn` instead of `npm` is recommended. Please see the Yarn [install guide](https://yarnpkg.com/docs/install/) if you do not have it already. +This SDK targets Node 10 for compatibility, which translates to ES6. If you're using +a bundler like webpack you'll likely have to transpile dependencies, including this +SDK, to match your target browsers. + +Using `yarn` instead of `npm` is recommended. Please see the Yarn [install guide](https://yarnpkg.com/docs/install/) +if you do not have it already. ``yarn add matrix-js-sdk`` ```javascript - var sdk = require("matrix-js-sdk"); - var client = sdk.createClient("https://matrix.org"); + import * as sdk from "matrix-js-sdk"; + const client = sdk.createClient("https://matrix.org"); client.publicRooms(function(err, data) { console.log("Public Rooms: %s", JSON.stringify(data)); }); @@ -62,7 +68,7 @@ client.once('sync', function(state, prevState, res) { To send a message: ```javascript -var content = { +const content = { "body": "message text", "msgtype": "m.text" }; @@ -194,10 +200,10 @@ This section provides some useful code snippets which demonstrate the core functionality of the SDK. These examples assume the SDK is setup like this: ```javascript - var sdk = require("matrix-js-sdk"); - var myUserId = "@example:localhost"; - var myAccessToken = "QGV4YW1wbGU6bG9jYWxob3N0.qPEvLuYfNBjxikiCjP"; - var matrixClient = sdk.createClient({ + import * as sdk from "matrix-js-sdk"; + const myUserId = "@example:localhost"; + const myAccessToken = "QGV4YW1wbGU6bG9jYWxob3N0.qPEvLuYfNBjxikiCjP"; + const matrixClient = sdk.createClient({ baseUrl: "http://localhost:8008", accessToken: myAccessToken, userId: myUserId @@ -250,11 +256,11 @@ Output: ```javascript matrixClient.on("RoomState.members", function(event, state, member) { - var room = matrixClient.getRoom(state.roomId); + const room = matrixClient.getRoom(state.roomId); if (!room) { return; } - var memberList = state.getMembers(); + const memberList = state.getMembers(); console.log(room.name); console.log(Array(room.name.length + 1).join("=")); // underline for (var i = 0; i < memberList.length; i++) { diff --git a/package.json b/package.json index 5f7bac327..a424fbec5 100644 --- a/package.json +++ b/package.json @@ -5,10 +5,11 @@ "scripts": { "start": "echo THIS IS FOR LEGACY PURPOSES ONLY. && babel src -w -s -d lib --verbose --extensions \".ts,.js\"", "clean": "rimraf lib dist", - "build": "yarn clean && git rev-parse HEAD > git-revision.txt && yarn build:compile && yarn build:compile-browser && yarn build:types", + "build": "yarn clean && git rev-parse HEAD > git-revision.txt && yarn build:compile && yarn build:compile-browser && yarn build:minify-browser && yarn build:types", "build:types": "tsc --emitDeclarationOnly", - "build:compile": "babel src -s -d lib --verbose --extensions \".ts,.js\"", - "build:compile-browser": "mkdirp dist && browserify -d src/browser-index.js -p [ tsify -p ./tsconfig.json ] -t [ babelify --sourceMaps=inline ] > dist/browser-matrix.js", + "build:compile": "babel -d lib --verbose --extensions \".ts,.js\" src", + "build:compile-browser": "mkdirp dist && browserify -d src/browser-index.js -p [ tsify -p ./tsconfig.json ] -t [ babelify --sourceMaps=inline --presets [ @babel/preset-env @babel/preset-typescript ] ] | exorcist dist/browser-matrix.js.map > dist/browser-matrix.js", + "build:minify-browser": "terser dist/browser-matrix.js --compress --mangle --source-map --output dist/browser-matrix.min.js", "gendoc": "jsdoc -c jsdoc.json -P package.json", "lint": "yarn lint:types && yarn lint:ts && yarn lint:js", "lint:js": "eslint --max-warnings 93 src spec", @@ -31,6 +32,7 @@ "license": "Apache-2.0", "files": [ "lib", + "src", "git-revision.txt", "CHANGELOG.md", "CONTRIBUTING.rst", @@ -70,11 +72,13 @@ "eslint-config-google": "^0.7.1", "eslint-plugin-babel": "^5.3.0", "eslint-plugin-jest": "^23.0.4", + "exorcist": "^1.0.1", "jest": "^24.9.0", "jsdoc": "^3.5.5", "matrix-mock-request": "^1.2.3", "olm": "https://packages.matrix.org/npm/olm/olm-3.1.4.tgz", "rimraf": "^3.0.0", + "terser": "^4.4.3", "tsify": "^4.0.1", "tslint": "^5.20.1", "typescript": "^3.7.3" diff --git a/yarn.lock b/yarn.lock index 17e209a60..cda875153 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1909,7 +1909,7 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@^2.12.1, commander@^2.19.0, commander@~2.20.3: +commander@^2.12.1, commander@^2.19.0, commander@^2.20.0, commander@~2.20.3: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -2566,6 +2566,16 @@ exit@^0.1.2: resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= +exorcist@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/exorcist/-/exorcist-1.0.1.tgz#79316e3c4885845490f7bb405c0e5b5db1167c52" + integrity sha1-eTFuPEiFhFSQ97tAXA5bXbEWfFI= + dependencies: + is-stream "~1.1.0" + minimist "0.0.5" + mkdirp "~0.5.1" + mold-source-map "~0.4.0" + expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" @@ -3375,7 +3385,7 @@ is-set@^2.0.0: resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.0.tgz#ae93342b1de5560c720b4b71599abc799d183cf4" integrity sha512-So5/xwRDzU3X7kOt2vpvrsj/Asx5E7Q5IyX6itksB96FJgyydSe9tFwfCq7IZ8URDS4h45FhNgfENToTgBfmgw== -is-stream@^1.1.0: +is-stream@^1.1.0, is-stream@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= @@ -4300,6 +4310,11 @@ minimatch@^3.0.2, minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" +minimist@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.5.tgz#d7aa327bcecf518f9106ac6b8f003fa3bcea8566" + integrity sha1-16oye87PUY+RBqxrjwA/o7zqhWY= + minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" @@ -4338,7 +4353,7 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@^0.5.0, mkdirp@^0.5.1: +mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= @@ -4366,6 +4381,14 @@ module-deps@^6.0.0: through2 "^2.0.0" xtend "^4.0.0" +mold-source-map@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/mold-source-map/-/mold-source-map-0.4.0.tgz#cf67e0b31c47ab9badb5c9c25651862127bb8317" + integrity sha1-z2fgsxxHq5uttcnCVlGGISe7gxc= + dependencies: + convert-source-map "^1.1.0" + through "~2.2.7" + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -5955,6 +5978,15 @@ tar@^4: safe-buffer "^5.1.2" yallist "^3.0.3" +terser@^4.4.3: + version "4.4.3" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.4.3.tgz#401abc52b88869cf904412503b1eb7da093ae2f0" + integrity sha512-0ikKraVtRDKGzHrzkCv5rUNDzqlhmhowOBqC0XqUHFpW+vJ45+20/IFBcebwKfiS2Z9fJin6Eo+F1zLZsxi8RA== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + test-exclude@^5.2.3: version "5.2.3" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0" @@ -5988,6 +6020,11 @@ through2@^2.0.0: resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= +through@~2.2.7: + version "2.2.7" + resolved "https://registry.yarnpkg.com/through/-/through-2.2.7.tgz#6e8e21200191d4eb6a99f6f010df46aa1c6eb2bd" + integrity sha1-bo4hIAGR1OtqmfbwEN9Gqhxusr0= + timers-browserify@^1.0.1: version "1.4.2" resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d"