jamdesk 1.1.13 → 1.1.15

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.
@@ -1 +1 @@
1
- {"version":3,"file":"spellcheck.d.ts","sourceRoot":"","sources":["../../src/commands/spellcheck.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgBH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuJ1E"}
1
+ {"version":3,"file":"spellcheck.d.ts","sourceRoot":"","sources":["../../src/commands/spellcheck.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgBH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsJ1E"}
@@ -32,10 +32,9 @@ export async function spellcheck(options) {
32
32
  }
33
33
  const spin = !json ? spinner('Checking spelling...') : null;
34
34
  // Build ignore words from all sources
35
- const configAny = config;
36
- const spellcheckConfig = configAny.spellcheck;
35
+ const spellcheckConfig = config.spellcheck;
37
36
  const userIgnoreWords = spellcheckConfig?.ignore ?? [];
38
- const projectName = configAny.name;
37
+ const projectName = config.name;
39
38
  const ignoreWords = buildIgnoreWords(TECH_WORDS, projectName, userIgnoreWords);
40
39
  const spell = createSpellchecker(ignoreWords);
41
40
  // Phase 1: Find all misspellings
@@ -1 +1 @@
1
- {"version":3,"file":"spellcheck.js","sourceRoot":"","sources":["../../src/commands/spellcheck.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spellcheck.js","sourceRoot":"","sources":["../../src/commands/spellcheck.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jamdesk",
3
- "version": "1.1.13",
3
+ "version": "1.1.15",
4
4
  "description": "CLI for Jamdesk — build, preview, and deploy documentation sites from MDX. Dev server with hot reload, 50+ components, OpenAPI support, AI search, and Mintlify migration",
5
5
  "keywords": [
6
6
  "jamdesk",
@@ -6,6 +6,7 @@ import { ThemeProvider } from '@/components/theme/ThemeProvider';
6
6
  import { LayoutWrapper } from '@/components/layout/LayoutWrapper';
7
7
  import { CodeBlockCopyButton } from '@/components/CodeBlockCopyButton';
8
8
  import { HeaderLinkCopy } from '@/components/HeaderLinkCopy';
9
+ import { FontAwesomeLoader, FA_CSS_HREF } from '@/components/FontAwesomeLoader';
9
10
  import { getDocsConfig } from '@/lib/docs';
10
11
  import { getDocsConfig as getIsrDocsConfig } from '@/lib/docs-isr';
11
12
  import { isIsrMode, getProjectFromRequest, getHostAtDocs } from '@/lib/page-isr-helpers';
@@ -356,23 +357,16 @@ export default async function RootLayout({
356
357
  )}
357
358
  {/* Font Awesome CSS for navigation icons - self-hosted web fonts */}
358
359
  {/* Loaded async (preload + script injection) to avoid render-blocking 40KB CSS */}
359
- <link
360
- rel="preload"
361
- href="/_jd/fonts/fontawesome/css/all.min.css"
362
- as="style"
363
- />
360
+ <link rel="preload" href={FA_CSS_HREF} as="style" />
364
361
  {/* Preload FA font files to avoid waterfall: CSS → font discovery → download */}
365
362
  <link rel="preload" href="/_jd/fonts/fontawesome/webfonts/fa-light-300.woff2" as="font" type="font/woff2" crossOrigin="anonymous" />
366
363
  <link rel="preload" href="/_jd/fonts/fontawesome/webfonts/fa-brands-400.woff2" as="font" type="font/woff2" crossOrigin="anonymous" />
367
364
  <script
368
- dangerouslySetInnerHTML={{ __html:
369
- "var l=document.createElement('link');l.rel='stylesheet';" +
370
- "l.href='/_jd/fonts/fontawesome/css/all.min.css';" +
371
- "document.head.appendChild(l);"
372
- }}
365
+ // eslint-disable-next-line react/no-danger -- static trusted content, no user input
366
+ dangerouslySetInnerHTML={{ __html: `var l=document.createElement('link');l.rel='stylesheet';l.href='${FA_CSS_HREF}';document.head.appendChild(l);window.__FA_CSS_LOADED__=true;` }}
373
367
  />
374
368
  <noscript>
375
- <link rel="stylesheet" href="/_jd/fonts/fontawesome/css/all.min.css" />
369
+ <link rel="stylesheet" href={FA_CSS_HREF} />
376
370
  </noscript>
377
371
  {/* DNS prefetch for KaTeX CDN - only when latex is enabled */}
378
372
  {config.styling?.latex && (
@@ -529,6 +523,7 @@ export default async function RootLayout({
529
523
  {/* Client components for copy buttons after hydration */}
530
524
  <CodeBlockCopyButton />
531
525
  <HeaderLinkCopy />
526
+ <FontAwesomeLoader />
532
527
  </ThemeProvider>
533
528
  {/* Crisp Chat */}
534
529
  {config.integrations?.crisp?.websiteId &&
@@ -0,0 +1,36 @@
1
+ 'use client';
2
+
3
+ import { useEffect } from 'react';
4
+
5
+ export const FA_CSS_HREF = '/_jd/fonts/fontawesome/css/all.min.css';
6
+
7
+ /**
8
+ * Ensures Font Awesome CSS is loaded in the document head.
9
+ *
10
+ * On normal pages, the inline script in layout.tsx's <head> loads the
11
+ * stylesheet during initial HTML parsing. But on 404 pages, Next.js renders
12
+ * a minimal error shell (<html id="__next_error__">) that omits the root
13
+ * layout's <head> content. The RSC payload later adds the script tag via
14
+ * React hydration, but inline scripts injected by React after initial load
15
+ * don't execute. This component acts as a fallback, injecting the stylesheet
16
+ * link via useEffect so icons render on 404 pages too.
17
+ */
18
+ export function FontAwesomeLoader() {
19
+ useEffect(() => {
20
+ // Inline script in <head> sets this flag — skip DOM query on normal pages
21
+ if ((window as Window & { __FA_CSS_LOADED__?: boolean }).__FA_CSS_LOADED__) return;
22
+
23
+ // 404 error shell path: check if stylesheet exists (handles browser-normalized absolute URLs)
24
+ const existing = document.querySelector(
25
+ `link[rel="stylesheet"][href$="${FA_CSS_HREF}"]`
26
+ );
27
+ if (existing) return;
28
+
29
+ const link = document.createElement('link');
30
+ link.rel = 'stylesheet';
31
+ link.href = FA_CSS_HREF;
32
+ document.head.appendChild(link);
33
+ }, []);
34
+
35
+ return null;
36
+ }
@@ -0,0 +1,43 @@
1
+ // Auto-generated file - do not edit manually
2
+ // @ts-nocheck
3
+
4
+ import React from 'react';
5
+
6
+ // Import built-in MDX components that snippets can use
7
+ import { Note, Info, Warning, Tip, Check, Danger, Callout } from '@/components/mdx/Callouts';
8
+ import { Card } from '@/components/mdx/Card';
9
+ import { CardGroup } from '@/components/mdx/CardGroup';
10
+ import { ParamField } from '@/components/mdx/ParamField';
11
+ import { ResponseField } from '@/components/mdx/ResponseField';
12
+ import { Accordion, AccordionGroup } from '@/components/mdx/Accordion';
13
+ import { CodeGroup } from '@/components/mdx/CodeGroup';
14
+ import { Steps, Step } from '@/components/mdx/Steps';
15
+
16
+
17
+ // Helper component for rendering plain MDX snippets
18
+ // Content is from project snippets (controlled source), not user input
19
+ const PlainMdxSnippet = ({ content }: { content: string }) => {
20
+ const formattedContent = content
21
+ .split('\n\n')
22
+ .map((paragraph) => {
23
+ let html = paragraph.replace(/\*\*([^*]+)\*\*/g, '<strong>$1</strong>');
24
+ html = html.replace(/\*([^*]+)\*/g, '<em>$1</em>');
25
+ html = html.replace(/\`([^\`]+)\`/g, '<code>$1</code>');
26
+ return html;
27
+ })
28
+ .filter(p => p.trim());
29
+
30
+ return (
31
+ <div className="snippet-content">
32
+ {formattedContent.map((p, i) => (
33
+ <p key={i} dangerouslySetInnerHTML={{ __html: p }} />
34
+ ))}
35
+ </div>
36
+ );
37
+ };
38
+
39
+ const SnippetIntro = () => {
40
+ return <PlainMdxSnippet content={"أحد المبادئ الأساسية في تطوير البرمجيات هو مبدأ DRY (Don't Repeat\nYourself). وهذا مبدأ ينطبق على التوثيق أيضًا.\nإذا وجدت نفسك تكرر المحتوى نفسه في عدة أماكن، ففكّر في إنشاء مقتطف\nمخصص (snippet) للحفاظ على content الخاص بك متزامنًا."} />;
41
+ };
42
+
43
+ export default SnippetIntro;
@@ -0,0 +1,43 @@
1
+ // Auto-generated file - do not edit manually
2
+ // @ts-nocheck
3
+
4
+ import React from 'react';
5
+
6
+ // Import built-in MDX components that snippets can use
7
+ import { Note, Info, Warning, Tip, Check, Danger, Callout } from '@/components/mdx/Callouts';
8
+ import { Card } from '@/components/mdx/Card';
9
+ import { CardGroup } from '@/components/mdx/CardGroup';
10
+ import { ParamField } from '@/components/mdx/ParamField';
11
+ import { ResponseField } from '@/components/mdx/ResponseField';
12
+ import { Accordion, AccordionGroup } from '@/components/mdx/Accordion';
13
+ import { CodeGroup } from '@/components/mdx/CodeGroup';
14
+ import { Steps, Step } from '@/components/mdx/Steps';
15
+
16
+
17
+ // Helper component for rendering plain MDX snippets
18
+ // Content is from project snippets (controlled source), not user input
19
+ const PlainMdxSnippet = ({ content }: { content: string }) => {
20
+ const formattedContent = content
21
+ .split('\n\n')
22
+ .map((paragraph) => {
23
+ let html = paragraph.replace(/\*\*([^*]+)\*\*/g, '<strong>$1</strong>');
24
+ html = html.replace(/\*([^*]+)\*/g, '<em>$1</em>');
25
+ html = html.replace(/\`([^\`]+)\`/g, '<code>$1</code>');
26
+ return html;
27
+ })
28
+ .filter(p => p.trim());
29
+
30
+ return (
31
+ <div className="snippet-content">
32
+ {formattedContent.map((p, i) => (
33
+ <p key={i} dangerouslySetInnerHTML={{ __html: p }} />
34
+ ))}
35
+ </div>
36
+ );
37
+ };
38
+
39
+ const SnippetIntro = () => {
40
+ return <PlainMdxSnippet content={"Uno de los principios fundamentales del desarrollo de software es DRY (Don't Repeat Yourself). Este es un principio que también se aplica a la documentación. Si te encuentras repitiendo el mismo contenido en varios lugares, deberías considerar crear un snippet personalizado para mantener tu contenido sincronizado."} />;
41
+ };
42
+
43
+ export default SnippetIntro;
@@ -0,0 +1,43 @@
1
+ // Auto-generated file - do not edit manually
2
+ // @ts-nocheck
3
+
4
+ import React from 'react';
5
+
6
+ // Import built-in MDX components that snippets can use
7
+ import { Note, Info, Warning, Tip, Check, Danger, Callout } from '@/components/mdx/Callouts';
8
+ import { Card } from '@/components/mdx/Card';
9
+ import { CardGroup } from '@/components/mdx/CardGroup';
10
+ import { ParamField } from '@/components/mdx/ParamField';
11
+ import { ResponseField } from '@/components/mdx/ResponseField';
12
+ import { Accordion, AccordionGroup } from '@/components/mdx/Accordion';
13
+ import { CodeGroup } from '@/components/mdx/CodeGroup';
14
+ import { Steps, Step } from '@/components/mdx/Steps';
15
+
16
+
17
+ // Helper component for rendering plain MDX snippets
18
+ // Content is from project snippets (controlled source), not user input
19
+ const PlainMdxSnippet = ({ content }: { content: string }) => {
20
+ const formattedContent = content
21
+ .split('\n\n')
22
+ .map((paragraph) => {
23
+ let html = paragraph.replace(/\*\*([^*]+)\*\*/g, '<strong>$1</strong>');
24
+ html = html.replace(/\*([^*]+)\*/g, '<em>$1</em>');
25
+ html = html.replace(/\`([^\`]+)\`/g, '<code>$1</code>');
26
+ return html;
27
+ })
28
+ .filter(p => p.trim());
29
+
30
+ return (
31
+ <div className="snippet-content">
32
+ {formattedContent.map((p, i) => (
33
+ <p key={i} dangerouslySetInnerHTML={{ __html: p }} />
34
+ ))}
35
+ </div>
36
+ );
37
+ };
38
+
39
+ const SnippetIntro = () => {
40
+ return <PlainMdxSnippet content={"ソフトウェア開発の中核となる原則の一つに、DRY(Don't Repeat Yourself)があります。この原則はドキュメントにも当てはまります。同じ内容を複数の場所で繰り返している場合は、内容を常に同期させておけるように、カスタムスニペットの作成を検討してください。"} />;
41
+ };
42
+
43
+ export default SnippetIntro;
@@ -0,0 +1,43 @@
1
+ // Auto-generated file - do not edit manually
2
+ // @ts-nocheck
3
+
4
+ import React from 'react';
5
+
6
+ // Import built-in MDX components that snippets can use
7
+ import { Note, Info, Warning, Tip, Check, Danger, Callout } from '@/components/mdx/Callouts';
8
+ import { Card } from '@/components/mdx/Card';
9
+ import { CardGroup } from '@/components/mdx/CardGroup';
10
+ import { ParamField } from '@/components/mdx/ParamField';
11
+ import { ResponseField } from '@/components/mdx/ResponseField';
12
+ import { Accordion, AccordionGroup } from '@/components/mdx/Accordion';
13
+ import { CodeGroup } from '@/components/mdx/CodeGroup';
14
+ import { Steps, Step } from '@/components/mdx/Steps';
15
+
16
+
17
+ // Helper component for rendering plain MDX snippets
18
+ // Content is from project snippets (controlled source), not user input
19
+ const PlainMdxSnippet = ({ content }: { content: string }) => {
20
+ const formattedContent = content
21
+ .split('\n\n')
22
+ .map((paragraph) => {
23
+ let html = paragraph.replace(/\*\*([^*]+)\*\*/g, '<strong>$1</strong>');
24
+ html = html.replace(/\*([^*]+)\*/g, '<em>$1</em>');
25
+ html = html.replace(/\`([^\`]+)\`/g, '<code>$1</code>');
26
+ return html;
27
+ })
28
+ .filter(p => p.trim());
29
+
30
+ return (
31
+ <div className="snippet-content">
32
+ {formattedContent.map((p, i) => (
33
+ <p key={i} dangerouslySetInnerHTML={{ __html: p }} />
34
+ ))}
35
+ </div>
36
+ );
37
+ };
38
+
39
+ const SnippetIntro = () => {
40
+ return <PlainMdxSnippet content={"소프트웨어 개발의 핵심 원칙 중 하나는 DRY(Don't Repeat Yourself)입니다. 이 원칙은 문서 작성에도 그대로 적용됩니다. 동일한 content를 여러 곳에서 반복해서 작성하고 있다면, content를 일관되게 유지할 수 있도록 커스텀 스니펫을 만드는 것을 고려해야 합니다."} />;
41
+ };
42
+
43
+ export default SnippetIntro;
@@ -733,6 +733,14 @@ export interface AnalyticsConfig {
733
733
  enabled?: boolean;
734
734
  }
735
735
 
736
+ /**
737
+ * Spellcheck configuration for the jamdesk spellcheck command
738
+ */
739
+ export interface SpellcheckConfig {
740
+ /** Words to ignore during spellcheck (product names, technical terms, etc.) */
741
+ ignore?: string[];
742
+ }
743
+
736
744
  // =============================================================================
737
745
  // MAIN DOCS CONFIG
738
746
  // =============================================================================
@@ -798,6 +806,7 @@ export interface DocsConfig {
798
806
  metadata?: MetadataConfig;
799
807
  analytics?: AnalyticsConfig;
800
808
  chat?: ChatConfig;
809
+ spellcheck?: SpellcheckConfig;
801
810
 
802
811
  // Mintlify compatibility fields (normalized at load time)
803
812
  modeToggle?: ModeToggleConfig;