| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 | 
							- 'use strict';
 
- var identity = require('../../nodes/identity.js');
 
- var Pair = require('../../nodes/Pair.js');
 
- var YAMLMap = require('../../nodes/YAMLMap.js');
 
- class YAMLSet extends YAMLMap.YAMLMap {
 
-     constructor(schema) {
 
-         super(schema);
 
-         this.tag = YAMLSet.tag;
 
-     }
 
-     add(key) {
 
-         let pair;
 
-         if (identity.isPair(key))
 
-             pair = key;
 
-         else if (key &&
 
-             typeof key === 'object' &&
 
-             'key' in key &&
 
-             'value' in key &&
 
-             key.value === null)
 
-             pair = new Pair.Pair(key.key, null);
 
-         else
 
-             pair = new Pair.Pair(key, null);
 
-         const prev = YAMLMap.findPair(this.items, pair.key);
 
-         if (!prev)
 
-             this.items.push(pair);
 
-     }
 
-     /**
 
-      * If `keepPair` is `true`, returns the Pair matching `key`.
 
-      * Otherwise, returns the value of that Pair's key.
 
-      */
 
-     get(key, keepPair) {
 
-         const pair = YAMLMap.findPair(this.items, key);
 
-         return !keepPair && identity.isPair(pair)
 
-             ? identity.isScalar(pair.key)
 
-                 ? pair.key.value
 
-                 : pair.key
 
-             : pair;
 
-     }
 
-     set(key, value) {
 
-         if (typeof value !== 'boolean')
 
-             throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof value}`);
 
-         const prev = YAMLMap.findPair(this.items, key);
 
-         if (prev && !value) {
 
-             this.items.splice(this.items.indexOf(prev), 1);
 
-         }
 
-         else if (!prev && value) {
 
-             this.items.push(new Pair.Pair(key));
 
-         }
 
-     }
 
-     toJSON(_, ctx) {
 
-         return super.toJSON(_, ctx, Set);
 
-     }
 
-     toString(ctx, onComment, onChompKeep) {
 
-         if (!ctx)
 
-             return JSON.stringify(this);
 
-         if (this.hasAllNullValues(true))
 
-             return super.toString(Object.assign({}, ctx, { allNullValues: true }), onComment, onChompKeep);
 
-         else
 
-             throw new Error('Set items must all have null values');
 
-     }
 
-     static from(schema, iterable, ctx) {
 
-         const { replacer } = ctx;
 
-         const set = new this(schema);
 
-         if (iterable && Symbol.iterator in Object(iterable))
 
-             for (let value of iterable) {
 
-                 if (typeof replacer === 'function')
 
-                     value = replacer.call(iterable, value, value);
 
-                 set.items.push(Pair.createPair(value, null, ctx));
 
-             }
 
-         return set;
 
-     }
 
- }
 
- YAMLSet.tag = 'tag:yaml.org,2002:set';
 
- const set = {
 
-     collection: 'map',
 
-     identify: value => value instanceof Set,
 
-     nodeClass: YAMLSet,
 
-     default: false,
 
-     tag: 'tag:yaml.org,2002:set',
 
-     createNode: (schema, iterable, ctx) => YAMLSet.from(schema, iterable, ctx),
 
-     resolve(map, onError) {
 
-         if (identity.isMap(map)) {
 
-             if (map.hasAllNullValues(true))
 
-                 return Object.assign(new YAMLSet(), map);
 
-             else
 
-                 onError('Set items must all have null values');
 
-         }
 
-         else
 
-             onError('Expected a mapping for this tag');
 
-         return map;
 
-     }
 
- };
 
- exports.YAMLSet = YAMLSet;
 
- exports.set = set;
 
 
  |