| ; | |
| 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; | |
Xet Storage Details
- Size:
- 3.11 kB
- Xet hash:
- 4f03d6d3b58231246773ac24e13d5aff7a147092a435fa87959dfbef5f87e21d
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.