summaryrefslogtreecommitdiff
path: root/node_modules/postcss/lib/fromJSON.js
diff options
context:
space:
mode:
authorPhilipp Tanlak <philipp.tanlak@gmail.com>2025-11-24 20:54:57 +0100
committerPhilipp Tanlak <philipp.tanlak@gmail.com>2025-11-24 20:57:48 +0100
commitb1e2c8fd5cb5dfa46bc440a12eafaf56cd844b1c (patch)
tree49d360fd6cbc6a2754efe93524ac47ff0fbe0f7d /node_modules/postcss/lib/fromJSON.js
Docs
Diffstat (limited to 'node_modules/postcss/lib/fromJSON.js')
-rw-r--r--node_modules/postcss/lib/fromJSON.js54
1 files changed, 54 insertions, 0 deletions
diff --git a/node_modules/postcss/lib/fromJSON.js b/node_modules/postcss/lib/fromJSON.js
new file mode 100644
index 0000000..09f2b89
--- /dev/null
+++ b/node_modules/postcss/lib/fromJSON.js
@@ -0,0 +1,54 @@
+'use strict'
+
+let Declaration = require('./declaration')
+let PreviousMap = require('./previous-map')
+let Comment = require('./comment')
+let AtRule = require('./at-rule')
+let Input = require('./input')
+let Root = require('./root')
+let Rule = require('./rule')
+
+function fromJSON(json, inputs) {
+ if (Array.isArray(json)) return json.map(n => fromJSON(n))
+
+ let { inputs: ownInputs, ...defaults } = json
+ if (ownInputs) {
+ inputs = []
+ for (let input of ownInputs) {
+ let inputHydrated = { ...input, __proto__: Input.prototype }
+ if (inputHydrated.map) {
+ inputHydrated.map = {
+ ...inputHydrated.map,
+ __proto__: PreviousMap.prototype
+ }
+ }
+ inputs.push(inputHydrated)
+ }
+ }
+ if (defaults.nodes) {
+ defaults.nodes = json.nodes.map(n => fromJSON(n, inputs))
+ }
+ if (defaults.source) {
+ let { inputId, ...source } = defaults.source
+ defaults.source = source
+ if (inputId != null) {
+ defaults.source.input = inputs[inputId]
+ }
+ }
+ if (defaults.type === 'root') {
+ return new Root(defaults)
+ } else if (defaults.type === 'decl') {
+ return new Declaration(defaults)
+ } else if (defaults.type === 'rule') {
+ return new Rule(defaults)
+ } else if (defaults.type === 'comment') {
+ return new Comment(defaults)
+ } else if (defaults.type === 'atrule') {
+ return new AtRule(defaults)
+ } else {
+ throw new Error('Unknown node type: ' + json.type)
+ }
+}
+
+module.exports = fromJSON
+fromJSON.default = fromJSON