d975cc371d
modified: node_modules/.package-lock.json deleted: node_modules/array-union/index.d.ts deleted: node_modules/array-union/index.js deleted: node_modules/array-union/license deleted: node_modules/array-union/package.json deleted: node_modules/array-union/readme.md modified: node_modules/cliui/CHANGELOG.md modified: node_modules/cliui/package.json modified: node_modules/fast-glob/out/index.d.ts modified: node_modules/fast-glob/out/index.js modified: node_modules/fast-glob/out/managers/patterns.d.ts modified: node_modules/fast-glob/out/managers/patterns.js modified: node_modules/fast-glob/out/managers/tasks.d.ts modified: node_modules/fast-glob/out/managers/tasks.js modified: node_modules/fast-glob/out/providers/async.d.ts modified: node_modules/fast-glob/out/providers/async.js modified: node_modules/fast-glob/out/providers/filters/deep.d.ts modified: node_modules/fast-glob/out/providers/filters/deep.js modified: node_modules/fast-glob/out/providers/filters/entry.d.ts modified: node_modules/fast-glob/out/providers/filters/entry.js modified: node_modules/fast-glob/out/providers/filters/error.d.ts modified: node_modules/fast-glob/out/providers/filters/error.js modified: node_modules/fast-glob/out/providers/matchers/matcher.d.ts modified: node_modules/fast-glob/out/providers/matchers/matcher.js modified: node_modules/fast-glob/out/providers/matchers/partial.d.ts modified: node_modules/fast-glob/out/providers/matchers/partial.js modified: node_modules/fast-glob/out/providers/provider.d.ts modified: node_modules/fast-glob/out/providers/provider.js modified: node_modules/fast-glob/out/providers/stream.d.ts modified: node_modules/fast-glob/out/providers/stream.js modified: node_modules/fast-glob/out/providers/sync.d.ts modified: node_modules/fast-glob/out/providers/sync.js modified: node_modules/fast-glob/out/providers/transformers/entry.d.ts modified: node_modules/fast-glob/out/providers/transformers/entry.js modified: node_modules/fast-glob/out/readers/reader.d.ts modified: node_modules/fast-glob/out/readers/reader.js modified: node_modules/fast-glob/out/readers/stream.d.ts modified: node_modules/fast-glob/out/readers/stream.js modified: node_modules/fast-glob/out/readers/sync.d.ts modified: node_modules/fast-glob/out/readers/sync.js modified: node_modules/fast-glob/out/settings.d.ts modified: node_modules/fast-glob/out/settings.js modified: node_modules/fast-glob/out/types/index.d.ts modified: node_modules/fast-glob/out/types/index.js modified: node_modules/fast-glob/out/utils/array.d.ts modified: node_modules/fast-glob/out/utils/array.js modified: node_modules/fast-glob/out/utils/errno.d.ts modified: node_modules/fast-glob/out/utils/errno.js modified: node_modules/fast-glob/out/utils/fs.d.ts modified: node_modules/fast-glob/out/utils/fs.js modified: node_modules/fast-glob/out/utils/index.d.ts modified: node_modules/fast-glob/out/utils/index.js modified: node_modules/fast-glob/out/utils/path.d.ts modified: node_modules/fast-glob/out/utils/path.js modified: node_modules/fast-glob/out/utils/pattern.d.ts modified: node_modules/fast-glob/out/utils/pattern.js modified: node_modules/fast-glob/out/utils/stream.d.ts modified: node_modules/fast-glob/out/utils/stream.js modified: node_modules/fast-glob/out/utils/string.d.ts modified: node_modules/fast-glob/out/utils/string.js modified: node_modules/fast-glob/package.json modified: node_modules/fastq/README.md modified: node_modules/fastq/index.d.ts modified: node_modules/fastq/package.json modified: node_modules/fastq/queue.js modified: node_modules/fastq/test/promise.js deleted: node_modules/fs-extra/CHANGELOG.md modified: node_modules/fs-extra/README.md deleted: node_modules/fs-extra/lib/copy-sync/copy-sync.js deleted: node_modules/fs-extra/lib/copy-sync/index.js modified: node_modules/fs-extra/lib/copy/copy.js modified: node_modules/fs-extra/lib/copy/index.js modified: node_modules/fs-extra/lib/ensure/index.js modified: node_modules/fs-extra/lib/fs/index.js modified: node_modules/fs-extra/lib/index.js modified: node_modules/fs-extra/lib/json/output-json-sync.js modified: node_modules/fs-extra/lib/json/output-json.js deleted: node_modules/fs-extra/lib/move-sync/index.js deleted: node_modules/fs-extra/lib/move-sync/move-sync.js modified: node_modules/fs-extra/lib/move/index.js modified: node_modules/fs-extra/lib/move/move.js deleted: node_modules/fs-extra/lib/output/index.js modified: node_modules/fs-extra/lib/remove/index.js deleted: node_modules/fs-extra/lib/remove/rimraf.js modified: node_modules/fs-extra/package.json deleted: node_modules/globby/gitignore.js modified: node_modules/globby/index.d.ts modified: node_modules/globby/index.js modified: node_modules/globby/package.json modified: node_modules/globby/readme.md deleted: node_modules/globby/stream-utils.js deleted: node_modules/globby/to-path.js modified: node_modules/graceful-fs/LICENSE modified: node_modules/graceful-fs/graceful-fs.js modified: node_modules/graceful-fs/package.json modified: node_modules/graceful-fs/polyfills.js modified: node_modules/ignore/README.md modified: node_modules/ignore/index.js modified: node_modules/ignore/legacy.js modified: node_modules/ignore/package.json modified: node_modules/lilconfig/dist/index.js modified: node_modules/lilconfig/package.json modified: node_modules/lilconfig/readme.md deleted: node_modules/micromatch/CHANGELOG.md modified: node_modules/micromatch/README.md modified: node_modules/micromatch/index.js modified: node_modules/micromatch/package.json modified: node_modules/nanoid/bin/nanoid.cjs modified: node_modules/nanoid/index.browser.cjs modified: node_modules/nanoid/index.browser.js deleted: node_modules/nanoid/index.dev.js deleted: node_modules/nanoid/index.prod.js modified: node_modules/nanoid/nanoid.js modified: node_modules/nanoid/package.json modified: node_modules/postcss-cli/index.js modified: node_modules/postcss-cli/package.json modified: node_modules/postcss-load-config/README.md modified: node_modules/postcss-load-config/package.json modified: node_modules/postcss-load-config/src/index.d.ts modified: node_modules/postcss-load-config/src/index.js modified: node_modules/postcss-load-config/src/req.js modified: node_modules/postcss/README.md modified: node_modules/postcss/lib/at-rule.d.ts modified: node_modules/postcss/lib/comment.d.ts modified: node_modules/postcss/lib/container.d.ts modified: node_modules/postcss/lib/container.js modified: node_modules/postcss/lib/css-syntax-error.d.ts modified: node_modules/postcss/lib/declaration.d.ts modified: node_modules/postcss/lib/document.d.ts modified: node_modules/postcss/lib/fromJSON.d.ts modified: node_modules/postcss/lib/input.d.ts modified: node_modules/postcss/lib/input.js modified: node_modules/postcss/lib/lazy-result.d.ts modified: node_modules/postcss/lib/list.d.ts modified: node_modules/postcss/lib/list.js modified: node_modules/postcss/lib/map-generator.js modified: node_modules/postcss/lib/no-work-result.d.ts modified: node_modules/postcss/lib/node.d.ts modified: node_modules/postcss/lib/parse.d.ts modified: node_modules/postcss/lib/parser.js modified: node_modules/postcss/lib/postcss.d.ts modified: node_modules/postcss/lib/postcss.js modified: node_modules/postcss/lib/previous-map.d.ts modified: node_modules/postcss/lib/processor.d.ts modified: node_modules/postcss/lib/processor.js modified: node_modules/postcss/lib/result.d.ts modified: node_modules/postcss/lib/root.d.ts modified: node_modules/postcss/lib/root.js modified: node_modules/postcss/lib/rule.d.ts modified: node_modules/postcss/lib/stringifier.d.ts modified: node_modules/postcss/lib/stringify.d.ts modified: node_modules/postcss/lib/warning.d.ts modified: node_modules/postcss/package.json modified: node_modules/slash/index.d.ts modified: node_modules/slash/index.js modified: node_modules/slash/package.json modified: node_modules/slash/readme.md modified: node_modules/yaml/LICENSE modified: node_modules/yaml/README.md deleted: node_modules/yaml/browser/dist/PlainValue-b8036b75.js deleted: node_modules/yaml/browser/dist/Schema-e94716c8.js modified: node_modules/yaml/browser/dist/index.js deleted: node_modules/yaml/browser/dist/legacy-exports.js deleted: node_modules/yaml/browser/dist/package.json deleted: node_modules/yaml/browser/dist/parse-cst.js deleted: node_modules/yaml/browser/dist/resolveSeq-492ab440.js deleted: node_modules/yaml/browser/dist/types.js modified: node_modules/yaml/browser/dist/util.js deleted: node_modules/yaml/browser/dist/warnings-df54cb69.js modified: node_modules/yaml/browser/index.js deleted: node_modules/yaml/browser/map.js deleted: node_modules/yaml/browser/pair.js deleted: node_modules/yaml/browser/parse-cst.js deleted: node_modules/yaml/browser/scalar.js deleted: node_modules/yaml/browser/schema.js deleted: node_modules/yaml/browser/seq.js deleted: node_modules/yaml/browser/types.js deleted: node_modules/yaml/browser/types/binary.js deleted: node_modules/yaml/browser/types/omap.js deleted: node_modules/yaml/browser/types/pairs.js deleted: node_modules/yaml/browser/types/set.js deleted: node_modules/yaml/browser/types/timestamp.js deleted: node_modules/yaml/browser/util.js deleted: node_modules/yaml/dist/Document-9b4560a1.js deleted: node_modules/yaml/dist/PlainValue-ec8e588e.js deleted: node_modules/yaml/dist/Schema-88e323a7.js modified: node_modules/yaml/dist/index.js deleted: node_modules/yaml/dist/legacy-exports.js deleted: node_modules/yaml/dist/parse-cst.js deleted: node_modules/yaml/dist/resolveSeq-d03cb037.js modified: node_modules/yaml/dist/test-events.js deleted: node_modules/yaml/dist/types.js modified: node_modules/yaml/dist/util.js deleted: node_modules/yaml/dist/warnings-1000a372.js deleted: node_modules/yaml/index.d.ts deleted: node_modules/yaml/index.js deleted: node_modules/yaml/map.js modified: node_modules/yaml/package.json deleted: node_modules/yaml/pair.js deleted: node_modules/yaml/parse-cst.d.ts deleted: node_modules/yaml/parse-cst.js deleted: node_modules/yaml/scalar.js deleted: node_modules/yaml/schema.js deleted: node_modules/yaml/seq.js deleted: node_modules/yaml/types.d.ts deleted: node_modules/yaml/types.js deleted: node_modules/yaml/types.mjs deleted: node_modules/yaml/types/binary.js deleted: node_modules/yaml/types/omap.js deleted: node_modules/yaml/types/pairs.js deleted: node_modules/yaml/types/set.js deleted: node_modules/yaml/types/timestamp.js modified: node_modules/yaml/util.d.ts modified: node_modules/yaml/util.js deleted: node_modules/yaml/util.mjs modified: node_modules/yargs-parser/CHANGELOG.md modified: node_modules/yargs-parser/build/index.cjs modified: node_modules/yargs-parser/build/lib/index.js modified: node_modules/yargs-parser/build/lib/yargs-parser.js modified: node_modules/yargs-parser/package.json modified: node_modules/yargs/build/index.cjs modified: node_modules/yargs/build/lib/command.js modified: node_modules/yargs/build/lib/completion-templates.js modified: node_modules/yargs/build/lib/completion.js modified: node_modules/yargs/build/lib/usage.js modified: node_modules/yargs/build/lib/validation.js modified: node_modules/yargs/build/lib/yargs-factory.js modified: node_modules/yargs/build/lib/yerror.js modified: node_modules/yargs/lib/platform-shims/esm.mjs modified: node_modules/yargs/locales/en.json modified: node_modules/yargs/locales/fi.json modified: node_modules/yargs/locales/ru.json modified: node_modules/yargs/package.json modified: package-lock.json modified: package.json modified: public/about/index.html modified: public/access/index.html modified: public/blog/index.html modified: public/categories/index.html modified: public/index.html modified: public/manifesto/index.html modified: public/posts/apple-breaks-privacy/index.html modified: public/posts/index.html modified: public/posts/main_street_against_big_tech/index.html modified: public/posts/what_is_done_with_personal_data/index.html modified: public/projects/index.html modified: public/tags/index.html .hugo_build.lock go.mod go.sum node_modules/.bin/autoprefixer node_modules/.bin/browserslist node_modules/.bin/update-browserslist-db node_modules/autoprefixer/ node_modules/browserslist/ node_modules/caniuse-lite/ node_modules/cliui/build/index.d.cts node_modules/electron-to-chromium/ node_modules/fast-glob/out/readers/async.d.ts node_modules/fast-glob/out/readers/async.js node_modules/fraction.js/ node_modules/fs-extra/lib/copy/copy-sync.js node_modules/fs-extra/lib/esm.mjs node_modules/fs-extra/lib/move/move-sync.js node_modules/fs-extra/lib/output-file/ node_modules/globby/ignore.js node_modules/globby/node_modules/ node_modules/globby/utilities.js node_modules/lilconfig/LICENSE node_modules/node-releases/ node_modules/normalize-range/ node_modules/postcss-value-parser/ node_modules/postcss/lib/postcss.d.mts node_modules/update-browserslist-db/ node_modules/yaml/browser/dist/compose/ node_modules/yaml/browser/dist/doc/ node_modules/yaml/browser/dist/errors.js node_modules/yaml/browser/dist/log.js node_modules/yaml/browser/dist/node_modules/ node_modules/yaml/browser/dist/nodes/ node_modules/yaml/browser/dist/parse/ node_modules/yaml/browser/dist/public-api.js node_modules/yaml/browser/dist/schema/ node_modules/yaml/browser/dist/stringify/ node_modules/yaml/browser/dist/visit.js node_modules/yaml/browser/package.json node_modules/yaml/dist/compose/ node_modules/yaml/dist/doc/ node_modules/yaml/dist/errors.d.ts node_modules/yaml/dist/errors.js node_modules/yaml/dist/index.d.ts node_modules/yaml/dist/log.d.ts node_modules/yaml/dist/log.js node_modules/yaml/dist/nodes/ node_modules/yaml/dist/options.d.ts node_modules/yaml/dist/parse/ node_modules/yaml/dist/public-api.d.ts node_modules/yaml/dist/public-api.js node_modules/yaml/dist/schema/ node_modules/yaml/dist/stringify/ node_modules/yaml/dist/test-events.d.ts node_modules/yaml/dist/util.d.ts node_modules/yaml/dist/visit.d.ts node_modules/yaml/dist/visit.js node_modules/yargs/browser.d.ts node_modules/yargs/locales/cs.json node_modules/yargs/yargs.mjs public/css/main.min.c5514d3530979d291f3497facc20da1cec870028dbc2a3630b64bab8721bbe49.css resources/_gen/assets/sass/sass/style.sass_4d6f00452a35742ddbb489cb3703195e.content resources/_gen/assets/sass/sass/style.sass_4d6f00452a35742ddbb489cb3703195e.json resources/_gen/assets/sass/sass/style.sass_c87a2fc9dae9a546a3e3f1548c147175.content resources/_gen/assets/sass/sass/style.sass_c87a2fc9dae9a546a3e3f1548c147175.json
440 lines
10 KiB
JavaScript
440 lines
10 KiB
JavaScript
'use strict'
|
|
|
|
let { isClean, my } = require('./symbols')
|
|
let Declaration = require('./declaration')
|
|
let Comment = require('./comment')
|
|
let Node = require('./node')
|
|
|
|
let parse, Rule, AtRule, Root
|
|
|
|
function cleanSource(nodes) {
|
|
return nodes.map(i => {
|
|
if (i.nodes) i.nodes = cleanSource(i.nodes)
|
|
delete i.source
|
|
return i
|
|
})
|
|
}
|
|
|
|
function markDirtyUp(node) {
|
|
node[isClean] = false
|
|
if (node.proxyOf.nodes) {
|
|
for (let i of node.proxyOf.nodes) {
|
|
markDirtyUp(i)
|
|
}
|
|
}
|
|
}
|
|
|
|
class Container extends Node {
|
|
push(child) {
|
|
child.parent = this
|
|
this.proxyOf.nodes.push(child)
|
|
return this
|
|
}
|
|
|
|
each(callback) {
|
|
if (!this.proxyOf.nodes) return undefined
|
|
let iterator = this.getIterator()
|
|
|
|
let index, result
|
|
while (this.indexes[iterator] < this.proxyOf.nodes.length) {
|
|
index = this.indexes[iterator]
|
|
result = callback(this.proxyOf.nodes[index], index)
|
|
if (result === false) break
|
|
|
|
this.indexes[iterator] += 1
|
|
}
|
|
|
|
delete this.indexes[iterator]
|
|
return result
|
|
}
|
|
|
|
walk(callback) {
|
|
return this.each((child, i) => {
|
|
let result
|
|
try {
|
|
result = callback(child, i)
|
|
} catch (e) {
|
|
throw child.addToError(e)
|
|
}
|
|
if (result !== false && child.walk) {
|
|
result = child.walk(callback)
|
|
}
|
|
|
|
return result
|
|
})
|
|
}
|
|
|
|
walkDecls(prop, callback) {
|
|
if (!callback) {
|
|
callback = prop
|
|
return this.walk((child, i) => {
|
|
if (child.type === 'decl') {
|
|
return callback(child, i)
|
|
}
|
|
})
|
|
}
|
|
if (prop instanceof RegExp) {
|
|
return this.walk((child, i) => {
|
|
if (child.type === 'decl' && prop.test(child.prop)) {
|
|
return callback(child, i)
|
|
}
|
|
})
|
|
}
|
|
return this.walk((child, i) => {
|
|
if (child.type === 'decl' && child.prop === prop) {
|
|
return callback(child, i)
|
|
}
|
|
})
|
|
}
|
|
|
|
walkRules(selector, callback) {
|
|
if (!callback) {
|
|
callback = selector
|
|
|
|
return this.walk((child, i) => {
|
|
if (child.type === 'rule') {
|
|
return callback(child, i)
|
|
}
|
|
})
|
|
}
|
|
if (selector instanceof RegExp) {
|
|
return this.walk((child, i) => {
|
|
if (child.type === 'rule' && selector.test(child.selector)) {
|
|
return callback(child, i)
|
|
}
|
|
})
|
|
}
|
|
return this.walk((child, i) => {
|
|
if (child.type === 'rule' && child.selector === selector) {
|
|
return callback(child, i)
|
|
}
|
|
})
|
|
}
|
|
|
|
walkAtRules(name, callback) {
|
|
if (!callback) {
|
|
callback = name
|
|
return this.walk((child, i) => {
|
|
if (child.type === 'atrule') {
|
|
return callback(child, i)
|
|
}
|
|
})
|
|
}
|
|
if (name instanceof RegExp) {
|
|
return this.walk((child, i) => {
|
|
if (child.type === 'atrule' && name.test(child.name)) {
|
|
return callback(child, i)
|
|
}
|
|
})
|
|
}
|
|
return this.walk((child, i) => {
|
|
if (child.type === 'atrule' && child.name === name) {
|
|
return callback(child, i)
|
|
}
|
|
})
|
|
}
|
|
|
|
walkComments(callback) {
|
|
return this.walk((child, i) => {
|
|
if (child.type === 'comment') {
|
|
return callback(child, i)
|
|
}
|
|
})
|
|
}
|
|
|
|
append(...children) {
|
|
for (let child of children) {
|
|
let nodes = this.normalize(child, this.last)
|
|
for (let node of nodes) this.proxyOf.nodes.push(node)
|
|
}
|
|
|
|
this.markDirty()
|
|
|
|
return this
|
|
}
|
|
|
|
prepend(...children) {
|
|
children = children.reverse()
|
|
for (let child of children) {
|
|
let nodes = this.normalize(child, this.first, 'prepend').reverse()
|
|
for (let node of nodes) this.proxyOf.nodes.unshift(node)
|
|
for (let id in this.indexes) {
|
|
this.indexes[id] = this.indexes[id] + nodes.length
|
|
}
|
|
}
|
|
|
|
this.markDirty()
|
|
|
|
return this
|
|
}
|
|
|
|
cleanRaws(keepBetween) {
|
|
super.cleanRaws(keepBetween)
|
|
if (this.nodes) {
|
|
for (let node of this.nodes) node.cleanRaws(keepBetween)
|
|
}
|
|
}
|
|
|
|
insertBefore(exist, add) {
|
|
let existIndex = this.index(exist)
|
|
let type = existIndex === 0 ? 'prepend' : false
|
|
let nodes = this.normalize(add, this.proxyOf.nodes[existIndex], type).reverse()
|
|
existIndex = this.index(exist)
|
|
for (let node of nodes) this.proxyOf.nodes.splice(existIndex, 0, node)
|
|
|
|
let index
|
|
for (let id in this.indexes) {
|
|
index = this.indexes[id]
|
|
if (existIndex <= index) {
|
|
this.indexes[id] = index + nodes.length
|
|
}
|
|
}
|
|
|
|
this.markDirty()
|
|
|
|
return this
|
|
}
|
|
|
|
insertAfter(exist, add) {
|
|
let existIndex = this.index(exist)
|
|
let nodes = this.normalize(add, this.proxyOf.nodes[existIndex]).reverse()
|
|
existIndex = this.index(exist)
|
|
for (let node of nodes) this.proxyOf.nodes.splice(existIndex + 1, 0, node)
|
|
|
|
let index
|
|
for (let id in this.indexes) {
|
|
index = this.indexes[id]
|
|
if (existIndex < index) {
|
|
this.indexes[id] = index + nodes.length
|
|
}
|
|
}
|
|
|
|
this.markDirty()
|
|
|
|
return this
|
|
}
|
|
|
|
removeChild(child) {
|
|
child = this.index(child)
|
|
this.proxyOf.nodes[child].parent = undefined
|
|
this.proxyOf.nodes.splice(child, 1)
|
|
|
|
let index
|
|
for (let id in this.indexes) {
|
|
index = this.indexes[id]
|
|
if (index >= child) {
|
|
this.indexes[id] = index - 1
|
|
}
|
|
}
|
|
|
|
this.markDirty()
|
|
|
|
return this
|
|
}
|
|
|
|
removeAll() {
|
|
for (let node of this.proxyOf.nodes) node.parent = undefined
|
|
this.proxyOf.nodes = []
|
|
|
|
this.markDirty()
|
|
|
|
return this
|
|
}
|
|
|
|
replaceValues(pattern, opts, callback) {
|
|
if (!callback) {
|
|
callback = opts
|
|
opts = {}
|
|
}
|
|
|
|
this.walkDecls(decl => {
|
|
if (opts.props && !opts.props.includes(decl.prop)) return
|
|
if (opts.fast && !decl.value.includes(opts.fast)) return
|
|
|
|
decl.value = decl.value.replace(pattern, callback)
|
|
})
|
|
|
|
this.markDirty()
|
|
|
|
return this
|
|
}
|
|
|
|
every(condition) {
|
|
return this.nodes.every(condition)
|
|
}
|
|
|
|
some(condition) {
|
|
return this.nodes.some(condition)
|
|
}
|
|
|
|
index(child) {
|
|
if (typeof child === 'number') return child
|
|
if (child.proxyOf) child = child.proxyOf
|
|
return this.proxyOf.nodes.indexOf(child)
|
|
}
|
|
|
|
get first() {
|
|
if (!this.proxyOf.nodes) return undefined
|
|
return this.proxyOf.nodes[0]
|
|
}
|
|
|
|
get last() {
|
|
if (!this.proxyOf.nodes) return undefined
|
|
return this.proxyOf.nodes[this.proxyOf.nodes.length - 1]
|
|
}
|
|
|
|
normalize(nodes, sample) {
|
|
if (typeof nodes === 'string') {
|
|
nodes = cleanSource(parse(nodes).nodes)
|
|
} else if (Array.isArray(nodes)) {
|
|
nodes = nodes.slice(0)
|
|
for (let i of nodes) {
|
|
if (i.parent) i.parent.removeChild(i, 'ignore')
|
|
}
|
|
} else if (nodes.type === 'root' && this.type !== 'document') {
|
|
nodes = nodes.nodes.slice(0)
|
|
for (let i of nodes) {
|
|
if (i.parent) i.parent.removeChild(i, 'ignore')
|
|
}
|
|
} else if (nodes.type) {
|
|
nodes = [nodes]
|
|
} else if (nodes.prop) {
|
|
if (typeof nodes.value === 'undefined') {
|
|
throw new Error('Value field is missed in node creation')
|
|
} else if (typeof nodes.value !== 'string') {
|
|
nodes.value = String(nodes.value)
|
|
}
|
|
nodes = [new Declaration(nodes)]
|
|
} else if (nodes.selector) {
|
|
nodes = [new Rule(nodes)]
|
|
} else if (nodes.name) {
|
|
nodes = [new AtRule(nodes)]
|
|
} else if (nodes.text) {
|
|
nodes = [new Comment(nodes)]
|
|
} else {
|
|
throw new Error('Unknown node type in node creation')
|
|
}
|
|
|
|
let processed = nodes.map(i => {
|
|
/* c8 ignore next */
|
|
if (!i[my]) Container.rebuild(i)
|
|
i = i.proxyOf
|
|
if (i.parent) i.parent.removeChild(i)
|
|
if (i[isClean]) markDirtyUp(i)
|
|
if (typeof i.raws.before === 'undefined') {
|
|
if (sample && typeof sample.raws.before !== 'undefined') {
|
|
i.raws.before = sample.raws.before.replace(/\S/g, '')
|
|
}
|
|
}
|
|
i.parent = this.proxyOf
|
|
return i
|
|
})
|
|
|
|
return processed
|
|
}
|
|
|
|
getProxyProcessor() {
|
|
return {
|
|
set(node, prop, value) {
|
|
if (node[prop] === value) return true
|
|
node[prop] = value
|
|
if (prop === 'name' || prop === 'params' || prop === 'selector') {
|
|
node.markDirty()
|
|
}
|
|
return true
|
|
},
|
|
|
|
get(node, prop) {
|
|
if (prop === 'proxyOf') {
|
|
return node
|
|
} else if (!node[prop]) {
|
|
return node[prop]
|
|
} else if (
|
|
prop === 'each' ||
|
|
(typeof prop === 'string' && prop.startsWith('walk'))
|
|
) {
|
|
return (...args) => {
|
|
return node[prop](
|
|
...args.map(i => {
|
|
if (typeof i === 'function') {
|
|
return (child, index) => i(child.toProxy(), index)
|
|
} else {
|
|
return i
|
|
}
|
|
})
|
|
)
|
|
}
|
|
} else if (prop === 'every' || prop === 'some') {
|
|
return cb => {
|
|
return node[prop]((child, ...other) =>
|
|
cb(child.toProxy(), ...other)
|
|
)
|
|
}
|
|
} else if (prop === 'root') {
|
|
return () => node.root().toProxy()
|
|
} else if (prop === 'nodes') {
|
|
return node.nodes.map(i => i.toProxy())
|
|
} else if (prop === 'first' || prop === 'last') {
|
|
return node[prop].toProxy()
|
|
} else {
|
|
return node[prop]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
getIterator() {
|
|
if (!this.lastEach) this.lastEach = 0
|
|
if (!this.indexes) this.indexes = {}
|
|
|
|
this.lastEach += 1
|
|
let iterator = this.lastEach
|
|
this.indexes[iterator] = 0
|
|
|
|
return iterator
|
|
}
|
|
}
|
|
|
|
Container.registerParse = dependant => {
|
|
parse = dependant
|
|
}
|
|
|
|
Container.registerRule = dependant => {
|
|
Rule = dependant
|
|
}
|
|
|
|
Container.registerAtRule = dependant => {
|
|
AtRule = dependant
|
|
}
|
|
|
|
Container.registerRoot = dependant => {
|
|
Root = dependant
|
|
}
|
|
|
|
module.exports = Container
|
|
Container.default = Container
|
|
|
|
/* c8 ignore start */
|
|
Container.rebuild = node => {
|
|
if (node.type === 'atrule') {
|
|
Object.setPrototypeOf(node, AtRule.prototype)
|
|
} else if (node.type === 'rule') {
|
|
Object.setPrototypeOf(node, Rule.prototype)
|
|
} else if (node.type === 'decl') {
|
|
Object.setPrototypeOf(node, Declaration.prototype)
|
|
} else if (node.type === 'comment') {
|
|
Object.setPrototypeOf(node, Comment.prototype)
|
|
} else if (node.type === 'root') {
|
|
Object.setPrototypeOf(node, Root.prototype)
|
|
}
|
|
|
|
node[my] = true
|
|
|
|
if (node.nodes) {
|
|
node.nodes.forEach(child => {
|
|
Container.rebuild(child)
|
|
})
|
|
}
|
|
}
|
|
/* c8 ignore stop */
|