mirror of
				https://github.com/Theodor-Springmann-Stiftung/kgpz_web.git
				synced 2025-10-31 09:55:30 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			83 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| var identity = require('../../nodes/identity.js');
 | |
| var Pair = require('../../nodes/Pair.js');
 | |
| var Scalar = require('../../nodes/Scalar.js');
 | |
| var YAMLSeq = require('../../nodes/YAMLSeq.js');
 | |
| 
 | |
| function resolvePairs(seq, onError) {
 | |
|     if (identity.isSeq(seq)) {
 | |
|         for (let i = 0; i < seq.items.length; ++i) {
 | |
|             let item = seq.items[i];
 | |
|             if (identity.isPair(item))
 | |
|                 continue;
 | |
|             else if (identity.isMap(item)) {
 | |
|                 if (item.items.length > 1)
 | |
|                     onError('Each pair must have its own sequence indicator');
 | |
|                 const pair = item.items[0] || new Pair.Pair(new Scalar.Scalar(null));
 | |
|                 if (item.commentBefore)
 | |
|                     pair.key.commentBefore = pair.key.commentBefore
 | |
|                         ? `${item.commentBefore}\n${pair.key.commentBefore}`
 | |
|                         : item.commentBefore;
 | |
|                 if (item.comment) {
 | |
|                     const cn = pair.value ?? pair.key;
 | |
|                     cn.comment = cn.comment
 | |
|                         ? `${item.comment}\n${cn.comment}`
 | |
|                         : item.comment;
 | |
|                 }
 | |
|                 item = pair;
 | |
|             }
 | |
|             seq.items[i] = identity.isPair(item) ? item : new Pair.Pair(item);
 | |
|         }
 | |
|     }
 | |
|     else
 | |
|         onError('Expected a sequence for this tag');
 | |
|     return seq;
 | |
| }
 | |
| function createPairs(schema, iterable, ctx) {
 | |
|     const { replacer } = ctx;
 | |
|     const pairs = new YAMLSeq.YAMLSeq(schema);
 | |
|     pairs.tag = 'tag:yaml.org,2002:pairs';
 | |
|     let i = 0;
 | |
|     if (iterable && Symbol.iterator in Object(iterable))
 | |
|         for (let it of iterable) {
 | |
|             if (typeof replacer === 'function')
 | |
|                 it = replacer.call(iterable, String(i++), it);
 | |
|             let key, value;
 | |
|             if (Array.isArray(it)) {
 | |
|                 if (it.length === 2) {
 | |
|                     key = it[0];
 | |
|                     value = it[1];
 | |
|                 }
 | |
|                 else
 | |
|                     throw new TypeError(`Expected [key, value] tuple: ${it}`);
 | |
|             }
 | |
|             else if (it && it instanceof Object) {
 | |
|                 const keys = Object.keys(it);
 | |
|                 if (keys.length === 1) {
 | |
|                     key = keys[0];
 | |
|                     value = it[key];
 | |
|                 }
 | |
|                 else {
 | |
|                     throw new TypeError(`Expected tuple with one key, not ${keys.length} keys`);
 | |
|                 }
 | |
|             }
 | |
|             else {
 | |
|                 key = it;
 | |
|             }
 | |
|             pairs.items.push(Pair.createPair(key, value, ctx));
 | |
|         }
 | |
|     return pairs;
 | |
| }
 | |
| const pairs = {
 | |
|     collection: 'seq',
 | |
|     default: false,
 | |
|     tag: 'tag:yaml.org,2002:pairs',
 | |
|     resolve: resolvePairs,
 | |
|     createNode: createPairs
 | |
| };
 | |
| 
 | |
| exports.createPairs = createPairs;
 | |
| exports.pairs = pairs;
 | |
| exports.resolvePairs = resolvePairs;
 | 
