autoprefixer 9.8.7 → 10.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +999 -0
- package/README.md +0 -3
- package/bin/autoprefixer +11 -11
- package/data/prefixes.js +799 -545
- package/lib/at-rule.js +23 -50
- package/lib/autoprefixer.js +108 -97
- package/lib/brackets.js +31 -44
- package/lib/browsers.js +54 -71
- package/lib/declaration.js +122 -178
- package/lib/hacks/align-content.js +24 -54
- package/lib/hacks/align-items.js +23 -53
- package/lib/hacks/align-self.js +32 -60
- package/lib/hacks/animation.js +11 -29
- package/lib/hacks/appearance.js +19 -35
- package/lib/hacks/backdrop-filter.js +16 -31
- package/lib/hacks/background-clip.js +19 -36
- package/lib/hacks/background-size.js +16 -31
- package/lib/hacks/block-logical.js +28 -36
- package/lib/hacks/border-image.js +9 -27
- package/lib/hacks/border-radius.js +22 -44
- package/lib/hacks/break-props.js +38 -51
- package/lib/hacks/color-adjust.js +11 -30
- package/lib/hacks/cross-fade.js +29 -48
- package/lib/hacks/display-flex.js +32 -61
- package/lib/hacks/display-grid.js +12 -32
- package/lib/hacks/filter-value.js +8 -25
- package/lib/hacks/filter.js +13 -27
- package/lib/hacks/flex-basis.js +21 -54
- package/lib/hacks/flex-direction.js +41 -77
- package/lib/hacks/flex-flow.js +33 -61
- package/lib/hacks/flex-grow.js +16 -43
- package/lib/hacks/flex-shrink.js +21 -54
- package/lib/hacks/flex-spec.js +7 -10
- package/lib/hacks/flex-wrap.js +11 -32
- package/lib/hacks/flex.js +27 -58
- package/lib/hacks/fullscreen.js +10 -30
- package/lib/hacks/gradient.js +240 -330
- package/lib/hacks/grid-area.js +25 -43
- package/lib/hacks/grid-column-align.js +14 -34
- package/lib/hacks/grid-end.js +30 -45
- package/lib/hacks/grid-row-align.js +14 -34
- package/lib/hacks/grid-row-column.js +20 -39
- package/lib/hacks/grid-rows-columns.js +75 -99
- package/lib/hacks/grid-start.js +17 -39
- package/lib/hacks/grid-template-areas.js +59 -76
- package/lib/hacks/grid-template.js +40 -61
- package/lib/hacks/grid-utils.js +686 -716
- package/lib/hacks/image-rendering.js +24 -47
- package/lib/hacks/image-set.js +10 -30
- package/lib/hacks/inline-logical.js +26 -32
- package/lib/hacks/intrinsic.js +40 -53
- package/lib/hacks/justify-content.js +26 -57
- package/lib/hacks/mask-border.js +28 -36
- package/lib/hacks/mask-composite.js +41 -57
- package/lib/hacks/order.js +22 -52
- package/lib/hacks/overscroll-behavior.js +16 -37
- package/lib/hacks/pixelated.js +16 -40
- package/lib/hacks/place-self.js +18 -41
- package/lib/hacks/placeholder-shown.js +9 -28
- package/lib/hacks/placeholder.js +15 -38
- package/lib/hacks/text-decoration-skip-ink.js +14 -29
- package/lib/hacks/text-decoration.js +20 -31
- package/lib/hacks/text-emphasis-position.js +9 -28
- package/lib/hacks/transform-decl.js +43 -69
- package/lib/hacks/user-select.js +19 -27
- package/lib/hacks/writing-mode.js +19 -36
- package/lib/info.js +63 -93
- package/lib/old-selector.js +39 -60
- package/lib/old-value.js +17 -25
- package/lib/prefixer.js +83 -110
- package/lib/prefixes.js +233 -336
- package/lib/processor.js +420 -416
- package/lib/resolution.js +62 -98
- package/lib/selector.js +91 -139
- package/lib/supports.js +194 -246
- package/lib/transition.js +170 -265
- package/lib/utils.js +49 -72
- package/lib/value.js +77 -116
- package/lib/vendor.js +14 -0
- package/package.json +23 -12
package/lib/at-rule.js
CHANGED
|
@@ -1,62 +1,35 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }
|
|
4
|
-
|
|
5
|
-
function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } it = o[Symbol.iterator](); return it.next.bind(it); }
|
|
6
|
-
|
|
7
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
8
|
-
|
|
9
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
10
|
-
|
|
11
|
-
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _defaults(subClass, superClass); }
|
|
12
|
-
|
|
13
|
-
var Prefixer = require('./prefixer');
|
|
14
|
-
|
|
15
|
-
var AtRule = /*#__PURE__*/function (_Prefixer) {
|
|
16
|
-
_inheritsLoose(AtRule, _Prefixer);
|
|
17
|
-
|
|
18
|
-
function AtRule() {
|
|
19
|
-
return _Prefixer.apply(this, arguments) || this;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
var _proto = AtRule.prototype;
|
|
1
|
+
let Prefixer = require('./prefixer')
|
|
23
2
|
|
|
3
|
+
class AtRule extends Prefixer {
|
|
24
4
|
/**
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
5
|
+
* Clone and add prefixes for at-rule
|
|
6
|
+
*/
|
|
7
|
+
add (rule, prefix) {
|
|
8
|
+
let prefixed = prefix + rule.name
|
|
9
|
+
|
|
10
|
+
let already = rule.parent.some(
|
|
11
|
+
i => i.name === prefixed && i.params === rule.params
|
|
12
|
+
)
|
|
33
13
|
if (already) {
|
|
34
|
-
return undefined
|
|
14
|
+
return undefined
|
|
35
15
|
}
|
|
36
16
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
});
|
|
40
|
-
return rule.parent.insertBefore(rule, cloned);
|
|
17
|
+
let cloned = this.clone(rule, { name: prefixed })
|
|
18
|
+
return rule.parent.insertBefore(rule, cloned)
|
|
41
19
|
}
|
|
42
|
-
/**
|
|
43
|
-
* Clone node with prefixes
|
|
44
|
-
*/
|
|
45
|
-
;
|
|
46
20
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
21
|
+
/**
|
|
22
|
+
* Clone node with prefixes
|
|
23
|
+
*/
|
|
24
|
+
process (node) {
|
|
25
|
+
let parent = this.parentPrefix(node)
|
|
52
26
|
|
|
27
|
+
for (let prefix of this.prefixes) {
|
|
53
28
|
if (!parent || parent === prefix) {
|
|
54
|
-
this.add(node, prefix)
|
|
29
|
+
this.add(node, prefix)
|
|
55
30
|
}
|
|
56
31
|
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
return AtRule;
|
|
60
|
-
}(Prefixer);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
61
34
|
|
|
62
|
-
module.exports = AtRule
|
|
35
|
+
module.exports = AtRule
|
package/lib/autoprefixer.js
CHANGED
|
@@ -1,150 +1,161 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
1
|
+
let browserslist = require('browserslist')
|
|
2
|
+
let { agents } = require('caniuse-lite')
|
|
3
|
+
let colorette = require('colorette')
|
|
4
|
+
|
|
5
|
+
let Browsers = require('./browsers')
|
|
6
|
+
let Prefixes = require('./prefixes')
|
|
7
|
+
let data = require('../data/prefixes')
|
|
8
|
+
let info = require('./info')
|
|
9
|
+
|
|
10
|
+
const WARNING =
|
|
11
|
+
'\n' +
|
|
12
|
+
' Replace Autoprefixer `browsers` option to Browserslist config.\n' +
|
|
13
|
+
' Use `browserslist` key in `package.json` or `.browserslistrc` file.\n' +
|
|
14
|
+
'\n' +
|
|
15
|
+
' Using `browsers` option can cause errors. Browserslist config can\n' +
|
|
16
|
+
' be used for Babel, Autoprefixer, postcss-normalize and other tools.\n' +
|
|
17
|
+
'\n' +
|
|
18
|
+
' If you really need to use option, rename it to `overrideBrowserslist`.\n' +
|
|
19
|
+
'\n' +
|
|
20
|
+
' Learn more at:\n' +
|
|
21
|
+
' https://github.com/browserslist/browserslist#readme\n' +
|
|
22
|
+
' https://twitter.com/browserslist\n' +
|
|
23
|
+
'\n'
|
|
24
|
+
|
|
25
|
+
function isPlainObject (obj) {
|
|
26
|
+
return Object.prototype.toString.apply(obj) === '[object Object]'
|
|
23
27
|
}
|
|
24
28
|
|
|
25
|
-
|
|
29
|
+
let cache = new Map()
|
|
26
30
|
|
|
27
|
-
function timeCapsule(result, prefixes) {
|
|
31
|
+
function timeCapsule (result, prefixes) {
|
|
28
32
|
if (prefixes.browsers.selected.length === 0) {
|
|
29
|
-
return
|
|
33
|
+
return
|
|
30
34
|
}
|
|
31
|
-
|
|
32
35
|
if (prefixes.add.selectors.length > 0) {
|
|
33
|
-
return
|
|
36
|
+
return
|
|
34
37
|
}
|
|
35
|
-
|
|
36
38
|
if (Object.keys(prefixes.add).length > 2) {
|
|
37
|
-
return
|
|
39
|
+
return
|
|
38
40
|
}
|
|
39
|
-
/* istanbul ignore next */
|
|
40
|
-
|
|
41
41
|
|
|
42
|
-
|
|
42
|
+
/* istanbul ignore next */
|
|
43
|
+
result.warn(
|
|
44
|
+
'Greetings, time traveller. ' +
|
|
45
|
+
'We are in the golden age of prefix-less CSS, ' +
|
|
46
|
+
'where Autoprefixer is no longer needed for your stylesheet.'
|
|
47
|
+
)
|
|
43
48
|
}
|
|
44
49
|
|
|
45
|
-
module.exports =
|
|
46
|
-
|
|
47
|
-
reqs[_key] = arguments[_key];
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
var options;
|
|
51
|
-
|
|
50
|
+
module.exports = (...reqs) => {
|
|
51
|
+
let options
|
|
52
52
|
if (reqs.length === 1 && isPlainObject(reqs[0])) {
|
|
53
|
-
options = reqs[0]
|
|
54
|
-
reqs = undefined
|
|
55
|
-
} else if (reqs.length === 0 || reqs.length === 1 && !reqs[0]) {
|
|
56
|
-
reqs = undefined
|
|
53
|
+
options = reqs[0]
|
|
54
|
+
reqs = undefined
|
|
55
|
+
} else if (reqs.length === 0 || (reqs.length === 1 && !reqs[0])) {
|
|
56
|
+
reqs = undefined
|
|
57
57
|
} else if (reqs.length <= 2 && (Array.isArray(reqs[0]) || !reqs[0])) {
|
|
58
|
-
options = reqs[1]
|
|
59
|
-
reqs = reqs[0]
|
|
58
|
+
options = reqs[1]
|
|
59
|
+
reqs = reqs[0]
|
|
60
60
|
} else if (typeof reqs[reqs.length - 1] === 'object') {
|
|
61
|
-
options = reqs.pop()
|
|
61
|
+
options = reqs.pop()
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
if (!options) {
|
|
65
|
-
options = {}
|
|
65
|
+
options = {}
|
|
66
66
|
}
|
|
67
67
|
|
|
68
68
|
if (options.browser) {
|
|
69
|
-
throw new Error(
|
|
69
|
+
throw new Error(
|
|
70
|
+
'Change `browser` option to `overrideBrowserslist` in Autoprefixer'
|
|
71
|
+
)
|
|
70
72
|
} else if (options.browserslist) {
|
|
71
|
-
throw new Error(
|
|
73
|
+
throw new Error(
|
|
74
|
+
'Change `browserslist` option to `overrideBrowserslist` in Autoprefixer'
|
|
75
|
+
)
|
|
72
76
|
}
|
|
73
77
|
|
|
74
78
|
if (options.overrideBrowserslist) {
|
|
75
|
-
reqs = options.overrideBrowserslist
|
|
79
|
+
reqs = options.overrideBrowserslist
|
|
76
80
|
} else if (options.browsers) {
|
|
77
81
|
if (typeof console !== 'undefined' && console.warn) {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
82
|
+
if (colorette.red) {
|
|
83
|
+
console.warn(
|
|
84
|
+
colorette.red(
|
|
85
|
+
WARNING.replace(/`[^`]+`/g, i => colorette.yellow(i.slice(1, -1)))
|
|
86
|
+
)
|
|
87
|
+
)
|
|
88
|
+
} else {
|
|
89
|
+
console.warn(WARNING)
|
|
90
|
+
}
|
|
81
91
|
}
|
|
82
|
-
|
|
83
|
-
reqs = options.browsers;
|
|
92
|
+
reqs = options.browsers
|
|
84
93
|
}
|
|
85
94
|
|
|
86
|
-
|
|
95
|
+
let brwlstOpts = {
|
|
87
96
|
ignoreUnknownVersions: options.ignoreUnknownVersions,
|
|
88
97
|
stats: options.stats,
|
|
89
98
|
env: options.env
|
|
90
|
-
};
|
|
91
|
-
|
|
92
|
-
function loadPrefixes(opts) {
|
|
93
|
-
var d = module.exports.data;
|
|
94
|
-
var browsers = new Browsers(d.browsers, reqs, opts, brwlstOpts);
|
|
95
|
-
var key = browsers.selected.join(', ') + JSON.stringify(options);
|
|
96
|
-
|
|
97
|
-
if (!cache[key]) {
|
|
98
|
-
cache[key] = new Prefixes(d.prefixes, browsers, options);
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
return cache[key];
|
|
102
99
|
}
|
|
103
100
|
|
|
104
|
-
function
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
});
|
|
109
|
-
timeCapsule(result, prefixes);
|
|
101
|
+
function loadPrefixes (opts) {
|
|
102
|
+
let d = module.exports.data
|
|
103
|
+
let browsers = new Browsers(d.browsers, reqs, opts, brwlstOpts)
|
|
104
|
+
let key = browsers.selected.join(', ') + JSON.stringify(options)
|
|
110
105
|
|
|
111
|
-
if (
|
|
112
|
-
|
|
106
|
+
if (!cache.has(key)) {
|
|
107
|
+
cache.set(key, new Prefixes(d.prefixes, browsers, options))
|
|
113
108
|
}
|
|
114
109
|
|
|
115
|
-
|
|
116
|
-
prefixes.processor.add(css, result);
|
|
117
|
-
}
|
|
110
|
+
return cache.get(key)
|
|
118
111
|
}
|
|
119
112
|
|
|
120
|
-
|
|
121
|
-
|
|
113
|
+
return {
|
|
114
|
+
postcssPlugin: 'autoprefixer',
|
|
115
|
+
|
|
116
|
+
prepare (result) {
|
|
117
|
+
let prefixes = loadPrefixes({
|
|
118
|
+
from: result.opts.from,
|
|
119
|
+
env: options.env
|
|
120
|
+
})
|
|
121
|
+
|
|
122
|
+
return {
|
|
123
|
+
Once (root) {
|
|
124
|
+
timeCapsule(result, prefixes)
|
|
125
|
+
if (options.remove !== false) {
|
|
126
|
+
prefixes.processor.remove(root, result)
|
|
127
|
+
}
|
|
128
|
+
if (options.add !== false) {
|
|
129
|
+
prefixes.processor.add(root, result)
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
|
|
135
|
+
info (opts) {
|
|
136
|
+
opts = opts || {}
|
|
137
|
+
opts.from = opts.from || process.cwd()
|
|
138
|
+
return info(loadPrefixes(opts))
|
|
139
|
+
},
|
|
140
|
+
|
|
141
|
+
options,
|
|
142
|
+
browsers: reqs
|
|
143
|
+
}
|
|
144
|
+
}
|
|
122
145
|
|
|
123
|
-
|
|
124
|
-
opts = opts || {};
|
|
125
|
-
opts.from = opts.from || process.cwd();
|
|
126
|
-
return info(loadPrefixes(opts));
|
|
127
|
-
};
|
|
146
|
+
module.exports.postcss = true
|
|
128
147
|
|
|
129
|
-
return plugin;
|
|
130
|
-
});
|
|
131
148
|
/**
|
|
132
149
|
* Autoprefixer data
|
|
133
150
|
*/
|
|
151
|
+
module.exports.data = { browsers: agents, prefixes: data }
|
|
134
152
|
|
|
135
|
-
module.exports.data = {
|
|
136
|
-
browsers: agents,
|
|
137
|
-
prefixes: data
|
|
138
|
-
};
|
|
139
153
|
/**
|
|
140
154
|
* Autoprefixer default browsers
|
|
141
155
|
*/
|
|
156
|
+
module.exports.defaults = browserslist.defaults
|
|
142
157
|
|
|
143
|
-
module.exports.defaults = browserslist.defaults;
|
|
144
158
|
/**
|
|
145
159
|
* Inspect with default Autoprefixer
|
|
146
160
|
*/
|
|
147
|
-
|
|
148
|
-
module.exports.info = function () {
|
|
149
|
-
return module.exports().info();
|
|
150
|
-
};
|
|
161
|
+
module.exports.info = () => module.exports().info()
|
package/lib/brackets.js
CHANGED
|
@@ -1,64 +1,51 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } it = o[Symbol.iterator](); return it.next.bind(it); }
|
|
4
|
-
|
|
5
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
6
|
-
|
|
7
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
8
|
-
|
|
9
|
-
function last(array) {
|
|
10
|
-
return array[array.length - 1];
|
|
1
|
+
function last (array) {
|
|
2
|
+
return array[array.length - 1]
|
|
11
3
|
}
|
|
12
4
|
|
|
13
|
-
|
|
5
|
+
let brackets = {
|
|
14
6
|
/**
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
parse
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
for (var _iterator = _createForOfIteratorHelperLoose(str), _step; !(_step = _iterator()).done;) {
|
|
22
|
-
var sym = _step.value;
|
|
7
|
+
* Parse string to nodes tree
|
|
8
|
+
*/
|
|
9
|
+
parse (str) {
|
|
10
|
+
let current = ['']
|
|
11
|
+
let stack = [current]
|
|
23
12
|
|
|
13
|
+
for (let sym of str) {
|
|
24
14
|
if (sym === '(') {
|
|
25
|
-
current = ['']
|
|
26
|
-
last(stack).push(current)
|
|
27
|
-
stack.push(current)
|
|
28
|
-
continue
|
|
15
|
+
current = ['']
|
|
16
|
+
last(stack).push(current)
|
|
17
|
+
stack.push(current)
|
|
18
|
+
continue
|
|
29
19
|
}
|
|
30
20
|
|
|
31
21
|
if (sym === ')') {
|
|
32
|
-
stack.pop()
|
|
33
|
-
current = last(stack)
|
|
34
|
-
current.push('')
|
|
35
|
-
continue
|
|
22
|
+
stack.pop()
|
|
23
|
+
current = last(stack)
|
|
24
|
+
current.push('')
|
|
25
|
+
continue
|
|
36
26
|
}
|
|
37
27
|
|
|
38
|
-
current[current.length - 1] += sym
|
|
28
|
+
current[current.length - 1] += sym
|
|
39
29
|
}
|
|
40
30
|
|
|
41
|
-
return stack[0]
|
|
31
|
+
return stack[0]
|
|
42
32
|
},
|
|
43
33
|
|
|
44
34
|
/**
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
stringify
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
for (var _iterator2 = _createForOfIteratorHelperLoose(ast), _step2; !(_step2 = _iterator2()).done;) {
|
|
51
|
-
var i = _step2.value;
|
|
52
|
-
|
|
35
|
+
* Generate output string by nodes tree
|
|
36
|
+
*/
|
|
37
|
+
stringify (ast) {
|
|
38
|
+
let result = ''
|
|
39
|
+
for (let i of ast) {
|
|
53
40
|
if (typeof i === 'object') {
|
|
54
|
-
result +=
|
|
55
|
-
continue
|
|
41
|
+
result += `(${brackets.stringify(i)})`
|
|
42
|
+
continue
|
|
56
43
|
}
|
|
57
44
|
|
|
58
|
-
result += i
|
|
45
|
+
result += i
|
|
59
46
|
}
|
|
60
|
-
|
|
61
|
-
return result;
|
|
47
|
+
return result
|
|
62
48
|
}
|
|
63
|
-
}
|
|
64
|
-
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
module.exports = brackets
|
package/lib/browsers.js
CHANGED
|
@@ -1,96 +1,79 @@
|
|
|
1
|
-
|
|
1
|
+
let browserslist = require('browserslist')
|
|
2
|
+
let agents = require('caniuse-lite').agents
|
|
2
3
|
|
|
3
|
-
|
|
4
|
+
let utils = require('./utils')
|
|
4
5
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
var utils = require('./utils');
|
|
8
|
-
|
|
9
|
-
var Browsers = /*#__PURE__*/function () {
|
|
6
|
+
class Browsers {
|
|
10
7
|
/**
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
8
|
+
* Return all prefixes for default browser data
|
|
9
|
+
*/
|
|
10
|
+
static prefixes () {
|
|
14
11
|
if (this.prefixesCache) {
|
|
15
|
-
return this.prefixesCache
|
|
12
|
+
return this.prefixesCache
|
|
16
13
|
}
|
|
17
14
|
|
|
18
|
-
this.prefixesCache = []
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
this.prefixesCache.push("-" + agents[name].prefix + "-");
|
|
15
|
+
this.prefixesCache = []
|
|
16
|
+
for (let name in agents) {
|
|
17
|
+
this.prefixesCache.push(`-${agents[name].prefix}-`)
|
|
22
18
|
}
|
|
23
19
|
|
|
24
|
-
this.prefixesCache = utils
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
20
|
+
this.prefixesCache = utils
|
|
21
|
+
.uniq(this.prefixesCache)
|
|
22
|
+
.sort((a, b) => b.length - a.length)
|
|
23
|
+
|
|
24
|
+
return this.prefixesCache
|
|
28
25
|
}
|
|
29
|
-
/**
|
|
30
|
-
* Check is value contain any possible prefix
|
|
31
|
-
*/
|
|
32
|
-
;
|
|
33
26
|
|
|
34
|
-
|
|
27
|
+
/**
|
|
28
|
+
* Check is value contain any possible prefix
|
|
29
|
+
*/
|
|
30
|
+
static withPrefix (value) {
|
|
35
31
|
if (!this.prefixesRegexp) {
|
|
36
|
-
this.prefixesRegexp = new RegExp(this.prefixes().join('|'))
|
|
32
|
+
this.prefixesRegexp = new RegExp(this.prefixes().join('|'))
|
|
37
33
|
}
|
|
38
34
|
|
|
39
|
-
return this.prefixesRegexp.test(value)
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
function Browsers(data, requirements, options, browserslistOpts) {
|
|
43
|
-
this.data = data;
|
|
44
|
-
this.options = options || {};
|
|
45
|
-
this.browserslistOpts = browserslistOpts || {};
|
|
46
|
-
this.selected = this.parse(requirements);
|
|
35
|
+
return this.prefixesRegexp.test(value)
|
|
47
36
|
}
|
|
48
|
-
/**
|
|
49
|
-
* Return browsers selected by requirements
|
|
50
|
-
*/
|
|
51
|
-
|
|
52
37
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
38
|
+
constructor (data, requirements, options, browserslistOpts) {
|
|
39
|
+
this.data = data
|
|
40
|
+
this.options = options || {}
|
|
41
|
+
this.browserslistOpts = browserslistOpts || {}
|
|
42
|
+
this.selected = this.parse(requirements)
|
|
43
|
+
}
|
|
57
44
|
|
|
58
|
-
|
|
59
|
-
|
|
45
|
+
/**
|
|
46
|
+
* Return browsers selected by requirements
|
|
47
|
+
*/
|
|
48
|
+
parse (requirements) {
|
|
49
|
+
let opts = {}
|
|
50
|
+
for (let i in this.browserslistOpts) {
|
|
51
|
+
opts[i] = this.browserslistOpts[i]
|
|
60
52
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
return browserslist(requirements, opts);
|
|
53
|
+
opts.path = this.options.from
|
|
54
|
+
return browserslist(requirements, opts)
|
|
64
55
|
}
|
|
65
|
-
/**
|
|
66
|
-
* Return prefix for selected browser
|
|
67
|
-
*/
|
|
68
|
-
;
|
|
69
56
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
var prefix = data.prefix_exceptions && data.prefix_exceptions[version];
|
|
57
|
+
/**
|
|
58
|
+
* Return prefix for selected browser
|
|
59
|
+
*/
|
|
60
|
+
prefix (browser) {
|
|
61
|
+
let [name, version] = browser.split(' ')
|
|
62
|
+
let data = this.data[name]
|
|
77
63
|
|
|
64
|
+
let prefix = data.prefix_exceptions && data.prefix_exceptions[version]
|
|
78
65
|
if (!prefix) {
|
|
79
|
-
prefix = data.prefix
|
|
66
|
+
prefix = data.prefix
|
|
80
67
|
}
|
|
81
|
-
|
|
82
|
-
return "-" + prefix + "-";
|
|
68
|
+
return `-${prefix}-`
|
|
83
69
|
}
|
|
84
|
-
/**
|
|
85
|
-
* Is browser is selected by requirements
|
|
86
|
-
*/
|
|
87
|
-
;
|
|
88
|
-
|
|
89
|
-
_proto.isSelected = function isSelected(browser) {
|
|
90
|
-
return this.selected.includes(browser);
|
|
91
|
-
};
|
|
92
70
|
|
|
93
|
-
|
|
94
|
-
|
|
71
|
+
/**
|
|
72
|
+
* Is browser is selected by requirements
|
|
73
|
+
*/
|
|
74
|
+
isSelected (browser) {
|
|
75
|
+
return this.selected.includes(browser)
|
|
76
|
+
}
|
|
77
|
+
}
|
|
95
78
|
|
|
96
|
-
module.exports = Browsers
|
|
79
|
+
module.exports = Browsers
|