{"_id":"@codepunter-labs/mock-cloudinary","_rev":"2-ab52bf864ead4f594bdd5aada62a2ce2","name":"@codepunter-labs/mock-cloudinary","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@codepunter-labs/mock-cloudinary","version":"0.1.0","license":"MIT","_id":"@codepunter-labs/mock-cloudinary@0.1.0","maintainers":[{"name":"codepunter","email":"derrickmensahtorkornoo@gmail.com"}],"homepage":"https://github.com/DERRICK-TORKORNOO/mock-sdks#readme","bugs":{"url":"https://github.com/DERRICK-TORKORNOO/mock-sdks/issues"},"dist":{"shasum":"7d33cb8bd2daadfad22eb2875b7292efa0aaf6e8","tarball":"https://registry.npmjs.org/@codepunter-labs/mock-cloudinary/-/mock-cloudinary-0.1.0.tgz","fileCount":9,"integrity":"sha512-pzhk3LDBQdi2sofgqtEYwsVf4dVE64BkOmPIIqzoDd67RD3/v9bEHd7ArQt9FowFyATJx9sRIHM67vfS3wPgYw==","signatures":[{"sig":"MEUCIA+wMZ2PZhxu+BTy4QwqvQnHnhdta6W06VAKxPfrzy7SAiEAokfDk2Ss1SZ1v+HNdSXuAZW1ntD4f1ySqkAggZZu6D8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47811},"main":"./dist/index.cjs","type":"module","_from":"file:codepunter-labs-mock-cloudinary-0.1.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"dev":"tsup --watch","build":"tsup","typecheck":"tsc --noEmit"},"_npmUser":{"name":"codepunter","email":"derrickmensahtorkornoo@gmail.com"},"_resolved":"/tmp/6d64550ecb62c5f834ff65021bb01b5e/codepunter-labs-mock-cloudinary-0.1.0.tgz","_integrity":"sha512-pzhk3LDBQdi2sofgqtEYwsVf4dVE64BkOmPIIqzoDd67RD3/v9bEHd7ArQt9FowFyATJx9sRIHM67vfS3wPgYw==","repository":{"url":"git+https://github.com/DERRICK-TORKORNOO/mock-sdks.git","type":"git","directory":"packages/mock-cloudinary"},"_npmVersion":"10.8.2","description":"TODO","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@codepunter-labs/mock-core":"0.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"*","vitest":"*","typescript":"*"},"_npmOperationalInternal":{"tmp":"tmp/mock-cloudinary_0.1.0_1783371655736_0.3410707728729119","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@codepunter-labs/mock-cloudinary","version":"0.2.0","description":"TODO","repository":{"type":"git","url":"git+https://github.com/DERRICK-TORKORNOO/mock-sdks.git","directory":"packages/mock-cloudinary"},"license":"MIT","type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","dependencies":{"@codepunter-labs/mock-core":"0.2.0"},"devDependencies":{"tsup":"*","typescript":"*","vitest":"*"},"scripts":{"build":"tsup","dev":"tsup --watch","typecheck":"tsc --noEmit"},"_id":"@codepunter-labs/mock-cloudinary@0.2.0","bugs":{"url":"https://github.com/DERRICK-TORKORNOO/mock-sdks/issues"},"homepage":"https://github.com/DERRICK-TORKORNOO/mock-sdks#readme","_integrity":"sha512-5UaqC9AeMxvbaMer+HF2DEKXuAgH2Dm1Wfc1LbGFIrLcowQBM+/j7twR6fRR1MiggD8KvkjrzIOHl5lKL+xN7w==","_resolved":"/tmp/02b3a78f1e8528e97e838d3d2e925834/codepunter-labs-mock-cloudinary-0.2.0.tgz","_from":"file:codepunter-labs-mock-cloudinary-0.2.0.tgz","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-5UaqC9AeMxvbaMer+HF2DEKXuAgH2Dm1Wfc1LbGFIrLcowQBM+/j7twR6fRR1MiggD8KvkjrzIOHl5lKL+xN7w==","shasum":"065fe3966e70644fcf5b43a028171691e72383de","tarball":"https://registry.npmjs.org/@codepunter-labs/mock-cloudinary/-/mock-cloudinary-0.2.0.tgz","fileCount":9,"unpackedSize":48472,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQClbmeU7pGR8OBnBbjg/n5YwAKiwUIKZFjqALeMOWxJyQIhAOjxDV2VA7teqiLa6rmYKjJYYvH8TjA/QUI3TdsAWE8g"}]},"_npmUser":{"name":"codepunter","email":"derrickmensahtorkornoo@gmail.com"},"directories":{},"maintainers":[{"name":"codepunter","email":"derrickmensahtorkornoo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mock-cloudinary_0.2.0_1783446217639_0.1230976402048527"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-06T21:00:55.567Z","modified":"2026-07-07T17:43:37.915Z","0.1.0":"2026-07-06T21:00:55.885Z","0.2.0":"2026-07-07T17:43:37.799Z"},"bugs":{"url":"https://github.com/DERRICK-TORKORNOO/mock-sdks/issues"},"license":"MIT","homepage":"https://github.com/DERRICK-TORKORNOO/mock-sdks#readme","repository":{"type":"git","url":"git+https://github.com/DERRICK-TORKORNOO/mock-sdks.git","directory":"packages/mock-cloudinary"},"description":"TODO","maintainers":[{"name":"codepunter","email":"derrickmensahtorkornoo@gmail.com"}],"readme":"# @codepunter-labs/mock-cloudinary\n\nMock SDK for Cloudinary Node.js SDK. Provides fully-typed mock implementations for testing Cloudinary image and video upload, transformation, and management without making real API calls.\n\n[![npm version](https://badge.fury.io/js/@codepunter-labs/mock-cloudinary.svg)](https://www.npmjs.com/package/@codepunter-labs/mock-cloudinary)\n[![GitHub](https://img.shields.io/badge/GitHub-Repository-blue)](https://github.com/DERRICK-TORKORNOO/mock-sdks/tree/main/packages/mock-cloudinary)\n\n## Installation\n\n```bash\nnpm install @codepunter-labs/mock-cloudinary\n```\n\n## Features\n\n- **Upload**: Upload files with options\n- **Admin**: List resources, get resource details, delete, rename\n- **URL Generation**: Generate transformation URLs\n- **Type-safe**: Full TypeScript support with accurate API types\n- **Test Framework Agnostic**: Works with Jest, Vitest, and other spy-based frameworks\n\n## Repository\n\n- **GitHub**: https://github.com/DERRICK-TORKORNOO/mock-sdks/tree/main/packages/mock-cloudinary\n- **Source Code**: [src/](https://github.com/DERRICK-TORKORNOO/mock-sdks/tree/main/packages/mock-cloudinary/src)\n- **Tests**: [tests/](https://github.com/DERRICK-TORKORNOO/mock-sdks/tree/main/packages/mock-cloudinary/tests)\n\n## Usage\n\n### Basic Setup\n\n```typescript\nimport { vi } from 'vitest';\nimport { createMockCloudinary } from '@codepunter-labs/mock-cloudinary';\n\nconst cloudinary = createMockCloudinary({ spy: vi.fn });\n```\n\n### Using with Jest\n\n```typescript\nimport { createMockCloudinary } from '@codepunter-labs/mock-cloudinary';\n\nconst cloudinary = createMockCloudinary({ spy: jest.fn });\n```\n\n### Example: Upload Image\n\n```typescript\n// Default behavior - returns realistic mock data\nconst result = await cloudinary.upload('image.jpg', {\n  public_id: 'my_image',\n  resource_type: 'image'\n});\n```\n\n### Example: List Resources\n\n```typescript\nconst result = await cloudinary.listResources({\n  resource_type: 'image',\n  max_results: 10\n});\n```\n\n### Example: Generate URL\n\n```typescript\nconst url = cloudinary.url('my_image', {\n  width: 300,\n  height: 200,\n  crop: 'fill'\n});\n```\n\n### Example: Override Mock Response\n\n```typescript\nimport { makeUploadResponse } from '@codepunter-labs/mock-cloudinary';\n\ncloudinary.upload.mockResolvedValue(\n  makeUploadResponse({ public_id: 'custom_image', width: 1920 })\n);\n```\n\n### Example: Error Simulation\n\n```typescript\nimport { MockErrors } from '@codepunter-labs/mock-core';\n\ncloudinary.upload.mockRejectedValue(\n  MockErrors.badRequest('Invalid file format')\n);\n```\n\n## API Reference\n\n### MockCloudinary\n\n- `upload(file, options?)` - Upload file\n- `listResources(options?)` - List resources\n- `getResource(publicId)` - Get resource details\n- `destroy(publicId)` - Delete resource\n- `rename(from, to, options?)` - Rename resource\n- `url(publicId, options?)` - Generate transformation URL\n\n### Fixture Factories\n\n- `makeUploadResponse(options?)` - Create upload response\n- `makeResource(options?)` - Create resource\n- `makeDeleteResponse(options?)` - Create delete response\n- `makeRenameResponse(options?)` - Create rename response\n\n## Testing Patterns\n\n### Test Success Path\n\n```typescript\ntest('should upload image successfully', async () => {\n  const cloudinary = createMockCloudinary({ spy: vi.fn });\n  \n  const result = await cloudinary.upload('image.jpg');\n  \n  expect(result.public_id).toBeDefined();\n  expect(result.secure_url).toContain('cloudinary.com');\n});\n```\n\n### Test Error Handling\n\n```typescript\ntest('should handle invalid file format error', async () => {\n  const cloudinary = createMockCloudinary({ spy: vi.fn });\n  \n  cloudinary.upload.mockRejectedValue(\n    CloudinaryErrors.invalidFileFormat()\n  );\n  \n  await expect(cloudinary.upload('invalid.xyz')).rejects.toMatchObject({ message: /Invalid file format/ });\n});\n```\n\n### Test with Custom Data\n\n```typescript\ntest('should use custom public ID', async () => {\n  const cloudinary = createMockCloudinary({ spy: vi.fn });\n  \n  cloudinary.upload.mockResolvedValue(\n    makeUploadResponse({ public_id: 'custom_image' })\n  );\n  \n  const result = await cloudinary.upload('image.jpg');\n  expect(result.public_id).toBe('custom_image');\n});\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}