"use strict";
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
  for (var name in all)
    __defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
  if (from && typeof from === "object" || typeof from === "function") {
    for (let key of __getOwnPropNames(from))
      if (!__hasOwnProp.call(to, key) && key !== except)
        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
  }
  return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
  // If the importer is in node compatibility mode or this is not an ESM
  // file that has been converted to a CommonJS file using a Babel-
  // compatible transform (i.e. "__esModule" has not been set), then set
  // "default" to the CommonJS "module.exports" for node compatibility.
  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
  mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);

// union_vector/union_vector.ts
var union_vector_exports = {};
__export(union_vector_exports, {
  Attacker: () => Attacker,
  AttackerT: () => AttackerT,
  BookReader: () => BookReader,
  BookReaderT: () => BookReaderT,
  Character: () => Character,
  FallingTub: () => FallingTub,
  FallingTubT: () => FallingTubT,
  Gadget: () => Gadget,
  HandFan: () => HandFan,
  HandFanT: () => HandFanT,
  Movie: () => Movie,
  MovieT: () => MovieT,
  Rapunzel: () => Rapunzel,
  RapunzelT: () => RapunzelT
});
module.exports = __toCommonJS(union_vector_exports);

// union_vector/attacker.js
var flatbuffers = __toESM(require("flatbuffers"), 1);
var Attacker = class {
  constructor() {
    this.bb = null;
    this.bb_pos = 0;
  }
  __init(i, bb) {
    this.bb_pos = i;
    this.bb = bb;
    return this;
  }
  static getRootAsAttacker(bb, obj) {
    return (obj || new Attacker()).__init(bb.readInt32(bb.position()) + bb.position(), bb);
  }
  static getSizePrefixedRootAsAttacker(bb, obj) {
    bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);
    return (obj || new Attacker()).__init(bb.readInt32(bb.position()) + bb.position(), bb);
  }
  swordAttackDamage() {
    const offset = this.bb.__offset(this.bb_pos, 4);
    return offset ? this.bb.readInt32(this.bb_pos + offset) : 0;
  }
  mutate_sword_attack_damage(value) {
    const offset = this.bb.__offset(this.bb_pos, 4);
    if (offset === 0) {
      return false;
    }
    this.bb.writeInt32(this.bb_pos + offset, value);
    return true;
  }
  static getFullyQualifiedName() {
    return "Attacker";
  }
  static startAttacker(builder) {
    builder.startObject(1);
  }
  static addSwordAttackDamage(builder, swordAttackDamage) {
    builder.addFieldInt32(0, swordAttackDamage, 0);
  }
  static endAttacker(builder) {
    const offset = builder.endObject();
    return offset;
  }
  static createAttacker(builder, swordAttackDamage) {
    Attacker.startAttacker(builder);
    Attacker.addSwordAttackDamage(builder, swordAttackDamage);
    return Attacker.endAttacker(builder);
  }
  unpack() {
    return new AttackerT(this.swordAttackDamage());
  }
  unpackTo(_o) {
    _o.swordAttackDamage = this.swordAttackDamage();
  }
};
var AttackerT = class {
  constructor(swordAttackDamage = 0) {
    this.swordAttackDamage = swordAttackDamage;
  }
  pack(builder) {
    return Attacker.createAttacker(builder, this.swordAttackDamage);
  }
};

// union_vector/book-reader.js
var BookReader = class {
  constructor() {
    this.bb = null;
    this.bb_pos = 0;
  }
  __init(i, bb) {
    this.bb_pos = i;
    this.bb = bb;
    return this;
  }
  booksRead() {
    return this.bb.readInt32(this.bb_pos);
  }
  mutate_books_read(value) {
    this.bb.writeInt32(this.bb_pos + 0, value);
    return true;
  }
  static getFullyQualifiedName() {
    return "BookReader";
  }
  static sizeOf() {
    return 4;
  }
  static createBookReader(builder, books_read) {
    builder.prep(4, 4);
    builder.writeInt32(books_read);
    return builder.offset();
  }
  unpack() {
    return new BookReaderT(this.booksRead());
  }
  unpackTo(_o) {
    _o.booksRead = this.booksRead();
  }
};
var BookReaderT = class {
  constructor(booksRead = 0) {
    this.booksRead = booksRead;
  }
  pack(builder) {
    return BookReader.createBookReader(builder, this.booksRead);
  }
};

// union_vector/rapunzel.js
var Rapunzel = class {
  constructor() {
    this.bb = null;
    this.bb_pos = 0;
  }
  __init(i, bb) {
    this.bb_pos = i;
    this.bb = bb;
    return this;
  }
  hairLength() {
    return this.bb.readInt32(this.bb_pos);
  }
  mutate_hair_length(value) {
    this.bb.writeInt32(this.bb_pos + 0, value);
    return true;
  }
  static getFullyQualifiedName() {
    return "Rapunzel";
  }
  static sizeOf() {
    return 4;
  }
  static createRapunzel(builder, hair_length) {
    builder.prep(4, 4);
    builder.writeInt32(hair_length);
    return builder.offset();
  }
  unpack() {
    return new RapunzelT(this.hairLength());
  }
  unpackTo(_o) {
    _o.hairLength = this.hairLength();
  }
};
var RapunzelT = class {
  constructor(hairLength = 0) {
    this.hairLength = hairLength;
  }
  pack(builder) {
    return Rapunzel.createRapunzel(builder, this.hairLength);
  }
};

// union_vector/character.js
var Character;
(function(Character2) {
  Character2[Character2["NONE"] = 0] = "NONE";
  Character2[Character2["MuLan"] = 1] = "MuLan";
  Character2[Character2["Rapunzel"] = 2] = "Rapunzel";
  Character2[Character2["Belle"] = 3] = "Belle";
  Character2[Character2["BookFan"] = 4] = "BookFan";
  Character2[Character2["Other"] = 5] = "Other";
  Character2[Character2["Unused"] = 6] = "Unused";
})(Character = Character || (Character = {}));
function unionToCharacter(type, accessor) {
  switch (Character[type]) {
    case "NONE":
      return null;
    case "MuLan":
      return accessor(new Attacker());
    case "Rapunzel":
      return accessor(new Rapunzel());
    case "Belle":
      return accessor(new BookReader());
    case "BookFan":
      return accessor(new BookReader());
    case "Other":
      return accessor("");
    case "Unused":
      return accessor("");
    default:
      return null;
  }
}
function unionListToCharacter(type, accessor, index) {
  switch (Character[type]) {
    case "NONE":
      return null;
    case "MuLan":
      return accessor(index, new Attacker());
    case "Rapunzel":
      return accessor(index, new Rapunzel());
    case "Belle":
      return accessor(index, new BookReader());
    case "BookFan":
      return accessor(index, new BookReader());
    case "Other":
      return accessor(index, "");
    case "Unused":
      return accessor(index, "");
    default:
      return null;
  }
}

// union_vector/falling-tub.js
var FallingTub = class {
  constructor() {
    this.bb = null;
    this.bb_pos = 0;
  }
  __init(i, bb) {
    this.bb_pos = i;
    this.bb = bb;
    return this;
  }
  weight() {
    return this.bb.readInt32(this.bb_pos);
  }
  mutate_weight(value) {
    this.bb.writeInt32(this.bb_pos + 0, value);
    return true;
  }
  static getFullyQualifiedName() {
    return "FallingTub";
  }
  static sizeOf() {
    return 4;
  }
  static createFallingTub(builder, weight) {
    builder.prep(4, 4);
    builder.writeInt32(weight);
    return builder.offset();
  }
  unpack() {
    return new FallingTubT(this.weight());
  }
  unpackTo(_o) {
    _o.weight = this.weight();
  }
};
var FallingTubT = class {
  constructor(weight = 0) {
    this.weight = weight;
  }
  pack(builder) {
    return FallingTub.createFallingTub(builder, this.weight);
  }
};

// union_vector/hand-fan.js
var flatbuffers2 = __toESM(require("flatbuffers"), 1);
var HandFan = class {
  constructor() {
    this.bb = null;
    this.bb_pos = 0;
  }
  __init(i, bb) {
    this.bb_pos = i;
    this.bb = bb;
    return this;
  }
  static getRootAsHandFan(bb, obj) {
    return (obj || new HandFan()).__init(bb.readInt32(bb.position()) + bb.position(), bb);
  }
  static getSizePrefixedRootAsHandFan(bb, obj) {
    bb.setPosition(bb.position() + flatbuffers2.SIZE_PREFIX_LENGTH);
    return (obj || new HandFan()).__init(bb.readInt32(bb.position()) + bb.position(), bb);
  }
  length() {
    const offset = this.bb.__offset(this.bb_pos, 4);
    return offset ? this.bb.readInt32(this.bb_pos + offset) : 0;
  }
  mutate_length(value) {
    const offset = this.bb.__offset(this.bb_pos, 4);
    if (offset === 0) {
      return false;
    }
    this.bb.writeInt32(this.bb_pos + offset, value);
    return true;
  }
  static getFullyQualifiedName() {
    return "HandFan";
  }
  static startHandFan(builder) {
    builder.startObject(1);
  }
  static addLength(builder, length) {
    builder.addFieldInt32(0, length, 0);
  }
  static endHandFan(builder) {
    const offset = builder.endObject();
    return offset;
  }
  static createHandFan(builder, length) {
    HandFan.startHandFan(builder);
    HandFan.addLength(builder, length);
    return HandFan.endHandFan(builder);
  }
  unpack() {
    return new HandFanT(this.length());
  }
  unpackTo(_o) {
    _o.length = this.length();
  }
};
var HandFanT = class {
  constructor(length = 0) {
    this.length = length;
  }
  pack(builder) {
    return HandFan.createHandFan(builder, this.length);
  }
};

// union_vector/gadget.js
var Gadget;
(function(Gadget2) {
  Gadget2[Gadget2["NONE"] = 0] = "NONE";
  Gadget2[Gadget2["FallingTub"] = 1] = "FallingTub";
  Gadget2[Gadget2["HandFan"] = 2] = "HandFan";
})(Gadget = Gadget || (Gadget = {}));

// union_vector/movie.js
var flatbuffers3 = __toESM(require("flatbuffers"), 1);
var Movie = class {
  constructor() {
    this.bb = null;
    this.bb_pos = 0;
  }
  __init(i, bb) {
    this.bb_pos = i;
    this.bb = bb;
    return this;
  }
  static getRootAsMovie(bb, obj) {
    return (obj || new Movie()).__init(bb.readInt32(bb.position()) + bb.position(), bb);
  }
  static getSizePrefixedRootAsMovie(bb, obj) {
    bb.setPosition(bb.position() + flatbuffers3.SIZE_PREFIX_LENGTH);
    return (obj || new Movie()).__init(bb.readInt32(bb.position()) + bb.position(), bb);
  }
  static bufferHasIdentifier(bb) {
    return bb.__has_identifier("MOVI");
  }
  mainCharacterType() {
    const offset = this.bb.__offset(this.bb_pos, 4);
    return offset ? this.bb.readUint8(this.bb_pos + offset) : Character.NONE;
  }
  mainCharacter(obj) {
    const offset = this.bb.__offset(this.bb_pos, 6);
    return offset ? this.bb.__union_with_string(obj, this.bb_pos + offset) : null;
  }
  charactersType(index) {
    const offset = this.bb.__offset(this.bb_pos, 8);
    return offset ? this.bb.readUint8(this.bb.__vector(this.bb_pos + offset) + index) : 0;
  }
  charactersTypeLength() {
    const offset = this.bb.__offset(this.bb_pos, 8);
    return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;
  }
  charactersTypeArray() {
    const offset = this.bb.__offset(this.bb_pos, 8);
    return offset ? new Uint8Array(this.bb.bytes().buffer, this.bb.bytes().byteOffset + this.bb.__vector(this.bb_pos + offset), this.bb.__vector_len(this.bb_pos + offset)) : null;
  }
  characters(index, obj) {
    const offset = this.bb.__offset(this.bb_pos, 10);
    return offset ? this.bb.__union_with_string(obj, this.bb.__vector(this.bb_pos + offset) + index * 4) : null;
  }
  charactersLength() {
    const offset = this.bb.__offset(this.bb_pos, 10);
    return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;
  }
  static getFullyQualifiedName() {
    return "Movie";
  }
  static startMovie(builder) {
    builder.startObject(4);
  }
  static addMainCharacterType(builder, mainCharacterType) {
    builder.addFieldInt8(0, mainCharacterType, Character.NONE);
  }
  static addMainCharacter(builder, mainCharacterOffset) {
    builder.addFieldOffset(1, mainCharacterOffset, 0);
  }
  static addCharactersType(builder, charactersTypeOffset) {
    builder.addFieldOffset(2, charactersTypeOffset, 0);
  }
  static createCharactersTypeVector(builder, data) {
    builder.startVector(1, data.length, 1);
    for (let i = data.length - 1; i >= 0; i--) {
      builder.addInt8(data[i]);
    }
    return builder.endVector();
  }
  static startCharactersTypeVector(builder, numElems) {
    builder.startVector(1, numElems, 1);
  }
  static addCharacters(builder, charactersOffset) {
    builder.addFieldOffset(3, charactersOffset, 0);
  }
  static createCharactersVector(builder, data) {
    builder.startVector(4, data.length, 4);
    for (let i = data.length - 1; i >= 0; i--) {
      builder.addOffset(data[i]);
    }
    return builder.endVector();
  }
  static startCharactersVector(builder, numElems) {
    builder.startVector(4, numElems, 4);
  }
  static endMovie(builder) {
    const offset = builder.endObject();
    return offset;
  }
  static finishMovieBuffer(builder, offset) {
    builder.finish(offset, "MOVI");
  }
  static finishSizePrefixedMovieBuffer(builder, offset) {
    builder.finish(offset, "MOVI", true);
  }
  static createMovie(builder, mainCharacterType, mainCharacterOffset, charactersTypeOffset, charactersOffset) {
    Movie.startMovie(builder);
    Movie.addMainCharacterType(builder, mainCharacterType);
    Movie.addMainCharacter(builder, mainCharacterOffset);
    Movie.addCharactersType(builder, charactersTypeOffset);
    Movie.addCharacters(builder, charactersOffset);
    return Movie.endMovie(builder);
  }
  unpack() {
    return new MovieT(this.mainCharacterType(), (() => {
      const temp = unionToCharacter(this.mainCharacterType(), this.mainCharacter.bind(this));
      if (temp === null) {
        return null;
      }
      if (typeof temp === "string") {
        return temp;
      }
      return temp.unpack();
    })(), this.bb.createScalarList(this.charactersType.bind(this), this.charactersTypeLength()), (() => {
      const ret = [];
      for (let targetEnumIndex = 0; targetEnumIndex < this.charactersTypeLength(); ++targetEnumIndex) {
        const targetEnum = this.charactersType(targetEnumIndex);
        if (targetEnum === null || Character[targetEnum] === "NONE") {
          continue;
        }
        const temp = unionListToCharacter(targetEnum, this.characters.bind(this), targetEnumIndex);
        if (temp === null) {
          continue;
        }
        if (typeof temp === "string") {
          ret.push(temp);
          continue;
        }
        ret.push(temp.unpack());
      }
      return ret;
    })());
  }
  unpackTo(_o) {
    _o.mainCharacterType = this.mainCharacterType();
    _o.mainCharacter = (() => {
      const temp = unionToCharacter(this.mainCharacterType(), this.mainCharacter.bind(this));
      if (temp === null) {
        return null;
      }
      if (typeof temp === "string") {
        return temp;
      }
      return temp.unpack();
    })();
    _o.charactersType = this.bb.createScalarList(this.charactersType.bind(this), this.charactersTypeLength());
    _o.characters = (() => {
      const ret = [];
      for (let targetEnumIndex = 0; targetEnumIndex < this.charactersTypeLength(); ++targetEnumIndex) {
        const targetEnum = this.charactersType(targetEnumIndex);
        if (targetEnum === null || Character[targetEnum] === "NONE") {
          continue;
        }
        const temp = unionListToCharacter(targetEnum, this.characters.bind(this), targetEnumIndex);
        if (temp === null) {
          continue;
        }
        if (typeof temp === "string") {
          ret.push(temp);
          continue;
        }
        ret.push(temp.unpack());
      }
      return ret;
    })();
  }
};
var MovieT = class {
  constructor(mainCharacterType = Character.NONE, mainCharacter = null, charactersType = [], characters = []) {
    this.mainCharacterType = mainCharacterType;
    this.mainCharacter = mainCharacter;
    this.charactersType = charactersType;
    this.characters = characters;
  }
  pack(builder) {
    const mainCharacter = builder.createObjectOffset(this.mainCharacter);
    const charactersType = Movie.createCharactersTypeVector(builder, this.charactersType);
    const characters = Movie.createCharactersVector(builder, builder.createObjectOffsetList(this.characters));
    return Movie.createMovie(builder, this.mainCharacterType, mainCharacter, charactersType, characters);
  }
};
