@wix/web50-cli 0.1.0 → 0.1.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/web5.js +1 -2
- package/dist/cjs/auth/deviceFlow.js +175 -16
- package/dist/cjs/auth/deviceFlow.js.map +1 -1
- package/dist/cjs/auth/index.js +93 -10
- package/dist/cjs/auth/index.js.map +1 -1
- package/dist/cjs/auth/secretStore.js.map +1 -1
- package/dist/cjs/cli.js +29 -1
- package/dist/cjs/cli.js.map +1 -1
- package/dist/cjs/commands/bundle.js +103 -0
- package/dist/cjs/commands/bundle.js.map +1 -0
- package/dist/cjs/commands/conversation.js +50 -0
- package/dist/cjs/commands/conversation.js.map +1 -0
- package/dist/cjs/commands/conversationWizard.js +528 -0
- package/dist/cjs/commands/conversationWizard.js.map +1 -0
- package/dist/cjs/commands/deploy.js +237 -0
- package/dist/cjs/commands/deploy.js.map +1 -0
- package/dist/cjs/commands/ecom.js +239 -0
- package/dist/cjs/commands/ecom.js.map +1 -0
- package/dist/cjs/commands/embed.js +118 -0
- package/dist/cjs/commands/embed.js.map +1 -0
- package/dist/cjs/commands/init.js +65 -29
- package/dist/cjs/commands/init.js.map +1 -1
- package/dist/cjs/commands/instructions.js +456 -0
- package/dist/cjs/commands/instructions.js.map +1 -0
- package/dist/cjs/commands/login.js +63 -4
- package/dist/cjs/commands/login.js.map +1 -1
- package/dist/cjs/commands/logout.js +16 -0
- package/dist/cjs/commands/logout.js.map +1 -0
- package/dist/cjs/commands/serve.js +122 -0
- package/dist/cjs/commands/serve.js.map +1 -0
- package/dist/cjs/commands/storybook.js +102 -0
- package/dist/cjs/commands/storybook.js.map +1 -0
- package/dist/cjs/commands/validate.js +617 -17
- package/dist/cjs/commands/validate.js.map +1 -1
- package/dist/cjs/commands/whoami.js +48 -0
- package/dist/cjs/commands/whoami.js.map +1 -0
- package/dist/cjs/templates/aiInstructionsSchema.js +5 -1
- package/dist/cjs/templates/aiInstructionsSchema.js.map +1 -1
- package/dist/cjs/templates/cmsMappingSchema.js +132 -0
- package/dist/cjs/templates/cmsMappingSchema.js.map +1 -0
- package/dist/cjs/utils/print.js +12 -0
- package/dist/cjs/utils/print.js.map +1 -1
- package/dist/cjs/utils/project.js +24 -0
- package/dist/cjs/utils/project.js.map +1 -1
- package/dist/cjs/utils/wixApi.js +57 -0
- package/dist/cjs/utils/wixApi.js.map +1 -0
- package/dist/esm/auth/deviceFlow.js +182 -17
- package/dist/esm/auth/deviceFlow.js.map +1 -1
- package/dist/esm/auth/index.js +98 -11
- package/dist/esm/auth/index.js.map +1 -1
- package/dist/esm/auth/secretStore.js.map +1 -1
- package/dist/esm/cli.js +29 -1
- package/dist/esm/cli.js.map +1 -1
- package/dist/esm/commands/bundle.js +100 -0
- package/dist/esm/commands/bundle.js.map +1 -0
- package/dist/esm/commands/conversation.js +44 -0
- package/dist/esm/commands/conversation.js.map +1 -0
- package/dist/esm/commands/conversationWizard.js +529 -0
- package/dist/esm/commands/conversationWizard.js.map +1 -0
- package/dist/esm/commands/deploy.js +239 -0
- package/dist/esm/commands/deploy.js.map +1 -0
- package/dist/esm/commands/ecom.js +234 -0
- package/dist/esm/commands/ecom.js.map +1 -0
- package/dist/esm/commands/embed.js +112 -0
- package/dist/esm/commands/embed.js.map +1 -0
- package/dist/esm/commands/init.js +66 -30
- package/dist/esm/commands/init.js.map +1 -1
- package/dist/esm/commands/instructions.js +459 -0
- package/dist/esm/commands/instructions.js.map +1 -0
- package/dist/esm/commands/login.js +66 -6
- package/dist/esm/commands/login.js.map +1 -1
- package/dist/esm/commands/logout.js +12 -0
- package/dist/esm/commands/logout.js.map +1 -0
- package/dist/esm/commands/serve.js +117 -0
- package/dist/esm/commands/serve.js.map +1 -0
- package/dist/esm/commands/storybook.js +97 -0
- package/dist/esm/commands/storybook.js.map +1 -0
- package/dist/esm/commands/validate.js +623 -19
- package/dist/esm/commands/validate.js.map +1 -1
- package/dist/esm/commands/whoami.js +44 -0
- package/dist/esm/commands/whoami.js.map +1 -0
- package/dist/esm/templates/aiInstructionsSchema.js +5 -1
- package/dist/esm/templates/aiInstructionsSchema.js.map +1 -1
- package/dist/esm/templates/cmsMappingSchema.js +128 -0
- package/dist/esm/templates/cmsMappingSchema.js.map +1 -0
- package/dist/esm/utils/print.js +10 -0
- package/dist/esm/utils/print.js.map +1 -1
- package/dist/esm/utils/project.js +23 -0
- package/dist/esm/utils/project.js.map +1 -1
- package/dist/esm/utils/wixApi.js +53 -0
- package/dist/esm/utils/wixApi.js.map +1 -0
- package/dist/types/auth/deviceFlow.d.ts +3 -1
- package/dist/types/auth/deviceFlow.d.ts.map +1 -1
- package/dist/types/auth/index.d.ts +6 -1
- package/dist/types/auth/index.d.ts.map +1 -1
- package/dist/types/auth/secretStore.d.ts +2 -0
- package/dist/types/auth/secretStore.d.ts.map +1 -1
- package/dist/types/commands/bundle.d.ts +10 -0
- package/dist/types/commands/bundle.d.ts.map +1 -0
- package/dist/types/commands/conversation.d.ts +3 -0
- package/dist/types/commands/conversation.d.ts.map +1 -0
- package/dist/types/commands/conversationWizard.d.ts +3 -0
- package/dist/types/commands/conversationWizard.d.ts.map +1 -0
- package/dist/types/commands/deploy.d.ts +3 -0
- package/dist/types/commands/deploy.d.ts.map +1 -0
- package/dist/types/commands/ecom.d.ts +3 -0
- package/dist/types/commands/ecom.d.ts.map +1 -0
- package/dist/types/commands/embed.d.ts +3 -0
- package/dist/types/commands/embed.d.ts.map +1 -0
- package/dist/types/commands/init.d.ts.map +1 -1
- package/dist/types/commands/instructions.d.ts +3 -0
- package/dist/types/commands/instructions.d.ts.map +1 -0
- package/dist/types/commands/login.d.ts.map +1 -1
- package/dist/types/commands/logout.d.ts +3 -0
- package/dist/types/commands/logout.d.ts.map +1 -0
- package/dist/types/commands/serve.d.ts +3 -0
- package/dist/types/commands/serve.d.ts.map +1 -0
- package/dist/types/commands/storybook.d.ts +3 -0
- package/dist/types/commands/storybook.d.ts.map +1 -0
- package/dist/types/commands/validate.d.ts +7 -0
- package/dist/types/commands/validate.d.ts.map +1 -1
- package/dist/types/commands/whoami.d.ts +3 -0
- package/dist/types/commands/whoami.d.ts.map +1 -0
- package/dist/types/templates/aiInstructionsSchema.d.ts.map +1 -1
- package/dist/types/templates/cmsMappingSchema.d.ts +2 -0
- package/dist/types/templates/cmsMappingSchema.d.ts.map +1 -0
- package/dist/types/utils/print.d.ts +3 -0
- package/dist/types/utils/print.d.ts.map +1 -1
- package/dist/types/utils/project.d.ts +12 -0
- package/dist/types/utils/project.d.ts.map +1 -1
- package/dist/types/utils/wixApi.d.ts +9 -0
- package/dist/types/utils/wixApi.d.ts.map +1 -0
- package/package.json +5 -5
- package/defaults/package.json +0 -42
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.logoutCommand = void 0;
|
|
5
|
+
var _commander = require("commander");
|
|
6
|
+
var _auth = require("../auth");
|
|
7
|
+
var _print = require("../utils/print");
|
|
8
|
+
const logoutCommand = exports.logoutCommand = new _commander.Command('logout').description('Sign out and remove stored credentials').action(async () => {
|
|
9
|
+
try {
|
|
10
|
+
await (0, _auth.logout)();
|
|
11
|
+
} catch (err_) {
|
|
12
|
+
(0, _print.error)(err_ instanceof Error ? err_.message : String(err_));
|
|
13
|
+
process.exit(1);
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
//# sourceMappingURL=logout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_commander","require","_auth","_print","logoutCommand","exports","Command","description","action","logout","err_","error","Error","message","String","process","exit"],"sources":["../../../src/commands/logout.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { logout } from '../auth';\nimport { error } from '../utils/print';\n\nexport const logoutCommand = new Command('logout')\n .description('Sign out and remove stored credentials')\n .action(async () => {\n try {\n await logout();\n } catch (err_) {\n error(err_ instanceof Error ? err_.message : String(err_));\n process.exit(1);\n }\n });\n"],"mappings":";;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AAEO,MAAMG,aAAa,GAAAC,OAAA,CAAAD,aAAA,GAAG,IAAIE,kBAAO,CAAC,QAAQ,CAAC,CAC/CC,WAAW,CAAC,wCAAwC,CAAC,CACrDC,MAAM,CAAC,YAAY;EAClB,IAAI;IACF,MAAM,IAAAC,YAAM,EAAC,CAAC;EAChB,CAAC,CAAC,OAAOC,IAAI,EAAE;IACb,IAAAC,YAAK,EAACD,IAAI,YAAYE,KAAK,GAAGF,IAAI,CAACG,OAAO,GAAGC,MAAM,CAACJ,IAAI,CAAC,CAAC;IAC1DK,OAAO,CAACC,IAAI,CAAC,CAAC,CAAC;EACjB;AACF,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.serveCommand = void 0;
|
|
5
|
+
var _commander = require("commander");
|
|
6
|
+
var path = _interopRequireWildcard(require("path"));
|
|
7
|
+
var fs = _interopRequireWildcard(require("fs"));
|
|
8
|
+
var http = _interopRequireWildcard(require("http"));
|
|
9
|
+
var _child_process = require("child_process");
|
|
10
|
+
var _print = require("../utils/print");
|
|
11
|
+
var _project = require("../utils/project");
|
|
12
|
+
var _bundle = require("./bundle");
|
|
13
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
14
|
+
const DEFAULT_PORT = 4001;
|
|
15
|
+
const MIME_TYPES = {
|
|
16
|
+
'.js': 'application/javascript',
|
|
17
|
+
'.css': 'text/css',
|
|
18
|
+
'.json': 'application/json',
|
|
19
|
+
'.map': 'application/json'
|
|
20
|
+
};
|
|
21
|
+
function startServer(distDir, corsOrigin) {
|
|
22
|
+
const server = http.createServer((req, res) => {
|
|
23
|
+
res.setHeader('Access-Control-Allow-Origin', corsOrigin);
|
|
24
|
+
res.setHeader('Access-Control-Allow-Methods', 'GET, OPTIONS');
|
|
25
|
+
res.setHeader('Access-Control-Allow-Headers', '*');
|
|
26
|
+
if (req.method === 'OPTIONS') {
|
|
27
|
+
res.writeHead(204);
|
|
28
|
+
res.end();
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const urlPath = req.url === '/' ? '' : req.url ?? '';
|
|
32
|
+
const filePath = path.join(distDir, urlPath);
|
|
33
|
+
|
|
34
|
+
// Prevent path traversal outside distDir
|
|
35
|
+
if (!filePath.startsWith(distDir)) {
|
|
36
|
+
res.writeHead(403);
|
|
37
|
+
res.end('Forbidden');
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (!fs.existsSync(filePath) || fs.statSync(filePath).isDirectory()) {
|
|
41
|
+
res.writeHead(404);
|
|
42
|
+
res.end('Not found');
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const ext = path.extname(filePath);
|
|
46
|
+
const contentType = MIME_TYPES[ext] ?? 'application/octet-stream';
|
|
47
|
+
res.setHeader('Content-Type', contentType);
|
|
48
|
+
res.writeHead(200);
|
|
49
|
+
fs.createReadStream(filePath).pipe(res);
|
|
50
|
+
});
|
|
51
|
+
return server;
|
|
52
|
+
}
|
|
53
|
+
const serveCommand = exports.serveCommand = new _commander.Command('serve').description('Bundle components and serve them on http://localhost:<port> with CORS enabled').option('--port <n>', 'Port to listen on', String(DEFAULT_PORT)).option('--no-bundle', 'Serve existing dist/cdn/ without rebuilding').option('--watch', 'Re-bundle on source changes (starts vite --watch alongside server)').option('--open', 'Open the served URL in your browser after start').option('--cors-origin <origin>', 'Restrict CORS Allow-Origin header', '*').action(async opts => {
|
|
54
|
+
try {
|
|
55
|
+
const projectRoot = (0, _project.findProjectRoot)(process.cwd());
|
|
56
|
+
if (!projectRoot) {
|
|
57
|
+
(0, _print.error)('No web5.config.json found. Run this command from within a Web5 project.');
|
|
58
|
+
process.exit(1);
|
|
59
|
+
}
|
|
60
|
+
const port = parseInt(opts.port, 10);
|
|
61
|
+
if (isNaN(port) || port < 1 || port > 65535) {
|
|
62
|
+
(0, _print.error)(`Invalid port: ${opts.port}`);
|
|
63
|
+
process.exit(1);
|
|
64
|
+
}
|
|
65
|
+
const distDir = path.join(projectRoot, 'dist', 'cdn');
|
|
66
|
+
|
|
67
|
+
// ── Bundle (unless --no-bundle) ─────────────────────────────────────────
|
|
68
|
+
if (opts.bundle !== false) {
|
|
69
|
+
await (0, _bundle.runBundle)(projectRoot);
|
|
70
|
+
}
|
|
71
|
+
if (!fs.existsSync(distDir)) {
|
|
72
|
+
(0, _print.error)(`Bundle output not found at ${distDir}. Run \`web5 bundle\` first or remove --no-bundle.`);
|
|
73
|
+
process.exit(1);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// ── Watch mode: spawn vite --watch in background ────────────────────────
|
|
77
|
+
if (opts.watch) {
|
|
78
|
+
const viteBin = path.join(projectRoot, 'node_modules', '.bin', 'vite');
|
|
79
|
+
if (!fs.existsSync(viteBin)) {
|
|
80
|
+
(0, _print.error)('vite not found. Run `npm install` in your project first.');
|
|
81
|
+
process.exit(1);
|
|
82
|
+
}
|
|
83
|
+
const watcher = (0, _child_process.spawn)(`"${viteBin}"`, ['build', '--config', 'src/vite.cdn.config.ts', '--watch'], {
|
|
84
|
+
cwd: projectRoot,
|
|
85
|
+
shell: true,
|
|
86
|
+
stdio: 'inherit'
|
|
87
|
+
});
|
|
88
|
+
watcher.on('error', err_ => (0, _print.error)(`Watch process error: ${err_.message}`));
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// ── Start HTTP server ───────────────────────────────────────────────────
|
|
92
|
+
const server = startServer(distDir, opts.corsOrigin);
|
|
93
|
+
const url = `http://localhost:${port}`;
|
|
94
|
+
server.listen(port, async () => {
|
|
95
|
+
const files = fs.readdirSync(distDir);
|
|
96
|
+
if ((0, _print.isJsonMode)()) {
|
|
97
|
+
console.log(JSON.stringify({
|
|
98
|
+
url,
|
|
99
|
+
port,
|
|
100
|
+
files: files.map(f => `${url}/${f}`)
|
|
101
|
+
}));
|
|
102
|
+
} else {
|
|
103
|
+
(0, _print.success)(`Serving on ${url}`);
|
|
104
|
+
for (const file of files) {
|
|
105
|
+
(0, _print.info)(` ${url}/${file}`);
|
|
106
|
+
}
|
|
107
|
+
if (opts.watch) {
|
|
108
|
+
(0, _print.info)('Watch mode active — rebuilds automatically on file changes.');
|
|
109
|
+
}
|
|
110
|
+
(0, _print.info)('Press Ctrl+C to stop.');
|
|
111
|
+
}
|
|
112
|
+
if (opts.open) {
|
|
113
|
+
const openPkg = (await Promise.resolve().then(() => _interopRequireWildcard(require('open')))).default;
|
|
114
|
+
await openPkg(url);
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
} catch (err_) {
|
|
118
|
+
(0, _print.error)(err_ instanceof Error ? err_.message : String(err_));
|
|
119
|
+
process.exit(1);
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
//# sourceMappingURL=serve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_commander","require","path","_interopRequireWildcard","fs","http","_child_process","_print","_project","_bundle","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","DEFAULT_PORT","MIME_TYPES","startServer","distDir","corsOrigin","server","createServer","req","res","setHeader","method","writeHead","end","urlPath","url","filePath","join","startsWith","existsSync","statSync","isDirectory","ext","extname","contentType","createReadStream","pipe","serveCommand","exports","Command","description","option","String","action","opts","projectRoot","findProjectRoot","process","cwd","error","exit","port","parseInt","isNaN","bundle","runBundle","watch","viteBin","watcher","spawn","shell","stdio","on","err_","message","listen","files","readdirSync","isJsonMode","console","log","JSON","stringify","map","success","file","info","open","openPkg","Promise","resolve","then","Error"],"sources":["../../../src/commands/serve.ts"],"sourcesContent":["import { Command } from 'commander';\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport * as http from 'http';\nimport { spawn } from 'child_process';\nimport { success, error, info, isJsonMode } from '../utils/print';\nimport { findProjectRoot } from '../utils/project';\nimport { runBundle } from './bundle';\n\nconst DEFAULT_PORT = 4001;\n\nconst MIME_TYPES: Record<string, string> = {\n '.js': 'application/javascript',\n '.css': 'text/css',\n '.json': 'application/json',\n '.map': 'application/json',\n};\n\nfunction startServer(distDir: string, corsOrigin: string): http.Server {\n const server = http.createServer((req, res) => {\n res.setHeader('Access-Control-Allow-Origin', corsOrigin);\n res.setHeader('Access-Control-Allow-Methods', 'GET, OPTIONS');\n res.setHeader('Access-Control-Allow-Headers', '*');\n\n if (req.method === 'OPTIONS') {\n res.writeHead(204);\n res.end();\n return;\n }\n\n const urlPath = req.url === '/' ? '' : req.url ?? '';\n const filePath = path.join(distDir, urlPath);\n\n // Prevent path traversal outside distDir\n if (!filePath.startsWith(distDir)) {\n res.writeHead(403);\n res.end('Forbidden');\n return;\n }\n\n if (!fs.existsSync(filePath) || fs.statSync(filePath).isDirectory()) {\n res.writeHead(404);\n res.end('Not found');\n return;\n }\n\n const ext = path.extname(filePath);\n const contentType = MIME_TYPES[ext] ?? 'application/octet-stream';\n res.setHeader('Content-Type', contentType);\n res.writeHead(200);\n fs.createReadStream(filePath).pipe(res);\n });\n\n return server;\n}\n\nexport const serveCommand = new Command('serve')\n .description(\n 'Bundle components and serve them on http://localhost:<port> with CORS enabled',\n )\n .option('--port <n>', 'Port to listen on', String(DEFAULT_PORT))\n .option('--no-bundle', 'Serve existing dist/cdn/ without rebuilding')\n .option(\n '--watch',\n 'Re-bundle on source changes (starts vite --watch alongside server)',\n )\n .option('--open', 'Open the served URL in your browser after start')\n .option('--cors-origin <origin>', 'Restrict CORS Allow-Origin header', '*')\n .action(\n async (opts: {\n port: string;\n bundle: boolean;\n watch?: boolean;\n open?: boolean;\n corsOrigin: string;\n }) => {\n try {\n const projectRoot = findProjectRoot(process.cwd());\n if (!projectRoot) {\n error(\n 'No web5.config.json found. Run this command from within a Web5 project.',\n );\n process.exit(1);\n }\n\n const port = parseInt(opts.port, 10);\n if (isNaN(port) || port < 1 || port > 65535) {\n error(`Invalid port: ${opts.port}`);\n process.exit(1);\n }\n\n const distDir = path.join(projectRoot, 'dist', 'cdn');\n\n // ── Bundle (unless --no-bundle) ─────────────────────────────────────────\n if (opts.bundle !== false) {\n await runBundle(projectRoot);\n }\n\n if (!fs.existsSync(distDir)) {\n error(\n `Bundle output not found at ${distDir}. Run \\`web5 bundle\\` first or remove --no-bundle.`,\n );\n process.exit(1);\n }\n\n // ── Watch mode: spawn vite --watch in background ────────────────────────\n if (opts.watch) {\n const viteBin = path.join(\n projectRoot,\n 'node_modules',\n '.bin',\n 'vite',\n );\n if (!fs.existsSync(viteBin)) {\n error('vite not found. Run `npm install` in your project first.');\n process.exit(1);\n }\n const watcher = spawn(\n `\"${viteBin}\"`,\n ['build', '--config', 'src/vite.cdn.config.ts', '--watch'],\n { cwd: projectRoot, shell: true, stdio: 'inherit' },\n );\n watcher.on('error', (err_) =>\n error(`Watch process error: ${err_.message}`),\n );\n }\n\n // ── Start HTTP server ───────────────────────────────────────────────────\n const server = startServer(distDir, opts.corsOrigin);\n const url = `http://localhost:${port}`;\n\n server.listen(port, async () => {\n const files = fs.readdirSync(distDir);\n\n if (isJsonMode()) {\n console.log(\n JSON.stringify({\n url,\n port,\n files: files.map((f) => `${url}/${f}`),\n }),\n );\n } else {\n success(`Serving on ${url}`);\n for (const file of files) {\n info(` ${url}/${file}`);\n }\n if (opts.watch) {\n info(\n 'Watch mode active — rebuilds automatically on file changes.',\n );\n }\n info('Press Ctrl+C to stop.');\n }\n\n if (opts.open) {\n const openPkg = (await import('open')).default;\n await openPkg(url);\n }\n });\n } catch (err_) {\n error(err_ instanceof Error ? err_.message : String(err_));\n process.exit(1);\n }\n },\n );\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.storybookCommand = void 0;
|
|
5
|
+
var _commander = require("commander");
|
|
6
|
+
var path = _interopRequireWildcard(require("path"));
|
|
7
|
+
var fs = _interopRequireWildcard(require("fs"));
|
|
8
|
+
var _promises = require("fs/promises");
|
|
9
|
+
var _child_process = require("child_process");
|
|
10
|
+
var _print = require("../utils/print");
|
|
11
|
+
var _project = require("../utils/project");
|
|
12
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
13
|
+
const DEFAULTS_DIR = path.join(__dirname, '../../../defaults');
|
|
14
|
+
const STORYBOOK_DEPS = {
|
|
15
|
+
storybook: '^8.0.0',
|
|
16
|
+
'@storybook/react-vite': '^8.0.0',
|
|
17
|
+
'@storybook/addon-essentials': '^8.0.0'
|
|
18
|
+
};
|
|
19
|
+
const STORYBOOK_SCRIPTS = {
|
|
20
|
+
storybook: 'storybook dev -p 6006',
|
|
21
|
+
'build-storybook': 'storybook build'
|
|
22
|
+
};
|
|
23
|
+
const storybookCommand = exports.storybookCommand = new _commander.Command('storybook').description('Add Storybook configuration and stories to a Web5 project').action(async () => {
|
|
24
|
+
try {
|
|
25
|
+
const projectRoot = (0, _project.findProjectRoot)(process.cwd());
|
|
26
|
+
if (!projectRoot) {
|
|
27
|
+
(0, _print.error)('No web5.config.json found. Run this command from within a Web5 project.');
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
(0, _print.info)(`Adding Storybook to ${projectRoot}`);
|
|
31
|
+
|
|
32
|
+
// ── Copy .storybook/ config (overwrites on re-run — intentional) ──────
|
|
33
|
+
const storybookConfigSrc = path.join(DEFAULTS_DIR, '.storybook');
|
|
34
|
+
const storybookConfigDest = path.join(projectRoot, '.storybook');
|
|
35
|
+
await (0, _promises.cp)(storybookConfigSrc, storybookConfigDest, {
|
|
36
|
+
recursive: true
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
// ── Copy stories folder (overwrites on re-run — intentional) ──────────
|
|
40
|
+
const storiesSrc = path.join(DEFAULTS_DIR, 'src', 'components', 'storybook');
|
|
41
|
+
const storiesDest = path.join(projectRoot, 'src', 'components', 'storybook');
|
|
42
|
+
await (0, _promises.cp)(storiesSrc, storiesDest, {
|
|
43
|
+
recursive: true
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
// ── Update package.json (idempotent) ───────────────────────────────────
|
|
47
|
+
const pkgPath = path.join(projectRoot, 'package.json');
|
|
48
|
+
if (!fs.existsSync(pkgPath)) {
|
|
49
|
+
(0, _print.error)('No package.json found in project root.');
|
|
50
|
+
process.exit(1);
|
|
51
|
+
}
|
|
52
|
+
const pkg = JSON.parse(await (0, _promises.readFile)(pkgPath, 'utf8'));
|
|
53
|
+
let pkgChanged = false;
|
|
54
|
+
|
|
55
|
+
// Scripts
|
|
56
|
+
pkg.scripts ?? (pkg.scripts = {});
|
|
57
|
+
for (const [name, cmd] of Object.entries(STORYBOOK_SCRIPTS)) {
|
|
58
|
+
if (!pkg.scripts[name]) {
|
|
59
|
+
pkg.scripts[name] = cmd;
|
|
60
|
+
pkgChanged = true;
|
|
61
|
+
} else {
|
|
62
|
+
(0, _print.warn)(`Script "${name}" already exists — skipping`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// devDependencies
|
|
67
|
+
pkg.devDependencies ?? (pkg.devDependencies = {});
|
|
68
|
+
const missingDeps = [];
|
|
69
|
+
for (const [dep, version] of Object.entries(STORYBOOK_DEPS)) {
|
|
70
|
+
if (!pkg.devDependencies[dep]) {
|
|
71
|
+
pkg.devDependencies[dep] = version;
|
|
72
|
+
missingDeps.push(dep);
|
|
73
|
+
pkgChanged = true;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (pkgChanged) {
|
|
77
|
+
await (0, _promises.writeFile)(pkgPath, JSON.stringify(pkg, null, 2) + '\n', 'utf8');
|
|
78
|
+
(0, _print.info)('Updated package.json');
|
|
79
|
+
} else {
|
|
80
|
+
(0, _print.info)('package.json already up to date');
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// ── Install dependencies ───────────────────────────────────────────────
|
|
84
|
+
if (missingDeps.length > 0) {
|
|
85
|
+
(0, _print.info)(`Installing: ${missingDeps.join(', ')}`);
|
|
86
|
+
} else {
|
|
87
|
+
(0, _print.info)('Running npm install to ensure dependencies are installed...');
|
|
88
|
+
}
|
|
89
|
+
(0, _child_process.execSync)('npm install', {
|
|
90
|
+
cwd: projectRoot,
|
|
91
|
+
stdio: 'inherit'
|
|
92
|
+
});
|
|
93
|
+
(0, _print.success)('Storybook is ready.');
|
|
94
|
+
console.log('');
|
|
95
|
+
(0, _print.info)('Run it with:');
|
|
96
|
+
(0, _print.info)(' npm run storybook');
|
|
97
|
+
} catch (err_) {
|
|
98
|
+
(0, _print.error)(err_ instanceof Error ? err_.message : String(err_));
|
|
99
|
+
process.exit(1);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
//# sourceMappingURL=storybook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_commander","require","path","_interopRequireWildcard","fs","_promises","_child_process","_print","_project","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","DEFAULTS_DIR","join","__dirname","STORYBOOK_DEPS","storybook","STORYBOOK_SCRIPTS","storybookCommand","exports","Command","description","action","projectRoot","findProjectRoot","process","cwd","error","exit","info","storybookConfigSrc","storybookConfigDest","cp","recursive","storiesSrc","storiesDest","pkgPath","existsSync","pkg","JSON","parse","readFile","pkgChanged","scripts","name","cmd","entries","warn","devDependencies","missingDeps","dep","version","push","writeFile","stringify","length","execSync","stdio","success","console","log","err_","Error","message","String"],"sources":["../../../src/commands/storybook.ts"],"sourcesContent":["import { Command } from 'commander';\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport { cp, readFile, writeFile } from 'fs/promises';\nimport { execSync } from 'child_process';\nimport { success, error, info, warn } from '../utils/print';\nimport { findProjectRoot } from '../utils/project';\n\nconst DEFAULTS_DIR = path.join(__dirname, '../../../defaults');\n\nconst STORYBOOK_DEPS = {\n storybook: '^8.0.0',\n '@storybook/react-vite': '^8.0.0',\n '@storybook/addon-essentials': '^8.0.0',\n};\n\nconst STORYBOOK_SCRIPTS = {\n storybook: 'storybook dev -p 6006',\n 'build-storybook': 'storybook build',\n};\n\nexport const storybookCommand = new Command('storybook')\n .description('Add Storybook configuration and stories to a Web5 project')\n .action(async () => {\n try {\n const projectRoot = findProjectRoot(process.cwd());\n if (!projectRoot) {\n error(\n 'No web5.config.json found. Run this command from within a Web5 project.',\n );\n process.exit(1);\n }\n\n info(`Adding Storybook to ${projectRoot}`);\n\n // ── Copy .storybook/ config (overwrites on re-run — intentional) ──────\n const storybookConfigSrc = path.join(DEFAULTS_DIR, '.storybook');\n const storybookConfigDest = path.join(projectRoot, '.storybook');\n await cp(storybookConfigSrc, storybookConfigDest, { recursive: true });\n\n // ── Copy stories folder (overwrites on re-run — intentional) ──────────\n const storiesSrc = path.join(\n DEFAULTS_DIR,\n 'src',\n 'components',\n 'storybook',\n );\n const storiesDest = path.join(\n projectRoot,\n 'src',\n 'components',\n 'storybook',\n );\n await cp(storiesSrc, storiesDest, { recursive: true });\n\n // ── Update package.json (idempotent) ───────────────────────────────────\n const pkgPath = path.join(projectRoot, 'package.json');\n if (!fs.existsSync(pkgPath)) {\n error('No package.json found in project root.');\n process.exit(1);\n }\n\n const pkg = JSON.parse(await readFile(pkgPath, 'utf8')) as {\n scripts?: Record<string, string>;\n devDependencies?: Record<string, string>;\n };\n\n let pkgChanged = false;\n\n // Scripts\n pkg.scripts ??= {};\n for (const [name, cmd] of Object.entries(STORYBOOK_SCRIPTS)) {\n if (!pkg.scripts[name]) {\n pkg.scripts[name] = cmd;\n pkgChanged = true;\n } else {\n warn(`Script \"${name}\" already exists — skipping`);\n }\n }\n\n // devDependencies\n pkg.devDependencies ??= {};\n const missingDeps: string[] = [];\n for (const [dep, version] of Object.entries(STORYBOOK_DEPS)) {\n if (!pkg.devDependencies[dep]) {\n pkg.devDependencies[dep] = version;\n missingDeps.push(dep);\n pkgChanged = true;\n }\n }\n\n if (pkgChanged) {\n await writeFile(pkgPath, JSON.stringify(pkg, null, 2) + '\\n', 'utf8');\n info('Updated package.json');\n } else {\n info('package.json already up to date');\n }\n\n // ── Install dependencies ───────────────────────────────────────────────\n if (missingDeps.length > 0) {\n info(`Installing: ${missingDeps.join(', ')}`);\n } else {\n info('Running npm install to ensure dependencies are installed...');\n }\n\n execSync('npm install', { cwd: projectRoot, stdio: 'inherit' });\n\n success('Storybook is ready.');\n console.log('');\n info('Run it with:');\n info(' npm run storybook');\n } catch (err_) {\n error(err_ instanceof Error ? err_.message : String(err_));\n process.exit(1);\n }\n });\n"],"mappings":"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","ignoreList":[]}
|