@fragments-sdk/cli 0.2.2
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/LICENSE +21 -0
- package/README.md +106 -0
- package/dist/bin.d.ts +1 -0
- package/dist/bin.js +4783 -0
- package/dist/bin.js.map +1 -0
- package/dist/chunk-4FDQSGKX.js +786 -0
- package/dist/chunk-4FDQSGKX.js.map +1 -0
- package/dist/chunk-7H2MMGYG.js +369 -0
- package/dist/chunk-7H2MMGYG.js.map +1 -0
- package/dist/chunk-BSCG3IP7.js +619 -0
- package/dist/chunk-BSCG3IP7.js.map +1 -0
- package/dist/chunk-LY2CFFPY.js +898 -0
- package/dist/chunk-LY2CFFPY.js.map +1 -0
- package/dist/chunk-MUZ6CM66.js +6636 -0
- package/dist/chunk-MUZ6CM66.js.map +1 -0
- package/dist/chunk-OAENNG3G.js +1489 -0
- package/dist/chunk-OAENNG3G.js.map +1 -0
- package/dist/chunk-XHNKNI6J.js +235 -0
- package/dist/chunk-XHNKNI6J.js.map +1 -0
- package/dist/core-DWKLGY4N.js +68 -0
- package/dist/core-DWKLGY4N.js.map +1 -0
- package/dist/generate-4LQNJ7SX.js +249 -0
- package/dist/generate-4LQNJ7SX.js.map +1 -0
- package/dist/index.d.ts +775 -0
- package/dist/index.js +41 -0
- package/dist/index.js.map +1 -0
- package/dist/init-EMVI47QG.js +416 -0
- package/dist/init-EMVI47QG.js.map +1 -0
- package/dist/mcp-bin.d.ts +1 -0
- package/dist/mcp-bin.js +1117 -0
- package/dist/mcp-bin.js.map +1 -0
- package/dist/scan-4YPRF7FV.js +12 -0
- package/dist/scan-4YPRF7FV.js.map +1 -0
- package/dist/service-QSZMZJBJ.js +208 -0
- package/dist/service-QSZMZJBJ.js.map +1 -0
- package/dist/static-viewer-MIPGZ4Z7.js +12 -0
- package/dist/static-viewer-MIPGZ4Z7.js.map +1 -0
- package/dist/test-SQ5ZHXWU.js +1067 -0
- package/dist/test-SQ5ZHXWU.js.map +1 -0
- package/dist/tokens-HSGMYK64.js +173 -0
- package/dist/tokens-HSGMYK64.js.map +1 -0
- package/dist/viewer-YRF4SQE4.js +11101 -0
- package/dist/viewer-YRF4SQE4.js.map +1 -0
- package/package.json +107 -0
- package/src/ai.ts +266 -0
- package/src/analyze.ts +265 -0
- package/src/bin.ts +916 -0
- package/src/build.ts +248 -0
- package/src/commands/a11y.ts +302 -0
- package/src/commands/add.ts +313 -0
- package/src/commands/audit.ts +195 -0
- package/src/commands/baseline.ts +221 -0
- package/src/commands/build.ts +144 -0
- package/src/commands/compare.ts +337 -0
- package/src/commands/context.ts +107 -0
- package/src/commands/dev.ts +107 -0
- package/src/commands/enhance.ts +858 -0
- package/src/commands/generate.ts +391 -0
- package/src/commands/init.ts +531 -0
- package/src/commands/link/figma.ts +645 -0
- package/src/commands/link/index.ts +10 -0
- package/src/commands/link/storybook.ts +267 -0
- package/src/commands/list.ts +49 -0
- package/src/commands/metrics.ts +114 -0
- package/src/commands/reset.ts +242 -0
- package/src/commands/scan.ts +537 -0
- package/src/commands/storygen.ts +207 -0
- package/src/commands/tokens.ts +251 -0
- package/src/commands/validate.ts +93 -0
- package/src/commands/verify.ts +215 -0
- package/src/core/composition.test.ts +262 -0
- package/src/core/composition.ts +255 -0
- package/src/core/config.ts +84 -0
- package/src/core/constants.ts +111 -0
- package/src/core/context.ts +380 -0
- package/src/core/defineSegment.ts +137 -0
- package/src/core/discovery.ts +337 -0
- package/src/core/figma.ts +263 -0
- package/src/core/fragment-types.ts +214 -0
- package/src/core/generators/context.ts +389 -0
- package/src/core/generators/index.ts +23 -0
- package/src/core/generators/registry.ts +364 -0
- package/src/core/generators/typescript-extractor.ts +374 -0
- package/src/core/importAnalyzer.ts +217 -0
- package/src/core/index.ts +149 -0
- package/src/core/loader.ts +155 -0
- package/src/core/node.ts +63 -0
- package/src/core/parser.ts +551 -0
- package/src/core/previewLoader.ts +172 -0
- package/src/core/schema/fragment.schema.json +189 -0
- package/src/core/schema/registry.schema.json +137 -0
- package/src/core/schema.ts +182 -0
- package/src/core/storyAdapter.test.ts +571 -0
- package/src/core/storyAdapter.ts +761 -0
- package/src/core/token-types.ts +287 -0
- package/src/core/types.ts +754 -0
- package/src/diff.ts +323 -0
- package/src/index.ts +43 -0
- package/src/mcp/__tests__/projectFields.test.ts +130 -0
- package/src/mcp/bin.ts +36 -0
- package/src/mcp/index.ts +8 -0
- package/src/mcp/server.ts +1310 -0
- package/src/mcp/utils.ts +54 -0
- package/src/mcp-bin.ts +36 -0
- package/src/migrate/__tests__/argTypes/argTypes.test.ts +189 -0
- package/src/migrate/__tests__/args/args.test.ts +452 -0
- package/src/migrate/__tests__/meta/meta.test.ts +198 -0
- package/src/migrate/__tests__/stories/stories.test.ts +278 -0
- package/src/migrate/__tests__/utils/utils.test.ts +371 -0
- package/src/migrate/__tests__/values/values.test.ts +303 -0
- package/src/migrate/bin.ts +108 -0
- package/src/migrate/converter.ts +658 -0
- package/src/migrate/detect.ts +196 -0
- package/src/migrate/index.ts +45 -0
- package/src/migrate/migrate.ts +163 -0
- package/src/migrate/parser.ts +1136 -0
- package/src/migrate/report.ts +624 -0
- package/src/migrate/types.ts +169 -0
- package/src/screenshot.ts +249 -0
- package/src/service/__tests__/ast-utils.test.ts +426 -0
- package/src/service/__tests__/enhance-scanner.test.ts +200 -0
- package/src/service/__tests__/figma/figma.test.ts +652 -0
- package/src/service/__tests__/metrics-store.test.ts +409 -0
- package/src/service/__tests__/patch-generator.test.ts +186 -0
- package/src/service/__tests__/props-extractor.test.ts +365 -0
- package/src/service/__tests__/token-registry.test.ts +267 -0
- package/src/service/analytics.ts +659 -0
- package/src/service/ast-utils.ts +444 -0
- package/src/service/browser-pool.ts +339 -0
- package/src/service/capture.ts +267 -0
- package/src/service/diff.ts +279 -0
- package/src/service/enhance/aggregator.ts +489 -0
- package/src/service/enhance/cache.ts +275 -0
- package/src/service/enhance/codebase-scanner.ts +357 -0
- package/src/service/enhance/context-generator.ts +529 -0
- package/src/service/enhance/doc-extractor.ts +523 -0
- package/src/service/enhance/index.ts +131 -0
- package/src/service/enhance/props-extractor.ts +665 -0
- package/src/service/enhance/scanner.ts +445 -0
- package/src/service/enhance/storybook-parser.ts +552 -0
- package/src/service/enhance/types.ts +346 -0
- package/src/service/enhance/variant-renderer.ts +479 -0
- package/src/service/figma.ts +1008 -0
- package/src/service/index.ts +249 -0
- package/src/service/metrics-store.ts +333 -0
- package/src/service/patch-generator.ts +349 -0
- package/src/service/report.ts +854 -0
- package/src/service/storage.ts +401 -0
- package/src/service/token-fixes.ts +281 -0
- package/src/service/token-parser.ts +504 -0
- package/src/service/token-registry.ts +721 -0
- package/src/service/utils.ts +172 -0
- package/src/setup.ts +241 -0
- package/src/shared/command-wrapper.ts +81 -0
- package/src/shared/dev-server-client.ts +199 -0
- package/src/shared/index.ts +8 -0
- package/src/shared/segment-loader.ts +59 -0
- package/src/shared/types.ts +147 -0
- package/src/static-viewer.ts +715 -0
- package/src/test/discovery.ts +172 -0
- package/src/test/index.ts +281 -0
- package/src/test/reporters/console.ts +194 -0
- package/src/test/reporters/json.ts +190 -0
- package/src/test/reporters/junit.ts +186 -0
- package/src/test/runner.ts +598 -0
- package/src/test/types.ts +245 -0
- package/src/test/watch.ts +200 -0
- package/src/validators.ts +152 -0
- package/src/viewer/__tests__/jsx-parser.test.ts +502 -0
- package/src/viewer/__tests__/render-utils.test.ts +232 -0
- package/src/viewer/__tests__/style-utils.test.ts +404 -0
- package/src/viewer/bin.ts +86 -0
- package/src/viewer/cli/health.ts +256 -0
- package/src/viewer/cli/index.ts +33 -0
- package/src/viewer/cli/scan.ts +124 -0
- package/src/viewer/cli/utils.ts +174 -0
- package/src/viewer/components/AccessibilityPanel.tsx +1404 -0
- package/src/viewer/components/ActionCapture.tsx +172 -0
- package/src/viewer/components/ActionsPanel.tsx +371 -0
- package/src/viewer/components/App.tsx +638 -0
- package/src/viewer/components/BottomPanel.tsx +224 -0
- package/src/viewer/components/CodePanel.tsx +589 -0
- package/src/viewer/components/CommandPalette.tsx +336 -0
- package/src/viewer/components/ComponentGraph.tsx +394 -0
- package/src/viewer/components/ComponentHeader.tsx +85 -0
- package/src/viewer/components/ContractPanel.tsx +234 -0
- package/src/viewer/components/ErrorBoundary.tsx +85 -0
- package/src/viewer/components/FigmaEmbed.tsx +231 -0
- package/src/viewer/components/FragmentEditor.tsx +485 -0
- package/src/viewer/components/HealthDashboard.tsx +452 -0
- package/src/viewer/components/HmrStatusIndicator.tsx +71 -0
- package/src/viewer/components/Icons.tsx +417 -0
- package/src/viewer/components/InteractionsPanel.tsx +720 -0
- package/src/viewer/components/IsolatedPreviewFrame.tsx +321 -0
- package/src/viewer/components/IsolatedRender.tsx +111 -0
- package/src/viewer/components/KeyboardShortcutsHelp.tsx +89 -0
- package/src/viewer/components/LandingPage.tsx +441 -0
- package/src/viewer/components/Layout.tsx +22 -0
- package/src/viewer/components/LeftSidebar.tsx +391 -0
- package/src/viewer/components/MultiViewportPreview.tsx +429 -0
- package/src/viewer/components/PreviewArea.tsx +404 -0
- package/src/viewer/components/PreviewFrameHost.tsx +310 -0
- package/src/viewer/components/PreviewPane.tsx +150 -0
- package/src/viewer/components/PreviewToolbar.tsx +176 -0
- package/src/viewer/components/PropsEditor.tsx +512 -0
- package/src/viewer/components/PropsTable.tsx +98 -0
- package/src/viewer/components/RelationsSection.tsx +57 -0
- package/src/viewer/components/ResizablePanel.tsx +328 -0
- package/src/viewer/components/RightSidebar.tsx +118 -0
- package/src/viewer/components/ScreenshotButton.tsx +90 -0
- package/src/viewer/components/Sidebar.tsx +169 -0
- package/src/viewer/components/SkeletonLoader.tsx +156 -0
- package/src/viewer/components/StoryRenderer.tsx +128 -0
- package/src/viewer/components/ThemeProvider.tsx +96 -0
- package/src/viewer/components/Toast.tsx +67 -0
- package/src/viewer/components/TokenStylePanel.tsx +708 -0
- package/src/viewer/components/UsageSection.tsx +95 -0
- package/src/viewer/components/VariantMatrix.tsx +350 -0
- package/src/viewer/components/VariantRenderer.tsx +131 -0
- package/src/viewer/components/VariantTabs.tsx +84 -0
- package/src/viewer/components/ViewportSelector.tsx +165 -0
- package/src/viewer/components/_future/CreatePage.tsx +836 -0
- package/src/viewer/composition-renderer.ts +381 -0
- package/src/viewer/constants/index.ts +1 -0
- package/src/viewer/constants/ui.ts +185 -0
- package/src/viewer/entry.tsx +299 -0
- package/src/viewer/hooks/index.ts +2 -0
- package/src/viewer/hooks/useA11yCache.ts +383 -0
- package/src/viewer/hooks/useA11yService.ts +498 -0
- package/src/viewer/hooks/useActions.ts +138 -0
- package/src/viewer/hooks/useAppState.ts +124 -0
- package/src/viewer/hooks/useFigmaIntegration.ts +132 -0
- package/src/viewer/hooks/useHmrStatus.ts +109 -0
- package/src/viewer/hooks/useKeyboardShortcuts.ts +222 -0
- package/src/viewer/hooks/usePreviewBridge.ts +347 -0
- package/src/viewer/hooks/useScrollSpy.ts +78 -0
- package/src/viewer/hooks/useUrlState.ts +330 -0
- package/src/viewer/hooks/useViewSettings.ts +125 -0
- package/src/viewer/index.html +28 -0
- package/src/viewer/index.ts +14 -0
- package/src/viewer/intelligence/healthReport.ts +505 -0
- package/src/viewer/intelligence/styleDrift.ts +340 -0
- package/src/viewer/intelligence/usageScanner.ts +309 -0
- package/src/viewer/jsx-parser.ts +485 -0
- package/src/viewer/postcss.config.js +6 -0
- package/src/viewer/preview-frame-entry.tsx +25 -0
- package/src/viewer/preview-frame.html +109 -0
- package/src/viewer/render-template.html +68 -0
- package/src/viewer/render-utils.ts +170 -0
- package/src/viewer/server.ts +276 -0
- package/src/viewer/style-utils.ts +414 -0
- package/src/viewer/styles/globals.css +355 -0
- package/src/viewer/tailwind.config.js +37 -0
- package/src/viewer/types/a11y.ts +197 -0
- package/src/viewer/utils/a11y-fixes.ts +471 -0
- package/src/viewer/utils/actionExport.ts +372 -0
- package/src/viewer/utils/colorSchemes.ts +201 -0
- package/src/viewer/utils/detectRelationships.ts +256 -0
- package/src/viewer/vite-plugin.ts +2143 -0
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* fragments context - Generate AI-ready context for your design system
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { readFile } from 'node:fs/promises';
|
|
6
|
+
import { resolve } from 'node:path';
|
|
7
|
+
import pc from 'picocolors';
|
|
8
|
+
import { generateContext } from '../core/index.js';
|
|
9
|
+
import type { CompiledSegment, CompiledSegmentsFile } from '../core/index.js';
|
|
10
|
+
import { loadConfig } from '../core/node.js';
|
|
11
|
+
import { buildSegments } from '../build.js';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Options for context command
|
|
15
|
+
*/
|
|
16
|
+
export interface ContextOptions {
|
|
17
|
+
/** Path to config file */
|
|
18
|
+
config?: string;
|
|
19
|
+
/** Path to segments.json (builds if not provided) */
|
|
20
|
+
input?: string;
|
|
21
|
+
/** Output format (markdown/json) */
|
|
22
|
+
format?: 'markdown' | 'json';
|
|
23
|
+
/** Minimal output for token efficiency */
|
|
24
|
+
compact?: boolean;
|
|
25
|
+
/** Include code examples */
|
|
26
|
+
includeCode?: boolean;
|
|
27
|
+
/** Include component relationships */
|
|
28
|
+
includeRelations?: boolean;
|
|
29
|
+
/** Only output token estimate */
|
|
30
|
+
tokensOnly?: boolean;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Result of context command
|
|
35
|
+
*/
|
|
36
|
+
export interface ContextResult {
|
|
37
|
+
success: boolean;
|
|
38
|
+
content?: string;
|
|
39
|
+
tokenEstimate: number;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Run the context command
|
|
44
|
+
*/
|
|
45
|
+
export async function context(options: ContextOptions = {}): Promise<ContextResult> {
|
|
46
|
+
const {
|
|
47
|
+
format = 'markdown',
|
|
48
|
+
compact = false,
|
|
49
|
+
includeCode = false,
|
|
50
|
+
includeRelations = false,
|
|
51
|
+
tokensOnly = false,
|
|
52
|
+
} = options;
|
|
53
|
+
|
|
54
|
+
let segments: CompiledSegment[];
|
|
55
|
+
|
|
56
|
+
if (options.input) {
|
|
57
|
+
// Read from existing segments.json
|
|
58
|
+
const inputPath = resolve(process.cwd(), options.input);
|
|
59
|
+
const content = await readFile(inputPath, 'utf-8');
|
|
60
|
+
const data: CompiledSegmentsFile = JSON.parse(content);
|
|
61
|
+
segments = Object.values(data.segments);
|
|
62
|
+
} else {
|
|
63
|
+
// Build segments on the fly
|
|
64
|
+
const { config, configDir } = await loadConfig(options.config);
|
|
65
|
+
const result = await buildSegments(config, configDir);
|
|
66
|
+
|
|
67
|
+
if (result.errors.length > 0 && result.segmentCount === 0) {
|
|
68
|
+
console.error(pc.red('Error: No segments found. Run `segments build` first or fix errors.'));
|
|
69
|
+
return { success: false, tokenEstimate: 0 };
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Read the generated file
|
|
73
|
+
const content = await readFile(result.outputPath, 'utf-8');
|
|
74
|
+
const data: CompiledSegmentsFile = JSON.parse(content);
|
|
75
|
+
segments = Object.values(data.segments);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
if (segments.length === 0) {
|
|
79
|
+
console.error(pc.red('No segments found.'));
|
|
80
|
+
return { success: false, tokenEstimate: 0 };
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const { content, tokenEstimate } = generateContext(segments, {
|
|
84
|
+
format,
|
|
85
|
+
compact,
|
|
86
|
+
include: {
|
|
87
|
+
code: includeCode,
|
|
88
|
+
relations: includeRelations,
|
|
89
|
+
},
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
if (tokensOnly) {
|
|
93
|
+
console.log(`Estimated tokens: ${tokenEstimate}`);
|
|
94
|
+
} else {
|
|
95
|
+
// Output to stdout (pipeable to file)
|
|
96
|
+
console.log(content);
|
|
97
|
+
|
|
98
|
+
// Print token estimate to stderr so it doesn't interfere with piped output
|
|
99
|
+
console.error(pc.dim(`\n[${tokenEstimate} tokens estimated]`));
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return {
|
|
103
|
+
success: true,
|
|
104
|
+
content,
|
|
105
|
+
tokenEstimate,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* fragments dev - Start the development server with live component rendering
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import pc from 'picocolors';
|
|
6
|
+
import { BRAND } from '../core/index.js';
|
|
7
|
+
import { runSetup } from '../setup.js';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Options for dev command
|
|
11
|
+
*/
|
|
12
|
+
export interface DevOptions {
|
|
13
|
+
/** Port to run on */
|
|
14
|
+
port?: number | string;
|
|
15
|
+
/** Do not open browser */
|
|
16
|
+
open?: boolean;
|
|
17
|
+
/** Skip auto-setup (Storybook import, build, Figma link) */
|
|
18
|
+
skipSetup?: boolean;
|
|
19
|
+
/** Skip auto-importing from Storybook */
|
|
20
|
+
skipStorybook?: boolean;
|
|
21
|
+
/** Skip Figma link check */
|
|
22
|
+
skipFigma?: boolean;
|
|
23
|
+
/** Skip auto-building fragments.json */
|
|
24
|
+
skipBuild?: boolean;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Result of dev command
|
|
29
|
+
*/
|
|
30
|
+
export interface DevResult {
|
|
31
|
+
success: boolean;
|
|
32
|
+
port?: number;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Run the dev command
|
|
37
|
+
*/
|
|
38
|
+
export async function dev(options: DevOptions = {}): Promise<DevResult> {
|
|
39
|
+
const {
|
|
40
|
+
port = 6006,
|
|
41
|
+
open = true,
|
|
42
|
+
skipSetup = false,
|
|
43
|
+
skipStorybook = false,
|
|
44
|
+
skipFigma = false,
|
|
45
|
+
skipBuild = false,
|
|
46
|
+
} = options;
|
|
47
|
+
|
|
48
|
+
console.log(pc.cyan(`\n${BRAND.name} Dev Server\n`));
|
|
49
|
+
|
|
50
|
+
// Run auto-setup unless skipped
|
|
51
|
+
if (!skipSetup) {
|
|
52
|
+
const setupResult = await runSetup({
|
|
53
|
+
skipStorybook,
|
|
54
|
+
skipFigma,
|
|
55
|
+
skipBuild,
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
// Show errors if any
|
|
59
|
+
if (setupResult.errors.length > 0) {
|
|
60
|
+
console.log(pc.yellow('\n Setup completed with warnings:'));
|
|
61
|
+
for (const error of setupResult.errors) {
|
|
62
|
+
console.log(pc.dim(` ${error}`));
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Import viewer directly (it's a dependency of CLI)
|
|
68
|
+
const { createDevServer } = await import('../viewer/index.js');
|
|
69
|
+
|
|
70
|
+
console.log(pc.dim('\nStarting dev server...'));
|
|
71
|
+
|
|
72
|
+
const parsedPort = typeof port === 'string' ? parseInt(port, 10) : port;
|
|
73
|
+
|
|
74
|
+
try {
|
|
75
|
+
const server = await createDevServer({
|
|
76
|
+
port: parsedPort,
|
|
77
|
+
open,
|
|
78
|
+
projectRoot: process.cwd(),
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
const address = server.httpServer?.address();
|
|
82
|
+
const actualPort =
|
|
83
|
+
typeof address === 'object' && address ? address.port : parsedPort;
|
|
84
|
+
|
|
85
|
+
console.log(pc.green(`\n Viewer running at http://localhost:${actualPort}/fragments/\n`));
|
|
86
|
+
console.log(pc.dim('Press Ctrl+C to stop\n'));
|
|
87
|
+
|
|
88
|
+
return {
|
|
89
|
+
success: true,
|
|
90
|
+
port: typeof actualPort === 'number' ? actualPort : parseInt(String(actualPort), 10),
|
|
91
|
+
};
|
|
92
|
+
} catch (error) {
|
|
93
|
+
const errMsg = error instanceof Error ? error.message : String(error);
|
|
94
|
+
|
|
95
|
+
if (errMsg.includes('EADDRINUSE') || errMsg.includes('address already in use')) {
|
|
96
|
+
console.error(pc.red(`\n Port ${parsedPort} is already in use.`));
|
|
97
|
+
console.error(pc.dim(` Try a different port: ${BRAND.cliCommand} dev --port ${parsedPort + 1}\n`));
|
|
98
|
+
} else if (errMsg.includes('EACCES')) {
|
|
99
|
+
console.error(pc.red(`\n Permission denied for port ${parsedPort}.`));
|
|
100
|
+
console.error(pc.dim(` Try a port above 1024: ${BRAND.cliCommand} dev --port 6006\n`));
|
|
101
|
+
} else {
|
|
102
|
+
console.error(pc.red(`\n Failed to start dev server: ${errMsg}\n`));
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
return { success: false };
|
|
106
|
+
}
|
|
107
|
+
}
|