create-cloudinary-react 1.0.0-beta.17 → 1.0.0-beta.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/README.md +3 -3
- package/cli.js +16 -14
- package/package.json +1 -1
- package/templates/.cursorrules.template +2 -1
- package/templates/README.md.template +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,18 @@
|
|
|
1
|
+
# [1.0.0-beta.19](https://github.com/cloudinary-devs/create-cloudinary-react/compare/v1.0.0-beta.18...v1.0.0-beta.19) (2026-02-18)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* update readme ([b7a77ca](https://github.com/cloudinary-devs/create-cloudinary-react/commit/b7a77caaf4bf052c68bd912a0ae9c51d424d07cd))
|
|
7
|
+
|
|
8
|
+
# [1.0.0-beta.18](https://github.com/cloudinary-devs/create-cloudinary-react/compare/v1.0.0-beta.17...v1.0.0-beta.18) (2026-02-18)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* update registration link ([2a69d7a](https://github.com/cloudinary-devs/create-cloudinary-react/commit/2a69d7ada9de1cb2751bbd4c1d344422b4c2dd5e))
|
|
14
|
+
* update video player example ([9db39ee](https://github.com/cloudinary-devs/create-cloudinary-react/commit/9db39ee8fc149c748ea422544a79b45a60365f47))
|
|
15
|
+
|
|
1
16
|
# [1.0.0-beta.17](https://github.com/cloudinary-devs/create-cloudinary-react/compare/v1.0.0-beta.16...v1.0.0-beta.17) (2026-02-12)
|
|
2
17
|
|
|
3
18
|
|
package/README.md
CHANGED
|
@@ -10,7 +10,7 @@ Scaffold a Cloudinary React + Vite + TypeScript project with interactive setup.
|
|
|
10
10
|
|
|
11
11
|
- Node.js 18+ installed
|
|
12
12
|
- A Cloudinary account (free tier available)
|
|
13
|
-
- [Sign up for free](https://
|
|
13
|
+
- [Sign up for free](https://cld.media/reactregister)
|
|
14
14
|
- Your cloud name is in your [dashboard](https://console.cloudinary.com/app/home/dashboard)
|
|
15
15
|
|
|
16
16
|
## Usage
|
|
@@ -44,10 +44,10 @@ During setup, you'll be asked which AI coding assistant(s) you're using. The CLI
|
|
|
44
44
|
|
|
45
45
|
- ✅ **Cursor** → `.cursorrules` + `.cursor/mcp.json` (if selected)
|
|
46
46
|
- ✅ **GitHub Copilot** → `.github/copilot-instructions.md`
|
|
47
|
-
- ✅ **Claude Code
|
|
47
|
+
- ✅ **Claude Code** → `CLAUDE.md` + `.mcp.json` (if selected)
|
|
48
48
|
- ✅ **Generic AI tools** → `AI_INSTRUCTIONS.md`, `PROMPT.md`
|
|
49
49
|
|
|
50
|
-
**MCP Configuration**:
|
|
50
|
+
**MCP Configuration**: Cursor and Claude Code use different config paths. If you select **Cursor**, the CLI writes `.cursor/mcp.json`. If you select **Claude**, it writes `.mcp.json` in the project root. Each tool only reads its own path, so both files are generated when you select both.
|
|
51
51
|
|
|
52
52
|
These rules help AI assistants understand Cloudinary React SDK patterns, common errors, and best practices. The generated app also includes an "AI Prompts" section with ready-to-use suggestions for your AI assistant.
|
|
53
53
|
|
package/cli.js
CHANGED
|
@@ -70,7 +70,7 @@ async function main() {
|
|
|
70
70
|
} else {
|
|
71
71
|
|
|
72
72
|
console.log(chalk.cyan.bold('\n🚀 Cloudinary React + Vite\n'));
|
|
73
|
-
console.log(chalk.gray('💡 Need a Cloudinary account? Sign up for free: https://
|
|
73
|
+
console.log(chalk.gray('💡 Need a Cloudinary account? Sign up for free: https://cld.media/reactregister\n'));
|
|
74
74
|
|
|
75
75
|
const questions = [
|
|
76
76
|
{
|
|
@@ -101,7 +101,7 @@ async function main() {
|
|
|
101
101
|
if (!input.trim()) {
|
|
102
102
|
return chalk.yellow(
|
|
103
103
|
'Cloud name is required.\n' +
|
|
104
|
-
' → Sign up: https://
|
|
104
|
+
' → Sign up: https://cld.media/reactregister\n' +
|
|
105
105
|
' → Find your cloud name: https://console.cloudinary.com/app/home/dashboard'
|
|
106
106
|
);
|
|
107
107
|
}
|
|
@@ -141,7 +141,7 @@ async function main() {
|
|
|
141
141
|
choices: [
|
|
142
142
|
{ name: 'Cursor', value: 'cursor' },
|
|
143
143
|
{ name: 'GitHub Copilot', value: 'copilot' },
|
|
144
|
-
{ name: 'Claude Code
|
|
144
|
+
{ name: 'Claude Code', value: 'claude' },
|
|
145
145
|
{ name: 'Other / Generic AI tools', value: 'generic' },
|
|
146
146
|
],
|
|
147
147
|
default: ['cursor'],
|
|
@@ -262,18 +262,21 @@ async function main() {
|
|
|
262
262
|
writeFileSync(join(projectPath, 'PROMPT.md'), aiRulesContent);
|
|
263
263
|
}
|
|
264
264
|
|
|
265
|
-
// Generate MCP configuration
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
265
|
+
// Generate MCP configuration: Cursor uses .cursor/mcp.json, Claude Code uses .mcp.json in project root
|
|
266
|
+
const mcpTemplatePath = join(TEMPLATES_DIR, '.cursor/mcp.json.template');
|
|
267
|
+
if (existsSync(mcpTemplatePath)) {
|
|
268
|
+
const mcpContent = replaceTemplate(
|
|
269
|
+
readFileSync(mcpTemplatePath, 'utf-8'),
|
|
270
|
+
templateVars
|
|
271
|
+
);
|
|
272
|
+
if (aiTools.includes('cursor')) {
|
|
269
273
|
const cursorDir = join(projectPath, '.cursor');
|
|
270
274
|
mkdirSync(cursorDir, { recursive: true });
|
|
271
|
-
const mcpContent = replaceTemplate(
|
|
272
|
-
readFileSync(mcpTemplatePath, 'utf-8'),
|
|
273
|
-
templateVars
|
|
274
|
-
);
|
|
275
275
|
writeFileSync(join(cursorDir, 'mcp.json'), mcpContent);
|
|
276
276
|
}
|
|
277
|
+
if (aiTools.includes('claude')) {
|
|
278
|
+
writeFileSync(join(projectPath, '.mcp.json'), mcpContent);
|
|
279
|
+
}
|
|
277
280
|
}
|
|
278
281
|
}
|
|
279
282
|
|
|
@@ -291,9 +294,8 @@ async function main() {
|
|
|
291
294
|
if (aiTools.includes('copilot')) console.log(chalk.gray(' • GitHub Copilot: .github/copilot-instructions.md'));
|
|
292
295
|
if (aiTools.includes('claude')) console.log(chalk.gray(' • Claude: CLAUDE.md'));
|
|
293
296
|
if (aiTools.includes('generic')) console.log(chalk.gray(' • Generic: AI_INSTRUCTIONS.md, PROMPT.md'));
|
|
294
|
-
if (aiTools.includes('cursor')
|
|
295
|
-
|
|
296
|
-
}
|
|
297
|
+
if (aiTools.includes('cursor')) console.log(chalk.gray(' • MCP (Cursor): .cursor/mcp.json'));
|
|
298
|
+
if (aiTools.includes('claude')) console.log(chalk.gray(' • MCP (Claude Code): .mcp.json'));
|
|
297
299
|
console.log('');
|
|
298
300
|
}
|
|
299
301
|
|
package/package.json
CHANGED
|
@@ -420,7 +420,8 @@ Use when the user asks for a **video player** (styled UI, controls, playlists).
|
|
|
420
420
|
**Rule: imperative element only.** Do **not** pass a React-managed `<video ref={...} />` to the player — the library mutates the DOM and React will throw removeChild errors. Create the video element with `document.createElement('video')`, append it to a container ref, and pass that element to `videoPlayer(el, ...)`.
|
|
421
421
|
|
|
422
422
|
- **Package**: `cloudinary-video-player`. Install with `npm install cloudinary-video-player` (no version).
|
|
423
|
-
- **Import**: `import { videoPlayer } from 'cloudinary-video-player'` (named) and `import 'cloudinary-video-player/cld-video-player.min.css'` (no `dist/` in path).
|
|
423
|
+
- **Import**: `import { videoPlayer } from 'cloudinary-video-player'` (named) and `import 'cloudinary-video-player/cld-video-player.min.css'` (no `dist/` in path). The package only exposes paths under `lib/` via `exports`; use `cld-video-player.min.css` (no `dist/`), which resolves to `lib/cld-video-player.min.css`.
|
|
424
|
+
- ❌ **WRONG**: `import 'cloudinary-video-player/dist/cld-video-player.min.css'` — package `exports` do not expose `dist/`; the valid path is `cloudinary-video-player/cld-video-player.min.css`.
|
|
424
425
|
- **player.source()** takes an **object**: `player.source({ publicId: 'samples/elephants' })`. Not a string.
|
|
425
426
|
- **Cleanup**: Call `player.dispose()`, then **only if** `el.parentNode` exists call `el.parentNode.removeChild(el)` (avoids NotFoundError).
|
|
426
427
|
- **If init fails** (CSP, extensions, timing): render **AdvancedVideo** with the same publicId. Do not relax CSP in index.html or ask the user to disable extensions.
|
|
@@ -11,7 +11,7 @@ npm run dev
|
|
|
11
11
|
## Cloudinary Setup
|
|
12
12
|
|
|
13
13
|
This project uses Cloudinary for image management. If you don't have a Cloudinary account yet:
|
|
14
|
-
- [Sign up for free](https://
|
|
14
|
+
- [Sign up for free](https://cld.media/reactregister)
|
|
15
15
|
- Find your cloud name in your [dashboard](https://console.cloudinary.com/app/home/dashboard)
|
|
16
16
|
|
|
17
17
|
## Environment Variables
|