├── .eslintrc ├── bin ├── postpublish ├── prepublish ├── pretest └── test └── package.json /.eslintrc: -------------------------------------------------------------------------------- 1 | parserOptions: 2 | sourceType: module 3 | 4 | env: 5 | browser: true 6 | 7 | extends: 8 | "eslint:recommended" 9 | -------------------------------------------------------------------------------- /bin/postpublish: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # git push && git push --tags && zip -j build/d3-timer.zip -- LICENSE README.md build/d3-timer.js build/d3-timer.min.js 4 | -------------------------------------------------------------------------------- /bin/prepublish: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | // TODO Run the test script before prepublishing. 4 | // TODO Consolidate preamble code. 5 | 6 | var fs = require("fs"), 7 | path = require("path"), 8 | uglify = require("uglify-js"); 9 | 10 | var cwd = process.cwd(), 11 | build = path.join(cwd, "build"), 12 | package = require(path.join(cwd, "package.json")), 13 | name = package.name; 14 | 15 | var preamble = "// " + (package.homepage || package.name) 16 | + " Version " + package.version + "." 17 | + " Copyright " + (new Date).getFullYear() 18 | + " " + package.author.name + (/\.$/.test(package.author.name) ? "" : "."); 19 | 20 | console.warn(`uglify: build/${name}.js ↦ build/${name}.min.js`); 21 | 22 | var result = uglify.minify(fs.readFileSync(path.join(cwd, "build", `${name}.js`), "utf8"), { 23 | output: { 24 | beautify: false, 25 | preamble: preamble 26 | } 27 | }); 28 | 29 | if (result.error) throw result.error; 30 | 31 | fs.writeFileSync(path.join(cwd, "build", `${name}.min.js`), result.code, "utf8"); 32 | -------------------------------------------------------------------------------- /bin/pretest: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | // TODO Consolidate preamble code. 4 | 5 | var fs = require("fs"), 6 | path = require("path"), 7 | rimraf = require("rimraf"), 8 | rollup = require("rollup"); 9 | 10 | var cwd = process.cwd(), 11 | build = path.join(cwd, "build"), 12 | package = require(path.join(cwd, "package.json")), 13 | name = package.name, 14 | dependencies = package.dependencies || {}, 15 | globals = {}; 16 | 17 | var preamble = "// " + (package.homepage || package.name) 18 | + " Version " + package.version + "." 19 | + " Copyright " + (new Date).getFullYear() 20 | + " " + package.author.name + (/\.$/.test(package.author.name) ? "" : "."); 21 | 22 | for (var key in dependencies) { 23 | if (/^d3-/.test(key)) { 24 | globals[key] = "d3"; 25 | } 26 | } 27 | 28 | rimraf.sync(build); 29 | fs.mkdirSync(build); 30 | 31 | console.warn(`rollup: index.js ↦ build/${name}.js`); 32 | 33 | rollup.rollup({ 34 | input: "index.js", 35 | external: Object.keys(globals) 36 | }).then(function(bundle) { 37 | return bundle.generate({ 38 | banner: preamble, 39 | globals: globals, 40 | extend: true, 41 | format: "umd", 42 | name: "d3" 43 | }); 44 | }).then(function(bundle) { 45 | return new Promise(function(resolve, reject) { 46 | fs.writeFile(path.join("build", `${name}.js`), bundle.code, "utf8", function(error) { 47 | if (error) return reject(error); 48 | else resolve(); 49 | }); 50 | }); 51 | }).catch(function(error) { 52 | console.error(error.stack); 53 | }); 54 | -------------------------------------------------------------------------------- /bin/test: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | var path = require("path"), 4 | fs = require("fs"), 5 | glob = require("glob"), 6 | tape = require("tape"), 7 | eslint = require("eslint"), 8 | module = require("module"), 9 | module_load = module._load; 10 | 11 | var cwd = process.cwd(); 12 | 13 | module._load = function(request, parent) { 14 | return request === "tape" ? tape : module_load.apply(this, arguments); 15 | }; 16 | 17 | console.warn(`eslint: index.js src/`); 18 | 19 | var cli = new eslint.CLIEngine({configFile: path.resolve(__dirname, "../.eslintrc"), useEslintrc: false}), 20 | format = cli.getFormatter(), 21 | report = cli.executeOnFiles(["index.js", "src/"]); 22 | 23 | if (report.results.some(result => result.errorCount > 0)) { 24 | console.log(format(report.results)); 25 | process.exit(1); 26 | } 27 | 28 | console.warn(`tape: test/**/*-test.js`); 29 | 30 | glob.sync("test/**/*-test.js").forEach(function(file) { 31 | require(path.join(cwd, file)); 32 | }); 33 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "d3-scripts", 3 | "version": "0.0.0", 4 | "description": "Common scripts for D3 modules.", 5 | "keywords": [ 6 | "d3" 7 | ], 8 | "homepage": "https://github.com/d3/d3-scripts", 9 | "license": "BSD-3-Clause", 10 | "author": { 11 | "name": "Mike Bostock", 12 | "url": "https://bost.ocks.org/mike" 13 | }, 14 | "repository": { 15 | "type": "git", 16 | "url": "https://github.com/d3/d3-scripts.git" 17 | }, 18 | "bin": { 19 | "d3-pretest": "bin/pretest", 20 | "d3-test": "bin/test", 21 | "d3-prepublish": "bin/prepublish", 22 | "d3-postpublish": "bin/postpublish" 23 | }, 24 | "dependencies": { 25 | "eslint": "4", 26 | "rimraf": "2", 27 | "rollup": "0.49", 28 | "tape": "4", 29 | "uglify-js": "3" 30 | } 31 | } 32 | --------------------------------------------------------------------------------