@swoff/cli 0.0.1 → 0.0.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/bin/swoff CHANGED
@@ -1,22 +1,24 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- /**
4
- * Swoff CLI Entry Point
5
- * Uses tsx to run TypeScript directly
6
- */
7
-
8
3
  import { spawn } from 'child_process';
9
- import { fileURLToPath } from 'url';
4
+ import { existsSync } from 'fs';
10
5
  import { dirname, join } from 'path';
6
+ import { fileURLToPath } from 'url';
7
+
8
+ const binDir = dirname(fileURLToPath(import.meta.url));
9
+ const distDir = join(binDir, '..', 'dist');
10
+ const entryPoint = join(distDir, 'index.js');
11
11
 
12
- const __dirname = dirname(fileURLToPath(import.meta.url));
13
- const cliPath = join(__dirname, '../src/index.ts');
12
+ if (!existsSync(entryPoint)) {
13
+ console.error('Error: CLI not built. Run: npm run build');
14
+ process.exit(1);
15
+ }
14
16
 
15
- const child = spawn('npx', ['tsx', cliPath, ...process.argv.slice(2)], {
17
+ const proc = spawn('node', [entryPoint, ...process.argv.slice(2)], {
16
18
  stdio: 'inherit',
17
- cwd: process.cwd()
19
+ cwd: process.cwd(),
18
20
  });
19
21
 
20
- child.on('exit', (code) => {
21
- process.exit(code ?? 0);
22
+ proc.on('exit', (code) => {
23
+ process.exit(code || 0);
22
24
  });
package/dist/index.js ADDED
@@ -0,0 +1,408 @@
1
+ /**
2
+ * Swoff CLI - Main Entry Point
3
+ *
4
+ * Command-line interface for managing Swoff in your project.
5
+ *
6
+ * Usage:
7
+ * swoff init Initialize Swoff in current directory
8
+ * swoff generate Generate service worker and files
9
+ * swoff validate Validate swoff.config.json
10
+ * swoff add <feature> Add specific feature files
11
+ * swoff --help Show help
12
+ */
13
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
14
+ import { join, dirname } from "path";
15
+ import { fileURLToPath } from "url";
16
+ import { spawn } from "child_process";
17
+ const __dirname = dirname(fileURLToPath(import.meta.url));
18
+ const packageDir = join(__dirname, "..");
19
+ const projectRoot = process.cwd();
20
+ const colors = {
21
+ reset: "\x1b[0m",
22
+ bright: "\x1b[1m",
23
+ dim: "\x1b[2m",
24
+ green: "\x1b[32m",
25
+ yellow: "\x1b[33m",
26
+ blue: "\x1b[34m",
27
+ red: "\x1b[31m",
28
+ cyan: "\x1b[36m",
29
+ };
30
+ const log = {
31
+ info: (msg) => console.log(`${colors.blue}ℹ${colors.reset} ${msg}`),
32
+ success: (msg) => console.log(`${colors.green}✅${colors.reset} ${msg}`),
33
+ warn: (msg) => console.log(`${colors.yellow}⚠️${colors.reset} ${msg}`),
34
+ error: (msg) => console.log(`${colors.red}❌${colors.reset} ${msg}`),
35
+ help: (msg) => console.log(` ${colors.cyan}${msg}${colors.reset}`),
36
+ header: (msg) => console.log(`\n${colors.bright}${msg}${colors.reset}\n`),
37
+ };
38
+ const args = process.argv.slice(2);
39
+ const command = args[0];
40
+ const options = args.slice(1);
41
+ const commands = {
42
+ init: {
43
+ description: "Initialize Swoff in current directory",
44
+ usage: "swoff init [--framework react-vite|nextjs|vue-vite]",
45
+ examples: ["swoff init", "swoff init --framework react-vite"],
46
+ },
47
+ generate: {
48
+ description: "Generate service worker and supporting files",
49
+ usage: "swoff generate [--sw-only|--files-only]",
50
+ examples: ["swoff generate", "swoff generate --sw-only", "swoff generate --files-only"],
51
+ },
52
+ validate: {
53
+ description: "Validate swoff.config.json",
54
+ usage: "swoff validate",
55
+ examples: ["swoff validate"],
56
+ },
57
+ add: {
58
+ description: "Add specific feature files",
59
+ usage: "swoff add <feature>",
60
+ examples: ["swoff add offline", "swoff add pwa", "swoff add mutation-queue"],
61
+ },
62
+ help: {
63
+ description: "Show help information",
64
+ usage: "swoff help [command]",
65
+ examples: ["swoff help", "swoff help init"],
66
+ },
67
+ };
68
+ function showHelp(commandName) {
69
+ if (commandName && commands[commandName]) {
70
+ const cmd = commands[commandName];
71
+ log.header(`Swoff ${commandName} Command`);
72
+ console.log(`Description: ${cmd.description}`);
73
+ console.log(`\nUsage: ${cmd.usage}`);
74
+ console.log(`\nExamples:`);
75
+ cmd.examples.forEach((ex) => console.log(` ${ex}`));
76
+ }
77
+ else {
78
+ log.header("Swoff CLI");
79
+ console.log(`${colors.dim}Swoff${colors.reset} - Offline-first web apps made easy\n`);
80
+ console.log(`Usage: ${colors.cyan}swoff <command> [options]${colors.reset}\n`);
81
+ console.log("Commands:");
82
+ Object.entries(commands).forEach(([name, cmd]) => {
83
+ console.log(` ${colors.green}${name.padEnd(12)}${colors.reset} ${cmd.description}`);
84
+ });
85
+ console.log(`\nRun ${colors.cyan}swoff help <command>${colors.reset} for more details on a specific command.`);
86
+ }
87
+ }
88
+ async function initCommand(framework) {
89
+ log.header("Initializing Swoff");
90
+ const configFiles = ["swoff.config.json", "swoff.config.js"];
91
+ const existingConfig = configFiles.find((f) => existsSync(join(projectRoot, f)));
92
+ if (existingConfig) {
93
+ log.warn(`Found existing ${existingConfig}. Skipping init.`);
94
+ log.info("To reinitialize, delete the config file first.");
95
+ return;
96
+ }
97
+ const defaultConfig = {
98
+ $schema: "https://swoff.netlify.app/schema/v1.json",
99
+ enabled: true,
100
+ version: "from-package",
101
+ minSupportedVersion: "1.0.0",
102
+ serviceWorker: {
103
+ autoUpdate: false,
104
+ defaultStrategy: "cache-first",
105
+ strategies: {
106
+ "/api/*": "network-first",
107
+ "/static/*": "cache-first",
108
+ },
109
+ },
110
+ features: {
111
+ versionedSw: true,
112
+ offlineReads: true,
113
+ mutationQueue: false,
114
+ backgroundSync: false,
115
+ pwa: true,
116
+ auth: false,
117
+ crossTabSync: true,
118
+ tagInvalidation: true,
119
+ clientRegistration: true,
120
+ },
121
+ build: {
122
+ outputDir: "dist",
123
+ swFilename: "sw",
124
+ },
125
+ };
126
+ if (framework === "react-vite" || framework === "react-nextjs") {
127
+ defaultConfig.features.mutationQueue = true;
128
+ defaultConfig.serviceWorker.strategies = {
129
+ "/api/*": "network-first",
130
+ "/static/*": "cache-first",
131
+ "/assets/*": "cache-first",
132
+ };
133
+ }
134
+ else if (framework === "vue-vite") {
135
+ defaultConfig.features.mutationQueue = true;
136
+ defaultConfig.serviceWorker.strategies = {
137
+ "/api/*": "network-first",
138
+ "/static/*": "cache-first",
139
+ "/assets/*": "cache-first",
140
+ };
141
+ }
142
+ const configPath = join(projectRoot, "swoff.config.json");
143
+ writeFileSync(configPath, JSON.stringify(defaultConfig, null, 2));
144
+ log.success(`Created swoff.config.json`);
145
+ const dirs = ["src/hooks", "src/components", "src/utils", "swoff"];
146
+ for (const dir of dirs) {
147
+ const dirPath = join(projectRoot, dir);
148
+ if (!existsSync(dirPath)) {
149
+ mkdirSync(dirPath, { recursive: true });
150
+ log.info(`Created ${dir}/`);
151
+ }
152
+ }
153
+ log.success("Swoff initialized successfully!");
154
+ await generateCommand({ swOnly: false, filesOnly: false });
155
+ log.info(`\nNext steps:`);
156
+ log.help("1. Review swoff.config.json and customize as needed");
157
+ log.help("2. Run: swoff generate");
158
+ log.help("3. Read the docs: https://swoff.netlify.app/docs");
159
+ }
160
+ async function generateCommand(options = {}) {
161
+ const { swOnly = false, filesOnly = false, language } = options;
162
+ log.header("Generating Swoff Files");
163
+ const configFiles = ["swoff.config.json", "swoff.config.js"];
164
+ let config = null;
165
+ let configPath = null;
166
+ for (const file of configFiles) {
167
+ const path = join(projectRoot, file);
168
+ if (existsSync(path)) {
169
+ configPath = path;
170
+ if (file.endsWith(".json")) {
171
+ config = JSON.parse(readFileSync(path, "utf8"));
172
+ }
173
+ break;
174
+ }
175
+ }
176
+ if (!config) {
177
+ log.warn('No swoff.config.json found. Run "swoff init" first.');
178
+ return;
179
+ }
180
+ log.info(`Using config: ${configPath}`);
181
+ const detectedLang = language ?? detectProjectLanguage();
182
+ log.info(`Detected project language: ${detectedLang}`);
183
+ if (!filesOnly) {
184
+ log.info("Generating service worker...");
185
+ try {
186
+ await runGenerator("sw-generator.js");
187
+ }
188
+ catch (err) {
189
+ log.error(`Service worker generation failed: ${err instanceof Error ? err.message : String(err)}`);
190
+ }
191
+ }
192
+ if (!swOnly) {
193
+ log.info("Generating supporting files...");
194
+ try {
195
+ await runGenerator("swoff-files-generator.js", [
196
+ "--project-root", projectRoot,
197
+ "--package-dir", packageDir,
198
+ "--language", detectedLang,
199
+ "--config-path", configPath,
200
+ ]);
201
+ }
202
+ catch (err) {
203
+ log.error(`File generation failed: ${err instanceof Error ? err.message : String(err)}`);
204
+ }
205
+ }
206
+ log.success("Generation complete!");
207
+ }
208
+ function runGenerator(generatorName, extraArgs = []) {
209
+ return new Promise((resolve, reject) => {
210
+ const generatorPath = join(packageDir, "dist", "lib", "generators", generatorName);
211
+ if (!existsSync(generatorPath)) {
212
+ reject(new Error(`Generator not found: ${generatorPath}`));
213
+ return;
214
+ }
215
+ const proc = spawn("node", [generatorPath, ...extraArgs], {
216
+ cwd: projectRoot,
217
+ stdio: "inherit",
218
+ });
219
+ proc.on("close", (code) => {
220
+ if (code === 0)
221
+ resolve();
222
+ else
223
+ reject(new Error(`Generator exited with code ${code}`));
224
+ });
225
+ proc.on("error", (err) => reject(err));
226
+ });
227
+ }
228
+ async function validateCommand() {
229
+ log.header("Validating Swoff Configuration");
230
+ const configFiles = ["swoff.config.json", "swoff.config.js"];
231
+ let config = null;
232
+ let configPath = null;
233
+ for (const file of configFiles) {
234
+ const path = join(projectRoot, file);
235
+ if (existsSync(path)) {
236
+ configPath = path;
237
+ if (file.endsWith(".json")) {
238
+ try {
239
+ config = JSON.parse(readFileSync(path, "utf8"));
240
+ }
241
+ catch (err) {
242
+ log.error(`Invalid JSON in ${file}: ${err instanceof Error ? err.message : String(err)}`);
243
+ return;
244
+ }
245
+ }
246
+ break;
247
+ }
248
+ }
249
+ if (!config) {
250
+ log.warn('No swoff.config.json found. Run "swoff init" first.');
251
+ return;
252
+ }
253
+ log.info(`Validating ${configPath}...`);
254
+ const requiredFields = ["enabled", "version", "serviceWorker", "features", "build"];
255
+ const missingFields = requiredFields.filter((field) => !config[field]);
256
+ if (missingFields.length > 0) {
257
+ log.error(`Missing required fields: ${missingFields.join(", ")}`);
258
+ return;
259
+ }
260
+ log.success("Configuration is valid!");
261
+ log.info(`\nConfig summary:`);
262
+ log.help(`Version: ${config.version}`);
263
+ log.help(`Default strategy: ${config.serviceWorker.defaultStrategy}`);
264
+ log.help(`Features enabled: ${Object.entries(config.features)
265
+ .filter(([_, v]) => v)
266
+ .map(([k]) => k)
267
+ .join(", ")}`);
268
+ }
269
+ async function addCommand(feature) {
270
+ log.header(`Adding ${feature} feature`);
271
+ const featureMap = {
272
+ offline: { offlineReads: true },
273
+ "mutation-queue": { mutationQueue: true },
274
+ mutationqueue: { mutationQueue: true },
275
+ pwa: { pwa: true },
276
+ "cross-tab": { crossTabSync: true },
277
+ crosstab: { crossTabSync: true },
278
+ auth: { auth: true },
279
+ };
280
+ const configUpdate = featureMap[feature.toLowerCase()];
281
+ if (!configUpdate) {
282
+ log.error(`Unknown feature: ${feature}`);
283
+ log.info(`Available features: offline, mutation-queue, pwa, cross-tab, auth`);
284
+ return;
285
+ }
286
+ let config = null;
287
+ let configPath = join(projectRoot, "swoff.config.json");
288
+ for (const file of ["swoff.config.json", "swoff.config.js"]) {
289
+ const path = join(projectRoot, file);
290
+ if (existsSync(path)) {
291
+ configPath = path;
292
+ if (file.endsWith(".json")) {
293
+ config = JSON.parse(readFileSync(path, "utf8"));
294
+ }
295
+ break;
296
+ }
297
+ }
298
+ if (!config) {
299
+ log.warn("No config found. Creating new config with feature...");
300
+ config = {
301
+ $schema: "https://swoff.netlify.app/schema/v1.json",
302
+ enabled: true,
303
+ version: "from-package",
304
+ minSupportedVersion: "0.0.0",
305
+ serviceWorker: {
306
+ autoUpdate: false,
307
+ defaultStrategy: "cache-first",
308
+ strategies: {},
309
+ },
310
+ features: {
311
+ versionedSw: true,
312
+ offlineReads: false,
313
+ mutationQueue: false,
314
+ backgroundSync: false,
315
+ pwa: false,
316
+ auth: false,
317
+ crossTabSync: false,
318
+ tagInvalidation: true,
319
+ clientRegistration: true,
320
+ },
321
+ build: {
322
+ outputDir: "dist",
323
+ swFilename: "sw",
324
+ },
325
+ };
326
+ }
327
+ config.features = { ...config.features, ...configUpdate };
328
+ writeFileSync(configPath, JSON.stringify(config, null, 2));
329
+ log.success(`Updated swoff.config.json with ${feature} feature`);
330
+ await generateCommand({ swOnly: false, filesOnly: false });
331
+ log.success(`${feature} feature added successfully!`);
332
+ }
333
+ function detectProjectLanguage() {
334
+ if (existsSync(join(projectRoot, "tsconfig.json")))
335
+ return "ts";
336
+ const pkgPath = join(projectRoot, "package.json");
337
+ if (existsSync(pkgPath)) {
338
+ try {
339
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf8"));
340
+ if (pkg.devDependencies?.typescript || pkg.dependencies?.typescript)
341
+ return "ts";
342
+ }
343
+ catch { }
344
+ }
345
+ const srcDir = join(projectRoot, "src");
346
+ if (existsSync(srcDir)) {
347
+ const tsFiles = ["ts", "tsx"].some((ext) => {
348
+ try {
349
+ const { readdirSync } = require("fs");
350
+ return readdirSync(srcDir, { withFileTypes: true }).some((entry) => entry.isFile() && entry.name.endsWith(`.${ext}`));
351
+ }
352
+ catch {
353
+ return false;
354
+ }
355
+ });
356
+ if (tsFiles)
357
+ return "ts";
358
+ }
359
+ return "js";
360
+ }
361
+ async function main() {
362
+ if (!command) {
363
+ showHelp();
364
+ process.exit(0);
365
+ }
366
+ switch (command) {
367
+ case "init": {
368
+ const frameworkIdx = options.indexOf("--framework");
369
+ const framework = frameworkIdx !== -1 ? options[frameworkIdx + 1] : undefined;
370
+ await initCommand(framework);
371
+ break;
372
+ }
373
+ case "generate": {
374
+ const swOnly = options.includes("--sw-only");
375
+ const filesOnly = options.includes("--files-only");
376
+ await generateCommand({ swOnly, filesOnly });
377
+ break;
378
+ }
379
+ case "validate":
380
+ await validateCommand();
381
+ break;
382
+ case "add": {
383
+ const feature = options[0];
384
+ if (!feature) {
385
+ log.error("Please specify a feature to add");
386
+ log.info("Usage: swoff add <feature>");
387
+ log.info("Features: offline, mutation-queue, pwa, cross-tab, auth");
388
+ process.exit(1);
389
+ }
390
+ await addCommand(feature);
391
+ break;
392
+ }
393
+ case "help":
394
+ case "--help":
395
+ case "-h":
396
+ showHelp(options[0]);
397
+ break;
398
+ default:
399
+ log.error(`Unknown command: ${command}`);
400
+ log.info(`Run "swoff help" for available commands`);
401
+ process.exit(1);
402
+ }
403
+ }
404
+ main().catch((err) => {
405
+ log.error(`Error: ${err instanceof Error ? err.message : String(err)}`);
406
+ process.exit(1);
407
+ });
408
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}