This commit is contained in:
Henry Jameson 2024-09-19 20:37:14 +03:00
commit af3b2e3dc9
3 changed files with 117 additions and 4 deletions

View file

@ -1,3 +1,43 @@
export const deserializer (string) {
let level = 0
// this works nearly the same as HTML tree converter
export const deserialize = (input) => {
const buffer = []
let textBuffer = ''
const getCurrentBuffer = () => {
let current = buffer[buffer.length - 1][1]
if (current == null) {
current = { name: null, content: [] }
}
buffer.push(current)
return current
}
// Processes current line buffer, adds it to output buffer and clears line buffer
const flushText = (content) => {
if (textBuffer === '') return
if (content) {
getCurrentBuffer().content.push(textBuffer)
} else {
getCurrentBuffer().name = textBuffer
}
textBuffer = ''
}
for (let i = 0; i < input.length; i++) {
const char = input[i]
if (char === ';') {
flushText(true)
} else if (char === '{') {
flushText(false)
} else if (char === '}') {
buffer.push({ name: null, content: [] })
textBuffer = ''
} else {
textBuffer += char
}
}
flushText()
return buffer
}

View file

@ -23,6 +23,9 @@ import {
findRules
} from './iss_utils.js'
import { parseCssShadow } from './css_utils.js'
import {
serialize
} from './iss_serializer.js'
// Ensuring the order of components
const components = {
@ -504,9 +507,32 @@ export const init = ({
console.debug('Eager processing took ' + (t2 - t1) + ' ms')
}
// optimization to traverse big-ass array only once instead of twice
const eager = []
const lazy = []
result.forEach(x => {
if (typeof x === 'function') {
lazy.push(x)
} else {
eager.push(x)
}
})
const serializedData = serialize(eager)
const file = new File(serializedData, 'ruleset.piss')
const blobUrl = URL.createObjectURL(file)
const a = document.createElement('a')
a.href = blobUrl
a.download = 'ruleset.piss'
document.body.appendChild(a)
a.dispatchEvent(new MouseEvent('click'))
URL.revokeObjectURL(blobUrl)
document.body.removeChild(a)
return {
lazy: result.filter(x => typeof x === 'function'),
eager: result.filter(x => typeof x !== 'function'),
lazy,
eager,
staticVars,
engineChecksum
}