create-jant 0.1.13 → 0.1.14
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/dist/index.js +1 -1
- package/package.json +1 -1
- package/template/node_modules/@jant/core/CHANGELOG.md +6 -0
- package/template/node_modules/@jant/core/package.json +1 -5
- package/template/node_modules/@jant/core/src/preset.css +3 -1
- package/template/node_modules/@tailwindcss/{postcss → vite}/README.md +11 -61
- package/template/node_modules/@tailwindcss/vite/dist/index.d.mts +13 -0
- package/template/node_modules/@tailwindcss/vite/dist/index.mjs +1 -0
- package/template/node_modules/@tailwindcss/vite/node_modules/.bin/vite +21 -0
- package/template/node_modules/@tailwindcss/vite/package.json +42 -0
- package/template/package.json +1 -3
- package/template/src/style.css +0 -3
- package/template/vite.config.ts +2 -8
- package/template/node_modules/.bin/autoprefixer +0 -21
- package/template/node_modules/@jant/core/src/tailwind.ts +0 -20
- package/template/node_modules/@tailwindcss/postcss/dist/index.d.mts +0 -25
- package/template/node_modules/@tailwindcss/postcss/dist/index.d.ts +0 -25
- package/template/node_modules/@tailwindcss/postcss/dist/index.js +0 -10
- package/template/node_modules/@tailwindcss/postcss/dist/index.mjs +0 -10
- package/template/node_modules/@tailwindcss/postcss/package.json +0 -46
- package/template/node_modules/autoprefixer/LICENSE +0 -20
- package/template/node_modules/autoprefixer/README.md +0 -57
- package/template/node_modules/autoprefixer/bin/autoprefixer +0 -22
- package/template/node_modules/autoprefixer/data/prefixes.js +0 -1139
- package/template/node_modules/autoprefixer/lib/at-rule.js +0 -35
- package/template/node_modules/autoprefixer/lib/autoprefixer.d.ts +0 -95
- package/template/node_modules/autoprefixer/lib/autoprefixer.js +0 -164
- package/template/node_modules/autoprefixer/lib/brackets.js +0 -51
- package/template/node_modules/autoprefixer/lib/browsers.js +0 -79
- package/template/node_modules/autoprefixer/lib/declaration.js +0 -187
- package/template/node_modules/autoprefixer/lib/hacks/align-content.js +0 -49
- package/template/node_modules/autoprefixer/lib/hacks/align-items.js +0 -46
- package/template/node_modules/autoprefixer/lib/hacks/align-self.js +0 -56
- package/template/node_modules/autoprefixer/lib/hacks/animation.js +0 -17
- package/template/node_modules/autoprefixer/lib/hacks/appearance.js +0 -23
- package/template/node_modules/autoprefixer/lib/hacks/autofill.js +0 -26
- package/template/node_modules/autoprefixer/lib/hacks/backdrop-filter.js +0 -20
- package/template/node_modules/autoprefixer/lib/hacks/background-clip.js +0 -24
- package/template/node_modules/autoprefixer/lib/hacks/background-size.js +0 -23
- package/template/node_modules/autoprefixer/lib/hacks/block-logical.js +0 -40
- package/template/node_modules/autoprefixer/lib/hacks/border-image.js +0 -15
- package/template/node_modules/autoprefixer/lib/hacks/border-radius.js +0 -40
- package/template/node_modules/autoprefixer/lib/hacks/break-props.js +0 -63
- package/template/node_modules/autoprefixer/lib/hacks/cross-fade.js +0 -35
- package/template/node_modules/autoprefixer/lib/hacks/display-flex.js +0 -65
- package/template/node_modules/autoprefixer/lib/hacks/display-grid.js +0 -21
- package/template/node_modules/autoprefixer/lib/hacks/file-selector-button.js +0 -26
- package/template/node_modules/autoprefixer/lib/hacks/filter-value.js +0 -14
- package/template/node_modules/autoprefixer/lib/hacks/filter.js +0 -19
- package/template/node_modules/autoprefixer/lib/hacks/flex-basis.js +0 -39
- package/template/node_modules/autoprefixer/lib/hacks/flex-direction.js +0 -72
- package/template/node_modules/autoprefixer/lib/hacks/flex-flow.js +0 -53
- package/template/node_modules/autoprefixer/lib/hacks/flex-grow.js +0 -30
- package/template/node_modules/autoprefixer/lib/hacks/flex-shrink.js +0 -39
- package/template/node_modules/autoprefixer/lib/hacks/flex-spec.js +0 -19
- package/template/node_modules/autoprefixer/lib/hacks/flex-wrap.js +0 -19
- package/template/node_modules/autoprefixer/lib/hacks/flex.js +0 -54
- package/template/node_modules/autoprefixer/lib/hacks/fullscreen.js +0 -20
- package/template/node_modules/autoprefixer/lib/hacks/gradient.js +0 -447
- package/template/node_modules/autoprefixer/lib/hacks/grid-area.js +0 -34
- package/template/node_modules/autoprefixer/lib/hacks/grid-column-align.js +0 -28
- package/template/node_modules/autoprefixer/lib/hacks/grid-end.js +0 -52
- package/template/node_modules/autoprefixer/lib/hacks/grid-row-align.js +0 -28
- package/template/node_modules/autoprefixer/lib/hacks/grid-row-column.js +0 -33
- package/template/node_modules/autoprefixer/lib/hacks/grid-rows-columns.js +0 -125
- package/template/node_modules/autoprefixer/lib/hacks/grid-start.js +0 -33
- package/template/node_modules/autoprefixer/lib/hacks/grid-template-areas.js +0 -84
- package/template/node_modules/autoprefixer/lib/hacks/grid-template.js +0 -69
- package/template/node_modules/autoprefixer/lib/hacks/grid-utils.js +0 -1117
- package/template/node_modules/autoprefixer/lib/hacks/image-rendering.js +0 -48
- package/template/node_modules/autoprefixer/lib/hacks/image-set.js +0 -18
- package/template/node_modules/autoprefixer/lib/hacks/inline-logical.js +0 -34
- package/template/node_modules/autoprefixer/lib/hacks/intrinsic.js +0 -61
- package/template/node_modules/autoprefixer/lib/hacks/justify-content.js +0 -54
- package/template/node_modules/autoprefixer/lib/hacks/mask-border.js +0 -38
- package/template/node_modules/autoprefixer/lib/hacks/mask-composite.js +0 -88
- package/template/node_modules/autoprefixer/lib/hacks/order.js +0 -42
- package/template/node_modules/autoprefixer/lib/hacks/overscroll-behavior.js +0 -33
- package/template/node_modules/autoprefixer/lib/hacks/pixelated.js +0 -34
- package/template/node_modules/autoprefixer/lib/hacks/place-self.js +0 -32
- package/template/node_modules/autoprefixer/lib/hacks/placeholder-shown.js +0 -19
- package/template/node_modules/autoprefixer/lib/hacks/placeholder.js +0 -33
- package/template/node_modules/autoprefixer/lib/hacks/print-color-adjust.js +0 -25
- package/template/node_modules/autoprefixer/lib/hacks/text-decoration-skip-ink.js +0 -23
- package/template/node_modules/autoprefixer/lib/hacks/text-decoration.js +0 -25
- package/template/node_modules/autoprefixer/lib/hacks/text-emphasis-position.js +0 -14
- package/template/node_modules/autoprefixer/lib/hacks/transform-decl.js +0 -79
- package/template/node_modules/autoprefixer/lib/hacks/user-select.js +0 -33
- package/template/node_modules/autoprefixer/lib/hacks/writing-mode.js +0 -42
- package/template/node_modules/autoprefixer/lib/info.js +0 -123
- package/template/node_modules/autoprefixer/lib/old-selector.js +0 -67
- package/template/node_modules/autoprefixer/lib/old-value.js +0 -22
- package/template/node_modules/autoprefixer/lib/prefixer.js +0 -144
- package/template/node_modules/autoprefixer/lib/prefixes.js +0 -428
- package/template/node_modules/autoprefixer/lib/processor.js +0 -709
- package/template/node_modules/autoprefixer/lib/resolution.js +0 -97
- package/template/node_modules/autoprefixer/lib/selector.js +0 -150
- package/template/node_modules/autoprefixer/lib/supports.js +0 -302
- package/template/node_modules/autoprefixer/lib/transition.js +0 -329
- package/template/node_modules/autoprefixer/lib/utils.js +0 -93
- package/template/node_modules/autoprefixer/lib/value.js +0 -125
- package/template/node_modules/autoprefixer/lib/vendor.js +0 -14
- package/template/node_modules/autoprefixer/node_modules/.bin/autoprefixer +0 -21
- package/template/node_modules/autoprefixer/node_modules/.bin/browserslist +0 -21
- package/template/node_modules/autoprefixer/package.json +0 -48
- package/template/node_modules/postcss/LICENSE +0 -20
- package/template/node_modules/postcss/README.md +0 -29
- package/template/node_modules/postcss/lib/at-rule.d.ts +0 -140
- package/template/node_modules/postcss/lib/at-rule.js +0 -25
- package/template/node_modules/postcss/lib/comment.d.ts +0 -68
- package/template/node_modules/postcss/lib/comment.js +0 -13
- package/template/node_modules/postcss/lib/container.d.ts +0 -483
- package/template/node_modules/postcss/lib/container.js +0 -447
- package/template/node_modules/postcss/lib/css-syntax-error.d.ts +0 -248
- package/template/node_modules/postcss/lib/css-syntax-error.js +0 -133
- package/template/node_modules/postcss/lib/declaration.d.ts +0 -151
- package/template/node_modules/postcss/lib/declaration.js +0 -24
- package/template/node_modules/postcss/lib/document.d.ts +0 -69
- package/template/node_modules/postcss/lib/document.js +0 -33
- package/template/node_modules/postcss/lib/fromJSON.d.ts +0 -9
- package/template/node_modules/postcss/lib/fromJSON.js +0 -54
- package/template/node_modules/postcss/lib/input.d.ts +0 -227
- package/template/node_modules/postcss/lib/input.js +0 -265
- package/template/node_modules/postcss/lib/lazy-result.d.ts +0 -190
- package/template/node_modules/postcss/lib/lazy-result.js +0 -550
- package/template/node_modules/postcss/lib/list.d.ts +0 -60
- package/template/node_modules/postcss/lib/list.js +0 -58
- package/template/node_modules/postcss/lib/map-generator.js +0 -368
- package/template/node_modules/postcss/lib/no-work-result.d.ts +0 -46
- package/template/node_modules/postcss/lib/no-work-result.js +0 -138
- package/template/node_modules/postcss/lib/node.d.ts +0 -556
- package/template/node_modules/postcss/lib/node.js +0 -449
- package/template/node_modules/postcss/lib/parse.d.ts +0 -9
- package/template/node_modules/postcss/lib/parse.js +0 -42
- package/template/node_modules/postcss/lib/parser.js +0 -611
- package/template/node_modules/postcss/lib/postcss.d.mts +0 -69
- package/template/node_modules/postcss/lib/postcss.d.ts +0 -458
- package/template/node_modules/postcss/lib/postcss.js +0 -101
- package/template/node_modules/postcss/lib/postcss.mjs +0 -30
- package/template/node_modules/postcss/lib/previous-map.d.ts +0 -81
- package/template/node_modules/postcss/lib/previous-map.js +0 -144
- package/template/node_modules/postcss/lib/processor.d.ts +0 -115
- package/template/node_modules/postcss/lib/processor.js +0 -67
- package/template/node_modules/postcss/lib/result.d.ts +0 -205
- package/template/node_modules/postcss/lib/result.js +0 -42
- package/template/node_modules/postcss/lib/root.d.ts +0 -87
- package/template/node_modules/postcss/lib/root.js +0 -61
- package/template/node_modules/postcss/lib/rule.d.ts +0 -126
- package/template/node_modules/postcss/lib/rule.js +0 -27
- package/template/node_modules/postcss/lib/stringifier.d.ts +0 -46
- package/template/node_modules/postcss/lib/stringifier.js +0 -353
- package/template/node_modules/postcss/lib/stringify.d.ts +0 -9
- package/template/node_modules/postcss/lib/stringify.js +0 -11
- package/template/node_modules/postcss/lib/symbols.js +0 -5
- package/template/node_modules/postcss/lib/terminal-highlight.js +0 -70
- package/template/node_modules/postcss/lib/tokenize.js +0 -266
- package/template/node_modules/postcss/lib/warn-once.js +0 -13
- package/template/node_modules/postcss/lib/warning.d.ts +0 -147
- package/template/node_modules/postcss/lib/warning.js +0 -37
- package/template/node_modules/postcss/node_modules/.bin/nanoid +0 -21
- package/template/node_modules/postcss/package.json +0 -88
- package/template/tailwind.config.ts +0 -13
- /package/template/node_modules/@tailwindcss/{postcss → vite}/LICENSE +0 -0
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
let FractionJs = require('fraction.js')
|
|
2
|
-
|
|
3
|
-
let Prefixer = require('./prefixer')
|
|
4
|
-
let utils = require('./utils')
|
|
5
|
-
|
|
6
|
-
const REGEXP = /(min|max)-resolution\s*:\s*\d*\.?\d+(dppx|dpcm|dpi|x)/gi
|
|
7
|
-
const SPLIT = /(min|max)-resolution(\s*:\s*)(\d*\.?\d+)(dppx|dpcm|dpi|x)/i
|
|
8
|
-
|
|
9
|
-
class Resolution extends Prefixer {
|
|
10
|
-
/**
|
|
11
|
-
* Remove prefixed queries
|
|
12
|
-
*/
|
|
13
|
-
clean(rule) {
|
|
14
|
-
if (!this.bad) {
|
|
15
|
-
this.bad = []
|
|
16
|
-
for (let prefix of this.prefixes) {
|
|
17
|
-
this.bad.push(this.prefixName(prefix, 'min'))
|
|
18
|
-
this.bad.push(this.prefixName(prefix, 'max'))
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
rule.params = utils.editList(rule.params, queries => {
|
|
23
|
-
return queries.filter(query => this.bad.every(i => !query.includes(i)))
|
|
24
|
-
})
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Return prefixed query name
|
|
29
|
-
*/
|
|
30
|
-
prefixName(prefix, name) {
|
|
31
|
-
if (prefix === '-moz-') {
|
|
32
|
-
return name + '--moz-device-pixel-ratio'
|
|
33
|
-
} else {
|
|
34
|
-
return prefix + name + '-device-pixel-ratio'
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Return prefixed query
|
|
40
|
-
*/
|
|
41
|
-
prefixQuery(prefix, name, colon, value, units) {
|
|
42
|
-
value = new FractionJs(value)
|
|
43
|
-
|
|
44
|
-
// 1dpcm = 2.54dpi
|
|
45
|
-
// 1dppx = 96dpi
|
|
46
|
-
if (units === 'dpi') {
|
|
47
|
-
value = value.div(96)
|
|
48
|
-
} else if (units === 'dpcm') {
|
|
49
|
-
value = value.mul(2.54).div(96)
|
|
50
|
-
}
|
|
51
|
-
value = value.simplify()
|
|
52
|
-
|
|
53
|
-
if (prefix === '-o-') {
|
|
54
|
-
value = value.n + '/' + value.d
|
|
55
|
-
}
|
|
56
|
-
return this.prefixName(prefix, name) + colon + value
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Add prefixed queries
|
|
61
|
-
*/
|
|
62
|
-
process(rule) {
|
|
63
|
-
let parent = this.parentPrefix(rule)
|
|
64
|
-
let prefixes = parent ? [parent] : this.prefixes
|
|
65
|
-
|
|
66
|
-
rule.params = utils.editList(rule.params, (origin, prefixed) => {
|
|
67
|
-
for (let query of origin) {
|
|
68
|
-
if (
|
|
69
|
-
!query.includes('min-resolution') &&
|
|
70
|
-
!query.includes('max-resolution')
|
|
71
|
-
) {
|
|
72
|
-
prefixed.push(query)
|
|
73
|
-
continue
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
for (let prefix of prefixes) {
|
|
77
|
-
let processed = query.replace(REGEXP, str => {
|
|
78
|
-
let parts = str.match(SPLIT)
|
|
79
|
-
return this.prefixQuery(
|
|
80
|
-
prefix,
|
|
81
|
-
parts[1],
|
|
82
|
-
parts[2],
|
|
83
|
-
parts[3],
|
|
84
|
-
parts[4]
|
|
85
|
-
)
|
|
86
|
-
})
|
|
87
|
-
prefixed.push(processed)
|
|
88
|
-
}
|
|
89
|
-
prefixed.push(query)
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
return utils.uniq(prefixed)
|
|
93
|
-
})
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
module.exports = Resolution
|
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
let { list } = require('postcss')
|
|
2
|
-
|
|
3
|
-
let Browsers = require('./browsers')
|
|
4
|
-
let OldSelector = require('./old-selector')
|
|
5
|
-
let Prefixer = require('./prefixer')
|
|
6
|
-
let utils = require('./utils')
|
|
7
|
-
|
|
8
|
-
class Selector extends Prefixer {
|
|
9
|
-
constructor(name, prefixes, all) {
|
|
10
|
-
super(name, prefixes, all)
|
|
11
|
-
this.regexpCache = new Map()
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Clone and add prefixes for at-rule
|
|
16
|
-
*/
|
|
17
|
-
add(rule, prefix) {
|
|
18
|
-
let prefixeds = this.prefixeds(rule)
|
|
19
|
-
|
|
20
|
-
if (this.already(rule, prefixeds, prefix)) {
|
|
21
|
-
return
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
let cloned = this.clone(rule, { selector: prefixeds[this.name][prefix] })
|
|
25
|
-
rule.parent.insertBefore(rule, cloned)
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Is rule already prefixed before
|
|
30
|
-
*/
|
|
31
|
-
already(rule, prefixeds, prefix) {
|
|
32
|
-
let index = rule.parent.index(rule) - 1
|
|
33
|
-
|
|
34
|
-
while (index >= 0) {
|
|
35
|
-
let before = rule.parent.nodes[index]
|
|
36
|
-
|
|
37
|
-
if (before.type !== 'rule') {
|
|
38
|
-
return false
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
let some = false
|
|
42
|
-
for (let key in prefixeds[this.name]) {
|
|
43
|
-
let prefixed = prefixeds[this.name][key]
|
|
44
|
-
if (before.selector === prefixed) {
|
|
45
|
-
if (prefix === key) {
|
|
46
|
-
return true
|
|
47
|
-
} else {
|
|
48
|
-
some = true
|
|
49
|
-
break
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
if (!some) {
|
|
54
|
-
return false
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
index -= 1
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
return false
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* Is rule selectors need to be prefixed
|
|
65
|
-
*/
|
|
66
|
-
check(rule) {
|
|
67
|
-
if (rule.selector.includes(this.name)) {
|
|
68
|
-
return !!rule.selector.match(this.regexp())
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
return false
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* Return function to fast find prefixed selector
|
|
76
|
-
*/
|
|
77
|
-
old(prefix) {
|
|
78
|
-
return new OldSelector(this, prefix)
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* All possible prefixes
|
|
83
|
-
*/
|
|
84
|
-
possible() {
|
|
85
|
-
return Browsers.prefixes()
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Return prefixed version of selector
|
|
90
|
-
*/
|
|
91
|
-
prefixed(prefix) {
|
|
92
|
-
return this.name.replace(/^(\W*)/, `$1${prefix}`)
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* Return all possible selector prefixes
|
|
97
|
-
*/
|
|
98
|
-
prefixeds(rule) {
|
|
99
|
-
if (rule._autoprefixerPrefixeds) {
|
|
100
|
-
if (rule._autoprefixerPrefixeds[this.name]) {
|
|
101
|
-
return rule._autoprefixerPrefixeds
|
|
102
|
-
}
|
|
103
|
-
} else {
|
|
104
|
-
rule._autoprefixerPrefixeds = {}
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
let prefixeds = {}
|
|
108
|
-
if (rule.selector.includes(',')) {
|
|
109
|
-
let ruleParts = list.comma(rule.selector)
|
|
110
|
-
let toProcess = ruleParts.filter(el => el.includes(this.name))
|
|
111
|
-
|
|
112
|
-
for (let prefix of this.possible()) {
|
|
113
|
-
prefixeds[prefix] = toProcess
|
|
114
|
-
.map(el => this.replace(el, prefix))
|
|
115
|
-
.join(', ')
|
|
116
|
-
}
|
|
117
|
-
} else {
|
|
118
|
-
for (let prefix of this.possible()) {
|
|
119
|
-
prefixeds[prefix] = this.replace(rule.selector, prefix)
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
rule._autoprefixerPrefixeds[this.name] = prefixeds
|
|
124
|
-
return rule._autoprefixerPrefixeds
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
/**
|
|
128
|
-
* Lazy loadRegExp for name
|
|
129
|
-
*/
|
|
130
|
-
regexp(prefix) {
|
|
131
|
-
if (!this.regexpCache.has(prefix)) {
|
|
132
|
-
let name = prefix ? this.prefixed(prefix) : this.name
|
|
133
|
-
this.regexpCache.set(
|
|
134
|
-
prefix,
|
|
135
|
-
new RegExp(`(^|[^:"'=])${utils.escapeRegexp(name)}`, 'gi')
|
|
136
|
-
)
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
return this.regexpCache.get(prefix)
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
/**
|
|
143
|
-
* Replace selectors by prefixed one
|
|
144
|
-
*/
|
|
145
|
-
replace(selector, prefix) {
|
|
146
|
-
return selector.replace(this.regexp(), `$1${this.prefixed(prefix)}`)
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
module.exports = Selector
|
|
@@ -1,302 +0,0 @@
|
|
|
1
|
-
let featureQueries = require('caniuse-lite/data/features/css-featurequeries.js')
|
|
2
|
-
let feature = require('caniuse-lite/dist/unpacker/feature')
|
|
3
|
-
let { parse } = require('postcss')
|
|
4
|
-
|
|
5
|
-
let brackets = require('./brackets')
|
|
6
|
-
let Browsers = require('./browsers')
|
|
7
|
-
let utils = require('./utils')
|
|
8
|
-
let Value = require('./value')
|
|
9
|
-
|
|
10
|
-
let data = feature(featureQueries)
|
|
11
|
-
|
|
12
|
-
let supported = []
|
|
13
|
-
for (let browser in data.stats) {
|
|
14
|
-
let versions = data.stats[browser]
|
|
15
|
-
for (let version in versions) {
|
|
16
|
-
let support = versions[version]
|
|
17
|
-
if (/y/.test(support)) {
|
|
18
|
-
supported.push(browser + ' ' + version)
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
class Supports {
|
|
24
|
-
constructor(Prefixes, all) {
|
|
25
|
-
this.Prefixes = Prefixes
|
|
26
|
-
this.all = all
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Add prefixes
|
|
31
|
-
*/
|
|
32
|
-
add(nodes, all) {
|
|
33
|
-
return nodes.map(i => {
|
|
34
|
-
if (this.isProp(i)) {
|
|
35
|
-
let prefixed = this.prefixed(i[0])
|
|
36
|
-
if (prefixed.length > 1) {
|
|
37
|
-
return this.convert(prefixed)
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
return i
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
if (typeof i === 'object') {
|
|
44
|
-
return this.add(i, all)
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
return i
|
|
48
|
-
})
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Clean brackets with one child
|
|
53
|
-
*/
|
|
54
|
-
cleanBrackets(nodes) {
|
|
55
|
-
return nodes.map(i => {
|
|
56
|
-
if (typeof i !== 'object') {
|
|
57
|
-
return i
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
if (i.length === 1 && typeof i[0] === 'object') {
|
|
61
|
-
return this.cleanBrackets(i[0])
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
return this.cleanBrackets(i)
|
|
65
|
-
})
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Add " or " between properties and convert it to brackets format
|
|
70
|
-
*/
|
|
71
|
-
convert(progress) {
|
|
72
|
-
let result = ['']
|
|
73
|
-
for (let i of progress) {
|
|
74
|
-
result.push([`${i.prop}: ${i.value}`])
|
|
75
|
-
result.push(' or ')
|
|
76
|
-
}
|
|
77
|
-
result[result.length - 1] = ''
|
|
78
|
-
return result
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* Check global options
|
|
83
|
-
*/
|
|
84
|
-
disabled(node) {
|
|
85
|
-
if (!this.all.options.grid) {
|
|
86
|
-
if (node.prop === 'display' && node.value.includes('grid')) {
|
|
87
|
-
return true
|
|
88
|
-
}
|
|
89
|
-
if (node.prop.includes('grid') || node.prop === 'justify-items') {
|
|
90
|
-
return true
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
if (this.all.options.flexbox === false) {
|
|
95
|
-
if (node.prop === 'display' && node.value.includes('flex')) {
|
|
96
|
-
return true
|
|
97
|
-
}
|
|
98
|
-
let other = ['order', 'justify-content', 'align-items', 'align-content']
|
|
99
|
-
if (node.prop.includes('flex') || other.includes(node.prop)) {
|
|
100
|
-
return true
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
return false
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* Return true if prefixed property has no unprefixed
|
|
109
|
-
*/
|
|
110
|
-
isHack(all, unprefixed) {
|
|
111
|
-
let check = new RegExp(`(\\(|\\s)${utils.escapeRegexp(unprefixed)}:`)
|
|
112
|
-
return !check.test(all)
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
/**
|
|
116
|
-
* Return true if brackets node is "not" word
|
|
117
|
-
*/
|
|
118
|
-
isNot(node) {
|
|
119
|
-
return typeof node === 'string' && /not\s*/i.test(node)
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
* Return true if brackets node is "or" word
|
|
124
|
-
*/
|
|
125
|
-
isOr(node) {
|
|
126
|
-
return typeof node === 'string' && /\s*or\s*/i.test(node)
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
/**
|
|
130
|
-
* Return true if brackets node is (prop: value)
|
|
131
|
-
*/
|
|
132
|
-
isProp(node) {
|
|
133
|
-
return (
|
|
134
|
-
typeof node === 'object' &&
|
|
135
|
-
node.length === 1 &&
|
|
136
|
-
typeof node[0] === 'string'
|
|
137
|
-
)
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
/**
|
|
141
|
-
* Compress value functions into a string nodes
|
|
142
|
-
*/
|
|
143
|
-
normalize(nodes) {
|
|
144
|
-
if (typeof nodes !== 'object') {
|
|
145
|
-
return nodes
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
nodes = nodes.filter(i => i !== '')
|
|
149
|
-
|
|
150
|
-
if (typeof nodes[0] === 'string') {
|
|
151
|
-
let firstNode = nodes[0].trim()
|
|
152
|
-
|
|
153
|
-
if (
|
|
154
|
-
firstNode.includes(':') ||
|
|
155
|
-
firstNode === 'selector' ||
|
|
156
|
-
firstNode === 'not selector'
|
|
157
|
-
) {
|
|
158
|
-
return [brackets.stringify(nodes)]
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
return nodes.map(i => this.normalize(i))
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
/**
|
|
165
|
-
* Parse string into declaration property and value
|
|
166
|
-
*/
|
|
167
|
-
parse(str) {
|
|
168
|
-
let parts = str.split(':')
|
|
169
|
-
let prop = parts[0]
|
|
170
|
-
let value = parts[1]
|
|
171
|
-
if (!value) value = ''
|
|
172
|
-
return [prop.trim(), value.trim()]
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
/**
|
|
176
|
-
* Return array of Declaration with all necessary prefixes
|
|
177
|
-
*/
|
|
178
|
-
prefixed(str) {
|
|
179
|
-
let rule = this.virtual(str)
|
|
180
|
-
if (this.disabled(rule.first)) {
|
|
181
|
-
return rule.nodes
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
let result = { warn: () => null }
|
|
185
|
-
|
|
186
|
-
let prefixer = this.prefixer().add[rule.first.prop]
|
|
187
|
-
prefixer && prefixer.process && prefixer.process(rule.first, result)
|
|
188
|
-
|
|
189
|
-
for (let decl of rule.nodes) {
|
|
190
|
-
for (let value of this.prefixer().values('add', rule.first.prop)) {
|
|
191
|
-
value.process(decl)
|
|
192
|
-
}
|
|
193
|
-
Value.save(this.all, decl)
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
return rule.nodes
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
/**
|
|
200
|
-
* Return prefixer only with @supports supported browsers
|
|
201
|
-
*/
|
|
202
|
-
prefixer() {
|
|
203
|
-
if (this.prefixerCache) {
|
|
204
|
-
return this.prefixerCache
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
let filtered = this.all.browsers.selected.filter(i => {
|
|
208
|
-
return supported.includes(i)
|
|
209
|
-
})
|
|
210
|
-
|
|
211
|
-
let browsers = new Browsers(
|
|
212
|
-
this.all.browsers.data,
|
|
213
|
-
filtered,
|
|
214
|
-
this.all.options
|
|
215
|
-
)
|
|
216
|
-
this.prefixerCache = new this.Prefixes(
|
|
217
|
-
this.all.data,
|
|
218
|
-
browsers,
|
|
219
|
-
this.all.options
|
|
220
|
-
)
|
|
221
|
-
return this.prefixerCache
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
/**
|
|
225
|
-
* Add prefixed declaration
|
|
226
|
-
*/
|
|
227
|
-
process(rule) {
|
|
228
|
-
let ast = brackets.parse(rule.params)
|
|
229
|
-
ast = this.normalize(ast)
|
|
230
|
-
ast = this.remove(ast, rule.params)
|
|
231
|
-
ast = this.add(ast, rule.params)
|
|
232
|
-
ast = this.cleanBrackets(ast)
|
|
233
|
-
rule.params = brackets.stringify(ast)
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
/**
|
|
237
|
-
* Remove all unnecessary prefixes
|
|
238
|
-
*/
|
|
239
|
-
remove(nodes, all) {
|
|
240
|
-
let i = 0
|
|
241
|
-
while (i < nodes.length) {
|
|
242
|
-
if (
|
|
243
|
-
!this.isNot(nodes[i - 1]) &&
|
|
244
|
-
this.isProp(nodes[i]) &&
|
|
245
|
-
this.isOr(nodes[i + 1])
|
|
246
|
-
) {
|
|
247
|
-
if (this.toRemove(nodes[i][0], all)) {
|
|
248
|
-
nodes.splice(i, 2)
|
|
249
|
-
continue
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
i += 2
|
|
253
|
-
continue
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
if (typeof nodes[i] === 'object') {
|
|
257
|
-
nodes[i] = this.remove(nodes[i], all)
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
i += 1
|
|
261
|
-
}
|
|
262
|
-
return nodes
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
/**
|
|
266
|
-
* Return true if we need to remove node
|
|
267
|
-
*/
|
|
268
|
-
toRemove(str, all) {
|
|
269
|
-
let [prop, value] = this.parse(str)
|
|
270
|
-
let unprefixed = this.all.unprefixed(prop)
|
|
271
|
-
|
|
272
|
-
let cleaner = this.all.cleaner()
|
|
273
|
-
|
|
274
|
-
if (
|
|
275
|
-
cleaner.remove[prop] &&
|
|
276
|
-
cleaner.remove[prop].remove &&
|
|
277
|
-
!this.isHack(all, unprefixed)
|
|
278
|
-
) {
|
|
279
|
-
return true
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
for (let checker of cleaner.values('remove', unprefixed)) {
|
|
283
|
-
if (checker.check(value)) {
|
|
284
|
-
return true
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
return false
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
/**
|
|
292
|
-
* Create virtual rule to process it by prefixer
|
|
293
|
-
*/
|
|
294
|
-
virtual(str) {
|
|
295
|
-
let [prop, value] = this.parse(str)
|
|
296
|
-
let rule = parse('a{}').first
|
|
297
|
-
rule.append({ prop, raws: { before: '' }, value })
|
|
298
|
-
return rule
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
module.exports = Supports
|