{"_id":"@bernierllc/content-storage-adapter","_rev":"17-28e38a0aa665e426b95b8c87c87fd216","name":"@bernierllc/content-storage-adapter","dist-tags":{"latest":"3.0.1"},"versions":{"1.0.0":{"name":"@bernierllc/content-storage-adapter","version":"1.0.0","keywords":["content","storage","crud","database","soft-delete","versioning"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","_id":"@bernierllc/content-storage-adapter@1.0.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"af9b8fd2a228bb1e39ccb9f4d38be13f43e03bc5","tarball":"https://registry.npmjs.org/@bernierllc/content-storage-adapter/-/content-storage-adapter-1.0.0.tgz","fileCount":54,"integrity":"sha512-k/WSZNb/7fIuBtk16MSLDNj/81DY/T3FT4pHugpykatRYN6DeqH5u66HmufUrHKiP81uk7KkRqlckLN9ftQewA==","signatures":[{"sig":"MEYCIQCuM0U9Qw8uslmhxvng11E4zRoV1LJqOEx8g5G6z/3PhQIhAONFW05mow/RHQOD+5H+t+40Al8h5j6DKT3gU84QraZc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":109225},"main":"./dist/index.js","_from":"file:bernierllc-content-storage-adapter-1.0.0.tgz","types":"./dist/index.d.ts","scripts":{"lint":"eslint src __tests__ --ext .ts","test":"jest --watch","build":"tsc","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"mkbernier","email":"mkbernier@gmail.com"},"_resolved":"/tmp/053fdca7c7e00ca7141718c58e44fbec/bernierllc-content-storage-adapter-1.0.0.tgz","_integrity":"sha512-k/WSZNb/7fIuBtk16MSLDNj/81DY/T3FT4pHugpykatRYN6DeqH5u66HmufUrHKiP81uk7KkRqlckLN9ftQewA==","_npmVersion":"11.7.0","description":"Type-safe CRUD operations for content management with soft-delete, version tracking, and optimistic locking","directories":{},"_nodeVersion":"20.19.6","dependencies":{"@bernierllc/slug-generator":"1.0.1","@bernierllc/database-adapter-core":"1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/content-storage-adapter_1.0.0_1766087432922_0.3574640745030735","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@bernierllc/content-storage-adapter","version":"1.0.1","keywords":["content","storage","crud","database","soft-delete","versioning"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","_id":"@bernierllc/content-storage-adapter@1.0.1","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"784348d4789a5ec8b111117c322bc5e17f2d4259","tarball":"https://registry.npmjs.org/@bernierllc/content-storage-adapter/-/content-storage-adapter-1.0.1.tgz","fileCount":55,"integrity":"sha512-3cFASBqnR/VFy97G8D4GxH6chmC0kZmIsRQCOzi3NQvy7pnxj8tRkUWtffPjQ/LPgBppDDFcA0MkrDzeaiIzuw==","signatures":[{"sig":"MEQCICtQy/vO/w1vKEPCTfMYfrTWlI82gCd52ND9WmJ3uj6xAiAQnxS4EpaAvYrAswpaYol0JncKinZrKOYGIDjGRlPgNw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":109364},"main":"./dist/index.js","_from":"file:bernierllc-content-storage-adapter-1.0.1.tgz","types":"./dist/index.d.ts","scripts":{"lint":"eslint src __tests__ --ext .ts","test":"jest --watch","build":"tsc","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"mkbernier","email":"mkbernier@gmail.com"},"_resolved":"/tmp/16e92cf609ca211e13be1f08e865d5be/bernierllc-content-storage-adapter-1.0.1.tgz","_integrity":"sha512-3cFASBqnR/VFy97G8D4GxH6chmC0kZmIsRQCOzi3NQvy7pnxj8tRkUWtffPjQ/LPgBppDDFcA0MkrDzeaiIzuw==","_npmVersion":"11.7.0","description":"Type-safe CRUD operations for content management with soft-delete, version tracking, and optimistic locking","directories":{},"_nodeVersion":"20.19.6","dependencies":{"@bernierllc/slug-generator":"1.0.1","@bernierllc/database-adapter-core":"1.0.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/content-storage-adapter_1.0.1_1766276703572_0.10773872865191336","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@bernierllc/content-storage-adapter","version":"1.0.2","keywords":["content","storage","crud","database","soft-delete","versioning"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","_id":"@bernierllc/content-storage-adapter@1.0.2","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"0a5f9f31e92b71fd2225bb8f8772d8f1f8723a70","tarball":"https://registry.npmjs.org/@bernierllc/content-storage-adapter/-/content-storage-adapter-1.0.2.tgz","fileCount":55,"integrity":"sha512-XMefJMvX1v6Obh02Zt+pV/X8gifjPfjEyCWxbPBBgHHm76VzfeJEu4+IUoF2AszS7OrFSVc2dkvJ+QOnVESdnQ==","signatures":[{"sig":"MEQCID9OIrKDYtZYu2N4oI+GAhnX7h51y8PJrzLIDKDoFOcsAiBtN+EpzVpRnHF+vrrMMcns9fjv4AHk7BCYDIxb7e/ZuA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":109465},"main":"./dist/index.js","_from":"file:bernierllc-content-storage-adapter-1.0.2.tgz","types":"./dist/index.d.ts","scripts":{"lint":"eslint src __tests__ --ext .ts","test":"jest --watch","build":"tsc","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"mkbernier","email":"mkbernier@gmail.com"},"_resolved":"/tmp/24b77e86653ecc5a26a7c45627a852bf/bernierllc-content-storage-adapter-1.0.2.tgz","_integrity":"sha512-XMefJMvX1v6Obh02Zt+pV/X8gifjPfjEyCWxbPBBgHHm76VzfeJEu4+IUoF2AszS7OrFSVc2dkvJ+QOnVESdnQ==","_npmVersion":"11.7.0","description":"Type-safe CRUD operations for content management with soft-delete, version tracking, and optimistic locking","directories":{},"_nodeVersion":"20.19.6","dependencies":{"@bernierllc/slug-generator":"1.0.1","@bernierllc/database-adapter-core":"1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/content-storage-adapter_1.0.2_1766283485010_0.9922690093443232","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@bernierllc/content-storage-adapter","version":"1.0.3","keywords":["content","storage","crud","database","soft-delete","versioning"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","_id":"@bernierllc/content-storage-adapter@1.0.3","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"d6fcd0dda7e8f4d8e5ed272173bf14baaa7705bb","tarball":"https://registry.npmjs.org/@bernierllc/content-storage-adapter/-/content-storage-adapter-1.0.3.tgz","fileCount":55,"integrity":"sha512-0vKGLg2vTrkzoiphyLWtKudgQT6Q+kWyYkMWrhjsfuANx62EKo5fMHug/QehwxrpEnMuV5+XHbyYZLOxWh2hUg==","signatures":[{"sig":"MEQCIDuY4lC08XNDwl9EmUnxWFS7nnOdRcbnlYCAhlnGL3xZAiBxStY6VZwYSpYHsOa90JZFycGXT5+J2hwbpPh3/+4ZBg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":109566},"main":"./dist/index.js","_from":"file:bernierllc-content-storage-adapter-1.0.3.tgz","types":"./dist/index.d.ts","scripts":{"lint":"eslint src __tests__ --ext .ts","test":"jest --watch","build":"tsc","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:85464d07-8cf6-4a78-98b0-383e9b55ddb4"}},"_resolved":"/tmp/333f640c6dff4d273aa711de824e0550/bernierllc-content-storage-adapter-1.0.3.tgz","_integrity":"sha512-0vKGLg2vTrkzoiphyLWtKudgQT6Q+kWyYkMWrhjsfuANx62EKo5fMHug/QehwxrpEnMuV5+XHbyYZLOxWh2hUg==","_npmVersion":"11.7.0","description":"Type-safe CRUD operations for content management with soft-delete, version tracking, and optimistic locking","directories":{},"_nodeVersion":"20.19.6","dependencies":{"@bernierllc/slug-generator":"1.0.1","@bernierllc/database-adapter-core":"1.0.3"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/content-storage-adapter_1.0.3_1766437731880_0.312031755401571","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@bernierllc/content-storage-adapter","version":"1.0.4","keywords":["content","storage","crud","database","soft-delete","versioning"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","_id":"@bernierllc/content-storage-adapter@1.0.4","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"0ffec20e2ebb1956fc880a0371be56ee5c9afcf0","tarball":"https://registry.npmjs.org/@bernierllc/content-storage-adapter/-/content-storage-adapter-1.0.4.tgz","fileCount":55,"integrity":"sha512-TFzRzUYgbku9JEGE77CmipN5aF9rx+uH6xCvB3MQXKHblMYmQ3g40W8Fv54qcgZmEHLoITxRyxH2r9mHb9ttZA==","signatures":[{"sig":"MEQCIGgNiJRIIMphX6CArhkF2IVNThiiZXf9FZH47snJCibSAiA/78qp4z1NN2gB7u21MEHRMDt0ynD9ArN3NX5zPpy2/Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":109667},"main":"./dist/index.js","_from":"file:bernierllc-content-storage-adapter-1.0.4.tgz","types":"./dist/index.d.ts","scripts":{"lint":"eslint src __tests__ --ext .ts","test":"jest --watch","build":"tsc","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:85464d07-8cf6-4a78-98b0-383e9b55ddb4"}},"_resolved":"/tmp/9ec8d9162028b40d84e072ae84678c9c/bernierllc-content-storage-adapter-1.0.4.tgz","_integrity":"sha512-TFzRzUYgbku9JEGE77CmipN5aF9rx+uH6xCvB3MQXKHblMYmQ3g40W8Fv54qcgZmEHLoITxRyxH2r9mHb9ttZA==","_npmVersion":"11.7.0","description":"Type-safe CRUD operations for content management with soft-delete, version tracking, and optimistic locking","directories":{},"_nodeVersion":"20.19.6","dependencies":{"@bernierllc/slug-generator":"1.0.1","@bernierllc/database-adapter-core":"1.0.4"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/content-storage-adapter_1.0.4_1766454377795_0.5149646475739746","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@bernierllc/content-storage-adapter","version":"1.2.0","keywords":["content","storage","crud","database","soft-delete","versioning"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","_id":"@bernierllc/content-storage-adapter@1.2.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"c55fadc3c7834d1ddfdfdee61158d7224903c8db","tarball":"https://registry.npmjs.org/@bernierllc/content-storage-adapter/-/content-storage-adapter-1.2.0.tgz","fileCount":55,"integrity":"sha512-nrjOOCh9raNEHNswNLF4W7JOSIEh8yXXyy89p7OOtmzCFSWCjvgcXgUH60izwtcUPcRYbBk9mxgMx3VuRSc7Lg==","signatures":[{"sig":"MEUCIQDWXQTyYaBZzO2H0FMylZMFI59QdybcoQlUiJzNktt8UgIgMiFOcBglw8HsEh2JMB1XjKT6wDUgBBKPBSjfMpUmC9o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":110506},"main":"./dist/index.js","types":"./dist/index.d.ts","gitHead":"af7e74b3715d56d3a193e1bb6743b337c2b0df6d","scripts":{"lint":"eslint src __tests__ --ext .ts","test":"jest --watch","build":"tsc","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:85464d07-8cf6-4a78-98b0-383e9b55ddb4"}},"_npmVersion":"lerna/9.0.3/node@v20.19.6+x64 (linux)","description":"Type-safe CRUD operations for content management with soft-delete, version tracking, and optimistic locking","directories":{},"_nodeVersion":"20.19.6","dependencies":{"@bernierllc/slug-generator":"1.0.3","@bernierllc/database-adapter-core":"1.0.6"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/content-storage-adapter_1.2.0_1767642471745_0.9082191051339259","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"@bernierllc/content-storage-adapter","version":"1.2.2","keywords":["content","storage","crud","database","soft-delete","versioning"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","_id":"@bernierllc/content-storage-adapter@1.2.2","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"016ced719477c656503b148b85408efc499e4387","tarball":"https://registry.npmjs.org/@bernierllc/content-storage-adapter/-/content-storage-adapter-1.2.2.tgz","fileCount":55,"integrity":"sha512-fVemJ6CuDcsK9Y7CQZAlPfxrvPoadTUn+LvRV8oINySCiWp2UG4x+Z6xyqJQ9W1Epcj9dvM+PvM/ODJuMApoQg==","signatures":[{"sig":"MEUCICBp5+qNqFBYa76C4oHyJ4JWrSXoIOIUZOhrJ1zCVMpUAiEA1jLqgiQzpB36KNy8sFRmk1qDKBTOaHHqe+ZI+4sSlFc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":110922},"main":"./dist/index.js","_from":"file:bernierllc-content-storage-adapter-1.2.2.tgz","types":"./dist/index.d.ts","scripts":{"lint":"eslint src __tests__ --ext .ts","test":"jest --watch","build":"tsc","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:85464d07-8cf6-4a78-98b0-383e9b55ddb4"}},"_resolved":"/home/runner/work/tools/tools/packages/core/content-storage-adapter/bernierllc-content-storage-adapter-1.2.2.tgz","_integrity":"sha512-fVemJ6CuDcsK9Y7CQZAlPfxrvPoadTUn+LvRV8oINySCiWp2UG4x+Z6xyqJQ9W1Epcj9dvM+PvM/ODJuMApoQg==","_npmVersion":"11.11.0","description":"Type-safe CRUD operations for content management with soft-delete, version tracking, and optimistic locking","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@bernierllc/slug-generator":"1.0.5","@bernierllc/database-adapter-core":"1.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/content-storage-adapter_1.2.2_1773163060057_0.9689261935477278","host":"s3://npm-registry-packages-npm-production"}},"1.2.3":{"name":"@bernierllc/content-storage-adapter","version":"1.2.3","keywords":["content","storage","crud","database","soft-delete","versioning"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","_id":"@bernierllc/content-storage-adapter@1.2.3","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"d5d9cae7a9227689b7bec83df460d8290bf8f974","tarball":"https://registry.npmjs.org/@bernierllc/content-storage-adapter/-/content-storage-adapter-1.2.3.tgz","fileCount":55,"integrity":"sha512-wz7o8nu4QJ25+HY+R/O3yrHq667T5hugP7LQ/gvyZyUjp4qsZklol+lkbpYzYg/DqDCVlr3S/RGEElj18PJD9g==","signatures":[{"sig":"MEUCIQC5M98mukFDSUbSyAmwMQWHq5GBAcfmri/LEXTBqze+MgIgQGnkZzT5SbMnRG+9WMCxQWZaUSE5u/WUtYPi4NM7K3U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":111159},"main":"./dist/index.js","_from":"file:bernierllc-content-storage-adapter-1.2.3.tgz","types":"./dist/index.d.ts","scripts":{"lint":"eslint src __tests__ --ext .ts","test":"jest --watch","build":"tsc","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:85464d07-8cf6-4a78-98b0-383e9b55ddb4"}},"_resolved":"/home/runner/work/tools/tools/packages/core/content-storage-adapter/bernierllc-content-storage-adapter-1.2.3.tgz","_integrity":"sha512-wz7o8nu4QJ25+HY+R/O3yrHq667T5hugP7LQ/gvyZyUjp4qsZklol+lkbpYzYg/DqDCVlr3S/RGEElj18PJD9g==","_npmVersion":"11.14.1","description":"Type-safe CRUD operations for content management with soft-delete, version tracking, and optimistic locking","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@bernierllc/slug-generator":"1.0.5","@bernierllc/database-adapter-core":"1.0.9"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/content-storage-adapter_1.2.3_1779133375238_0.7661483619008933","host":"s3://npm-registry-packages-npm-production"}},"1.2.4":{"name":"@bernierllc/content-storage-adapter","version":"1.2.4","keywords":["content","storage","crud","database","soft-delete","versioning"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","_id":"@bernierllc/content-storage-adapter@1.2.4","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"cdd617a457f1d2faa139f18f4c7afb0445e17fb4","tarball":"https://registry.npmjs.org/@bernierllc/content-storage-adapter/-/content-storage-adapter-1.2.4.tgz","fileCount":55,"integrity":"sha512-/1g0rhoG2p4l5yzNKrzYEaM3WFGm8BSGuHKLMLrvYM8am2Uf2Vz70PbJEVKRU4UelNXiG8RJa7L3GT6ZFB4b1g==","signatures":[{"sig":"MEUCIQCIAXogiYKmzcIZWqV+nWtbInJU27rzE4Kn15ShFnv+dgIgHKUnjG5Y7jN1wxYFW3RcO4XnlK6G9khtdnNllMeetw8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":111397},"main":"./dist/index.js","_from":"file:bernierllc-content-storage-adapter-1.2.4.tgz","types":"./dist/index.d.ts","scripts":{"lint":"eslint src __tests__ --ext .ts","test":"jest --watch","build":"tsc","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:85464d07-8cf6-4a78-98b0-383e9b55ddb4"}},"_resolved":"/home/runner/work/tools/tools/packages/core/content-storage-adapter/bernierllc-content-storage-adapter-1.2.4.tgz","_integrity":"sha512-/1g0rhoG2p4l5yzNKrzYEaM3WFGm8BSGuHKLMLrvYM8am2Uf2Vz70PbJEVKRU4UelNXiG8RJa7L3GT6ZFB4b1g==","_npmVersion":"11.14.1","description":"Type-safe CRUD operations for content management with soft-delete, version tracking, and optimistic locking","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@bernierllc/slug-generator":"1.0.5","@bernierllc/database-adapter-core":"1.0.10"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/content-storage-adapter_1.2.4_1779157129942_0.3739110915888568","host":"s3://npm-registry-packages-npm-production"}},"1.2.5":{"name":"@bernierllc/content-storage-adapter","version":"1.2.5","keywords":["content","storage","crud","database","soft-delete","versioning"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","_id":"@bernierllc/content-storage-adapter@1.2.5","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"0206a099f9f7dd6bab01f51b7a421a944e9a4acc","tarball":"https://registry.npmjs.org/@bernierllc/content-storage-adapter/-/content-storage-adapter-1.2.5.tgz","fileCount":55,"integrity":"sha512-VkmnMElorDeQorQ6TMzs0rNNw/s1b2nbl7D+T/wbQsjcJqQVTeypKf+VB/mh2JU1qGqxC6hJVi/VUs3WkFA4bw==","signatures":[{"sig":"MEUCIQDltQGxM9a+zBAIxJuoV5BEVf7jpjOyxSEytYrMKVjIJgIgTcVj0laAwzomK9qH7EF8bIqBCafV4Lue3eqf6uCr8/Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":111634},"main":"./dist/index.js","_from":"file:bernierllc-content-storage-adapter-1.2.5.tgz","types":"./dist/index.d.ts","scripts":{"lint":"eslint src __tests__ --ext .ts","test":"jest --watch","build":"tsc","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:85464d07-8cf6-4a78-98b0-383e9b55ddb4"}},"_resolved":"/home/runner/work/tools/tools/packages/core/content-storage-adapter/bernierllc-content-storage-adapter-1.2.5.tgz","_integrity":"sha512-VkmnMElorDeQorQ6TMzs0rNNw/s1b2nbl7D+T/wbQsjcJqQVTeypKf+VB/mh2JU1qGqxC6hJVi/VUs3WkFA4bw==","_npmVersion":"11.14.1","description":"Type-safe CRUD operations for content management with soft-delete, version tracking, and optimistic locking","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@bernierllc/slug-generator":"1.0.5","@bernierllc/database-adapter-core":"1.0.11"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/content-storage-adapter_1.2.5_1779221227723_0.9143769206070176","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@bernierllc/content-storage-adapter","version":"1.4.0","keywords":["content","storage","crud","database","soft-delete","versioning"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","_id":"@bernierllc/content-storage-adapter@1.4.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"7de5b1fdd64fcf61b9a7f790809c2868be0c8bcb","tarball":"https://registry.npmjs.org/@bernierllc/content-storage-adapter/-/content-storage-adapter-1.4.0.tgz","fileCount":42,"integrity":"sha512-MlwWYvp4jfub1q7AhI4tUYdv8RoNITTVaicFuyEaAbL7bWA6hUjFtG0IXb2XvaWoYUOFkNog+Fiod8m6uYmFdA==","signatures":[{"sig":"MEYCIQCvJF6dEahpQN8skkAVFaNvEr0ZTBvcdersx15rP2GjlgIhAIkEpHW86ohFNx3YDb1/kkJEwQsxz9yN3XwVtFw8NMBy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":62683},"main":"./dist/index.js","_from":"file:bernierllc-content-storage-adapter-1.4.0.tgz","types":"./dist/index.d.ts","scripts":{"lint":"eslint src __tests__ --ext .ts","test":"jest --watch","build":"tsc","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:85464d07-8cf6-4a78-98b0-383e9b55ddb4"}},"_resolved":"/home/runner/work/tools/tools/packages/core/content-storage-adapter/bernierllc-content-storage-adapter-1.4.0.tgz","_integrity":"sha512-MlwWYvp4jfub1q7AhI4tUYdv8RoNITTVaicFuyEaAbL7bWA6hUjFtG0IXb2XvaWoYUOFkNog+Fiod8m6uYmFdA==","_npmVersion":"11.14.1","description":"Type-safe CRUD operations for content management with soft-delete, version tracking, and optimistic locking","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@bernierllc/slug-generator":"1.0.5","@bernierllc/database-adapter-core":"1.0.11"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/content-storage-adapter_1.4.0_1779233879278_0.8364176889498338","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@bernierllc/content-storage-adapter","version":"1.5.0","keywords":["content","storage","crud","database","soft-delete","versioning"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","_id":"@bernierllc/content-storage-adapter@1.5.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"2a32e2e82271c30979aa77f73b2efe692d9b2182","tarball":"https://registry.npmjs.org/@bernierllc/content-storage-adapter/-/content-storage-adapter-1.5.0.tgz","fileCount":42,"integrity":"sha512-isGyvIS6H+k5R8u+sGQExZ/8V54tnLlKVZbhyohnUaUN8z5rRfTnRQSjzPnLNwO8JOU9zi/5Xlf7hKWOzZXp5A==","signatures":[{"sig":"MEQCIAj7IynRzmEr+YcG36UE+wSMeQs4NHWG6ZmyEHZu3xixAiAfyG6XemUXFOr79JXlhZYfALaJ0OS+5jE/SsMl0gKSAw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":62682},"main":"./dist/index.js","_from":"file:bernierllc-content-storage-adapter-1.5.0.tgz","types":"./dist/index.d.ts","scripts":{"lint":"eslint src __tests__ --ext .ts","test":"jest --watch","build":"tsc","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:85464d07-8cf6-4a78-98b0-383e9b55ddb4"}},"_resolved":"/home/runner/work/tools/tools/packages/core/content-storage-adapter/bernierllc-content-storage-adapter-1.5.0.tgz","_integrity":"sha512-isGyvIS6H+k5R8u+sGQExZ/8V54tnLlKVZbhyohnUaUN8z5rRfTnRQSjzPnLNwO8JOU9zi/5Xlf7hKWOzZXp5A==","_npmVersion":"11.14.1","description":"Type-safe CRUD operations for content management with soft-delete, version tracking, and optimistic locking","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@bernierllc/slug-generator":"1.1.0","@bernierllc/database-adapter-core":"1.1.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/content-storage-adapter_1.5.0_1779240990463_0.8304308024736737","host":"s3://npm-registry-packages-npm-production"}},"1.5.1":{"name":"@bernierllc/content-storage-adapter","version":"1.5.1","keywords":["content","storage","crud","database","soft-delete","versioning"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","_id":"@bernierllc/content-storage-adapter@1.5.1","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"f93ab7f9d40c129504ee7c133b0b3132506f98ee","tarball":"https://registry.npmjs.org/@bernierllc/content-storage-adapter/-/content-storage-adapter-1.5.1.tgz","fileCount":42,"integrity":"sha512-UXiUTsufAVEUUFwSWjvjfYPm5cBnPyVdzWQYhoiGwclyMDRb7CXi1tH2wZtsYfUh9S2PD4vle3/oOwpMJ5Dxug==","signatures":[{"sig":"MEYCIQDgP0Nh7dlgFA8LYbtSyvUZ7ob4rTMcGhwCAVtduKZi1AIhAMUti1HRMeDTWlShDuJt1pzMFpx5C1FKncxpArmsRpf7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":62682},"main":"./dist/index.js","_from":"file:bernierllc-content-storage-adapter-1.5.1.tgz","types":"./dist/index.d.ts","scripts":{"lint":"eslint src __tests__ --ext .ts","test":"jest --watch","build":"tsc","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:85464d07-8cf6-4a78-98b0-383e9b55ddb4"}},"_resolved":"/home/runner/work/tools/tools/packages/core/content-storage-adapter/bernierllc-content-storage-adapter-1.5.1.tgz","_integrity":"sha512-UXiUTsufAVEUUFwSWjvjfYPm5cBnPyVdzWQYhoiGwclyMDRb7CXi1tH2wZtsYfUh9S2PD4vle3/oOwpMJ5Dxug==","_npmVersion":"11.14.1","description":"Type-safe CRUD operations for content management with soft-delete, version tracking, and optimistic locking","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@bernierllc/slug-generator":"1.2.0","@bernierllc/database-adapter-core":"1.1.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/content-storage-adapter_1.5.1_1779243156364_0.09941163899420014","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@bernierllc/content-storage-adapter","version":"1.6.0","keywords":["content","storage","crud","database","soft-delete","versioning"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","_id":"@bernierllc/content-storage-adapter@1.6.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"3b14778f3755e137d6ac607fa9d479f8b50a7b2e","tarball":"https://registry.npmjs.org/@bernierllc/content-storage-adapter/-/content-storage-adapter-1.6.0.tgz","fileCount":42,"integrity":"sha512-CrwKEjDeh0MEJibR0b+Ax+PDWO6Oe1gbeNZ/7bFtKWG4oJKwDK7vqrAjER7AxKXUeCnb8DV5hku5490Y+Yi+XQ==","signatures":[{"sig":"MEYCIQC0hmQF/znTT2YRP1z0Uql2zK/VMBa2q2HjIKoNwSRrJAIhAKEm+tADATKU3Plgg1PzzTzp3TZNAJTIpNobjTBEaEKg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":62682},"main":"./dist/index.js","_from":"file:bernierllc-content-storage-adapter-1.6.0.tgz","types":"./dist/index.d.ts","scripts":{"lint":"eslint src __tests__ --ext .ts","test":"jest --watch","build":"tsc","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:85464d07-8cf6-4a78-98b0-383e9b55ddb4"}},"_resolved":"/home/runner/work/tools/tools/packages/core/content-storage-adapter/bernierllc-content-storage-adapter-1.6.0.tgz","_integrity":"sha512-CrwKEjDeh0MEJibR0b+Ax+PDWO6Oe1gbeNZ/7bFtKWG4oJKwDK7vqrAjER7AxKXUeCnb8DV5hku5490Y+Yi+XQ==","_npmVersion":"11.14.1","description":"Type-safe CRUD operations for content management with soft-delete, version tracking, and optimistic locking","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@bernierllc/slug-generator":"1.3.0","@bernierllc/database-adapter-core":"1.2.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/content-storage-adapter_1.6.0_1779249727077_0.2511150359298997","host":"s3://npm-registry-packages-npm-production"}},"1.6.1":{"name":"@bernierllc/content-storage-adapter","version":"1.6.1","keywords":["content","storage","crud","database","soft-delete","versioning"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","_id":"@bernierllc/content-storage-adapter@1.6.1","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"ed7357d61d34a86c5b020cbb271267f8c5712cab","tarball":"https://registry.npmjs.org/@bernierllc/content-storage-adapter/-/content-storage-adapter-1.6.1.tgz","fileCount":42,"integrity":"sha512-U2J4z1Tge16A+sAlVtNWNGkE54ti9g2B7tZbEpNMD4RVldCVBQOIgfK+7UK/Wnl+2RGPrfV7Z6gPsXQISacsow==","signatures":[{"sig":"MEYCIQCX7GxE+00dQ7amZ6vU6bq+doa/qHTWo3ezInBjEGkqegIhAPpd0Ut/qFXSqWMOBXcQN6wj5ii6jaRYEP8SavzzSA6u","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":62682},"main":"./dist/index.js","_from":"file:bernierllc-content-storage-adapter-1.6.1.tgz","types":"./dist/index.d.ts","scripts":{"lint":"eslint src __tests__ --ext .ts","test":"jest --watch","build":"tsc","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:85464d07-8cf6-4a78-98b0-383e9b55ddb4"}},"_resolved":"/home/runner/work/tools/tools/packages/core/content-storage-adapter/bernierllc-content-storage-adapter-1.6.1.tgz","_integrity":"sha512-U2J4z1Tge16A+sAlVtNWNGkE54ti9g2B7tZbEpNMD4RVldCVBQOIgfK+7UK/Wnl+2RGPrfV7Z6gPsXQISacsow==","_npmVersion":"11.14.1","description":"Type-safe CRUD operations for content management with soft-delete, version tracking, and optimistic locking","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@bernierllc/slug-generator":"1.3.0","@bernierllc/database-adapter-core":"3.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/content-storage-adapter_1.6.1_1779301907168_0.05424328882504903","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"@bernierllc/content-storage-adapter","version":"3.0.0","keywords":["content","storage","crud","database","soft-delete","versioning"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","_id":"@bernierllc/content-storage-adapter@3.0.0","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"dist":{"shasum":"0c001c8b925f65a57fb1b4da8a01f428cba0e2e5","tarball":"https://registry.npmjs.org/@bernierllc/content-storage-adapter/-/content-storage-adapter-3.0.0.tgz","fileCount":30,"integrity":"sha512-GgHEk6jhW+SJqDXqZgJGo11V6FlPVY0On5fLHHRUrSX6z30WApXrNDEfCB6TwKi1RVaFvuhceOUwc7BkZrq+qQ==","signatures":[{"sig":"MEYCIQDRGeH0ochNAcvZASk8osKWk/4KxfWLgv6t1VplBr8ZWgIhAL8pRE7+bDb2B8g2mjSu1hkTqrJ0pVamiBnpLSKqpHh8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":60842},"main":"./dist/index.js","_from":"file:bernierllc-content-storage-adapter-3.0.0.tgz","types":"./dist/index.d.ts","scripts":{"lint":"eslint src __tests__ --ext .ts","test":"jest --watch","build":"tsc","test:run":"jest","test:coverage":"jest --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:85464d07-8cf6-4a78-98b0-383e9b55ddb4"}},"_resolved":"/home/runner/work/tools/tools/packages/core/content-storage-adapter/bernierllc-content-storage-adapter-3.0.0.tgz","_integrity":"sha512-GgHEk6jhW+SJqDXqZgJGo11V6FlPVY0On5fLHHRUrSX6z30WApXrNDEfCB6TwKi1RVaFvuhceOUwc7BkZrq+qQ==","_npmVersion":"11.15.0","description":"Type-safe CRUD operations for content management with soft-delete, version tracking, and optimistic locking","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@bernierllc/slug-generator":"1.3.0","@bernierllc/database-adapter-core":"3.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/content-storage-adapter_3.0.0_1779318403461_0.18540495128628431","host":"s3://npm-registry-packages-npm-production"}},"3.0.1":{"name":"@bernierllc/content-storage-adapter","version":"3.0.1","description":"Type-safe CRUD operations for content management with soft-delete, version tracking, and optimistic locking","main":"./dist/index.js","types":"./dist/index.d.ts","keywords":["content","storage","crud","database","soft-delete","versioning"],"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","dependencies":{"@bernierllc/database-adapter-core":"3.0.1","@bernierllc/slug-generator":"1.3.0"},"devDependencies":{"@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/eslint-plugin":"^6.0.0","@typescript-eslint/parser":"^6.0.0","eslint":"^8.0.0","jest":"^29.0.0","ts-jest":"^29.0.0","typescript":"^5.0.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"scripts":{"build":"tsc","test":"jest --watch","test:run":"jest","test:coverage":"jest --coverage","lint":"eslint src __tests__ --ext .ts"},"_id":"@bernierllc/content-storage-adapter@3.0.1","_integrity":"sha512-SC43Dfd0Kl6dtyPDQY1dMeOT3QqMhvSkbwYeDYIeWuK0E7Yk1TT0LgLiawOv3JNLo0Wqe3cxqyOaXugGgmpETQ==","_resolved":"/home/runner/work/tools/tools/packages/core/content-storage-adapter/bernierllc-content-storage-adapter-3.0.1.tgz","_from":"file:bernierllc-content-storage-adapter-3.0.1.tgz","_nodeVersion":"24.18.0","_npmVersion":"12.0.1","dist":{"integrity":"sha512-SC43Dfd0Kl6dtyPDQY1dMeOT3QqMhvSkbwYeDYIeWuK0E7Yk1TT0LgLiawOv3JNLo0Wqe3cxqyOaXugGgmpETQ==","shasum":"d23db65ccfb2af7ac8060630a254eca6562fb96a","tarball":"https://registry.npmjs.org/@bernierllc/content-storage-adapter/-/content-storage-adapter-3.0.1.tgz","fileCount":30,"unpackedSize":60842,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIEV8ifhCEpmzVfISlZkUEE43N+DDdKzGmqtfNnR381nQAiEA5e+z6gHzn9t3R1Ub244DHMJ5apZOymN7CNrbU2JTLnI="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:85464d07-8cf6-4a78-98b0-383e9b55ddb4"}},"directories":{},"maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/content-storage-adapter_3.0.1_1784015530704_0.11196276800833638"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-18T19:50:32.834Z","modified":"2026-07-14T07:52:10.976Z","1.0.0":"2025-12-18T19:50:33.083Z","1.0.1":"2025-12-21T00:25:03.736Z","1.0.2":"2025-12-21T02:18:05.171Z","1.0.3":"2025-12-22T21:08:52.054Z","1.0.4":"2025-12-23T01:46:17.942Z","1.2.0":"2026-01-05T19:47:51.873Z","1.2.2":"2026-03-10T17:17:40.208Z","1.2.3":"2026-05-18T19:42:55.395Z","1.2.4":"2026-05-19T02:18:50.134Z","1.2.5":"2026-05-19T20:07:07.876Z","1.4.0":"2026-05-19T23:37:59.431Z","1.5.0":"2026-05-20T01:36:30.604Z","1.5.1":"2026-05-20T02:12:36.509Z","1.6.0":"2026-05-20T04:02:07.240Z","1.6.1":"2026-05-20T18:31:47.343Z","3.0.0":"2026-05-20T23:06:43.634Z","3.0.1":"2026-07-14T07:52:10.826Z"},"author":{"name":"Bernier LLC"},"license":"SEE LICENSE IN LICENSE","keywords":["content","storage","crud","database","soft-delete","versioning"],"description":"Type-safe CRUD operations for content management with soft-delete, version tracking, and optimistic locking","maintainers":[{"name":"alikhan410","email":"mczeyo@gmail.com"},{"name":"mkbernier","email":"mkbernier@gmail.com"}],"readme":"# @bernierllc/content-storage-adapter\n\nType-safe CRUD operations for content management with automatic soft-delete handling, version tracking, and optimistic locking.\n\n## Features\n\n- **Type-Safe CRUD Operations** - Fully typed content models with TypeScript strict mode\n- **Automatic Soft-Delete** - All deletes are logical (deleted_at timestamp)\n- **Optimistic Locking** - Concurrent edit detection via updated_at\n- **Version History** - Track content changes over time\n- **Unique Slug Generation** - SEO-friendly URLs with automatic uniqueness\n- **Advanced Filtering** - Search by status, type, date range, and more\n- **Batch Operations** - Bulk update, delete, and restore\n- **Pagination Support** - Efficient list operations with hasMore indicator\n\n## Installation\n\n```bash\nnpm install @bernierllc/content-storage-adapter\n```\n\n## Dependencies\n\n- `@bernierllc/database-adapter-core` - Abstract database interface\n- `@bernierllc/slug-generator` - SEO-friendly URL generation\n\n## Usage\n\n### Basic CRUD Operations\n\n```typescript\nimport { ContentStorageAdapter, ContentType, ContentStatus } from '@bernierllc/content-storage-adapter';\nimport { PostgreSQLAdapter } from '@bernierllc/database-adapter-postgresql';\n\n// Initialize database adapter\nconst dbAdapter = new PostgreSQLAdapter(config);\nawait dbAdapter.connect();\n\n// Create storage adapter\nconst storage = new ContentStorageAdapter(dbAdapter);\n\n// Create content\nconst content = await storage.create({\n  userId: 'user-123',\n  title: 'My First Post',\n  body: 'Hello, world!',\n  excerpt: 'A brief introduction',\n  type: ContentType.BLOG,\n  status: ContentStatus.DRAFT\n});\n\n// Read content\nconst retrieved = await storage.getById(content.id);\nconst bySlug = await storage.getBySlug('my-first-post');\n\n// Update content\nconst updated = await storage.update(content.id, {\n  status: ContentStatus.PUBLISHED,\n  publishedAt: new Date()\n});\n\n// Soft delete\nawait storage.delete(content.id);\n\n// Restore deleted content\nconst restored = await storage.restore(content.id);\n```\n\n### Optimistic Locking\n\nPrevent concurrent edit conflicts:\n\n```typescript\nconst content = await storage.getById('content-id');\n\ntry {\n  // Update with expected timestamp\n  const updated = await storage.update(\n    content.id,\n    { title: 'Updated Title' },\n    content.updatedAt\n  );\n} catch (error) {\n  if (error instanceof OptimisticLockError) {\n    // Content was modified by another user\n    console.error('Conflict detected! Reload and try again.');\n  }\n}\n```\n\n### Advanced Filtering\n\n```typescript\nimport { IContentFilters } from '@bernierllc/content-storage-adapter';\n\nconst filters: IContentFilters = {\n  userId: 'user-123',\n  status: [ContentStatus.PUBLISHED, ContentStatus.SCHEDULED],\n  type: ContentType.BLOG,\n  publishedAfter: new Date('2024-01-01'),\n  searchQuery: 'TypeScript',\n  limit: 20,\n  offset: 0,\n  orderBy: 'publishedAt',\n  orderDirection: 'DESC'\n};\n\nconst result = await storage.list(filters);\n\nconsole.log(`Found ${result.total} items`);\nconsole.log(`Has more: ${result.hasMore}`);\nresult.data.forEach(item => console.log(item.title));\n```\n\n### Batch Operations\n\n```typescript\nimport { ContentBatchOperations } from '@bernierllc/content-storage-adapter';\n\nconst batchOps = new ContentBatchOperations(storage);\n\n// Bulk update status\nconst updated = await batchOps.bulkUpdateStatus(\n  ['id1', 'id2', 'id3'],\n  ContentStatus.ARCHIVED\n);\nconsole.log(`Updated ${updated} items`);\n\n// Bulk delete\nconst deleted = await batchOps.bulkDelete(['id4', 'id5']);\n\n// Bulk restore\nconst restored = await batchOps.bulkRestore(['id4', 'id5']);\n```\n\n### Version History\n\n```typescript\n// Get all versions\nconst versions = await storage.getVersions('content-id');\nversions.forEach(v => {\n  console.log(`Version ${v.versionNumber}: ${v.title}`);\n  console.log(`Changed by ${v.createdBy} at ${v.createdAt}`);\n});\n\n// Get specific version\nconst version2 = await storage.getVersion('content-id', 2);\n```\n\n## API\n\n### ContentStorageAdapter\n\n#### `create(data: IContentCreateData): Promise<IContent>`\n\nCreate new content with automatic slug generation.\n\n#### `getById(id: string, options?: { includeDeleted?: boolean }): Promise<IContent | null>`\n\nGet content by ID. Excludes soft-deleted content by default.\n\n#### `getBySlug(slug: string): Promise<IContent | null>`\n\nGet content by URL slug.\n\n#### `update(id: string, data: IContentUpdateData, expectedUpdatedAt?: Date): Promise<IContent>`\n\nUpdate content. Optional `expectedUpdatedAt` enables optimistic locking.\n\n#### `delete(id: string): Promise<void>`\n\nSoft delete content (sets deleted_at timestamp).\n\n#### `hardDelete(id: string): Promise<void>`\n\nPermanently delete content. Use sparingly!\n\n#### `restore(id: string): Promise<IContent>`\n\nRestore soft-deleted content.\n\n#### `list(filters?: IContentFilters): Promise<IPaginatedResult<IContent>>`\n\nList content with filtering, pagination, and ordering.\n\n#### `getVersions(contentId: string): Promise<IContentVersion[]>`\n\nGet all versions of content, ordered by version number descending.\n\n#### `getVersion(contentId: string, versionNumber: number): Promise<IContentVersion | null>`\n\nGet specific content version.\n\n### ContentBatchOperations\n\n#### `bulkUpdateStatus(ids: string[], status: ContentStatus): Promise<number>`\n\nUpdate status for multiple content items. Returns count of updated items.\n\n#### `bulkDelete(ids: string[]): Promise<number>`\n\nSoft delete multiple items. Returns count of deleted items.\n\n#### `bulkRestore(ids: string[]): Promise<number>`\n\nRestore multiple soft-deleted items. Returns count of restored items.\n\n## Types\n\n### ContentType\n\n```typescript\nenum ContentType {\n  BLOG = 'blog',\n  ARTICLE = 'article',\n  PAGE = 'page',\n  SOCIAL = 'social'\n}\n```\n\n### ContentFormat\n\n```typescript\nenum ContentFormat {\n  MARKDOWN = 'markdown',\n  HTML = 'html',\n  PLAINTEXT = 'plaintext'\n}\n```\n\n### ContentStatus\n\n```typescript\nenum ContentStatus {\n  DRAFT = 'draft',\n  IN_REVIEW = 'in_review',\n  APPROVED = 'approved',\n  SCHEDULED = 'scheduled',\n  PUBLISHED = 'published',\n  ARCHIVED = 'archived'\n}\n```\n\n## Error Handling\n\n```typescript\nimport {\n  ContentNotFoundError,\n  OptimisticLockError,\n  DuplicateSlugError\n} from '@bernierllc/content-storage-adapter';\n\ntry {\n  await storage.update('invalid-id', { title: 'New Title' });\n} catch (error) {\n  if (error instanceof ContentNotFoundError) {\n    console.error('Content not found or already deleted');\n  } else if (error instanceof OptimisticLockError) {\n    console.error('Content was modified by another user');\n  }\n}\n```\n\n## Database Schema\n\nThe adapter expects the following PostgreSQL schema:\n\n```sql\nCREATE TABLE content (\n  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),\n  user_id VARCHAR(255) NOT NULL,\n  title TEXT NOT NULL,\n  slug VARCHAR(255) UNIQUE NOT NULL,\n  body TEXT NOT NULL,\n  excerpt TEXT,\n  type VARCHAR(50) NOT NULL,\n  format VARCHAR(50) NOT NULL,\n  status VARCHAR(50) NOT NULL,\n  workflow_stage VARCHAR(50),\n  assigned_to VARCHAR(255),\n  ai_reviewed BOOLEAN DEFAULT FALSE,\n  ai_review_score FLOAT,\n  ai_provider VARCHAR(100),\n  published_at TIMESTAMP,\n  scheduled_for TIMESTAMP,\n  deleted_at TIMESTAMP,\n  meta_title TEXT,\n  meta_description TEXT,\n  keywords TEXT[],\n  view_count INTEGER DEFAULT 0,\n  share_count INTEGER DEFAULT 0,\n  generated_from_commit BOOLEAN DEFAULT FALSE,\n  source_commit_sha VARCHAR(255),\n  source_repository VARCHAR(500),\n  created_at TIMESTAMP DEFAULT NOW(),\n  updated_at TIMESTAMP DEFAULT NOW()\n);\n\nCREATE TABLE content_versions (\n  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),\n  content_id UUID NOT NULL REFERENCES content(id),\n  version_number INTEGER NOT NULL,\n  title TEXT NOT NULL,\n  body TEXT NOT NULL,\n  change_summary TEXT,\n  is_autosave BOOLEAN DEFAULT FALSE,\n  created_at TIMESTAMP DEFAULT NOW(),\n  created_by VARCHAR(255) NOT NULL,\n  UNIQUE(content_id, version_number)\n);\n\nCREATE INDEX idx_content_user_id ON content(user_id);\nCREATE INDEX idx_content_slug ON content(slug);\nCREATE INDEX idx_content_status ON content(status);\nCREATE INDEX idx_content_deleted_at ON content(deleted_at);\nCREATE INDEX idx_content_versions_content_id ON content_versions(content_id);\n```\n\n## Testing\n\n```bash\n# Run tests\nnpm test\n\n# Run tests without watch\nnpm run test:run\n\n# Run tests with coverage\nnpm run test:coverage\n\n# Build TypeScript\nnpm run build\n\n# Lint code\nnpm run lint\n```\n\n## License\n\nCopyright (c) 2025 Bernier LLC\n\nThis file is licensed to the client under a limited-use license.\nThe client may use and modify this code *only within the scope of the project it was delivered for*.\nRedistribution or use in other products or commercial offerings is not permitted without written consent from Bernier LLC.\n\n## Related Packages\n\n- [@bernierllc/database-adapter-core](../database-adapter-core) - Abstract database interface\n- [@bernierllc/slug-generator](../slug-generator) - SEO-friendly URL generation\n- [@bernierllc/content-storage-service](../../service/content-storage-service) - Higher-level storage orchestration\n","readmeFilename":"README.md"}