offcourse 0.0.2 → 1.0.1

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 (139) hide show
  1. package/README.md +255 -20
  2. package/dist/cli/commands/config.d.ts +13 -0
  3. package/dist/cli/commands/config.d.ts.map +1 -0
  4. package/dist/cli/commands/config.js +66 -0
  5. package/dist/cli/commands/config.js.map +1 -0
  6. package/dist/cli/commands/inspect.d.ts +11 -0
  7. package/dist/cli/commands/inspect.d.ts.map +1 -0
  8. package/dist/cli/commands/inspect.js +365 -0
  9. package/dist/cli/commands/inspect.js.map +1 -0
  10. package/dist/cli/commands/login.d.ts +12 -0
  11. package/dist/cli/commands/login.d.ts.map +1 -0
  12. package/dist/cli/commands/login.js +55 -0
  13. package/dist/cli/commands/login.js.map +1 -0
  14. package/dist/cli/commands/status.d.ts +15 -0
  15. package/dist/cli/commands/status.d.ts.map +1 -0
  16. package/dist/cli/commands/status.js +118 -0
  17. package/dist/cli/commands/status.js.map +1 -0
  18. package/dist/cli/commands/sync.d.ts +15 -0
  19. package/dist/cli/commands/sync.d.ts.map +1 -0
  20. package/dist/cli/commands/sync.js +921 -0
  21. package/dist/cli/commands/sync.js.map +1 -0
  22. package/dist/cli/commands/syncHighLevel.d.ts +23 -0
  23. package/dist/cli/commands/syncHighLevel.d.ts.map +1 -0
  24. package/dist/cli/commands/syncHighLevel.js +479 -0
  25. package/dist/cli/commands/syncHighLevel.js.map +1 -0
  26. package/dist/cli/index.d.ts +3 -0
  27. package/dist/cli/index.d.ts.map +1 -0
  28. package/dist/cli/index.js +106 -0
  29. package/dist/cli/index.js.map +1 -0
  30. package/dist/config/configManager.d.ts +31 -0
  31. package/dist/config/configManager.d.ts.map +1 -0
  32. package/dist/config/configManager.js +68 -0
  33. package/dist/config/configManager.js.map +1 -0
  34. package/dist/config/paths.d.ts +21 -0
  35. package/dist/config/paths.d.ts.map +1 -0
  36. package/dist/config/paths.js +33 -0
  37. package/dist/config/paths.js.map +1 -0
  38. package/dist/config/schema.d.ts +60 -0
  39. package/dist/config/schema.d.ts.map +1 -0
  40. package/dist/config/schema.js +50 -0
  41. package/dist/config/schema.js.map +1 -0
  42. package/dist/downloader/hlsDownloader.d.ts +58 -0
  43. package/dist/downloader/hlsDownloader.d.ts.map +1 -0
  44. package/dist/downloader/hlsDownloader.js +263 -0
  45. package/dist/downloader/hlsDownloader.js.map +1 -0
  46. package/dist/downloader/hlsValidator.d.ts +35 -0
  47. package/dist/downloader/hlsValidator.d.ts.map +1 -0
  48. package/dist/downloader/hlsValidator.js +152 -0
  49. package/dist/downloader/hlsValidator.js.map +1 -0
  50. package/dist/downloader/index.d.ts +29 -0
  51. package/dist/downloader/index.d.ts.map +1 -0
  52. package/dist/downloader/index.js +55 -0
  53. package/dist/downloader/index.js.map +1 -0
  54. package/dist/downloader/loomDownloader.d.ts +56 -0
  55. package/dist/downloader/loomDownloader.d.ts.map +1 -0
  56. package/dist/downloader/loomDownloader.js +562 -0
  57. package/dist/downloader/loomDownloader.js.map +1 -0
  58. package/dist/downloader/queue.d.ts +56 -0
  59. package/dist/downloader/queue.d.ts.map +1 -0
  60. package/dist/downloader/queue.js +88 -0
  61. package/dist/downloader/queue.js.map +1 -0
  62. package/dist/downloader/vimeoDownloader.d.ts +52 -0
  63. package/dist/downloader/vimeoDownloader.d.ts.map +1 -0
  64. package/dist/downloader/vimeoDownloader.js +569 -0
  65. package/dist/downloader/vimeoDownloader.js.map +1 -0
  66. package/dist/scraper/extractor.d.ts +53 -0
  67. package/dist/scraper/extractor.d.ts.map +1 -0
  68. package/dist/scraper/extractor.js +627 -0
  69. package/dist/scraper/extractor.js.map +1 -0
  70. package/dist/scraper/highlevel/extractor.d.ts +89 -0
  71. package/dist/scraper/highlevel/extractor.d.ts.map +1 -0
  72. package/dist/scraper/highlevel/extractor.js +373 -0
  73. package/dist/scraper/highlevel/extractor.js.map +1 -0
  74. package/dist/scraper/highlevel/index.d.ts +3 -0
  75. package/dist/scraper/highlevel/index.d.ts.map +1 -0
  76. package/dist/scraper/highlevel/index.js +3 -0
  77. package/dist/scraper/highlevel/index.js.map +1 -0
  78. package/dist/scraper/highlevel/navigator.d.ts +86 -0
  79. package/dist/scraper/highlevel/navigator.d.ts.map +1 -0
  80. package/dist/scraper/highlevel/navigator.js +505 -0
  81. package/dist/scraper/highlevel/navigator.js.map +1 -0
  82. package/dist/scraper/highlevel/schemas.d.ts +188 -0
  83. package/dist/scraper/highlevel/schemas.d.ts.map +1 -0
  84. package/dist/scraper/highlevel/schemas.js +139 -0
  85. package/dist/scraper/highlevel/schemas.js.map +1 -0
  86. package/dist/scraper/navigator.d.ts +68 -0
  87. package/dist/scraper/navigator.d.ts.map +1 -0
  88. package/dist/scraper/navigator.js +257 -0
  89. package/dist/scraper/navigator.js.map +1 -0
  90. package/dist/scraper/schemas.d.ts +57 -0
  91. package/dist/scraper/schemas.d.ts.map +1 -0
  92. package/dist/scraper/schemas.js +135 -0
  93. package/dist/scraper/schemas.js.map +1 -0
  94. package/dist/scraper/videoInterceptor.d.ts +23 -0
  95. package/dist/scraper/videoInterceptor.d.ts.map +1 -0
  96. package/dist/scraper/videoInterceptor.js +330 -0
  97. package/dist/scraper/videoInterceptor.js.map +1 -0
  98. package/dist/shared/auth.d.ts +58 -0
  99. package/dist/shared/auth.d.ts.map +1 -0
  100. package/dist/shared/auth.js +197 -0
  101. package/dist/shared/auth.js.map +1 -0
  102. package/dist/shared/firebase.d.ts +60 -0
  103. package/dist/shared/firebase.d.ts.map +1 -0
  104. package/dist/shared/firebase.js +102 -0
  105. package/dist/shared/firebase.js.map +1 -0
  106. package/dist/shared/fs.d.ts +31 -0
  107. package/dist/shared/fs.d.ts.map +1 -0
  108. package/dist/shared/fs.js +77 -0
  109. package/dist/shared/fs.js.map +1 -0
  110. package/dist/shared/http.d.ts +15 -0
  111. package/dist/shared/http.d.ts.map +1 -0
  112. package/dist/shared/http.js +31 -0
  113. package/dist/shared/http.js.map +1 -0
  114. package/dist/shared/index.d.ts +7 -0
  115. package/dist/shared/index.d.ts.map +1 -0
  116. package/dist/shared/index.js +7 -0
  117. package/dist/shared/index.js.map +1 -0
  118. package/dist/shared/slug.d.ts +11 -0
  119. package/dist/shared/slug.d.ts.map +1 -0
  120. package/dist/shared/slug.js +25 -0
  121. package/dist/shared/slug.js.map +1 -0
  122. package/dist/shared/url.d.ts +43 -0
  123. package/dist/shared/url.d.ts.map +1 -0
  124. package/dist/shared/url.js +54 -0
  125. package/dist/shared/url.js.map +1 -0
  126. package/dist/state/database.d.ts +246 -0
  127. package/dist/state/database.d.ts.map +1 -0
  128. package/dist/state/database.js +679 -0
  129. package/dist/state/database.js.map +1 -0
  130. package/dist/state/index.d.ts +2 -0
  131. package/dist/state/index.d.ts.map +1 -0
  132. package/dist/state/index.js +2 -0
  133. package/dist/state/index.js.map +1 -0
  134. package/dist/storage/fileSystem.d.ts +56 -0
  135. package/dist/storage/fileSystem.d.ts.map +1 -0
  136. package/dist/storage/fileSystem.js +129 -0
  137. package/dist/storage/fileSystem.js.map +1 -0
  138. package/package.json +71 -11
  139. package/cli.js +0 -45
package/README.md CHANGED
@@ -1,33 +1,142 @@
1
1
  # Offcourse
2
2
 
3
- [![npm version](https://img.shields.io/npm/v/offcourse?color=cb0000&label=npm)](https://www.npmjs.com/package/offcourse)
4
- [![npm downloads](https://img.shields.io/npm/dm/offcourse?color=cb0000)](https://www.npmjs.com/package/offcourse)
5
- [![license](https://img.shields.io/npm/l/offcourse?color=cb0000)](https://github.com/sebastian-software/offcourse/blob/main/LICENSE)
6
- [![node](https://img.shields.io/node/v/offcourse?color=cb0000)](https://nodejs.org)
3
+ [![npm version](https://img.shields.io/npm/v/offcourse?color=3b82f6&label=npm)](https://www.npmjs.com/package/offcourse)
4
+ [![npm downloads](https://img.shields.io/npm/dm/offcourse?color=3b82f6)](https://www.npmjs.com/package/offcourse)
5
+ [![license](https://img.shields.io/npm/l/offcourse?color=3b82f6)](https://github.com/sebastian-software/offcourse/blob/main/LICENSE)
6
+ [![node](https://img.shields.io/badge/node-%3E%3D22-3b82f6)](https://nodejs.org)
7
+ [![codecov](https://codecov.io/gh/sebastian-software/offcourse/graph/badge.svg)](https://codecov.io/gh/sebastian-software/offcourse)
8
+ [![CI](https://github.com/sebastian-software/offcourse/actions/workflows/ci.yml/badge.svg)](https://github.com/sebastian-software/offcourse/actions/workflows/ci.yml)
7
9
 
8
10
  Download online courses for offline access – of course! šŸ“š
9
11
 
10
- > 🚧 **Coming Soon** – This package is currently in private development.
12
+ Saves video content and lesson text as Markdown files, organized by module structure.
11
13
 
12
- ## What is Offcourse?
13
-
14
- Offcourse is a CLI tool that downloads online courses for offline access. It preserves the course structure, downloads videos, and converts lesson content to clean Markdown files.
15
-
16
- ## Planned Features
14
+ ## Features
17
15
 
18
16
  - šŸ” **Browser-based authentication** – Log in once, sessions are cached
19
17
  - šŸ“š **Course structure preservation** – Maintains module/lesson hierarchy
20
- - šŸŽ¬ **Video downloads** – Supports Loom, native video (Vimeo, YouTube, Wistia planned)
18
+ - šŸŽ¬ **Video downloads** – Supports HLS streams, Loom and Vimeo
21
19
  - šŸ“ **Content extraction** – Converts lesson text to clean Markdown
22
20
  - āøļø **Resumable syncs** – Skips already downloaded content
23
21
  - ⚔ **Concurrent downloads** – Configurable parallelism
22
+ - šŸ” **Auto-detection** – Automatically detects platform from URL
24
23
 
25
24
  ## Supported Platforms
26
25
 
27
- | Platform | Status |
28
- |----------|--------|
29
- | [Skool.com](https://skool.com) | āœ… Ready |
30
- | [LearningSuite.io](https://learningsuite.io) | 🚧 Planned |
26
+ | Platform | Status | Notes |
27
+ |----------|--------|-------|
28
+ | [Skool.com](https://skool.com) | āœ… Supported | Community courses |
29
+ | [HighLevel (GoHighLevel)](https://gohighlevel.com) | āœ… Supported | Membership portals, ClientClub |
30
+ | [LearningSuite.io](https://learningsuite.io) | 🚧 Planned | |
31
+
32
+ ## Installation
33
+
34
+ ```bash
35
+ npm install -g offcourse
36
+ ```
37
+
38
+ Or run directly with npx:
39
+
40
+ ```bash
41
+ npx offcourse <command>
42
+ ```
43
+
44
+ Requires Node.js 22+.
45
+
46
+ For HLS video downloads (HighLevel native videos), [ffmpeg](https://ffmpeg.org/) must be installed:
47
+
48
+ ```bash
49
+ # macOS
50
+ brew install ffmpeg
51
+
52
+ # Ubuntu/Debian
53
+ sudo apt install ffmpeg
54
+
55
+ # Windows (via Chocolatey)
56
+ choco install ffmpeg
57
+ ```
58
+
59
+ ## Usage
60
+
61
+ ### Login
62
+
63
+ ```bash
64
+ # Opens browser for interactive login
65
+ offcourse login
66
+
67
+ # Force re-login
68
+ offcourse login --force
69
+ ```
70
+
71
+ ### Sync a Course
72
+
73
+ The `sync` command auto-detects the platform from the URL:
74
+
75
+ ```bash
76
+ # Auto-detect platform and download
77
+ offcourse sync <url>
78
+
79
+ # Skip video downloads
80
+ offcourse sync <url> --skip-videos
81
+
82
+ # Skip text content
83
+ offcourse sync <url> --skip-content
84
+
85
+ # Preview without downloading
86
+ offcourse sync <url> --dry-run
87
+
88
+ # Limit to first N lessons (for testing)
89
+ offcourse sync <url> --limit 5
90
+
91
+ # Override course name (useful when auto-detection fails)
92
+ offcourse sync <url> --course-name "My Course Name"
93
+
94
+ # Prefer specific video quality
95
+ offcourse sync <url> --quality 720p
96
+ ```
97
+
98
+ ### Platform-Specific Commands
99
+
100
+ ```bash
101
+ # Skool courses
102
+ offcourse sync-skool https://www.skool.com/your-community/classroom
103
+
104
+ # HighLevel/GoHighLevel membership portals
105
+ offcourse sync-highlevel https://member.example.com/courses/products/<id>
106
+ offcourse sync-highlevel <url> --course-name "Course Name"
107
+ ```
108
+
109
+ ### Configuration
110
+
111
+ ```bash
112
+ # Show current config
113
+ offcourse config show
114
+
115
+ # Set output directory
116
+ offcourse config set outputDir ~/Courses
117
+
118
+ # Set video quality (highest, lowest, 1080p, 720p, 480p)
119
+ offcourse config set videoQuality 720p
120
+
121
+ # Set download concurrency (1-5)
122
+ offcourse config set concurrency 3
123
+
124
+ # Run headless (no browser window)
125
+ offcourse config set headless true
126
+ ```
127
+
128
+ ### Inspect (Debugging)
129
+
130
+ ```bash
131
+ # Analyze page structure
132
+ offcourse inspect <url>
133
+
134
+ # Save analysis to files
135
+ offcourse inspect <url> --output ./analysis
136
+
137
+ # Include full HTML dump
138
+ offcourse inspect <url> --full
139
+ ```
31
140
 
32
141
  ## Output Structure
33
142
 
@@ -45,13 +154,139 @@ Offcourse is a CLI tool that downloads online courses for offline access. It pre
45
154
  └── ...
46
155
  ```
47
156
 
48
- ## Stay Updated
157
+ ## Platform Notes
49
158
 
50
- ⭐ Star the repo to get notified when we release:
159
+ ### HighLevel (GoHighLevel)
51
160
 
52
- → [github.com/sebastian-software/offcourse](https://github.com/sebastian-software/offcourse)
161
+ HighLevel is an all-in-one marketing platform with a "Memberships" feature for hosting courses. Offcourse supports:
53
162
 
54
- ## License
163
+ - **Authentication**: Firebase-based login via browser
164
+ - **Course structure**: Extracts products, categories, and posts via API
165
+ - **Video downloads**: Native HLS videos with quality selection (requires ffmpeg)
166
+ - **Embedded videos**: Vimeo, Loom, and other embedded players
167
+
168
+ Common HighLevel portal URLs:
169
+ - `https://member.yourdomain.com/courses/...`
170
+ - `https://portal.yourdomain.com/courses/...`
171
+ - `https://courses.yourdomain.com/...`
172
+
173
+ ## Development
174
+
175
+ ### Setup
176
+
177
+ ```bash
178
+ # Clone the repository
179
+ git clone https://github.com/sebastian-software/offcourse.git
180
+ cd offcourse
181
+
182
+ # Install dependencies
183
+ npm install
184
+
185
+ # Build
186
+ npm run build
187
+
188
+ # Link globally (optional)
189
+ npm link
190
+ ```
191
+
192
+ ### Commands
193
+
194
+ ```bash
195
+ # Watch mode
196
+ npm run dev
197
+
198
+ # Run directly (without build)
199
+ npx tsx src/cli/index.ts <command>
200
+
201
+ # Lint
202
+ npm run lint
203
+
204
+ # Format
205
+ npm run format
206
+
207
+ # Type check
208
+ npm run typecheck
209
+
210
+ # Test
211
+ npm test
212
+ ```
213
+
214
+ ### Git Hooks
215
+
216
+ This project uses [Husky](https://typicode.github.io/husky/) for Git hooks:
217
+
218
+ - **pre-commit**: Runs Prettier on staged files via lint-staged
219
+ - **pre-push**: Runs ESLint and TypeScript type checking
220
+ - **commit-msg**: Validates commit messages follow [Conventional Commits](https://www.conventionalcommits.org/)
221
+
222
+ ### Commit Convention
223
+
224
+ We follow [Conventional Commits](https://www.conventionalcommits.org/). Commit messages must follow this format:
55
225
 
56
- MIT Ā© [Sebastian Software GmbH](https://sebastian-software.de)
226
+ ```
227
+ <type>[optional scope]: <description>
228
+
229
+ [optional body]
230
+
231
+ [optional footer(s)]
232
+ ```
233
+
234
+ **Types:**
235
+
236
+ - `feat`: New feature
237
+ - `fix`: Bug fix
238
+ - `docs`: Documentation changes
239
+ - `style`: Code style changes (formatting, semicolons, etc.)
240
+ - `refactor`: Code refactoring
241
+ - `perf`: Performance improvements
242
+ - `test`: Adding or updating tests
243
+ - `chore`: Maintenance tasks
244
+ - `ci`: CI/CD changes
245
+
246
+ **Examples:**
247
+
248
+ ```bash
249
+ git commit -m "feat: add support for Vimeo downloads"
250
+ git commit -m "fix: handle missing video URLs gracefully"
251
+ git commit -m "docs: update installation instructions"
252
+ ```
253
+
254
+ ### Releasing
255
+
256
+ Releases are managed with [release-it](https://github.com/release-it/release-it). The release process:
257
+
258
+ 1. Runs linting, type checking, and tests
259
+ 2. Bumps version based on conventional commits
260
+ 3. Generates/updates `CHANGELOG.md`
261
+ 4. Creates a Git tag and GitHub release
262
+ 5. Publishes to npm
263
+
264
+ ```bash
265
+ # Interactive release (will prompt for version bump)
266
+ npm run release
267
+
268
+ # Dry run (preview what would happen)
269
+ npm run release -- --dry-run
270
+
271
+ # Specific version bump
272
+ npm run release -- --minor
273
+ npm run release -- --major
274
+ ```
275
+
276
+ ## Acknowledgments
277
+
278
+ A huge thank you to [Sindre Sorhus](https://github.com/sindresorhus) šŸ™ for creating and maintaining so many excellent packages that power this project:
279
+
280
+ - [`@sindresorhus/slugify`](https://github.com/sindresorhus/slugify) – Slugify a string
281
+ - [`conf`](https://github.com/sindresorhus/conf) – Simple config handling
282
+ - [`delay`](https://github.com/sindresorhus/delay) – Delay a promise
283
+ - [`execa`](https://github.com/sindresorhus/execa) – Process execution for humans
284
+ - [`ky`](https://github.com/sindresorhus/ky) – Tiny & elegant HTTP client
285
+ - [`p-queue`](https://github.com/sindresorhus/p-queue) – Promise queue with concurrency control
286
+ - [`p-retry`](https://github.com/sindresorhus/p-retry) – Retry a promise-returning function
287
+
288
+ His commitment to high-quality, well-documented, and beautifully designed open source software is truly inspiring. If you find his work useful, consider [sponsoring him](https://github.com/sponsors/sindresorhus).
289
+
290
+ ## License
57
291
 
292
+ MIT
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Shows all current configuration values.
3
+ */
4
+ export declare function configShowCommand(): void;
5
+ /**
6
+ * Sets a configuration value.
7
+ */
8
+ export declare function configSetCommand(key: string, value: string): void;
9
+ /**
10
+ * Gets a specific configuration value.
11
+ */
12
+ export declare function configGetCommand(key: string): void;
13
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAUxC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAiCjE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAWlD"}
@@ -0,0 +1,66 @@
1
+ import chalk from "chalk";
2
+ import { getConfigValue, loadConfig, updateConfig } from "../../config/configManager.js";
3
+ import { CONFIG_FILE } from "../../config/paths.js";
4
+ import { configSchema } from "../../config/schema.js";
5
+ /**
6
+ * Shows all current configuration values.
7
+ */
8
+ export function configShowCommand() {
9
+ const config = loadConfig();
10
+ console.log(chalk.blue("\nāš™ļø Configuration\n"));
11
+ console.log(chalk.gray(` File: ${CONFIG_FILE}\n`));
12
+ for (const [key, value] of Object.entries(config)) {
13
+ console.log(` ${chalk.cyan(key)}: ${chalk.white(String(value))}`);
14
+ }
15
+ console.log();
16
+ }
17
+ /**
18
+ * Sets a configuration value.
19
+ */
20
+ export function configSetCommand(key, value) {
21
+ const validKeys = Object.keys(configSchema.shape);
22
+ if (!validKeys.includes(key)) {
23
+ console.log(chalk.red(`\nāŒ Unknown config key: ${key}`));
24
+ console.log(chalk.gray(` Valid keys: ${validKeys.join(", ")}\n`));
25
+ process.exit(1);
26
+ }
27
+ // Parse value based on expected type
28
+ const currentValue = getConfigValue(key);
29
+ let parsedValue;
30
+ if (typeof currentValue === "boolean") {
31
+ parsedValue = value === "true" || value === "1";
32
+ }
33
+ else if (typeof currentValue === "number") {
34
+ parsedValue = parseInt(value, 10);
35
+ if (isNaN(parsedValue)) {
36
+ console.log(chalk.red(`\nāŒ Invalid number: ${value}\n`));
37
+ process.exit(1);
38
+ }
39
+ }
40
+ else {
41
+ parsedValue = value;
42
+ }
43
+ try {
44
+ updateConfig({ [key]: parsedValue });
45
+ console.log(chalk.green(`\nāœ… Set ${key} = ${parsedValue}\n`));
46
+ }
47
+ catch (error) {
48
+ console.log(chalk.red(`\nāŒ Invalid value for ${key}: ${value}`));
49
+ console.log(chalk.gray(` ${String(error)}\n`));
50
+ process.exit(1);
51
+ }
52
+ }
53
+ /**
54
+ * Gets a specific configuration value.
55
+ */
56
+ export function configGetCommand(key) {
57
+ const validKeys = Object.keys(configSchema.shape);
58
+ if (!validKeys.includes(key)) {
59
+ console.log(chalk.red(`\nāŒ Unknown config key: ${key}`));
60
+ console.log(chalk.gray(` Valid keys: ${validKeys.join(", ")}\n`));
61
+ process.exit(1);
62
+ }
63
+ const value = getConfigValue(key);
64
+ console.log(String(value));
65
+ }
66
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ interface InspectOptions {
2
+ output?: string;
3
+ full?: boolean;
4
+ click?: boolean;
5
+ }
6
+ /**
7
+ * Inspects the page structure and logs useful debugging info.
8
+ */
9
+ export declare function inspectCommand(url: string, options: InspectOptions): Promise<void>;
10
+ export {};
11
+ //# sourceMappingURL=inspect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/inspect.ts"],"names":[],"mappings":"AAWA,UAAU,cAAc;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAoaxF"}