import { createNode } from '../../doc/createNode.mjs';
import { isSeq } from '../../nodes/Node.mjs';
import { YAMLSeq } from '../../nodes/YAMLSeq.mjs';

function createSeq(schema, obj, ctx) {
  const {
    replacer
  } = ctx;
  const seq = new YAMLSeq(schema);
  if (obj && Symbol.iterator in Object(obj)) {
    let i = 0;
    for (let it of obj) {
      if (typeof replacer === 'function') {
        const key = obj instanceof Set ? it : String(i++);
        it = replacer.call(obj, key, it);
      }
      seq.items.push(createNode(it, undefined, ctx));
    }
  }
  return seq;
}
const seq = {
  collection: 'seq',
  createNode: createSeq,
  default: true,
  nodeClass: YAMLSeq,
  tag: 'tag:yaml.org,2002:seq',
  resolve(seq, onError) {
    if (!isSeq(seq)) onError('Expected a sequence for this tag');
    return seq;
  }
};

export { seq };
