@linktr.ee/linkapp 0.0.21 → 0.0.23
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/dev-server/README.md +5 -5
- package/dev-server/components/SettingsPreview.tsx +330 -0
- package/dev-server/components/ui/dialog.tsx +6 -3
- package/dev-server/env.d.ts +8 -0
- package/dev-server/featured/main.tsx +48 -43
- package/dev-server/featured.html +21 -35
- package/dev-server/index.html +8 -1
- package/dev-server/lib/utils.ts +6 -0
- package/dev-server/package-lock.json +245 -287
- package/dev-server/package.json +7 -4
- package/dev-server/postcss/tailwind-source-fallback.js +94 -0
- package/dev-server/postcss.config.mjs +30 -0
- package/dev-server/preview/Preview.tsx +182 -381
- package/dev-server/preview/preview.css +22 -34
- package/dev-server/public/apple-touch-icon.png +0 -0
- package/dev-server/public/favicon-96x96.png +0 -0
- package/dev-server/public/favicon.ico +0 -0
- package/dev-server/public/favicon.svg +6 -0
- package/dev-server/public/site.webmanifest +21 -0
- package/dev-server/public/web-app-manifest-192x192.png +0 -0
- package/dev-server/public/web-app-manifest-512x512.png +0 -0
- package/dev-server/rsbuild.config.ts +45 -0
- package/dev-server/shared/theme-presets.ts +315 -0
- package/dev-server/shared/theme-utils.ts +38 -0
- package/dev-server/sheet/main.tsx +44 -0
- package/dev-server/sheet.html +56 -0
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +20 -12
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +55 -36
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +74 -59
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +564 -43
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +19 -9
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.d.ts.map +1 -1
- package/dist/commands/logout.js +9 -4
- package/dist/commands/logout.js.map +1 -1
- package/dist/commands/test-url-match-rules.d.ts.map +1 -1
- package/dist/commands/test-url-match-rules.js +24 -13
- package/dist/commands/test-url-match-rules.js.map +1 -1
- package/dist/components/index.d.ts +0 -1
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +2 -1
- package/dist/components/index.js.map +1 -1
- package/dist/lib/auth/device-flow.d.ts +1 -6
- package/dist/lib/auth/device-flow.d.ts.map +1 -1
- package/dist/lib/auth/device-flow.js +3 -9
- package/dist/lib/auth/device-flow.js.map +1 -1
- package/dist/lib/auth/token-storage.d.ts +0 -5
- package/dist/lib/auth/token-storage.d.ts.map +1 -1
- package/dist/lib/auth/token-storage.js +16 -14
- package/dist/lib/auth/token-storage.js.map +1 -1
- package/dist/lib/build/detect-layouts.d.ts +1 -1
- package/dist/lib/build/detect-layouts.d.ts.map +1 -1
- package/dist/lib/build/detect-layouts.js +8 -7
- package/dist/lib/build/detect-layouts.js.map +1 -1
- package/dist/lib/deploy/generate-manifest-files.js +1 -1
- package/dist/lib/deploy/generate-manifest-files.js.map +1 -1
- package/dist/lib/deploy/pack-project.js +2 -2
- package/dist/lib/deploy/pack-project.js.map +1 -1
- package/dist/lib/deploy/test-url-match-rules.d.ts +2 -1
- package/dist/lib/deploy/test-url-match-rules.d.ts.map +1 -1
- package/dist/lib/deploy/test-url-match-rules.js +1 -1
- package/dist/lib/deploy/test-url-match-rules.js.map +1 -1
- package/dist/lib/deploy/upload.d.ts.map +1 -1
- package/dist/lib/deploy/upload.js +7 -3
- package/dist/lib/deploy/upload.js.map +1 -1
- package/dist/lib/deploy/validation.d.ts.map +1 -1
- package/dist/lib/deploy/validation.js +8 -5
- package/dist/lib/deploy/validation.js.map +1 -1
- package/dist/lib/rsbuild/config-factory.d.ts +24 -0
- package/dist/lib/rsbuild/config-factory.d.ts.map +1 -0
- package/dist/lib/rsbuild/config-factory.js +135 -0
- package/dist/lib/rsbuild/config-factory.js.map +1 -0
- package/dist/lib/rsbuild/plugins/asset-versioning.d.ts +11 -0
- package/dist/lib/rsbuild/plugins/asset-versioning.d.ts.map +1 -0
- package/dist/lib/rsbuild/plugins/asset-versioning.js +62 -0
- package/dist/lib/rsbuild/plugins/asset-versioning.js.map +1 -0
- package/dist/lib/rsbuild/plugins/copy-public.d.ts +11 -0
- package/dist/lib/rsbuild/plugins/copy-public.d.ts.map +1 -0
- package/dist/lib/rsbuild/plugins/copy-public.js +32 -0
- package/dist/lib/rsbuild/plugins/copy-public.js.map +1 -0
- package/dist/lib/rsbuild/postcss/tailwind-source-fallback.d.ts +12 -0
- package/dist/lib/rsbuild/postcss/tailwind-source-fallback.d.ts.map +1 -0
- package/dist/lib/rsbuild/postcss/tailwind-source-fallback.js +60 -0
- package/dist/lib/rsbuild/postcss/tailwind-source-fallback.js.map +1 -0
- package/dist/lib/utils/setup-runtime.d.ts.map +1 -1
- package/dist/lib/utils/setup-runtime.js +78 -17
- package/dist/lib/utils/setup-runtime.js.map +1 -1
- package/dist/lib/vite/config-factory.d.ts.map +1 -1
- package/dist/lib/vite/config-factory.js +8 -3
- package/dist/lib/vite/config-factory.js.map +1 -1
- package/dist/lib/vite/plugins/copy-public.d.ts +12 -0
- package/dist/lib/vite/plugins/copy-public.d.ts.map +1 -0
- package/dist/lib/vite/plugins/copy-public.js +31 -0
- package/dist/lib/vite/plugins/copy-public.js.map +1 -0
- package/dist/schema/config.schema.d.ts +121 -32
- package/dist/schema/config.schema.d.ts.map +1 -1
- package/dist/schema/config.schema.js +28 -17
- package/dist/schema/config.schema.js.map +1 -1
- package/dist/types.d.ts +6 -57
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +7 -4
- package/runtime/index.html +19 -36
- package/dev-server/classic/main.tsx +0 -62
- package/dev-server/classic.html +0 -70
- package/dev-server/vite.config.ts +0 -29
package/dist/commands/dev.js
CHANGED
|
@@ -1,77 +1,598 @@
|
|
|
1
1
|
import pc from 'picocolors';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { createRsbuild, logger } from '@rsbuild/core';
|
|
3
|
+
import { pluginReact } from '@rsbuild/plugin-react';
|
|
4
|
+
import { dirname, resolve, join, extname, relative, sep } from 'node:path';
|
|
4
5
|
import { fileURLToPath } from 'node:url';
|
|
5
|
-
import { validateLayouts } from '../lib/build/detect-layouts.js';
|
|
6
|
+
import { validateLayouts, detectLayouts } from '../lib/build/detect-layouts.js';
|
|
6
7
|
import { loadConfig } from '../lib/config/load-config.js';
|
|
8
|
+
import { detect } from 'detect-port';
|
|
9
|
+
import { existsSync, readFileSync, statSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
10
|
+
import chokidar from 'chokidar';
|
|
11
|
+
const writeLine = (message = '') => {
|
|
12
|
+
process.stdout.write(`${message}\n`);
|
|
13
|
+
};
|
|
7
14
|
const __filename = fileURLToPath(import.meta.url);
|
|
8
15
|
const __dirname = dirname(__filename);
|
|
16
|
+
/**
|
|
17
|
+
* Creates an Rsbuild plugin that watches linkapp.config.ts for changes
|
|
18
|
+
* and triggers a full page reload when the config is updated
|
|
19
|
+
*/
|
|
20
|
+
function createConfigWatcherPlugin(userProjectPath) {
|
|
21
|
+
const configCandidates = [
|
|
22
|
+
join(userProjectPath, 'linkapp.config.ts'),
|
|
23
|
+
join(userProjectPath, '.config', 'linkapp.config.ts'),
|
|
24
|
+
];
|
|
25
|
+
const handleConfigReload = (server) => {
|
|
26
|
+
writeLine(pc.cyan(' ○ linkapp.config.ts changed, reloading...'));
|
|
27
|
+
try {
|
|
28
|
+
loadConfig(userProjectPath);
|
|
29
|
+
server.sockWrite('static-changed');
|
|
30
|
+
writeLine(pc.green(' ✓ Config reloaded'));
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
writeLine(pc.red(' ✗ Failed to reload config'));
|
|
34
|
+
writeLine(pc.dim(` ${error instanceof Error ? error.message : error}`));
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
return {
|
|
38
|
+
name: 'linkapp-config-watcher',
|
|
39
|
+
setup(api) {
|
|
40
|
+
let watchers = [];
|
|
41
|
+
const pendingTimers = new Map();
|
|
42
|
+
const disposeWatchers = async () => {
|
|
43
|
+
for (const watcher of watchers) {
|
|
44
|
+
try {
|
|
45
|
+
await watcher.close();
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
writeLine(pc.red(' ✗ Failed to close config watcher'));
|
|
49
|
+
writeLine(pc.dim(` ${error instanceof Error ? error.message : error}`));
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
watchers = [];
|
|
53
|
+
for (const timeout of pendingTimers.values()) {
|
|
54
|
+
clearTimeout(timeout);
|
|
55
|
+
}
|
|
56
|
+
pendingTimers.clear();
|
|
57
|
+
};
|
|
58
|
+
api.onBeforeStartDevServer(async ({ server }) => {
|
|
59
|
+
await disposeWatchers();
|
|
60
|
+
const filesToWatch = configCandidates.filter((candidatePath) => existsSync(candidatePath));
|
|
61
|
+
if (filesToWatch.length === 0) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
const scheduleReload = (targetPath) => {
|
|
65
|
+
const normalizedPath = targetPath.toString();
|
|
66
|
+
const existingTimeout = pendingTimers.get(normalizedPath);
|
|
67
|
+
if (existingTimeout) {
|
|
68
|
+
clearTimeout(existingTimeout);
|
|
69
|
+
}
|
|
70
|
+
const timeout = setTimeout(() => {
|
|
71
|
+
pendingTimers.delete(normalizedPath);
|
|
72
|
+
handleConfigReload(server);
|
|
73
|
+
}, 120);
|
|
74
|
+
pendingTimers.set(normalizedPath, timeout);
|
|
75
|
+
};
|
|
76
|
+
try {
|
|
77
|
+
const watcher = chokidar.watch(filesToWatch, {
|
|
78
|
+
ignoreInitial: true,
|
|
79
|
+
awaitWriteFinish: {
|
|
80
|
+
stabilityThreshold: 200,
|
|
81
|
+
pollInterval: 50,
|
|
82
|
+
},
|
|
83
|
+
});
|
|
84
|
+
watcher.on('all', (event, changedPath) => {
|
|
85
|
+
if (!changedPath) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const normalizedChangedPath = changedPath.toString();
|
|
89
|
+
if (!configCandidates.includes(normalizedChangedPath)) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
switch (event) {
|
|
93
|
+
case 'add':
|
|
94
|
+
case 'change':
|
|
95
|
+
case 'unlink':
|
|
96
|
+
scheduleReload(normalizedChangedPath);
|
|
97
|
+
break;
|
|
98
|
+
default:
|
|
99
|
+
break;
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
watcher.on('error', (error) => {
|
|
103
|
+
writeLine(pc.red(' ✗ Config watcher encountered an error'));
|
|
104
|
+
writeLine(pc.dim(` ${error instanceof Error ? error.message : error}`));
|
|
105
|
+
});
|
|
106
|
+
watchers.push(watcher);
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
writeLine(pc.red(' ✗ Failed to watch config file'));
|
|
110
|
+
writeLine(pc.dim(` ${error instanceof Error ? error.message : error}`));
|
|
111
|
+
}
|
|
112
|
+
return async () => {
|
|
113
|
+
await disposeWatchers();
|
|
114
|
+
};
|
|
115
|
+
});
|
|
116
|
+
api.onCloseDevServer(async () => {
|
|
117
|
+
await disposeWatchers();
|
|
118
|
+
});
|
|
119
|
+
},
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Creates middleware to serve static assets from the user's public directory
|
|
124
|
+
* while matching the legacy Vite dev server behavior.
|
|
125
|
+
*/
|
|
126
|
+
function createPublicDirPlugin(userPublicDir) {
|
|
127
|
+
const contentTypes = {
|
|
128
|
+
css: 'text/css',
|
|
129
|
+
gif: 'image/gif',
|
|
130
|
+
html: 'text/html',
|
|
131
|
+
ico: 'image/x-icon',
|
|
132
|
+
jpeg: 'image/jpeg',
|
|
133
|
+
jpg: 'image/jpeg',
|
|
134
|
+
js: 'application/javascript',
|
|
135
|
+
json: 'application/json',
|
|
136
|
+
png: 'image/png',
|
|
137
|
+
svg: 'image/svg+xml',
|
|
138
|
+
txt: 'text/plain',
|
|
139
|
+
webp: 'image/webp',
|
|
140
|
+
};
|
|
141
|
+
return {
|
|
142
|
+
name: 'linkapp:public-dir',
|
|
143
|
+
setup(api) {
|
|
144
|
+
api.onBeforeStartDevServer(async ({ server }) => {
|
|
145
|
+
if (!existsSync(userPublicDir)) {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
const publicDirRoot = resolve(userPublicDir);
|
|
149
|
+
server.middlewares.use((req, res, next) => {
|
|
150
|
+
if (!req.url) {
|
|
151
|
+
next();
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
const method = req.method ?? 'GET';
|
|
155
|
+
if (method !== 'GET' && method !== 'HEAD') {
|
|
156
|
+
next();
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
const [rawPath] = req.url.split('?');
|
|
160
|
+
if (!rawPath || rawPath === '/' || rawPath === '') {
|
|
161
|
+
next();
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
let decodedPath;
|
|
165
|
+
try {
|
|
166
|
+
decodedPath = decodeURIComponent(rawPath);
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
next();
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
const normalizedPath = decodedPath.startsWith('/') ? decodedPath : `/${decodedPath}`;
|
|
173
|
+
const targetPath = resolve(publicDirRoot, `.${normalizedPath}`);
|
|
174
|
+
const relativePath = relative(publicDirRoot, targetPath);
|
|
175
|
+
if (relativePath.startsWith('..') ||
|
|
176
|
+
relativePath.includes(`..${sep}`) ||
|
|
177
|
+
targetPath === publicDirRoot) {
|
|
178
|
+
next();
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
let stats;
|
|
182
|
+
try {
|
|
183
|
+
stats = statSync(targetPath);
|
|
184
|
+
}
|
|
185
|
+
catch {
|
|
186
|
+
next();
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
if (!stats.isFile()) {
|
|
190
|
+
next();
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
const extension = extname(targetPath).slice(1).toLowerCase();
|
|
194
|
+
const contentType = (extension && contentTypes[extension]) || 'application/octet-stream';
|
|
195
|
+
res.setHeader('Content-Type', contentType);
|
|
196
|
+
res.setHeader('Cache-Control', 'no-cache');
|
|
197
|
+
if (method === 'HEAD') {
|
|
198
|
+
res.end();
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
try {
|
|
202
|
+
const content = readFileSync(targetPath);
|
|
203
|
+
res.end(content);
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
next(error);
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
},
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Generates the sheet entry point dynamically
|
|
215
|
+
*/
|
|
216
|
+
function generateSheetEntryPoint(devServerPath) {
|
|
217
|
+
// Use absolute paths to shared theme files in the dev-server directory
|
|
218
|
+
const themePresetsPath = resolve(devServerPath, 'shared/theme-presets');
|
|
219
|
+
const themeUtilsPath = resolve(devServerPath, 'shared/theme-utils');
|
|
220
|
+
return `import Sheet from "@/app/sheet";
|
|
221
|
+
import { StrictMode } from "react";
|
|
222
|
+
import { createRoot } from "react-dom/client";
|
|
223
|
+
import "@/app/globals.css";
|
|
224
|
+
import { THEME_PRESETS } from "${themePresetsPath}";
|
|
225
|
+
import { getThemeFromUrl, mergeThemeProps } from "${themeUtilsPath}";
|
|
226
|
+
|
|
227
|
+
// Declare global window property for theme application
|
|
228
|
+
declare global {
|
|
229
|
+
interface Window {
|
|
230
|
+
__linkapp_applyTheme?: (variables: Record<string, string>) => void
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
// Preview props injected by dev server via Vite define
|
|
235
|
+
declare const __PREVIEW_PROPS__: Record<string, unknown>;
|
|
236
|
+
|
|
237
|
+
// Extract just the variables from THEME_PRESETS for theme lookups
|
|
238
|
+
const THEME_VARS = Object.fromEntries(
|
|
239
|
+
Object.entries(THEME_PRESETS).map(([key, { variables }]) => [key, variables])
|
|
240
|
+
);
|
|
241
|
+
|
|
242
|
+
// Get theme variables from URL
|
|
243
|
+
const themeVariables = getThemeFromUrl(THEME_VARS);
|
|
244
|
+
|
|
245
|
+
// Merge with preview props
|
|
246
|
+
const previewProps = __PREVIEW_PROPS__ || {};
|
|
247
|
+
const mergedProps = mergeThemeProps(themeVariables, previewProps);
|
|
248
|
+
|
|
249
|
+
// Apply theme CSS variables on mount
|
|
250
|
+
if (themeVariables && window.__linkapp_applyTheme) {
|
|
251
|
+
window.__linkapp_applyTheme(themeVariables);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
const rootElement = document.getElementById("root");
|
|
255
|
+
if (!rootElement) {
|
|
256
|
+
throw new Error("Root element not found");
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
createRoot(rootElement).render(
|
|
260
|
+
<StrictMode>
|
|
261
|
+
<Sheet {...mergedProps} />
|
|
262
|
+
</StrictMode>,
|
|
263
|
+
);
|
|
264
|
+
`;
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Generates the featured entry point dynamically based on available layouts
|
|
268
|
+
*/
|
|
269
|
+
function generateFeaturedEntryPoint(devServerPath, hasFeaturedCarousel) {
|
|
270
|
+
// Use absolute paths to shared theme files in the dev-server directory
|
|
271
|
+
const themePresetsPath = resolve(devServerPath, 'shared/theme-presets');
|
|
272
|
+
const themeUtilsPath = resolve(devServerPath, 'shared/theme-utils');
|
|
273
|
+
const featuredCarouselImport = hasFeaturedCarousel
|
|
274
|
+
? `import FeaturedCarousel from "@/app/featured-carousel";`
|
|
275
|
+
: '';
|
|
276
|
+
const componentSelection = hasFeaturedCarousel
|
|
277
|
+
? `// Select the appropriate component based on groupLayoutOption parameter
|
|
278
|
+
const LayoutComponent = (groupLayoutOptionParam === 'carousel' && FeaturedCarousel)
|
|
279
|
+
? FeaturedCarousel
|
|
280
|
+
: Featured;
|
|
281
|
+
|
|
282
|
+
console.log('[Featured Dev Server] Rendering:', {
|
|
283
|
+
groupLayoutOption: groupLayoutOptionParam,
|
|
284
|
+
component: groupLayoutOptionParam === 'carousel' && FeaturedCarousel ? 'FeaturedCarousel' : 'Featured',
|
|
285
|
+
hasFeaturedCarousel: true,
|
|
286
|
+
});`
|
|
287
|
+
: `// Only Featured layout is available
|
|
288
|
+
const LayoutComponent = Featured;
|
|
289
|
+
|
|
290
|
+
console.log('[Featured Dev Server] Rendering:', {
|
|
291
|
+
groupLayoutOption: groupLayoutOptionParam,
|
|
292
|
+
component: 'Featured',
|
|
293
|
+
hasFeaturedCarousel: false,
|
|
294
|
+
});`;
|
|
295
|
+
return `import Featured from "@/app/featured";
|
|
296
|
+
${featuredCarouselImport}
|
|
297
|
+
import { StrictMode } from "react";
|
|
298
|
+
import { createRoot } from "react-dom/client";
|
|
299
|
+
import "@/app/globals.css";
|
|
300
|
+
import { THEME_PRESETS } from "${themePresetsPath}";
|
|
301
|
+
import { getThemeFromUrl, mergeThemeProps } from "${themeUtilsPath}";
|
|
302
|
+
|
|
303
|
+
// Declare global window property for theme application
|
|
304
|
+
declare global {
|
|
305
|
+
interface Window {
|
|
306
|
+
__linkapp_applyTheme?: (variables: Record<string, string>) => void
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
// Preview props injected by dev server via Vite define
|
|
311
|
+
declare const __PREVIEW_PROPS__: Record<string, unknown>;
|
|
312
|
+
|
|
313
|
+
// Extract just the variables from THEME_PRESETS for theme lookups
|
|
314
|
+
const THEME_VARS = Object.fromEntries(
|
|
315
|
+
Object.entries(THEME_PRESETS).map(([key, { variables }]) => [key, variables])
|
|
316
|
+
);
|
|
317
|
+
|
|
318
|
+
// Get theme variables and groupLayoutOption from URL
|
|
319
|
+
const params = new URLSearchParams(window.location.search);
|
|
320
|
+
const groupLayoutOptionParam = params.get('groupLayoutOption');
|
|
321
|
+
const themeVariables = getThemeFromUrl(THEME_VARS);
|
|
322
|
+
|
|
323
|
+
// Merge with preview props and add groupLayoutOption
|
|
324
|
+
const previewProps = __PREVIEW_PROPS__ || {};
|
|
325
|
+
const mergedProps = mergeThemeProps(themeVariables, previewProps, {
|
|
326
|
+
groupLayoutOption: groupLayoutOptionParam || undefined,
|
|
327
|
+
});
|
|
328
|
+
|
|
329
|
+
// Apply theme CSS variables on mount
|
|
330
|
+
if (themeVariables && window.__linkapp_applyTheme) {
|
|
331
|
+
window.__linkapp_applyTheme(themeVariables);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
const rootElement = document.getElementById("root");
|
|
335
|
+
if (!rootElement) {
|
|
336
|
+
throw new Error("Root element not found");
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
${componentSelection}
|
|
340
|
+
|
|
341
|
+
createRoot(rootElement).render(
|
|
342
|
+
<StrictMode>
|
|
343
|
+
<LayoutComponent {...mergedProps} />
|
|
344
|
+
</StrictMode>,
|
|
345
|
+
);
|
|
346
|
+
`;
|
|
347
|
+
}
|
|
9
348
|
export async function devCommand(options) {
|
|
10
349
|
const userProjectPath = process.cwd();
|
|
350
|
+
process.env.LINKAPP_USER_PROJECT_PATH = userProjectPath;
|
|
351
|
+
// Suppress Rsbuild's built-in logging messages
|
|
352
|
+
logger.override({
|
|
353
|
+
start: () => { }, // Suppress "start build started..." messages
|
|
354
|
+
ready: () => { }, // Suppress "ready built in..." messages
|
|
355
|
+
});
|
|
11
356
|
try {
|
|
12
357
|
const startTime = Date.now();
|
|
13
358
|
// Validate layouts exist
|
|
14
359
|
const validation = validateLayouts(userProjectPath);
|
|
15
360
|
if (!validation.valid) {
|
|
16
|
-
|
|
361
|
+
writeLine(pc.red('✗ Invalid project structure'));
|
|
17
362
|
for (const error of validation.errors) {
|
|
18
|
-
|
|
363
|
+
writeLine(pc.red(` ${error}`));
|
|
19
364
|
}
|
|
20
365
|
process.exit(1);
|
|
21
366
|
}
|
|
22
|
-
//
|
|
367
|
+
// Get dev server path (needed for generating entry points and later for Rsbuild config)
|
|
368
|
+
const devServerPath = resolve(__dirname, '../../dev-server');
|
|
369
|
+
// Detect available layouts for dynamic entry generation
|
|
370
|
+
const layoutDetection = detectLayouts(userProjectPath);
|
|
371
|
+
const hasFeaturedCarousel = layoutDetection.layouts.some(l => l.name === 'featured-carousel');
|
|
372
|
+
// Generate dynamic entry points in .linkapp directory
|
|
373
|
+
const linkappDir = join(userProjectPath, '.linkapp');
|
|
374
|
+
if (!existsSync(linkappDir)) {
|
|
375
|
+
mkdirSync(linkappDir, { recursive: true });
|
|
376
|
+
}
|
|
377
|
+
const sheetEntryPath = join(linkappDir, 'dev-sheet-main.tsx');
|
|
378
|
+
const featuredEntryPath = join(linkappDir, 'dev-featured-main.tsx');
|
|
379
|
+
writeFileSync(sheetEntryPath, generateSheetEntryPoint(devServerPath), 'utf-8');
|
|
380
|
+
writeFileSync(featuredEntryPath, generateFeaturedEntryPoint(devServerPath, hasFeaturedCarousel), 'utf-8');
|
|
381
|
+
// Load config and extract preview_props and settings
|
|
23
382
|
let previewProps = {};
|
|
383
|
+
let settingsConfig = {};
|
|
24
384
|
try {
|
|
25
385
|
const config = loadConfig(userProjectPath);
|
|
26
386
|
previewProps = config.preview_props || {};
|
|
387
|
+
settingsConfig = config.settings || {};
|
|
27
388
|
}
|
|
28
389
|
catch (error) {
|
|
29
|
-
|
|
30
|
-
|
|
390
|
+
writeLine(pc.yellow('⚠ Warning: Could not load config, using default preview props'));
|
|
391
|
+
writeLine(pc.dim(` ${error instanceof Error ? error.message : error}`));
|
|
31
392
|
}
|
|
32
|
-
const
|
|
33
|
-
const
|
|
34
|
-
//
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
393
|
+
const requestedPort = options.port || 3000;
|
|
394
|
+
const availablePort = await detect(requestedPort);
|
|
395
|
+
// Show warning if the requested port was occupied
|
|
396
|
+
if (requestedPort !== availablePort) {
|
|
397
|
+
writeLine(pc.yellow(` ⚠ Port ${requestedPort} is in use, using ${availablePort} instead`));
|
|
398
|
+
writeLine();
|
|
399
|
+
}
|
|
400
|
+
const port = availablePort;
|
|
401
|
+
const userPublicDir = join(userProjectPath, 'public');
|
|
402
|
+
const printReadyMessage = (readyTime, urls) => {
|
|
403
|
+
writeLine();
|
|
404
|
+
writeLine(pc.bold(pc.cyan(' LinkApp')) + pc.dim(' ready'));
|
|
405
|
+
writeLine();
|
|
406
|
+
if (urls.length > 0) {
|
|
407
|
+
writeLine(` ${pc.green('➜')} ${pc.bold('Local:')} ${pc.cyan(urls[0])}`);
|
|
408
|
+
}
|
|
409
|
+
writeLine();
|
|
410
|
+
writeLine(pc.green(` ✓ Ready in ${readyTime}s`));
|
|
411
|
+
};
|
|
412
|
+
const setupKeyboardShortcuts = (handlers) => {
|
|
413
|
+
if (!process.stdin.isTTY) {
|
|
414
|
+
return () => { };
|
|
415
|
+
}
|
|
416
|
+
const handleData = (data) => {
|
|
417
|
+
if (data === '\u0003') {
|
|
418
|
+
void handlers.exit();
|
|
419
|
+
return;
|
|
420
|
+
}
|
|
421
|
+
const key = data.trim().toLowerCase();
|
|
422
|
+
if (key === '') {
|
|
423
|
+
return;
|
|
424
|
+
}
|
|
425
|
+
switch (key) {
|
|
426
|
+
case 'r':
|
|
427
|
+
void handlers.restart();
|
|
428
|
+
break;
|
|
429
|
+
case 'u':
|
|
430
|
+
handlers.showUrls();
|
|
431
|
+
break;
|
|
432
|
+
case 'c':
|
|
433
|
+
handlers.clear();
|
|
434
|
+
break;
|
|
435
|
+
case 'q':
|
|
436
|
+
void handlers.exit();
|
|
437
|
+
break;
|
|
438
|
+
default:
|
|
439
|
+
break;
|
|
440
|
+
}
|
|
441
|
+
};
|
|
442
|
+
process.stdin.setRawMode(true);
|
|
443
|
+
process.stdin.resume();
|
|
444
|
+
process.stdin.setEncoding('utf8');
|
|
445
|
+
process.stdin.on('data', handleData);
|
|
446
|
+
return () => {
|
|
447
|
+
process.stdin.off('data', handleData);
|
|
448
|
+
if (process.stdin.isTTY) {
|
|
449
|
+
process.stdin.setRawMode(false);
|
|
450
|
+
}
|
|
451
|
+
process.stdin.pause();
|
|
452
|
+
};
|
|
453
|
+
};
|
|
454
|
+
// Create Rsbuild server - inject preview props directly via define
|
|
455
|
+
const rsbuild = await createRsbuild({
|
|
456
|
+
rsbuildConfig: {
|
|
457
|
+
dev: {
|
|
458
|
+
progressBar: false,
|
|
459
|
+
},
|
|
460
|
+
plugins: [
|
|
461
|
+
pluginReact(),
|
|
462
|
+
createConfigWatcherPlugin(userProjectPath),
|
|
463
|
+
createPublicDirPlugin(userPublicDir),
|
|
464
|
+
],
|
|
465
|
+
source: {
|
|
466
|
+
entry: {
|
|
467
|
+
index: resolve(devServerPath, 'preview/main.tsx'),
|
|
468
|
+
sheet: sheetEntryPath,
|
|
469
|
+
featured: featuredEntryPath,
|
|
470
|
+
},
|
|
471
|
+
define: {
|
|
472
|
+
__PREVIEW_PROPS__: JSON.stringify(previewProps),
|
|
473
|
+
__SETTINGS_CONFIG__: JSON.stringify(settingsConfig),
|
|
474
|
+
},
|
|
475
|
+
},
|
|
476
|
+
resolve: {
|
|
477
|
+
alias: {
|
|
478
|
+
'@': userProjectPath,
|
|
479
|
+
},
|
|
480
|
+
dedupe: ['react', 'react-dom'],
|
|
481
|
+
},
|
|
482
|
+
html: {
|
|
483
|
+
template({ entryName }) {
|
|
484
|
+
const templates = {
|
|
485
|
+
index: resolve(devServerPath, 'index.html'),
|
|
486
|
+
sheet: resolve(devServerPath, 'sheet.html'),
|
|
487
|
+
featured: resolve(devServerPath, 'featured.html'),
|
|
488
|
+
};
|
|
489
|
+
return templates[entryName] || resolve(devServerPath, 'index.html');
|
|
490
|
+
},
|
|
491
|
+
},
|
|
492
|
+
server: {
|
|
493
|
+
port,
|
|
494
|
+
host: 'localhost',
|
|
495
|
+
open: false,
|
|
496
|
+
strictPort: false,
|
|
497
|
+
printUrls: false,
|
|
498
|
+
publicDir: {
|
|
499
|
+
name: userPublicDir,
|
|
500
|
+
watch: true,
|
|
501
|
+
},
|
|
502
|
+
},
|
|
503
|
+
tools: {
|
|
504
|
+
postcss: (opts) => {
|
|
505
|
+
// Load PostCSS config from dev-server directory
|
|
506
|
+
opts.postcssOptions = {
|
|
507
|
+
...opts.postcssOptions,
|
|
508
|
+
config: resolve(devServerPath, 'postcss.config.mjs'),
|
|
509
|
+
};
|
|
510
|
+
return opts;
|
|
511
|
+
},
|
|
41
512
|
},
|
|
42
|
-
// Dedupe React to avoid "Invalid hook call" errors from multiple React instances
|
|
43
|
-
dedupe: ['react', 'react-dom'],
|
|
44
|
-
},
|
|
45
|
-
define: {
|
|
46
|
-
__PREVIEW_PROPS__: JSON.stringify(previewProps),
|
|
47
|
-
},
|
|
48
|
-
server: {
|
|
49
|
-
port,
|
|
50
|
-
host: 'localhost',
|
|
51
|
-
open: false,
|
|
52
|
-
strictPort: false,
|
|
53
513
|
},
|
|
54
|
-
logLevel: 'error',
|
|
55
514
|
});
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
515
|
+
let currentServer;
|
|
516
|
+
let cleanupShortcuts;
|
|
517
|
+
let isRestarting = false;
|
|
518
|
+
let isShuttingDown = false;
|
|
519
|
+
let currentUrls = [];
|
|
520
|
+
let lastReadyTime = '';
|
|
521
|
+
const startServer = async (startedAt) => {
|
|
522
|
+
const result = await rsbuild.startDevServer();
|
|
523
|
+
currentServer = result;
|
|
524
|
+
currentUrls = result.urls;
|
|
525
|
+
lastReadyTime = ((Date.now() - startedAt) / 1000).toFixed(1);
|
|
526
|
+
printReadyMessage(lastReadyTime, currentUrls);
|
|
527
|
+
};
|
|
528
|
+
const restartServer = async () => {
|
|
529
|
+
if (isShuttingDown || isRestarting || !currentServer) {
|
|
530
|
+
return;
|
|
531
|
+
}
|
|
532
|
+
isRestarting = true;
|
|
533
|
+
writeLine();
|
|
534
|
+
writeLine(pc.cyan(' ↻ Restarting dev server...'));
|
|
535
|
+
try {
|
|
536
|
+
await currentServer.server.close();
|
|
537
|
+
const restartStart = Date.now();
|
|
538
|
+
await startServer(restartStart);
|
|
539
|
+
}
|
|
540
|
+
catch (error) {
|
|
541
|
+
currentServer = undefined;
|
|
542
|
+
writeLine(pc.red('✗ Failed to restart dev server'));
|
|
543
|
+
writeLine(pc.dim(` ${error instanceof Error ? error.message : error}`));
|
|
544
|
+
}
|
|
545
|
+
finally {
|
|
546
|
+
isRestarting = false;
|
|
547
|
+
}
|
|
548
|
+
};
|
|
549
|
+
const showUrls = () => {
|
|
550
|
+
writeLine();
|
|
551
|
+
if (currentUrls.length > 0) {
|
|
552
|
+
writeLine(` ${pc.green('➜')} ${pc.bold('Local:')} ${pc.cyan(currentUrls[0])}`);
|
|
553
|
+
}
|
|
554
|
+
writeLine();
|
|
555
|
+
};
|
|
556
|
+
const clearConsole = () => {
|
|
557
|
+
console.clear();
|
|
558
|
+
if (lastReadyTime) {
|
|
559
|
+
printReadyMessage(lastReadyTime, currentUrls);
|
|
560
|
+
}
|
|
561
|
+
};
|
|
562
|
+
const shutdown = async () => {
|
|
563
|
+
if (isShuttingDown) {
|
|
564
|
+
return;
|
|
565
|
+
}
|
|
566
|
+
isShuttingDown = true;
|
|
567
|
+
cleanupShortcuts?.();
|
|
568
|
+
try {
|
|
569
|
+
if (currentServer) {
|
|
570
|
+
await currentServer.server.close();
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
catch (closeError) {
|
|
574
|
+
writeLine(pc.red('✗ Error while closing dev server'));
|
|
575
|
+
writeLine(pc.dim(` ${closeError instanceof Error ? closeError.message : closeError}`));
|
|
576
|
+
}
|
|
577
|
+
finally {
|
|
578
|
+
process.exit(0);
|
|
579
|
+
}
|
|
580
|
+
};
|
|
581
|
+
await startServer(startTime);
|
|
582
|
+
cleanupShortcuts = setupKeyboardShortcuts({
|
|
583
|
+
restart: restartServer,
|
|
584
|
+
showUrls,
|
|
585
|
+
clear: clearConsole,
|
|
586
|
+
exit: shutdown,
|
|
587
|
+
});
|
|
588
|
+
process.on('SIGINT', () => {
|
|
589
|
+
void shutdown();
|
|
69
590
|
});
|
|
70
591
|
// Keep alive
|
|
71
592
|
await new Promise(() => { });
|
|
72
593
|
}
|
|
73
594
|
catch (error) {
|
|
74
|
-
|
|
595
|
+
writeLine(pc.red('✗ Failed to start server'));
|
|
75
596
|
console.error(pc.red('✗ Error:'), error);
|
|
76
597
|
process.exit(1);
|
|
77
598
|
}
|
package/dist/commands/dev.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"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"}
|