diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index f134b29..0000000 --- a/.eslintrc +++ /dev/null @@ -1,11 +0,0 @@ -parserOptions: - sourceType: "module" - -env: - es6: true - browser: true - -extends: - "plugin:prettier/recommended" - - \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..9b8c36f --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,12 @@ +{ + "extends": "plugin:prettier/recommended", + "parserOptions": { + "sourceType": "module", + "ecmaVersion": 2018 + }, + "env": { + "es6": true, + "node": true, + "browser": true + } +} diff --git a/index.js b/index.js deleted file mode 100644 index 027aa44..0000000 --- a/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default as tubeMap } from './src/map'; diff --git a/package-lock.json b/package-lock.json index 5271f96..67e9647 100644 --- a/package-lock.json +++ b/package-lock.json @@ -188,6 +188,12 @@ "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "dev": true }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -917,6 +923,12 @@ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", "dev": true }, + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + }, "esutils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", @@ -1392,6 +1404,27 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true }, + "jest-worker": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", + "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", + "dev": true, + "requires": { + "merge-stream": "^2.0.0", + "supports-color": "^6.1.0" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -1506,6 +1539,12 @@ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", "dev": true }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, "mime-db": { "version": "1.43.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", @@ -1889,6 +1928,28 @@ "fsevents": "~2.1.2" } }, + "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.5.5", + "jest-worker": "^24.9.0", + "rollup-pluginutils": "^2.8.2", + "serialize-javascript": "^2.1.2", + "terser": "^4.6.2" + } + }, + "rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dev": true, + "requires": { + "estree-walker": "^0.6.1" + } + }, "run-async": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", @@ -1938,6 +1999,12 @@ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, + "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 + }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -1994,6 +2061,16 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "sprintf-js": { "version": "1.0.3", "resolved": "http://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -2220,6 +2297,17 @@ } } }, + "terser": { + "version": "4.6.13", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.13.tgz", + "integrity": "sha512-wMvqukYgVpQlymbnNbabVZbtM6PN63AzqexpwJL8tbh/mRT9LE5o+ruVduAGL7D6Fpjl+Q+06U5I9Ul82odAhw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + } + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", diff --git a/package.json b/package.json index 36d2289..2ee77ca 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "d3-tube-map", - "version": "1.2.1", + "version": "1.2.2", "description": "Draw tube maps in the style of the London Underground", "keywords": [ "d3", @@ -9,30 +9,34 @@ "map", "visualization" ], - "homepage": "http://www.pubmap.co.uk/", + "homepage": "https://github.com/johnwalley/d3-tube-map/", "license": "BSD-3-Clause", "author": { "name": "John Walley", "url": "http://www.walley.org.uk/" }, "main": "dist/d3-tube-map.js", - "module": "index.js", + "unpkg": "dist/d3-tube.min.js", + "jsdelivr": "dist/d3-tube.min.js", + "module": "src/index.js", "files": [ - "dist/*.js" + "dist/**/*.js", + "src/**/*.js" ], "repository": { "type": "git", "url": "https://github.com/johnwalley/d3-tube-map.git" }, "scripts": { - "pretest": "rm -rf dist && mkdir dist && rollup -c --banner \"$(preamble)\"", - "test": "tape 'test/**/*-test.js' && eslint index.js src", - "prepublishOnly": "npm run test && uglifyjs -b beautify=false,preamble=\"'$(preamble)'\" dist/d3-tube-map.js -c -m -o dist/d3-tube-map.min.js", + "pretest": "rm -rf dist && mkdir dist && rollup -c", + "test": "tape 'test/**/*-test.js' && eslint src", + "prepublishOnly": "npm run test", "postpublish": "zip -j dist/d3-tube-map.zip -- LICENSE README.md dist/d3-tube-map.js dist/d3-tube-map.min.js" }, "dependencies": { "d3": "5" }, + "sideEffects": false, "devDependencies": { "eslint": "6.8.0", "eslint-config-prettier": "6.10.0", @@ -41,6 +45,7 @@ "package-preamble": "0.1.0", "prettier": "1.19.1", "rollup": "2.7.6", + "rollup-plugin-terser": "5", "tape": "5.0.0", "uglify-js": "3.8.0" } diff --git a/rollup.config.js b/rollup.config.js index 0615b1c..8d03d7b 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,14 +1,39 @@ -const definition = require('./package.json'); -const dependencies = Object.keys(definition.dependencies); +import { terser } from 'rollup-plugin-terser'; +import * as meta from './package.json'; -export default { - input: 'index', +const dependencies = Object.keys(meta.dependencies); + +const config = { + input: 'src/index.js', external: dependencies, output: { extend: true, - file: `dist/${definition.name}.js`, + file: `dist/${meta.name}.js`, format: 'umd', globals: dependencies.reduce((p, v) => ((p[v] = 'd3'), p), {}), name: 'd3', + banner: `// ${meta.homepage} v${ + meta.version + } Copyright ${new Date().getFullYear()} ${meta.author.name}`, }, + plugins: [], }; + +export default [ + config, + { + ...config, + output: { + ...config.output, + file: `dist/${meta.name}.min.js`, + }, + plugins: [ + ...config.plugins, + terser({ + output: { + preamble: config.output.banner, + }, + }), + ], + }, +]; diff --git a/src/index.js b/src/index.js new file mode 100644 index 0000000..bd22959 --- /dev/null +++ b/src/index.js @@ -0,0 +1 @@ +export { default as tubeMap } from './map'; diff --git a/test/map-test.js b/test/map-test.js index dce79dc..0b1bc69 100644 --- a/test/map-test.js +++ b/test/map-test.js @@ -20,8 +20,7 @@ tape('map(selection) produces the expected result', function(test) { fs.readFileSync(path.join(__dirname, 'map.json'), 'utf8') ); - d3 - .select(bodyActual) + d3.select(bodyActual) .select('div') .datum(data) .call(d3.tubeMap());