{
  "version": 3,
  "sources": ["../../src/modules/node-memory/MemoryNode.ts", "../../src/modules/node-memory/NodeHelper/index.ts", "../../src/modules/node-memory/NodeHelper/attachToExistingNode.ts", "../../src/modules/node-memory/NodeHelper/flatAttachToExistingNode.ts", "../../src/modules/node-memory/NodeHelper/attachToNewNode.ts", "../../src/modules/node-memory/NodeHelper/flatAttachToNewNode.ts"],
  "sourcesContent": ["import type { EventListener, Promisable } from '@ariestools/sdk'\nimport {\n  assertEx,\n  exists, isAddress, isDefined,\n} from '@ariestools/sdk'\nimport type { XyoAddress, XyoQuantAddress } from '@xyo-network/sdk-protocol'\nimport { Mutex } from 'async-mutex'\n\nimport {\n  type AnyConfigSchema,\n  type AttachableModuleInstance,\n  creatableModule,\n  type ModuleIdentifier,\n  type ModuleInstance,\n  type QueryableModule,\n} from '#module-model'\nimport { AbstractNode } from '#node-abstract'\nimport type {\n  ChildCertificationFields,\n  NodeConfig, NodeInstanceParams,\n  NodeModuleEventData,\n} from '#node-model'\nimport { isNodeModule } from '#node-model'\n\nexport type MemoryNodeParams = NodeInstanceParams<AnyConfigSchema<NodeConfig>>\n\n@creatableModule()\nexport class MemoryNode<TParams extends MemoryNodeParams = MemoryNodeParams, TEventData extends NodeModuleEventData = NodeModuleEventData>\n  extends AbstractNode<TParams, TEventData> {\n  protected registeredModuleMap: Partial<Record<XyoAddress, AttachableModuleInstance>> = {}\n\n  private _attachMutex = new Mutex()\n\n  private _attachedPrivateModules = new Set<XyoAddress>()\n  private _attachedPublicModules = new Set<XyoAddress>()\n\n  async attachHandler(id: ModuleIdentifier, external?: boolean): Promise<(Lowercase<string> & {\n    readonly __hex: true\n  } & {\n    readonly __address: true\n  }) | XyoQuantAddress> {\n    await this.startedAsync('warn', true)\n    return assertEx(\n      isAddress(id) ? await this.attachUsingAddress(id, external) : await this.attachUsingName(id, external),\n      () => `Unable to locate module [${id}]`,\n    )\n  }\n\n  async certifyHandler(id: ModuleIdentifier): Promise<ChildCertificationFields> {\n    const child = (await this.publicChildren()).find(child => child.modName === id || child.address === id)\n    if (child) {\n      return { address: child.address, expiration: Date.now() + 1000 * 60 * 10 /* 10 minutes */ }\n    }\n    throw new Error(`Unable to certify child module [${id}]`)\n  }\n\n  async detachHandler(id: ModuleIdentifier): Promise<(Lowercase<string> & {\n    readonly __hex: true\n  } & {\n    readonly __address: true\n  }) | XyoQuantAddress | undefined> {\n    return isAddress(id) ? await this.detachUsingAddress(id) : await this.detachUsingName(id)\n  }\n\n  override async privateChildren(): Promise<ModuleInstance[]> {\n    return [...(await this.attachedPrivateModules()), ...this.params.privateChildren ?? []]\n  }\n\n  override async publicChildren(): Promise<ModuleInstance[]> {\n    return [...(await this.attachedPublicModules()), ...this.params.publicChildren ?? []]\n  }\n\n  async register(mod: AttachableModuleInstance): Promise<void> {\n    this.started('warn')\n    if (this.registeredModuleMap[mod.address]) {\n      if (this.registeredModuleMap[mod.address] === mod) {\n        this.logger?.warn(`Module already registered at that address[${mod.address}]|${mod.id}|[${mod.config.schema}]`)\n      } else {\n        throw new Error(`Other module already registered at that address[${mod.address}]|${mod.id}|[${mod.config.schema}]`)\n      }\n    }\n    this.registeredModuleMap[mod.address] = mod\n    const args = { mod, name: mod.modName }\n    await this.emit('moduleRegistered', args)\n  }\n\n  registeredHandler(): Promisable<XyoAddress[]> {\n    return Promise.resolve(\n      (Object.keys(this.registeredModuleMap) as XyoAddress[]).map((key) => {\n        return key\n      }),\n    )\n  }\n\n  registeredModules(): AttachableModuleInstance[] {\n    return Object.values(this.registeredModuleMap).map((value) => {\n      return value\n    }).filter(exists)\n  }\n\n  async unregister(mod: ModuleInstance): Promise<ModuleInstance> {\n    // try to detach if it is attached\n    try {\n      await this.detach(mod.address)\n    } catch {\n      // Detach is best-effort during unregister.\n    }\n    delete this.registeredModuleMap[mod.address]\n    const args = { mod, name: mod.modName }\n    await this.emit('moduleUnregistered', args)\n    return this\n  }\n\n  protected async attachUsingAddress(address: XyoAddress, external?: boolean): Promise<(Lowercase<string> & {\n    readonly __hex: true\n  } & {\n    readonly __address: true\n  }) | XyoQuantAddress> {\n    return await this._attachMutex.runExclusive(async () => {\n      const existingModule = await this.resolve(address)\n      if (existingModule) {\n        this.logger?.warn(`MemoryNode: Module [${existingModule?.modName ?? existingModule?.address}] already attached at address [${address}]`)\n      }\n      const mod = assertEx(this.registeredModuleMap[address], () => `No Module Registered at address [${address}]`)\n\n      if (this._attachedPublicModules.has(mod.address)) {\n        this.logger?.warn(`Module [${mod.modName}] already attached at [${address}] (public)`)\n      }\n      if (this._attachedPrivateModules.has(mod.address)) {\n        this.logger?.warn(`Module [${mod.modName}] already attached at [${address}] (private)`)\n      }\n\n      const notificationList = await this.getModulesToNotifyAbout(mod)\n\n      // give it private access\n      mod.upResolver.addResolver?.(this.privateResolver)\n\n      // give it public access\n      mod.upResolver.addResolver?.(this.downResolver)\n\n      // give it outside access\n      mod.upResolver.addResolver?.(this.upResolver)\n\n      if (external) {\n        // expose it externally\n        this._attachedPublicModules.add(mod.address)\n        this.downResolver.addResolver(mod.downResolver)\n      } else {\n        this._attachedPrivateModules.add(mod.address)\n        this.privateResolver.addResolver(mod.downResolver)\n      }\n\n      mod.addParent(this)\n\n      const args = { mod, name: mod.modName }\n      await this.emit('moduleAttached', args)\n\n      if (isNodeModule(mod) && external) {\n        const attachedListener: EventListener<TEventData['moduleAttached']> = async (args: TEventData['moduleAttached']) =>\n          await this.emit('moduleAttached', args)\n\n        const detachedListener: EventListener<TEventData['moduleDetached']> = async (args: TEventData['moduleDetached']) =>\n          await this.emit('moduleDetached', args)\n\n        mod.on('moduleAttached', attachedListener as EventListener)\n        mod.on('moduleDetached', detachedListener as EventListener)\n      }\n\n      await this.notifyOfExistingModulesAttached(notificationList)\n\n      return address\n    })\n  }\n\n  protected async detachUsingAddress(address: XyoAddress): Promise<(Lowercase<string> & {\n    readonly __hex: true\n  } & {\n    readonly __address: true\n  }) | XyoQuantAddress> {\n    const mod = assertEx(this.registeredModuleMap[address], () => `No Module Registered at address [${address}]`)\n\n    const isAttachedPublic = this._attachedPublicModules.has(mod.address)\n    const isAttachedPrivate = this._attachedPrivateModules.has(mod.address)\n\n    assertEx(isAttachedPublic || isAttachedPrivate, () => `Module [${mod.modName}] not attached at [${address}]`)\n\n    // remove inside access\n    mod.upResolver?.removeResolver?.(this.privateResolver)\n\n    // remove outside access\n    mod.upResolver?.removeResolver?.(this.upResolver)\n\n    // remove external exposure\n    this.downResolver.removeResolver(mod.downResolver)\n\n    mod.removeParent(this.address)\n\n    if (isAttachedPublic) {\n      this._attachedPublicModules.delete(mod.address)\n    }\n\n    if (isAttachedPrivate) {\n      this._attachedPrivateModules.delete(mod.address)\n    }\n\n    const args = { mod, name: mod.modName }\n    await this.emit('moduleDetached', args)\n\n    // notify of all sub node children detach\n    if (isNodeModule(mod)) {\n      const notificationList = await this.getModulesToNotifyAbout(mod)\n      await this.notifyOfExistingModulesDetached(notificationList)\n    }\n    return address\n  }\n\n  protected override startHandler(): Promise<void> {\n    return super.startHandler()\n  }\n\n  private async attachUsingName(name: string, external?: boolean) {\n    const address = this.registeredModuleAddressFromName(name)\n    if (isDefined(address)) {\n      return await this.attachUsingAddress(address, external)\n    }\n  }\n\n  private async detachUsingName(name: string) {\n    const address = this.registeredModuleAddressFromName(name)\n    if (isDefined(address)) {\n      return await this.detachUsingAddress(address)\n    }\n  }\n\n  private async getModulesToNotifyAbout(node: ModuleInstance) {\n    const notifiedAddresses: string[] = []\n    // send attach events for all existing attached modules\n    const childModules = await node.resolve('*', { direction: 'down' })\n    return (\n      childModules.map((child) => {\n        // don't report self\n        if (node.address === child.address) {\n          return\n        }\n\n        // prevent loop\n        if (notifiedAddresses.includes(child.address)) {\n          return\n        }\n\n        notifiedAddresses.push(child.address)\n\n        return child\n      })\n    ).filter(exists)\n  }\n\n  private async notifyOfExistingModulesAttached(childModules: QueryableModule[]) {\n    await Promise.all(\n      childModules.map(async (child) => {\n        const args = { mod: child, name: child.modName }\n        await this.emit('moduleAttached', args)\n      }),\n    )\n  }\n\n  private async notifyOfExistingModulesDetached(childModules: QueryableModule[]) {\n    await Promise.all(\n      childModules.map(async (child) => {\n        const args = { mod: child, name: child.modName }\n        await this.emit('moduleDetached', args)\n      }),\n    )\n  }\n\n  private registeredModuleAddressFromName(name: string) {\n    return Object.values(this.registeredModuleMap).find((value) => {\n      return value?.modName === name\n    })?.address\n  }\n}\n", "import type { ModuleIdentifier, ModuleInstance } from '#module-model'\nimport { NodeHelper } from '#node-abstract'\nimport type { NodeInstance } from '#node-model'\n\nimport type { MemoryNodeParams } from '../MemoryNode.ts'\nimport { attachToExistingNode } from './attachToExistingNode.ts'\nimport { attachToNewNode } from './attachToNewNode.ts'\nimport {\n  flatAttachAllToExistingNode, flatAttachChildToExistingNode, flatAttachToExistingNode,\n} from './flatAttachToExistingNode.ts'\nimport { flatAttachToNewNode } from './flatAttachToNewNode.ts'\n\nexport const MemoryNodeHelper: {\n  attachToExistingNode: (source: NodeInstance, id: ModuleIdentifier, destination: NodeInstance) => Promise<NodeInstance>\n  attachToNewNode: (source: NodeInstance, id: ModuleIdentifier, destinationParams?: MemoryNodeParams) => Promise<NodeInstance>\n  attachedPrivateModules: (node: NodeInstance, maxDepth?: number) => Promise<ModuleInstance[]>\n  attachedPublicModules: (node: NodeInstance, maxDepth?: number) => Promise<ModuleInstance[]>\n  flatAttachAllToExistingNode: (source: NodeInstance, destination: NodeInstance) => Promise<NodeInstance>\n  flatAttachChildToExistingNode: (source: NodeInstance, id: ModuleIdentifier, destination: NodeInstance) => Promise<NodeInstance>\n  flatAttachToExistingNode: (source: NodeInstance, id: ModuleIdentifier, destination: NodeInstance) => Promise<NodeInstance>\n  flatAttachToNewNode: (source: NodeInstance, id: ModuleIdentifier, destinationParams: MemoryNodeParams) => Promise<NodeInstance>\n} = {\n  ...NodeHelper,\n  attachToExistingNode,\n  attachToNewNode,\n  flatAttachAllToExistingNode,\n  flatAttachChildToExistingNode,\n  flatAttachToExistingNode,\n  flatAttachToNewNode,\n}\n", "import { assertEx } from '@ariestools/sdk'\n\nimport type { ModuleIdentifier } from '#module-model'\nimport type { NodeInstance } from '#node-model'\nimport { asNodeInstance } from '#node-model'\n\nimport { MemoryNode } from '../MemoryNode.ts'\nimport { flatAttachToExistingNode } from './flatAttachToExistingNode.ts'\n\nexport const attachToExistingNode = async (source: NodeInstance, id: ModuleIdentifier, destination: NodeInstance): Promise<NodeInstance> => {\n  const parts = id.split(':')\n  const first = assertEx(parts.shift(), () => 'missing first part')\n  if (parts.length === 0) {\n    // this is an immediate child/children\n    return await flatAttachToExistingNode(source, first, destination)\n  } else {\n    // all parts that are not the last should be nodes, build them and nest\n    const firstModule = await source.resolve(first)\n    const firstNode = asNodeInstance(firstModule, () => 'first part is not a node', { required: true })\n    const newNode = await MemoryNode.create({ config: firstNode.config })\n    await destination.register?.(newNode)\n    await destination.attach(newNode.address, true)\n    await attachToExistingNode(firstNode, parts.join(':'), newNode)\n    return destination\n  }\n}\n", "import { assertEx, exists } from '@ariestools/sdk'\n\nimport type { ModuleIdentifier } from '#module-model'\nimport { asAttachableModuleInstance } from '#module-model'\nimport type { NodeInstance } from '#node-model'\n\nexport const flatAttachAllToExistingNode = async (source: NodeInstance, destination: NodeInstance): Promise<NodeInstance> => {\n  const children = (await source.publicChildren()).map(child => asAttachableModuleInstance(child)).filter(exists)\n  await Promise.all(\n    children.map(async (child) => {\n      await destination.register?.(child)\n      await destination.attach(child.address, true)\n    }),\n  )\n  return destination\n}\n\nexport const flatAttachChildToExistingNode = async (source: NodeInstance, id: ModuleIdentifier, destination: NodeInstance): Promise<NodeInstance> => {\n  assertEx(id !== '*', () => '* is not a single child')\n  const child = assertEx(await source.resolve(id), () => `Module ${id} not found`)\n  const attachableChild = asAttachableModuleInstance(child, () => `Module ${id} is not attachable`, { required: true })\n  await destination.register?.(attachableChild)\n  await destination.attach(child.address, true)\n  return destination\n}\n\nexport const flatAttachToExistingNode = async (source: NodeInstance, id: ModuleIdentifier, destination: NodeInstance): Promise<NodeInstance> => {\n  return id === '*' ? await flatAttachAllToExistingNode(source, destination) : flatAttachChildToExistingNode(source, id, destination)\n}\n", "import type { CreatableName } from '@ariestools/sdk'\n\nimport type { ModuleIdentifier } from '#module-model'\nimport type { NodeInstance } from '#node-model'\nimport { NodeConfigSchema } from '#node-model'\n\nimport type { MemoryNodeParams } from '../MemoryNode.ts'\nimport { MemoryNode } from '../MemoryNode.ts'\nimport { attachToExistingNode } from './attachToExistingNode.ts'\n\nconst DEFAULT_NODE_PARAMS = { config: { schema: NodeConfigSchema }, name: 'MemoryNode' as CreatableName }\n\nexport const attachToNewNode = async (\n  source: NodeInstance,\n  id: ModuleIdentifier,\n  destinationParams: MemoryNodeParams = DEFAULT_NODE_PARAMS,\n): Promise<NodeInstance> => {\n  const destination = await MemoryNode.create(destinationParams)\n  return await attachToExistingNode(source, id, destination)\n}\n", "import type { ModuleIdentifier } from '#module-model'\nimport type { NodeInstance } from '#node-model'\n\nimport type { MemoryNodeParams } from '../MemoryNode.ts'\nimport { MemoryNode } from '../MemoryNode.ts'\nimport { flatAttachToExistingNode } from './flatAttachToExistingNode.ts'\n\nexport const flatAttachToNewNode = async (\n  source: NodeInstance,\n  id: ModuleIdentifier,\n  destinationParams: MemoryNodeParams,\n): Promise<NodeInstance> => {\n  const destination = await MemoryNode.create(destinationParams)\n  return await flatAttachToExistingNode(source, id, destination)\n}\n"],
  "mappings": ";;;;;;;;;;;;AACA;AAAA,EACE;AAAA,EACA;AAAA,EAAQ;AAAA,EAAW;AAAA,OACd;AAEP,SAAS,aAAa;AAEtB;AAAA,EAGE;AAAA,OAIK;AACP,SAAS,oBAAoB;AAM7B,SAAS,oBAAoB;AAKtB,IAAM,aAAN,cACG,aAAkC;AAAA,EAChC,sBAA6E,CAAC;AAAA,EAEhF,eAAe,IAAI,MAAM;AAAA,EAEzB,0BAA0B,oBAAI,IAAgB;AAAA,EAC9C,yBAAyB,oBAAI,IAAgB;AAAA,EAErD,MAAM,cAAc,IAAsB,UAIpB;AACpB,UAAM,KAAK,aAAa,QAAQ,IAAI;AACpC,WAAO;AAAA,MACL,UAAU,EAAE,IAAI,MAAM,KAAK,mBAAmB,IAAI,QAAQ,IAAI,MAAM,KAAK,gBAAgB,IAAI,QAAQ;AAAA,MACrG,MAAM,4BAA4B,EAAE;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,MAAM,eAAe,IAAyD;AAC5E,UAAM,SAAS,MAAM,KAAK,eAAe,GAAG,KAAK,CAAAA,WAASA,OAAM,YAAY,MAAMA,OAAM,YAAY,EAAE;AACtG,QAAI,OAAO;AACT,aAAO;AAAA,QAAE,SAAS,MAAM;AAAA,QAAS,YAAY,KAAK,IAAI,IAAI,MAAO,KAAK;AAAA;AAAA,MAAoB;AAAA,IAC5F;AACA,UAAM,IAAI,MAAM,mCAAmC,EAAE,GAAG;AAAA,EAC1D;AAAA,EAEA,MAAM,cAAc,IAIc;AAChC,WAAO,UAAU,EAAE,IAAI,MAAM,KAAK,mBAAmB,EAAE,IAAI,MAAM,KAAK,gBAAgB,EAAE;AAAA,EAC1F;AAAA,EAEA,MAAe,kBAA6C;AAC1D,WAAO,CAAC,GAAI,MAAM,KAAK,uBAAuB,GAAI,GAAG,KAAK,OAAO,mBAAmB,CAAC,CAAC;AAAA,EACxF;AAAA,EAEA,MAAe,iBAA4C;AACzD,WAAO,CAAC,GAAI,MAAM,KAAK,sBAAsB,GAAI,GAAG,KAAK,OAAO,kBAAkB,CAAC,CAAC;AAAA,EACtF;AAAA,EAEA,MAAM,SAAS,KAA8C;AAC3D,SAAK,QAAQ,MAAM;AACnB,QAAI,KAAK,oBAAoB,IAAI,OAAO,GAAG;AACzC,UAAI,KAAK,oBAAoB,IAAI,OAAO,MAAM,KAAK;AACjD,aAAK,QAAQ,KAAK,6CAA6C,IAAI,OAAO,KAAK,IAAI,EAAE,KAAK,IAAI,OAAO,MAAM,GAAG;AAAA,MAChH,OAAO;AACL,cAAM,IAAI,MAAM,mDAAmD,IAAI,OAAO,KAAK,IAAI,EAAE,KAAK,IAAI,OAAO,MAAM,GAAG;AAAA,MACpH;AAAA,IACF;AACA,SAAK,oBAAoB,IAAI,OAAO,IAAI;AACxC,UAAM,OAAO,EAAE,KAAK,MAAM,IAAI,QAAQ;AACtC,UAAM,KAAK,KAAK,oBAAoB,IAAI;AAAA,EAC1C;AAAA,EAEA,oBAA8C;AAC5C,WAAO,QAAQ;AAAA,MACZ,OAAO,KAAK,KAAK,mBAAmB,EAAmB,IAAI,CAAC,QAAQ;AACnE,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,oBAAgD;AAC9C,WAAO,OAAO,OAAO,KAAK,mBAAmB,EAAE,IAAI,CAAC,UAAU;AAC5D,aAAO;AAAA,IACT,CAAC,EAAE,OAAO,MAAM;AAAA,EAClB;AAAA,EAEA,MAAM,WAAW,KAA8C;AAE7D,QAAI;AACF,YAAM,KAAK,OAAO,IAAI,OAAO;AAAA,IAC/B,QAAQ;AAAA,IAER;AACA,WAAO,KAAK,oBAAoB,IAAI,OAAO;AAC3C,UAAM,OAAO,EAAE,KAAK,MAAM,IAAI,QAAQ;AACtC,UAAM,KAAK,KAAK,sBAAsB,IAAI;AAC1C,WAAO;AAAA,EACT;AAAA,EAEA,MAAgB,mBAAmB,SAAqB,UAIlC;AACpB,WAAO,MAAM,KAAK,aAAa,aAAa,YAAY;AACtD,YAAM,iBAAiB,MAAM,KAAK,QAAQ,OAAO;AACjD,UAAI,gBAAgB;AAClB,aAAK,QAAQ,KAAK,uBAAuB,gBAAgB,WAAW,gBAAgB,OAAO,kCAAkC,OAAO,GAAG;AAAA,MACzI;AACA,YAAM,MAAM,SAAS,KAAK,oBAAoB,OAAO,GAAG,MAAM,oCAAoC,OAAO,GAAG;AAE5G,UAAI,KAAK,uBAAuB,IAAI,IAAI,OAAO,GAAG;AAChD,aAAK,QAAQ,KAAK,WAAW,IAAI,OAAO,0BAA0B,OAAO,YAAY;AAAA,MACvF;AACA,UAAI,KAAK,wBAAwB,IAAI,IAAI,OAAO,GAAG;AACjD,aAAK,QAAQ,KAAK,WAAW,IAAI,OAAO,0BAA0B,OAAO,aAAa;AAAA,MACxF;AAEA,YAAM,mBAAmB,MAAM,KAAK,wBAAwB,GAAG;AAG/D,UAAI,WAAW,cAAc,KAAK,eAAe;AAGjD,UAAI,WAAW,cAAc,KAAK,YAAY;AAG9C,UAAI,WAAW,cAAc,KAAK,UAAU;AAE5C,UAAI,UAAU;AAEZ,aAAK,uBAAuB,IAAI,IAAI,OAAO;AAC3C,aAAK,aAAa,YAAY,IAAI,YAAY;AAAA,MAChD,OAAO;AACL,aAAK,wBAAwB,IAAI,IAAI,OAAO;AAC5C,aAAK,gBAAgB,YAAY,IAAI,YAAY;AAAA,MACnD;AAEA,UAAI,UAAU,IAAI;AAElB,YAAM,OAAO,EAAE,KAAK,MAAM,IAAI,QAAQ;AACtC,YAAM,KAAK,KAAK,kBAAkB,IAAI;AAEtC,UAAI,aAAa,GAAG,KAAK,UAAU;AACjC,cAAM,mBAAgE,OAAOC,UAC3E,MAAM,KAAK,KAAK,kBAAkBA,KAAI;AAExC,cAAM,mBAAgE,OAAOA,UAC3E,MAAM,KAAK,KAAK,kBAAkBA,KAAI;AAExC,YAAI,GAAG,kBAAkB,gBAAiC;AAC1D,YAAI,GAAG,kBAAkB,gBAAiC;AAAA,MAC5D;AAEA,YAAM,KAAK,gCAAgC,gBAAgB;AAE3D,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAAA,EAEA,MAAgB,mBAAmB,SAIb;AACpB,UAAM,MAAM,SAAS,KAAK,oBAAoB,OAAO,GAAG,MAAM,oCAAoC,OAAO,GAAG;AAE5G,UAAM,mBAAmB,KAAK,uBAAuB,IAAI,IAAI,OAAO;AACpE,UAAM,oBAAoB,KAAK,wBAAwB,IAAI,IAAI,OAAO;AAEtE,aAAS,oBAAoB,mBAAmB,MAAM,WAAW,IAAI,OAAO,sBAAsB,OAAO,GAAG;AAG5G,QAAI,YAAY,iBAAiB,KAAK,eAAe;AAGrD,QAAI,YAAY,iBAAiB,KAAK,UAAU;AAGhD,SAAK,aAAa,eAAe,IAAI,YAAY;AAEjD,QAAI,aAAa,KAAK,OAAO;AAE7B,QAAI,kBAAkB;AACpB,WAAK,uBAAuB,OAAO,IAAI,OAAO;AAAA,IAChD;AAEA,QAAI,mBAAmB;AACrB,WAAK,wBAAwB,OAAO,IAAI,OAAO;AAAA,IACjD;AAEA,UAAM,OAAO,EAAE,KAAK,MAAM,IAAI,QAAQ;AACtC,UAAM,KAAK,KAAK,kBAAkB,IAAI;AAGtC,QAAI,aAAa,GAAG,GAAG;AACrB,YAAM,mBAAmB,MAAM,KAAK,wBAAwB,GAAG;AAC/D,YAAM,KAAK,gCAAgC,gBAAgB;AAAA,IAC7D;AACA,WAAO;AAAA,EACT;AAAA,EAEmB,eAA8B;AAC/C,WAAO,MAAM,aAAa;AAAA,EAC5B;AAAA,EAEA,MAAc,gBAAgB,MAAc,UAAoB;AAC9D,UAAM,UAAU,KAAK,gCAAgC,IAAI;AACzD,QAAI,UAAU,OAAO,GAAG;AACtB,aAAO,MAAM,KAAK,mBAAmB,SAAS,QAAQ;AAAA,IACxD;AAAA,EACF;AAAA,EAEA,MAAc,gBAAgB,MAAc;AAC1C,UAAM,UAAU,KAAK,gCAAgC,IAAI;AACzD,QAAI,UAAU,OAAO,GAAG;AACtB,aAAO,MAAM,KAAK,mBAAmB,OAAO;AAAA,IAC9C;AAAA,EACF;AAAA,EAEA,MAAc,wBAAwB,MAAsB;AAC1D,UAAM,oBAA8B,CAAC;AAErC,UAAM,eAAe,MAAM,KAAK,QAAQ,KAAK,EAAE,WAAW,OAAO,CAAC;AAClE,WACE,aAAa,IAAI,CAAC,UAAU;AAE1B,UAAI,KAAK,YAAY,MAAM,SAAS;AAClC;AAAA,MACF;AAGA,UAAI,kBAAkB,SAAS,MAAM,OAAO,GAAG;AAC7C;AAAA,MACF;AAEA,wBAAkB,KAAK,MAAM,OAAO;AAEpC,aAAO;AAAA,IACT,CAAC,EACD,OAAO,MAAM;AAAA,EACjB;AAAA,EAEA,MAAc,gCAAgC,cAAiC;AAC7E,UAAM,QAAQ;AAAA,MACZ,aAAa,IAAI,OAAO,UAAU;AAChC,cAAM,OAAO,EAAE,KAAK,OAAO,MAAM,MAAM,QAAQ;AAC/C,cAAM,KAAK,KAAK,kBAAkB,IAAI;AAAA,MACxC,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEA,MAAc,gCAAgC,cAAiC;AAC7E,UAAM,QAAQ;AAAA,MACZ,aAAa,IAAI,OAAO,UAAU;AAChC,cAAM,OAAO,EAAE,KAAK,OAAO,MAAM,MAAM,QAAQ;AAC/C,cAAM,KAAK,KAAK,kBAAkB,IAAI;AAAA,MACxC,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEQ,gCAAgC,MAAc;AACpD,WAAO,OAAO,OAAO,KAAK,mBAAmB,EAAE,KAAK,CAAC,UAAU;AAC7D,aAAO,OAAO,YAAY;AAAA,IAC5B,CAAC,GAAG;AAAA,EACN;AACF;AA7Pa,aAAN;AAAA,EADN,gBAAgB;AAAA,GACJ;;;AC1Bb,SAAS,kBAAkB;;;ACD3B,SAAS,YAAAC,iBAAgB;AAIzB,SAAS,sBAAsB;;;ACJ/B,SAAS,YAAAC,WAAU,UAAAC,eAAc;AAGjC,SAAS,kCAAkC;AAGpC,IAAM,8BAA8B,OAAO,QAAsB,gBAAqD;AAC3H,QAAM,YAAY,MAAM,OAAO,eAAe,GAAG,IAAI,WAAS,2BAA2B,KAAK,CAAC,EAAE,OAAOA,OAAM;AAC9G,QAAM,QAAQ;AAAA,IACZ,SAAS,IAAI,OAAO,UAAU;AAC5B,YAAM,YAAY,WAAW,KAAK;AAClC,YAAM,YAAY,OAAO,MAAM,SAAS,IAAI;AAAA,IAC9C,CAAC;AAAA,EACH;AACA,SAAO;AACT;AAEO,IAAM,gCAAgC,OAAO,QAAsB,IAAsB,gBAAqD;AACnJ,EAAAD,UAAS,OAAO,KAAK,MAAM,yBAAyB;AACpD,QAAM,QAAQA,UAAS,MAAM,OAAO,QAAQ,EAAE,GAAG,MAAM,UAAU,EAAE,YAAY;AAC/E,QAAM,kBAAkB,2BAA2B,OAAO,MAAM,UAAU,EAAE,sBAAsB,EAAE,UAAU,KAAK,CAAC;AACpH,QAAM,YAAY,WAAW,eAAe;AAC5C,QAAM,YAAY,OAAO,MAAM,SAAS,IAAI;AAC5C,SAAO;AACT;AAEO,IAAM,2BAA2B,OAAO,QAAsB,IAAsB,gBAAqD;AAC9I,SAAO,OAAO,MAAM,MAAM,4BAA4B,QAAQ,WAAW,IAAI,8BAA8B,QAAQ,IAAI,WAAW;AACpI;;;ADnBO,IAAM,uBAAuB,OAAO,QAAsB,IAAsB,gBAAqD;AAC1I,QAAM,QAAQ,GAAG,MAAM,GAAG;AAC1B,QAAM,QAAQE,UAAS,MAAM,MAAM,GAAG,MAAM,oBAAoB;AAChE,MAAI,MAAM,WAAW,GAAG;AAEtB,WAAO,MAAM,yBAAyB,QAAQ,OAAO,WAAW;AAAA,EAClE,OAAO;AAEL,UAAM,cAAc,MAAM,OAAO,QAAQ,KAAK;AAC9C,UAAM,YAAY,eAAe,aAAa,MAAM,4BAA4B,EAAE,UAAU,KAAK,CAAC;AAClG,UAAM,UAAU,MAAM,WAAW,OAAO,EAAE,QAAQ,UAAU,OAAO,CAAC;AACpE,UAAM,YAAY,WAAW,OAAO;AACpC,UAAM,YAAY,OAAO,QAAQ,SAAS,IAAI;AAC9C,UAAM,qBAAqB,WAAW,MAAM,KAAK,GAAG,GAAG,OAAO;AAC9D,WAAO;AAAA,EACT;AACF;;;AErBA,SAAS,wBAAwB;AAMjC,IAAM,sBAAsB,EAAE,QAAQ,EAAE,QAAQ,iBAAiB,GAAG,MAAM,aAA8B;AAEjG,IAAM,kBAAkB,OAC7B,QACA,IACA,oBAAsC,wBACZ;AAC1B,QAAM,cAAc,MAAM,WAAW,OAAO,iBAAiB;AAC7D,SAAO,MAAM,qBAAqB,QAAQ,IAAI,WAAW;AAC3D;;;ACZO,IAAM,sBAAsB,OACjC,QACA,IACA,sBAC0B;AAC1B,QAAM,cAAc,MAAM,WAAW,OAAO,iBAAiB;AAC7D,SAAO,MAAM,yBAAyB,QAAQ,IAAI,WAAW;AAC/D;;;AJFO,IAAM,mBAST;AAAA,EACF,GAAG;AAAA,EACH;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;",
  "names": ["child", "args", "assertEx", "assertEx", "exists", "assertEx"]
}
