// latest versions from canjs/canjs 3.8.2 package.json const canjsCanjsDeps = { "can-cid": "1.0.3", "can-component": "3.0.7", "can-compute": "3.0.10", "can-connect": "1.3.11", "can-connect-feathers": "3.5.5", "can-connect-cloneable": "0.1.3", "can-connect-signalr": "0.1.0", "can-construct": "3.1.1", "can-construct-super": "3.0.3", "can-control": "3.0.10", "can-define": "1.0.26", "can-define-stream": "0.1.1", "can-define-stream-kefir": "0.0.9", "can-define-validate-validatejs": "0.0.5", "can-deparam": "1.0.1", "can-ejs": "3.0.7", "can-event": "3.4.0", "can-fixture": "1.0.14", "can-fixture-socket": "0.6.2", "can-jquery": "3.0.7", "can-list": "3.0.5", "can-map": "3.0.7", "can-map-backup": "3.0.3", "can-map-define": "3.0.9", "can-namespace": "1.0.0", "can-observation": "3.1.5", "can-param": "1.0.1", "can-route": "3.0.11", "can-route-pushstate": "3.0.3", "can-set": "1.2.0", "can-simple-dom": "1.0.8", "can-simple-map": "3.1.4", "can-stache": "3.0.24", "can-stache-bindings": "3.1.5", "can-stache-converters": "3.1.0", "can-stream": "0.2.3", "can-stream-kefir": "0.2.3", "can-types": "1.0.4", "can-util": "3.7.0", "can-validate": "1.0.2", "can-validate-legacy": "1.0.2", "can-validate-validatejs": "0.0.6", "can-vdom": "3.0.3", "can-view-autorender": "3.0.4", "can-view-callbacks": "3.0.6", "can-view-href": "3.0.4", "can-view-import": "3.0.7", "can-view-live": "3.0.7", "can-view-model": "3.1.3", "can-view-nodelist": "3.0.4", "can-view-parser": "3.1.0", "can-view-scope": "3.1.4", "can-view-target": "3.0.7", "can-zone": "0.6.7", "steal-stache": "3.0.7" }; // these depend on can-types, so must be updated in order to avoid // "cannot have two versions of can-types" errors const requiredDeps = [ "can-component", "can-compute", "can-connect", "can-construct", "can-control", "can-define", "can-event", "can-event-radiochange", "can-list", "can-make-rest", "can-map", "can-map-define", "can-observation", "can-reflect", "can-route", "can-route-pushstate", "can-set", "can-simple-map", "can-stache", "can-stache-bindings", "can-symbol", "can-types", "can-util", "can-vdom", "can-view-autorender", "can-view-callbacks", "can-view-href", "can-view-import", "can-view-live", "can-view-model", "can-view-nodelist", "can-view-parser", "can-view-scope", "can-view-target", "steal-stache" ]; function updateVersions(deps) { const newDeps = {}; Object.keys(deps).forEach((dep) => { // if dep exists in canjsDeps, set it to that version // otherwise, keep existing version newDeps[dep] = canjsCanjsDeps[dep] || deps[dep]; }); return newDeps; } function addMissingRequiredDependencies(deps) { const newDeps = Object.assign({}, deps); // make sure all required deps are added requiredDeps.forEach((dep) => { newDeps[dep] = canjsCanjsDeps[dep]; }); return newDeps; } module.exports = function transformer(file, api) { let src = file.source; try { src = JSON.parse(src); src.dependencies = updateVersions(src.dependencies); src.devDependencies = updateVersions(src.devDependencies); src.dependencies = addMissingRequiredDependencies(src.dependencies); // print result with 2-space indentation src = JSON.stringify(src, null, 2) + '\n'; } catch(e) { console.error(e); } return src; };