From 59d61a5a8cf5f710fa56d2e2529226e23ea56f08 Mon Sep 17 00:00:00 2001 From: Pat Cavit Date: Mon, 25 Nov 2019 15:17:37 -0800 Subject: [PATCH 1/2] chore(svelte): adding slash package --- package-lock.json | 105 ++++++++++++++++++++--------------- packages/svelte/package.json | 3 +- 2 files changed, 61 insertions(+), 47 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2a8c1d3e7..f572a24e4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2156,6 +2156,7 @@ "@modular-css/browserify": { "version": "file:packages/browserify", "requires": { + "@modular-css/processor": "file:packages/processor", "mkdirp": "^0.5.1", "p-each-series": "^2.0.0", "sink-transform": "^2.0.0", @@ -2165,6 +2166,8 @@ "@modular-css/cli": { "version": "file:packages/cli", "requires": { + "@modular-css/glob": "file:packages/glob", + "@modular-css/processor": "file:packages/processor", "meow": "^5.0.0", "mkdirp": "^0.5.1" } @@ -2172,6 +2175,7 @@ "@modular-css/glob": { "version": "file:packages/glob", "requires": { + "@modular-css/processor": "file:packages/processor", "globule": "^1.1.0" } }, @@ -2190,6 +2194,7 @@ "@modular-css/postcss": { "version": "file:packages/postcss", "requires": { + "@modular-css/processor": "file:packages/processor", "mkdirp": "^0.5.1", "postcss": "^7.0.0" } @@ -2211,6 +2216,7 @@ "@modular-css/rollup": { "version": "file:packages/rollup", "requires": { + "@modular-css/processor": "file:packages/processor", "dedent": "0.7.0", "esutils": "^2.0.2", "rollup-pluginutils": "^2.0.1", @@ -2234,8 +2240,10 @@ "@modular-css/svelte": { "version": "file:packages/svelte", "requires": { + "@modular-css/processor": "file:packages/processor", "escape-string-regexp": "^2.0.0", - "is-url": "^1.2.4" + "is-url": "^1.2.4", + "slash": "^3.0.0" } }, "@modular-css/test-utils": { @@ -2245,6 +2253,7 @@ "@modular-css/webpack": { "version": "file:packages/webpack", "requires": { + "@modular-css/processor": "file:packages/processor", "esutils": "^2.0.2", "loader-utils": "^1.1.0", "lodash": "^4.17.0", @@ -2255,6 +2264,10 @@ "version": "file:packages/www", "dev": true, "requires": { + "@modular-css/processor": "file:packages/processor", + "@modular-css/rollup": "file:packages/rollup", + "@modular-css/shortnames": "file:packages/namer", + "@modular-css/svelte": "file:packages/svelte", "babel-eslint": "^10.0.1", "codemirror": "^5.42.2", "cssnano": "^4.1.8", @@ -3711,7 +3724,7 @@ }, "browserify-aes": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { @@ -3759,7 +3772,7 @@ }, "browserify-rsa": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "resolved": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { @@ -4261,7 +4274,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { @@ -4465,7 +4478,7 @@ }, "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, @@ -4521,7 +4534,7 @@ }, "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } @@ -4574,7 +4587,7 @@ }, "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, @@ -4593,7 +4606,7 @@ }, "convert-source-map": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", "dev": true }, @@ -4664,7 +4677,7 @@ }, "create-hash": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { @@ -4677,7 +4690,7 @@ }, "create-hmac": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { @@ -5275,7 +5288,7 @@ "dependencies": { "JSONStream": { "version": "0.7.4", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.7.4.tgz", + "resolved": "http://registry.npmjs.org/JSONStream/-/JSONStream-0.7.4.tgz", "integrity": "sha1-c0KQ5BUR7qfCz+FR+/mlY6l7l4Y=", "dev": true, "requires": { @@ -5291,7 +5304,7 @@ }, "minimist": { "version": "0.0.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.5.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.5.tgz", "integrity": "sha1-16oye87PUY+RBqxrjwA/o7zqhWY=", "dev": true } @@ -5332,7 +5345,7 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } @@ -5356,7 +5369,7 @@ }, "diffie-hellman": { "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { @@ -5443,7 +5456,7 @@ }, "duplexer": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", "dev": true }, @@ -5625,7 +5638,7 @@ }, "es6-promisify": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "resolved": "http://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", "dev": true, "requires": { @@ -6119,7 +6132,7 @@ "dependencies": { "JSONStream": { "version": "0.8.4", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.8.4.tgz", + "resolved": "http://registry.npmjs.org/JSONStream/-/JSONStream-0.8.4.tgz", "integrity": "sha1-kWV9/m/4V0gwZhMrRhi2Lo9Ih70=", "dev": true, "requires": { @@ -6228,13 +6241,13 @@ }, "minimist": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.2.0.tgz", "integrity": "sha1-Tf/lJdriuGTGbC4jxicdev3s784=", "dev": true }, "readable-stream": { "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { @@ -6297,7 +6310,7 @@ "dependencies": { "readable-stream": { "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { @@ -7198,7 +7211,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { @@ -7246,7 +7259,7 @@ }, "camelcase-keys": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "resolved": "http://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "dev": true, "requires": { @@ -7275,7 +7288,7 @@ }, "load-json-file": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { @@ -7294,7 +7307,7 @@ }, "meow": { "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "resolved": "http://registry.npmjs.org/meow/-/meow-3.7.0.tgz", "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "dev": true, "requires": { @@ -7312,7 +7325,7 @@ }, "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, @@ -7347,7 +7360,7 @@ }, "pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, @@ -7495,7 +7508,7 @@ }, "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, @@ -7529,7 +7542,7 @@ "dependencies": { "pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true } @@ -7564,7 +7577,7 @@ }, "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, @@ -8399,7 +8412,7 @@ }, "is-obj": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", "dev": true }, @@ -11442,7 +11455,7 @@ }, "minimist": { "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" }, "minimist-options": { @@ -11532,7 +11545,7 @@ }, "mkdirp": { "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "requires": { "minimist": "0.0.8" @@ -11731,7 +11744,7 @@ "dependencies": { "semver": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "resolved": "http://registry.npmjs.org/semver/-/semver-5.3.0.tgz", "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", "dev": true } @@ -11776,7 +11789,7 @@ "dependencies": { "buffer": { "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "resolved": "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "dev": true, "requires": { @@ -12504,7 +12517,7 @@ }, "pegjs": { "version": "0.10.0", - "resolved": "https://registry.npmjs.org/pegjs/-/pegjs-0.10.0.tgz", + "resolved": "http://registry.npmjs.org/pegjs/-/pegjs-0.10.0.tgz", "integrity": "sha1-z4uvrm7d/0tafvsYUmnqr0YQ3b0=", "dev": true }, @@ -13572,7 +13585,7 @@ }, "readable-stream": { "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { "core-util-is": "~1.0.0", @@ -13601,7 +13614,7 @@ }, "readable-stream": { "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { @@ -14119,7 +14132,7 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } @@ -14197,7 +14210,7 @@ }, "sha.js": { "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { @@ -14207,7 +14220,7 @@ }, "shasum": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", + "resolved": "http://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", "dev": true, "requires": { @@ -14739,7 +14752,7 @@ }, "stream-combiner": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", + "resolved": "http://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", "integrity": "sha1-rsjLrBd7Vrb0+kec7YwZEs7lKFg=", "dev": true, "requires": { @@ -14912,7 +14925,7 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } @@ -14953,7 +14966,7 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } @@ -15249,7 +15262,7 @@ }, "through": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, @@ -16032,7 +16045,7 @@ }, "wrap-ansi": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { @@ -16068,7 +16081,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { diff --git a/packages/svelte/package.json b/packages/svelte/package.json index c4e7da65a..17c756eef 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -31,7 +31,8 @@ "dependencies": { "@modular-css/processor": "file:../processor", "escape-string-regexp": "^2.0.0", - "is-url": "^1.2.4" + "is-url": "^1.2.4", + "slash": "^3.0.0" }, "peerDependencies": { "svelte": ">1" From b156a21c2c07ecdfdc89a0346b866d76f4bd0701 Mon Sep 17 00:00:00 2001 From: Pat Cavit Date: Mon, 25 Nov 2019 15:18:18 -0800 Subject: [PATCH 2/2] feat(svelte): Add warning on unquoted class attributes Also standardize errors/warnings a bunch and modernize test files a bit. --- packages/svelte/svelte.js | 63 ++++++---- .../test/__snapshots__/svelte.test.js.snap | 108 +++++++++++++----- packages/svelte/test/specimens/unquoted.html | 18 +++ packages/svelte/test/svelte.test.js | 105 ++++++++++++++--- 4 files changed, 224 insertions(+), 70 deletions(-) create mode 100644 packages/svelte/test/specimens/unquoted.html diff --git a/packages/svelte/svelte.js b/packages/svelte/svelte.js index 7e520ee05..92e1ada19 100644 --- a/packages/svelte/svelte.js +++ b/packages/svelte/svelte.js @@ -1,7 +1,10 @@ "use strict"; +const path = require("path"); + const isUrl = require("is-url"); const escape = require("escape-string-regexp"); +const slash = require("slash"); const Processor = require("@modular-css/processor"); @@ -9,6 +12,8 @@ const styleRegex = /([\S\s]*?)<\/style>/im; const scriptRegex = /([\S\s]*?)<\/script>/im; const missedRegex = /css\.\w+/gim; +const prefix = `[${require("./package.json").name}]`; + module.exports = (config = false) => { // Defined here to avoid .lastIndex bugs since /g is set const linkRegex = /]*?\bhref=\s*(?:"([^"]+)"|'([^']+)'|([^>\s]+))[^>]*>/gim; @@ -16,8 +21,15 @@ module.exports = (config = false) => { // Use a passed processor, or set up our own if necessary const { processor = new Processor(config) } = config; + const { cwd } = processor.options; + // eslint-disable-next-line no-console, no-empty-function - const log = config.verbose ? console.log.bind(console, "[svelte]") : () => {}; + const log = config.verbose ? console.log.bind(console, prefix) : () => {}; + + // eslint-disable-next-line no-console + const warn = console.warn.bind(console, prefix, "WARN"); + + const relative = (file) => slash(path.relative(cwd, file)); // Check for and stringify any values in the template we couldn't convert const missing = ({ source, file }) => { @@ -32,12 +44,11 @@ module.exports = (config = false) => { const classes = missed.map((reference) => reference.replace("css.", "")); if(strict) { - throw new Error(`@modular-css/svelte: Unable to find .${classes.join(", .")} in "${file}"`); + throw new Error(`${prefix} Unable to find .${classes.join(", .")} in "${file}"`); } classes.forEach((key) => - // eslint-disable-next-line no-console - console.warn(`@modular-css/svelte: Unable to find .${key} in "${file}"`) + warn(`Unable to find .${key} in ${file}`) ); // Turn all missing values into strings so nothing explodes @@ -51,7 +62,9 @@ module.exports = (config = false) => { // Mostly because markup() is async so tracking state is painful w/o inlining // the whole damn thing // eslint-disable-next-line max-statements, complexity - const markup = async ({ content, filename : html }) => { + const markup = async ({ content, filename }) => { + const file = filename ? relative(filename) : "Unknown file"; + let source = content; let dependencies = []; @@ -59,7 +72,7 @@ module.exports = (config = false) => { const style = source.match(styleRegex); if(links && style) { - throw new Error("@modular-css/svelte: use diff --git a/packages/svelte/test/svelte.test.js b/packages/svelte/test/svelte.test.js index 1e65f2860..3a7a849b5 100644 --- a/packages/svelte/test/svelte.test.js +++ b/packages/svelte/test/svelte.test.js @@ -30,7 +30,10 @@ describe("/svelte.js", () => { const processed = await svelte.preprocess( fs.readFileSync(filename, "utf8"), - Object.assign({}, preprocess, { filename }) + { + ...preprocess, + filename, + }, ); expect(processed.toString()).toMatchSnapshot(); @@ -51,14 +54,17 @@ describe("/svelte.js", () => { try { await svelte.preprocess( fs.readFileSync(filename, "utf8"), - Object.assign({}, preprocess, { filename }) + { + ...preprocess, + filename, + }, ); } catch(e) { expect(e.toString()).toMatch(/\.wooga/); } } ); - + it("should ignore that reference a URL", async () => { const filename = require.resolve("./specimens/url.html"); const { preprocess, processor } = plugin({ @@ -67,7 +73,10 @@ describe("/svelte.js", () => { const processed = await svelte.preprocess( fs.readFileSync(filename, "utf8"), - Object.assign({}, preprocess, { filename }) + { + ...preprocess, + filename, + }, ); expect(processed.toString()).toMatchSnapshot(); @@ -92,7 +101,10 @@ describe("/svelte.js", () => { const processed = await svelte.preprocess( fs.readFileSync(filename, "utf8"), - Object.assign({}, preprocess, { filename }) + { + ...preprocess, + filename, + }, ); expect(processed.toString()).toMatchSnapshot(); @@ -117,7 +129,10 @@ describe("/svelte.js", () => { const processed = await svelte.preprocess( fs.readFileSync(filename, "utf8"), - Object.assign({}, preprocess, { filename }) + { + ...preprocess, + filename, + }, ); expect(processed.toString()).toMatchSnapshot(); @@ -165,7 +180,10 @@ describe("/svelte.js", () => { await expect( svelte.preprocess( fs.readFileSync(filename, "utf8"), - Object.assign({}, strict, { filename }) + { + ...strict, + filename, + } ) ).rejects.toThrowErrorMatchingSnapshot(); @@ -176,7 +194,10 @@ describe("/svelte.js", () => { const processed = await svelte.preprocess( fs.readFileSync(filename, "utf8"), - Object.assign({}, loose, { filename }) + { + ...loose, + filename, + } ); expect(warnSpy).toHaveBeenCalled(); @@ -196,7 +217,10 @@ describe("/svelte.js", () => { await expect( svelte.preprocess( fs.readFileSync(filename, "utf8"), - Object.assign({}, preprocess, { filename }) + { + ...preprocess, + filename, + }, ) ).rejects.toThrowErrorMatchingSnapshot(); }); @@ -217,7 +241,10 @@ describe("/svelte.js", () => { await svelte.preprocess( fs.readFileSync(filename, "utf8"), - Object.assign({}, preprocess, { filename }) + { + ...preprocess, + filename, + }, ); await processor.output(); @@ -234,7 +261,10 @@ describe("/svelte.js", () => { const processed = await svelte.preprocess( fs.readFileSync(filename, "utf8"), - Object.assign({}, preprocess, { filename }) + { + ...preprocess, + filename, + }, ); expect(processed.toString()).toMatchSnapshot(); @@ -256,7 +286,10 @@ describe("/svelte.js", () => { const processed = await svelte.preprocess( fs.readFileSync(filename, "utf8"), - Object.assign({}, preprocess, { filename }) + { + ...preprocess, + filename, + }, ); expect(processed.toString()).toMatchSnapshot(); @@ -283,7 +316,10 @@ describe("/svelte.js", () => { let processed = await svelte.preprocess( fs.readFileSync(filename, "utf8"), - Object.assign({}, preprocess, { filename }) + { + ...preprocess, + filename, + }, ); expect(processed.toString()).toMatchSnapshot(); @@ -301,7 +337,10 @@ describe("/svelte.js", () => { processed = await svelte.preprocess( fs.readFileSync(filename, "utf8"), - Object.assign({}, preprocess, { filename }) + { + ...preprocess, + filename, + }, ); expect(processed.toString()).toMatchSnapshot(); @@ -325,7 +364,10 @@ describe("/svelte.js", () => { let processed = await svelte.preprocess( fs.readFileSync(filename, "utf8"), - Object.assign({}, preprocess, { filename }) + { + ...preprocess, + filename, + }, ); expect(processed.toString()).toMatchSnapshot(); @@ -342,7 +384,10 @@ describe("/svelte.js", () => { processed = await svelte.preprocess( fs.readFileSync(filename, "utf8"), - Object.assign({}, preprocess, { filename }) + { + ...preprocess, + filename, + }, ); expect(processed.toString()).toMatchSnapshot(); @@ -364,7 +409,10 @@ describe("/svelte.js", () => { ] .map((filename) => svelte.preprocess( fs.readFileSync(filename, "utf8"), - Object.assign({}, preprocess, { filename }) + { + ...preprocess, + filename, + }, )) ); @@ -387,7 +435,10 @@ describe("/svelte.js", () => { const processed = await svelte.preprocess( fs.readFileSync(filename, "utf8"), - Object.assign({}, preprocess, { filename }) + { + ...preprocess, + filename, + }, ); expect(processed.toString()).toMatchSnapshot(); @@ -396,4 +447,22 @@ describe("/svelte.js", () => { expect(output.css).toMatchSnapshot(); }); + + it("should warn about unquoted class attributes", async () => { + const filename = require.resolve("./specimens/unquoted.html"); + const { preprocess } = plugin({ + namer, + }); + + await svelte.preprocess( + fs.readFileSync(filename, "utf8"), + { + ...preprocess, + filename, + }, + ); + + expect(warnSpy).toHaveBeenCalled(); + expect(warnSpy.mock.calls).toMatchSnapshot(); + }); });