diff --git a/package-lock.json b/package-lock.json index a8688fb297..05f05bd830 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,18 +14,18 @@ } }, "@babel/core": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.2.0.tgz", - "integrity": "sha512-7pvAdC4B+iKjFFp9Ztj0QgBndJ++qaMeonT185wAqUnhipw8idm9Rv1UMyBuKtYjfl6ORNkgEgcsYLfHX/GpLw==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.2.2.tgz", + "integrity": "sha512-59vB0RWt09cAct5EIe58+NzGP4TFSD3Bz//2/ELy3ZeTeKF6VTD1AXlH8BGGbCX0PuobZBsIzO7IAI9PH67eKw==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.2.0", + "@babel/generator": "^7.2.2", "@babel/helpers": "^7.2.0", - "@babel/parser": "^7.2.0", - "@babel/template": "^7.1.2", - "@babel/traverse": "^7.1.6", - "@babel/types": "^7.2.0", + "@babel/parser": "^7.2.2", + "@babel/template": "^7.2.2", + "@babel/traverse": "^7.2.2", + "@babel/types": "^7.2.2", "convert-source-map": "^1.1.0", "debug": "^4.1.0", "json5": "^2.1.0", @@ -35,15 +35,85 @@ "source-map": "^0.5.0" }, "dependencies": { + "@babel/generator": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.2.2.tgz", + "integrity": "sha512-I4o675J/iS8k+P38dvJ3IBGqObLXyQLTxtrR4u9cSUJOURvafeEWb/pFMOTwtNrmq73mJzyF6ueTbO1BtN0Zeg==", + "dev": true, + "requires": { + "@babel/types": "^7.2.2", + "jsesc": "^2.5.1", + "lodash": "^4.17.10", + "source-map": "^0.5.0", + "trim-right": "^1.0.1" + } + }, + "@babel/parser": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.2.3.tgz", + "integrity": "sha512-0LyEcVlfCoFmci8mXx8A5oIkpkOgyo8dRHtxBnK9RRBwxO2+JZPNsqtVEZQ7mJFPxnXF9lfmU24mHOPI0qnlkA==", + "dev": true + }, + "@babel/template": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz", + "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.2.2", + "@babel/types": "^7.2.2" + } + }, + "@babel/traverse": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.2.3.tgz", + "integrity": "sha512-Z31oUD/fJvEWVR0lNZtfgvVt512ForCTNKYcJBGbPb1QZfve4WGH8Wsy7+Mev33/45fhP/hwQtvgusNdcCMgSw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/generator": "^7.2.2", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.0.0", + "@babel/parser": "^7.2.3", + "@babel/types": "^7.2.2", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.10" + } + }, + "@babel/types": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.2.2.tgz", + "integrity": "sha512-fKCuD6UFUMkR541eDWL+2ih/xFZBXPOg/7EQFeTluMDebfqR4jrpaCjLhkWlQS4hT6nRa2PMEgXKbRB5/H2fpg==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.10", + "to-fast-properties": "^2.0.0" + } + }, "debug": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz", - "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { "ms": "^2.1.1" } }, + "globals": { + "version": "11.9.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.9.0.tgz", + "integrity": "sha512-5cJVtyXWH8PiJPVLZzzoIizXx944O4OmRro5MWKx5fT4MgcN7OfaMutPeaTdJCCURwbWdhhcCWcKIffPnmTzBg==", + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, "json5": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", @@ -70,6 +140,12 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true } } }, @@ -282,15 +358,16 @@ } }, "@marko/migrate": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@marko/migrate/-/migrate-1.2.0.tgz", - "integrity": "sha512-UbzOgxhJJBhfW2Y5xozJgqWBsZUqcunQFq689DZlMerlKxpTNhsQprQghPS4YWTay4BLRhGEgbDHczhwxt5vag==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@marko/migrate/-/migrate-3.0.0.tgz", + "integrity": "sha512-ASEkBFV3yo2PX80XbzZ2CfoP+OVfVu6MHYG4mWIq6K+IjB9sXETPrAwnqZwtOfZbRt9j6OtO0q615QGCaDtQeQ==", "dev": true, "requires": { "@babel/runtime": "^7.2.0", - "@marko/migrate-v3-widget": "^1.0.1", - "@marko/prettyprint": "^1.2.0", + "@marko/migrate-v3-widget": "^1.0.7", + "@marko/prettyprint": "^1.3.0", "argly": "^1.2.0", + "dependent-path-update": "^0.1.1", "enquirer": "^2.1.1", "glob": "^7.1.3", "lasso-package-root": "^1.0.1", @@ -307,9 +384,9 @@ } }, "@marko/migrate-v3-widget": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@marko/migrate-v3-widget/-/migrate-v3-widget-1.0.3.tgz", - "integrity": "sha512-rJWW/X/ZeiZ6TGfFZKNOdjN7gONZAVUDxIt/ubdrxs19NXgHem4+b9nsLkxd8Mxt3abR1Mle+Ba6SLoMF8WJtw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@marko/migrate-v3-widget/-/migrate-v3-widget-1.0.7.tgz", + "integrity": "sha512-cHlclLsjipryNxx9HSpuP/kAtEQVDslrfwdk1Ikp/oiDjkh5AmPFVcYarsUuKVrqXSTZ3+cTRJHVSJgQLvlUeQ==", "dev": true, "requires": { "@babel/core": "^7.1.5", @@ -320,15 +397,15 @@ } }, "@marko/prettyprint": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@marko/prettyprint/-/prettyprint-1.2.0.tgz", - "integrity": "sha512-YXm5nW0koZ36cXkmlJyG9WMfMK0NkjzE3H6Svz/01vCwMMtuj2zDcYvJm3V1ql0bW0Nwc960zOB5raN3kKVrBQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@marko/prettyprint/-/prettyprint-1.3.0.tgz", + "integrity": "sha512-5tmt/nAeI7cl3KhahXpRLO+kvvHjAp+8+aY4o38cRgyOQaleIK3c1js1KI0EFYk1EUzpHdMMTun3yDebJMAaJg==", "dev": true, "requires": { "argly": "^1.2.0", "editorconfig": "^0.15.2", "lasso-package-root": "^1.0.1", - "marko": "^4.14.3", + "marko": "^4.14.12", "minimatch": "^3.0.4", "prettier": "^1.15.3", "redent": "^2.0.0", @@ -363,9 +440,9 @@ } }, "@types/node": { - "version": "10.12.15", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.15.tgz", - "integrity": "sha512-9kROxduaN98QghwwHmxXO2Xz3MaWf+I1sLVAA6KJDF5xix+IyXVhds0MAfdNwtcpSrzhaTsNB0/jnL86fgUhqA==", + "version": "10.12.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.18.tgz", + "integrity": "sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ==", "dev": true }, "@types/semver": { @@ -1689,6 +1766,18 @@ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true }, + "dependent-path-update": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dependent-path-update/-/dependent-path-update-0.1.1.tgz", + "integrity": "sha512-KVDBBXPCjAi7unPTPHryiQm1OJtYtpz/HFiIWKNN22eY7ufvkX/riZOTPPNQ4XZZOYenVriL4KnqMSBM8hd+kw==", + "dev": true, + "requires": { + "argly": "^1.2.0", + "escape-string-regexp": "^1.0.5", + "glob": "^7.1.3", + "mz": "^2.7.0" + } + }, "deresolve": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/deresolve/-/deresolve-1.1.2.tgz", @@ -1840,9 +1929,9 @@ "dev": true }, "enquirer": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.1.1.tgz", - "integrity": "sha512-Ky4Uo7q/dY9jSJIDkPf+y5nM+9F4ESINZaWJSSJbJqOVY15kVXIa/goQR6XmHNcS/MQ38wZT/N2+1pBwQeC2wQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.0.tgz", + "integrity": "sha512-RNGUbRVlfnjmpxV+Ed+7CGu0rg3MK7MmlW+DW0v7V2zdAUBC1s4BxCRiIAozbYB2UJ+q4D+8tW9UFb11kF72/g==", "dev": true, "requires": { "ansi-colors": "^3.2.1" @@ -4368,14 +4457,15 @@ } }, "marko": { - "version": "4.14.4", - "resolved": "https://registry.npmjs.org/marko/-/marko-4.14.4.tgz", - "integrity": "sha512-GyIDRYWe9cPolvqEFSaGRmSGSzdcvL4L/s64AdBd1YMbTdhAT2vQzqkl23LpiFzc5r2FBB+kgvaK8carqlwTPw==", + "version": "4.14.12", + "resolved": "https://registry.npmjs.org/marko/-/marko-4.14.12.tgz", + "integrity": "sha512-BLG+A8HkgpPYIR8/gG7smQyvnbw4EhpjTo/3TvB2U8v85eayMvw4lhAS+bfOYvqpDp36g9ASq5WrQLbg3+3rRQ==", "dev": true, "requires": { "app-module-path": "^2.2.0", "argly": "^1.0.0", "browser-refresh-client": "^1.0.0", + "camelcase": "^5.0.0", "char-props": "~0.1.5", "complain": "^1.3.0", "deresolve": "^1.1.2", @@ -4403,15 +4493,7 @@ "simple-sha1": "^2.1.0", "strip-json-comments": "^2.0.1", "try-require": "^1.2.1", - "warp10": "^1.0.0" - }, - "dependencies": { - "warp10": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/warp10/-/warp10-1.3.6.tgz", - "integrity": "sha512-7cijX+NprqPV+UGUZXZw1I15JFHPqoy65tNVvP6cL43Vlanpcm8hBYoQTuDYUHa5x90Bct4gHhRtqqOOkLhQkw==", - "dev": true - } + "warp10": "^2.0.1" } }, "marko-widgets": { diff --git a/package.json b/package.json index 0988925488..78ae49e745 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,7 @@ "warp10": "^2.0.1" }, "devDependencies": { - "@marko/migrate": "^1.2.0", + "@marko/migrate": "^3.0.0", "babel-cli": "^6.24.1", "babel-core": "^6.24.1", "babel-plugin-minprops": "^2.0.1", diff --git a/src/taglibs/migrate/all-tags/w-bind.js b/src/taglibs/migrate/all-tags/w-bind.js index 6ac59b6a40..ce732eabef 100644 --- a/src/taglibs/migrate/all-tags/w-bind.js +++ b/src/taglibs/migrate/all-tags/w-bind.js @@ -83,7 +83,10 @@ module.exports = function migrate(el, context) { .then(shouldMigrate => { if (shouldMigrate) { el.removeAttribute("w-bind"); - return helpers.run("componentFile", componentModule); + return helpers.run("componentFile", { + templateFile: context.filename, + componentFile: componentModule.filename + }); } }); } diff --git a/test/migrate/fixtures/include-tag/snapshot-expected.marko b/test/migrate/fixtures/include-tag/snapshot-expected.marko index 0242d205cb..a2f6a76898 100644 --- a/test/migrate/fixtures/include-tag/snapshot-expected.marko +++ b/test/migrate/fixtures/include-tag/snapshot-expected.marko @@ -11,8 +11,8 @@ import ExampleE from "./example-e/index.marko" <${ExampleA}/> <${ExampleB} ...{ - a: 1 - } b=2/> + a: 1 +} b=2/> <${ExampleC}/> @@ -21,33 +21,33 @@ $ const ExampleD = undefined; <${ExampleE}>
Hi
- + -${input.x} +${input.x} <${input.x}/> -${input.x} +${input.x} <${input.x} ...{ - a: 1 - } b=2/> + a: 1 + } b=2/> -${input.x} +${input.x} <${input.x}>
Hi
- +
- ${x} + ${x} <${x} ...{ - a: 1 - }/> + a: 1 + }/>
diff --git a/test/migrate/fixtures/layout-use/snapshot-expected.marko b/test/migrate/fixtures/layout-use/snapshot-expected.marko index 6b20b2e4ee..8ad521b9e9 100644 --- a/test/migrate/fixtures/layout-use/snapshot-expected.marko +++ b/test/migrate/fixtures/layout-use/snapshot-expected.marko @@ -8,29 +8,29 @@ import ExampleD_1 from "./example-d.marko" <${ExampleA}>
- + <${ExampleB} ...{ - a: 1 - } b=2> + a: 1 +} b=2>
- + <${ExampleC}>
- + $ const ExampleD = undefined; <${ExampleD_1}>
- + <${input.x}>
- + <${input.x} ...{ - a: 1 - } b=2> + a: 1 +} b=2>
- + diff --git a/test/migrate/fixtures/w-bind-prompt-y/prompts.js b/test/migrate/fixtures/w-bind-prompt-y/prompts.js index 56ffad4053..ba3af6824d 100644 --- a/test/migrate/fixtures/w-bind-prompt-y/prompts.js +++ b/test/migrate/fixtures/w-bind-prompt-y/prompts.js @@ -3,5 +3,10 @@ module.exports = [ question: "A widget file was discovered, would you like to migrate that as well?\nNote: widget migrations are not 100% safe and should be tested after migration.", answer: true + }, + { + question: + "Would you like to rename the component file?\nNote: Marko 4 automatically discovers these files based on the naming convention, you may be able to remove them from a browser.json file after this.", + answer: true } ]; diff --git a/test/migrate/fixtures/w-bind-prompt-y/updated-path-snapshot-expected.json b/test/migrate/fixtures/w-bind-prompt-y/updated-path-snapshot-expected.json new file mode 100644 index 0000000000..c50ee09435 --- /dev/null +++ b/test/migrate/fixtures/w-bind-prompt-y/updated-path-snapshot-expected.json @@ -0,0 +1,10 @@ +{ + "fileNames": { + "test/migrate/fixtures/w-bind-prompt-y/template.marko": "test/migrate/fixtures/w-bind-prompt-y/index.marko", + "test/migrate/fixtures/w-bind-prompt-y/index.js": "test/migrate/fixtures/w-bind-prompt-y/component.js" + }, + "dependentPaths": { + "test/migrate/fixtures/w-bind-prompt-y/template.marko": "test/migrate/fixtures/w-bind-prompt-y/index.marko", + "test/migrate/fixtures/w-bind-prompt-y/index.js": "test/migrate/fixtures/w-bind-prompt-y/index.marko" + } +} \ No newline at end of file diff --git a/test/migrate/fixtures/w-body-attr-val/snapshot-expected.marko b/test/migrate/fixtures/w-body-attr-val/snapshot-expected.marko index da2b1a0f30..11bf8337d3 100644 --- a/test/migrate/fixtures/w-body-attr-val/snapshot-expected.marko +++ b/test/migrate/fixtures/w-body-attr-val/snapshot-expected.marko @@ -1,13 +1,21 @@
- + <${input.title}/> ${input.title}
- + <${input.a ? input.b : input.c}/> ${input.a ? input.b : input.c} diff --git a/test/migrate/fixtures/widget-get-template-data/prompts.js b/test/migrate/fixtures/widget-get-template-data/prompts.js index 56ffad4053..785cc2c515 100644 --- a/test/migrate/fixtures/widget-get-template-data/prompts.js +++ b/test/migrate/fixtures/widget-get-template-data/prompts.js @@ -3,5 +3,10 @@ module.exports = [ question: "A widget file was discovered, would you like to migrate that as well?\nNote: widget migrations are not 100% safe and should be tested after migration.", answer: true + }, + { + question: + "Would you like to rename the component file?\nNote: Marko 4 automatically discovers these files based on the naming convention, you may be able to remove them from a browser.json file after this.", + answer: false } ]; diff --git a/test/migrate/index.test.js b/test/migrate/index.test.js index 51831bc2d0..207f407961 100644 --- a/test/migrate/index.test.js +++ b/test/migrate/index.test.js @@ -41,7 +41,7 @@ if (!/^v6\..*/.test(process.version)) { return currentPrompt.answer; } }).then(outputs => { - const byExtension = Object.entries(outputs) + const byExtension = Object.entries(outputs.fileContents) .sort(([a], [b]) => a.localeCompare(b)) .reduce((r, [file, source]) => { const ext = path.extname(file); @@ -55,6 +55,29 @@ if (!/^v6\..*/.test(process.version)) { return r; }, {}); + if ( + !isEmpty(outputs.fileNames) || + !isEmpty(outputs.dependentPaths) + ) { + snapshot( + JSON.stringify( + { + fileNames: outputs.fileNames, + dependentPaths: outputs.dependentPaths + }, + null, + 2 + ).replace( + /"(\/[^"]+)"/g, + (_, file) => `"${path.relative(CWD, file)}"` + ), + { + ext: ".json", + name: "updated-path-snapshot" + } + ); + } + Object.entries(byExtension).forEach(([ext, files]) => { snapshot(files.join("\n\n"), { ext, @@ -77,3 +100,11 @@ function toComment(ext, str) { return `# ${str}`; } } + +function isEmpty(obj) { + for (const _ in obj) { + return false; + } + + return true; +}