@42ws/cli 0.0.1 → 0.0.3

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/README.md CHANGED
@@ -1,12 +1,12 @@
1
- # 42ws
1
+ # @42ws/cli
2
2
 
3
3
  Publish static sites in one command.
4
4
 
5
5
  ## Usage
6
6
 
7
7
  ```
8
- npx 42ws@latest login --token ws_xxx
9
- npx 42ws@latest publish --site my-site --dir dist
8
+ npx @42ws/cli@latest login --token ws_xxx
9
+ npx @42ws/cli@latest publish --site my-site --dir dist
10
10
  ```
11
11
 
12
12
  ## Commands
@@ -0,0 +1,9 @@
1
+ export interface InitArgs {
2
+ site?: string;
3
+ output?: string;
4
+ build?: string;
5
+ spa?: boolean;
6
+ yes?: boolean;
7
+ }
8
+ export declare function init(args: InitArgs): Promise<void>;
9
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AA8BA,MAAM,WAAW,QAAQ;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAuFxD"}
@@ -0,0 +1,103 @@
1
+ import { existsSync, writeFileSync } from 'node:fs';
2
+ import { join, basename } from 'node:path';
3
+ import { createInterface } from 'node:readline';
4
+ import { detectFramework } from '../lib/detect.js';
5
+ import { error, isJsonMode } from '../lib/output.js';
6
+ function slugify(name) {
7
+ return name
8
+ .toLowerCase()
9
+ .replace(/[^a-z0-9-]+/g, '-')
10
+ .replace(/^-+|-+$/g, '');
11
+ }
12
+ function prompt(question) {
13
+ return new Promise(resolve => {
14
+ const rl = createInterface({ input: process.stdin, output: process.stderr });
15
+ rl.question(question, answer => {
16
+ rl.close();
17
+ resolve(answer.trim());
18
+ });
19
+ });
20
+ }
21
+ export async function init(args) {
22
+ const cwd = process.cwd();
23
+ const configPath = join(cwd, '42ws.json');
24
+ const detection = detectFramework(cwd);
25
+ // If --json mode, use flag values directly (non-interactive)
26
+ if (isJsonMode()) {
27
+ const siteName = args.site;
28
+ if (!siteName) {
29
+ error('INVALID_SITE_NAME', 'Site name is required in JSON mode.', 'Use --site=<name>.');
30
+ process.exit(1);
31
+ }
32
+ const config = {
33
+ site: siteName,
34
+ output: args.output ?? detection.output ?? 'dist',
35
+ };
36
+ if (args.build !== undefined) {
37
+ config.build = args.build || undefined;
38
+ }
39
+ if (args.spa !== undefined) {
40
+ config.spa = args.spa;
41
+ }
42
+ writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', { encoding: 'utf-8' });
43
+ process.stdout.write(JSON.stringify({ ok: true, path: configPath, config }) + '\n');
44
+ return;
45
+ }
46
+ // Interactive mode
47
+ if (!process.stdin.isTTY) {
48
+ error('NOT_A_TTY', 'Stdin is not a TTY.', 'Use --site, --output, --build, --spa flags with --json for non-interactive mode.');
49
+ process.exit(1);
50
+ }
51
+ // Check if 42ws.json already exists
52
+ if (existsSync(configPath)) {
53
+ const overwrite = await prompt('42ws.json already exists. Overwrite? [y/N]: ');
54
+ if (overwrite.toLowerCase() !== 'y') {
55
+ process.stderr.write('Cancelled.\n');
56
+ process.exit(0);
57
+ }
58
+ }
59
+ // 1. Site name
60
+ const defaultSite = slugify(basename(cwd));
61
+ const siteAnswer = await prompt(`Site name [${defaultSite}]: `);
62
+ const siteName = siteAnswer.length > 0 ? siteAnswer : defaultSite;
63
+ // 2. Output directory
64
+ const defaultOutput = detection.output ?? 'dist';
65
+ const outputAnswer = await prompt(`Output directory [${defaultOutput}]: `);
66
+ const outputDir = outputAnswer.length > 0 ? outputAnswer : defaultOutput;
67
+ // 3. Build command
68
+ const defaultBuild = detection.build ?? 'npm run build';
69
+ const buildAnswer = await prompt(`Build command [${defaultBuild}] (empty for none): `);
70
+ let buildCmd;
71
+ if (buildAnswer === '') {
72
+ // keep default
73
+ buildCmd = defaultBuild;
74
+ }
75
+ else if (buildAnswer.toLowerCase() === 'none') {
76
+ buildCmd = undefined;
77
+ }
78
+ else {
79
+ buildCmd = buildAnswer;
80
+ }
81
+ // 4. SPA mode
82
+ const defaultSpa = detection.spa ?? false;
83
+ const spaPrompt = defaultSpa ? '[Y/n]' : '[y/N]';
84
+ const spaAnswer = await prompt(`SPA mode? ${spaPrompt}: `);
85
+ let spaMode;
86
+ if (spaAnswer === '') {
87
+ spaMode = defaultSpa;
88
+ }
89
+ else {
90
+ spaMode = spaAnswer.toLowerCase() === 'y';
91
+ }
92
+ const config = {
93
+ site: siteName,
94
+ output: outputDir,
95
+ };
96
+ if (buildCmd)
97
+ config.build = buildCmd;
98
+ if (spaMode)
99
+ config.spa = true;
100
+ writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', { encoding: 'utf-8' });
101
+ process.stdout.write(`Created 42ws.json\n`);
102
+ }
103
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function logout(): Promise<void>;
2
+ //# sourceMappingURL=logout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAGA,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAoB5C"}
@@ -0,0 +1,23 @@
1
+ import { loadConfig, saveConfig } from '../lib/config.js';
2
+ import { success, successMessage, isJsonMode } from '../lib/output.js';
3
+ export async function logout() {
4
+ const config = loadConfig();
5
+ if (!config.token) {
6
+ if (isJsonMode()) {
7
+ success({ status: 'already-logged-out' });
8
+ }
9
+ else {
10
+ process.stdout.write('Already logged out.\n');
11
+ }
12
+ return;
13
+ }
14
+ // Remove token, keep apiUrl
15
+ saveConfig({ removeToken: true, apiUrl: config.apiUrl });
16
+ if (isJsonMode()) {
17
+ success({ status: 'logged-out' });
18
+ }
19
+ else {
20
+ successMessage('Logged out.');
21
+ }
22
+ }
23
+ //# sourceMappingURL=logout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEvE,MAAM,CAAC,KAAK,UAAU,MAAM;IAC1B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAE5B,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,IAAI,UAAU,EAAE,EAAE,CAAC;YACjB,OAAO,CAAC,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAChD,CAAC;QACD,OAAO;IACT,CAAC;IAED,4BAA4B;IAC5B,UAAU,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAEzD,IAAI,UAAU,EAAE,EAAE,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,cAAc,CAAC,aAAa,CAAC,CAAC;IAChC,CAAC;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ export interface OpenArgs {
2
+ name?: string;
3
+ json?: boolean;
4
+ }
5
+ export declare function open(args: OpenArgs): Promise<void>;
6
+ //# sourceMappingURL=open.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open.d.ts","sourceRoot":"","sources":["../../src/commands/open.ts"],"names":[],"mappings":"AAkCA,MAAM,WAAW,QAAQ;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBxD"}
@@ -0,0 +1,52 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { spawn } from 'node:child_process';
4
+ import { error, success, isJsonMode } from '../lib/output.js';
5
+ function loadProjectConfig(cwd) {
6
+ const configPath = join(cwd, '42ws.json');
7
+ if (!existsSync(configPath))
8
+ return {};
9
+ try {
10
+ return JSON.parse(readFileSync(configPath, 'utf-8'));
11
+ }
12
+ catch {
13
+ return {};
14
+ }
15
+ }
16
+ function openBrowser(url) {
17
+ try {
18
+ const platform = process.platform;
19
+ if (platform === 'darwin') {
20
+ spawn('open', [url], { detached: true, stdio: 'ignore' }).unref();
21
+ }
22
+ else if (platform === 'win32') {
23
+ spawn('cmd', ['/c', 'start', '', url], { detached: true, stdio: 'ignore' }).unref();
24
+ }
25
+ else {
26
+ spawn('xdg-open', [url], { detached: true, stdio: 'ignore' }).unref();
27
+ }
28
+ }
29
+ catch {
30
+ // ignore — user will use the printed URL
31
+ }
32
+ }
33
+ export async function open(args) {
34
+ const cwd = process.cwd();
35
+ let siteName = args.name;
36
+ if (!siteName) {
37
+ const projectConfig = loadProjectConfig(cwd);
38
+ siteName = projectConfig.site;
39
+ }
40
+ if (!siteName) {
41
+ error('INVALID_SITE_NAME', 'No site name specified.', 'Pass a site name: 42ws open <name>, or add "site" to 42ws.json.');
42
+ process.exit(1);
43
+ }
44
+ const url = `https://${siteName}.dev.42ws.com`;
45
+ if (isJsonMode()) {
46
+ success({ site: siteName, url });
47
+ return;
48
+ }
49
+ openBrowser(url);
50
+ process.stdout.write(`${url}\n`);
51
+ }
52
+ //# sourceMappingURL=open.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open.js","sourceRoot":"","sources":["../../src/commands/open.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAM9D,SAAS,iBAAiB,CAAC,GAAW;IACpC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAC1C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,EAAE,CAAC;IACvC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAkB,CAAC;IACxE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC9B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAClC,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1B,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QACpE,CAAC;aAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YAChC,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QACtF,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QACxE,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,yCAAyC;IAC3C,CAAC;AACH,CAAC;AAOD,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAc;IACvC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE1B,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;IACzB,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,aAAa,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAC7C,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC;IAChC,CAAC;IAED,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,KAAK,CAAC,mBAAmB,EAAE,yBAAyB,EAAE,iEAAiE,CAAC,CAAC;QACzH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,GAAG,GAAG,WAAW,QAAQ,eAAe,CAAC;IAE/C,IAAI,UAAU,EAAE,EAAE,CAAC;QACjB,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;QACjC,OAAO;IACT,CAAC;IAED,WAAW,CAAC,GAAG,CAAC,CAAC;IACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;AACnC,CAAC"}
@@ -0,0 +1,7 @@
1
+ export interface PullArgs {
2
+ site?: string;
3
+ dir?: string;
4
+ yes?: boolean;
5
+ }
6
+ export declare function pull(args: PullArgs): Promise<void>;
7
+ //# sourceMappingURL=pull.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"AAoEA,MAAM,WAAW,QAAQ;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA2HxD"}
@@ -0,0 +1,157 @@
1
+ import { existsSync, readFileSync, mkdirSync, writeFileSync } from 'node:fs';
2
+ import { join, dirname, resolve } from 'node:path';
3
+ import { createInterface } from 'node:readline';
4
+ import { loadConfig } from '../lib/config.js';
5
+ import { apiRequest, ApiError } from '../lib/api.js';
6
+ import { info, success, successMessage, error, isJsonMode } from '../lib/output.js';
7
+ function loadProjectConfig(cwd) {
8
+ const configPath = join(cwd, '42ws.json');
9
+ if (!existsSync(configPath))
10
+ return {};
11
+ try {
12
+ return JSON.parse(readFileSync(configPath, 'utf-8'));
13
+ }
14
+ catch {
15
+ return {};
16
+ }
17
+ }
18
+ function prompt(question) {
19
+ return new Promise(resolve => {
20
+ const rl = createInterface({ input: process.stdin, output: process.stderr });
21
+ rl.question(question, answer => {
22
+ rl.close();
23
+ resolve(answer.trim());
24
+ });
25
+ });
26
+ }
27
+ async function downloadFile(url) {
28
+ let response;
29
+ try {
30
+ response = await fetch(url);
31
+ }
32
+ catch (e) {
33
+ throw new ApiError('NETWORK_ERROR', `Network error: ${String(e)}`, 'Check your internet connection.');
34
+ }
35
+ if (!response.ok) {
36
+ throw new ApiError('DOWNLOAD_FAILED', `Download failed with HTTP ${response.status}`, 'Try again.');
37
+ }
38
+ const buffer = await response.arrayBuffer();
39
+ return Buffer.from(buffer);
40
+ }
41
+ export async function pull(args) {
42
+ const cwd = process.cwd();
43
+ const projectConfig = loadProjectConfig(cwd);
44
+ // Resolve site name
45
+ const siteName = args.site ?? projectConfig.site;
46
+ if (!siteName) {
47
+ error('INVALID_SITE_NAME', 'Site name is required.', 'Use --site <name> or add "site" to 42ws.json.');
48
+ process.exit(1);
49
+ }
50
+ const config = loadConfig();
51
+ if (!config.token) {
52
+ error('NOT_LOGGED_IN', 'You are not logged in.', 'Run `42ws login` to authenticate.');
53
+ process.exit(1);
54
+ }
55
+ // Resolve output directory
56
+ const outputDir = resolve(cwd, args.dir ?? `pulled`);
57
+ // Check if directory has existing files
58
+ if (existsSync(outputDir) && !args.yes) {
59
+ if (!process.stdin.isTTY) {
60
+ error('NOT_A_TTY', 'Use --yes to overwrite existing files in non-interactive mode.', 'Add --yes flag.');
61
+ process.exit(1);
62
+ }
63
+ const answer = await prompt(`Directory "${outputDir}" exists. Overwrite? [y/N]: `);
64
+ if (answer.toLowerCase() !== 'y') {
65
+ process.stderr.write('Cancelled.\n');
66
+ process.exit(0);
67
+ }
68
+ }
69
+ // Step 1: Get currentPublishId from sites list
70
+ info(`Fetching site info for "${siteName}"...`);
71
+ let sitesResult;
72
+ try {
73
+ sitesResult = await apiRequest(config, 'GET', '/v1/sites');
74
+ }
75
+ catch (e) {
76
+ if (e instanceof ApiError) {
77
+ error(e.code, e.message, e.suggestedFix);
78
+ }
79
+ else {
80
+ error('NETWORK_ERROR', String(e), 'Check your internet connection.');
81
+ }
82
+ process.exit(1);
83
+ }
84
+ const siteItem = (sitesResult.sites ?? []).find(s => s.site === siteName);
85
+ if (!siteItem) {
86
+ error('NOT_FOUND', `Site "${siteName}" not found.`, 'Check the site name and try again.');
87
+ process.exit(1);
88
+ }
89
+ const publishId = siteItem.currentPublishId;
90
+ if (!publishId) {
91
+ error('NOT_FOUND', `Site "${siteName}" has no published version.`, 'Publish first with: 42ws publish --site ' + siteName);
92
+ process.exit(1);
93
+ }
94
+ // Step 2: Get presigned download URLs
95
+ info(`Fetching download URLs for publish ${publishId}...`);
96
+ let downloadResult;
97
+ try {
98
+ downloadResult = await apiRequest(config, 'GET', `/v1/publishes/${publishId}/download`);
99
+ }
100
+ catch (e) {
101
+ if (e instanceof ApiError) {
102
+ error(e.code, e.message, e.suggestedFix);
103
+ }
104
+ else {
105
+ error('NETWORK_ERROR', String(e), 'Check your internet connection.');
106
+ }
107
+ process.exit(1);
108
+ }
109
+ const files = downloadResult.files ?? [];
110
+ if (files.length === 0) {
111
+ error('NO_FILES_FOUND', 'No files found in this publish.', '');
112
+ process.exit(1);
113
+ }
114
+ info(`Downloading ${files.length} files into ${outputDir}...`);
115
+ // Step 3: Download files in parallel (concurrency 8)
116
+ const CONCURRENCY = 8;
117
+ const queue = [...files];
118
+ let completed = 0;
119
+ async function downloadWorker() {
120
+ while (queue.length > 0) {
121
+ const file = queue.pop();
122
+ if (!file)
123
+ break;
124
+ const data = await downloadFile(file.url);
125
+ const dest = join(outputDir, file.path);
126
+ mkdirSync(dirname(dest), { recursive: true });
127
+ writeFileSync(dest, data);
128
+ completed++;
129
+ if (!isJsonMode()) {
130
+ process.stderr.write(`\r ${completed}/${files.length} files...`);
131
+ }
132
+ }
133
+ }
134
+ try {
135
+ await Promise.all(Array.from({ length: CONCURRENCY }, downloadWorker));
136
+ }
137
+ catch (e) {
138
+ if (!isJsonMode())
139
+ process.stderr.write('\n');
140
+ if (e instanceof ApiError) {
141
+ error(e.code, e.message, e.suggestedFix);
142
+ }
143
+ else {
144
+ error('DOWNLOAD_FAILED', String(e), 'Try again.');
145
+ }
146
+ process.exit(1);
147
+ }
148
+ if (!isJsonMode())
149
+ process.stderr.write('\n');
150
+ if (isJsonMode()) {
151
+ success({ site: siteName, publishId, fileCount: files.length, dir: outputDir });
152
+ }
153
+ else {
154
+ successMessage(`Pulled ${files.length} files into ${outputDir}/`);
155
+ }
156
+ }
157
+ //# sourceMappingURL=pull.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export interface SitesArgs {
2
+ subcommand?: string;
3
+ positional: string[];
4
+ yes?: boolean;
5
+ json?: boolean;
6
+ }
7
+ export declare function sites(args: SitesArgs): Promise<void>;
8
+ //# sourceMappingURL=sites.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sites.d.ts","sourceRoot":"","sources":["../../src/commands/sites.ts"],"names":[],"mappings":"AA6CA,MAAM,WAAW,SAAS;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,KAAK,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAoC1D"}
@@ -0,0 +1,166 @@
1
+ import { loadConfig } from '../lib/config.js';
2
+ import { apiRequest, ApiError } from '../lib/api.js';
3
+ import { info, success, successMessage, error, isJsonMode } from '../lib/output.js';
4
+ import { createInterface } from 'node:readline';
5
+ const SITES_HELP = `
6
+ 42ws sites — Manage your sites
7
+
8
+ Usage:
9
+ 42ws sites List all sites (alias for sites list)
10
+ 42ws sites list List all sites
11
+ 42ws sites create <name> Create a new site
12
+ 42ws sites delete <name> Delete a site
13
+
14
+ Options:
15
+ --json Output results as JSON
16
+ --yes Skip confirmation prompts (delete)
17
+ `.trim();
18
+ function prompt(question) {
19
+ return new Promise(resolve => {
20
+ const rl = createInterface({ input: process.stdin, output: process.stderr });
21
+ rl.question(question, answer => {
22
+ rl.close();
23
+ resolve(answer.trim());
24
+ });
25
+ });
26
+ }
27
+ export async function sites(args) {
28
+ const sub = args.subcommand;
29
+ // No subcommand or "list" → list sites
30
+ if (!sub || sub === 'list') {
31
+ await sitesList();
32
+ return;
33
+ }
34
+ if (sub === 'create') {
35
+ const name = args.positional[0];
36
+ if (!name) {
37
+ process.stderr.write('Usage: 42ws sites create <name>\n');
38
+ process.exit(1);
39
+ }
40
+ await sitesCreate(name);
41
+ return;
42
+ }
43
+ if (sub === 'delete') {
44
+ const name = args.positional[0];
45
+ if (!name) {
46
+ process.stderr.write('Usage: 42ws sites delete <name>\n');
47
+ process.exit(1);
48
+ }
49
+ await sitesDelete(name, args.yes ?? false);
50
+ return;
51
+ }
52
+ if (sub === '--help' || sub === 'help') {
53
+ process.stdout.write(SITES_HELP + '\n');
54
+ return;
55
+ }
56
+ process.stderr.write(`Unknown sites subcommand: ${sub}\n\n${SITES_HELP}\n`);
57
+ process.exit(1);
58
+ }
59
+ async function sitesList() {
60
+ const config = loadConfig();
61
+ if (!config.token) {
62
+ error('NOT_LOGGED_IN', 'You are not logged in.', 'Run `42ws login` to authenticate.');
63
+ process.exit(1);
64
+ }
65
+ let result;
66
+ try {
67
+ result = await apiRequest(config, 'GET', '/v1/sites');
68
+ }
69
+ catch (e) {
70
+ if (e instanceof ApiError) {
71
+ error(e.code, e.message, e.suggestedFix);
72
+ }
73
+ else {
74
+ error('NETWORK_ERROR', String(e), 'Check your internet connection.');
75
+ }
76
+ process.exit(1);
77
+ }
78
+ const sitesList = result.sites ?? [];
79
+ if (isJsonMode()) {
80
+ success({ sites: sitesList });
81
+ return;
82
+ }
83
+ if (sitesList.length === 0) {
84
+ info('No sites yet. Create one with: 42ws sites create <name>');
85
+ return;
86
+ }
87
+ // Human-readable table
88
+ const COL1 = 20;
89
+ const COL2 = 14;
90
+ const header = 'SITE'.padEnd(COL1) + 'CURRENT'.padEnd(COL2) + 'URL';
91
+ process.stdout.write(header + '\n');
92
+ for (const s of sitesList) {
93
+ const name = s.site.padEnd(COL1);
94
+ const current = s.currentPublishId ? s.currentPublishId.padEnd(COL2) : '(未パブリッシュ)'.padEnd(COL2);
95
+ const url = s.currentPublishId ? `https://${s.site}.dev.42ws.com` : '-';
96
+ process.stdout.write(name + current + url + '\n');
97
+ }
98
+ }
99
+ async function sitesCreate(name) {
100
+ const config = loadConfig();
101
+ if (!config.token) {
102
+ error('NOT_LOGGED_IN', 'You are not logged in.', 'Run `42ws login` to authenticate.');
103
+ process.exit(1);
104
+ }
105
+ let result;
106
+ try {
107
+ result = await apiRequest(config, 'POST', '/v1/sites', { site: name });
108
+ }
109
+ catch (e) {
110
+ if (e instanceof ApiError) {
111
+ if (e.code === 'CONFLICT') {
112
+ error('SITE_NAME_TAKEN', `Site "${name}" already exists.`, '別の名前を試してください。');
113
+ }
114
+ else {
115
+ error(e.code, e.message, e.suggestedFix);
116
+ }
117
+ }
118
+ else {
119
+ error('NETWORK_ERROR', String(e), 'Check your internet connection.');
120
+ }
121
+ process.exit(1);
122
+ }
123
+ if (isJsonMode()) {
124
+ success({ site: result.site ?? name });
125
+ }
126
+ else {
127
+ successMessage(`Created: ${result.site ?? name}`);
128
+ }
129
+ }
130
+ async function sitesDelete(name, yes) {
131
+ const config = loadConfig();
132
+ if (!config.token) {
133
+ error('NOT_LOGGED_IN', 'You are not logged in.', 'Run `42ws login` to authenticate.');
134
+ process.exit(1);
135
+ }
136
+ if (!yes) {
137
+ if (!process.stdin.isTTY) {
138
+ error('NOT_A_TTY', 'Use --yes to confirm deletion in non-interactive mode.', 'Add --yes flag to skip confirmation.');
139
+ process.exit(1);
140
+ }
141
+ const answer = await prompt(`本当に削除しますか? "${name}" [y/N]: `);
142
+ if (answer.toLowerCase() !== 'y') {
143
+ process.stderr.write('Cancelled.\n');
144
+ process.exit(0);
145
+ }
146
+ }
147
+ try {
148
+ await apiRequest(config, 'DELETE', `/v1/sites/${name}`);
149
+ }
150
+ catch (e) {
151
+ if (e instanceof ApiError) {
152
+ error(e.code, e.message, e.suggestedFix);
153
+ }
154
+ else {
155
+ error('NETWORK_ERROR', String(e), 'Check your internet connection.');
156
+ }
157
+ process.exit(1);
158
+ }
159
+ if (isJsonMode()) {
160
+ success({ deleted: true, site: name });
161
+ }
162
+ else {
163
+ successMessage(`Deleted: ${name}`);
164
+ }
165
+ }
166
+ //# sourceMappingURL=sites.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sites.js","sourceRoot":"","sources":["../../src/commands/sites.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAwEA,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAyD1C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA4FA,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAoG1C"}
package/dist/index.js CHANGED
@@ -1,8 +1,13 @@
1
1
  import { login } from './commands/login.js';
2
+ import { logout } from './commands/logout.js';
2
3
  import { whoami } from './commands/whoami.js';
3
4
  import { publish } from './commands/publish.js';
5
+ import { sites } from './commands/sites.js';
6
+ import { open } from './commands/open.js';
7
+ import { init } from './commands/init.js';
8
+ import { pull } from './commands/pull.js';
4
9
  import { setJsonMode } from './lib/output.js';
5
- const VERSION = '0.1.0';
10
+ const VERSION = '0.0.3';
6
11
  const HELP = `
7
12
  42ws — Publish static sites in one command
8
13
 
@@ -10,9 +15,17 @@ Usage:
10
15
  42ws <command> [options]
11
16
 
12
17
  Commands:
13
- login Authenticate with your 42ws token
14
- publish Publish a static site
15
- whoami Show currently logged-in user
18
+ login Authenticate with your 42ws token
19
+ logout Remove stored credentials
20
+ whoami Show currently logged-in user
21
+ publish Publish a static site
22
+ sites List sites (alias for sites list)
23
+ sites list List all sites
24
+ sites create <name> Create a new site
25
+ sites delete <name> Delete a site
26
+ init Create 42ws.json interactively
27
+ open [name] Open site URL in browser
28
+ pull --site <name> Download published files locally
16
29
 
17
30
  Options:
18
31
  --help, -h Show this help message
@@ -24,6 +37,13 @@ Examples:
24
37
  42ws publish --site my-site --dir dist
25
38
  42ws publish --site my-site --build "npm run build"
26
39
  42ws whoami
40
+ 42ws logout
41
+ 42ws sites
42
+ 42ws sites create my-site
43
+ 42ws sites delete my-site --yes
44
+ 42ws init
45
+ 42ws open my-site
46
+ 42ws pull --site my-site --dir ./downloaded
27
47
  `.trim();
28
48
  function parseArgs(argv) {
29
49
  const flags = {};
@@ -64,7 +84,7 @@ function parseArgs(argv) {
64
84
  }
65
85
  export async function main() {
66
86
  const argv = process.argv.slice(2);
67
- const { command, flags } = parseArgs(argv);
87
+ const { command, flags, positional } = parseArgs(argv);
68
88
  // Global flags
69
89
  if (flags['json'] === true) {
70
90
  setJsonMode(true);
@@ -92,6 +112,9 @@ export async function main() {
92
112
  apiUrl: flags['api-url'],
93
113
  });
94
114
  break;
115
+ case 'logout':
116
+ await logout();
117
+ break;
95
118
  case 'whoami':
96
119
  await whoami();
97
120
  break;
@@ -106,6 +129,41 @@ export async function main() {
106
129
  noBuild: flags['no-build'] === true,
107
130
  });
108
131
  break;
132
+ case 'sites': {
133
+ // positional[0] is the subcommand (list, create, delete)
134
+ // positional[1..] are the args to the subcommand
135
+ const subcommand = positional[0];
136
+ const subPositional = positional.slice(1);
137
+ await sites({
138
+ subcommand,
139
+ positional: subPositional,
140
+ yes: flags['yes'] === true,
141
+ json: flags['json'] === true,
142
+ });
143
+ break;
144
+ }
145
+ case 'open':
146
+ await open({
147
+ name: positional[0] ?? flags['site'],
148
+ json: flags['json'] === true,
149
+ });
150
+ break;
151
+ case 'init':
152
+ await init({
153
+ site: flags['site'],
154
+ output: flags['output'],
155
+ build: flags['build'],
156
+ spa: flags['spa'] === true,
157
+ yes: flags['yes'] === true,
158
+ });
159
+ break;
160
+ case 'pull':
161
+ await pull({
162
+ site: flags['site'],
163
+ dir: flags['dir'],
164
+ yes: flags['yes'] === true,
165
+ });
166
+ break;
109
167
  default:
110
168
  process.stderr.write(`Unknown command: ${command}\n\n${HELP}\n`);
111
169
  process.exit(1);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -3,5 +3,11 @@ export interface Config {
3
3
  apiUrl: string;
4
4
  }
5
5
  export declare function loadConfig(): Config;
6
- export declare function saveConfig(config: Partial<Config>): void;
6
+ /**
7
+ * Save config. Pass `removeToken: true` to explicitly remove the token field.
8
+ * Otherwise the existing token is preserved unless `token` is supplied.
9
+ */
10
+ export declare function saveConfig(config: Partial<Config> & {
11
+ removeToken?: boolean;
12
+ }): void;
7
13
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAMD,wBAAgB,UAAU,IAAI,MAAM,CAkBnC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAYxD"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAMD,wBAAgB,UAAU,IAAI,MAAM,CAkBnC;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAYpF"}
@@ -22,10 +22,14 @@ export function loadConfig() {
22
22
  apiUrl: process.env['FORTYTWO_WS_API_URL'] ?? fileConfig.apiUrl ?? DEFAULT_API_URL,
23
23
  };
24
24
  }
25
+ /**
26
+ * Save config. Pass `removeToken: true` to explicitly remove the token field.
27
+ * Otherwise the existing token is preserved unless `token` is supplied.
28
+ */
25
29
  export function saveConfig(config) {
26
30
  const existing = loadConfig();
27
31
  const merged = {
28
- token: config.token ?? existing.token,
32
+ token: config.removeToken ? undefined : (config.token ?? existing.token),
29
33
  apiUrl: config.apiUrl ?? existing.apiUrl,
30
34
  };
31
35
  if (!existsSync(dirname(CONFIG_FILE))) {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAO1C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;AAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AACpD,MAAM,eAAe,GAAG,0BAA0B,CAAC;AAEnD,MAAM,UAAU,UAAU;IACxB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,eAAe,CAAC;IACrE,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAE/C,IAAI,UAAU,GAAoB,EAAE,CAAC;IACrC,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAC/C,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAoB,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;YACP,mCAAmC;QACrC,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,EAAE,KAAK,IAAI,UAAU,CAAC,KAAK;QAChC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,UAAU,CAAC,MAAM,IAAI,eAAe;KACnF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAuB;IAChD,MAAM,QAAQ,GAAG,UAAU,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAW;QACrB,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK;QACrC,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM;KACzC,CAAC;IAEF,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;QACtC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACtF,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAO1C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;AAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AACpD,MAAM,eAAe,GAAG,0BAA0B,CAAC;AAEnD,MAAM,UAAU,UAAU;IACxB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,eAAe,CAAC;IACrE,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAE/C,IAAI,UAAU,GAAoB,EAAE,CAAC;IACrC,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAC/C,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAoB,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;YACP,mCAAmC;QACrC,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,EAAE,KAAK,IAAI,UAAU,CAAC,KAAK;QAChC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,UAAU,CAAC,MAAM,IAAI,eAAe;KACnF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,MAAmD;IAC5E,MAAM,QAAQ,GAAG,UAAU,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAW;QACrB,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC;QACxE,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM;KACzC,CAAC;IAEF,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;QACtC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACtF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@42ws/cli",
3
- "version": "0.0.1",
3
+ "version": "0.0.3",
4
4
  "description": "Publish static sites in one command",
5
5
  "publishConfig": {
6
6
  "access": "public"