@42ws/cli 0.0.12 → 0.0.14
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 +50 -1
- package/dist/commands/forms.d.ts +15 -0
- package/dist/commands/forms.d.ts.map +1 -0
- package/dist/commands/forms.js +200 -0
- package/dist/commands/forms.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -39,9 +39,52 @@ Options:
|
|
|
39
39
|
- `--build <cmd>` — Build command to run before publishing
|
|
40
40
|
- `--no-build` — Skip the build step
|
|
41
41
|
- `--message <text>` — Deployment message
|
|
42
|
-
- `--yes` — Skip confirmation prompts
|
|
42
|
+
- `--yes` — Skip non-destructive confirmation prompts
|
|
43
|
+
- `--allow-detach` — Allow publish even when it would remove an embedded form
|
|
43
44
|
- `--json` — Output results as JSON
|
|
44
45
|
|
|
46
|
+
Embed protection: if any AI-imported form is linked to this site (`linkedSite`), the CLI refuses to publish when the local source no longer contains the embed snippet (looking for `data-api-key="<form-key>"`). Use `--allow-detach` to override.
|
|
47
|
+
|
|
48
|
+
### `42ws pull`
|
|
49
|
+
|
|
50
|
+
Download the live published files of a site to a local directory. Useful before re-publishing a site that has linked forms — pull, merge your changes, then publish.
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
42ws pull --site my-site --dir ./live
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### `42ws sites`
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
42ws sites list
|
|
60
|
+
42ws sites create <name>
|
|
61
|
+
42ws sites delete <name> --force
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
`sites delete` is destructive and requires `--force` (not just `--yes`). If the site has linked forms, the CLI prints them and asks whether to also delete them. Use `--delete-forms` / `--keep-forms` for non-interactive control.
|
|
65
|
+
|
|
66
|
+
### `42ws forms import`
|
|
67
|
+
|
|
68
|
+
Extract a form from existing HTML and create a 42ws form (Claude Haiku is used to identify fields, theme color, and CSS).
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
42ws forms import --site my-site --page contact.html --notify you@example.com --inject
|
|
72
|
+
42ws forms import --url https://example.com/contact --notify you@example.com
|
|
73
|
+
42ws forms import --file ./contact.html --notify you@example.com --inject
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Source (one required):
|
|
77
|
+
- `--site <name> --page <html>` — Pull from a 42ws-hosted site page
|
|
78
|
+
- `--url <url>` — Fetch from any URL
|
|
79
|
+
- `--file <path>` — Read from a local HTML file
|
|
80
|
+
|
|
81
|
+
Options:
|
|
82
|
+
- `--notify <email>` — Notification email (required)
|
|
83
|
+
- `--name <name>` — Override the AI-extracted form name
|
|
84
|
+
- `--inject` — Replace the source `<form>` with the embed snippet
|
|
85
|
+
- `--site` mode: re-publishes the page
|
|
86
|
+
- `--file` mode: overwrites the local file
|
|
87
|
+
|
|
45
88
|
### `42ws whoami`
|
|
46
89
|
|
|
47
90
|
Show the currently logged-in user.
|
|
@@ -50,6 +93,10 @@ Show the currently logged-in user.
|
|
|
50
93
|
42ws whoami
|
|
51
94
|
```
|
|
52
95
|
|
|
96
|
+
## Localization
|
|
97
|
+
|
|
98
|
+
The CLI auto-detects locale from `LANG` / `LC_ALL` env vars and falls back to the OS locale via `Intl`. Override explicitly with `--lang ja` or `--lang en`. Currently supports English and Japanese.
|
|
99
|
+
|
|
53
100
|
## Configuration file
|
|
54
101
|
|
|
55
102
|
Place a `42ws.json` in your project root:
|
|
@@ -129,6 +176,8 @@ npx @42ws/cli@latest publish --yes --json
|
|
|
129
176
|
| `BLOCKED_FILE` | Secret file would be uploaded | Remove the file or add to `.gitignore` |
|
|
130
177
|
| `BUILD_FAILED` | Build command exited non-zero | Fix the build error first |
|
|
131
178
|
| `FORBIDDEN` | License not enabled or not site owner | Ask the account owner |
|
|
179
|
+
| `EMBED_DETACH_BLOCKED` | Publish would remove an embedded form | Pull the live first (`42ws pull`) and merge, or pass `--allow-detach` |
|
|
180
|
+
| `CONFIRMATION_REQUIRED` | Destructive op needs explicit confirmation | Add `--force` |
|
|
132
181
|
|
|
133
182
|
### Suggested user-facing prompt
|
|
134
183
|
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
interface FormsArgs {
|
|
2
|
+
subcommand?: string;
|
|
3
|
+
positional: string[];
|
|
4
|
+
json?: boolean;
|
|
5
|
+
site?: string;
|
|
6
|
+
page?: string;
|
|
7
|
+
url?: string;
|
|
8
|
+
file?: string;
|
|
9
|
+
notify?: string;
|
|
10
|
+
name?: string;
|
|
11
|
+
inject?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare function forms(args: FormsArgs): Promise<void>;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=forms.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forms.d.ts","sourceRoot":"","sources":["../../src/commands/forms.ts"],"names":[],"mappings":"AA6BA,UAAU,SAAS;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AA6CD,wBAAsB,KAAK,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAU1D"}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { 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, warn, isJsonMode } from '../lib/output.js';
|
|
7
|
+
import { t } from '../lib/i18n.js';
|
|
8
|
+
const FORMS_HELP = `
|
|
9
|
+
42ws forms — Manage forms
|
|
10
|
+
|
|
11
|
+
Usage:
|
|
12
|
+
42ws forms list List your forms
|
|
13
|
+
42ws forms import [options] Extract a form from a source and create it
|
|
14
|
+
|
|
15
|
+
Import sources (one required):
|
|
16
|
+
--site <name> --page <html> Import from a 42ws-hosted site page
|
|
17
|
+
--url <url> Import from any URL
|
|
18
|
+
--file <path> Import from a local HTML file
|
|
19
|
+
|
|
20
|
+
Import options:
|
|
21
|
+
--notify <email> Notification email (required)
|
|
22
|
+
--name <name> Form name (default: AI-extracted)
|
|
23
|
+
--inject Rewrite source HTML to use the embed snippet
|
|
24
|
+
(--site mode: re-publishes the page)
|
|
25
|
+
(--file mode: overwrites the local file)
|
|
26
|
+
--json Output result as JSON
|
|
27
|
+
`.trim();
|
|
28
|
+
function prompt(q) {
|
|
29
|
+
return new Promise((res) => {
|
|
30
|
+
const rl = createInterface({ input: process.stdin, output: process.stderr });
|
|
31
|
+
rl.question(q, (a) => { rl.close(); res(a.trim()); });
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
export async function forms(args) {
|
|
35
|
+
const sub = args.subcommand;
|
|
36
|
+
if (!sub || sub === '--help' || sub === 'help') {
|
|
37
|
+
process.stdout.write(FORMS_HELP + '\n');
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (sub === 'list')
|
|
41
|
+
return formsList();
|
|
42
|
+
if (sub === 'import')
|
|
43
|
+
return formsImport(args);
|
|
44
|
+
process.stderr.write(`Unknown forms subcommand: ${sub}\n\n${FORMS_HELP}\n`);
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
async function formsList() {
|
|
48
|
+
const config = loadConfig();
|
|
49
|
+
if (!config.token) {
|
|
50
|
+
error('NOT_LOGGED_IN', t('notLoggedIn'), t('notLoggedIn.fix'));
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
// フォーム一覧はサイトと違って CLI 専用エンドポイントが無いので、サイト経由で一括取得は出来ない。
|
|
54
|
+
// ここでは省略 (将来的に GET /v1/forms を追加すれば対応可能)
|
|
55
|
+
warn('forms list は現在未対応です。https://dev.42ws.com で確認してください。');
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
async function formsImport(args) {
|
|
59
|
+
const config = loadConfig();
|
|
60
|
+
if (!config.token) {
|
|
61
|
+
error('NOT_LOGGED_IN', t('notLoggedIn'), t('notLoggedIn.fix'));
|
|
62
|
+
process.exit(1);
|
|
63
|
+
}
|
|
64
|
+
// ソース指定の検証 (1つ必須)
|
|
65
|
+
const sourceCount = [args.site, args.url, args.file].filter(Boolean).length;
|
|
66
|
+
if (sourceCount === 0) {
|
|
67
|
+
error('SOURCE_REQUIRED', '取り込みソースを指定してください。', '--site <name> --page <html> / --url <url> / --file <path> のいずれか1つを指定。');
|
|
68
|
+
process.exit(1);
|
|
69
|
+
}
|
|
70
|
+
if (sourceCount > 1) {
|
|
71
|
+
error('MULTIPLE_SOURCES', '--site / --url / --file は同時に指定できません。', 'いずれか1つを選んでください。');
|
|
72
|
+
process.exit(1);
|
|
73
|
+
}
|
|
74
|
+
if (!args.notify) {
|
|
75
|
+
error('NOTIFY_REQUIRED', '--notify <email> を指定してください。', 'フォーム送信時の通知先メールアドレスです。');
|
|
76
|
+
process.exit(1);
|
|
77
|
+
}
|
|
78
|
+
// ソース取得
|
|
79
|
+
let importPayload;
|
|
80
|
+
let linkedSite;
|
|
81
|
+
let linkedPage;
|
|
82
|
+
let originalHtml;
|
|
83
|
+
if (args.site) {
|
|
84
|
+
if (!args.page) {
|
|
85
|
+
error('PAGE_REQUIRED', '--site と一緒に --page <html> を指定してください。', '例: --site mysite --page contact.html');
|
|
86
|
+
process.exit(1);
|
|
87
|
+
}
|
|
88
|
+
const src = await apiRequest(config, 'GET', `/sites/${args.site}/source?page=${encodeURIComponent(args.page)}`);
|
|
89
|
+
importPayload = { html: src.html, baseUrl: `https://${args.site}.dev.42ws.com/${args.page}` };
|
|
90
|
+
linkedSite = args.site;
|
|
91
|
+
linkedPage = args.page;
|
|
92
|
+
originalHtml = src.html;
|
|
93
|
+
}
|
|
94
|
+
else if (args.url) {
|
|
95
|
+
importPayload = { url: args.url };
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
const filePath = resolve(process.cwd(), args.file);
|
|
99
|
+
if (!existsSync(filePath)) {
|
|
100
|
+
error('FILE_NOT_FOUND', `ファイルが見つかりません: ${filePath}`, '');
|
|
101
|
+
process.exit(1);
|
|
102
|
+
}
|
|
103
|
+
originalHtml = readFileSync(filePath, 'utf-8');
|
|
104
|
+
importPayload = { html: originalHtml };
|
|
105
|
+
}
|
|
106
|
+
info('AI 解析中...');
|
|
107
|
+
let extracted;
|
|
108
|
+
try {
|
|
109
|
+
extracted = await apiRequest(config, 'POST', '/v1/forms/import', importPayload);
|
|
110
|
+
}
|
|
111
|
+
catch (e) {
|
|
112
|
+
if (e instanceof ApiError)
|
|
113
|
+
error(e.code, e.message, e.suggestedFix);
|
|
114
|
+
else
|
|
115
|
+
error('IMPORT_FAILED', String(e), t('tryAgain'));
|
|
116
|
+
process.exit(1);
|
|
117
|
+
}
|
|
118
|
+
if (extracted.status === 'failed') {
|
|
119
|
+
error('EXTRACT_FAILED', extracted.reason || '抽出に失敗しました', extracted.suggestion);
|
|
120
|
+
process.exit(1);
|
|
121
|
+
}
|
|
122
|
+
const fields = extracted.fields ?? [];
|
|
123
|
+
const formName = args.name || extracted.name || 'インポートしたフォーム';
|
|
124
|
+
info(`抽出結果: ${formName} (${fields.length} フィールド)`);
|
|
125
|
+
for (const f of fields) {
|
|
126
|
+
const mark = f.confidence === 'low' ? '⚠ ' : ' ';
|
|
127
|
+
info(` ${mark}${f.label}${f.required ? ' *' : ''} [${f.type}]`);
|
|
128
|
+
}
|
|
129
|
+
if (extracted.warnings && extracted.warnings.length > 0) {
|
|
130
|
+
warn('AI からの注意点:');
|
|
131
|
+
for (const w of extracted.warnings)
|
|
132
|
+
warn(` - ${w}`);
|
|
133
|
+
}
|
|
134
|
+
// フォーム作成
|
|
135
|
+
info('フォームを作成中...');
|
|
136
|
+
let created;
|
|
137
|
+
try {
|
|
138
|
+
created = await apiRequest(config, 'POST', '/v1/forms', {
|
|
139
|
+
name: formName,
|
|
140
|
+
notifyEmail: args.notify,
|
|
141
|
+
fields,
|
|
142
|
+
thanksEnabled: true,
|
|
143
|
+
themeColor: extracted.themeColor,
|
|
144
|
+
css: extracted.css,
|
|
145
|
+
...(linkedSite ? { linkedSite, linkedPage } : {}),
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
catch (e) {
|
|
149
|
+
if (e instanceof ApiError)
|
|
150
|
+
error(e.code, e.message, e.suggestedFix);
|
|
151
|
+
else
|
|
152
|
+
error('CREATE_FAILED', String(e), t('tryAgain'));
|
|
153
|
+
process.exit(1);
|
|
154
|
+
}
|
|
155
|
+
const form = created.form;
|
|
156
|
+
const embedSnippet = `<div id="contact-form"></div>\n<script src="https://dev.42ws.com/embed/form.js" data-api-key="${form.apiKey}" data-api-base="https://api.dev.42ws.com"></script>`;
|
|
157
|
+
// --inject: 元ソースを書き換え
|
|
158
|
+
let injected = false;
|
|
159
|
+
if (args.inject && originalHtml) {
|
|
160
|
+
const re = /<form[\s\S]*?<\/form>/i;
|
|
161
|
+
if (!re.test(originalHtml)) {
|
|
162
|
+
warn('元ソースに <form> タグが見つかりません。--inject はスキップされました。');
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
const newHtml = originalHtml.replace(re, embedSnippet);
|
|
166
|
+
if (args.site && args.page) {
|
|
167
|
+
await apiRequest(config, 'POST', `/sites/${args.site}/save-and-publish`, { html: newHtml, page: args.page });
|
|
168
|
+
info(`サイトを再公開しました: ${args.site}/${args.page}`);
|
|
169
|
+
injected = true;
|
|
170
|
+
}
|
|
171
|
+
else if (args.file) {
|
|
172
|
+
const filePath = resolve(process.cwd(), args.file);
|
|
173
|
+
writeFileSync(filePath, newHtml, 'utf-8');
|
|
174
|
+
info(`ファイルを書き換えました: ${filePath}`);
|
|
175
|
+
injected = true;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
if (isJsonMode()) {
|
|
180
|
+
success({
|
|
181
|
+
form: { id: form.id, name: form.name, apiKey: form.apiKey },
|
|
182
|
+
embedSnippet,
|
|
183
|
+
injected,
|
|
184
|
+
linkedSite,
|
|
185
|
+
linkedPage,
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
successMessage(`✓ フォーム作成: ${form.name} (${form.id})`);
|
|
190
|
+
successMessage(`管理画面: https://dev.42ws.com/forms/${form.id}`);
|
|
191
|
+
if (!injected) {
|
|
192
|
+
info('');
|
|
193
|
+
info('埋め込みコード:');
|
|
194
|
+
process.stdout.write(embedSnippet + '\n');
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
// 確認用ダミー (lint回避)
|
|
199
|
+
void prompt;
|
|
200
|
+
//# sourceMappingURL=forms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forms.js","sourceRoot":"","sources":["../../src/commands/forms.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA+FA,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CA6H1C"}
|
package/dist/index.js
CHANGED
|
@@ -3,6 +3,7 @@ import { logout } from './commands/logout.js';
|
|
|
3
3
|
import { whoami } from './commands/whoami.js';
|
|
4
4
|
import { publish } from './commands/publish.js';
|
|
5
5
|
import { sites } from './commands/sites.js';
|
|
6
|
+
import { forms } from './commands/forms.js';
|
|
6
7
|
import { open } from './commands/open.js';
|
|
7
8
|
import { init } from './commands/init.js';
|
|
8
9
|
import { pull } from './commands/pull.js';
|
|
@@ -24,6 +25,7 @@ Commands:
|
|
|
24
25
|
sites list List all sites
|
|
25
26
|
sites create <name> Create a new site
|
|
26
27
|
sites delete <name> Delete a site
|
|
28
|
+
forms import [options] Extract a form from HTML/URL/site and create it
|
|
27
29
|
init Create 42ws.json interactively
|
|
28
30
|
open [name] Open site URL in browser
|
|
29
31
|
pull --site <name> Download published files locally
|
|
@@ -150,6 +152,23 @@ export async function main() {
|
|
|
150
152
|
});
|
|
151
153
|
break;
|
|
152
154
|
}
|
|
155
|
+
case 'forms': {
|
|
156
|
+
const subcommand = positional[0];
|
|
157
|
+
const subPositional = positional.slice(1);
|
|
158
|
+
await forms({
|
|
159
|
+
subcommand,
|
|
160
|
+
positional: subPositional,
|
|
161
|
+
json: flags['json'] === true,
|
|
162
|
+
site: flags['site'],
|
|
163
|
+
page: flags['page'],
|
|
164
|
+
url: flags['url'],
|
|
165
|
+
file: flags['file'],
|
|
166
|
+
notify: flags['notify'],
|
|
167
|
+
name: flags['name'],
|
|
168
|
+
inject: flags['inject'] === true,
|
|
169
|
+
});
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
153
172
|
case 'open':
|
|
154
173
|
await open({
|
|
155
174
|
name: positional[0] ?? flags['site'],
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,MAAM,IAAI,GAAG
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|