jamdesk 1.1.89 → 1.1.91
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/dist/__tests__/integration/validate.integration.test.js +2 -1
- package/dist/__tests__/integration/validate.integration.test.js.map +1 -1
- package/dist/__tests__/unit/dev-workspace-symlinks.test.d.ts +2 -0
- package/dist/__tests__/unit/dev-workspace-symlinks.test.d.ts.map +1 -0
- package/dist/__tests__/unit/dev-workspace-symlinks.test.js +112 -0
- package/dist/__tests__/unit/dev-workspace-symlinks.test.js.map +1 -0
- package/dist/__tests__/unit/docs-config-discovery.test.d.ts +2 -0
- package/dist/__tests__/unit/docs-config-discovery.test.d.ts.map +1 -0
- package/dist/__tests__/unit/docs-config-discovery.test.js +190 -0
- package/dist/__tests__/unit/docs-config-discovery.test.js.map +1 -0
- package/dist/__tests__/unit/docs-config.test.js +2 -1
- package/dist/__tests__/unit/docs-config.test.js.map +1 -1
- package/dist/__tests__/unit/language-filter.test.d.ts +2 -0
- package/dist/__tests__/unit/language-filter.test.d.ts.map +1 -0
- package/dist/__tests__/unit/language-filter.test.js +166 -0
- package/dist/__tests__/unit/language-filter.test.js.map +1 -0
- package/dist/__tests__/unit/output.test.d.ts +2 -0
- package/dist/__tests__/unit/output.test.d.ts.map +1 -0
- package/dist/__tests__/unit/output.test.js +61 -0
- package/dist/__tests__/unit/output.test.js.map +1 -0
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +4 -1
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +14 -12
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +14 -2
- package/dist/commands/validate.js.map +1 -1
- package/dist/lib/docs-config.d.ts +54 -3
- package/dist/lib/docs-config.d.ts.map +1 -1
- package/dist/lib/docs-config.js +126 -8
- package/dist/lib/docs-config.js.map +1 -1
- package/dist/lib/language-filter.d.ts +31 -0
- package/dist/lib/language-filter.d.ts.map +1 -0
- package/dist/lib/language-filter.js +14 -0
- package/dist/lib/language-filter.js.map +1 -0
- package/package.json +1 -1
- package/vendored/app/api/r2/[project]/[...path]/route.ts +14 -9
- package/vendored/app/layout.tsx +2 -2
- package/vendored/components/HtmlLangSync.tsx +3 -2
- package/vendored/components/mdx/Accordion.tsx +1 -1
- package/vendored/components/mdx/Card.tsx +1 -1
- package/vendored/components/mdx/CodeGroup.tsx +18 -23
- package/vendored/components/mdx/Color.tsx +0 -1
- package/vendored/components/mdx/Icon.tsx +1 -1
- package/vendored/components/mdx/MDXComponents.tsx +92 -66
- package/vendored/components/mdx/OpenApiEndpoint.tsx +0 -1
- package/vendored/components/mdx/ParamField.tsx +0 -1
- package/vendored/components/mdx/RequestExample.tsx +0 -1
- package/vendored/components/mdx/ResponseExample.tsx +0 -1
- package/vendored/components/mdx/Steps.tsx +12 -3
- package/vendored/components/mdx/Table.tsx +8 -2
- package/vendored/components/mdx/Tabs.tsx +1 -1
- package/vendored/components/mdx/Tree.tsx +6 -4
- package/vendored/components/navigation/Header.tsx +7 -5
- package/vendored/components/navigation/LanguageSelector.tsx +32 -7
- package/vendored/components/navigation/TableOfContents.tsx +1 -1
- package/vendored/components/navigation/TabsNav.tsx +17 -5
- package/vendored/components/search/SearchModal.tsx +41 -36
- package/vendored/components/ui/CodePanel.tsx +2 -2
- package/vendored/hooks/useChat.ts +1 -1
- package/vendored/hooks/useShikiHighlight.ts +7 -1
- package/vendored/lib/build/error-parser.ts +38 -12
- package/vendored/lib/code-utils.ts +6 -2
- package/vendored/lib/health-checks.ts +2 -2
- package/vendored/lib/language-utils.ts +53 -2
- package/vendored/lib/layout-helpers.tsx +2 -1
- package/vendored/lib/mdx-inline-components.ts +1 -1
- package/vendored/lib/navigation-resolver.ts +0 -69
- package/vendored/lib/normalize-config.ts +1 -1
- package/vendored/lib/openapi/generator.ts +3 -3
- package/vendored/lib/openapi/parser.ts +14 -6
- package/vendored/lib/openapi/validator.ts +2 -2
- package/vendored/lib/openapi-isr.ts +4 -1
- package/vendored/lib/public-paths-resolver.ts +7 -6
- package/vendored/lib/redis.ts +2 -2
- package/vendored/lib/rehype-code-meta.ts +2 -2
- package/vendored/lib/render-doc-page.tsx +2 -2
- package/vendored/lib/seo.ts +21 -6
- package/vendored/lib/shiki-highlighter.ts +1 -1
- package/vendored/lib/snippet-loader-isr.ts +1 -1
- package/vendored/lib/validate-config.ts +136 -8
- package/vendored/shared/status-reporter.ts +12 -0
- package/vendored/workspace-package-lock.json +16 -16
package/vendored/lib/seo.ts
CHANGED
|
@@ -8,9 +8,14 @@
|
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
import type { Metadata } from 'next';
|
|
11
|
-
import type { DocsConfig, Logo, LogoConfig, Favicon,
|
|
11
|
+
import type { DocsConfig, Logo, LogoConfig, Favicon, LanguageConfig, LanguageCode } from './docs-types';
|
|
12
12
|
import { transformConfigImagePath } from './docs-types';
|
|
13
|
-
import {
|
|
13
|
+
import { findHreflangAliasCollisions, transformLanguagePath, toHreflang } from './language-utils';
|
|
14
|
+
import { logger } from '../shared/logger';
|
|
15
|
+
|
|
16
|
+
// Dedupe per-process: same docs.json shape produces the same collision
|
|
17
|
+
// signature on every page render, so we'd otherwise spam logs.
|
|
18
|
+
const warnedCollisionSignatures = new Set<string>();
|
|
14
19
|
|
|
15
20
|
const HAS_DOCS_SUFFIX = /\b(?:Documentation|Docs)\s*$/i;
|
|
16
21
|
|
|
@@ -197,14 +202,12 @@ function buildHreflangAlternates(
|
|
|
197
202
|
const defaultLang = languages.find((l) => l.default)?.language || languages[0]?.language || 'en';
|
|
198
203
|
|
|
199
204
|
// Detect current language from path
|
|
200
|
-
const currentLang = extractLanguageFromPath(pagePath) || defaultLang;
|
|
201
|
-
|
|
202
205
|
// Keep only languages whose navigation declares this page — capturing the
|
|
203
206
|
// language-relative path so the build loop and x-default branch don't have
|
|
204
207
|
// to recompute it via transformLanguagePath.
|
|
205
208
|
const supported: Array<{ lang: LanguageCode; cleanPath: string }> = [];
|
|
206
209
|
for (const langConfig of languages) {
|
|
207
|
-
const langPath = transformLanguagePath(pagePath,
|
|
210
|
+
const langPath = transformLanguagePath(pagePath, langConfig.language, defaultLang);
|
|
208
211
|
const cleanPath = langPath.replace(/^\//, '');
|
|
209
212
|
if (getLanguagePagePaths(langConfig).has(cleanPath)) {
|
|
210
213
|
supported.push({ lang: langConfig.language, cleanPath });
|
|
@@ -217,9 +220,21 @@ function buildHreflangAlternates(
|
|
|
217
220
|
return undefined;
|
|
218
221
|
}
|
|
219
222
|
|
|
223
|
+
const collisions = findHreflangAliasCollisions(supported.map((s) => s.lang));
|
|
224
|
+
for (const { tag, codes } of collisions) {
|
|
225
|
+
const signature = `${tag}:${codes.join(',')}`;
|
|
226
|
+
if (warnedCollisionSignatures.has(signature)) continue;
|
|
227
|
+
warnedCollisionSignatures.add(signature);
|
|
228
|
+
logger.warn('hreflang alias collision — last entry wins, earlier translations dropped', {
|
|
229
|
+
bcp47Tag: tag,
|
|
230
|
+
internalCodes: codes,
|
|
231
|
+
remedy: 'Remove one of the duplicate entries from navigation.languages in docs.json',
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
|
|
220
235
|
const alternates: Record<string, string> = {};
|
|
221
236
|
for (const { lang, cleanPath } of supported) {
|
|
222
|
-
alternates[lang] = cleanPath ? `${baseUrl}/${cleanPath}` : baseUrl;
|
|
237
|
+
alternates[toHreflang(lang)] = cleanPath ? `${baseUrl}/${cleanPath}` : baseUrl;
|
|
223
238
|
}
|
|
224
239
|
|
|
225
240
|
// x-default points to the default language only when it has the page; absence
|
|
@@ -8,7 +8,7 @@ import { PRELOADED_LANGUAGES, SUPPORTED_THEMES, type SupportedTheme } from './sh
|
|
|
8
8
|
|
|
9
9
|
// Extend globalThis type for highlighter caching
|
|
10
10
|
declare global {
|
|
11
|
-
|
|
11
|
+
|
|
12
12
|
var __shikiHighlighterPromise: Promise<Highlighter> | undefined;
|
|
13
13
|
}
|
|
14
14
|
|
|
@@ -322,7 +322,7 @@ async function compileSnippet(
|
|
|
322
322
|
try {
|
|
323
323
|
// Create function that returns the component
|
|
324
324
|
// NOTE: new Function() is intentionally used here to compile user-provided snippets
|
|
325
|
-
|
|
325
|
+
|
|
326
326
|
const createComponent = new Function(
|
|
327
327
|
'React',
|
|
328
328
|
'_jsx',
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
import AjvModule, { ErrorObject } from 'ajv';
|
|
13
13
|
import addFormatsModule from 'ajv-formats';
|
|
14
14
|
// ESM compatibility - ajv-formats exports differently under NodeNext resolution
|
|
15
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- ajv-formats ESM/CJS interop default-export shape varies by bundler
|
|
15
16
|
const addFormats = (addFormatsModule as any).default || addFormatsModule;
|
|
16
17
|
// ESM compatibility - Ajv exports differently in Node.js ESM
|
|
17
18
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -60,6 +61,10 @@ export interface ValidationResult {
|
|
|
60
61
|
error?: string;
|
|
61
62
|
errorType?: 'config_error';
|
|
62
63
|
errorSuggestion?: string;
|
|
64
|
+
/** Populated only on missing-file failures when `repoRoot` was supplied. */
|
|
65
|
+
discovery?: DocsJsonDiscovery;
|
|
66
|
+
/** Prose remediation derived from discovery (e.g., "Did you mean docsPath=apps/docs?"). */
|
|
67
|
+
discoveryHint?: string;
|
|
63
68
|
}
|
|
64
69
|
|
|
65
70
|
type Schema = Record<string, unknown>;
|
|
@@ -297,12 +302,121 @@ export function formatValidationErrors(errors: ErrorObject[] | null | undefined)
|
|
|
297
302
|
return messages.join('. ');
|
|
298
303
|
}
|
|
299
304
|
|
|
305
|
+
/** Limits keep worst-case repos (huge monorepos, generated dirs) cheap on failure. */
|
|
306
|
+
const DISCOVER_MAX_DEPTH = 3;
|
|
307
|
+
const DISCOVER_MAX_ENTRIES = 500;
|
|
308
|
+
const DISCOVER_SKIP_DIRS = new Set([
|
|
309
|
+
'node_modules', '.git', '.next', '.turbo', '.cache',
|
|
310
|
+
'dist', 'build', 'out', '.vercel', 'coverage',
|
|
311
|
+
]);
|
|
312
|
+
|
|
313
|
+
export interface DocsJsonDiscovery {
|
|
314
|
+
/** Repo-relative paths (POSIX separators), sorted, to docs.json files. */
|
|
315
|
+
foundAt: string[];
|
|
316
|
+
/** First-level entries at the repo root, sorted. */
|
|
317
|
+
rootEntries: string[];
|
|
318
|
+
/** True if the walk hit DISCOVER_MAX_ENTRIES before finishing. */
|
|
319
|
+
truncated: boolean;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
/**
|
|
323
|
+
* Walk `repoRoot` looking for any `docs.json`. Used only on the failure path —
|
|
324
|
+
* gives ops a snapshot of what was cloned and lets us suggest the right docsPath.
|
|
325
|
+
*
|
|
326
|
+
* Documented behavior (covered by tests):
|
|
327
|
+
* - Case-sensitive filename match (`docs.json` only, not `Docs.json`). Matches Linux
|
|
328
|
+
* prod semantics — macOS dev might see different fs.existsSync behavior but discovery
|
|
329
|
+
* is consistent across platforms.
|
|
330
|
+
* - Skips directories whose name starts with `.` (so `.config/docs.json` is invisible).
|
|
331
|
+
* - Skips symlinks unconditionally (cycle defense; Windows junctions covered by the
|
|
332
|
+
* entry+depth caps as a backstop).
|
|
333
|
+
* - Output paths use POSIX separators on all platforms.
|
|
334
|
+
* - `rootEntries` is the raw, sorted listing of the repo's top-level entries — it is
|
|
335
|
+
* captured once at depth 0 and is NOT bounded by DISCOVER_MAX_ENTRIES. Persistence
|
|
336
|
+
* layers (Firestore writes, structured logs) slice it to a fixed cap on their side.
|
|
337
|
+
*
|
|
338
|
+
* Limits: DISCOVER_MAX_DEPTH=3, DISCOVER_MAX_ENTRIES=500.
|
|
339
|
+
*/
|
|
340
|
+
export async function discoverDocsJson(repoRoot: string): Promise<DocsJsonDiscovery> {
|
|
341
|
+
const foundAt: string[] = [];
|
|
342
|
+
let rootEntries: string[] = [];
|
|
343
|
+
let seen = 0;
|
|
344
|
+
let truncated = false;
|
|
345
|
+
|
|
346
|
+
async function walk(absDir: string, relDir: string, depth: number): Promise<void> {
|
|
347
|
+
if (truncated || depth > DISCOVER_MAX_DEPTH) return;
|
|
348
|
+
let entries: fs.Dirent[];
|
|
349
|
+
try {
|
|
350
|
+
entries = await fs.promises.readdir(absDir, { withFileTypes: true });
|
|
351
|
+
} catch {
|
|
352
|
+
return;
|
|
353
|
+
}
|
|
354
|
+
if (depth === 0) {
|
|
355
|
+
rootEntries = entries.map(e => e.name).sort();
|
|
356
|
+
}
|
|
357
|
+
for (const entry of entries) {
|
|
358
|
+
if (entry.isSymbolicLink()) continue;
|
|
359
|
+
if (entry.isDirectory() && (DISCOVER_SKIP_DIRS.has(entry.name) || entry.name.startsWith('.'))) continue;
|
|
360
|
+
if (++seen > DISCOVER_MAX_ENTRIES) {
|
|
361
|
+
truncated = true;
|
|
362
|
+
return;
|
|
363
|
+
}
|
|
364
|
+
const rel = relDir ? `${relDir}/${entry.name}` : entry.name;
|
|
365
|
+
if (entry.isDirectory()) {
|
|
366
|
+
await walk(path.join(absDir, entry.name), rel, depth + 1);
|
|
367
|
+
} else if (entry.isFile() && entry.name === 'docs.json') {
|
|
368
|
+
foundAt.push(rel);
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
await walk(repoRoot, '', 0);
|
|
374
|
+
foundAt.sort();
|
|
375
|
+
return { foundAt, rootEntries, truncated };
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
/**
|
|
379
|
+
* Build the prose remediation hint from a discovery snapshot. Pure function —
|
|
380
|
+
* separated from validateConfig so it can be unit-tested directly and so the
|
|
381
|
+
* hint phrasings live in one named place.
|
|
382
|
+
*/
|
|
383
|
+
export function synthesizeDiscoveryHint(
|
|
384
|
+
foundAt: string[],
|
|
385
|
+
expectedRel: string,
|
|
386
|
+
docsPath?: string,
|
|
387
|
+
): string {
|
|
388
|
+
const elsewhere = foundAt.filter(p => p !== expectedRel);
|
|
389
|
+
if (elsewhere.length === 1) {
|
|
390
|
+
// path.posix.dirname returns '.' for files at the root (e.g. 'docs.json' → '.').
|
|
391
|
+
const dir = path.posix.dirname(elsewhere[0]);
|
|
392
|
+
if (dir === '.') {
|
|
393
|
+
return docsPath
|
|
394
|
+
? 'We found docs.json at the repository root. You can clear the docs path setting to use it.'
|
|
395
|
+
: 'We found docs.json at the repository root.';
|
|
396
|
+
}
|
|
397
|
+
return `We found docs.json at '${elsewhere[0]}'. Did you mean to set the docs path to '${dir}'?`;
|
|
398
|
+
}
|
|
399
|
+
if (elsewhere.length > 1) {
|
|
400
|
+
const list = elsewhere.slice(0, 3).map(p => `'${p}'`).join(', ');
|
|
401
|
+
const more = elsewhere.length > 3 ? ` and ${elsewhere.length - 3} more` : '';
|
|
402
|
+
return `We found docs.json at: ${list}${more}. Update the docs path setting to point at one of these.`;
|
|
403
|
+
}
|
|
404
|
+
return 'We could not find a docs.json file anywhere in this commit. '
|
|
405
|
+
+ 'Check that you pushed the right branch and that docs.json is committed.';
|
|
406
|
+
}
|
|
407
|
+
|
|
300
408
|
/**
|
|
301
|
-
* Validate docs.json configuration
|
|
409
|
+
* Validate docs.json configuration.
|
|
302
410
|
* @param configPath - Full path to docs.json
|
|
303
|
-
* @param docsPath
|
|
411
|
+
* @param docsPath - Optional monorepo path for better error messages (e.g., "jamdesk")
|
|
412
|
+
* @param repoRoot - Optional repo root; when supplied, missing-file errors include
|
|
413
|
+
* a discovery snapshot and a remediation hint.
|
|
304
414
|
*/
|
|
305
|
-
export async function validateConfig(
|
|
415
|
+
export async function validateConfig(
|
|
416
|
+
configPath: string,
|
|
417
|
+
docsPath?: string,
|
|
418
|
+
repoRoot?: string,
|
|
419
|
+
): Promise<ValidationResult> {
|
|
306
420
|
// Check file exists
|
|
307
421
|
if (!fs.existsSync(configPath)) {
|
|
308
422
|
// If `mint.json` sits where docs.json should be, the project is mid-migration
|
|
@@ -311,13 +425,27 @@ export async function validateConfig(configPath: string, docsPath?: string): Pro
|
|
|
311
425
|
if (fs.existsSync(mintPath)) {
|
|
312
426
|
return mintlifyMigrationError('Found `mint.json` but no `docs.json`.');
|
|
313
427
|
}
|
|
314
|
-
|
|
428
|
+
|
|
429
|
+
const baseError = docsPath
|
|
315
430
|
? `Missing docs.json at '${docsPath}/docs.json'. Check that your monorepo path is correct.`
|
|
316
431
|
: 'Missing docs.json configuration file. Your repository must have a docs.json file in the root directory.';
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
error:
|
|
320
|
-
}
|
|
432
|
+
|
|
433
|
+
if (!repoRoot) {
|
|
434
|
+
return { valid: false, error: baseError };
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
const discovery = await discoverDocsJson(repoRoot);
|
|
438
|
+
|
|
439
|
+
const normalizedDocsPath = docsPath
|
|
440
|
+
? path.posix.normalize(docsPath.replace(/\\/g, '/').replace(/^\.\//, '')).replace(/\/$/, '')
|
|
441
|
+
: '';
|
|
442
|
+
const expectedRel = normalizedDocsPath
|
|
443
|
+
? path.posix.join(normalizedDocsPath, 'docs.json')
|
|
444
|
+
: 'docs.json';
|
|
445
|
+
|
|
446
|
+
const discoveryHint = synthesizeDiscoveryHint(discovery.foundAt, expectedRel, docsPath);
|
|
447
|
+
|
|
448
|
+
return { valid: false, error: baseError, discovery, discoveryHint };
|
|
321
449
|
}
|
|
322
450
|
|
|
323
451
|
// Read and parse file
|
|
@@ -66,8 +66,20 @@ export interface FailureUpdate {
|
|
|
66
66
|
failedPhase: string;
|
|
67
67
|
timing: TimingSummary | null;
|
|
68
68
|
memory?: MemoryStats;
|
|
69
|
+
/** docs.json discovery snapshot — populated only on missing-file validate failures. */
|
|
70
|
+
discovery?: {
|
|
71
|
+
foundAt: string[];
|
|
72
|
+
rootEntries: string[];
|
|
73
|
+
truncated: boolean;
|
|
74
|
+
};
|
|
69
75
|
}
|
|
70
76
|
|
|
77
|
+
/**
|
|
78
|
+
* Cap applied when persisting `FailureUpdate.discovery.rootEntries` to keep
|
|
79
|
+
* Firestore docs and Cloud Run log payloads bounded on wide repos.
|
|
80
|
+
*/
|
|
81
|
+
export const DISCOVERY_ROOT_ENTRIES_PERSIST_CAP = 30;
|
|
82
|
+
|
|
71
83
|
export interface ErrorLogData {
|
|
72
84
|
rawOutput: string;
|
|
73
85
|
stderr: string;
|
|
@@ -1921,12 +1921,12 @@
|
|
|
1921
1921
|
}
|
|
1922
1922
|
},
|
|
1923
1923
|
"node_modules/@types/node": {
|
|
1924
|
-
"version": "25.
|
|
1925
|
-
"resolved": "https://registry.npmjs.org/@types/node/-/node-25.
|
|
1926
|
-
"integrity": "sha512-
|
|
1924
|
+
"version": "25.8.0",
|
|
1925
|
+
"resolved": "https://registry.npmjs.org/@types/node/-/node-25.8.0.tgz",
|
|
1926
|
+
"integrity": "sha512-TCFSk8IZh+iLX1xtksoBVtdmgL+1IX0fC9BeU4QqFSuNdN/K+HUlhqOzEmSYYpZUVsLYcPqc9KX+60iDuninSQ==",
|
|
1927
1927
|
"license": "MIT",
|
|
1928
1928
|
"dependencies": {
|
|
1929
|
-
"undici-types": "
|
|
1929
|
+
"undici-types": ">=7.24.0 <7.24.7"
|
|
1930
1930
|
}
|
|
1931
1931
|
},
|
|
1932
1932
|
"node_modules/@types/react": {
|
|
@@ -2913,9 +2913,9 @@
|
|
|
2913
2913
|
}
|
|
2914
2914
|
},
|
|
2915
2915
|
"node_modules/dompurify": {
|
|
2916
|
-
"version": "3.4.
|
|
2917
|
-
"resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.
|
|
2918
|
-
"integrity": "sha512-
|
|
2916
|
+
"version": "3.4.3",
|
|
2917
|
+
"resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.3.tgz",
|
|
2918
|
+
"integrity": "sha512-VVwJidIJcp1hpg2OMXML3ZVRPYSZiq4aX7qBh83BSIpOaRDqI+qxhXjjIWnpzkOXhmp0L81lnoME1mnCc9H48A==",
|
|
2919
2919
|
"license": "(MPL-2.0 OR Apache-2.0)",
|
|
2920
2920
|
"optionalDependencies": {
|
|
2921
2921
|
"@types/trusted-types": "^2.0.7"
|
|
@@ -2928,9 +2928,9 @@
|
|
|
2928
2928
|
"license": "MIT"
|
|
2929
2929
|
},
|
|
2930
2930
|
"node_modules/electron-to-chromium": {
|
|
2931
|
-
"version": "1.5.
|
|
2932
|
-
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.
|
|
2933
|
-
"integrity": "sha512-
|
|
2931
|
+
"version": "1.5.355",
|
|
2932
|
+
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.355.tgz",
|
|
2933
|
+
"integrity": "sha512-LUPZhKzZPYSPme1jEYohpkA+ybYCJztr1quAdBd7E7h3+VOBVcKkwwtBJu41nrjawrRzfb8mtMfzWozoaK0ZIQ==",
|
|
2934
2934
|
"license": "ISC"
|
|
2935
2935
|
},
|
|
2936
2936
|
"node_modules/enhanced-resolve": {
|
|
@@ -3739,9 +3739,9 @@
|
|
|
3739
3739
|
}
|
|
3740
3740
|
},
|
|
3741
3741
|
"node_modules/katex": {
|
|
3742
|
-
"version": "0.16.
|
|
3743
|
-
"resolved": "https://registry.npmjs.org/katex/-/katex-0.16.
|
|
3744
|
-
"integrity": "sha512-
|
|
3742
|
+
"version": "0.16.46",
|
|
3743
|
+
"resolved": "https://registry.npmjs.org/katex/-/katex-0.16.46.tgz",
|
|
3744
|
+
"integrity": "sha512-WHy4Coo+bGZyH7NwJKHkS04YFsFcarWbAEOAC3EMndzdN6VSZqklLLIgfxzyaW9jDoeGYJX9SWbJPKpecox0Uw==",
|
|
3745
3745
|
"funding": [
|
|
3746
3746
|
"https://opencollective.com/katex",
|
|
3747
3747
|
"https://github.com/sponsors/katex"
|
|
@@ -6279,9 +6279,9 @@
|
|
|
6279
6279
|
"license": "MIT"
|
|
6280
6280
|
},
|
|
6281
6281
|
"node_modules/undici-types": {
|
|
6282
|
-
"version": "7.
|
|
6283
|
-
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.
|
|
6284
|
-
"integrity": "sha512-
|
|
6282
|
+
"version": "7.24.6",
|
|
6283
|
+
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.24.6.tgz",
|
|
6284
|
+
"integrity": "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==",
|
|
6285
6285
|
"license": "MIT"
|
|
6286
6286
|
},
|
|
6287
6287
|
"node_modules/unified": {
|