Skip to content

Instantly share code, notes, and snippets.

@jameswomack
Created October 13, 2016 19:40
Show Gist options
  • Save jameswomack/d180b0ce0d258531dde487b3a6459be9 to your computer and use it in GitHub Desktop.
Save jameswomack/d180b0ce0d258531dde487b3a6459be9 to your computer and use it in GitHub Desktop.
Building an npm update string generator
function makeObjectIterable (foo) {
foo[Symbol.iterator] = function* () {
yield* Object.keys(foo).map(function (name) {
return [name, foo[name]]
})
}
return foo
}
const outdatedPackages = makeObjectIterable({
"abacus-filter-panel-component": {
"current": "1.0.12",
"wanted": "1.0.12",
"latest": "1.7.0",
"location": "node_modules/abacus-filter-panel-component"
},
"abacus-meechum-plugin": {
"current": "2.0.0-alpha.9",
"wanted": "2.0.0-alpha.9",
"latest": "2.0.0",
"location": "node_modules/abacus-meechum-plugin"
},
"abacus-notes-component": {
"current": "1.0.0",
"wanted": "1.0.0",
"latest": "1.1.0",
"location": "node_modules/abacus-notes-component"
},
"abacus-promise-dispatcher": {
"current": "1.1.0",
"wanted": "1.1.0",
"latest": "2.0.0-alpha.21",
"location": "node_modules/abacus-promise-dispatcher"
},
"abacus-request": {
"current": "2.0.0-alpha.8",
"wanted": "2.0.0-alpha.8",
"latest": "2.0.3",
"location": "node_modules/abacus-request"
},
"alloyeditor": {
"current": "1.0.1",
"wanted": "1.0.1",
"latest": "1.2.4",
"location": "node_modules/alloyeditor"
},
"async": {
"current": "0.9.2",
"wanted": "0.9.2",
"latest": "2.1.1",
"location": "node_modules/async"
},
"babel-cli": {
"current": "6.4.0",
"wanted": "6.4.0",
"latest": "6.16.0",
"location": "node_modules/babel-cli"
},
"babel-core": {
"current": "6.11.4",
"wanted": "6.11.4",
"latest": "6.17.0",
"location": "node_modules/babel-core"
},
"babel-eslint": {
"current": "6.0.4",
"wanted": "6.0.4",
"latest": "7.0.0",
"location": "node_modules/babel-eslint"
},
"babel-loader": {
"current": "6.2.1",
"wanted": "6.2.1",
"latest": "6.2.5",
"location": "node_modules/babel-loader"
},
"babel-plugin-add-module-exports": {
"current": "0.1.2",
"wanted": "0.1.2",
"latest": "0.2.1",
"location": "node_modules/babel-plugin-add-module-exports"
},
"babel-plugin-react-transform": {
"current": "2.0.0-beta1",
"wanted": "2.0.0-beta1",
"latest": "2.0.2",
"location": "node_modules/babel-plugin-react-transform"
},
"babel-plugin-rewire": {
"current": "1.0.0-rc-4",
"wanted": "1.0.0-rc-4",
"latest": "1.0.0",
"location": "node_modules/babel-plugin-rewire"
},
"babel-plugin-transform-object-assign": {
"current": "6.3.13",
"wanted": "6.3.13",
"latest": "6.8.0",
"location": "node_modules/babel-plugin-transform-object-assign"
},
"babel-plugin-transform-react-remove-prop-types": {
"current": "0.2.3",
"wanted": "0.2.3",
"latest": "0.2.9",
"location": "node_modules/babel-plugin-transform-react-remove-prop-types"
},
"babel-preset-es2015": {
"current": "6.3.13",
"wanted": "6.3.13",
"latest": "6.16.0",
"location": "node_modules/babel-preset-es2015"
},
"babel-preset-react": {
"current": "6.3.13",
"wanted": "6.3.13",
"latest": "6.16.0",
"location": "node_modules/babel-preset-react"
},
"body-parser": {
"current": "1.13.2",
"wanted": "1.13.2",
"latest": "1.15.2",
"location": "node_modules/body-parser"
},
"cassandra-driver": {
"current": "3.0.0",
"wanted": "3.0.0",
"latest": "3.1.5",
"location": "node_modules/cassandra-driver"
},
"classnames": {
"current": "2.1.3",
"wanted": "2.1.3",
"latest": "2.2.5",
"location": "node_modules/classnames"
},
"compression": {
"current": "1.6.1",
"wanted": "1.6.1",
"latest": "1.6.2",
"location": "node_modules/compression"
},
"config": {
"current": "1.17.1",
"wanted": "1.17.1",
"latest": "1.21.0",
"location": "node_modules/config"
},
"css-loader": {
"current": "0.19.0",
"wanted": "0.19.0",
"latest": "0.25.0",
"location": "node_modules/css-loader"
},
"d3": {
"current": "3.5.5",
"wanted": "3.5.5",
"latest": "4.2.7",
"location": "node_modules/d3"
},
"d3-svg-legend": {
"current": "1.5.0",
"wanted": "1.5.0",
"latest": "2.10.0",
"location": "node_modules/d3-svg-legend"
},
"druid-query": {
"current": "1.0.0",
"wanted": "1.0.0",
"latest": "2.0.0",
"location": "node_modules/druid-query"
},
"enzyme": {
"current": "2.2.0",
"wanted": "2.2.0",
"latest": "2.4.1",
"location": "node_modules/enzyme"
},
"eslint": {
"current": "2.11.1",
"wanted": "2.11.1",
"latest": "3.7.1",
"location": "node_modules/eslint"
},
"eslint-config-netflix-dea": {
"current": "2.0.0",
"wanted": "2.0.0",
"latest": "2.0.5",
"location": "node_modules/eslint-config-netflix-dea"
},
"eslint-loader": {
"current": "1.3.0",
"wanted": "1.3.0",
"latest": "1.5.0",
"location": "node_modules/eslint-loader"
},
"eslint-plugin-react": {
"current": "3.13.1",
"wanted": "3.13.1",
"latest": "6.4.1",
"location": "node_modules/eslint-plugin-react"
},
"express": {
"current": "4.13.4",
"wanted": "4.13.4",
"latest": "4.14.0",
"location": "node_modules/express"
},
"express-mysql-session": {
"current": "1.0.0-rc.0",
"wanted": "1.0.0-rc.0",
"latest": "1.2.0",
"location": "node_modules/express-mysql-session"
},
"express-session": {
"current": "1.13.0",
"wanted": "1.13.0",
"latest": "1.14.1",
"location": "node_modules/express-session"
},
"frontail": {
"current": "3.0.0",
"wanted": "3.0.0",
"latest": "4.0.1",
"location": "node_modules/frontail"
},
"i": {
"current": "0.3.4",
"wanted": "0.3.4",
"latest": "0.3.5",
"location": "node_modules/i"
},
"immutable": {
"current": "3.7.5",
"wanted": "3.7.5",
"latest": "3.8.1",
"location": "node_modules/immutable"
},
"isomorphic-fetch": {
"current": "2.1.1",
"wanted": "2.1.1",
"latest": "2.2.1",
"location": "node_modules/isomorphic-fetch"
},
"istanbul": {
"current": "1.1.0-alpha.1",
"wanted": "1.1.0-alpha.1",
"latest": "0.4.5",
"location": "node_modules/istanbul"
},
"jsdom": {
"current": "7.2.2",
"wanted": "7.2.2",
"latest": "9.6.0",
"location": "node_modules/jsdom"
},
"lodash": {
"current": "3.10.1",
"wanted": "3.10.1",
"latest": "4.16.4",
"location": "node_modules/lodash"
},
"lodash.merge": {
"current": "4.3.4",
"wanted": "4.3.4",
"latest": "4.6.0",
"location": "node_modules/lodash.merge"
},
"memoizee": {
"current": "0.4.0",
"wanted": "0.4.0",
"latest": "0.4.1",
"location": "node_modules/memoizee"
},
"minilog": {
"current": "3.0.0",
"wanted": "3.0.0",
"latest": "3.0.1",
"location": "node_modules/minilog"
},
"moment": {
"current": "2.10.6",
"wanted": "2.10.6",
"latest": "2.15.1",
"location": "node_modules/moment"
},
"morgan": {
"current": "1.6.1",
"wanted": "1.6.1",
"latest": "1.7.0",
"location": "node_modules/morgan"
},
"mysql": {
"current": "2.9.0",
"wanted": "2.9.0",
"latest": "2.11.1",
"location": "node_modules/mysql"
},
"nf-atlas-client": {
"current": "2.1.0",
"wanted": "2.1.0",
"latest": "2.4.1",
"location": "node_modules/nf-atlas-client"
},
"node-cache": {
"current": "2.1.1",
"wanted": "2.1.1",
"latest": "4.1.0",
"location": "node_modules/node-cache"
},
"node-uuid": {
"current": "1.4.3",
"wanted": "1.4.3",
"latest": "1.4.7",
"location": "node_modules/node-uuid"
},
"nodemon": {
"current": "1.8.1",
"wanted": "1.8.1",
"latest": "1.11.0",
"location": "node_modules/nodemon"
},
"pg": {
"current": "4.4.3",
"wanted": "4.4.3",
"latest": "6.1.0",
"location": "node_modules/pg"
},
"react": {
"current": "0.14.7",
"wanted": "0.14.7",
"latest": "15.3.2",
"location": "node_modules/react"
},
"react-addons-create-fragment": {
"current": "0.14.7",
"wanted": "0.14.7",
"latest": "15.3.2",
"location": "node_modules/react-addons-create-fragment"
},
"react-addons-perf": {
"current": "0.14.1",
"wanted": "0.14.1",
"latest": "15.3.2",
"location": "node_modules/react-addons-perf"
},
"react-addons-test-utils": {
"current": "0.14.7",
"wanted": "0.14.7",
"latest": "15.3.2",
"location": "node_modules/react-addons-test-utils"
},
"react-bootstrap": {
"current": "0.27.3",
"wanted": "0.27.3",
"latest": "0.30.5",
"location": "node_modules/react-bootstrap"
},
"react-dnd": {
"current": "2.0.2",
"wanted": "2.0.2",
"latest": "2.1.4",
"location": "node_modules/react-dnd"
},
"react-dnd-html5-backend": {
"current": "2.0.0",
"wanted": "2.0.0",
"latest": "2.1.2",
"location": "node_modules/react-dnd-html5-backend"
},
"react-dom": {
"current": "0.14.7",
"wanted": "0.14.7",
"latest": "15.3.2",
"location": "node_modules/react-dom"
},
"react-json-pretty": {
"current": "1.2.0",
"wanted": "1.2.0",
"latest": "1.2.1",
"location": "node_modules/react-json-pretty"
},
"react-redux": {
"current": "3.0.0",
"wanted": "3.0.0",
"latest": "4.4.5",
"location": "node_modules/react-redux"
},
"react-select": {
"current": "0.7.0",
"wanted": "git",
"latest": "git",
"location": "node_modules/react-select"
},
"react-transform-catch-errors": {
"current": "1.0.1",
"wanted": "1.0.1",
"latest": "1.0.2",
"location": "node_modules/react-transform-catch-errors"
},
"react-transform-hmr": {
"current": "1.0.1",
"wanted": "1.0.1",
"latest": "1.0.4",
"location": "node_modules/react-transform-hmr"
},
"redux": {
"current": "3.0.0",
"wanted": "3.0.0",
"latest": "3.6.0",
"location": "node_modules/redux"
},
"redux-immutablejs": {
"current": "0.0.6",
"wanted": "0.0.6",
"latest": "0.0.8",
"location": "node_modules/redux-immutablejs"
},
"redux-logger": {
"current": "1.0.9",
"wanted": "1.0.9",
"latest": "2.7.0",
"location": "node_modules/redux-logger"
},
"redux-thunk": {
"current": "1.0.0",
"wanted": "1.0.0",
"latest": "2.1.0",
"location": "node_modules/redux-thunk"
},
"request": {
"current": "2.58.0",
"wanted": "2.58.0",
"latest": "2.75.0",
"location": "node_modules/request"
},
"request-promise": {
"current": "0.4.2",
"wanted": "0.4.2",
"latest": "4.1.1",
"location": "node_modules/request-promise"
},
"rewire": {
"current": "2.5.1",
"wanted": "2.5.1",
"latest": "2.5.2",
"location": "node_modules/rewire"
},
"serve-static": {
"current": "1.10.2",
"wanted": "1.10.2",
"latest": "1.11.1",
"location": "node_modules/serve-static"
},
"sinon": {
"current": "1.17.2",
"wanted": "1.17.2",
"latest": "1.17.6",
"location": "node_modules/sinon"
},
"style-loader": {
"current": "0.12.4",
"wanted": "0.12.4",
"latest": "0.13.1",
"location": "node_modules/style-loader"
},
"superagent": {
"current": "1.2.0",
"wanted": "1.2.0",
"latest": "2.3.0",
"location": "node_modules/superagent"
},
"tap-difflet": {
"current": "0.4.0",
"wanted": "0.4.0",
"latest": "0.7.0",
"location": "node_modules/tap-difflet"
},
"tape": {
"current": "4.6.0",
"wanted": "4.6.0",
"latest": "4.6.2",
"location": "node_modules/tape"
},
"verror": {
"current": "1.6.1",
"wanted": "1.6.1",
"latest": "1.8.1",
"location": "node_modules/verror"
},
"webpack": {
"current": "1.13.0",
"wanted": "1.13.0",
"latest": "1.13.2",
"location": "node_modules/webpack"
},
"webpack-dev-middleware": {
"current": "1.4.0",
"wanted": "1.4.0",
"latest": "1.8.4",
"location": "node_modules/webpack-dev-middleware"
},
"webpack-hot-middleware": {
"current": "2.6.0",
"wanted": "2.6.0",
"latest": "2.13.0",
"location": "node_modules/webpack-hot-middleware"
}
})
function getVersionParts (semanticVersion : string) {
const [ major, minor, patch ] = semanticVersion.split('.')
return { major, minor, patch }
}
const packageNamesToUpdate = [ ]
for (const [packageName, packageInfo] of outdatedPackages) {
const { wanted, latest } = packageInfo
const wantedVersionParts = getVersionParts(wanted)
const latestVersionParts = getVersionParts(latest)
if (latestVersionParts.major === wantedVersionParts.major)
packageNamesToUpdate.push(packageName)
}
// packageNamesToUpdate.map(addLatestToPackageName)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment