diff --git a/.circleci/config.yml b/.circleci/config.yml index a39876a0..e157a3ac 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -83,7 +83,7 @@ commands: - build - run: name: Running build checks - command: npm run test:es5 && npm run test:typecheck && npm run lint && npm run test:unit + command: npm run test:es5 && npm run test:esm && npm run test:typecheck && npm run lint && npm run test:unit - store_artifacts: path: coverage destination: coverage diff --git a/.gitignore b/.gitignore index 2efd7454..08fd8111 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ config.yaml coverage dist es5 +esm extension/token.js node_modules docs diff --git a/.release.json b/.release.json index 8eba65a7..3c0f12cd 100644 --- a/.release.json +++ b/.release.json @@ -15,10 +15,10 @@ "node ./node_modules/.bin/release --bump ${CURRENT_VERSION} ${RELEASE_VERSION}", "git config user.name \"${GIT_USER_NAME}\"", "git config user.email \"${GIT_USER_EMAIL}\"", - "git rm -rf --ignore-unmatch dist es5 docs lib/twilio/constants.ts", + "git rm -rf --ignore-unmatch dist es5 esm docs lib/twilio/constants.ts", "npm run build:release", "git add package.json", - "git add -f dist es5 docs lib/twilio/constants.ts", + "git add -f dist es5 esm docs lib/twilio/constants.ts", "git commit -nm \"${RELEASE_VERSION}\"", "git tag ${RELEASE_VERSION}", "git remote set-url origin \"https://${GH_TOKEN}@${GH_REF}\"", @@ -40,7 +40,7 @@ "development": { "commands": [ "node ./node_modules/.bin/release --bump ${RELEASE_VERSION} ${DEVELOPMENT_VERSION}", - "git rm -rf dist es5 docs lib/twilio/constants.ts", + "git rm -rf dist es5 esm docs lib/twilio/constants.ts", "npm run clean", "npm run docs:clean", "git add package.json", diff --git a/CHANGELOG.md b/CHANGELOG.md index 835ded98..5f7d2801 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,20 @@ -2.6.1 (July 7, 2023) +2.7.0 (In Progress) =================== +ECMAScript Module Support +------------------------- + +Currently, the SDK is imported as a [CommonJS Module (CJS)](https://nodejs.org/api/modules.html) using the root path `@twilio/voice-sdk`. With this release, the SDK contains an experimental feature that allows it to be imported as an [ECMAScript Module (ESM)](https://nodejs.org/api/esm.html) using the `@twilio/voice-sdk/esm` path. As this is an experimental feature, certain frameworks may not work such as [svelte](https://kit.svelte.dev/docs/introduction). ESM full support will be available in a future release and will become the default import behavior of the SDK. + +Example: + +```ts +import { Device } from '@twilio/voice-sdk/esm'; +``` + +2.6.1 (July 7, 2023) +==================== + Changes ------- diff --git a/package-lock.json b/package-lock.json index 17ea9192..4f50f813 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@twilio/voice-sdk", - "version": "2.6.1-dev", + "version": "2.6.2-dev", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@twilio/voice-sdk", - "version": "2.6.1-dev", + "version": "2.6.2-dev", "license": "Apache-2.0", "dependencies": { "@twilio/voice-errors": "1.3.1", @@ -46,6 +46,7 @@ "npm-run-all": "4.1.5", "nyc": "15.1.0", "pre-commit": "1.2.2", + "renamer": "^4.0.0", "selenium-webdriver": "3.6.0", "sinon": "9.0.3", "ts-node": "8.6.2", @@ -2442,6 +2443,15 @@ "sprintf-js": "~1.0.2" } }, + "node_modules/array-back": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz", + "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==", + "dev": true, + "engines": { + "node": ">=12.17" + } + }, "node_modules/array-buffer-byte-length": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", @@ -3431,6 +3441,116 @@ "source-map": "~0.5.3" } }, + "node_modules/command-line-args": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", + "dev": true, + "dependencies": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/command-line-args/node_modules/array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/command-line-args/node_modules/typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/command-line-usage": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", + "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", + "dev": true, + "dependencies": { + "array-back": "^4.0.2", + "chalk": "^2.4.2", + "table-layout": "^1.0.2", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/command-line-usage/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/command-line-usage/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/command-line-usage/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -3705,6 +3825,15 @@ "node": "*" } }, + "node_modules/current-module-paths": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/current-module-paths/-/current-module-paths-1.1.1.tgz", + "integrity": "sha512-8Ga5T8oMXBaSsHq9Gj+bddX7kHSaJKsl2vaAd3ep51eQLkr4W18eFEmEZM5bLo1zrz8tt3jE1U8QK9QGhaLR4g==", + "dev": true, + "engines": { + "node": ">=12.17" + } + }, "node_modules/custom-event": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", @@ -3771,6 +3900,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/default-require-extensions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", @@ -4424,6 +4562,12 @@ "node": "> 0.1.90" } }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, "node_modules/fast-fifo": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.0.tgz", @@ -4496,6 +4640,19 @@ "node": ">=0.8.0" } }, + "node_modules/file-set": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/file-set/-/file-set-5.1.3.tgz", + "integrity": "sha512-mQ6dqz+z59on3B50IGF3ujNGbZmY1TAeLHpNfhLEeNM6Lky31w3RUlbCyqZWQs0DuZJQU4R2qDuVd9ojyzadcg==", + "dev": true, + "dependencies": { + "array-back": "^6.2.2", + "glob": "^7.2.0" + }, + "engines": { + "node": ">=12.17" + } + }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -4543,6 +4700,27 @@ "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, + "node_modules/find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "dev": true, + "dependencies": { + "array-back": "^3.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/find-replace/node_modules/array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -5001,6 +5179,21 @@ "node": ">=10.13.0" } }, + "node_modules/global-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", + "dev": true, + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -5465,6 +5658,15 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/inline-source-map": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", @@ -6886,6 +7088,18 @@ "node": ">=4" } }, + "node_modules/load-module": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/load-module/-/load-module-4.2.1.tgz", + "integrity": "sha512-Sbfg6R4LjvyThJpqUoADHMjyoI2+cL4msbCQeZ9kkY/CqP/TT2938eftKm7x4I2gd4/A+DEe6nePkbfWYbXwSw==", + "dev": true, + "dependencies": { + "array-back": "^6.2.0" + }, + "engines": { + "node": ">=12.17" + } + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -8635,6 +8849,18 @@ "prettyjson": "bin/prettyjson" } }, + "node_modules/printj": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/printj/-/printj-1.3.1.tgz", + "integrity": "sha512-GA3TdL8szPK4AQ2YnOe/b+Y1jUFwmmGMMK/qbY7VcE3Z7FU8JstbKiKRzO6CIiAKPhTO8m01NoQ0V5f3jc4OGg==", + "dev": true, + "bin": { + "printj": "bin/printj.njs" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -8931,6 +9157,15 @@ "node": ">= 0.10" } }, + "node_modules/reduce-flatten": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -9037,6 +9272,81 @@ "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", "dev": true }, + "node_modules/renamer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/renamer/-/renamer-4.0.0.tgz", + "integrity": "sha512-yurufcXxbJfFBVAUoByNyDVH811zTZ/MrKo6gUH8pHGeAmdK7J5egj2lSNe57HuVIvnVzSalzeVGu8pi8UHGxg==", + "dev": true, + "dependencies": { + "array-back": "^6.2.0", + "chalk": "^4.1.2", + "command-line-args": "^5.2.0", + "command-line-usage": "^6.1.1", + "current-module-paths": "^1.1.0", + "fast-diff": "^1.2.0", + "file-set": "^5.1.2", + "global-dirs": "^3.0.0", + "load-module": "^4.2.1", + "printj": "^1.3.0", + "stream-read-all": "^3.0.1", + "typical": "^7.1.1" + }, + "bin": { + "renamer": "bin/cli.js" + }, + "engines": { + "node": ">=12.17" + } + }, + "node_modules/renamer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/renamer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/renamer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/renamer/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/replace-ext": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", @@ -9830,6 +10140,15 @@ "node": ">= 6" } }, + "node_modules/stream-read-all": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/stream-read-all/-/stream-read-all-3.0.1.tgz", + "integrity": "sha512-EWZT9XOceBPlVJRrYcykW8jyRSZYbkb/0ZK36uLEmoWVO5gxBOnntNTseNzfREsqxqdfEGQrD8SXQ3QWbBmq8A==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/stream-splicer": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz", @@ -10070,6 +10389,39 @@ "acorn-node": "^1.2.0" } }, + "node_modules/table-layout": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", + "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", + "dev": true, + "dependencies": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/table-layout/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/table-layout/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/tabtab": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/tabtab/-/tabtab-2.2.2.tgz", @@ -10847,6 +11199,15 @@ "node": ">=4.2.0" } }, + "node_modules/typical": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz", + "integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==", + "dev": true, + "engines": { + "node": ">=12.17" + } + }, "node_modules/ua-parser-js": { "version": "0.7.35", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.35.tgz", @@ -11453,6 +11814,28 @@ "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", "dev": true }, + "node_modules/wordwrapjs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", + "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", + "dev": true, + "dependencies": { + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/wordwrapjs/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/workerpool": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", diff --git a/package.json b/package.json index 34be1fed..e4f029c5 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "version": "2.6.2-dev", "description": "Twilio's JavaScript Voice SDK", "main": "./es5/twilio.js", + "module": "./esm/index.js", "types": "./es5/twilio.d.ts", "license": "Apache-2.0", "keywords": [ @@ -15,6 +16,10 @@ "engines": { "node": ">= 12" }, + "exports": { + ".": "./es5/twilio.js", + "./esm": "./esm/index.js" + }, "repository": { "type": "git", "url": "git@github.com:twilio/twilio-voice.js.git" @@ -25,10 +30,10 @@ "build:dev": "ENV=dev npm run build", "build:dist": "node ./scripts/build.js ./lib/browser.js ./LICENSE.md ./dist/twilio.js", "build:dist-min": "uglifyjs ./dist/twilio.js -o ./dist/twilio.min.js --comments \"/^! twilio-voice.js/\" -b beautify=false,ascii_only=true", - "build:release": "npm-run-all lint build test:es5 status", - "build:ts": "./node_modules/typescript/bin/tsc", + "build:release": "npm-run-all lint build test:es5 test:esm status", + "build:ts": "./node_modules/typescript/bin/tsc && ./node_modules/typescript/bin/tsc --project tsconfig-esm.json && renamer --find twilio --replace index esm/twilio.*", "build:constants": "node ./scripts/constants.js", - "clean": "rimraf ./coverage ./dist ./es5", + "clean": "rimraf ./coverage ./dist ./es5 ./esm", "coverage": "nyc ./node_modules/mocha/bin/mocha -r ts-node/register ./tests/index.ts", "coverage:check": "nyc check-coverage --lines 60 --branches 60 --functions 60", "docs:clean": "rimraf ./docs", @@ -43,6 +48,7 @@ "test": "npm-run-all lint build test:unit test:es5 test:docker", "test:docker": "chmod +x ./scripts/run-docker-tests.sh && ./scripts/run-docker-tests.sh", "test:es5": "es-check es5 \"./es5/**/*.js\" ./dist/*.js", + "test:esm": "es-check es6 \"./esm/**/*.js\" --module", "test:framework:no-framework": "mocha tests/framework/no-framework.js", "test:framework:react:install": "cd ./tests/framework/react && rimraf ./node_modules package-lock.json && npm install", "test:framework:react:build": "cd ./tests/framework/react && npm run build", @@ -92,6 +98,7 @@ "npm-run-all": "4.1.5", "nyc": "15.1.0", "pre-commit": "1.2.2", + "renamer": "4.0.0", "selenium-webdriver": "3.6.0", "sinon": "9.0.3", "ts-node": "8.6.2", diff --git a/tests/framework/react/package.json b/tests/framework/react/package.json index 75e45101..2d88f573 100644 --- a/tests/framework/react/package.json +++ b/tests/framework/react/package.json @@ -2,17 +2,29 @@ "name": "twiliojs-react", "private": true, "devDependencies": { - "react-scripts": "1.1.0", - "webpack": "^3.11.0" + "react-scripts": "5.0.1", + "webpack": "5.88.1" }, "dependencies": { - "react": "^15.4.1", - "react-dom": "^15.4.1", - "twilio-client": "file:../../../" + "@twilio/voice-sdk": "file:../../..", + "react": "18.2.0", + "react-dom": "18.2.0" }, "scripts": { "start": "react-scripts start", "build": "react-scripts build", "test": "react-scripts test --env=jsdom" + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] } } diff --git a/tests/framework/react/src/App.js b/tests/framework/react/src/App.js index bd4f8fca..14d15c05 100644 --- a/tests/framework/react/src/App.js +++ b/tests/framework/react/src/App.js @@ -1,23 +1,23 @@ import React, { Component } from 'react'; -import { Device } from 'twilio-client'; +import { Device } from '@twilio/voice-sdk/esm'; export default class App extends Component { constructor(props) { super(props); - - this.state = {}; - - Device.ready(() => { - this.setState({ success: true }); - }); - - Device.setup(props.token) + const device = new Device(props.token); + device.on('error', () => this.setState({ ...this.state, success: false })); + device.on('registered', () => this.setState({ ...this.state, success: true })); + device.register().catch(() => this.setState({ ...this.state, success: false })); + this.state = { device }; } render() { - if (this.state.success) { + if (this.state.success === true) { return
Setup successful
; } + if (this.state.success === false) { + returnSetup failed
; + } returnCalling Device.setup
; } } diff --git a/tsconfig-base.json b/tsconfig-base.json new file mode 100644 index 00000000..4c3594c0 --- /dev/null +++ b/tsconfig-base.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "allowJs": true, + "checkJs": false, + "declaration": true, + "lib": ["es5", "es6", "es2016", "es2017.object", "dom"], + "moduleResolution": "node", + "noImplicitAny": true, + "noImplicitThis": true, + "rootDir": "lib", + "inlineSourceMap": true, + "strictNullChecks": true + }, + "include": [ + "lib/**/*.ts" + ] +} diff --git a/tsconfig-esm.json b/tsconfig-esm.json new file mode 100644 index 00000000..d161fbfe --- /dev/null +++ b/tsconfig-esm.json @@ -0,0 +1,8 @@ +{ + "extends": "./tsconfig-base.json", + "compilerOptions": { + "target": "es6", + "module": "ESNext", + "outDir": "esm" + } +} diff --git a/tsconfig.json b/tsconfig.json index d6abf46e..6030be1d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,20 +1,8 @@ { + "extends": "./tsconfig-base.json", "compilerOptions": { - "allowJs": true, - "checkJs": false, - "declaration": true, "target": "es5", - "lib": ["es5", "es6", "es2016", "es2017.object", "dom"], "module": "commonjs", - "moduleResolution": "node", - "noImplicitAny": true, - "noImplicitThis": true, - "rootDir": "lib", "outDir": "es5", - "inlineSourceMap": true, - "strictNullChecks": true - }, - "include": [ - "lib/**/*.ts" - ] + } }