{"_id":"iceberg-js","_rev":"9-8792f1169acc3459bacf532e04a27fe6","name":"iceberg-js","dist-tags":{"latest":"1.0.0"},"versions":{"0.0.0":{"name":"iceberg-js","version":"0.0.0","author":"","license":"ISC","_id":"iceberg-js@0.0.0","maintainers":[{"name":"etienne_supa","email":"etienne@supabase.io"}],"homepage":"https://github.com/supabase/supabase-js#readme","bugs":{"url":"https://github.com/supabase/supabase-js/issues"},"dist":{"shasum":"dfe50cdfb74f80b509cfe2e4ce4d997a7aef670b","tarball":"https://registry.npmjs.org/iceberg-js/-/iceberg-js-0.0.0.tgz","fileCount":1,"integrity":"sha512-+hJDC9avwJGBVi/nm22NDAQz+fCnD5Hs9UtNjKiyMJpQp+qQr8JXkD3za1p84+puLpWPsZI1ng7uvI3Wsd+ZcQ==","signatures":[{"sig":"MEUCIQDeHT7nqnG9onwjIJwEHYiTiA1uvsOYhm7dQ8Mqr0pIcQIgGMvNA2llxVqbxyFSyf6IdDHe+FYmNijlPvkjHq47ikw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":450},"main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"etienne_supa","email":"etienne@supabase.io"},"repository":{"url":"git+https://github.com/supabase/supabase-js.git","type":"git"},"_npmVersion":"10.9.2","directories":{},"_nodeVersion":"23.11.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/iceberg-js_0.0.0_1763644284782_0.6949466208832125","host":"s3://npm-registry-packages-npm-production"}},"0.0.1":{"name":"iceberg-js","version":"0.0.1","author":"","license":"ISC","_id":"iceberg-js@0.0.1","maintainers":[{"name":"etienne_supa","email":"etienne@supabase.io"}],"homepage":"https://github.com/supabase/iceberg-js#readme","bugs":{"url":"https://github.com/supabase/iceberg-js/issues"},"dist":{"shasum":"c7114b37334aa39d584f4bf011537661e3f355cb","tarball":"https://registry.npmjs.org/iceberg-js/-/iceberg-js-0.0.1.tgz","fileCount":1,"integrity":"sha512-BHECxAVyrRXtBQYAimgtc/mjTEcL4oJpo7K00qWYyxjP/Npd3jvISMXPkohbyo1LnGF5D2xvcVJjRUWIAduw9w==","signatures":[{"sig":"MEYCIQDwnySXGcFCgluWbWQnNcu/WnKaD1gq5YMl2Q1377FXkQIhANpNZQGFv2UmWUjs0sKN7eqXCPS2vmA6yk4/SZYr0mqB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":447},"main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"etienne_supa","email":"etienne@supabase.io"},"repository":{"url":"git+https://github.com/supabase/iceberg-js.git","type":"git"},"_npmVersion":"10.9.2","directories":{},"_nodeVersion":"23.11.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/iceberg-js_0.0.1_1763654841731_0.006583918526967603","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"iceberg-js","version":"0.1.0","keywords":["iceberg","apache-iceberg","rest-catalog","data-lake","catalog"],"author":{"name":"mandarini"},"license":"MIT","_id":"iceberg-js@0.1.0","maintainers":[{"name":"etienne_supa","email":"etienne@supabase.io"}],"homepage":"https://github.com/supabase/iceberg-js#readme","bugs":{"url":"https://github.com/supabase/iceberg-js/issues"},"dist":{"shasum":"356d73914aef657a8c36a83b70682c76d1a2d91c","tarball":"https://registry.npmjs.org/iceberg-js/-/iceberg-js-0.1.0.tgz","fileCount":9,"integrity":"sha512-Tsi34XPBojlxNwCg/uoKOQ0nKmHLn8evbcMfBAyRSorYHGEd3n3V0kXbDtTIVsuOx+cxY8I199oVLZvqtn1nAQ==","signatures":[{"sig":"MEYCIQC7zY2x2fx5GwuzbZtQqcIETfzjU2rrsCC5vdl5O3L32gIhAOQ1p4NmB2UBycdqLPDe7y/p8U9e1Ga0Mnr5rG+ewagN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/iceberg-js@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":111443},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"f391d7bd878d0abb17029b3ecc6eb685e786daf0","scripts":{"dev":"tsup --watch","lint":"eslint .","test":"vitest run","build":"tsup","check":"pnpm lint && pnpm type-check && pnpm test && pnpm build","format":"prettier --write .","test:watch":"vitest watch","type-check":"tsc --noEmit","test:integration":"bash scripts/test-integration.sh","test:integration:ci":"bash scripts/test-integration.sh --cleanup"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4a4dbd-9716-4c38-9655-217fa50d778d"}},"repository":{"url":"git+https://github.com/supabase/iceberg-js.git","type":"git"},"_npmVersion":"11.6.3","description":"A small, framework-agnostic JavaScript/TypeScript client for the Apache Iceberg REST Catalog","directories":{},"_nodeVersion":"20.19.5","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.6.1","tsup":"^8.5.1","eslint":"^9.39.1","vitest":"^4.0.12","globals":"^16.5.0","prettier":"^3.6.2","@eslint/js":"^9.39.1","typescript":"^5.9.3","@types/node":"^20.0.0","@eslint/json":"^0.14.0","@eslint/markdown":"^7.5.1","typescript-eslint":"^8.47.0"},"_npmOperationalInternal":{"tmp":"tmp/iceberg-js_0.1.0_1763719826328_0.3926692260361304","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"iceberg-js","version":"0.5.2","keywords":["iceberg","apache-iceberg","rest-catalog","data-lake","catalog"],"author":{"name":"mandarini"},"license":"MIT","_id":"iceberg-js@0.5.2","maintainers":[{"name":"etienne_supa","email":"etienne@supabase.io"}],"homepage":"https://github.com/supabase/iceberg-js#readme","bugs":{"url":"https://github.com/supabase/iceberg-js/issues"},"dist":{"shasum":"f947527a5c18dcd1dcde6a7d63924c475a59b652","tarball":"https://registry.npmjs.org/iceberg-js/-/iceberg-js-0.5.2.tgz","fileCount":9,"integrity":"sha512-CzEsXvdcqOEWAGUsedWZ95IeLIJ7BTlJsE+fMuXck9KafaX6hvsVepUzZoMC2sI+AHT4cF8s6TrBj+TLSOGDYA==","signatures":[{"sig":"MEYCIQCjPqBxCGnhYT/r5vho+XAq1ZlcHT5GyMfdWnlDan7BvAIhAITNFq9jVLj/9DiQgVgmTZgqZTf0JYnfCRBUS3UaRvsO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/iceberg-js@0.5.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":111636},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"b3dee2e20b104f3b76cdfbe6eee98ea1a0057886","scripts":{"dev":"tsup --watch","lint":"eslint .","test":"vitest run","build":"tsup","check":"pnpm lint && pnpm type-check && pnpm test && pnpm build","format":"prettier --write .","test:watch":"vitest watch","type-check":"tsc --noEmit","test:integration":"bash scripts/test-integration.sh","test:integration:ci":"bash scripts/test-integration.sh --cleanup"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8952e9f5-4a64-400b-9f42-c81a8677cd4c"}},"repository":{"url":"git+https://github.com/supabase/iceberg-js.git","type":"git"},"_npmVersion":"11.6.3","description":"A small, framework-agnostic JavaScript/TypeScript client for the Apache Iceberg REST Catalog","directories":{},"_nodeVersion":"22.21.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.6.1","tsup":"^8.5.1","eslint":"^9.39.1","vitest":"^4.0.12","globals":"^16.5.0","prettier":"^3.6.2","@eslint/js":"^9.39.1","typescript":"^5.9.3","@types/node":"^20.0.0","@eslint/json":"^0.14.0","@eslint/markdown":"^7.5.1","typescript-eslint":"^8.47.0"},"_npmOperationalInternal":{"tmp":"tmp/iceberg-js_0.5.2_1763722055940_0.8204199832068231","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"iceberg-js","version":"0.6.0","keywords":["iceberg","apache-iceberg","rest-catalog","data-lake","catalog"],"author":{"name":"mandarini"},"license":"MIT","_id":"iceberg-js@0.6.0","maintainers":[{"name":"etienne_supa","email":"etienne@supabase.io"}],"homepage":"https://github.com/supabase/iceberg-js#readme","bugs":{"url":"https://github.com/supabase/iceberg-js/issues"},"dist":{"shasum":"ec2240bc7407ecffaf174e072f8a5725ca2b0cdb","tarball":"https://registry.npmjs.org/iceberg-js/-/iceberg-js-0.6.0.tgz","fileCount":9,"integrity":"sha512-YJhyxobghHH57WbRVIlCYcFXDtfAJb/r+5Uz7rxLicpFwX2be1rQD2oVOktyyLAE+vlpgGTezvKkFPLfQLSPfw==","signatures":[{"sig":"MEQCIADfBsvNP+Em1tUN+snkjiQi7Z4mymcLpmTkPBLlQWL1AiATFHQ5O+eNURIPMxz3wKnWl5i/soFC/reZQqgLIq9NJQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/iceberg-js@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":115682},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.mjs"},"default":"./dist/index.mjs","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"734e3f187ea16224c20821ebcadc3195fd20188b","scripts":{"dev":"tsup --watch","lint":"eslint .","test":"vitest run","build":"tsup","check":"pnpm lint && pnpm type-check && pnpm test && pnpm build","format":"prettier --write .","test:watch":"vitest watch","type-check":"tsc --noEmit","test:integration":"bash scripts/test-integration.sh","test:compatibility":"bash test-compatibility/run-all.sh","test:integration:ci":"bash scripts/test-integration.sh --cleanup"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8952e9f5-4a64-400b-9f42-c81a8677cd4c"}},"repository":{"url":"git+https://github.com/supabase/iceberg-js.git","type":"git"},"_npmVersion":"11.6.3","description":"A small, framework-agnostic JavaScript/TypeScript client for the Apache Iceberg REST Catalog","directories":{},"_nodeVersion":"22.21.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.6.1","tsup":"^8.5.1","eslint":"^9.39.1","vitest":"^4.0.12","globals":"^16.5.0","prettier":"^3.6.2","@eslint/js":"^9.39.1","typescript":"^5.9.3","@types/node":"^20.0.0","@eslint/json":"^0.14.0","@eslint/markdown":"^7.5.1","typescript-eslint":"^8.47.0"},"_npmOperationalInternal":{"tmp":"tmp/iceberg-js_0.6.0_1763732246653_0.9768434778921187","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"iceberg-js","version":"0.7.0","keywords":["iceberg","apache-iceberg","rest-catalog","data-lake","catalog"],"author":{"name":"mandarini"},"license":"MIT","_id":"iceberg-js@0.7.0","maintainers":[{"name":"etienne_supa","email":"etienne@supabase.io"}],"homepage":"https://github.com/supabase/iceberg-js#readme","bugs":{"url":"https://github.com/supabase/iceberg-js/issues"},"dist":{"shasum":"8dae401feea8a3629417fad85d2f08d6e71aaf61","tarball":"https://registry.npmjs.org/iceberg-js/-/iceberg-js-0.7.0.tgz","fileCount":9,"integrity":"sha512-7VZYpt4OiOYh3w7yv04lAd8AjmAZAMamP7I83Ml/zDT4lGd7Lnb5ibrJ45euIgx0Qb4DEkud6+4OTq+IS/Wf0g==","signatures":[{"sig":"MEUCIEG6GMLs5Vqdzc0pqX5m47aDgvI8BilH5RAT9cF5fMTrAiEAr7DyJLWbuXStNvYY0uSEubG588n2jsGmnS8SNXNPI5g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/iceberg-js@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":141887},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.mjs"},"default":"./dist/index.mjs","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"e5624d94d2594a3f212fb192e196c8636d64dcf2","scripts":{"dev":"tsup --watch","docs":"typedoc src/index.ts","lint":"eslint .","test":"vitest run","build":"tsup","check":"pnpm lint && pnpm type-check && pnpm test && pnpm build","format":"prettier --write .","test:watch":"vitest watch","type-check":"tsc --noEmit","test:integration":"bash scripts/test-integration.sh","test:compatibility":"bash test/compatibility/run-all.sh","test:integration:ci":"bash scripts/test-integration.sh --cleanup"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8952e9f5-4a64-400b-9f42-c81a8677cd4c"}},"repository":{"url":"git+https://github.com/supabase/iceberg-js.git","type":"git"},"_npmVersion":"11.6.3","description":"A small, framework-agnostic JavaScript/TypeScript client for the Apache Iceberg REST Catalog","directories":{},"_nodeVersion":"22.21.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.6.1","tsup":"^8.5.1","eslint":"^9.39.1","vitest":"^4.0.12","globals":"^16.5.0","typedoc":"^0.28.14","prettier":"^3.6.2","@eslint/js":"^9.39.1","typescript":"^5.9.3","@types/node":"^20.0.0","@eslint/json":"^0.14.0","@eslint/markdown":"^7.5.1","typescript-eslint":"^8.47.0"},"_npmOperationalInternal":{"tmp":"tmp/iceberg-js_0.7.0_1763735024209_0.3901422780692918","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"iceberg-js","version":"0.8.0","keywords":["iceberg","apache-iceberg","rest-catalog","data-lake","catalog"],"author":{"name":"mandarini"},"license":"MIT","_id":"iceberg-js@0.8.0","maintainers":[{"name":"etienne_supa","email":"etienne@supabase.io"}],"homepage":"https://github.com/supabase/iceberg-js#readme","bugs":{"url":"https://github.com/supabase/iceberg-js/issues"},"dist":{"shasum":"443e33b0c6676782bf7b74210292b3ccbea6432b","tarball":"https://registry.npmjs.org/iceberg-js/-/iceberg-js-0.8.0.tgz","fileCount":9,"integrity":"sha512-kmgmea2nguZEvRqW79gDqNXyxA3OS5WIgMVffrHpqXV4F/J4UmNIw2vstixioLTNSkd5rFB8G0s3Lwzogm6OFw==","signatures":[{"sig":"MEQCIAcI8Yn+haEHc4SMufNyOQxQ8Nooy+Is0yVCfKX6ihc4AiAEWbbOUtjLJD5sp81l2XpCy9CbkeZf8g4k7ee2EPPboQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/iceberg-js@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":152871},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.mjs"},"default":"./dist/index.mjs","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"28478565bc9b6c46622a4d1681a0c58813c02f50","scripts":{"dev":"tsup --watch","docs":"typedoc src/index.ts","lint":"eslint .","test":"vitest run","build":"tsup","check":"pnpm lint && pnpm type-check && pnpm test && pnpm build","format":"prettier --write .","test:watch":"vitest watch","type-check":"tsc --noEmit","test:integration":"bash scripts/test-integration.sh","test:compatibility":"bash test/compatibility/run-all.sh","test:integration:ci":"bash scripts/test-integration.sh --cleanup"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8952e9f5-4a64-400b-9f42-c81a8677cd4c"}},"repository":{"url":"git+https://github.com/supabase/iceberg-js.git","type":"git"},"_npmVersion":"11.6.3","description":"A small, framework-agnostic JavaScript/TypeScript client for the Apache Iceberg REST Catalog","directories":{},"_nodeVersion":"22.21.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.6.1","tsup":"^8.5.1","eslint":"^9.39.1","vitest":"^4.0.12","globals":"^16.5.0","typedoc":"^0.28.14","prettier":"^3.6.2","@eslint/js":"^9.39.1","typescript":"^5.9.3","@types/node":"^20.0.0","@eslint/json":"^0.14.0","@eslint/markdown":"^7.5.1","typescript-eslint":"^8.47.0"},"_npmOperationalInternal":{"tmp":"tmp/iceberg-js_0.8.0_1764073592345_0.6266092083493489","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"iceberg-js","version":"0.8.1","keywords":["iceberg","apache-iceberg","rest-catalog","data-lake","catalog"],"author":{"name":"mandarini"},"license":"MIT","_id":"iceberg-js@0.8.1","maintainers":[{"name":"etienne_supa","email":"etienne@supabase.io"}],"homepage":"https://github.com/supabase/iceberg-js#readme","bugs":{"url":"https://github.com/supabase/iceberg-js/issues"},"dist":{"shasum":"47d893468293a010385e1c70123f29d0fc1d9912","tarball":"https://registry.npmjs.org/iceberg-js/-/iceberg-js-0.8.1.tgz","fileCount":9,"integrity":"sha512-1dhVQZXhcHje7798IVM+xoo/1ZdVfzOMIc8/rgVSijRK38EDqOJoGula9N/8ZI5RD8QTxNQtK/Gozpr+qUqRRA==","signatures":[{"sig":"MEUCIBi8PkaBfdDFnie9bBXw1PVi0p9vrEIkyseWQdVvhd77AiEAkGcsNCooUh9DXjRkB6dC6MIkORqv0NDBFTjTmDn9EbQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/iceberg-js@0.8.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":172346},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=20.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.mjs"},"default":"./dist/index.mjs","require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"gitHead":"a4069ae211af5dc6d30019dfc57677d83f4605c7","scripts":{"dev":"tsup --watch","docs":"typedoc src/index.ts","lint":"eslint .","test":"vitest run","build":"tsup","check":"pnpm lint && pnpm type-check && pnpm test && pnpm build","format":"prettier --write .","test:watch":"vitest watch","type-check":"tsc --noEmit","test:integration":"bash scripts/test-integration.sh","test:compatibility":"bash test/compatibility/run-all.sh","test:integration:ci":"bash scripts/test-integration.sh --cleanup"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8952e9f5-4a64-400b-9f42-c81a8677cd4c"}},"repository":{"url":"git+https://github.com/supabase/iceberg-js.git","type":"git"},"_npmVersion":"11.6.4","description":"A small, framework-agnostic JavaScript/TypeScript client for the Apache Iceberg REST Catalog","directories":{},"_nodeVersion":"22.21.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jiti":"^2.6.1","tsup":"^8.5.1","eslint":"^9.39.1","vitest":"^4.0.12","globals":"^16.5.0","typedoc":"^0.28.14","prettier":"^3.6.2","@eslint/js":"^9.39.1","typescript":"^5.9.3","@types/node":"^20.0.0","@eslint/json":"^0.14.0","@eslint/markdown":"^7.5.1","typescript-eslint":"^8.47.0"},"_npmOperationalInternal":{"tmp":"tmp/iceberg-js_0.8.1_1764935048997_0.2948236143263252","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"iceberg-js","version":"1.0.0","description":"A small, framework-agnostic JavaScript/TypeScript client for the Apache Iceberg REST Catalog","type":"module","main":"./dist/index.cjs","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"},"default":"./dist/index.mjs"}},"scripts":{"build":"tsup","dev":"tsup --watch","docs":"pnpm gen:spec-types && typedoc src/index.ts","format":"prettier --write .","lint":"eslint .","type-check":"tsc --noEmit","gen:spec-types":"node scripts/gen-spec-types.mjs","test":"vitest run","test:watch":"vitest watch","test:integration":"bash scripts/test-integration.sh","test:integration:ci":"bash scripts/test-integration.sh --cleanup","test:compatibility":"bash test/compatibility/run-all.sh","check":"pnpm lint && pnpm type-check && pnpm test && pnpm build"},"keywords":["iceberg","apache-iceberg","rest-catalog","data-lake","catalog"],"author":{"name":"mandarini"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/supabase/iceberg-js.git"},"bugs":{"url":"https://github.com/supabase/iceberg-js/issues"},"homepage":"https://supabase.github.io/iceberg-js/","publishConfig":{"access":"public"},"devDependencies":{"@apidevtools/json-schema-ref-parser":"^15.3.5","@eslint/js":"^9.39.1","@eslint/json":"^0.14.0","@eslint/markdown":"^7.5.1","@types/js-yaml":"^4.0.9","@types/node":"^22.0.0","ajv":"^8.18.0","ajv-formats":"^3.0.1","eslint":"^9.39.1","globals":"^16.5.0","jiti":"^2.6.1","js-yaml":"^4.1.1","openapi-typescript":"^7.13.0","prettier":"^3.6.2","tsup":"^8.5.1","typedoc":"^0.28.14","typescript":"^5.9.3","typescript-eslint":"^8.47.0","vitest":"^4.0.12"},"engines":{"node":">=22.0.0"},"packageManager":"pnpm@11.0.8+sha512.4c4097e1dd2d42372c4e7fa5a791ff28fc75a484c7ac192e64b1df0fdef17594ba982f9b4fed9adfb3c757846f565b799b2763fb3733d1de1bcb82cf46684912","gitHead":"4ccd904c34975dcb1b08dceef0c6e8005f82c497","_id":"iceberg-js@1.0.0","_nodeVersion":"22.22.3","_npmVersion":"11.16.0","dist":{"integrity":"sha512-kwKtKluJzKgJLCccOpGPMaxYgAhONDPrgf8+GHOt5HE6L8wquPvQXMxaWpc1SHZ8rVeQRRADJRNi1BvJFB/2jw==","shasum":"2359b14e46e598c6f87054765c48a701b4012a94","tarball":"https://registry.npmjs.org/iceberg-js/-/iceberg-js-1.0.0.tgz","fileCount":9,"unpackedSize":271263,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/iceberg-js@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIC1YQLE2XUy1Yu7fvytNPYy/jV6yPoH+M6Z/PH+laXR7AiEAqZdBr/ti5pW0yRG9pLRMizNPsWM7jztqqwUNwn9VFLk="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8952e9f5-4a64-400b-9f42-c81a8677cd4c"}},"directories":{},"maintainers":[{"name":"etienne_supa","email":"etienne@supabase.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/iceberg-js_1.0.0_1780920547491_0.2160043491086816"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-20T13:11:24.781Z","modified":"2026-06-08T12:09:07.927Z","0.0.0":"2025-11-20T13:11:24.963Z","0.0.1":"2025-11-20T16:07:21.929Z","0.1.0":"2025-11-21T10:10:26.503Z","0.5.2":"2025-11-21T10:47:36.127Z","0.6.0":"2025-11-21T13:37:26.855Z","0.7.0":"2025-11-21T14:23:44.401Z","0.8.0":"2025-11-25T12:26:32.540Z","0.8.1":"2025-12-05T11:44:09.133Z","1.0.0":"2026-06-08T12:09:07.628Z"},"bugs":{"url":"https://github.com/supabase/iceberg-js/issues"},"author":{"name":"mandarini"},"license":"MIT","homepage":"https://supabase.github.io/iceberg-js/","keywords":["iceberg","apache-iceberg","rest-catalog","data-lake","catalog"],"repository":{"type":"git","url":"git+https://github.com/supabase/iceberg-js.git"},"description":"A small, framework-agnostic JavaScript/TypeScript client for the Apache Iceberg REST Catalog","maintainers":[{"name":"etienne_supa","email":"etienne@supabase.io"}],"readme":"# iceberg-js\n\n[![GitHub](https://img.shields.io/badge/GitHub-iceberg--js-181717?logo=github)](https://github.com/supabase/iceberg-js)\n[![Docs](https://img.shields.io/badge/docs-API%20Reference-blue?logo=readthedocs)](https://supabase.github.io/iceberg-js/)\n[![License](https://img.shields.io/npm/l/nx.svg?style=flat-square)](./LICENSE)\n[![CI](https://github.com/supabase/iceberg-js/actions/workflows/ci.yml/badge.svg)](https://github.com/supabase/iceberg-js/actions/workflows/ci.yml)\n[![npm version](https://badge.fury.io/js/iceberg-js.svg)](https://www.npmjs.com/package/iceberg-js)\n[![pkg.pr.new](https://pkg.pr.new/badge/supabase/iceberg-js)](https://pkg.pr.new/~/supabase/iceberg-js)\n\nA small, framework-agnostic JavaScript/TypeScript client for the **Apache Iceberg REST Catalog**.\n\nTracks the OpenAPI spec at `apache-iceberg-1.11.0-rc1`. The exact tag is exported as `ICEBERG_REST_SPEC_TAG` and is the source of truth for the conformance tests in CI — see [`spec-pin.json`](./spec-pin.json).\n\n## Motivation\n\nThis library provides JavaScript and TypeScript developers with a straightforward way to interact with Apache Iceberg REST Catalogs. It's designed as a thin HTTP wrapper that mirrors the official REST API, making it easy to manage namespaces and tables from any JS/TS environment.\n\n## Goals\n\n- **REST API wrapper**: Provide a 1:1 mapping to the Iceberg REST Catalog API\n- **Type safety**: Full TypeScript support with strongly-typed request/response models\n- **Minimal footprint**: No engine-specific logic, no heavy dependencies\n- **Stability**: Production-ready for catalog management operations\n- **Vendor-agnostic**: Works with any Iceberg REST Catalog implementation\n\n## Non-Goals\n\nThis library intentionally does **not** support:\n\n- **Data operations**: Reading or writing table data (Parquet files, etc.)\n- **Query execution**: Use dedicated query engines (Spark, Trino, DuckDB, etc.)\n- **Engine integration**: No Spark, Flink, or other engine-specific code\n- **Advanced features**: Branching, tagging, time travel queries beyond metadata\n- **Views or multi-table transactions**\n\nThese boundaries keep the library focused and maintainable. For data operations, pair this library with a query engine that supports Iceberg.\n\n## Features\n\n- **Generic**: Works with any Iceberg REST Catalog implementation, not tied to any specific vendor\n- **Minimal**: Thin HTTP wrapper over the official REST API, no engine-specific logic\n- **Type-safe**: First-class TypeScript support with strongly-typed request/response models\n- **Fetch-based**: Uses native `fetch` API with support for custom implementations\n- **Universal**: Targets Node 22+ and modern browsers (ES2020)\n- **Catalog-only**: Focused on catalog operations (no data reading/Parquet support in v1.0)\n\n## Documentation\n\n📚 **Full API documentation**: [supabase.github.io/iceberg-js](https://supabase.github.io/iceberg-js/)\n\n## Installation\n\n```bash\nnpm install iceberg-js\n```\n\n## Migrating from 0.x to 1.0\n\nThe 1.0 release aligns the client with the [Apache Iceberg REST Catalog OpenAPI spec](https://github.com/apache/iceberg/blob/main/open-api/rest-catalog-open-api.yaml). Breaking changes are limited to the listing methods, the `updateTable` body shape, and the `accessDelegation` flow (use the new `loadTableResult` / `createTableResult` to receive vended credentials).\n\n**See [`MIGRATION.md`](./MIGRATION.md) for full before / after code blocks for every change.** The cheat sheet:\n\n| Before (0.x)                                                                 | After (1.0)                                                                                                                                                                  |\n| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `await catalog.listNamespaces()` returns `NamespaceIdentifier[]`             | returns `{ namespaces: NamespaceIdentifier[]; nextPageToken? }`                                                                                                              |\n| `await catalog.listNamespaces({ namespace: ['x'] })` (parent)                | `await catalog.listNamespaces({ parent: { namespace: ['x'] } })`                                                                                                             |\n| `await catalog.listTables({ namespace: ['x'] })` returns `TableIdentifier[]` | returns `{ identifiers: TableIdentifier[]; nextPageToken? }`                                                                                                                 |\n| `updateTable({ properties: { … } })`                                         | `updateTable({ requirements: [], updates: [{ action: 'set-properties', updates: { … } }] })`                                                                                 |\n| `catalogName` builds the path manually as `/v1/<name>/...`                   | `warehouse` (or `catalogName` as alias) goes through `GET /v1/config` and uses the server-returned `prefix`. Closes [#32](https://github.com/supabase/iceberg-js/issues/32). |\n| `loadTable(id)` returned credentials inline when `accessDelegation` was set  | `loadTableResult(id)` returns credentials + config + ETag; `loadTable(id)` returns bare `TableMetadata`                                                                      |\n| Supported Node 18+                                                           | Now requires Node 22+ (Node 18 and 20 are EOL or near-EOL). Drop in [#46](https://github.com/supabase/iceberg-js/pull/46).                                                   |\n\nNon-breaking additions in 1.0:\n\n- `Idempotency-Key` is automatically emitted on every POST/DELETE mutation.\n- `loadTable(id, { ifNoneMatch })` enables conditional GETs (returns `null` on 304).\n- `loadTable(id, { snapshots: 'all' | 'refs' })` controls how many snapshots the server includes.\n- `loadTableResult` / `createTableResult` / `registerTableResult` return the full spec-shaped `LoadTableResult` plus the response `ETag`.\n- `registerTable`, `renameTable`, `updateNamespaceProperties`, `commitTable` (alias for `updateTable`), and `loadConfig` are now exposed.\n- The full `TableUpdate` and `TableRequirement` discriminated unions are exported.\n- Network-level errors (DNS, TLS, offline) now surface as `IcebergError` with `status: 0`, so a single `instanceof IcebergError` check catches every failure mode.\n\n## Quick Start\n\n```typescript\nimport { IcebergRestCatalog } from 'iceberg-js'\n\nconst catalog = new IcebergRestCatalog({\n  baseUrl: 'https://my-catalog.example.com',\n  warehouse: 'my-warehouse', // optional; resolved via GET /v1/config\n  auth: {\n    type: 'bearer',\n    token: process.env.ICEBERG_TOKEN,\n  },\n})\n\n// Create a namespace\nawait catalog.createNamespace({ namespace: ['analytics'] })\n\n// List namespaces (paginated)\nconst { namespaces, nextPageToken } = await catalog.listNamespaces({ pageSize: 50 })\n\n// Create a table\nawait catalog.createTable(\n  { namespace: ['analytics'] },\n  {\n    name: 'events',\n    schema: {\n      type: 'struct',\n      fields: [\n        { id: 1, name: 'id', type: 'long', required: true },\n        { id: 2, name: 'timestamp', type: 'timestamp', required: true },\n        { id: 3, name: 'user_id', type: 'string', required: false },\n      ],\n      'schema-id': 0,\n      'identifier-field-ids': [1],\n    },\n    'partition-spec': {\n      'spec-id': 0,\n      fields: [],\n    },\n    'write-order': {\n      'order-id': 0,\n      fields: [],\n    },\n    properties: {\n      'write.format.default': 'parquet',\n    },\n  }\n)\n```\n\n## API Reference\n\n### Constructor\n\n#### `new IcebergRestCatalog(options)`\n\nCreates a new catalog client instance.\n\n**Options:**\n\n- `baseUrl` (string, required): Base URL of the REST catalog\n- `warehouse` (string, optional): Warehouse identifier. On first use, the client calls `GET /v1/config?warehouse=…` and uses the server-returned `overrides.prefix` for all subsequent requests. This is the spec-recommended pattern (see [Apache Iceberg REST spec](https://github.com/apache/iceberg/blob/main/open-api/rest-catalog-open-api.yaml)) and is the way to address per-warehouse catalogs such as Cloudflare R2 or Tabular.\n- `catalogName` (string, optional): Permanent alias for `warehouse`, kept for backward compatibility. If both are provided, `warehouse` wins.\n- `auth` (AuthConfig, optional): Authentication configuration\n- `fetch` (typeof fetch, optional): Custom fetch implementation\n- `accessDelegation` (AccessDelegation[], optional): Access delegation mechanisms to request from the server\n\n**Authentication types:**\n\n```typescript\n// No authentication\n{ type: 'none' }\n\n// Bearer token\n{ type: 'bearer', token: 'your-token' }\n\n// Custom header\n{ type: 'header', name: 'X-Custom-Auth', value: 'secret' }\n\n// Custom function\n{ type: 'custom', getHeaders: async () => ({ 'Authorization': 'Bearer ...' }) }\n```\n\n**Access Delegation:**\n\nAccess delegation allows the catalog server to provide temporary credentials or sign requests on your behalf:\n\n```typescript\nimport { IcebergRestCatalog } from 'iceberg-js'\n\nconst catalog = new IcebergRestCatalog({\n  baseUrl: 'https://catalog.example.com/iceberg/v1',\n  auth: { type: 'bearer', token: 'your-token' },\n  // Request vended credentials for data access\n  accessDelegation: ['vended-credentials'],\n})\n\n// To access vended credentials (storage-credentials, server config), use the\n// *Result variants — `loadTable`/`createTable`/`registerTable` return only\n// the bare `TableMetadata` and would discard credentials.\nconst result = await catalog.loadTableResult({ namespace: ['analytics'], name: 'events' })\n// result['storage-credentials'], result.config, result.etag, result.metadata\n```\n\nSupported delegation mechanisms:\n\n- `vended-credentials`: Server provides temporary credentials (e.g., AWS STS tokens) for accessing table data\n- `remote-signing`: Server signs data access requests on behalf of the client\n\n### Namespace Operations\n\n#### `listNamespaces(options?): Promise<{ namespaces, nextPageToken? }>`\n\nList namespaces, optionally under a parent namespace, with cursor-based pagination.\n\n```typescript\nconst { namespaces } = await catalog.listNamespaces()\n// namespaces: [{ namespace: ['default'] }, { namespace: ['analytics'] }]\n\nconst { namespaces: children } = await catalog.listNamespaces({\n  parent: { namespace: ['analytics'] },\n})\n\n// Pagination\nconst page1 = await catalog.listNamespaces({ pageSize: 100 })\nconst page2 = await catalog.listNamespaces({\n  pageSize: 100,\n  pageToken: page1.nextPageToken,\n})\n```\n\n#### `createNamespace(id: NamespaceIdentifier, metadata?: NamespaceMetadata): Promise<void>`\n\nCreate a new namespace with optional properties.\n\n```typescript\nawait catalog.createNamespace({ namespace: ['analytics'] }, { properties: { owner: 'data-team' } })\n```\n\n#### `dropNamespace(id: NamespaceIdentifier): Promise<void>`\n\nDrop a namespace. The namespace must be empty.\n\n```typescript\nawait catalog.dropNamespace({ namespace: ['analytics'] })\n```\n\n#### `loadNamespaceMetadata(id: NamespaceIdentifier): Promise<NamespaceMetadata>`\n\nLoad namespace metadata and properties.\n\n```typescript\nconst metadata = await catalog.loadNamespaceMetadata({ namespace: ['analytics'] })\n// { properties: { owner: 'data-team', ... } }\n```\n\n#### `updateNamespaceProperties(id, request): Promise<UpdateNamespacePropertiesResponse>`\n\nSet or remove namespace properties.\n\n```typescript\nawait catalog.updateNamespaceProperties(\n  { namespace: ['analytics'] },\n  { updates: { owner: 'data-team' }, removals: ['stale_property'] }\n)\n```\n\n### Table Operations\n\n#### `listTables(namespace, options?): Promise<{ identifiers, nextPageToken? }>`\n\nList tables in a namespace, with cursor-based pagination.\n\n```typescript\nconst { identifiers } = await catalog.listTables({ namespace: ['analytics'] })\n// identifiers: [{ namespace: ['analytics'], name: 'events' }]\n\nconst page1 = await catalog.listTables({ namespace: ['analytics'] }, { pageSize: 100 })\nconst page2 = await catalog.listTables(\n  { namespace: ['analytics'] },\n  { pageSize: 100, pageToken: page1.nextPageToken }\n)\n```\n\n#### `createTable(namespace: NamespaceIdentifier, request: CreateTableRequest): Promise<TableMetadata>`\n\nCreate a new table.\n\n```typescript\nconst metadata = await catalog.createTable(\n  { namespace: ['analytics'] },\n  {\n    name: 'events',\n    schema: {\n      type: 'struct',\n      fields: [\n        { id: 1, name: 'id', type: 'long', required: true },\n        { id: 2, name: 'timestamp', type: 'timestamp', required: true },\n      ],\n      'schema-id': 0,\n    },\n    'partition-spec': {\n      'spec-id': 0,\n      fields: [\n        {\n          'source-id': 2,\n          'field-id': 1000,\n          name: 'ts_day',\n          transform: 'day',\n        },\n      ],\n    },\n  }\n)\n```\n\n#### `loadTable(id, options?): Promise<TableMetadata | null>`\n\nLoad table metadata. Pass `ifNoneMatch` (a previous ETag) for conditional GET — returns `null` on 304.\n\n```typescript\nconst metadata = await catalog.loadTable({\n  namespace: ['analytics'],\n  name: 'events',\n})\n\n// Conditional load\nconst updated = await catalog.loadTable(\n  { namespace: ['analytics'], name: 'events' },\n  { ifNoneMatch: lastSeenEtag }\n)\nif (updated === null) {\n  // table is unchanged since lastSeenEtag\n}\n```\n\n#### `loadTableResult(id, options?): Promise<LoadTableResult & { etag } | null>`\n\nSpec-aligned `LoadTableResult` wrapper exposing `metadata`, `metadata-location`, server `config`, `storage-credentials`, plus the captured `ETag` so you can pass it to a future `loadTable` call.\n\n#### `updateTable(id, request): Promise<CommitTableResponse>` / `commitTable(id, request)`\n\nCommit updates to a table using the spec-aligned `{ requirements?, updates }` shape.\n\n```typescript\nconst updated = await catalog.updateTable(\n  { namespace: ['analytics'], name: 'events' },\n  {\n    requirements: [{ type: 'assert-current-schema-id', 'current-schema-id': 0 }],\n    updates: [{ action: 'set-properties', updates: { 'read.split.target-size': '134217728' } }],\n  }\n)\n```\n\n#### `dropTable(id: TableIdentifier): Promise<void>`\n\nDrop a table from the catalog.\n\n```typescript\nawait catalog.dropTable({ namespace: ['analytics'], name: 'events' })\n```\n\n## Error Handling\n\nAll API errors throw an `IcebergError` with details from the server:\n\n```typescript\nimport { IcebergError } from 'iceberg-js'\n\ntry {\n  await catalog.loadTable({ namespace: ['test'], name: 'missing' })\n} catch (error) {\n  if (error instanceof IcebergError) {\n    console.log(error.status) // 404\n    console.log(error.icebergType) // 'NoSuchTableException'\n    console.log(error.message) // 'Table does not exist'\n  }\n}\n```\n\n## TypeScript Types\n\nThe library exports all relevant types:\n\n```typescript\nimport type {\n  // Identifiers\n  NamespaceIdentifier,\n  TableIdentifier,\n\n  // Schema / type system\n  TableSchema,\n  TableField,\n  IcebergType,\n  PartitionSpec,\n  SortOrder,\n\n  // Requests / responses\n  CreateTableRequest,\n  CommitTableRequest,\n  CommitTableResponse,\n  LoadTableResult,\n  LoadTableResultWithEtag,\n  TableMetadata,\n  UpdateNamespacePropertiesRequest,\n  UpdateNamespacePropertiesResponse,\n\n  // Method options\n  ListNamespacesOptions,\n  ListNamespacesResult,\n  ListTablesOptions,\n  ListTablesResult,\n  LoadTableOptions,\n\n  // Catalog config\n  CatalogConfig,\n  StorageCredential,\n\n  // Table update / requirement unions (full spec coverage)\n  TableUpdate,\n  TableRequirement,\n\n  // Auth / delegation\n  AuthConfig,\n  AccessDelegation,\n} from 'iceberg-js'\n```\n\n## Supported Iceberg Types\n\nThe following Iceberg primitive types are supported:\n\n- `boolean`, `int`, `long`, `float`, `double`\n- `string`, `uuid`, `binary`\n- `date`, `time`, `timestamp`, `timestamptz`\n- `decimal(precision, scale)`, `fixed(length)`\n\n## Compatibility\n\nThis package is built to work in **all** Node.js and JavaScript environments:\n\n| Environment         | Module System        | Import Method                           | Status             |\n| ------------------- | -------------------- | --------------------------------------- | ------------------ |\n| Node.js ESM         | `\"type\": \"module\"`   | `import { ... } from 'iceberg-js'`      | Fully supported    |\n| Node.js CommonJS    | Default              | `const { ... } = require('iceberg-js')` | Fully supported    |\n| TypeScript ESM      | `module: \"ESNext\"`   | `import { ... } from 'iceberg-js'`      | Full type support  |\n| TypeScript CommonJS | `module: \"CommonJS\"` | `import { ... } from 'iceberg-js'`      | Full type support  |\n| Bundlers            | Any                  | Webpack, Vite, esbuild, Rollup, etc.    | Auto-detected      |\n| Browsers            | ESM                  | `<script type=\"module\">`                | Modern browsers    |\n| Deno                | ESM                  | `import` from npm:                      | With npm specifier |\n\n**Package exports:**\n\n- ESM: `dist/index.mjs` with `dist/index.d.ts`\n- CommonJS: `dist/index.cjs` with `dist/index.d.cts`\n- Proper `exports` field for Node.js 12+ module resolution\n\nAll scenarios are tested in CI on Node.js 22.\n\n## Browser Usage\n\nThe library works in modern browsers that support native `fetch`:\n\n```typescript\nimport { IcebergRestCatalog } from 'iceberg-js'\n\nconst catalog = new IcebergRestCatalog({\n  baseUrl: 'https://public-catalog.example.com/iceberg/v1',\n  auth: { type: 'none' },\n})\n\nconst namespaces = await catalog.listNamespaces()\n```\n\n## Custom fetch implementation\n\nThe library uses the global `fetch` by default (available in Node.js 22+ and modern browsers). You can inject a custom `fetch` for proxying, instrumentation, or to use a different HTTP client:\n\n```typescript\nimport { IcebergRestCatalog } from 'iceberg-js'\n\nconst catalog = new IcebergRestCatalog({\n  baseUrl: 'https://catalog.example.com/iceberg/v1',\n  auth: { type: 'bearer', token: 'token' },\n  fetch: myCustomFetch,\n})\n```\n\n## Development\n\n```bash\n# Install dependencies\npnpm install\n\n# Build the library\npnpm run build\n\n# Run unit tests\npnpm test\n\n# Run integration tests (requires Docker)\npnpm test:integration\n\n# Run integration tests with cleanup (for CI)\npnpm test:integration:ci\n\n# Run compatibility tests (all module systems)\npnpm test:compatibility\n\n# Format code\npnpm run format\n\n# Lint and test\npnpm run check\n```\n\n### Testing with Docker\n\nIntegration tests run against a local Iceberg REST Catalog in Docker. See [TESTING-DOCKER.md](./test/integration/TESTING-DOCKER.md) for details.\n\n```bash\n# Start Docker services and run integration tests\npnpm test:integration\n\n# Or manually\ndocker compose up -d\nnpx tsx test/integration/test-local-catalog.ts\ndocker compose down -v\n```\n\n### Compatibility Testing\n\nThe `test:compatibility` script verifies the package works correctly in all JavaScript/TypeScript environments:\n\n- **Pure JavaScript ESM** - Projects with `\"type\": \"module\"`\n- **Pure JavaScript CommonJS** - Traditional Node.js projects\n- **TypeScript ESM** - TypeScript with `module: \"ESNext\"`\n- **TypeScript CommonJS** - TypeScript with `module: \"CommonJS\"`\n\nThese tests ensure proper module resolution, type definitions, and runtime behavior across all supported environments. See [test/compatibility/README.md](./test/compatibility/README.md) for more details.\n\n## License\n\n[MIT](./LICENSE)\n\n## Releases\n\nThis project uses [release-please](https://github.com/googleapis/release-please) for automated releases. Here's how it works:\n\n1. **Commit with conventional commits**: Use [Conventional Commits](https://www.conventionalcommits.org/) format for your commits:\n   - `feat:` for new features (minor version bump)\n   - `fix:` for bug fixes (patch version bump)\n   - `feat!:` or `BREAKING CHANGE:` for breaking changes (major version bump)\n   - `chore:`, `docs:`, `test:`, etc. for non-release commits\n\n2. **Release PR is created automatically**: When you push to `main`, release-please creates/updates a release PR with:\n   - Version bump in `package.json`\n   - Updated `CHANGELOG.md`\n   - Release notes\n\n3. **Merge the release PR**: When you're ready to release, merge the PR. This will:\n   - Create a GitHub release and git tag\n   - Automatically publish to npm with provenance (using trusted publishing, no secrets needed)\n\n**Example commits:**\n\n```bash\ngit commit -m \"feat: add support for view operations\"\ngit commit -m \"fix: handle empty namespace list correctly\"\ngit commit -m \"feat!: change auth config structure\"\n```\n\n## Contributing\n\nContributions are welcome! Please ensure your contributions align with the library's [goals](#goals) and [non-goals](#non-goals). This library aims to remain a minimal, generic client for the Iceberg REST Catalog API.\n","readmeFilename":"README.md"}