{"_id":"@bernierllc/contentful-migration-service","_rev":"13-70f35ca6a8a495a051db4a2d92356575","name":"@bernierllc/contentful-migration-service","dist-tags":{"latest":"1.6.2"},"versions":{"1.0.2":{"name":"@bernierllc/contentful-migration-service","version":"1.0.2","keywords":["contentful","migrations","content-model","versioning","service","bernierllc"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE.md","_id":"@bernierllc/contentful-migration-service@1.0.2","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"b9f312388c7431d34e3b13dd439a7fea48bdd73a","tarball":"https://registry.npmjs.org/@bernierllc/contentful-migration-service/-/contentful-migration-service-1.0.2.tgz","fileCount":13,"integrity":"sha512-fepxdV3RlTbaC6KEg4P38Asi925Mn6ozIl6kkaZPLBQ9wxeJbv9mOHLMtttJpYg8zz74WHN+vUOxhsMQcVjWHw==","signatures":[{"sig":"MEUCIQDjtnQ685k1Oin1kwkiyCzfh1t5jSGdCabbyS5aU6FISAIgLLwFvIjhyKLUmvKqoEY8xUJcePG2hCVDDzcSnfYc7MI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31206},"main":"dist/index.js","_from":"file:bernierllc-contentful-migration-service-1.0.2.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts","test":"jest --runInBand","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint src --ext .ts --fix","test:run":"jest --runInBand","test:watch":"jest --watch","test:coverage":"jest --coverage --runInBand"},"_npmUser":{"name":"mkbernier","email":"mkbernier@gmail.com"},"_resolved":"/private/var/folders/r0/wspnzd1s18sfjy10ffyv2qxw0000gn/T/71cab496bdb293df01f0e0c05494119a/bernierllc-contentful-migration-service-1.0.2.tgz","_integrity":"sha512-fepxdV3RlTbaC6KEg4P38Asi925Mn6ozIl6kkaZPLBQ9wxeJbv9mOHLMtttJpYg8zz74WHN+vUOxhsMQcVjWHw==","_npmVersion":"11.6.2","description":"Content model migration management with version control, rollback support, and migration history tracking","directories":{},"_nodeVersion":"25.2.1","dependencies":{"@bernierllc/logger":"^1.0.1","contentful-migration":"^4.0.0","@bernierllc/contentful-types":"^1.0.4","@bernierllc/neverhub-adapter":"^1.0.2","@bernierllc/contentful-cma-client":"^1.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^9.15.0","ts-jest":"^29.2.5","typescript":"^5.7.2","@types/jest":"^29.5.14","@types/node":"^22.10.1","@typescript-eslint/parser":"^8.15.0","@typescript-eslint/eslint-plugin":"^8.15.0"},"_npmOperationalInternal":{"tmp":"tmp/contentful-migration-service_1.0.2_1764707896721_0.8197809005024717","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@bernierllc/contentful-migration-service","version":"1.0.3","keywords":["contentful","migrations","content-model","versioning","service","bernierllc"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE.md","_id":"@bernierllc/contentful-migration-service@1.0.3","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"85b0204c84da8e7a3b6b4b26f9d0109c7abfa461","tarball":"https://registry.npmjs.org/@bernierllc/contentful-migration-service/-/contentful-migration-service-1.0.3.tgz","fileCount":13,"integrity":"sha512-j/l5mCfmhCniTKJpgC+jIgYBMIlpu82I0qlwjGzzfhbbboC5rrB3Pk2tr+Mvs/oeRYw0yy6pMdQTEzE1UFFeAA==","signatures":[{"sig":"MEQCIH//JPhZm+TMDjUJQSjVGPzJZ6nlV5dSUHOAUs4VF+KrAiBhzVWql3iImW76aLtaTdBsx1N74Pa4DMAe/xkVD/ding==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31249},"main":"dist/index.js","_from":"file:bernierllc-contentful-migration-service-1.0.3.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts","test":"jest --runInBand","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint src --ext .ts --fix","test:run":"jest --runInBand","test:watch":"jest --watch","test:coverage":"jest --coverage --runInBand"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e07143cd-51fe-4c69-bc87-5b701c303fcd"}},"_resolved":"/tmp/555c913a3974a553b916c9065271c6c1/bernierllc-contentful-migration-service-1.0.3.tgz","_integrity":"sha512-j/l5mCfmhCniTKJpgC+jIgYBMIlpu82I0qlwjGzzfhbbboC5rrB3Pk2tr+Mvs/oeRYw0yy6pMdQTEzE1UFFeAA==","_npmVersion":"11.7.0","description":"Content model migration management with version control, rollback support, and migration history tracking","directories":{},"_nodeVersion":"20.19.6","dependencies":{"@bernierllc/logger":"1.0.4","contentful-migration":"^4.0.0","@bernierllc/contentful-types":"1.0.4","@bernierllc/neverhub-adapter":"0.1.2","@bernierllc/contentful-cma-client":"1.0.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^9.15.0","ts-jest":"^29.2.5","typescript":"^5.7.2","@types/jest":"^29.5.14","@types/node":"^22.10.1","@typescript-eslint/parser":"^8.15.0","@typescript-eslint/eslint-plugin":"^8.15.0"},"_npmOperationalInternal":{"tmp":"tmp/contentful-migration-service_1.0.3_1766437875255_0.6006767934422779","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@bernierllc/contentful-migration-service","version":"1.0.4","keywords":["contentful","migrations","content-model","versioning","service","bernierllc"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE.md","_id":"@bernierllc/contentful-migration-service@1.0.4","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"dfceaa25412b87e54198668212732dc038b4066c","tarball":"https://registry.npmjs.org/@bernierllc/contentful-migration-service/-/contentful-migration-service-1.0.4.tgz","fileCount":13,"integrity":"sha512-y8L6vtbIJpyNQaz1IpqNSURdhe3CjcVN+p3Dwjcefrx8IlcScD3TBqbDGjgSMD+TKjsJaSJ5/P6KKZM/fQoYZg==","signatures":[{"sig":"MEYCIQDwnrsM4vHpgVqMAtK990YVBZQ4aCZtqb3203jBtH3yRQIhALJ50zb00DT1Y1REkblNTRH/5O627yayySSjJvVlFqy6","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31249},"main":"dist/index.js","_from":"file:bernierllc-contentful-migration-service-1.0.4.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts","test":"jest --runInBand","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint src --ext .ts --fix","test:run":"jest --runInBand","test:watch":"jest --watch","test:coverage":"jest --coverage --runInBand"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e07143cd-51fe-4c69-bc87-5b701c303fcd"}},"_resolved":"/tmp/393ec770804371c711719e56392c0c9b/bernierllc-contentful-migration-service-1.0.4.tgz","_integrity":"sha512-y8L6vtbIJpyNQaz1IpqNSURdhe3CjcVN+p3Dwjcefrx8IlcScD3TBqbDGjgSMD+TKjsJaSJ5/P6KKZM/fQoYZg==","_npmVersion":"11.7.0","description":"Content model migration management with version control, rollback support, and migration history tracking","directories":{},"_nodeVersion":"20.19.6","dependencies":{"@bernierllc/logger":"1.1.0","contentful-migration":"^4.0.0","@bernierllc/contentful-types":"1.0.4","@bernierllc/neverhub-adapter":"0.1.2","@bernierllc/contentful-cma-client":"1.0.4"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^9.15.0","ts-jest":"^29.2.5","typescript":"^5.7.2","@types/jest":"^29.5.14","@types/node":"^22.10.1","@typescript-eslint/parser":"^8.15.0","@typescript-eslint/eslint-plugin":"^8.15.0"},"_npmOperationalInternal":{"tmp":"tmp/contentful-migration-service_1.0.4_1766454495737_0.5174867667964274","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@bernierllc/contentful-migration-service","version":"1.2.0","keywords":["contentful","migrations","content-model","versioning","service","bernierllc"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE.md","_id":"@bernierllc/contentful-migration-service@1.2.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"a4ed129fa1277fbfce96596c49191acb4bc8f304","tarball":"https://registry.npmjs.org/@bernierllc/contentful-migration-service/-/contentful-migration-service-1.2.0.tgz","fileCount":13,"integrity":"sha512-OZm6VUO0EW5p75gPj2afGkEQDGHKXBa/nU2LvI/ZnLugPeJwiluvfpaPnU+VL+4p7VWHiwUdl9JBR8kxygaf9g==","signatures":[{"sig":"MEUCIQDaNTujznhOWJA0PN/Kvq/i/7V2ExWwpJoRDYxAv7KCjAIgI26AKAF8m1yb51QWVTW3XRWw3vqWy0DjW/oRAWxJsIY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31358},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"af7e74b3715d56d3a193e1bb6743b337c2b0df6d","scripts":{"lint":"eslint src --ext .ts","test":"jest --runInBand","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint src --ext .ts --fix","test:run":"jest --runInBand","test:watch":"jest --watch","test:coverage":"jest --coverage --runInBand","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e07143cd-51fe-4c69-bc87-5b701c303fcd"}},"_npmVersion":"lerna/9.0.3/node@v20.19.6+x64 (linux)","description":"Content model migration management with version control, rollback support, and migration history tracking","directories":{},"_nodeVersion":"20.19.6","dependencies":{"@bernierllc/logger":"1.3.0","contentful-migration":"^4.0.0","@bernierllc/contentful-types":"1.2.0","@bernierllc/neverhub-adapter":"0.1.4","@bernierllc/contentful-cma-client":"1.0.6"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^9.15.0","ts-jest":"^29.2.5","typescript":"^5.7.2","@types/jest":"^29.5.14","@types/node":"^22.10.1","@typescript-eslint/parser":"^8.15.0","@typescript-eslint/eslint-plugin":"^8.15.0"},"_npmOperationalInternal":{"tmp":"tmp/contentful-migration-service_1.2.0_1767642470281_0.1346377622346886","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"@bernierllc/contentful-migration-service","version":"1.2.2","keywords":["contentful","migrations","content-model","versioning","service","bernierllc"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE.md","_id":"@bernierllc/contentful-migration-service@1.2.2","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"bca9b3faf19f4ab994d414928785b25f477b6236","tarball":"https://registry.npmjs.org/@bernierllc/contentful-migration-service/-/contentful-migration-service-1.2.2.tgz","fileCount":13,"integrity":"sha512-V7hghAx/GXxfTYMzRCHvuzMQFlTHDVcj32TViB9uRMfgszB1DsqsXHlga50Sat75NHSyn7NodAZQlVyueIdDAg==","signatures":[{"sig":"MEQCIH2nDTJ+gblps5rDVb9DL0vhNWW0b3Tr4RiPLOGy31mbAiAPLi/2PvpZPKoW7VH1GC3i154VV3iyx+kFZpEmkQcd8g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31249},"main":"dist/index.js","_from":"file:bernierllc-contentful-migration-service-1.2.2.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts","test":"jest --runInBand","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint src --ext .ts --fix","test:run":"jest --runInBand","test:watch":"jest --watch","test:coverage":"jest --coverage --runInBand"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e07143cd-51fe-4c69-bc87-5b701c303fcd"}},"_resolved":"/home/runner/work/tools/tools/packages/service/contentful-migration-service/bernierllc-contentful-migration-service-1.2.2.tgz","_integrity":"sha512-V7hghAx/GXxfTYMzRCHvuzMQFlTHDVcj32TViB9uRMfgszB1DsqsXHlga50Sat75NHSyn7NodAZQlVyueIdDAg==","_npmVersion":"11.11.0","description":"Content model migration management with version control, rollback support, and migration history tracking","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@bernierllc/logger":"1.3.2","contentful-migration":"^4.0.0","@bernierllc/contentful-types":"1.2.2","@bernierllc/neverhub-adapter":"0.1.6","@bernierllc/contentful-cma-client":"1.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^9.15.0","ts-jest":"^29.2.5","typescript":"^5.7.2","@types/jest":"^29.5.14","@types/node":"^22.10.1","@typescript-eslint/parser":"^8.15.0","@typescript-eslint/eslint-plugin":"^8.15.0"},"_npmOperationalInternal":{"tmp":"tmp/contentful-migration-service_1.2.2_1773163526256_0.42472098079081366","host":"s3://npm-registry-packages-npm-production"}},"1.2.3":{"name":"@bernierllc/contentful-migration-service","version":"1.2.3","keywords":["contentful","migrations","content-model","versioning","service","bernierllc"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE.md","_id":"@bernierllc/contentful-migration-service@1.2.3","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"2fd904012ed64bd5c2aeef3610680111b9580446","tarball":"https://registry.npmjs.org/@bernierllc/contentful-migration-service/-/contentful-migration-service-1.2.3.tgz","fileCount":13,"integrity":"sha512-CJlXHXykVkKzk6C0xNJtS3EIzQGuiFDEHUW6JC4if/TMZ68dZ2y9eFBllWnFaPZTH9NJh/PYl7j2wKYgZDj4mg==","signatures":[{"sig":"MEUCIQD3fxgHN/SOsKsezQ1409GkJsXDYLRkhbIS8y8+tn+V6AIgZWirqOO0PBZzK8FoJNFsesw9qTNZ9jNI/iJlt/LSzxE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31249},"main":"dist/index.js","_from":"file:bernierllc-contentful-migration-service-1.2.3.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts","test":"jest --runInBand","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint src --ext .ts --fix","test:run":"jest --runInBand","test:watch":"jest --watch","test:coverage":"jest --coverage --runInBand"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e07143cd-51fe-4c69-bc87-5b701c303fcd"}},"_resolved":"/home/runner/work/tools/tools/packages/service/contentful-migration-service/bernierllc-contentful-migration-service-1.2.3.tgz","_integrity":"sha512-CJlXHXykVkKzk6C0xNJtS3EIzQGuiFDEHUW6JC4if/TMZ68dZ2y9eFBllWnFaPZTH9NJh/PYl7j2wKYgZDj4mg==","_npmVersion":"11.14.1","description":"Content model migration management with version control, rollback support, and migration history tracking","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@bernierllc/logger":"1.4.0","contentful-migration":"^4.0.0","@bernierllc/contentful-types":"1.2.2","@bernierllc/neverhub-adapter":"0.1.6","@bernierllc/contentful-cma-client":"1.0.9"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^9.15.0","ts-jest":"^29.2.5","typescript":"^5.7.2","@types/jest":"^29.5.14","@types/node":"^22.10.1","@typescript-eslint/parser":"^8.15.0","@typescript-eslint/eslint-plugin":"^8.15.0"},"_npmOperationalInternal":{"tmp":"tmp/contentful-migration-service_1.2.3_1779133733499_0.566401842141455","host":"s3://npm-registry-packages-npm-production"}},"1.2.4":{"name":"@bernierllc/contentful-migration-service","version":"1.2.4","keywords":["contentful","migrations","content-model","versioning","service","bernierllc"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE.md","_id":"@bernierllc/contentful-migration-service@1.2.4","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"d55bcdbb23a22e504714d4e1978a15390f01c09f","tarball":"https://registry.npmjs.org/@bernierllc/contentful-migration-service/-/contentful-migration-service-1.2.4.tgz","fileCount":13,"integrity":"sha512-TfNpPnq3mnuwUGSkjLIoGcU6rgLzyKScRKW08i+4PQlszW9TO8kNmWXku90Alr97ZoHiYEFwHvchjUzEuyRg4w==","signatures":[{"sig":"MEQCIBnmrtaY/NZEgyDqfG7zeL5oocvtdoPP6LfpH4F0Sym/AiBA9T7im3CV+xUeRNkcHZdEHQ4oR1WK0N48BcmKJ2YSRA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31250},"main":"dist/index.js","_from":"file:bernierllc-contentful-migration-service-1.2.4.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts","test":"jest --runInBand","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint src --ext .ts --fix","test:run":"jest --runInBand","test:watch":"jest --watch","test:coverage":"jest --coverage --runInBand"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e07143cd-51fe-4c69-bc87-5b701c303fcd"}},"_resolved":"/home/runner/work/tools/tools/packages/service/contentful-migration-service/bernierllc-contentful-migration-service-1.2.4.tgz","_integrity":"sha512-TfNpPnq3mnuwUGSkjLIoGcU6rgLzyKScRKW08i+4PQlszW9TO8kNmWXku90Alr97ZoHiYEFwHvchjUzEuyRg4w==","_npmVersion":"11.14.1","description":"Content model migration management with version control, rollback support, and migration history tracking","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@bernierllc/logger":"1.4.2","contentful-migration":"^4.0.0","@bernierllc/contentful-types":"1.2.2","@bernierllc/neverhub-adapter":"0.1.6","@bernierllc/contentful-cma-client":"1.0.10"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^9.15.0","ts-jest":"^29.2.5","typescript":"^5.7.2","@types/jest":"^29.5.14","@types/node":"^22.10.1","@typescript-eslint/parser":"^8.15.0","@typescript-eslint/eslint-plugin":"^8.15.0"},"_npmOperationalInternal":{"tmp":"tmp/contentful-migration-service_1.2.4_1779157420951_0.7315836156311128","host":"s3://npm-registry-packages-npm-production"}},"1.2.5":{"name":"@bernierllc/contentful-migration-service","version":"1.2.5","keywords":["contentful","migrations","content-model","versioning","service","bernierllc"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE.md","_id":"@bernierllc/contentful-migration-service@1.2.5","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"2ef8b5e9f63cf5a90332c47f00d3632cedefea30","tarball":"https://registry.npmjs.org/@bernierllc/contentful-migration-service/-/contentful-migration-service-1.2.5.tgz","fileCount":13,"integrity":"sha512-IVk/jK4XvlQgMgTJvUQ5LOg/BGXWt/DIYQ4V8cMGuE09RSsGjuRF1sUorAFsrxZJoXkCjGTmFAcUo8dlBCkOng==","signatures":[{"sig":"MEUCIQC59R4fOXZH0vh4vmgzbANnzodvHSYOM69bTLvswHmGUQIgXkVpKUBf75ujw5J/L0aAIzbREShemc1SVGHSysAYuAo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31250},"main":"dist/index.js","_from":"file:bernierllc-contentful-migration-service-1.2.5.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts","test":"jest --runInBand","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint src --ext .ts --fix","test:run":"jest --runInBand","test:watch":"jest --watch","test:coverage":"jest --coverage --runInBand"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e07143cd-51fe-4c69-bc87-5b701c303fcd"}},"_resolved":"/home/runner/work/tools/tools/packages/service/contentful-migration-service/bernierllc-contentful-migration-service-1.2.5.tgz","_integrity":"sha512-IVk/jK4XvlQgMgTJvUQ5LOg/BGXWt/DIYQ4V8cMGuE09RSsGjuRF1sUorAFsrxZJoXkCjGTmFAcUo8dlBCkOng==","_npmVersion":"11.14.1","description":"Content model migration management with version control, rollback support, and migration history tracking","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@bernierllc/logger":"1.4.3","contentful-migration":"^4.0.0","@bernierllc/contentful-types":"1.2.2","@bernierllc/neverhub-adapter":"0.2.0","@bernierllc/contentful-cma-client":"1.0.11"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^9.15.0","ts-jest":"^29.2.5","typescript":"^5.7.2","@types/jest":"^29.5.14","@types/node":"^22.10.1","@typescript-eslint/parser":"^8.15.0","@typescript-eslint/eslint-plugin":"^8.15.0"},"_npmOperationalInternal":{"tmp":"tmp/contentful-migration-service_1.2.5_1779221574912_0.6197081661002024","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@bernierllc/contentful-migration-service","version":"1.3.0","keywords":["contentful","migrations","content-model","versioning","service","bernierllc"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE.md","_id":"@bernierllc/contentful-migration-service@1.3.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"00e855235dfe5f3efd1c137148d832175e6d1946","tarball":"https://registry.npmjs.org/@bernierllc/contentful-migration-service/-/contentful-migration-service-1.3.0.tgz","fileCount":13,"integrity":"sha512-XqasowPPcJ+6ibtefKrEsOMf0qrES1qiS/Ka3ZwfbcmK2P0+JzC25Naobb9fRYcdVe/PMNJpKop7Oz84SOpiCw==","signatures":[{"sig":"MEUCIQCuVR7fny3qZ2Fo3FLsVAebrIoekPtgjH02UK1iUUVSxQIgJebnYOjWXsGj3/OEpoW+nh9jthRoWnu8PEcV0OxXNmU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31249},"main":"dist/index.js","_from":"file:bernierllc-contentful-migration-service-1.3.0.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts","test":"jest --runInBand","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint src --ext .ts --fix","test:run":"jest --runInBand","test:watch":"jest --watch","test:coverage":"jest --coverage --runInBand"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e07143cd-51fe-4c69-bc87-5b701c303fcd"}},"_resolved":"/home/runner/work/tools/tools/packages/service/contentful-migration-service/bernierllc-contentful-migration-service-1.3.0.tgz","_integrity":"sha512-XqasowPPcJ+6ibtefKrEsOMf0qrES1qiS/Ka3ZwfbcmK2P0+JzC25Naobb9fRYcdVe/PMNJpKop7Oz84SOpiCw==","_npmVersion":"11.14.1","description":"Content model migration management with version control, rollback support, and migration history tracking","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@bernierllc/logger":"1.6.0","contentful-migration":"^4.0.0","@bernierllc/contentful-types":"1.4.0","@bernierllc/neverhub-adapter":"0.3.0","@bernierllc/contentful-cma-client":"1.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^9.15.0","ts-jest":"^29.2.5","typescript":"^5.7.2","@types/jest":"^29.5.14","@types/node":"^22.10.1","@typescript-eslint/parser":"^8.15.0","@typescript-eslint/eslint-plugin":"^8.15.0"},"_npmOperationalInternal":{"tmp":"tmp/contentful-migration-service_1.3.0_1779241624354_0.8631093181787111","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@bernierllc/contentful-migration-service","version":"1.5.0","keywords":["contentful","migrations","content-model","versioning","service","bernierllc"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE.md","_id":"@bernierllc/contentful-migration-service@1.5.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"47669155e8c0ee6cc0c410bbb5f89b11ea40eb31","tarball":"https://registry.npmjs.org/@bernierllc/contentful-migration-service/-/contentful-migration-service-1.5.0.tgz","fileCount":15,"integrity":"sha512-tw0lgT7c7xMh4x4dvjKN5DIQ+0nr0ptEIk0gne/97T/kliP9yrcc7xo27+E3sULs0qRz/BL3HTL5lQv0G8tFSw==","signatures":[{"sig":"MEUCIFECuyBLQIeiVDYYIaWYM+vDKha3HmnJxz5kUqu3XCFDAiEAxDpD+RyltWQzS88pM4OQMMaZZZh/2YWFA52GcV/vYco=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33222},"main":"dist/index.js","_from":"file:bernierllc-contentful-migration-service-1.5.0.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts","test":"jest --runInBand","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint src --ext .ts --fix","test:run":"jest --runInBand","test:watch":"jest --watch","test:coverage":"jest --coverage --runInBand"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e07143cd-51fe-4c69-bc87-5b701c303fcd"}},"_resolved":"/home/runner/work/tools/tools/packages/service/contentful-migration-service/bernierllc-contentful-migration-service-1.5.0.tgz","_integrity":"sha512-tw0lgT7c7xMh4x4dvjKN5DIQ+0nr0ptEIk0gne/97T/kliP9yrcc7xo27+E3sULs0qRz/BL3HTL5lQv0G8tFSw==","_npmVersion":"11.14.1","description":"Content model migration management with version control, rollback support, and migration history tracking","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@bernierllc/logger":"1.6.0","contentful-migration":"^4.0.0","@bernierllc/contentful-types":"1.4.0","@bernierllc/neverhub-adapter":"0.3.0","@bernierllc/contentful-cma-client":"1.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^9.15.0","ts-jest":"^29.2.5","typescript":"^5.7.2","@types/jest":"^29.5.14","@types/node":"^22.10.1","@typescript-eslint/parser":"^8.15.0","@typescript-eslint/eslint-plugin":"^8.15.0"},"_npmOperationalInternal":{"tmp":"tmp/contentful-migration-service_1.5.0_1779245963282_0.4252924306651278","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@bernierllc/contentful-migration-service","version":"1.6.0","keywords":["contentful","migrations","content-model","versioning","service","bernierllc"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE.md","_id":"@bernierllc/contentful-migration-service@1.6.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"e9ec71d18a10c3523254f11d4fc90de31d3c97db","tarball":"https://registry.npmjs.org/@bernierllc/contentful-migration-service/-/contentful-migration-service-1.6.0.tgz","fileCount":15,"integrity":"sha512-I8+5uJp6qLVt4yftHIuLGeHeuD5b5Ckur1P0AXpi/IeEvuE0AN1sC37QYIiwrZinj/IW3u6M8P00s5Opqt8vDA==","signatures":[{"sig":"MEQCIAH/yIgabj+wUP75IeELF5jhVPzicNQO526CC9VRjNVsAiB1vRrqHP0xGtvt3RieNccsLq17WU6IZMIx4jXp0btkgw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33222},"main":"dist/index.js","_from":"file:bernierllc-contentful-migration-service-1.6.0.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts","test":"jest --runInBand","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint src --ext .ts --fix","test:run":"jest --runInBand","test:watch":"jest --watch","test:coverage":"jest --coverage --runInBand"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e07143cd-51fe-4c69-bc87-5b701c303fcd"}},"_resolved":"/home/runner/work/tools/tools/packages/service/contentful-migration-service/bernierllc-contentful-migration-service-1.6.0.tgz","_integrity":"sha512-I8+5uJp6qLVt4yftHIuLGeHeuD5b5Ckur1P0AXpi/IeEvuE0AN1sC37QYIiwrZinj/IW3u6M8P00s5Opqt8vDA==","_npmVersion":"11.14.1","description":"Content model migration management with version control, rollback support, and migration history tracking","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@bernierllc/logger":"1.7.0","contentful-migration":"^4.0.0","@bernierllc/contentful-types":"1.5.0","@bernierllc/neverhub-adapter":"0.4.0","@bernierllc/contentful-cma-client":"1.3.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^9.15.0","ts-jest":"^29.2.5","typescript":"^5.7.2","@types/jest":"^29.5.14","@types/node":"^22.10.1","@typescript-eslint/parser":"^8.15.0","@typescript-eslint/eslint-plugin":"^8.15.0"},"_npmOperationalInternal":{"tmp":"tmp/contentful-migration-service_1.6.0_1779250369436_0.9239117483034842","host":"s3://npm-registry-packages-npm-production"}},"1.6.1":{"name":"@bernierllc/contentful-migration-service","version":"1.6.1","keywords":["contentful","migrations","content-model","versioning","service","bernierllc"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE.md","_id":"@bernierllc/contentful-migration-service@1.6.1","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"085f6c80d11a7daaf262bb6206871124f0f143d5","tarball":"https://registry.npmjs.org/@bernierllc/contentful-migration-service/-/contentful-migration-service-1.6.1.tgz","fileCount":15,"integrity":"sha512-o2WdKn1tW+1370mWJtotwB2bvhCF7u5G0Tf9CZgDpo7m0z4H+R1hrJBCSMHqhcoJI2lDXZvql39h5dAVLOfwRA==","signatures":[{"sig":"MEYCIQC45++sLXOYtZNUUB8p6fUMkDHyonPaLLCY28d1pT0/ZAIhAPEm6X1dFOr1UyjBVKWZMWxb+4AH+6I7QDGYf0sF8XuN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33222},"main":"dist/index.js","_from":"file:bernierllc-contentful-migration-service-1.6.1.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint src --ext .ts","test":"jest --runInBand","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint src --ext .ts --fix","test:run":"jest --runInBand","test:watch":"jest --watch","test:coverage":"jest --coverage --runInBand"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e07143cd-51fe-4c69-bc87-5b701c303fcd"}},"_resolved":"/home/runner/work/tools/tools/packages/service/contentful-migration-service/bernierllc-contentful-migration-service-1.6.1.tgz","_integrity":"sha512-o2WdKn1tW+1370mWJtotwB2bvhCF7u5G0Tf9CZgDpo7m0z4H+R1hrJBCSMHqhcoJI2lDXZvql39h5dAVLOfwRA==","_npmVersion":"12.0.1","description":"Content model migration management with version control, rollback support, and migration history tracking","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@bernierllc/logger":"1.7.1","contentful-migration":"^4.0.0","@bernierllc/contentful-types":"1.5.0","@bernierllc/neverhub-adapter":"0.4.1","@bernierllc/contentful-cma-client":"1.3.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^9.15.0","ts-jest":"^29.2.5","typescript":"^5.7.2","@types/jest":"^29.5.14","@types/node":"^22.10.1","@typescript-eslint/parser":"^8.15.0","@typescript-eslint/eslint-plugin":"^8.15.0"},"_npmOperationalInternal":{"tmp":"tmp/contentful-migration-service_1.6.1_1784015842412_0.4934501811898593","host":"s3://npm-registry-packages-npm-production"}},"1.6.2":{"_id":"@bernierllc/contentful-migration-service@1.6.2","dist":{"shasum":"c26317ee9a92bd16224ef3926c980bca9b75d83f","tarball":"https://registry.npmjs.org/@bernierllc/contentful-migration-service/-/contentful-migration-service-1.6.2.tgz","fileCount":15,"integrity":"sha512-A5P2kzhxL55rb0z/Ulm4gybmKoSSnMQ1KzFGhcKg+SZhulA7A/D/23tMq1+xiA6U8SBsKbljrNPQz955Fdjn1g==","signatures":[{"sig":"MEYCIQDrSXWBGqR+268pJsakcyhP3fLBQF1K7UY+BQqcF+XqiwIhAIDFtrmKzK45UEFlEZ1O8REblW/eWLEzZ+2/K5ZWs6Hd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBgsMzK252UXDnWHG1LcMgW5pxjzN2yptPoAZ/THeT4NAiBA9bhmTeRErpwxsigfZZyXRZpb5lfK9ZExsGT8HS267Q=="}],"unpackedSize":33226},"main":"dist/index.js","name":"@bernierllc/contentful-migration-service","_from":"file:bernierllc-contentful-migration-service-1.6.2.tgz","types":"dist/index.d.ts","author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE.md","scripts":{"lint":"eslint src --ext .ts","test":"jest --runInBand","build":"tsc","clean":"rm -rf dist","lint:fix":"eslint src --ext .ts --fix","test:run":"jest --runInBand","test:watch":"jest --watch","test:coverage":"jest --coverage --runInBand"},"version":"1.6.2","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"e07143cd-51fe-4c69-bc87-5b701c303fcd"}},"keywords":["contentful","migrations","content-model","versioning","service","bernierllc"],"_resolved":"/home/runner/work/tools/tools/packages/service/contentful-migration-service/bernierllc-contentful-migration-service-1.6.2.tgz","_integrity":"sha512-A5P2kzhxL55rb0z/Ulm4gybmKoSSnMQ1KzFGhcKg+SZhulA7A/D/23tMq1+xiA6U8SBsKbljrNPQz955Fdjn1g==","_npmVersion":"12.2.0","description":"Content model migration management with version control, rollback support, and migration history tracking","directories":{},"maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"_nodeVersion":"24.21.0","dependencies":{"@bernierllc/logger":"^1.7.1","contentful-migration":"^4.0.0","@bernierllc/contentful-types":"^1.5.0","@bernierllc/neverhub-adapter":"^0.4.1","@bernierllc/contentful-cma-client":"^1.3.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^9.15.0","ts-jest":"^29.2.5","typescript":"^5.7.2","@types/jest":"^29.5.14","@types/node":"^22.10.1","@typescript-eslint/parser":"^8.15.0","@typescript-eslint/eslint-plugin":"^8.15.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/contentful-migration-service_1.6.2_1790884327182_0.1231661295335249"}}},"time":{"created":"2025-12-02T20:38:16.654Z","modified":"2026-10-01T19:52:07.481Z","1.0.2":"2025-12-02T20:38:16.920Z","1.0.3":"2025-12-22T21:11:15.399Z","1.0.4":"2025-12-23T01:48:15.872Z","1.2.0":"2026-01-05T19:47:50.407Z","1.2.2":"2026-03-10T17:25:26.411Z","1.2.3":"2026-05-18T19:48:53.685Z","1.2.4":"2026-05-19T02:23:41.098Z","1.2.5":"2026-05-19T20:12:55.060Z","1.3.0":"2026-05-20T01:47:04.572Z","1.5.0":"2026-05-20T02:59:23.427Z","1.6.0":"2026-05-20T04:12:49.586Z","1.6.1":"2026-07-14T07:57:22.546Z","1.6.2":"2026-10-01T19:52:07.278Z"},"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE.md","keywords":["contentful","migrations","content-model","versioning","service","bernierllc"],"description":"Content model migration management with version control, rollback support, and migration history tracking","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"readme":"# @bernierllc/contentful-migration-service\n\nContent model migration management with version control, rollback support, and migration history tracking for Contentful.\n\n## Features\n\n- **Migration Execution**: Run content model migrations using Contentful's official migration library\n- **History Tracking**: Track migration execution history with flexible storage backends\n- **Dry-Run Mode**: Validate migrations before executing them\n- **Abstract Storage**: Plug in your own storage implementation (PostgreSQL, MongoDB, etc.)\n- **NeverHub Integration**: Optional integration with NeverHub for event tracking\n- **Type Safety**: Full TypeScript support with strict typing\n\n## Installation\n\n```bash\nnpm install @bernierllc/contentful-migration-service\n```\n\n## Usage\n\n### Quick Start\n\n```typescript\nimport {\n  ContentfulMigrationService,\n  InMemoryMigrationStorage\n} from '@bernierllc/contentful-migration-service';\n\n// Create storage (in-memory for testing, use persistent storage in production)\nconst storage = new InMemoryMigrationStorage();\n\n// Initialize service\nconst service = new ContentfulMigrationService({\n  spaceId: 'your-space-id',\n  environmentId: 'master',\n  accessToken: 'your-cma-token',\n  storage,\n  executedBy: 'john@example.com',\n});\n\n// Define migration\nconst migrationFn = (migration) => {\n  const blogPost = migration.createContentType('blogPost', {\n    name: 'Blog Post',\n    description: 'A blog post content type',\n  });\n\n  blogPost.createField('title', {\n    name: 'Title',\n    type: 'Symbol',\n    required: true,\n  });\n\n  blogPost.createField('content', {\n    name: 'Content',\n    type: 'Text',\n  });\n};\n\n// Run migration\nconst result = await service.runMigration(migrationFn, {\n  id: 'create-blog-post-001',\n  name: 'Create Blog Post Content Type',\n  description: 'Initial blog post content type with title and content fields',\n});\n\nif (result.success) {\n  console.log(`Migration completed in ${result.duration}ms`);\n} else {\n  console.error(`Migration failed: ${result.error}`);\n}\n```\n\n## Core Concepts\n\n### Migration Storage\n\nThe service uses an abstract `MigrationStorage` interface, allowing you to plug in any storage backend:\n\n```typescript\ninterface MigrationStorage {\n  saveMigration(record: MigrationRecord): Promise<void>;\n  getMigration(id: string): Promise<MigrationRecord | null>;\n  getMigrations(spaceId: string, environmentId: string): Promise<MigrationRecord[]>;\n  hasMigration(id: string, spaceId: string, environmentId: string): Promise<boolean>;\n  updateMigrationStatus(\n    id: string,\n    status: MigrationRecord['status'],\n    error?: string,\n    duration?: number\n  ): Promise<void>;\n}\n```\n\n### Built-in Storage\n\n**InMemoryMigrationStorage**: For testing and development\n```typescript\nimport { InMemoryMigrationStorage } from '@bernierllc/contentful-migration-service';\n\nconst storage = new InMemoryMigrationStorage();\n```\n\n### Custom Storage\n\nImplement your own storage for production use:\n\n```typescript\nimport { MigrationStorage, MigrationRecord } from '@bernierllc/contentful-migration-service';\nimport { Pool } from 'pg';\n\nclass PostgresMigrationStorage implements MigrationStorage {\n  constructor(private pool: Pool) {}\n\n  async saveMigration(record: MigrationRecord): Promise<void> {\n    await this.pool.query(\n      `INSERT INTO migrations (id, name, description, executed_at, status, space_id, environment_id, dry_run)\n       VALUES ($1, $2, $3, $4, $5, $6, $7, $8)\n       ON CONFLICT (id) DO UPDATE SET\n         status = EXCLUDED.status,\n         duration = EXCLUDED.duration,\n         error = EXCLUDED.error`,\n      [record.id, record.name, record.description, record.executedAt,\n       record.status, record.spaceId, record.environmentId, record.dryRun]\n    );\n  }\n\n  // Implement other methods...\n}\n```\n\n## API Reference\n\n### ContentfulMigrationService\n\n#### Constructor\n\n```typescript\nconstructor(config: MigrationServiceConfig)\n```\n\n**Config Options:**\n- `spaceId` (string): Contentful space ID\n- `environmentId` (string, optional): Environment ID (default: 'master')\n- `accessToken` (string): Contentful CMA access token\n- `storage` (MigrationStorage): Storage implementation for migration history\n- `executedBy` (string, optional): Identifier for who is executing migrations\n\n#### runMigration\n\nRun a migration function:\n\n```typescript\nasync runMigration(\n  migrationFn: MigrationFunction,\n  options: MigrationOptions\n): Promise<MigrationResult>\n```\n\n**Options:**\n- `id` (string): Unique migration ID\n- `name` (string): Human-readable name\n- `description` (string, optional): Description of what the migration does\n- `dryRun` (boolean, optional): Run in validation-only mode\n- `timeout` (number, optional): Timeout in milliseconds\n\n**Returns:** `MigrationResult` with success status, duration, and any errors\n\n#### getMigrationHistory\n\nGet all migrations for the configured space/environment:\n\n```typescript\nasync getMigrationHistory(): Promise<MigrationRecord[]>\n```\n\n#### getMigration\n\nGet a specific migration by ID:\n\n```typescript\nasync getMigration(id: string): Promise<MigrationRecord | null>\n```\n\n#### hasExecutedMigration\n\nCheck if a migration has been successfully executed:\n\n```typescript\nasync hasExecutedMigration(id: string): Promise<boolean>\n```\n\n#### validateMigration\n\nValidate a migration without executing it:\n\n```typescript\nasync validateMigration(\n  migrationFn: MigrationFunction,\n  options: Pick<MigrationOptions, 'id' | 'name' | 'description'>\n): Promise<ValidationResult>\n```\n\n#### getPendingMigrations\n\nGet migrations that haven't been executed yet:\n\n```typescript\nasync getPendingMigrations(migrationIds: string[]): Promise<string[]>\n```\n\n#### getCMAClient\n\nGet the underlying Contentful CMA client for advanced operations:\n\n```typescript\ngetCMAClient(): ContentfulCMAClient\n```\n\n## Migration Examples\n\n### Creating a Content Type\n\n```typescript\nconst migrationFn = (migration) => {\n  const author = migration.createContentType('author', {\n    name: 'Author',\n    description: 'Author of blog posts',\n  });\n\n  author.createField('name', {\n    name: 'Name',\n    type: 'Symbol',\n    required: true,\n  });\n\n  author.createField('bio', {\n    name: 'Biography',\n    type: 'Text',\n  });\n\n  author.displayField('name');\n};\n\nawait service.runMigration(migrationFn, {\n  id: 'create-author-001',\n  name: 'Create Author Content Type',\n});\n```\n\n### Modifying an Existing Content Type\n\n```typescript\nconst migrationFn = (migration) => {\n  const blogPost = migration.editContentType('blogPost');\n\n  blogPost.createField('publishDate', {\n    name: 'Publish Date',\n    type: 'Date',\n    required: false,\n  });\n\n  blogPost.createField('author', {\n    name: 'Author',\n    type: 'Link',\n    linkType: 'Entry',\n    validations: [{\n      linkContentType: ['author'],\n    }],\n  });\n};\n\nawait service.runMigration(migrationFn, {\n  id: 'add-author-to-blog-post-001',\n  name: 'Add Author and Publish Date to Blog Post',\n});\n```\n\n### Dry-Run Mode\n\nTest migrations before executing:\n\n```typescript\nconst result = await service.runMigration(migrationFn, {\n  id: 'risky-migration-001',\n  name: 'Risky Migration',\n  dryRun: true,\n});\n\nif (result.success) {\n  console.log('Migration is valid!');\n  // Now run it for real\n  await service.runMigration(migrationFn, {\n    id: 'risky-migration-001',\n    name: 'Risky Migration',\n    dryRun: false,\n  });\n}\n```\n\n### Migration History\n\n```typescript\n// Get all migrations\nconst history = await service.getMigrationHistory();\nconsole.log(`Total migrations: ${history.length}`);\n\nhistory.forEach(migration => {\n  console.log(`${migration.name}: ${migration.status} (${migration.executedAt})`);\n});\n\n// Check if specific migration was executed\nconst hasRun = await service.hasExecutedMigration('create-blog-post-001');\nif (hasRun) {\n  console.log('Migration already executed, skipping...');\n}\n```\n\n### Pending Migrations\n\n```typescript\nconst allMigrationIds = [\n  'create-blog-post-001',\n  'create-author-001',\n  'add-author-to-blog-post-001',\n];\n\nconst pending = await service.getPendingMigrations(allMigrationIds);\nconsole.log(`Pending migrations: ${pending.join(', ')}`);\n\n// Run all pending migrations\nfor (const id of pending) {\n  const migrationFn = getMigrationFunction(id); // Your function to load migration\n  await service.runMigration(migrationFn, {\n    id,\n    name: getMigrationName(id),\n  });\n}\n```\n\n## Integration Status\n\n**Logger Integration**: ✅ Implemented\nUses `@bernierllc/logger` for structured logging throughout the service.\n\n**NeverHub Integration**: ✅ Implemented\nAutomatically detects and integrates with NeverHub if available.\n\n## NeverHub Integration\n\nThe service automatically detects and integrates with NeverHub if available:\n\n```typescript\n// Events emitted:\n// - migration.completed: When migration succeeds\n// - migration.failed: When migration fails\n\nconst service = new ContentfulMigrationService(config);\n// NeverHub automatically initialized if available\n```\n\n## Best Practices\n\n### 1. Use Unique Migration IDs\n\nAlways use unique, descriptive IDs for migrations:\n\n```typescript\n// Good\nid: 'create-blog-post-content-type-2025-01-15'\nid: 'add-seo-fields-to-blog-post-001'\n\n// Bad\nid: '1'\nid: 'migration'\n```\n\n### 2. Test with Dry-Run First\n\nAlways validate migrations in dry-run mode before executing:\n\n```typescript\n// Validate first\nawait service.runMigration(migrationFn, { id, name, dryRun: true });\n\n// Then execute\nawait service.runMigration(migrationFn, { id, name, dryRun: false });\n```\n\n### 3. Use Persistent Storage in Production\n\nNever use `InMemoryMigrationStorage` in production:\n\n```typescript\n// Development\nconst storage = new InMemoryMigrationStorage();\n\n// Production\nconst storage = new PostgresMigrationStorage(pgPool);\n```\n\n### 4. Handle Failures Gracefully\n\nAlways check migration results and handle failures:\n\n```typescript\nconst result = await service.runMigration(migrationFn, options);\n\nif (!result.success) {\n  console.error(`Migration failed: ${result.error}`);\n  // Send alert, log to monitoring system, etc.\n  throw new Error(`Migration ${options.id} failed: ${result.error}`);\n}\n```\n\n### 5. Keep Migrations Small\n\nBreak large changes into smaller, atomic migrations:\n\n```typescript\n// Instead of one large migration:\n// ❌ 'update-entire-content-model-001'\n\n// Use multiple smaller migrations:\n// ✅ 'add-seo-fields-to-blog-post-001'\n// ✅ 'add-author-relationship-to-blog-post-002'\n// ✅ 'add-categories-to-blog-post-003'\n```\n\n## Error Handling\n\nThe service handles errors gracefully and tracks them in storage:\n\n```typescript\ntry {\n  const result = await service.runMigration(migrationFn, options);\n\n  if (!result.success) {\n    // Migration failed but error was caught\n    console.error(result.error);\n  }\n} catch (error) {\n  // Unexpected error (storage failure, etc.)\n  console.error('Unexpected error:', error);\n}\n```\n\n## Dependencies\n\n- `@bernierllc/contentful-types` - Type definitions\n- `@bernierllc/contentful-cma-client` - CMA client wrapper\n- `@bernierllc/logger` - Logging\n- `@bernierllc/neverhub-adapter` - Optional event tracking\n- `contentful-migration` - Official Contentful migration library\n\n## License\n\nCopyright (c) 2025 Bernier LLC - See LICENSE.md for details\n\n## Support\n\nFor issues and questions, please contact: support@bernierllc.com\n","readmeFilename":"README.md"}