--- /dev/null
+/* @flow */
+"use strict";
+
+const hasLessInterpolation = require("../utils/hasLessInterpolation");
+const hasPsvInterpolation = require("../utils/hasPsvInterpolation");
+const hasScssInterpolation = require("../utils/hasScssInterpolation");
+
+/**
+ * Check whether a URL is standard
+ */
+module.exports = function(url /*: string*/) /*: boolean*/ {
+ if (url.length === 0) {
+ return true;
+ }
+
+ // Sass interpolation works anywhere
+ if (hasScssInterpolation(url) || hasPsvInterpolation(url)) {
+ return false;
+ }
+
+ // Inside `'` and `"` work only LESS interpolation
+ if (
+ (url[0] === "'" && url[url.length - 1] === "'") ||
+ (url[0] === '"' && url[url.length - 1] === '"')
+ ) {
+ if (hasLessInterpolation(url)) {
+ return false;
+ }
+
+ return true;
+ }
+
+ // Less variable works only at the beginning
+ // Check is less variable, allow use '@url/some/path'
+ // https://github.com/less/less.js/blob/3.x/lib/less/parser/parser.js#L547
+ if (url[0] === "@" && /^@@?[\w-]+$/.test(url)) {
+ return false;
+ }
+
+ // In url without quotes scss variable can be everywhere
+ // But in this case it is allowed to use only specific characters
+ // Also forbidden "/" at the end of url
+ if (
+ url.indexOf("$") !== -1 &&
+ /^[$\sA-Za-z0-9+-/*_'"/]+$/.test(url) &&
+ url[url.length - 1] !== "/"
+ ) {
+ return false;
+ }
+
+ return true;
+};