astro-ghostcms/.pnpm-store/v3/files/dd/fbd67453218ad037bb9e5bb89ea...

66 lines
1.6 KiB
Plaintext

import {
NONE,
AUTO,
NUMBER,
LENGTH,
UNSUPPORTED_LENGTH_UNIT,
PERCENT,
SPACE,
} from '../tokenTypes'
const defaultFlexGrow = 1
const defaultFlexShrink = 1
const defaultFlexBasis = 0
export default tokenStream => {
let flexGrow
let flexShrink
let flexBasis
if (tokenStream.matches(NONE)) {
tokenStream.expectEmpty()
return { flexGrow: 0, flexShrink: 0, flexBasis: 'auto' }
}
tokenStream.saveRewindPoint()
if (tokenStream.matches(AUTO) && !tokenStream.hasTokens()) {
return { flexGrow: 1, flexShrink: 1, flexBasis: 'auto' }
}
tokenStream.rewind()
let partsParsed = 0
while (partsParsed < 2 && tokenStream.hasTokens()) {
if (partsParsed !== 0) tokenStream.expect(SPACE)
if (flexGrow === undefined && tokenStream.matches(NUMBER)) {
flexGrow = tokenStream.lastValue
tokenStream.saveRewindPoint()
if (tokenStream.matches(SPACE) && tokenStream.matches(NUMBER)) {
flexShrink = tokenStream.lastValue
} else {
tokenStream.rewind()
}
} else if (
flexBasis === undefined &&
tokenStream.matches(LENGTH, UNSUPPORTED_LENGTH_UNIT, PERCENT)
) {
flexBasis = tokenStream.lastValue
} else if (flexBasis === undefined && tokenStream.matches(AUTO)) {
flexBasis = 'auto'
} else {
tokenStream.throw()
}
partsParsed += 1
}
tokenStream.expectEmpty()
if (flexGrow === undefined) flexGrow = defaultFlexGrow
if (flexShrink === undefined) flexShrink = defaultFlexShrink
if (flexBasis === undefined) flexBasis = defaultFlexBasis
return { flexGrow, flexShrink, flexBasis }
}