@sp-days-framework/docusaurus-plugin-slidev 1.0.0

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.
Files changed (50) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +286 -0
  3. package/lib/index.d.ts +7 -0
  4. package/lib/index.d.ts.map +1 -0
  5. package/lib/index.js +14 -0
  6. package/lib/index.js.map +1 -0
  7. package/lib/plugin/builder.d.ts +31 -0
  8. package/lib/plugin/builder.d.ts.map +1 -0
  9. package/lib/plugin/builder.js +421 -0
  10. package/lib/plugin/builder.js.map +1 -0
  11. package/lib/plugin/index.d.ts +18 -0
  12. package/lib/plugin/index.d.ts.map +1 -0
  13. package/lib/plugin/index.js +148 -0
  14. package/lib/plugin/index.js.map +1 -0
  15. package/lib/plugin/scanner.d.ts +12 -0
  16. package/lib/plugin/scanner.d.ts.map +1 -0
  17. package/lib/plugin/scanner.js +119 -0
  18. package/lib/plugin/scanner.js.map +1 -0
  19. package/lib/theme/SlidevCard/index.d.ts +12 -0
  20. package/lib/theme/SlidevCard/index.d.ts.map +1 -0
  21. package/lib/theme/SlidevCard/index.js +74 -0
  22. package/lib/theme/SlidevCard/index.js.map +1 -0
  23. package/lib/theme/SlidevCard/styles.module.css +206 -0
  24. package/lib/theme/SlidevOverview/index.d.ts +6 -0
  25. package/lib/theme/SlidevOverview/index.d.ts.map +1 -0
  26. package/lib/theme/SlidevOverview/index.js +165 -0
  27. package/lib/theme/SlidevOverview/index.js.map +1 -0
  28. package/lib/theme/SlidevOverview/styles.module.css +283 -0
  29. package/lib/theme/SlidevPresentation/index.d.ts +6 -0
  30. package/lib/theme/SlidevPresentation/index.d.ts.map +1 -0
  31. package/lib/theme/SlidevPresentation/index.js +75 -0
  32. package/lib/theme/SlidevPresentation/index.js.map +1 -0
  33. package/lib/theme/SlidevPresentation/styles.module.css +178 -0
  34. package/lib/types/index.d.ts +171 -0
  35. package/lib/types/index.d.ts.map +1 -0
  36. package/lib/types/index.js +6 -0
  37. package/lib/types/index.js.map +1 -0
  38. package/lib/utils/fileSystem.d.ts +19 -0
  39. package/lib/utils/fileSystem.d.ts.map +1 -0
  40. package/lib/utils/fileSystem.js +89 -0
  41. package/lib/utils/fileSystem.js.map +1 -0
  42. package/lib/utils/icons.d.ts +23 -0
  43. package/lib/utils/icons.d.ts.map +1 -0
  44. package/lib/utils/icons.js +37 -0
  45. package/lib/utils/icons.js.map +1 -0
  46. package/lib/utils/logger.d.ts +43 -0
  47. package/lib/utils/logger.d.ts.map +1 -0
  48. package/lib/utils/logger.js +92 -0
  49. package/lib/utils/logger.js.map +1 -0
  50. package/package.json +75 -0
@@ -0,0 +1,421 @@
1
+ "use strict";
2
+ /**
3
+ * Builder utility for compiling Slidev presentations
4
+ */
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.buildPresentation = buildPresentation;
10
+ exports.buildAllPresentations = buildAllPresentations;
11
+ exports.checkSlidevInstalled = checkSlidevInstalled;
12
+ exports.diagnosePresentationIssues = diagnosePresentationIssues;
13
+ const child_process_1 = require("child_process");
14
+ const util_1 = require("util");
15
+ const path_1 = __importDefault(require("path"));
16
+ const fs_1 = __importDefault(require("fs"));
17
+ const logger_1 = require("../utils/logger");
18
+ const execAsync = (0, util_1.promisify)(child_process_1.exec);
19
+ /**
20
+ * Validates a presentation file before building
21
+ */
22
+ function validatePresentation(presentation) {
23
+ // Check if file exists
24
+ if (!fs_1.default.existsSync(presentation.sourceAbsolutePath)) {
25
+ return {
26
+ valid: false,
27
+ error: `Source file not found: ${presentation.sourceAbsolutePath}`,
28
+ };
29
+ }
30
+ // Check if file is readable
31
+ try {
32
+ fs_1.default.accessSync(presentation.sourceAbsolutePath, fs_1.default.constants.R_OK);
33
+ }
34
+ catch (error) {
35
+ return {
36
+ valid: false,
37
+ error: `Cannot read source file: ${presentation.sourceAbsolutePath}`,
38
+ };
39
+ }
40
+ // Check if file has content
41
+ const stats = fs_1.default.statSync(presentation.sourceAbsolutePath);
42
+ if (stats.size === 0) {
43
+ return {
44
+ valid: false,
45
+ error: "Source file is empty",
46
+ };
47
+ }
48
+ // Check if file contains at least one slide separator or frontmatter
49
+ const content = fs_1.default.readFileSync(presentation.sourceAbsolutePath, "utf-8");
50
+ const hasFrontmatter = content.trim().startsWith("---");
51
+ const hasSlides = content.includes("---") || content.length > 50; // Basic check
52
+ if (!hasFrontmatter && !hasSlides) {
53
+ return {
54
+ valid: false,
55
+ error: "File does not appear to be a valid Slidev presentation (no frontmatter or slides found)",
56
+ };
57
+ }
58
+ return { valid: true };
59
+ }
60
+ /**
61
+ * Checks if a theme is installed
62
+ * Returns { installed: boolean, theme: string, isScoped: boolean }
63
+ */
64
+ function checkThemeInstalled(themeName, siteDir) {
65
+ if (!themeName) {
66
+ // No theme specified, will use Slidev default
67
+ return { installed: true, theme: "default", isScoped: false };
68
+ }
69
+ const isScoped = themeName.startsWith("@");
70
+ const packageJsonPath = path_1.default.join(siteDir, "package.json");
71
+ try {
72
+ if (!fs_1.default.existsSync(packageJsonPath)) {
73
+ return {
74
+ installed: false,
75
+ theme: themeName,
76
+ isScoped,
77
+ error: "package.json not found",
78
+ };
79
+ }
80
+ const packageJson = JSON.parse(fs_1.default.readFileSync(packageJsonPath, "utf-8"));
81
+ const allDeps = {
82
+ ...packageJson.dependencies,
83
+ ...packageJson.devDependencies,
84
+ };
85
+ // Check if theme is in dependencies
86
+ const installed = themeName in allDeps;
87
+ return {
88
+ installed,
89
+ theme: themeName,
90
+ isScoped,
91
+ error: installed
92
+ ? undefined
93
+ : `Theme '${themeName}' not found in dependencies`,
94
+ };
95
+ }
96
+ catch (error) {
97
+ return {
98
+ installed: false,
99
+ theme: themeName,
100
+ isScoped,
101
+ error: `Failed to check theme: ${error}`,
102
+ };
103
+ }
104
+ }
105
+ /**
106
+ * Builds a single Slidev presentation with real-time output streaming
107
+ */
108
+ /**
109
+ * Builds a single Slidev presentation with real-time output streaming
110
+ */
111
+ async function buildPresentation(presentation, options, context) {
112
+ const startTime = Date.now();
113
+ try {
114
+ // Validate presentation before building
115
+ const validation = validatePresentation(presentation);
116
+ if (!validation.valid) {
117
+ throw new Error(validation.error);
118
+ }
119
+ // Determine which theme to use (presentation-specific or global)
120
+ const theme = presentation.theme || options.theme;
121
+ // Check if theme is installed
122
+ const themeCheck = checkThemeInstalled(theme, context.siteDir);
123
+ if (!themeCheck.installed && theme) {
124
+ (0, logger_1.logWarn)(`Theme '${theme}' not found in package.json for ${(0, logger_1.formatCode)(presentation.id)}`);
125
+ (0, logger_1.logWarn)(`Install with: npm install ${theme === "default" ? "@slidev/theme-default" : theme}`);
126
+ (0, logger_1.logWarn)("Build may hang or fail - Slidev doesn't exit properly when theme is missing");
127
+ }
128
+ // Build the base URL for the presentation
129
+ const baseUrl = context.baseUrl.endsWith("/")
130
+ ? context.baseUrl.slice(0, -1)
131
+ : context.baseUrl;
132
+ const base = `${baseUrl}/${options.outputDir}/${presentation.id}/`;
133
+ // Construct the slidev build command arguments
134
+ const args = [
135
+ "build",
136
+ presentation.sourceAbsolutePath,
137
+ "--out",
138
+ presentation.outputPath,
139
+ "--base",
140
+ base,
141
+ ];
142
+ if (theme) {
143
+ args.push("--theme", theme);
144
+ }
145
+ if (options.download) {
146
+ args.push("--download");
147
+ }
148
+ const timeoutMs = (options.buildTimeout || 60) * 1000;
149
+ if (options.verbose) {
150
+ (0, logger_1.logInfo)(`Command: slidev ${args.join(" ")}`);
151
+ (0, logger_1.logInfo)(`Working directory: ${(0, logger_1.formatPath)(context.siteDir)}`);
152
+ }
153
+ // Execute with spawn for real-time output and better control
154
+ const result = await new Promise((resolve) => {
155
+ const child = (0, child_process_1.spawn)("slidev", args, {
156
+ cwd: context.siteDir,
157
+ stdio: options.verbose ? "inherit" : "pipe",
158
+ });
159
+ let stdout = "";
160
+ let stderr = "";
161
+ let lastOutput = Date.now();
162
+ let timedOut = false;
163
+ let stallWarningShown = false;
164
+ let hasSeenBuildStart = false;
165
+ // Stall detection - check every 5 seconds if there's no activity
166
+ const stallCheckInterval = setInterval(() => {
167
+ const timeSinceLastOutput = (Date.now() - lastOutput) / 1000;
168
+ // If no output for 15 seconds and we haven't seen build start
169
+ if (timeSinceLastOutput > 15 &&
170
+ !hasSeenBuildStart &&
171
+ !stallWarningShown) {
172
+ stallWarningShown = true;
173
+ (0, logger_1.logWarn)(`No output for ${timeSinceLastOutput.toFixed(1)}s - Slidev may be stuck (likely missing theme or dependencies)`);
174
+ (0, logger_1.logWarn)("The process will timeout if no activity continues...");
175
+ }
176
+ }, 5000);
177
+ // Timeout handler
178
+ const timeout = setTimeout(() => {
179
+ timedOut = true;
180
+ clearInterval(stallCheckInterval);
181
+ child.kill("SIGTERM");
182
+ // Force kill after 5 seconds if not terminated
183
+ setTimeout(() => {
184
+ if (!child.killed) {
185
+ child.kill("SIGKILL");
186
+ }
187
+ }, 5000);
188
+ }, timeoutMs);
189
+ // Capture output for non-verbose mode
190
+ if (!options.verbose) {
191
+ child.stdout?.on("data", (data) => {
192
+ const output = data.toString();
193
+ stdout += output;
194
+ lastOutput = Date.now();
195
+ // Detect build start
196
+ if (output.includes("transforming") ||
197
+ output.includes("modules transformed") ||
198
+ output.includes("building")) {
199
+ hasSeenBuildStart = true;
200
+ }
201
+ // Show important progress messages
202
+ if (output.includes("✓") ||
203
+ output.includes("Building") ||
204
+ output.includes("Rendering") ||
205
+ output.includes("transforming")) {
206
+ process.stdout.write(` ${output.trim()}\n`);
207
+ }
208
+ });
209
+ child.stderr?.on("data", (data) => {
210
+ const output = data.toString();
211
+ stderr += output;
212
+ lastOutput = Date.now();
213
+ // Show errors and important warnings immediately
214
+ if (output.includes("error") ||
215
+ output.includes("Error") ||
216
+ output.includes("Failed") ||
217
+ output.includes("Cannot find module") ||
218
+ output.includes("ENOENT")) {
219
+ process.stderr.write(` ⚠️ ${output.trim()}\n`);
220
+ }
221
+ // Filter and show other warnings
222
+ const filtered = (0, logger_1.filterSlidevOutput)(output);
223
+ if (filtered && filtered.trim() && !output.includes("error")) {
224
+ process.stderr.write(` ${filtered.trim()}\n`);
225
+ }
226
+ });
227
+ }
228
+ child.on("error", (error) => {
229
+ clearTimeout(timeout);
230
+ clearInterval(stallCheckInterval);
231
+ resolve({
232
+ success: false,
233
+ error: `Failed to spawn slidev: ${error.message}`,
234
+ });
235
+ });
236
+ child.on("close", (code) => {
237
+ clearTimeout(timeout);
238
+ clearInterval(stallCheckInterval);
239
+ if (timedOut) {
240
+ const timeSinceLastOutput = ((Date.now() - lastOutput) /
241
+ 1000).toFixed(1);
242
+ const buildPhaseReached = hasSeenBuildStart
243
+ ? "reached build phase but"
244
+ : "never started building";
245
+ let errorMsg = `Build timed out after ${options.buildTimeout || 60}s (${buildPhaseReached}, last activity: ${timeSinceLastOutput}s ago)`;
246
+ // Add specific guidance if we never saw build start
247
+ if (!hasSeenBuildStart) {
248
+ errorMsg += `\n\nLikely causes:\n`;
249
+ errorMsg += ` - Missing or unresolvable theme\n`;
250
+ errorMsg += ` - Missing dependencies (npm install may be needed)\n`;
251
+ errorMsg += ` - Slidev stuck in dependency resolution\n`;
252
+ errorMsg += `\nCapture full output with 'verbose: true' in plugin config to see what's happening.`;
253
+ }
254
+ resolve({
255
+ success: false,
256
+ error: errorMsg,
257
+ });
258
+ }
259
+ else if (code !== 0) {
260
+ resolve({
261
+ success: false,
262
+ error: `Slidev exited with code ${code}\n${stderr || stdout}`,
263
+ });
264
+ }
265
+ else {
266
+ resolve({ success: true });
267
+ }
268
+ });
269
+ });
270
+ const duration = (Date.now() - startTime) / 1000;
271
+ if (!result.success) {
272
+ throw new Error(result.error);
273
+ }
274
+ return {
275
+ id: presentation.id,
276
+ success: true,
277
+ duration,
278
+ };
279
+ }
280
+ catch (error) {
281
+ const duration = (Date.now() - startTime) / 1000;
282
+ const errorMessage = error.message || String(error);
283
+ (0, logger_1.logError)(`Error building presentation ${(0, logger_1.formatCode)(presentation.id)}: ${errorMessage}`);
284
+ // Show diagnostics for failed builds
285
+ const issues = diagnosePresentationIssues(presentation, context.siteDir);
286
+ if (issues.length > 0) {
287
+ (0, logger_1.logWarn)(`Potential issues detected in ${(0, logger_1.formatCode)(presentation.id)}:`);
288
+ issues.forEach((issue) => (0, logger_1.logWarn)(` - ${issue}`));
289
+ }
290
+ return {
291
+ id: presentation.id,
292
+ success: false,
293
+ error: errorMessage,
294
+ duration,
295
+ };
296
+ }
297
+ }
298
+ /**
299
+ * Builds all presentations sequentially
300
+ * Returns array of build results
301
+ */
302
+ async function buildAllPresentations(presentations, options, context) {
303
+ const results = [];
304
+ // Build presentations sequentially (not in parallel)
305
+ for (let i = 0; i < presentations.length; i++) {
306
+ const presentation = presentations[i];
307
+ (0, logger_1.logInfo)(`[${i + 1}/${presentations.length}] Building: ${(0, logger_1.formatCode)(presentation.id)}`);
308
+ const result = await buildPresentation(presentation, options, context);
309
+ results.push(result);
310
+ // Add a small delay between builds to avoid resource contention
311
+ if (i < presentations.length - 1) {
312
+ await new Promise((resolve) => setTimeout(resolve, 500));
313
+ }
314
+ }
315
+ // Summary
316
+ const successful = results.filter((r) => r.success).length;
317
+ const failed = results.filter((r) => !r.success).length;
318
+ const totalTime = results.reduce((sum, r) => sum + (r.duration || 0), 0);
319
+ if (failed > 0) {
320
+ (0, logger_1.logWarn)(`Build complete: ${successful} successful, ${failed} failed (total: ${totalTime.toFixed(2)}s)`);
321
+ // Log individual failures
322
+ results
323
+ .filter((r) => !r.success)
324
+ .forEach((result) => {
325
+ (0, logger_1.logError)(`Failed: ${(0, logger_1.formatCode)(result.id)} - ${result.error}`);
326
+ });
327
+ }
328
+ else {
329
+ (0, logger_1.logSuccess)(`All presentations built successfully in ${totalTime.toFixed(2)}s!`);
330
+ }
331
+ return results;
332
+ }
333
+ /**
334
+ * Checks if Slidev CLI is available
335
+ */
336
+ async function checkSlidevInstalled() {
337
+ try {
338
+ await execAsync("slidev --version");
339
+ return true;
340
+ }
341
+ catch (error) {
342
+ (0, logger_1.logError)("Slidev CLI not found. Please install @slidev/cli: npm install @slidev/cli");
343
+ return false;
344
+ }
345
+ }
346
+ /**
347
+ * Diagnoses common issues with a presentation
348
+ */
349
+ function diagnosePresentationIssues(presentation, siteDir) {
350
+ const issues = [];
351
+ try {
352
+ const content = fs_1.default.readFileSync(presentation.sourceAbsolutePath, "utf-8");
353
+ // Extract and check theme
354
+ const themeMatch = content.match(/^theme:\s*(.+)$/m);
355
+ if (themeMatch && siteDir) {
356
+ const themeName = themeMatch[1].trim().replace(/["']/g, "");
357
+ const themeCheck = checkThemeInstalled(themeName, siteDir);
358
+ if (!themeCheck.installed) {
359
+ issues.push(`🔴 CRITICAL: Theme '${themeName}' is NOT installed (causes Slidev to hang)`);
360
+ issues.push(` Fix: npm install ${themeName === "default" ? "@slidev/theme-default" : themeName}`);
361
+ }
362
+ }
363
+ // Check for components that might be missing
364
+ const componentMatches = content.match(/<([A-Z][A-Za-z0-9]*)/g);
365
+ if (componentMatches) {
366
+ const components = [...new Set(componentMatches.map((m) => m.slice(1)))];
367
+ if (components.length > 0) {
368
+ issues.push(`Uses custom components: ${components.join(", ")} (may need ./components/ directory)`);
369
+ }
370
+ }
371
+ // Check for icon usage
372
+ if (content.includes("<carbon:") ||
373
+ content.includes("<mdi:") ||
374
+ content.includes("<simple-icons:")) {
375
+ issues.push("Uses icon components (may need @iconify dependencies)");
376
+ }
377
+ // Check for custom layouts
378
+ const layoutMatches = content.match(/layout:\s*([a-z-]+)/g);
379
+ if (layoutMatches) {
380
+ const layouts = [
381
+ ...new Set(layoutMatches.map((m) => m.split(":")[1].trim())),
382
+ ];
383
+ const customLayouts = layouts.filter((l) => ![
384
+ "default",
385
+ "cover",
386
+ "center",
387
+ "intro",
388
+ "end",
389
+ "section",
390
+ "quote",
391
+ "fact",
392
+ "statement",
393
+ "image",
394
+ "image-left",
395
+ "image-right",
396
+ "two-cols",
397
+ "iframe",
398
+ ].includes(l));
399
+ if (customLayouts.length > 0) {
400
+ issues.push(`Uses custom layouts: ${customLayouts.join(", ")} (may require custom theme)`);
401
+ }
402
+ }
403
+ // Check for external images
404
+ if (content.includes("imageSrc:") || content.includes("src=")) {
405
+ const hasHttpImages = content.includes("http://") || content.includes("https://");
406
+ if (hasHttpImages) {
407
+ issues.push("Uses external images (requires network access during build)");
408
+ }
409
+ }
410
+ // Check file size
411
+ const sizeKB = (fs_1.default.statSync(presentation.sourceAbsolutePath).size / 1024).toFixed(1);
412
+ if (parseFloat(sizeKB) > 100) {
413
+ issues.push(`Large file size: ${sizeKB}KB (may slow build)`);
414
+ }
415
+ }
416
+ catch (error) {
417
+ issues.push(`Failed to analyze: ${error}`);
418
+ }
419
+ return issues;
420
+ }
421
+ //# sourceMappingURL=builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/plugin/builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Main plugin entry point for docusaurus-plugin-slidev
3
+ */
4
+ import type { LoadContext, Plugin } from "@docusaurus/types";
5
+ import { Joi } from "@docusaurus/utils-validation";
6
+ import type { PluginOptions, PluginContentData } from "../types";
7
+ /**
8
+ * Main plugin function
9
+ */
10
+ export default function pluginSlidev(context: LoadContext, options: Partial<PluginOptions>): Plugin<PluginContentData>;
11
+ /**
12
+ * Validate plugin options using Docusaurus validation schema
13
+ */
14
+ export declare function validateOptions({ options, validate, }: {
15
+ options: Partial<PluginOptions>;
16
+ validate: typeof Joi;
17
+ }): PluginOptions;
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugin/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,GAAG,EAAE,MAAM,8BAA8B,CAAC;AACnD,OAAO,KAAK,EACV,aAAa,EAEb,iBAAiB,EAClB,MAAM,UAAU,CAAC;AAuBlB;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAClC,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAC9B,MAAM,CAAC,iBAAiB,CAAC,CAkH3B;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAC9B,OAAO,EACP,QAAQ,GACT,EAAE;IACD,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAChC,QAAQ,EAAE,OAAO,GAAG,CAAC;CACtB,GAAG,aAAa,CAyBhB"}
@@ -0,0 +1,148 @@
1
+ "use strict";
2
+ /**
3
+ * Main plugin entry point for docusaurus-plugin-slidev
4
+ */
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.default = pluginSlidev;
10
+ exports.validateOptions = validateOptions;
11
+ const path_1 = __importDefault(require("path"));
12
+ const utils_validation_1 = require("@docusaurus/utils-validation");
13
+ const scanner_1 = require("./scanner");
14
+ const builder_1 = require("./builder");
15
+ const logger_1 = require("../utils/logger");
16
+ const fileSystem_1 = require("../utils/fileSystem");
17
+ // Default plugin options
18
+ const DEFAULT_OPTIONS = {
19
+ sourceDir: "./slidev",
20
+ outputDir: "slides",
21
+ download: false,
22
+ overviewPath: "/slidev",
23
+ overviewTitle: "Slidev Presentations",
24
+ overviewTagline: "Interactive presentation overview",
25
+ id: "default",
26
+ buildTimeout: 60,
27
+ verbose: false,
28
+ };
29
+ /**
30
+ * Main plugin function
31
+ */
32
+ function pluginSlidev(context, options) {
33
+ // Merge user options with defaults
34
+ const pluginOptions = {
35
+ ...DEFAULT_OPTIONS,
36
+ ...options,
37
+ };
38
+ let presentations = [];
39
+ const isDev = process.env.NODE_ENV === "development";
40
+ return {
41
+ name: "docusaurus-plugin-slidev",
42
+ /**
43
+ * Load content phase: Scan for Slidev presentations and build them in production
44
+ */
45
+ async loadContent() {
46
+ presentations = await (0, scanner_1.scanPresentations)(pluginOptions, {
47
+ siteDir: context.siteDir,
48
+ baseUrl: context.baseUrl,
49
+ });
50
+ if (isDev && presentations.length > 0) {
51
+ (0, logger_1.logInfo)("Presentations will be available after running 'npm run build'");
52
+ }
53
+ else if (!isDev && presentations.length > 0) {
54
+ // Build presentations BEFORE Docusaurus builds
55
+ // This ensures they're in the static directory when Docusaurus copies static files
56
+ // Check if Slidev is installed
57
+ const slidevInstalled = await (0, builder_1.checkSlidevInstalled)();
58
+ if (!slidevInstalled) {
59
+ throw new Error("Slidev CLI is not installed. Run: npm install @slidev/cli");
60
+ }
61
+ // Prepare output directory
62
+ const outputPath = path_1.default.join(context.siteDir, "static", pluginOptions.outputDir);
63
+ // Clean up old presentations in output directory
64
+ (0, fileSystem_1.cleanupOutputDirectory)(outputPath);
65
+ // Clean up Slidev artifacts in source directory
66
+ const sourcePath = path_1.default.join(context.siteDir, pluginOptions.sourceDir);
67
+ (0, fileSystem_1.cleanupSourceDirectory)(sourcePath);
68
+ // Create .gitignore
69
+ (0, fileSystem_1.createGitignore)(outputPath);
70
+ // Build all presentations
71
+ await (0, builder_1.buildAllPresentations)(presentations, pluginOptions, {
72
+ siteDir: context.siteDir,
73
+ baseUrl: context.baseUrl,
74
+ });
75
+ }
76
+ return {
77
+ presentations,
78
+ config: pluginOptions,
79
+ isDev,
80
+ };
81
+ },
82
+ /**
83
+ * Content loaded phase: Make data available globally and add routes
84
+ */
85
+ async contentLoaded({ content, actions }) {
86
+ const { setGlobalData, addRoute } = actions;
87
+ // Make presentation data available globally
88
+ setGlobalData(content);
89
+ // Add the overview page route
90
+ addRoute({
91
+ path: pluginOptions.overviewPath,
92
+ component: "@theme/SlidevOverview",
93
+ exact: true,
94
+ });
95
+ // Add routes for each individual presentation
96
+ presentations.forEach((presentation) => {
97
+ // Strip trailing slash from URL for route path
98
+ const routePath = presentation.url.endsWith("/")
99
+ ? presentation.url.slice(0, -1)
100
+ : presentation.url;
101
+ addRoute({
102
+ path: routePath,
103
+ component: "@theme/SlidevPresentation",
104
+ exact: true,
105
+ });
106
+ });
107
+ },
108
+ /**
109
+ * Provide theme components
110
+ */
111
+ getThemePath() {
112
+ return path_1.default.resolve(__dirname, "../theme");
113
+ },
114
+ /**
115
+ * Get path to type definitions
116
+ */
117
+ getTypeScriptThemePath() {
118
+ return path_1.default.resolve(__dirname, "../types");
119
+ },
120
+ };
121
+ }
122
+ /**
123
+ * Validate plugin options using Docusaurus validation schema
124
+ */
125
+ function validateOptions({ options, validate, }) {
126
+ // Create schema using Joi from @docusaurus/utils-validation
127
+ const schema = utils_validation_1.Joi.object({
128
+ sourceDir: utils_validation_1.Joi.string().default(DEFAULT_OPTIONS.sourceDir),
129
+ outputDir: utils_validation_1.Joi.string().default(DEFAULT_OPTIONS.outputDir),
130
+ theme: utils_validation_1.Joi.string().optional(),
131
+ download: utils_validation_1.Joi.boolean().default(DEFAULT_OPTIONS.download),
132
+ overviewPath: utils_validation_1.Joi.string().default(DEFAULT_OPTIONS.overviewPath),
133
+ overviewTitle: utils_validation_1.Joi.string().default(DEFAULT_OPTIONS.overviewTitle),
134
+ overviewTagline: utils_validation_1.Joi.string().default(DEFAULT_OPTIONS.overviewTagline),
135
+ id: utils_validation_1.Joi.string().default(DEFAULT_OPTIONS.id),
136
+ buildTimeout: utils_validation_1.Joi.number()
137
+ .min(10)
138
+ .max(600)
139
+ .default(DEFAULT_OPTIONS.buildTimeout),
140
+ verbose: utils_validation_1.Joi.boolean().default(DEFAULT_OPTIONS.verbose),
141
+ });
142
+ const { value, error } = schema.validate(options);
143
+ if (error) {
144
+ throw error;
145
+ }
146
+ return value;
147
+ }
148
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugin/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Scanner utility for discovering Slidev presentations
3
+ */
4
+ import type { PresentationMetadata, PluginOptions } from "../types";
5
+ /**
6
+ * Scans for Slidev presentations and extracts metadata
7
+ */
8
+ export declare function scanPresentations(options: PluginOptions, context: {
9
+ siteDir: string;
10
+ baseUrl: string;
11
+ }): Promise<PresentationMetadata[]>;
12
+ //# sourceMappingURL=scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../src/plugin/scanner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EACV,oBAAoB,EAEpB,aAAa,EACd,MAAM,UAAU,CAAC;AA0ElB;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC5C,OAAO,CAAC,oBAAoB,EAAE,CAAC,CA6DjC"}