@42ws/cli 0.1.14 → 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.
- package/README.md +9 -225
- package/cli.js +39 -0
- package/package.json +5 -21
- package/bin/cli.js +0 -10
- package/dist/commands/chatlog.d.ts +0 -10
- package/dist/commands/chatlog.d.ts.map +0 -1
- package/dist/commands/chatlog.js +0 -103
- package/dist/commands/chatlog.js.map +0 -1
- package/dist/commands/collections.d.ts +0 -39
- package/dist/commands/collections.d.ts.map +0 -1
- package/dist/commands/collections.js +0 -1186
- package/dist/commands/collections.js.map +0 -1
- package/dist/commands/context.d.ts +0 -12
- package/dist/commands/context.d.ts.map +0 -1
- package/dist/commands/context.js +0 -271
- package/dist/commands/context.js.map +0 -1
- package/dist/commands/dev.d.ts +0 -13
- package/dist/commands/dev.d.ts.map +0 -1
- package/dist/commands/dev.js +0 -372
- package/dist/commands/dev.js.map +0 -1
- package/dist/commands/domains.d.ts +0 -10
- package/dist/commands/domains.d.ts.map +0 -1
- package/dist/commands/domains.js +0 -179
- package/dist/commands/domains.js.map +0 -1
- package/dist/commands/editlog.d.ts +0 -12
- package/dist/commands/editlog.d.ts.map +0 -1
- package/dist/commands/editlog.js +0 -188
- package/dist/commands/editlog.js.map +0 -1
- package/dist/commands/forms.d.ts +0 -23
- package/dist/commands/forms.d.ts.map +0 -1
- package/dist/commands/forms.js +0 -558
- package/dist/commands/forms.js.map +0 -1
- package/dist/commands/init.d.ts +0 -18
- package/dist/commands/init.d.ts.map +0 -1
- package/dist/commands/init.js +0 -197
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/login.d.ts +0 -7
- package/dist/commands/login.d.ts.map +0 -1
- package/dist/commands/login.js +0 -110
- package/dist/commands/login.js.map +0 -1
- package/dist/commands/logout.d.ts +0 -2
- package/dist/commands/logout.d.ts.map +0 -1
- package/dist/commands/logout.js +0 -31
- package/dist/commands/logout.js.map +0 -1
- package/dist/commands/open.d.ts +0 -6
- package/dist/commands/open.d.ts.map +0 -1
- package/dist/commands/open.js +0 -54
- package/dist/commands/open.js.map +0 -1
- package/dist/commands/prompts.d.ts +0 -7
- package/dist/commands/prompts.d.ts.map +0 -1
- package/dist/commands/prompts.js +0 -55
- package/dist/commands/prompts.js.map +0 -1
- package/dist/commands/publish.d.ts +0 -19
- package/dist/commands/publish.d.ts.map +0 -1
- package/dist/commands/publish.js +0 -437
- package/dist/commands/publish.js.map +0 -1
- package/dist/commands/pull.d.ts +0 -7
- package/dist/commands/pull.d.ts.map +0 -1
- package/dist/commands/pull.js +0 -157
- package/dist/commands/pull.js.map +0 -1
- package/dist/commands/sites.d.ts +0 -13
- package/dist/commands/sites.d.ts.map +0 -1
- package/dist/commands/sites.js +0 -316
- package/dist/commands/sites.js.map +0 -1
- package/dist/commands/upgrade.d.ts +0 -2
- package/dist/commands/upgrade.d.ts.map +0 -1
- package/dist/commands/upgrade.js +0 -15
- package/dist/commands/upgrade.js.map +0 -1
- package/dist/commands/whoami.d.ts +0 -4
- package/dist/commands/whoami.d.ts.map +0 -1
- package/dist/commands/whoami.js +0 -98
- package/dist/commands/whoami.js.map +0 -1
- package/dist/index.d.ts +0 -2
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -428
- package/dist/index.js.map +0 -1
- package/dist/lib/api.d.ts +0 -12
- package/dist/lib/api.d.ts.map +0 -1
- package/dist/lib/api.js +0 -121
- package/dist/lib/api.js.map +0 -1
- package/dist/lib/config.d.ts +0 -27
- package/dist/lib/config.d.ts.map +0 -1
- package/dist/lib/config.js +0 -65
- package/dist/lib/config.js.map +0 -1
- package/dist/lib/detect.d.ts +0 -9
- package/dist/lib/detect.d.ts.map +0 -1
- package/dist/lib/detect.js +0 -112
- package/dist/lib/detect.js.map +0 -1
- package/dist/lib/files.d.ts +0 -16
- package/dist/lib/files.d.ts.map +0 -1
- package/dist/lib/files.js +0 -200
- package/dist/lib/files.js.map +0 -1
- package/dist/lib/html.d.ts +0 -8
- package/dist/lib/html.d.ts.map +0 -1
- package/dist/lib/html.js +0 -63
- package/dist/lib/html.js.map +0 -1
- package/dist/lib/i18n.d.ts +0 -6
- package/dist/lib/i18n.d.ts.map +0 -1
- package/dist/lib/i18n.js +0 -256
- package/dist/lib/i18n.js.map +0 -1
- package/dist/lib/import-prompts.d.ts +0 -46
- package/dist/lib/import-prompts.d.ts.map +0 -1
- package/dist/lib/import-prompts.js +0 -279
- package/dist/lib/import-prompts.js.map +0 -1
- package/dist/lib/inspector-client.d.ts +0 -3
- package/dist/lib/inspector-client.d.ts.map +0 -1
- package/dist/lib/inspector-client.js +0 -253
- package/dist/lib/inspector-client.js.map +0 -1
- package/dist/lib/output.d.ts +0 -11
- package/dist/lib/output.d.ts.map +0 -1
- package/dist/lib/output.js +0 -49
- package/dist/lib/output.js.map +0 -1
- package/dist/lib/project.d.ts +0 -25
- package/dist/lib/project.d.ts.map +0 -1
- package/dist/lib/project.js +0 -62
- package/dist/lib/project.js.map +0 -1
- package/dist/lib/suggest.d.ts +0 -12
- package/dist/lib/suggest.d.ts.map +0 -1
- package/dist/lib/suggest.js +0 -36
- package/dist/lib/suggest.js.map +0 -1
- package/dist/lib/update-check.d.ts +0 -22
- package/dist/lib/update-check.d.ts.map +0 -1
- package/dist/lib/update-check.js +0 -182
- package/dist/lib/update-check.js.map +0 -1
- package/dist/run.d.ts +0 -2
- package/dist/run.d.ts.map +0 -1
- package/dist/run.js +0 -17
- package/dist/run.js.map +0 -1
- package/dist/version.d.ts +0 -2
- package/dist/version.d.ts.map +0 -1
- package/dist/version.js +0 -3
- package/dist/version.js.map +0 -1
package/dist/commands/init.js
DELETED
|
@@ -1,197 +0,0 @@
|
|
|
1
|
-
import { existsSync, writeFileSync, readFileSync, appendFileSync, mkdirSync } from 'node:fs';
|
|
2
|
-
import { join, basename } from 'node:path';
|
|
3
|
-
import { detectFramework } from '../lib/detect.js';
|
|
4
|
-
import { loadConfig, deriveDomains } from '../lib/config.js';
|
|
5
|
-
import { apiRequest } from '../lib/api.js';
|
|
6
|
-
import { error, info, isJsonMode } from '../lib/output.js';
|
|
7
|
-
function slugify(name) {
|
|
8
|
-
return name
|
|
9
|
-
.toLowerCase()
|
|
10
|
-
.replace(/[^a-z0-9-]+/g, '-')
|
|
11
|
-
.replace(/^-+|-+$/g, '');
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* `42ws init` — プロジェクトのセットアップ。
|
|
15
|
-
*
|
|
16
|
-
* 42ws は「install はターミナルで1回、init 以降は AI(Claude Code / Codex)が叩く」運用。
|
|
17
|
-
* よって init は **非対話(headless)一本**: プロンプトを出さず、別エージェントも起動しない。
|
|
18
|
-
* 42ws.json + AI ガイド (CLAUDE.md / AGENTS.md) + .claude/settings.json を一式そろえ、
|
|
19
|
-
* AI に次手順を返す。サイト名は --site か作業フォルダ名から決める。
|
|
20
|
-
* `--json` は機械可読モード(42ws.json だけ書いて JSON を返す)。
|
|
21
|
-
*/
|
|
22
|
-
export async function init(args) {
|
|
23
|
-
const cwd = process.cwd();
|
|
24
|
-
const configPath = join(cwd, '42ws.json');
|
|
25
|
-
const detection = detectFramework(cwd);
|
|
26
|
-
// --json: 機械可読モード(42ws.json のみ)。--site 必須。
|
|
27
|
-
if (isJsonMode()) {
|
|
28
|
-
const siteName = args.site;
|
|
29
|
-
if (!siteName) {
|
|
30
|
-
error('INVALID_SITE_NAME', 'Site name is required in JSON mode.', 'Use --site=<name>.');
|
|
31
|
-
process.exit(1);
|
|
32
|
-
}
|
|
33
|
-
const config = { site: siteName, output: args.output ?? detection.output ?? 'dist' };
|
|
34
|
-
if (args.build !== undefined)
|
|
35
|
-
config.build = args.build || undefined;
|
|
36
|
-
if (args.spa !== undefined)
|
|
37
|
-
config.spa = args.spa;
|
|
38
|
-
writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', { encoding: 'utf-8' });
|
|
39
|
-
process.stdout.write(JSON.stringify({ ok: true, path: configPath, config }) + '\n');
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
// サイト名: --site か作業フォルダ名から(質問しない)。Output/Build/SPA は自動検出。
|
|
43
|
-
const site = (args.site ? slugify(args.site) : slugify(basename(cwd))).toLowerCase();
|
|
44
|
-
const config = { site, output: args.output ?? detection.output ?? 'dist' };
|
|
45
|
-
if (detection.build)
|
|
46
|
-
config.build = detection.build;
|
|
47
|
-
if (detection.spa)
|
|
48
|
-
config.spa = true;
|
|
49
|
-
writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', { encoding: 'utf-8' });
|
|
50
|
-
const cfg = loadConfig();
|
|
51
|
-
const { sitesHost } = deriveDomains(cfg.apiUrl);
|
|
52
|
-
info(`42ws.json を作成しました(サイト名: ${site} → https://${site}.${sitesHost})`);
|
|
53
|
-
// サイト名の空き確認(best-effort・ブロックしない)。埋まっていれば AI に修正を促す。
|
|
54
|
-
try {
|
|
55
|
-
const res = await apiRequest(cfg, 'GET', `/v1/sites/${encodeURIComponent(site)}/availability`);
|
|
56
|
-
if (res && !res.available) {
|
|
57
|
-
info(`注意: サイト名 "${site}" は使用中/不可です。42ws.json の "site" を別名に変えてください(公開前に要修正)。`);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
catch { /* オフライン等は無視 */ }
|
|
61
|
-
await setupAgentGuides(cwd);
|
|
62
|
-
await setupClaudeSettings(cwd);
|
|
63
|
-
const loggedIn = !!cfg.token;
|
|
64
|
-
let n = 1;
|
|
65
|
-
info('');
|
|
66
|
-
info('=== 42ws セットアップ完了(AI 向け次手順)===');
|
|
67
|
-
if (!loggedIn)
|
|
68
|
-
info(`${n++}) 未ログインです。ユーザーに \`42ws login\` の実行を促してください(ブラウザ認可)。`);
|
|
69
|
-
info(`${n++}) CLAUDE.md を読み、\`42ws whoami\` で使える機能(hosting / フォーム / コレクション / 独自ドメイン)を確認。`);
|
|
70
|
-
info(`${n++}) ユーザーにヒアリング(参考サイト・原稿)→ design.md を起こす → 制作 → \`42ws dev\` で確認 → 公開。`);
|
|
71
|
-
info(' 規約は `42ws prompts get build`、プラットフォーム前提は `42ws prompts get context` を取得して従う。');
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* .claude/settings.json に 42ws を「AI に認知させる」設定をマージ追記する(strategy §4.5 の制御点の堀)。
|
|
75
|
-
* - permissions.allow に Bash(42ws:*)(毎回の権限確認を消す)
|
|
76
|
-
* - hooks.SessionStart に `42ws whoami --hook`(起動時にログイン/プラン/接続先を AI に渡す)
|
|
77
|
-
* 既存の settings は壊さずマージし、重複は入れない。
|
|
78
|
-
*/
|
|
79
|
-
async function setupClaudeSettings(cwd) {
|
|
80
|
-
const dir = join(cwd, '.claude');
|
|
81
|
-
const file = join(dir, 'settings.json');
|
|
82
|
-
let settings = {};
|
|
83
|
-
if (existsSync(file)) {
|
|
84
|
-
try {
|
|
85
|
-
settings = JSON.parse(readFileSync(file, 'utf-8'));
|
|
86
|
-
}
|
|
87
|
-
catch {
|
|
88
|
-
info('.claude/settings.json が壊れているため 42ws 設定の仕込みをスキップしました。');
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
const perms = (settings.permissions ?? {});
|
|
93
|
-
const allow = Array.isArray(perms.allow) ? perms.allow : [];
|
|
94
|
-
const hooks = (settings.hooks ?? {});
|
|
95
|
-
const sessionStart = Array.isArray(hooks.SessionStart) ? hooks.SessionStart : [];
|
|
96
|
-
const ALLOW_RULE = 'Bash(42ws:*)';
|
|
97
|
-
const hasAllow = allow.includes(ALLOW_RULE);
|
|
98
|
-
const hasHook = JSON.stringify(sessionStart).includes('42ws whoami --hook');
|
|
99
|
-
if (hasAllow && hasHook) {
|
|
100
|
-
info('.claude/settings.json に 42ws の設定が既にあります (skip)');
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
if (!hasAllow)
|
|
104
|
-
allow.push(ALLOW_RULE);
|
|
105
|
-
const newSessionStart = hasHook
|
|
106
|
-
? sessionStart
|
|
107
|
-
: [...sessionStart, { matcher: 'startup', hooks: [{ type: 'command', command: '42ws whoami --hook', timeout: 10 }] }];
|
|
108
|
-
const merged = {
|
|
109
|
-
...settings,
|
|
110
|
-
permissions: { ...(typeof settings.permissions === 'object' && settings.permissions ? settings.permissions : {}), allow },
|
|
111
|
-
hooks: { ...(typeof settings.hooks === 'object' && settings.hooks ? settings.hooks : {}), SessionStart: newSessionStart },
|
|
112
|
-
};
|
|
113
|
-
if (!existsSync(dir))
|
|
114
|
-
mkdirSync(dir, { recursive: true });
|
|
115
|
-
writeFileSync(file, JSON.stringify(merged, null, 2) + '\n', { encoding: 'utf-8' });
|
|
116
|
-
info('.claude/settings.json に 42ws の許可 (Bash(42ws:*)) とセッション開始フック (42ws whoami) を追加しました');
|
|
117
|
-
}
|
|
118
|
-
function buildAgentGuide() {
|
|
119
|
-
return `# 42ws Site Project
|
|
120
|
-
|
|
121
|
-
このプロジェクトは [42ws](https://42ws.com) で公開されます。
|
|
122
|
-
|
|
123
|
-
## まず最初に(ヒアリング)
|
|
124
|
-
|
|
125
|
-
いきなり作り始めない。まずユーザーに**雑談ベースで**確認する(管理画面用語=「コレクション」等は使わない):
|
|
126
|
-
|
|
127
|
-
1. **参考サイト・好きなデザインはあるか**(URL / 「○○みたいな感じ」)— 最重要。トーンの当たりが付く
|
|
128
|
-
2. **原稿・素材はあるか**(文章、ロゴ、写真、既存サイト)— あればそれを使う、無ければ仮で起こして確認
|
|
129
|
-
3. サイトの用途・伝えたいこと・想定読者・運用イメージ(更新するもの/問い合わせの要否)
|
|
130
|
-
|
|
131
|
-
聞いた内容と決めたことは \`design.md\` に記録する(判断のブレ止め)。「適当に」と言われたら仮置きで埋め、方向だけ確認する。
|
|
132
|
-
|
|
133
|
-
## 使える機能を先に確認
|
|
134
|
-
|
|
135
|
-
\`42ws whoami\` で**ログイン状態と契約プランの機能**(hosting / contact=フォーム / collection / customDomains)を確認する。
|
|
136
|
-
**使えない機能は提案しない**(例: フォーム不可のプランなら問い合わせフォームを設計に入れない)。未ログインなら先にログインを促す。
|
|
137
|
-
|
|
138
|
-
## 制作前に必ず読む(オンライン・常に最新)
|
|
139
|
-
|
|
140
|
-
ガイドは 42ws がオンラインで配信します。ローカルに古い規約を抱えないため、**作業前に毎回取得**してください:
|
|
141
|
-
|
|
142
|
-
42ws prompts get context # 42ws プラットフォームの前提(フォーム埋め込み、CMS の作法、禁止事項)
|
|
143
|
-
42ws prompts get build # 制作規約(素 HTML 優先・スマホ対応・SEO 構造・デザイン方針・画像・プレビュー)
|
|
144
|
-
|
|
145
|
-
## 設計を起こす(design.md)
|
|
146
|
-
|
|
147
|
-
上のヒアリング内容をもとに、**\`prompts get build\` の「7. 設計を先に起こす」の項目に沿って \`design.md\` を作成**し、ユーザーに方向確認を取ってから実装に入ってください(design.md の構造はオンライン規約が単一の真実。ローカルに雛形は置きません)。
|
|
148
|
-
|
|
149
|
-
## 作る → プレビュー → 公開
|
|
150
|
-
|
|
151
|
-
1. \`build\` 規約に従って素の HTML/CSS で作る(理由が無ければフレームワーク不要)
|
|
152
|
-
2. **\`42ws dev\` でローカル起動し、ブラウザ(スマホ幅でも)で確認**。崩れ・エラーは検証ツールバー / \`dev errors\` で診断(手順は \`prompts get inspector\`)
|
|
153
|
-
3. 公開・フォーム/コレクション組み込み・既存サイト移行は \`prompts get cli\` / \`prompts get migrate\`
|
|
154
|
-
|
|
155
|
-
## バージョン更新の検知
|
|
156
|
-
|
|
157
|
-
\`prompts get\` の出力冒頭に \`Version: x.y.z (updated YYYY-MM-DD)\` があります。
|
|
158
|
-
**前回見たバージョンと違っていたら再取得して差分を確認してください**。
|
|
159
|
-
バージョンを戻す運用はありません (常に最新が単一の真実)。
|
|
160
|
-
|
|
161
|
-
## ツール(任意)
|
|
162
|
-
|
|
163
|
-
- **画像生成**: gemini / codex があれば画像生成に使う(\`generate-image\` / \`codex-image\` 等のスキルがあればそれを)。**無ければ導入を案内**して実画像を用意する(詳細は \`build\` 規約 §5)。
|
|
164
|
-
- 制作中のページ確認は \`42ws dev\` が基本。実ブラウザ確認の補助ツール(agent-browser 等)が入っていれば併用してよい。
|
|
165
|
-
`;
|
|
166
|
-
}
|
|
167
|
-
function shouldSkipExisting(file, marker) {
|
|
168
|
-
try {
|
|
169
|
-
const existing = readFileSync(file, 'utf-8');
|
|
170
|
-
return existing.includes(marker);
|
|
171
|
-
}
|
|
172
|
-
catch {
|
|
173
|
-
return false;
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
async function setupAgentGuides(cwd) {
|
|
177
|
-
// CLAUDE.md (Claude Code) と AGENTS.md (codex 等) を生成。
|
|
178
|
-
// 既にあれば marker で重複を防ぎつつ末尾に追記(非対話)。
|
|
179
|
-
const guide = buildAgentGuide();
|
|
180
|
-
const marker = '42ws Site Project'; // ヘッダ重複検知用
|
|
181
|
-
for (const fname of ['CLAUDE.md', 'AGENTS.md']) {
|
|
182
|
-
const fpath = join(cwd, fname);
|
|
183
|
-
if (existsSync(fpath)) {
|
|
184
|
-
if (shouldSkipExisting(fpath, marker)) {
|
|
185
|
-
info(`${fname} に 42ws のガイドが既にあります (skip)`);
|
|
186
|
-
continue;
|
|
187
|
-
}
|
|
188
|
-
appendFileSync(fpath, '\n\n' + guide);
|
|
189
|
-
info(`${fname} に追記しました`);
|
|
190
|
-
}
|
|
191
|
-
else {
|
|
192
|
-
writeFileSync(fpath, guide);
|
|
193
|
-
info(`${fname} を作成しました`);
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
//# sourceMappingURL=init.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/login.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAUA,UAAU,UAAU;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAiBD,wBAAsB,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAY3D"}
|
package/dist/commands/login.js
DELETED
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
import { loadConfig, saveConfig } from '../lib/config.js';
|
|
2
|
-
import { apiRequest, ApiError } from '../lib/api.js';
|
|
3
|
-
import { info, successMessage, error } from '../lib/output.js';
|
|
4
|
-
import { spawn } from 'node:child_process';
|
|
5
|
-
export async function login(args) {
|
|
6
|
-
const config = loadConfig();
|
|
7
|
-
const apiUrl = args.apiUrl ?? config.apiUrl;
|
|
8
|
-
// --token flag: legacy / direct token flow
|
|
9
|
-
if (args.token !== undefined) {
|
|
10
|
-
await loginWithToken(args.token, apiUrl);
|
|
11
|
-
return;
|
|
12
|
-
}
|
|
13
|
-
// No --token: device code flow (works without TTY — browser opening is best-effort)
|
|
14
|
-
await loginWithBrowser(apiUrl);
|
|
15
|
-
}
|
|
16
|
-
async function loginWithToken(token, apiUrl) {
|
|
17
|
-
token = token.trim();
|
|
18
|
-
if (!token) {
|
|
19
|
-
error('INVALID_TOKEN', 'No token provided.', 'Run `42ws login --token <your-token>`.');
|
|
20
|
-
process.exit(1);
|
|
21
|
-
}
|
|
22
|
-
const testConfig = { token, apiUrl };
|
|
23
|
-
let me;
|
|
24
|
-
try {
|
|
25
|
-
me = await apiRequest(testConfig, 'GET', '/v1/whoami');
|
|
26
|
-
}
|
|
27
|
-
catch (e) {
|
|
28
|
-
if (e instanceof ApiError) {
|
|
29
|
-
error('INVALID_TOKEN', `Token validation failed: ${e.message}`, 'Get a valid token from your dashboard.');
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
error('NETWORK_ERROR', `Could not reach API: ${String(e)}`, 'Check your internet connection.');
|
|
33
|
-
}
|
|
34
|
-
process.exit(1);
|
|
35
|
-
}
|
|
36
|
-
saveConfig({ token, apiUrl });
|
|
37
|
-
successMessage(me.email ? `Logged in as ${me.email}` : `Logged in (userId ${me.userId})`);
|
|
38
|
-
}
|
|
39
|
-
async function loginWithBrowser(apiUrl) {
|
|
40
|
-
const noAuthConfig = { apiUrl };
|
|
41
|
-
let session;
|
|
42
|
-
try {
|
|
43
|
-
session = await apiRequest(noAuthConfig, 'POST', '/v1/cli/sessions', {});
|
|
44
|
-
}
|
|
45
|
-
catch (e) {
|
|
46
|
-
if (e instanceof ApiError) {
|
|
47
|
-
error('NETWORK_ERROR', `Failed to start login session: ${e.message}`, 'Check your internet connection.');
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
error('NETWORK_ERROR', `Could not reach API: ${String(e)}`, 'Check your internet connection.');
|
|
51
|
-
}
|
|
52
|
-
process.exit(1);
|
|
53
|
-
}
|
|
54
|
-
openBrowser(session.verificationUrlComplete);
|
|
55
|
-
info('Opening your browser...');
|
|
56
|
-
info('If it didn\'t open, visit:');
|
|
57
|
-
info(session.verificationUrlComplete);
|
|
58
|
-
info(`User code: ${session.userCode}`);
|
|
59
|
-
info('Waiting for authorization...');
|
|
60
|
-
const deadline = Date.now() + session.expiresIn * 1000;
|
|
61
|
-
const intervalMs = session.interval * 1000;
|
|
62
|
-
while (Date.now() < deadline) {
|
|
63
|
-
await sleep(intervalMs);
|
|
64
|
-
let statusResp;
|
|
65
|
-
try {
|
|
66
|
-
statusResp = await apiRequest(noAuthConfig, 'GET', `/v1/cli/sessions/${session.deviceCode}`);
|
|
67
|
-
}
|
|
68
|
-
catch {
|
|
69
|
-
// transient error — keep polling
|
|
70
|
-
continue;
|
|
71
|
-
}
|
|
72
|
-
if (statusResp.status === 'pending') {
|
|
73
|
-
continue;
|
|
74
|
-
}
|
|
75
|
-
if (statusResp.status === 'authorized') {
|
|
76
|
-
const token = statusResp.token;
|
|
77
|
-
saveConfig({ token, apiUrl });
|
|
78
|
-
const email = statusResp.user?.email;
|
|
79
|
-
successMessage(email ? `Logged in as ${email}` : 'Logged in successfully');
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
if (statusResp.status === 'expired') {
|
|
83
|
-
error('LOGIN_EXPIRED', 'Login session expired.', 'Run `42ws login` to try again.');
|
|
84
|
-
process.exit(1);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
error('LOGIN_EXPIRED', 'Login session timed out.', 'Run `42ws login` to try again.');
|
|
88
|
-
process.exit(1);
|
|
89
|
-
}
|
|
90
|
-
function openBrowser(url) {
|
|
91
|
-
try {
|
|
92
|
-
const platform = process.platform;
|
|
93
|
-
if (platform === 'darwin') {
|
|
94
|
-
spawn('open', [url], { detached: true, stdio: 'ignore' }).unref();
|
|
95
|
-
}
|
|
96
|
-
else if (platform === 'win32') {
|
|
97
|
-
spawn('cmd', ['/c', 'start', '', url], { detached: true, stdio: 'ignore' }).unref();
|
|
98
|
-
}
|
|
99
|
-
else {
|
|
100
|
-
spawn('xdg-open', [url], { detached: true, stdio: 'ignore' }).unref();
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
catch {
|
|
104
|
-
// ignore — user will use the printed URL
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
function sleep(ms) {
|
|
108
|
-
return new Promise(resolve => setTimeout(resolve, ms));
|
|
109
|
-
}
|
|
110
|
-
//# sourceMappingURL=login.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAIA,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CA2B5C"}
|
package/dist/commands/logout.js
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { loadConfig, saveConfig } from '../lib/config.js';
|
|
2
|
-
import { apiRequest } from '../lib/api.js';
|
|
3
|
-
import { success, successMessage, isJsonMode } from '../lib/output.js';
|
|
4
|
-
export async function logout() {
|
|
5
|
-
const config = loadConfig();
|
|
6
|
-
if (!config.token) {
|
|
7
|
-
if (isJsonMode()) {
|
|
8
|
-
success({ status: 'already-logged-out' });
|
|
9
|
-
}
|
|
10
|
-
else {
|
|
11
|
-
process.stdout.write('Already logged out.\n');
|
|
12
|
-
}
|
|
13
|
-
return;
|
|
14
|
-
}
|
|
15
|
-
// Best-effort: invalidate the token on the server too
|
|
16
|
-
try {
|
|
17
|
-
await apiRequest(config, 'DELETE', '/v1/cli/session');
|
|
18
|
-
}
|
|
19
|
-
catch {
|
|
20
|
-
// ignore — local cleanup is what matters
|
|
21
|
-
}
|
|
22
|
-
// トークンに加え apiUrl も既定 (prod) にリセット。次回 login は prod を向く。
|
|
23
|
-
saveConfig({ removeToken: true, removeApiUrl: true });
|
|
24
|
-
if (isJsonMode()) {
|
|
25
|
-
success({ status: 'logged-out' });
|
|
26
|
-
}
|
|
27
|
-
else {
|
|
28
|
-
successMessage('Logged out.');
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
//# sourceMappingURL=logout.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,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,sDAAsD;IACtD,IAAI,CAAC;QACH,MAAM,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,yCAAyC;IAC3C,CAAC;IAED,uDAAuD;IACvD,UAAU,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;IAEtD,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"}
|
package/dist/commands/open.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"open.d.ts","sourceRoot":"","sources":["../../src/commands/open.ts"],"names":[],"mappings":"AAmCA,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,CAwBxD"}
|
package/dist/commands/open.js
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
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
|
-
import { loadConfig, deriveDomains } from '../lib/config.js';
|
|
6
|
-
function loadProjectConfig(cwd) {
|
|
7
|
-
const configPath = join(cwd, '42ws.json');
|
|
8
|
-
if (!existsSync(configPath))
|
|
9
|
-
return {};
|
|
10
|
-
try {
|
|
11
|
-
return JSON.parse(readFileSync(configPath, 'utf-8'));
|
|
12
|
-
}
|
|
13
|
-
catch {
|
|
14
|
-
return {};
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
function openBrowser(url) {
|
|
18
|
-
try {
|
|
19
|
-
const platform = process.platform;
|
|
20
|
-
if (platform === 'darwin') {
|
|
21
|
-
spawn('open', [url], { detached: true, stdio: 'ignore' }).unref();
|
|
22
|
-
}
|
|
23
|
-
else if (platform === 'win32') {
|
|
24
|
-
spawn('cmd', ['/c', 'start', '', url], { detached: true, stdio: 'ignore' }).unref();
|
|
25
|
-
}
|
|
26
|
-
else {
|
|
27
|
-
spawn('xdg-open', [url], { detached: true, stdio: 'ignore' }).unref();
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
catch {
|
|
31
|
-
// ignore — user will use the printed URL
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
export async function open(args) {
|
|
35
|
-
const cwd = process.cwd();
|
|
36
|
-
let siteName = args.name;
|
|
37
|
-
if (!siteName) {
|
|
38
|
-
const projectConfig = loadProjectConfig(cwd);
|
|
39
|
-
siteName = projectConfig.site;
|
|
40
|
-
}
|
|
41
|
-
if (!siteName) {
|
|
42
|
-
error('INVALID_SITE_NAME', 'No site name specified.', 'Pass a site name: 42ws open <name>, or add "site" to 42ws.json.');
|
|
43
|
-
process.exit(1);
|
|
44
|
-
}
|
|
45
|
-
const { sitesHost } = deriveDomains(loadConfig().apiUrl);
|
|
46
|
-
const url = `https://${siteName}.${sitesHost}`;
|
|
47
|
-
if (isJsonMode()) {
|
|
48
|
-
success({ site: siteName, url });
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
openBrowser(url);
|
|
52
|
-
process.stdout.write(`${url}\n`);
|
|
53
|
-
}
|
|
54
|
-
//# sourceMappingURL=open.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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;AAC9D,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAM7D,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,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC;IACzD,MAAM,GAAG,GAAG,WAAW,QAAQ,IAAI,SAAS,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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/commands/prompts.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAS9D"}
|
package/dist/commands/prompts.js
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { loadConfig } from '../lib/config.js';
|
|
2
|
-
import { apiRequest, ApiError } from '../lib/api.js';
|
|
3
|
-
import { error, isJsonMode, success } from '../lib/output.js';
|
|
4
|
-
import { t } from '../lib/i18n.js';
|
|
5
|
-
const PROMPTS_HELP = `
|
|
6
|
-
42ws prompts — AI エージェント向け制作ガイドを取得
|
|
7
|
-
|
|
8
|
-
Usage:
|
|
9
|
-
42ws prompts get <name> Print prompt body to stdout (name: context | cli | build | sitecard | inspector | migrate)
|
|
10
|
-
|
|
11
|
-
Notes:
|
|
12
|
-
- 本文の冒頭に Version: x.y.z (updated YYYY-MM-DD) があります。
|
|
13
|
-
以前見たバージョンと違っていたら再取得してください。
|
|
14
|
-
`.trim();
|
|
15
|
-
export async function prompts(args) {
|
|
16
|
-
const sub = args.subcommand;
|
|
17
|
-
if (!sub || sub === '--help' || sub === 'help') {
|
|
18
|
-
process.stdout.write(PROMPTS_HELP + '\n');
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
if (sub === 'get')
|
|
22
|
-
return promptsGet(args);
|
|
23
|
-
process.stderr.write(`Unknown prompts subcommand: ${sub}\n\n${PROMPTS_HELP}\n`);
|
|
24
|
-
process.exit(1);
|
|
25
|
-
}
|
|
26
|
-
async function promptsGet(args) {
|
|
27
|
-
const config = loadConfig();
|
|
28
|
-
if (!config.token) {
|
|
29
|
-
error('NOT_LOGGED_IN', t('notLoggedIn'), t('notLoggedIn.fix'));
|
|
30
|
-
process.exit(1);
|
|
31
|
-
}
|
|
32
|
-
const name = args.positional[0];
|
|
33
|
-
if (!name) {
|
|
34
|
-
error('NAME_REQUIRED', '使い方: 42ws prompts get <name>', '<name> は context | cli | build | sitecard | inspector | migrate');
|
|
35
|
-
process.exit(1);
|
|
36
|
-
}
|
|
37
|
-
// /v1/prompts/{name} は text/plain を返すので、apiRequest の JSON.parse 失敗を string として受ける挙動に依存。
|
|
38
|
-
let body;
|
|
39
|
-
try {
|
|
40
|
-
body = await apiRequest(config, 'GET', `/v1/prompts/${encodeURIComponent(name)}`);
|
|
41
|
-
}
|
|
42
|
-
catch (e) {
|
|
43
|
-
if (e instanceof ApiError)
|
|
44
|
-
error(e.code, e.message, e.suggestedFix);
|
|
45
|
-
else
|
|
46
|
-
error('FETCH_FAILED', String(e), t('tryAgain'));
|
|
47
|
-
process.exit(1);
|
|
48
|
-
}
|
|
49
|
-
if (isJsonMode()) {
|
|
50
|
-
success({ name, content: body });
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
process.stdout.write(body.endsWith('\n') ? body : body + '\n');
|
|
54
|
-
}
|
|
55
|
-
//# sourceMappingURL=prompts.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/commands/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,CAAC,EAAE,MAAM,gBAAgB,CAAC;AAEnC,MAAM,YAAY,GAAG;;;;;;;;;CASpB,CAAC,IAAI,EAAE,CAAC;AAQT,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAiB;IAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC;IAC5B,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QAC/C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;QAC1C,OAAO;IACT,CAAC;IACD,IAAI,GAAG,KAAK,KAAK;QAAE,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;IAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,GAAG,OAAO,YAAY,IAAI,CAAC,CAAC;IAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,IAAiB;IACzC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAChC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,KAAK,CAAC,eAAe,EAAE,8BAA8B,EAAE,iEAAiE,CAAC,CAAC;QAC1H,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,wFAAwF;IACxF,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,UAAU,CAAS,MAAM,EAAE,KAAK,EAAE,eAAe,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5F,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,QAAQ;YAAE,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC;;YAC/D,KAAK,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,UAAU,EAAE,EAAE,CAAC;QACjB,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACjC,OAAO;IACT,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;AACjE,CAAC"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
export interface ProjectConfig {
|
|
2
|
-
site?: string;
|
|
3
|
-
build?: string;
|
|
4
|
-
output?: string;
|
|
5
|
-
spa?: boolean;
|
|
6
|
-
ignore?: string[];
|
|
7
|
-
}
|
|
8
|
-
export interface PublishArgs {
|
|
9
|
-
site?: string;
|
|
10
|
-
dir?: string;
|
|
11
|
-
message?: string;
|
|
12
|
-
yes?: boolean;
|
|
13
|
-
json?: boolean;
|
|
14
|
-
build?: string;
|
|
15
|
-
noBuild?: boolean;
|
|
16
|
-
allowDetach?: boolean;
|
|
17
|
-
}
|
|
18
|
-
export declare function publish(args: PublishArgs): Promise<void>;
|
|
19
|
-
//# sourceMappingURL=publish.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AA8BD,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AA+FD,wBAAsB,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA2T9D"}
|