diff --git a/es-latest/im.d.ts b/es-latest/im.d.ts new file mode 100644 index 000000000..2f9bdf565 --- /dev/null +++ b/es-latest/im.d.ts @@ -0,0 +1 @@ +export * from '../realtime'; diff --git a/es-latest/im.js b/es-latest/im.js new file mode 100644 index 000000000..69afa1f43 --- /dev/null +++ b/es-latest/im.js @@ -0,0 +1 @@ +module.exports = require('../dist/es-latest/im'); diff --git a/es-latest/index.d.ts b/es-latest/index.d.ts new file mode 100644 index 000000000..2f9bdf565 --- /dev/null +++ b/es-latest/index.d.ts @@ -0,0 +1 @@ +export * from '../realtime'; diff --git a/es-latest/index.js b/es-latest/index.js new file mode 100644 index 000000000..f553eff53 --- /dev/null +++ b/es-latest/index.js @@ -0,0 +1 @@ +module.exports = require('../dist/es-latest/im-node'); diff --git a/package-lock.json b/package-lock.json index b1733a3de..cd8743fe6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1381,6 +1381,12 @@ "@babel/types": "^7.0.0" } }, + "@babel/helper-validator-identifier": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.0.tgz", + "integrity": "sha512-6G8bQKjOh+of4PV/ThDm/rRqlU7+IGoJuofpagU5GlEl29Vv0RGqqt86ZGRV8ZuSOY3o+8yXl5y782SMcG7SHw==", + "dev": true + }, "@babel/helper-wrap-function": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz", @@ -4809,7 +4815,8 @@ "version": "2.17.1", "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "dev": true + "dev": true, + "optional": true }, "commondir": { "version": "1.0.1", @@ -12343,16 +12350,45 @@ "rollup-pluginutils": "^2.6.0" } }, - "rollup-plugin-uglify": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/rollup-plugin-uglify/-/rollup-plugin-uglify-6.0.3.tgz", - "integrity": "sha512-PIv3CfhZJlOG8C85N0GX+uK09TPggmAS6Nk6fpp2ELzDAV5VUhNzOURDU2j7+MwuRr0zq9IZttUTADc/jH8Gkg==", + "rollup-plugin-terser": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-5.3.0.tgz", + "integrity": "sha512-XGMJihTIO3eIBsVGq7jiNYOdDMb3pVxuzY0uhOE/FM4x/u9nQgr3+McsjzqBn3QfHIpNSZmFnpoKAwHBEcsT7g==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "jest-worker": "^24.0.0", - "serialize-javascript": "^1.9.0", - "uglify-js": "^3.4.9" + "@babel/code-frame": "^7.5.5", + "jest-worker": "^24.9.0", + "rollup-pluginutils": "^2.8.2", + "serialize-javascript": "^2.1.2", + "terser": "^4.6.2" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "@babel/highlight": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", + "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.9.0", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "serialize-javascript": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz", + "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==", + "dev": true + } } }, "rollup-pluginutils": { @@ -12448,12 +12484,6 @@ "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", "dev": true }, - "serialize-javascript": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz", - "integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==", - "dev": true - }, "set-value": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", @@ -13317,6 +13347,31 @@ } } }, + "terser": { + "version": "4.6.7", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.7.tgz", + "integrity": "sha512-fmr7M1f7DBly5cX2+rFDvmGBAaaZyPrHYK4mMdHEDAdNTqXSZgSOfqsfGq2HqPGT/1V0foZZuCZFx8CHKgAk3g==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, "test-exclude": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.1.0.tgz", @@ -13601,6 +13656,7 @@ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", "dev": true, + "optional": true, "requires": { "commander": "~2.17.1", "source-map": "~0.6.1" @@ -13610,7 +13666,8 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "dev": true, + "optional": true } } }, diff --git a/package.json b/package.json index 391d4add9..c5a6fd0e8 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,6 @@ "version": "5.0.0-rc.1", "description": "LeanCloud Realtime Message JavaScript SDK", "main": "./dist/im-node.js", - "jsnext:main": "./src/index.js", "directories": { "test": "test" }, @@ -16,10 +15,10 @@ "test:browser": "if [ ! -z \"$SAUCE_ACCESS_KEY\" ]; then npm run build:test && karma start karma-sauce.conf.js; else echo 'Saucelabs test skipped, set SAUCE_USERNAME and SAUCE_ACCESS_KEY to start it.\n\rTo run browser tests locally, run `npm run test:browser-local`'; fi", "test:browser-local": "npm run build:test && karma start", "docs": "jsdoc src README.md package.json -d docs -c .jsdocrc.json && jsdoc plugins/typed-messages/src plugins/typed-messages/package.json src/messages/message.js src/messages/typed-message.js -d plugins/typed-messages/docs -c .jsdocrc.json && jsdoc plugins/webrtc/src plugins/webrtc/package.json -d plugins/webrtc/docs -c .jsdocrc.json && jsdoc plugins/groupchat-receipts/src plugins/groupchat-receipts/package.json -d plugins/groupchat-receipts/docs -c .jsdocrc.json", - "build": "npm run build:realtime && npm run build:plugins && ./script/validate-es5.js", + "build": "npm run build:realtime && BABEL_ENV=es5 npm run build:realtime && BABEL_ENV=es5 npm run build:plugins && ./script/validate-es5.js", "build:realtime": "rollup -c rollup/rollup.config.realtime.js", "build:plugins": "rollup -c rollup/rollup.config.plugins.js", - "build:test": "rollup -c rollup/rollup.config.test.js", + "build:test": "BABEL_ENV=es5 rollup -c rollup/rollup.config.test.js", "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s", "convert-pb": "pbjs proto/message.proto -t commonjs > proto/message-compiled.js && sed -i '' 's/protobufjs/protobufjs\\/dist\\/protobuf-light/g' ./proto/message-compiled.js" }, @@ -74,7 +73,7 @@ "rollup-plugin-commonjs": "^9.3.4", "rollup-plugin-json": "^3.1.0", "rollup-plugin-replace": "^2.2.0", - "rollup-plugin-uglify": "^6.0.3", + "rollup-plugin-terser": "^5.3.0", "should": "^12.0.0", "should-sinon": "^0.0.6", "sinon": "^6.0.1", @@ -98,11 +97,13 @@ }, "browser": { "@leancloud/platform-adapters-node": "@leancloud/platform-adapters-browser", - "./dist/im-node.js": "./dist/im-browser.js" + "./dist/im-node.js": "./dist/im-browser.js", + "./dist/es-latest/im-node.js": "./dist/es-latest/im-browser.js" }, "weapp": { "@leancloud/platform-adapters-node": "@leancloud/platform-adapters-weapp", - "./dist/im-node.js": "./dist/im-weapp.js" + "./dist/im-node.js": "./dist/im-weapp.js", + "./dist/es-latest/im-node.js": "./dist/es-latest/im-weapp.js" }, "nyc": { "require": [ diff --git a/rollup/rollup.config.plugins.js b/rollup/rollup.config.plugins.js index 9d97b98fa..c220c9006 100644 --- a/rollup/rollup.config.plugins.js +++ b/rollup/rollup.config.plugins.js @@ -3,7 +3,7 @@ import json from 'rollup-plugin-json'; import babel from 'rollup-plugin-babel'; import commonjs from 'rollup-plugin-commonjs'; -import { withMinified, getBabelConfigs } from './shared-configs'; +import { withMinified, babelConfig } from './shared-configs'; const createConfig = ({ input, output, id }) => ({ input, @@ -29,11 +29,10 @@ const createConfig = ({ input, output, id }) => ({ }, plugins: [ json(), - babel( - Object.assign(getBabelConfigs(), { - exclude: 'node_modules/**', - }) - ), + babel({ + ...babelConfig, + exclude: 'node_modules/**', + }), nodeResolve({ main: true, }), diff --git a/rollup/rollup.config.realtime.js b/rollup/rollup.config.realtime.js index cd4c3f814..fe08214d5 100644 --- a/rollup/rollup.config.realtime.js +++ b/rollup/rollup.config.realtime.js @@ -1,22 +1,96 @@ -import { getNodeConfig, browser, weapp, withMinified } from './shared-configs'; +import json from 'rollup-plugin-json'; +import babel from 'rollup-plugin-babel'; +import commonjs from 'rollup-plugin-commonjs'; +import { + createRollupPluginsOptions, + babelConfig, + withMinified, +} from './shared-configs'; + +const INPUT_FILE = 'src/im-adapted.js'; +const OUTPUT_DIR = process.env.BABEL_ENV === 'es5' ? 'dist' : 'dist/es-latest'; + +const node = { + input: INPUT_FILE, + output: { + file: `${OUTPUT_DIR}/im-node.js`, + format: 'cjs', + sourcemap: true, + }, + plugins: [ + json(), + babel({ + ...babelConfig, + exclude: 'node_modules/**', + }), + commonjs({ + include: ['proto/**'], + }), + ], +}; -const node = getNodeConfig(); const core = { - ...getNodeConfig(false), + ...node, input: 'src/core.js', output: { ...node.output, - file: 'dist/core.js', + file: `${OUTPUT_DIR}/core.js`, }, }; +export const browser = { + input: INPUT_FILE, + output: { + file: `${OUTPUT_DIR}/im-browser.js`, + format: 'umd', + name: 'AV', + extend: true, + amd: { + id: 'leancloud-realtime', + }, + sourcemap: true, + }, + plugins: createRollupPluginsOptions({ + browser: true, + }), +}; + const im = { ...browser, input: 'src/im.js', output: { ...browser.output, - file: 'dist/im.js', + file: `${OUTPUT_DIR}/im.js`, + }, +}; + +const weappRuntimeReset = () => ({ + intro() { + return 'global.Object=Object;function Function(){return function(){}};'; + }, +}); + +export const weapp = { + input: INPUT_FILE, + output: { + file: `${OUTPUT_DIR}/im-weapp.js`, + format: 'umd', + name: 'AV', + extend: true, + amd: { + id: 'leancloud-realtime', + }, + sourcemap: true, }, + plugins: [ + ...createRollupPluginsOptions({ + browser: true, + customResolveOptions: { + aliasFields: ['weapp', 'browser'], + }, + }), + weappRuntimeReset(), + ], }; export default [ diff --git a/rollup/rollup.config.test.js b/rollup/rollup.config.test.js index a73e24155..c515956e8 100644 --- a/rollup/rollup.config.test.js +++ b/rollup/rollup.config.test.js @@ -1,6 +1,6 @@ import _ from 'lodash'; import replace from 'rollup-plugin-replace'; -import { browser } from './shared-configs'; +import { browser } from './rollup.config.realtime'; const envify = () => replace( diff --git a/rollup/shared-configs.js b/rollup/shared-configs.js index 576808985..a3bde616b 100644 --- a/rollup/shared-configs.js +++ b/rollup/shared-configs.js @@ -2,7 +2,7 @@ import nodeResolve from '@leeyeh/rollup-plugin-node-resolve'; import json from 'rollup-plugin-json'; import babel from 'rollup-plugin-babel'; import commonjs from 'rollup-plugin-commonjs'; -import { uglify } from 'rollup-plugin-uglify'; +import { terser } from 'rollup-plugin-terser'; const env = () => ({ intro() { @@ -21,24 +21,28 @@ var require = require || function(id) {throw new Error('Unexpected required ' + }, }); -export const getBabelConfigs = ({ transformRuntime = true } = {}) => ({ - plugins: [ - ...(transformRuntime - ? [['@babel/plugin-transform-runtime', { corejs: 2 }]] - : []), - ['@babel/plugin-proposal-decorators', { legacy: true }], - [ - '@babel/plugin-transform-classes', - { - loose: true, - }, - ], - ], - presets: [['@babel/preset-env', { modules: false, debug: true }]], +const plugins = [['@babel/plugin-proposal-decorators', { legacy: true }]]; +export const babelConfig = { + plugins, babelrc: false, configFile: false, runtimeHelpers: true, -}); + env: { + es5: { + plugins: [ + ...plugins, + ['@babel/plugin-transform-runtime', { corejs: 2 }], + [ + '@babel/plugin-transform-classes', + { + loose: true, + }, + ], + ], + presets: [['@babel/preset-env', { modules: false, debug: true }]], + }, + }, +}; export const createRollupPluginsOptions = resolveOptions => [ json(), @@ -50,95 +54,21 @@ export const createRollupPluginsOptions = resolveOptions => [ commonjs({ include: ['node_modules/**', 'proto/**'], }), - babel( - Object.assign(getBabelConfigs(), { - include: [ - 'src/**', - 'test/**', - 'proto/**', - '**/superagent/**', - '**/event-target-shim/**', - '**/promise-timeout/**', - 'node_modules/sinon/**', - ], - }) - ), + babel({ + ...babelConfig, + include: [ + 'src/**', + 'test/**', + 'proto/**', + '**/superagent/**', + '**/event-target-shim/**', + '**/promise-timeout/**', + 'node_modules/sinon/**', + ], + }), env(), ]; -const INPUT_FILE = 'src/im-adapted.js'; - -export const getNodeConfig = (transformRuntime = true) => ({ - input: INPUT_FILE, - output: { - file: 'dist/im-node.js', - format: 'cjs', - sourcemap: true, - }, - plugins: [ - json(), - babel( - Object.assign( - getBabelConfigs({ - transformRuntime, - }), - { - exclude: 'node_modules/**', - } - ) - ), - commonjs({ - include: ['proto/**'], - }), - ], -}); - -export const browser = { - input: INPUT_FILE, - output: { - file: 'dist/im-browser.js', - format: 'umd', - name: 'AV', - extend: true, - amd: { - id: 'leancloud-realtime', - }, - sourcemap: true, - }, - plugins: createRollupPluginsOptions({ - browser: true, - }), -}; - -const weappRuntimeReset = () => ({ - intro() { - return 'global.Object=Object;function Function(){return function(){}};'; - }, -}); - -export const weapp = { - input: INPUT_FILE, - output: { - file: 'dist/im-weapp.js', - format: 'umd', - name: 'AV', - extend: true, - amd: { - id: 'leancloud-realtime', - }, - sourcemap: true, - }, - plugins: [ - ...createRollupPluginsOptions({ - browser: true, - customResolveOptions: { - aliasFields: ['weapp', 'browser'], - }, - }), - weappRuntimeReset(), - ], -}; - export const withMinified = config => ({ ...config, output: [ @@ -146,7 +76,7 @@ export const withMinified = config => ({ { ...config.output, file: config.output.file.replace(/\.js$/, '.min.js'), - plugins: [uglify()], + plugins: [terser()], }, ], }); diff --git a/script/validate-es5.js b/script/validate-es5.js index 67e358084..e751a3051 100755 --- a/script/validate-es5.js +++ b/script/validate-es5.js @@ -8,6 +8,9 @@ const espree = require('espree'); './plugins/webrtc/dist/webrtc.js', './plugins/groupchat-receipts/dist/groupchat-receipts.js', './plugins/live-query/dist/live-query.js', + './dist/core.js', + './dist/im.js', + './dist/im-node.js', './dist/im-browser.js', './dist/im-weapp.js', ].forEach(file => {