{"version":3,"file":"index.cjs","names":["z"],"sources":["../src/index.ts"],"sourcesContent":["import { existsSync, readFileSync, readdirSync, statSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { Plugin, ContractConfig } from \"@wagmi/cli\";\nimport { z } from \"zod\";\nimport type { Address } from \"viem\";\n\nconst addressRe = /^0x[0-9a-fA-F]{40}$/;\nconst AddressSchema = z.custom<Address>((v) => typeof v === \"string\" && addressRe.test(v), \"invalid address\");\n\nconst AbiSchema = z.custom<ContractConfig[\"abi\"]>((v) => Array.isArray(v), \"invalid abi\");\n\n// The slice of a deployoor deployment record this plugin needs. deployoor writes the full\n// record; we validate (and ignore) only what wagmi consumes, so the two packages\n// stay decoupled — the `deployments/*.json` format is the contract between them.\nconst DeploymentRecord = z.object({\n  contractName: z.string(),\n  deploymentName: z.string(),\n  abi: AbiSchema,\n  address: AddressSchema,\n  chainId: z.number().int().positive(),\n});\n\nconst jsonFiles = (dir: string): readonly string[] =>\n  existsSync(dir)\n    ? readdirSync(dir).flatMap((entry) => {\n        const full = join(dir, entry);\n        return statSync(full).isDirectory() ? jsonFiles(full) : full.endsWith(\".json\") ? [full] : [];\n      })\n    : [];\n\n/**\n * Read a deployoor `deployments/` folder into `@wagmi/cli` contracts. Records that share\n * a deployment name are folded into one contract whose `address` maps chainId →\n * address, so the same contract across chains becomes a single multi-chain entry.\n */\nexport const readDeploymentContracts = (deploymentsPath: string): ContractConfig[] => {\n  const records = jsonFiles(deploymentsPath).flatMap((file) => {\n    const parsed = DeploymentRecord.safeParse(JSON.parse(readFileSync(file, \"utf8\")));\n    return parsed.success ? [parsed.data] : [];\n  });\n\n  const byName = records.reduce<Record<string, ContractConfig>>((acc, rec) => {\n    const prior = acc[rec.deploymentName];\n    if (prior !== undefined && JSON.stringify(prior.abi) !== JSON.stringify(rec.abi)) {\n      throw new Error(\n        `Deployment \"${rec.deploymentName}\" has different ABIs across chains; use distinct deploymentName values.`,\n      );\n    }\n    const address = {\n      ...(typeof prior?.address === \"object\" ? prior.address : {}),\n      [rec.chainId]: rec.address,\n    };\n    return {\n      ...acc,\n      [rec.deploymentName]: { name: rec.deploymentName, abi: prior?.abi ?? rec.abi, address },\n    };\n  }, {});\n\n  return Object.values(byName);\n};\n\n/**\n * A `@wagmi/cli` plugin that sources contracts from a deployoor `deployments/` folder.\n *\n * @example\n * ```ts\n * import { defineConfig } from \"@wagmi/cli\";\n * import { actions } from \"@wagmi/cli/plugins\";\n * import { deployments } from \"@deployoor/wagmi\";\n *\n * export default defineConfig({\n *   out: \"src/generated.ts\",\n *   plugins: [deployments({ path: \"./deployments\" }), actions()],\n * });\n * ```\n */\nexport const deployments = (options: { path?: string } = {}): Plugin => {\n  const path = options.path ?? \"./deployments\";\n  return {\n    name: \"deployoor-deployments\",\n    contracts: () => readDeploymentContracts(path),\n  };\n};\n"],"mappings":";;;;;AAMA,MAAM,YAAY;AAClB,MAAM,gBAAgBA,IAAAA,EAAE,QAAiB,MAAM,OAAO,MAAM,YAAY,UAAU,KAAK,CAAC,GAAG,iBAAiB;AAE5G,MAAM,YAAYA,IAAAA,EAAE,QAA+B,MAAM,MAAM,QAAQ,CAAC,GAAG,aAAa;AAKxF,MAAM,mBAAmBA,IAAAA,EAAE,OAAO;CAChC,cAAcA,IAAAA,EAAE,OAAO;CACvB,gBAAgBA,IAAAA,EAAE,OAAO;CACzB,KAAK;CACL,SAAS;CACT,SAASA,IAAAA,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS;AACrC,CAAC;AAED,MAAM,aAAa,SAAA,GAAA,QAAA,WAAA,CACN,GAAG,KAAA,GAAA,QAAA,YAAA,CACE,GAAG,CAAC,CAAC,SAAS,UAAU;CAClC,MAAM,QAAA,GAAA,UAAA,KAAA,CAAY,KAAK,KAAK;CAC5B,QAAA,GAAA,QAAA,SAAA,CAAgB,IAAI,CAAC,CAAC,YAAY,IAAI,UAAU,IAAI,IAAI,KAAK,SAAS,OAAO,IAAI,CAAC,IAAI,IAAI,CAAC;AAC7F,CAAC,IACD,CAAC;;;;;;AAOP,MAAa,2BAA2B,oBAA8C;CAMpF,MAAM,SALU,UAAU,eAAe,CAAC,CAAC,SAAS,SAAS;EAC3D,MAAM,SAAS,iBAAiB,UAAU,KAAK,OAAA,GAAA,QAAA,aAAA,CAAmB,MAAM,MAAM,CAAC,CAAC;EAChF,OAAO,OAAO,UAAU,CAAC,OAAO,IAAI,IAAI,CAAC;CAC3C,CAEqB,CAAC,CAAC,QAAwC,KAAK,QAAQ;EAC1E,MAAM,QAAQ,IAAI,IAAI;EACtB,IAAI,UAAU,KAAA,KAAa,KAAK,UAAU,MAAM,GAAG,MAAM,KAAK,UAAU,IAAI,GAAG,GAC7E,MAAM,IAAI,MACR,eAAe,IAAI,eAAe,wEACpC;EAEF,MAAM,UAAU;GACd,GAAI,OAAO,OAAO,YAAY,WAAW,MAAM,UAAU,CAAC;IACzD,IAAI,UAAU,IAAI;EACrB;EACA,OAAO;GACL,GAAG;IACF,IAAI,iBAAiB;IAAE,MAAM,IAAI;IAAgB,KAAK,OAAO,OAAO,IAAI;IAAK;GAAQ;EACxF;CACF,GAAG,CAAC,CAAC;CAEL,OAAO,OAAO,OAAO,MAAM;AAC7B;;;;;;;;;;;;;;;;AAiBA,MAAa,eAAe,UAA6B,CAAC,MAAc;CACtE,MAAM,OAAO,QAAQ,QAAQ;CAC7B,OAAO;EACL,MAAM;EACN,iBAAiB,wBAAwB,IAAI;CAC/C;AACF"}