mirror of
				https://github.com/Theodor-Springmann-Stiftung/kgpz_web.git
				synced 2025-10-31 01:55:29 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			55 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict'
 | |
| 
 | |
| let AtRule = require('./at-rule')
 | |
| let Comment = require('./comment')
 | |
| let Declaration = require('./declaration')
 | |
| let Input = require('./input')
 | |
| let PreviousMap = require('./previous-map')
 | |
| 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
 | 
