{"_id":"@croco/membership-drizzle","_rev":"2-c080903228cd637f216cf620e5bc4722","name":"@croco/membership-drizzle","dist-tags":{"latest":"0.0.2"},"versions":{"0.0.1":{"name":"@croco/membership-drizzle","version":"0.0.1","_id":"@croco/membership-drizzle@0.0.1","maintainers":[{"name":"kang-heewon","email":"heewon.dev@gmail.com"},{"name":"ddark","email":"ddark.kr@gmail.com"}],"dist":{"shasum":"6a38dbdbc4d1e9e6c047b40b031fee2914733059","tarball":"https://registry.npmjs.org/@croco/membership-drizzle/-/membership-drizzle-0.0.1.tgz","fileCount":4,"integrity":"sha512-aMwtIdUNnoF40bb+pmD99xIcNdHGkf4/tmqILoTATi6uebg9Cdi38hMps52S2HNKjnJkmSW0Ih096tIChwjB7g==","signatures":[{"sig":"MEYCIQD0vwl5Lxl/2Zv/HbYYxUEte/18aK/t7WsrtwhTGbSk0AIhAMW5BSH8BDiHVSP6kvESLRU9+ea7IlD9EryOemv1ss45","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8057},"main":"./dist/index.js","type":"commonjs","_from":"file:croco-membership-drizzle-0.0.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","lint":"oxlint .","test":"vitest run","build":"tsup src/index.ts --format esm,cjs --minify --clean","vitest":"vitest","typecheck":"tsc --noEmit"},"_npmUser":{"name":"kang-heewon","email":"heewon.dev@gmail.com"},"_resolved":"/tmp/fc2d6cff1e3a244b0e21329d489e1c2b/croco-membership-drizzle-0.0.1.tgz","_integrity":"sha512-aMwtIdUNnoF40bb+pmD99xIcNdHGkf4/tmqILoTATi6uebg9Cdi38hMps52S2HNKjnJkmSW0Ih096tIChwjB7g==","_npmVersion":"10.9.7","description":"`@croco/membership-core`용 Drizzle 저장소입니다.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"drizzle-orm":"^0.45.2","@croco/tx-core":"0.0.1","@croco/tx-drizzle":"0.0.1","@croco/membership-core":"0.0.1","@croco/framework-context":"0.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","vitest":"4.0.16","typescript":"^5.7.2","reflect-metadata":"^0.2.2"},"_npmOperationalInternal":{"tmp":"tmp/membership-drizzle_0.0.1_1778834268055_0.8751175543767411","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@croco/membership-drizzle","version":"0.0.2","type":"commonjs","main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.js","types":"./dist/index.d.ts"}},"publishConfig":{"access":"public"},"dependencies":{"drizzle-orm":"^0.45.2","@croco/framework-context":"0.0.2","@croco/membership-core":"0.0.2","@croco/tx-drizzle":"0.0.2","@croco/tx-core":"0.0.2"},"devDependencies":{"reflect-metadata":"^0.2.2","tsup":"^8.4.0","typescript":"^5.7.2","vitest":"4.0.16"},"scripts":{"build":"tsup src/index.ts --format esm,cjs --minify --clean","dev":"tsup src/index.ts --format cjs,esm --dts --watch","vitest":"vitest","test":"vitest run","typecheck":"tsc --noEmit","lint":"oxlint ."},"_id":"@croco/membership-drizzle@0.0.2","description":"`@croco/membership-core`용 Drizzle 저장소입니다.","_integrity":"sha512-P3fVwIRpQ5BBjz/kB6UO9VKHeHWah1hznJiZNOsD0xG+4qQouCyve/OPLZZ3dcJDxhflxKG4AKro107EdwIDsg==","_resolved":"/private/var/folders/zp/px4pj6gs20q8c38hgmbym1080000gn/T/397d799527d4f668c43e03ac092d0975/croco-membership-drizzle-0.0.2.tgz","_from":"file:croco-membership-drizzle-0.0.2.tgz","_nodeVersion":"24.14.0","_npmVersion":"11.9.0","dist":{"integrity":"sha512-P3fVwIRpQ5BBjz/kB6UO9VKHeHWah1hznJiZNOsD0xG+4qQouCyve/OPLZZ3dcJDxhflxKG4AKro107EdwIDsg==","shasum":"f2a12e0863bd657cf2c5b106ff2661cd9ee154e5","tarball":"https://registry.npmjs.org/@croco/membership-drizzle/-/membership-drizzle-0.0.2.tgz","fileCount":4,"unpackedSize":8057,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDG20OK9vnTRfADf21NsamM6+OlVQ2ZT6g712JTv8QzugIhAKxDtR0I42oiPkpJBAOznP7QnBVKhRKI9T+S9aAKOq/o"}]},"_npmUser":{"name":"kang-heewon","email":"heewon.dev@gmail.com"},"directories":{},"maintainers":[{"name":"kang-heewon","email":"heewon.dev@gmail.com"},{"name":"ddark","email":"ddark.kr@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/membership-drizzle_0.0.2_1780294882254_0.5123944629994539"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-15T08:37:47.965Z","modified":"2026-06-01T06:21:22.530Z","0.0.1":"2026-05-15T08:37:48.182Z","0.0.2":"2026-06-01T06:21:22.389Z"},"description":"`@croco/membership-core`용 Drizzle 저장소입니다.","maintainers":[{"name":"kang-heewon","email":"heewon.dev@gmail.com"},{"name":"ddark","email":"ddark.kr@gmail.com"}],"readme":"# @croco/membership-drizzle\n\n`@croco/membership-core`용 Drizzle 저장소입니다.\n\n## 설치\n\n```bash\npnpm add @croco/membership-drizzle @croco/membership-core drizzle-orm\n```\n\n## 사용법\n\n```typescript\nimport { DrizzleMembershipStore } from \"@croco/membership-drizzle\";\nimport { TxManager } from \"@croco/tx-core\";\n\nconst txManager = new TxManager(adapter, { defaultNesting: \"join\" });\nconst store = new DrizzleMembershipStore(db, txManager);\n\nawait store.save({\n  id: \"mem-1\",\n  tenantId: \"tenant-1\",\n  userId: \"user-1\",\n  role: \"admin\",\n});\n\nconst members = await store.findAllByTenant(\"tenant-1\");\nconst adminCount = await store.countByRole(\"tenant-1\", \"admin\");\n```\n\n## API 레퍼런스\n\n### `DrizzleMembershipStore`\n\n- `findByTenantAndUser(tenantId, userId)`, 특정 멤버십을 조회합니다.\n- `findAllByTenant(tenantId)`, 테넌트의 모든 멤버십을 반환합니다.\n- `findAllByUser(userId)`, 사용자의 모든 멤버십을 반환합니다.\n- `save(input)`, 멤버십을 upsert로 저장합니다.\n- `delete(tenantId, userId)`, 멤버십을 삭제합니다.\n- `countByRole(tenantId, role)`, 역할별 멤버 수를 반환합니다.\n- `countAll(tenantId)`, 전체 멤버 수를 반환합니다.\n\n### 스키마와 토큰\n\n- `memberships`, 멤버십 엔터티 스키마입니다.\n- `DRIZZLE_TOKEN`, 멤버십 저장소용 DB 토큰입니다.\n","readmeFilename":"README.md"}