@42ws/cli 0.1.13 → 0.1.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/README.md +9 -225
  2. package/cli.js +39 -0
  3. package/package.json +5 -21
  4. package/bin/cli.js +0 -10
  5. package/dist/commands/chatlog.d.ts +0 -10
  6. package/dist/commands/chatlog.d.ts.map +0 -1
  7. package/dist/commands/chatlog.js +0 -103
  8. package/dist/commands/chatlog.js.map +0 -1
  9. package/dist/commands/collections.d.ts +0 -39
  10. package/dist/commands/collections.d.ts.map +0 -1
  11. package/dist/commands/collections.js +0 -1186
  12. package/dist/commands/collections.js.map +0 -1
  13. package/dist/commands/context.d.ts +0 -12
  14. package/dist/commands/context.d.ts.map +0 -1
  15. package/dist/commands/context.js +0 -271
  16. package/dist/commands/context.js.map +0 -1
  17. package/dist/commands/dev.d.ts +0 -13
  18. package/dist/commands/dev.d.ts.map +0 -1
  19. package/dist/commands/dev.js +0 -363
  20. package/dist/commands/dev.js.map +0 -1
  21. package/dist/commands/domains.d.ts +0 -10
  22. package/dist/commands/domains.d.ts.map +0 -1
  23. package/dist/commands/domains.js +0 -179
  24. package/dist/commands/domains.js.map +0 -1
  25. package/dist/commands/editlog.d.ts +0 -12
  26. package/dist/commands/editlog.d.ts.map +0 -1
  27. package/dist/commands/editlog.js +0 -188
  28. package/dist/commands/editlog.js.map +0 -1
  29. package/dist/commands/forms.d.ts +0 -23
  30. package/dist/commands/forms.d.ts.map +0 -1
  31. package/dist/commands/forms.js +0 -558
  32. package/dist/commands/forms.js.map +0 -1
  33. package/dist/commands/init.d.ts +0 -18
  34. package/dist/commands/init.d.ts.map +0 -1
  35. package/dist/commands/init.js +0 -197
  36. package/dist/commands/init.js.map +0 -1
  37. package/dist/commands/login.d.ts +0 -7
  38. package/dist/commands/login.d.ts.map +0 -1
  39. package/dist/commands/login.js +0 -110
  40. package/dist/commands/login.js.map +0 -1
  41. package/dist/commands/logout.d.ts +0 -2
  42. package/dist/commands/logout.d.ts.map +0 -1
  43. package/dist/commands/logout.js +0 -31
  44. package/dist/commands/logout.js.map +0 -1
  45. package/dist/commands/open.d.ts +0 -6
  46. package/dist/commands/open.d.ts.map +0 -1
  47. package/dist/commands/open.js +0 -54
  48. package/dist/commands/open.js.map +0 -1
  49. package/dist/commands/prompts.d.ts +0 -7
  50. package/dist/commands/prompts.d.ts.map +0 -1
  51. package/dist/commands/prompts.js +0 -55
  52. package/dist/commands/prompts.js.map +0 -1
  53. package/dist/commands/publish.d.ts +0 -19
  54. package/dist/commands/publish.d.ts.map +0 -1
  55. package/dist/commands/publish.js +0 -437
  56. package/dist/commands/publish.js.map +0 -1
  57. package/dist/commands/pull.d.ts +0 -7
  58. package/dist/commands/pull.d.ts.map +0 -1
  59. package/dist/commands/pull.js +0 -157
  60. package/dist/commands/pull.js.map +0 -1
  61. package/dist/commands/sites.d.ts +0 -13
  62. package/dist/commands/sites.d.ts.map +0 -1
  63. package/dist/commands/sites.js +0 -316
  64. package/dist/commands/sites.js.map +0 -1
  65. package/dist/commands/upgrade.d.ts +0 -2
  66. package/dist/commands/upgrade.d.ts.map +0 -1
  67. package/dist/commands/upgrade.js +0 -15
  68. package/dist/commands/upgrade.js.map +0 -1
  69. package/dist/commands/whoami.d.ts +0 -4
  70. package/dist/commands/whoami.d.ts.map +0 -1
  71. package/dist/commands/whoami.js +0 -98
  72. package/dist/commands/whoami.js.map +0 -1
  73. package/dist/index.d.ts +0 -2
  74. package/dist/index.d.ts.map +0 -1
  75. package/dist/index.js +0 -428
  76. package/dist/index.js.map +0 -1
  77. package/dist/lib/api.d.ts +0 -12
  78. package/dist/lib/api.d.ts.map +0 -1
  79. package/dist/lib/api.js +0 -121
  80. package/dist/lib/api.js.map +0 -1
  81. package/dist/lib/config.d.ts +0 -27
  82. package/dist/lib/config.d.ts.map +0 -1
  83. package/dist/lib/config.js +0 -65
  84. package/dist/lib/config.js.map +0 -1
  85. package/dist/lib/detect.d.ts +0 -9
  86. package/dist/lib/detect.d.ts.map +0 -1
  87. package/dist/lib/detect.js +0 -112
  88. package/dist/lib/detect.js.map +0 -1
  89. package/dist/lib/files.d.ts +0 -16
  90. package/dist/lib/files.d.ts.map +0 -1
  91. package/dist/lib/files.js +0 -200
  92. package/dist/lib/files.js.map +0 -1
  93. package/dist/lib/html.d.ts +0 -8
  94. package/dist/lib/html.d.ts.map +0 -1
  95. package/dist/lib/html.js +0 -63
  96. package/dist/lib/html.js.map +0 -1
  97. package/dist/lib/i18n.d.ts +0 -6
  98. package/dist/lib/i18n.d.ts.map +0 -1
  99. package/dist/lib/i18n.js +0 -256
  100. package/dist/lib/i18n.js.map +0 -1
  101. package/dist/lib/import-prompts.d.ts +0 -46
  102. package/dist/lib/import-prompts.d.ts.map +0 -1
  103. package/dist/lib/import-prompts.js +0 -279
  104. package/dist/lib/import-prompts.js.map +0 -1
  105. package/dist/lib/inspector-client.d.ts +0 -3
  106. package/dist/lib/inspector-client.d.ts.map +0 -1
  107. package/dist/lib/inspector-client.js +0 -253
  108. package/dist/lib/inspector-client.js.map +0 -1
  109. package/dist/lib/output.d.ts +0 -11
  110. package/dist/lib/output.d.ts.map +0 -1
  111. package/dist/lib/output.js +0 -49
  112. package/dist/lib/output.js.map +0 -1
  113. package/dist/lib/project.d.ts +0 -25
  114. package/dist/lib/project.d.ts.map +0 -1
  115. package/dist/lib/project.js +0 -62
  116. package/dist/lib/project.js.map +0 -1
  117. package/dist/lib/suggest.d.ts +0 -12
  118. package/dist/lib/suggest.d.ts.map +0 -1
  119. package/dist/lib/suggest.js +0 -36
  120. package/dist/lib/suggest.js.map +0 -1
  121. package/dist/lib/update-check.d.ts +0 -22
  122. package/dist/lib/update-check.d.ts.map +0 -1
  123. package/dist/lib/update-check.js +0 -182
  124. package/dist/lib/update-check.js.map +0 -1
  125. package/dist/run.d.ts +0 -2
  126. package/dist/run.d.ts.map +0 -1
  127. package/dist/run.js +0 -17
  128. package/dist/run.js.map +0 -1
  129. package/dist/version.d.ts +0 -2
  130. package/dist/version.d.ts.map +0 -1
  131. package/dist/version.js +0 -3
  132. package/dist/version.js.map +0 -1
@@ -1,558 +0,0 @@
1
- import { existsSync, readFileSync, writeFileSync } from 'node:fs';
2
- import { resolve } from 'node:path';
3
- import { tmpdir } from 'node:os';
4
- import { join } from 'node:path';
5
- import { randomBytes } from 'node:crypto';
6
- import { createInterface } from 'node:readline';
7
- import { loadConfig, deriveDomains } from '../lib/config.js';
8
- import { replaceFirstElement } from '../lib/html.js';
9
- import { apiRequest, ApiError } from '../lib/api.js';
10
- import { info, success, successMessage, error, warn, isJsonMode } from '../lib/output.js';
11
- import { t } from '../lib/i18n.js';
12
- import { buildFormsImportPrompt } from '../lib/import-prompts.js';
13
- import { findLocalPageFile } from '../lib/project.js';
14
- const FORMS_HELP = `
15
- 42ws forms — Manage forms
16
-
17
- Usage:
18
-
19
- 📖 Read (副作用なし):
20
- 42ws forms list List your forms
21
- 42ws forms get <id> [opts] Show a form (full JSON, or one --field)
22
-
23
- ✏️ Modify:
24
- 42ws forms import [options] Fetch a source and print an AI extraction prompt
25
- (the AI then calls \`forms create\`)
26
- 42ws forms create [options] Create a form from a JSON file (use after import)
27
- 42ws forms set <id> [opts] Update form fields (CSS など)
28
-
29
- ⚠️ Destructive:
30
- 42ws forms delete <id> Delete a form (cascades stored contacts)
31
-
32
- Get options:
33
- --field <name> Output only this field (e.g. css)
34
- --out <path> Write to a file instead of stdout
35
-
36
- Set options:
37
- --css <text> Replace CSS with the given string
38
- --css-file <path> Replace CSS with the contents of a file
39
- --theme-color <#hex> Update theme color
40
- --name <text> / --notify <email> Update name / notification email
41
- --from-json <path> Apply multiple fields from a JSON file
42
-
43
- Import sources (one required):
44
- --site <name> --page <html> Import from a 42ws-hosted site page
45
- --url <url> Import from any URL
46
- --file <path> Import from a local HTML file
47
-
48
- Import options:
49
- --notify <email> Notification email (forwarded to \`forms create\`)
50
- --name <name> Form name override (forwarded)
51
- --inject After create, rewrite the source HTML to
52
- use the embed snippet (forwarded)
53
- --json Output result as JSON (suppresses prompt)
54
-
55
- Create options (after the AI returns a JSON file):
56
- --from-json <path> Required. Form definition JSON.
57
- Top-level: name, fields[], themeColor, css, warnings
58
- --notify <email> Required. Notification email
59
- --name <name> Override JSON's name
60
- --site <name> --page <html> Link to a 42ws site page (sets linkedSite/Page)
61
- --file <path> Pair with --inject to rewrite a local HTML file
62
- --inject Rewrite the source HTML to use the embed snippet
63
- (--site mode: re-publishes the page)
64
- (--file mode: overwrites the local file)
65
-
66
- Notes:
67
- - import → create の 2 段構えは AI ベンダー依存をサーバから外すための分離
68
- です。AI (Claude Code / Codex 等)が import の出力を読み、抽出 JSON を
69
- 一時ファイルに書いて \`forms create\` を呼び出します。
70
- - 1 ページに複数のフォームを配置できます。--page で指定したページから
71
- 最初に見つかった <form> を抽出します。
72
- `.trim();
73
- function prompt(q) {
74
- return new Promise((res) => {
75
- const rl = createInterface({ input: process.stdin, output: process.stderr });
76
- rl.question(q, (a) => { rl.close(); res(a.trim()); });
77
- });
78
- }
79
- export async function forms(args) {
80
- const sub = args.subcommand;
81
- if (!sub || sub === '--help' || sub === 'help') {
82
- process.stdout.write(FORMS_HELP + '\n');
83
- return;
84
- }
85
- if (sub === 'list')
86
- return formsList();
87
- if (sub === 'import')
88
- return formsImport(args);
89
- if (sub === 'create')
90
- return formsCreate(args);
91
- if (sub === 'delete')
92
- return formsDelete(args);
93
- if (sub === 'get')
94
- return formsGet(args);
95
- if (sub === 'set')
96
- return formsSet(args);
97
- process.stderr.write(`Unknown forms subcommand: ${sub}\n\n${FORMS_HELP}\n`);
98
- process.exit(1);
99
- }
100
- const EDITABLE_FORM_FIELDS = ['name', 'notifyEmail', 'notifySubject', 'themeColor', 'css', 'thanksEnabled', 'messages', 'fields', 'linkedSite', 'linkedPage'];
101
- async function formsGet(args) {
102
- const config = loadConfig();
103
- if (!config.token) {
104
- error('NOT_LOGGED_IN', t('notLoggedIn'), t('notLoggedIn.fix'));
105
- process.exit(1);
106
- }
107
- const id = args.positional[0];
108
- if (!id) {
109
- error('ID_REQUIRED', t('delete.idRequired.usage', { usage: 'forms get <id> [--field <name>] [--out <path>]' }), t('delete.idRequired.fix', { listCmd: 'forms list' }));
110
- process.exit(1);
111
- }
112
- let result;
113
- try {
114
- result = await apiRequest(config, 'GET', `/v1/forms/${id}`);
115
- }
116
- catch (e) {
117
- if (e instanceof ApiError)
118
- error(e.code, e.message, e.suggestedFix);
119
- else
120
- error('FETCH_FAILED', String(e), t('tryAgain'));
121
- process.exit(1);
122
- }
123
- const form = result.form;
124
- if (args.field) {
125
- // kebab-case (例: --field theme-color) を camelCase (themeColor) にも当ててみる
126
- const camel = args.field.replace(/-([a-z])/g, (_, c) => c.toUpperCase());
127
- const v = form[camel] ?? form[args.field];
128
- if (v === undefined) {
129
- const keys = Object.keys(form).join(', ');
130
- error('FIELD_NOT_FOUND', `フィールド "${args.field}" がフォームに存在しません`, `指定可能: ${keys}`);
131
- process.exit(1);
132
- }
133
- const text = v == null ? '' : (typeof v === 'string' ? v : JSON.stringify(v, null, 2));
134
- if (args.out) {
135
- writeFileSync(resolve(process.cwd(), args.out), text);
136
- info(`書き出しました: ${args.out} (${text.length} 文字)`);
137
- }
138
- else {
139
- process.stdout.write(text + (text.endsWith('\n') ? '' : '\n'));
140
- }
141
- return;
142
- }
143
- if (isJsonMode()) {
144
- success({ form });
145
- return;
146
- }
147
- if (args.out) {
148
- writeFileSync(resolve(process.cwd(), args.out), JSON.stringify(form, null, 2));
149
- info(`書き出しました: ${args.out}`);
150
- return;
151
- }
152
- process.stdout.write(JSON.stringify(form, null, 2) + '\n');
153
- }
154
- async function formsSet(args) {
155
- const config = loadConfig();
156
- if (!config.token) {
157
- error('NOT_LOGGED_IN', t('notLoggedIn'), t('notLoggedIn.fix'));
158
- process.exit(1);
159
- }
160
- const id = args.positional[0];
161
- if (!id) {
162
- error('ID_REQUIRED', t('delete.idRequired.usage', { usage: 'forms set <id> --css <path> | --theme-color <#hex> | ...' }), t('delete.idRequired.fix', { listCmd: 'forms list' }));
163
- process.exit(1);
164
- }
165
- const updates = {};
166
- // ファイル経由の更新
167
- if (args.cssFile)
168
- updates.css = readFileSync(resolve(process.cwd(), args.cssFile), 'utf-8');
169
- // 単純な値の更新
170
- if (args.css !== undefined)
171
- updates.css = args.css;
172
- if (args.themeColor !== undefined)
173
- updates.themeColor = args.themeColor;
174
- if (args.notify !== undefined)
175
- updates.notifyEmail = args.notify;
176
- if (args.name !== undefined)
177
- updates.name = args.name;
178
- // JSON 経由でまとめて更新
179
- if (args.fromJson) {
180
- const raw = readFileSync(resolve(process.cwd(), args.fromJson), 'utf-8');
181
- const obj = JSON.parse(raw);
182
- for (const k of EDITABLE_FORM_FIELDS) {
183
- if (obj[k] !== undefined)
184
- updates[k] = obj[k];
185
- }
186
- }
187
- if (Object.keys(updates).length === 0) {
188
- error('NO_UPDATES', '更新するフィールドがありません。', '--css <path> / --theme-color <#hex> / --name <text> / --notify <email> / --from-json <path> のいずれかを指定してください。');
189
- process.exit(1);
190
- }
191
- let result;
192
- try {
193
- result = await apiRequest(config, 'PATCH', `/v1/forms/${id}`, updates);
194
- }
195
- catch (e) {
196
- if (e instanceof ApiError)
197
- error(e.code, e.message, e.suggestedFix);
198
- else
199
- error('UPDATE_FAILED', String(e), t('tryAgain'));
200
- process.exit(1);
201
- }
202
- if (isJsonMode())
203
- success({ form: result.form });
204
- else
205
- successMessage(`更新しました: ${id} (fields: ${Object.keys(updates).join(', ')})`);
206
- }
207
- async function formsList() {
208
- const config = loadConfig();
209
- if (!config.token) {
210
- error('NOT_LOGGED_IN', t('notLoggedIn'), t('notLoggedIn.fix'));
211
- process.exit(1);
212
- }
213
- let result;
214
- try {
215
- result = await apiRequest(config, 'GET', '/v1/forms');
216
- }
217
- catch (e) {
218
- if (e instanceof ApiError)
219
- error(e.code, e.message, e.suggestedFix);
220
- else
221
- error('FETCH_FAILED', String(e), t('tryAgain'));
222
- process.exit(1);
223
- }
224
- const forms = result.forms ?? [];
225
- if (isJsonMode()) {
226
- success({ forms });
227
- return;
228
- }
229
- if (forms.length === 0) {
230
- info(t('forms.list.empty'));
231
- return;
232
- }
233
- const COL_ID = 18;
234
- const COL_NAME = 28;
235
- const COL_LINKED = 28;
236
- const header = 'ID'.padEnd(COL_ID) + 'NAME'.padEnd(COL_NAME) + 'LINKED'.padEnd(COL_LINKED) + 'NOTIFY';
237
- process.stdout.write(header + '\n');
238
- for (const f of forms) {
239
- const id = (f.id || '').padEnd(COL_ID);
240
- const name = truncate(f.name || '', COL_NAME - 2).padEnd(COL_NAME);
241
- const linked = (f.linkedSite ? `${f.linkedSite}/${f.linkedPage || 'index.html'}` : t('linked.orphan')).padEnd(COL_LINKED);
242
- const notify = f.notifyEmail || '-';
243
- process.stdout.write(id + name + linked + notify + '\n');
244
- }
245
- }
246
- function truncate(s, max) {
247
- return s.length <= max ? s : s.slice(0, Math.max(0, max - 1)) + '…';
248
- }
249
- async function formsDelete(args) {
250
- const config = loadConfig();
251
- if (!config.token) {
252
- error('NOT_LOGGED_IN', t('notLoggedIn'), t('notLoggedIn.fix'));
253
- process.exit(1);
254
- }
255
- const id = args.positional[0];
256
- if (!id) {
257
- error('ID_REQUIRED', t('delete.idRequired.usage', { usage: 'forms delete <id>' }), t('delete.idRequired.fix', { listCmd: 'forms list' }));
258
- process.exit(1);
259
- }
260
- // 削除前に linked 情報を取得して embed 残存の警告に使う(失敗しても無視)
261
- let linkedSite;
262
- let linkedPage;
263
- try {
264
- const all = await apiRequest(config, 'GET', '/v1/forms');
265
- const target = (all.forms ?? []).find((f) => f.id === id);
266
- linkedSite = target?.linkedSite;
267
- linkedPage = target?.linkedPage;
268
- }
269
- catch {
270
- // ignore
271
- }
272
- const interactive = process.stdin.isTTY && !isJsonMode();
273
- if (!args.force) {
274
- if (!interactive) {
275
- error('CONFIRMATION_REQUIRED', t('delete.confirmRequired'), t('delete.confirmRequired.fix'));
276
- process.exit(1);
277
- }
278
- const ans = await prompt(t('delete.confirmPrompt.form', { id }));
279
- if (ans.trim() !== id) {
280
- process.stderr.write(t('delete.cancelled.idMismatch') + '\n');
281
- process.exit(0);
282
- }
283
- }
284
- try {
285
- await apiRequest(config, 'DELETE', `/v1/forms/${id}`);
286
- }
287
- catch (e) {
288
- if (e instanceof ApiError)
289
- error(e.code, e.message, e.suggestedFix);
290
- else
291
- error('DELETE_FAILED', String(e), t('tryAgain'));
292
- process.exit(1);
293
- }
294
- if (isJsonMode()) {
295
- success({ deleted: true, id, linkedSite, linkedPage });
296
- }
297
- else {
298
- successMessage(t('delete.deleted', { id }));
299
- if (linkedSite) {
300
- warn(t('delete.embedLeftover.warn', { site: linkedSite, page: linkedPage || 'index.html' }));
301
- }
302
- }
303
- }
304
- async function fetchImportSource(args) {
305
- const config = loadConfig();
306
- if (args.site) {
307
- if (!args.page) {
308
- error('PAGE_REQUIRED', '--site と一緒に --page <html> を指定してください。', '例: --site mysite --page contact.html');
309
- process.exit(1);
310
- }
311
- let src;
312
- try {
313
- src = await apiRequest(config, 'GET', `/v1/sites/${args.site}/source?page=${encodeURIComponent(args.page)}`);
314
- }
315
- catch (e) {
316
- if (e instanceof ApiError)
317
- error(e.code, e.message, e.suggestedFix);
318
- else
319
- error('FETCH_FAILED', String(e), t('tryAgain'));
320
- process.exit(1);
321
- }
322
- return { html: src.html, source: { kind: 'site', site: args.site, page: args.page } };
323
- }
324
- if (args.url) {
325
- let res;
326
- try {
327
- res = await fetch(args.url, { headers: { 'User-Agent': 'Mozilla/5.0 (compatible; 42ws-cli)' } });
328
- }
329
- catch (e) {
330
- error('FETCH_FAILED', `URL取得に失敗しました: ${e.message}`, t('tryAgain'));
331
- process.exit(1);
332
- }
333
- if (!res.ok) {
334
- error('FETCH_FAILED', `URL取得に失敗しました (${res.status})`, t('tryAgain'));
335
- process.exit(1);
336
- }
337
- const html = await res.text();
338
- return { html, source: { kind: 'url', url: args.url } };
339
- }
340
- const filePath = resolve(process.cwd(), args.file);
341
- if (!existsSync(filePath)) {
342
- error('FILE_NOT_FOUND', `ファイルが見つかりません: ${filePath}`, '');
343
- process.exit(1);
344
- }
345
- return { html: readFileSync(filePath, 'utf-8'), source: { kind: 'file', path: args.file } };
346
- }
347
- async function formsImport(args) {
348
- if (args.help) {
349
- process.stdout.write(FORMS_HELP + '\n');
350
- return;
351
- }
352
- const config = loadConfig();
353
- if (!config.token) {
354
- error('NOT_LOGGED_IN', t('notLoggedIn'), t('notLoggedIn.fix'));
355
- process.exit(1);
356
- }
357
- const sourceCount = [args.site, args.url, args.file].filter(Boolean).length;
358
- if (sourceCount === 0) {
359
- error('SOURCE_REQUIRED', '取り込みソースを指定してください。', '--site <name> --page <html> / --url <url> / --file <path> のいずれか1つを指定。');
360
- process.exit(1);
361
- }
362
- if (sourceCount > 1) {
363
- error('MULTIPLE_SOURCES', '--site / --url / --file は同時に指定できません。', 'いずれか1つを選んでください。');
364
- process.exit(1);
365
- }
366
- if (!args.notify) {
367
- error('NOTIFY_REQUIRED', '--notify <email> を指定してください。', 'フォーム送信時の通知先メールアドレスです。');
368
- process.exit(1);
369
- }
370
- const { html, source } = await fetchImportSource(args);
371
- const baseUrl = args.site && args.page
372
- ? `https://${args.site}.${deriveDomains(config.apiUrl).sitesHost}/${args.page}`
373
- : undefined;
374
- // AI に提案する一時 JSON ファイルパス。create 時にもこのパスをそのまま使えるよう CLI 側で固定生成。
375
- const suggestedJsonPath = join(tmpdir(), `42ws-form-${randomBytes(4).toString('hex')}.json`);
376
- const prompt = buildFormsImportPrompt({
377
- html,
378
- source,
379
- baseUrl,
380
- notify: args.notify,
381
- name: args.name,
382
- inject: !!args.inject,
383
- suggestedJsonPath,
384
- });
385
- if (isJsonMode()) {
386
- success({ prompt, source, notify: args.notify });
387
- return;
388
- }
389
- process.stdout.write(prompt);
390
- }
391
- async function formsCreate(args) {
392
- if (args.help) {
393
- process.stdout.write(FORMS_HELP + '\n');
394
- return;
395
- }
396
- const config = loadConfig();
397
- if (!config.token) {
398
- error('NOT_LOGGED_IN', t('notLoggedIn'), t('notLoggedIn.fix'));
399
- process.exit(1);
400
- }
401
- if (!args.fromJson) {
402
- error('FROM_JSON_REQUIRED', '--from-json <path> を指定してください。', 'AI が出力した JSON ファイルのパス。');
403
- process.exit(1);
404
- }
405
- if (!args.notify) {
406
- error('NOTIFY_REQUIRED', '--notify <email> を指定してください。', 'フォーム送信時の通知先メールアドレスです。');
407
- process.exit(1);
408
- }
409
- const jsonPath = resolve(process.cwd(), args.fromJson);
410
- if (!existsSync(jsonPath)) {
411
- error('FILE_NOT_FOUND', `ファイルが見つかりません: ${jsonPath}`, '');
412
- process.exit(1);
413
- }
414
- let parsed;
415
- try {
416
- parsed = JSON.parse(readFileSync(jsonPath, 'utf-8'));
417
- }
418
- catch (e) {
419
- error('JSON_PARSE_ERROR', `JSON の解析に失敗しました: ${e.message}`, 'スキーマは name / fields / themeColor / css / warnings');
420
- process.exit(1);
421
- }
422
- const fields = parsed.fields ?? [];
423
- if (fields.length === 0) {
424
- error('NO_FIELDS', 'fields が空です。', 'AI の抽出結果に fields[] が含まれているか確認してください。');
425
- process.exit(1);
426
- }
427
- const linkedSite = args.site;
428
- const linkedPage = args.site ? args.page : undefined;
429
- if (args.site && !args.page) {
430
- error('PAGE_REQUIRED', '--site と一緒に --page <html> を指定してください。', '例: --site mysite --page contact.html');
431
- process.exit(1);
432
- }
433
- const formName = args.name || parsed.name || 'インポートしたフォーム';
434
- let created;
435
- try {
436
- created = await apiRequest(config, 'POST', '/v1/forms', {
437
- name: formName,
438
- notifyEmail: args.notify,
439
- fields,
440
- thanksEnabled: true,
441
- themeColor: parsed.themeColor,
442
- css: parsed.css,
443
- ...(linkedSite ? { linkedSite, linkedPage } : {}),
444
- });
445
- }
446
- catch (e) {
447
- if (e instanceof ApiError)
448
- error(e.code, e.message, e.suggestedFix);
449
- else
450
- error('CREATE_FAILED', String(e), t('tryAgain'));
451
- process.exit(1);
452
- }
453
- const form = created.form;
454
- const { webBase } = deriveDomains(config.apiUrl);
455
- const embedSnippet = `<div id="contact-form"></div>\n<script src="${webBase}/embed/form.js" data-api-key="${form.apiKey}" data-api-base="${config.apiUrl}"></script>`;
456
- // --inject: 元ソースを書き換え。
457
- // **ローカル優先**: --site --page でもまずローカル (42ws.json output / dist 等) に該当 page が
458
- // あればそれを書き換える。次の publish 1 回で remote 反映される (一方向同期)。
459
- // ローカルが見つからない時のみ remote save-and-publish にフォールバック (pull で同期案内)。
460
- // 過去フロー: remote 即更新 → ローカル乖離 → 次回 publish で素 <form> 上書き → detach 保護で止まる。
461
- // コメント内 <form> 誤爆を避けるため replaceFirstElement で置換。
462
- let injected = false;
463
- let injectReason;
464
- let injectedToLocal;
465
- if (args.inject) {
466
- // 1) ローカルファイル探索
467
- const localPath = args.site && args.page
468
- ? findLocalPageFile(args.page, { explicitFile: args.file })
469
- : args.file
470
- ? findLocalPageFile('', { explicitFile: args.file })
471
- : undefined;
472
- if (localPath) {
473
- const originalHtml = readFileSync(localPath, 'utf-8');
474
- const newHtml = replaceFirstElement(originalHtml, 'form', embedSnippet);
475
- if (newHtml === null) {
476
- injectReason = '元ソースに <form> タグが見つかりません';
477
- warn(`${injectReason}(${localPath}, --inject スキップ)`);
478
- info(`手動で次のスニペットを <form> 相当の位置に貼り付けてください:\n${embedSnippet}`);
479
- }
480
- else {
481
- writeFileSync(localPath, newHtml, 'utf-8');
482
- injectedToLocal = localPath;
483
- injected = true;
484
- info(`ローカルファイルを書き換えました: ${localPath}`);
485
- }
486
- }
487
- else if (args.site && args.page) {
488
- // 2) ローカル無し → 従来通り remote 書き換え (pull 案内付き)
489
- let originalHtml;
490
- try {
491
- const src = await apiRequest(config, 'GET', `/v1/sites/${args.site}/source?page=${encodeURIComponent(args.page)}`);
492
- originalHtml = src.html;
493
- }
494
- catch (e) {
495
- injectReason = `元ソース取得に失敗: ${e instanceof ApiError ? e.message : String(e)}`;
496
- warn(injectReason);
497
- }
498
- if (originalHtml) {
499
- const newHtml = replaceFirstElement(originalHtml, 'form', embedSnippet);
500
- if (newHtml === null) {
501
- injectReason = 'リモート元ソースに <form> タグが見つかりません';
502
- warn(`${injectReason}(--inject スキップ)`);
503
- info(`手動で次のスニペットを <form> 相当の位置に貼り付けてください:\n${embedSnippet}`);
504
- }
505
- else {
506
- await apiRequest(config, 'POST', `/v1/sites/${args.site}/save-and-publish`, { html: newHtml, page: args.page });
507
- info(`サイトを再公開しました: ${args.site}/${args.page} (リモート直接更新)`);
508
- injected = true;
509
- }
510
- }
511
- }
512
- else {
513
- injectReason = '--inject は --site --page もしくは --file と併用してください';
514
- warn(injectReason);
515
- }
516
- }
517
- if (parsed.warnings && parsed.warnings.length > 0) {
518
- warn('AI からの注意点:');
519
- for (const w of parsed.warnings)
520
- warn(` - ${w}`);
521
- }
522
- if (isJsonMode()) {
523
- success({
524
- form: { id: form.id, name: form.name, apiKey: form.apiKey },
525
- embedSnippet,
526
- injected,
527
- ...(injectedToLocal ? { injectedToLocal } : {}),
528
- ...(injectReason ? { injectReason } : {}),
529
- linkedSite,
530
- linkedPage,
531
- });
532
- }
533
- else {
534
- successMessage(`✓ フォーム作成: ${form.name} (${form.id})`);
535
- successMessage(`管理画面: ${webBase}/forms/${form.id}`);
536
- if (!injected) {
537
- info('');
538
- info('埋め込みコード:');
539
- process.stdout.write(embedSnippet + '\n');
540
- }
541
- else if (injectedToLocal) {
542
- // ローカル → publish の一方向。シンプル。
543
- info('');
544
- info(`📦 次に publish して反映してください:`);
545
- info(` 42ws publish${linkedSite ? ` --site ${linkedSite}` : ''}`);
546
- }
547
- else if (linkedSite && linkedPage) {
548
- // ローカル無し → remote 直接更新。乖離が起きるので pull で吸い上げを案内。
549
- info('');
550
- info(`⚠️ ローカルに ${linkedPage} が見当たらなかったため、リモートを直接更新しました。`);
551
- info(` ローカル側も同期しておいてください: 42ws pull --site ${linkedSite} --dir <出力先>`);
552
- info(' (次回 publish で素の <form> を上書きしないため。detach 保護で止まるが、事前同期推奨)');
553
- }
554
- }
555
- }
556
- // 確認用ダミー (lint回避)
557
- void prompt;
558
- //# sourceMappingURL=forms.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"forms.js","sourceRoot":"","sources":["../../src/commands/forms.ts"],"names":[],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- export interface InitArgs {
2
- site?: string;
3
- output?: string;
4
- build?: string;
5
- spa?: boolean;
6
- yes?: boolean;
7
- }
8
- /**
9
- * `42ws init` — プロジェクトのセットアップ。
10
- *
11
- * 42ws は「install はターミナルで1回、init 以降は AI(Claude Code / Codex)が叩く」運用。
12
- * よって init は **非対話(headless)一本**: プロンプトを出さず、別エージェントも起動しない。
13
- * 42ws.json + AI ガイド (CLAUDE.md / AGENTS.md) + .claude/settings.json を一式そろえ、
14
- * AI に次手順を返す。サイト名は --site か作業フォルダ名から決める。
15
- * `--json` は機械可読モード(42ws.json だけ書いて JSON を返す)。
16
- */
17
- export declare function init(args: InitArgs): Promise<void>;
18
- //# sourceMappingURL=init.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAqBA,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;;;;;;;;GAQG;AACH,wBAAsB,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAoDxD"}