@jsonpages/cli 3.0.59 → 3.0.61

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.
@@ -23,6 +23,50 @@ cat << 'END_OF_FILE_CONTENT' > "index.html"
23
23
  </html>
24
24
 
25
25
 
26
+ END_OF_FILE_CONTENT
27
+ echo "Creating package.json..."
28
+ cat << 'END_OF_FILE_CONTENT' > "package.json"
29
+ {
30
+ "name": "tenant-alpha",
31
+ "version": "1.0.0",
32
+ "private": true,
33
+ "type": "module",
34
+ "scripts": {
35
+ "dev": "vite",
36
+ "dev:clean": "vite --force",
37
+ "build": "tsc && vite build",
38
+ "dist": "bash ./src2Code.sh src index.html package.json",
39
+ "preview": "vite preview"
40
+ },
41
+ "dependencies": {
42
+ "@tiptap/extension-image": "latest",
43
+ "@tiptap/extension-link": "latest",
44
+ "@tiptap/extension-underline": "latest",
45
+ "@tiptap/react": "latest",
46
+ "@tiptap/starter-kit": "latest",
47
+ "@jsonpages/core": "^1.0.48",
48
+ "clsx": "^2.1.1",
49
+ "lucide-react": "^0.474.0",
50
+ "react": "^19.0.0",
51
+ "react-markdown": "latest",
52
+ "react-dom": "^19.0.0",
53
+ "react-router-dom": "^6.30.3",
54
+ "rehype-sanitize": "latest",
55
+ "remark-gfm": "latest",
56
+ "tailwind-merge": "^3.0.1",
57
+ "tiptap-markdown": "latest",
58
+ "zod": "^3.24.1"
59
+ },
60
+ "devDependencies": {
61
+ "@tailwindcss/vite": "^4.0.0",
62
+ "@types/react": "^19.0.8",
63
+ "@types/react-dom": "^19.0.3",
64
+ "@vitejs/plugin-react": "^4.3.4",
65
+ "typescript": "^5.7.3",
66
+ "vite": "^6.0.11"
67
+ }
68
+ }
69
+
26
70
  END_OF_FILE_CONTENT
27
71
  mkdir -p "src"
28
72
  echo "Creating src/App.tsx..."
@@ -3117,26 +3161,26 @@ const UploadableImage = Image.extend({
3117
3161
  ...this.parent?.(),
3118
3162
  uploadId: {
3119
3163
  default: null,
3120
- parseHTML: (element) => element.getAttribute('data-upload-id'),
3121
- renderHTML: (attributes) =>
3164
+ parseHTML: (element: HTMLElement) => element.getAttribute('data-upload-id'),
3165
+ renderHTML: (attributes: Record<string, unknown>) =>
3122
3166
  attributes.uploadId ? { 'data-upload-id': String(attributes.uploadId) } : {},
3123
3167
  },
3124
3168
  uploading: {
3125
3169
  default: false,
3126
- parseHTML: (element) => element.getAttribute('data-uploading') === 'true',
3127
- renderHTML: (attributes) =>
3170
+ parseHTML: (element: HTMLElement) => element.getAttribute('data-uploading') === 'true',
3171
+ renderHTML: (attributes: Record<string, unknown>) =>
3128
3172
  attributes.uploading ? { 'data-uploading': 'true' } : {},
3129
3173
  },
3130
3174
  uploadError: {
3131
3175
  default: false,
3132
- parseHTML: (element) => element.getAttribute('data-upload-error') === 'true',
3133
- renderHTML: (attributes) =>
3176
+ parseHTML: (element: HTMLElement) => element.getAttribute('data-upload-error') === 'true',
3177
+ renderHTML: (attributes: Record<string, unknown>) =>
3134
3178
  attributes.uploadError ? { 'data-upload-error': 'true' } : {},
3135
3179
  },
3136
3180
  awaitingUpload: {
3137
3181
  default: false,
3138
- parseHTML: (element) => element.getAttribute('data-awaiting-upload') === 'true',
3139
- renderHTML: (attributes) =>
3182
+ parseHTML: (element: HTMLElement) => element.getAttribute('data-awaiting-upload') === 'true',
3183
+ renderHTML: (attributes: Record<string, unknown>) =>
3140
3184
  attributes.awaitingUpload ? { 'data-awaiting-upload': 'true' } : {},
3141
3185
  },
3142
3186
  };
@@ -3184,7 +3228,7 @@ const updateImageByUploadId = (
3184
3228
  patch: Record<string, unknown>
3185
3229
  ): boolean => {
3186
3230
  let targetPos: number | null = null;
3187
- editor.state.doc.descendants((node, pos) => {
3231
+ editor.state.doc.descendants((node: { type: { name: string }; attrs?: Record<string, unknown> }, pos: number) => {
3188
3232
  if (node.type.name === 'image' && node.attrs?.uploadId === uploadId) {
3189
3233
  targetPos = pos;
3190
3234
  return false;
@@ -3338,7 +3382,7 @@ const StudioTiptapEditor: React.FC<{ data: TiptapData }> = ({ data }) => {
3338
3382
  class:
3339
3383
  'prose prose-invert max-w-none min-h-[220px] rounded-lg border border-zinc-800 bg-zinc-950/60 p-4 text-zinc-100 outline-none',
3340
3384
  },
3341
- handleDrop: (_view, event) => {
3385
+ handleDrop: (_view: unknown, event: DragEvent) => {
3342
3386
  const file = event.dataTransfer?.files?.[0];
3343
3387
  if (!file || !file.type.startsWith('image/') || !assets?.onAssetUpload) return false;
3344
3388
  event.preventDefault();
@@ -3351,8 +3395,8 @@ const StudioTiptapEditor: React.FC<{ data: TiptapData }> = ({ data }) => {
3351
3395
  })();
3352
3396
  return true;
3353
3397
  },
3354
- handlePaste: (_view, event) => {
3355
- const file = Array.from(event.clipboardData?.files ?? []).find((f) =>
3398
+ handlePaste: (_view: unknown, event: ClipboardEvent) => {
3399
+ const file = Array.from(event.clipboardData?.files ?? []).find((f: File) =>
3356
3400
  f.type.startsWith('image/')
3357
3401
  );
3358
3402
  if (!file || !assets?.onAssetUpload) return false;
@@ -3366,7 +3410,7 @@ const StudioTiptapEditor: React.FC<{ data: TiptapData }> = ({ data }) => {
3366
3410
  })();
3367
3411
  return true;
3368
3412
  },
3369
- handleClickOn: (_view, _pos, node) => {
3413
+ handleClickOn: (_view: unknown, _pos: number, node: { type: { name: string }; attrs?: Record<string, unknown> }) => {
3370
3414
  if (node.type.name !== 'image') return false;
3371
3415
  if (node.attrs?.awaitingUpload !== true) return false;
3372
3416
  const uploadId = typeof node.attrs?.uploadId === 'string' ? node.attrs.uploadId : null;
@@ -3376,14 +3420,14 @@ const StudioTiptapEditor: React.FC<{ data: TiptapData }> = ({ data }) => {
3376
3420
  return true;
3377
3421
  },
3378
3422
  },
3379
- onUpdate: ({ editor: currentEditor }) => {
3423
+ onUpdate: ({ editor: currentEditor }: { editor: Editor }) => {
3380
3424
  const markdown = getEditorMarkdown(currentEditor);
3381
3425
  emitInlineUpdate(markdown);
3382
3426
  },
3383
3427
  onFocus: () => {
3384
3428
  setFocusLock(true);
3385
3429
  },
3386
- onBlur: ({ editor: currentEditor }) => {
3430
+ onBlur: ({ editor: currentEditor }: { editor: Editor }) => {
3387
3431
  const markdown = getEditorMarkdown(currentEditor);
3388
3432
  if (markdown !== latestEmittedMarkdownRef.current) {
3389
3433
  emitInlineUpdate(markdown);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jsonpages/cli",
3
- "version": "3.0.59",
3
+ "version": "3.0.61",
4
4
  "description": "The Sovereign CLI Engine for JsonPages.",
5
5
  "type": "module",
6
6
  "bin": {
package/src/index.js CHANGED
@@ -134,15 +134,7 @@ program
134
134
  await processScriptInNode(scriptPath, targetDir);
135
135
  spinner.succeed('Source code and assets projected successfully.');
136
136
 
137
- // 5. DEPENDENCY RESOLUTION (versions from @jsonpages/stack manifest)
138
- spinner.start('Installing dependencies (this may take a minute)...');
139
- const stack = (await import('@jsonpages/stack')).default;
140
- const depSpecs = Object.entries(stack.dependencies || {}).map(([name, ver]) => `${name}@${ver}`);
141
- const devDepSpecs = Object.entries(stack.devDependencies || {}).map(([name, ver]) => `${name}@${ver}`);
142
-
143
- await execa(npmCmd, ['install', ...depSpecs], { cwd: targetDir });
144
- await execa(npmCmd, ['install', '-D', ...devDepSpecs], { cwd: targetDir });
145
-
137
+ // 5. Dependencies: gestite nello script .sh (es. copia/package.json da tenant-alpha o npm install)
146
138
  spinner.succeed(chalk.green.bold('✨ Tenant Ready!'));
147
139
 
148
140
  console.log(`\n${chalk.white.bgBlue(' NEXT STEPS ')}`);