summaryrefslogtreecommitdiff
path: root/node_modules/autoprefixer/lib/utils.js
diff options
context:
space:
mode:
authorPhilipp Tanlak <philipp.tanlak@gmail.com>2025-11-24 20:54:57 +0100
committerPhilipp Tanlak <philipp.tanlak@gmail.com>2025-11-24 20:57:48 +0100
commitb1e2c8fd5cb5dfa46bc440a12eafaf56cd844b1c (patch)
tree49d360fd6cbc6a2754efe93524ac47ff0fbe0f7d /node_modules/autoprefixer/lib/utils.js
Docs
Diffstat (limited to 'node_modules/autoprefixer/lib/utils.js')
-rw-r--r--node_modules/autoprefixer/lib/utils.js93
1 files changed, 93 insertions, 0 deletions
diff --git a/node_modules/autoprefixer/lib/utils.js b/node_modules/autoprefixer/lib/utils.js
new file mode 100644
index 0000000..2309e8e
--- /dev/null
+++ b/node_modules/autoprefixer/lib/utils.js
@@ -0,0 +1,93 @@
+let { list } = require('postcss')
+
+/**
+ * Throw special error, to tell beniary,
+ * that this error is from Autoprefixer.
+ */
+module.exports.error = function (text) {
+ let err = new Error(text)
+ err.autoprefixer = true
+ throw err
+}
+
+/**
+ * Return array, that doesn’t contain duplicates.
+ */
+module.exports.uniq = function (array) {
+ return [...new Set(array)]
+}
+
+/**
+ * Return "-webkit-" on "-webkit- old"
+ */
+module.exports.removeNote = function (string) {
+ if (!string.includes(' ')) {
+ return string
+ }
+
+ return string.split(' ')[0]
+}
+
+/**
+ * Escape RegExp symbols
+ */
+module.exports.escapeRegexp = function (string) {
+ return string.replace(/[$()*+-.?[\\\]^{|}]/g, '\\$&')
+}
+
+/**
+ * Return regexp to check, that CSS string contain word
+ */
+module.exports.regexp = function (word, escape = true) {
+ if (escape) {
+ word = this.escapeRegexp(word)
+ }
+ return new RegExp(`(^|[\\s,(])(${word}($|[\\s(,]))`, 'gi')
+}
+
+/**
+ * Change comma list
+ */
+module.exports.editList = function (value, callback) {
+ let origin = list.comma(value)
+ let changed = callback(origin, [])
+
+ if (origin === changed) {
+ return value
+ }
+
+ let join = value.match(/,\s*/)
+ join = join ? join[0] : ', '
+ return changed.join(join)
+}
+
+/**
+ * Split the selector into parts.
+ * It returns 3 level deep array because selectors can be comma
+ * separated (1), space separated (2), and combined (3)
+ * @param {String} selector selector string
+ * @return {Array<Array<Array>>} 3 level deep array of split selector
+ * @see utils.test.js for examples
+ */
+module.exports.splitSelector = function (selector) {
+ return list.comma(selector).map(i => {
+ return list.space(i).map(k => {
+ return k.split(/(?=\.|#)/g)
+ })
+ })
+}
+
+/**
+ * Return true if a given value only contains numbers.
+ * @param {*} value
+ * @returns {boolean}
+ */
+module.exports.isPureNumber = function (value) {
+ if (typeof value === 'number') {
+ return true
+ }
+ if (typeof value === 'string') {
+ return /^[0-9]+$/.test(value)
+ }
+ return false
+}