@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.
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 -372
  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,3 +0,0 @@
1
- export declare const INSPECTOR_ENDPOINT = "/__42ws_inspector";
2
- export declare const INSPECTOR_CLIENT_JS = "(function () {\n 'use strict';\n if (window.__42wsInspector) return;\n window.__42wsInspector = true;\n\n var NL = String.fromCharCode(10);\n var ENDPOINT = '/__42ws_inspector';\n var MARK = 'data-42ws-inspector';\n\n // ---- error ring buffer (last 5) ----------------------------------------\n var errors = [];\n function pushError(type, message) {\n errors.push({ type: type, message: String(message).slice(0, 400) });\n if (errors.length > 5) errors.shift();\n updateBadge();\n try {\n fetch(ENDPOINT + '/log', {\n method: 'POST',\n keepalive: true,\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ type: type, message: String(message).slice(0, 1000), url: location.href })\n });\n } catch (e) { /* ignore */ }\n }\n\n window.addEventListener('error', function (ev) {\n var t = ev.target;\n if (t && t !== window && t.tagName) {\n var src = t.src || t.href || '';\n pushError('Resource', t.tagName.toLowerCase() + ' failed to load: ' + src);\n } else {\n pushError('JS', (ev.message || 'Error') + (ev.filename ? ' @ ' + ev.filename + ':' + ev.lineno : ''));\n }\n }, true);\n\n window.addEventListener('unhandledrejection', function (ev) {\n var r = ev.reason;\n pushError('Promise', (r && r.message) ? r.message : String(r));\n });\n\n var origFetch = window.fetch;\n if (origFetch) {\n window.fetch = function () {\n var args = arguments;\n var url = (args[0] && args[0].url) ? args[0].url : String(args[0]);\n var p = origFetch.apply(this, args);\n if (url.indexOf(ENDPOINT) === -1) {\n p.then(function (res) {\n if (res && res.status >= 400) {\n var method = (args[1] && args[1].method) ? args[1].method : 'GET';\n pushError('HTTP ' + res.status, method + ' ' + url);\n }\n return res;\n }).catch(function (err) {\n pushError('Network', (err && err.message ? err.message : 'fetch failed') + ' ' + url);\n });\n }\n return p;\n };\n }\n\n // ---- selector / pack ----------------------------------------------------\n function truncate(s, n) {\n s = String(s);\n return s.length > n ? s.slice(0, n) + ' \u2026(truncated)' : s;\n }\n\n function cssPath(el) {\n if (!el || el.nodeType !== 1) return '(unknown)';\n var parts = [];\n var cur = el;\n while (cur && cur.nodeType === 1 && parts.length < 5) {\n if (cur.id) { parts.unshift('#' + cur.id); break; }\n var sel = cur.tagName.toLowerCase();\n var cls = (cur.className && typeof cur.className === 'string')\n ? cur.className.trim().split(/\\s+/).filter(Boolean).slice(0, 2) : [];\n if (cls.length) sel += '.' + cls.join('.');\n var parent = cur.parentElement;\n if (parent) {\n var same = Array.prototype.filter.call(parent.children, function (c) { return c.tagName === cur.tagName; });\n if (same.length > 1) sel += ':nth-of-type(' + (same.indexOf(cur) + 1) + ')';\n }\n parts.unshift(sel);\n cur = cur.parentElement;\n }\n return parts.join(' > ');\n }\n\n function buildPack(el) {\n var errLines = errors.length\n ? errors.map(function (e) { return '- [' + e.type + '] ' + e.message; }).join(NL)\n : '- (none)';\n var ctx = el.parentElement ? truncate(el.parentElement.outerHTML, 1000) : '(no parent)';\n return [\n '<!-- 42ws page diagnostic pack -->',\n '## url',\n location.href,\n '',\n '## selector',\n cssPath(el),\n '',\n '## outerHTML excerpt',\n truncate(el.outerHTML, 600),\n '',\n '## context HTML',\n ctx,\n '',\n '## errors (last 5)',\n errLines,\n ''\n ].join(NL);\n }\n\n function copyText(text) {\n if (navigator.clipboard && navigator.clipboard.writeText) {\n return navigator.clipboard.writeText(text).then(function () { return true; }, function () { return fallbackCopy(text); });\n }\n return Promise.resolve(fallbackCopy(text));\n }\n function fallbackCopy(text) {\n try {\n var ta = document.createElement('textarea');\n ta.value = text;\n ta.style.position = 'fixed';\n ta.style.opacity = '0';\n document.body.appendChild(ta);\n ta.select();\n var ok = document.execCommand('copy');\n document.body.removeChild(ta);\n return ok;\n } catch (e) { return false; }\n }\n\n // ---- UI: toolbar + overlay ----------------------------------------------\n var inspecting = false;\n var overlay, bar, badge, toast;\n\n function mkEl(tag, css) {\n var el = document.createElement(tag);\n el.setAttribute(MARK, '');\n if (css) el.style.cssText = css;\n return el;\n }\n\n function buildUI() {\n overlay = mkEl('div', 'position:fixed;z-index:2147483646;pointer-events:none;border:2px solid #ff3b6b;background:rgba(255,59,107,0.12);display:none;border-radius:2px;');\n document.body.appendChild(overlay);\n\n bar = mkEl('div', 'position:fixed;bottom:16px;right:16px;z-index:2147483647;display:flex;gap:8px;align-items:center;font:600 12px/1 ui-monospace,monospace;background:#10111a;color:#fff;padding:8px 10px;border-radius:10px;box-shadow:0 4px 20px rgba(0,0,0,.35);');\n\n var tag = mkEl('span', 'color:#ff3b6b;letter-spacing:.5px;');\n tag.textContent = '42ws';\n bar.appendChild(tag);\n\n var btn = mkEl('button', 'cursor:pointer;border:0;border-radius:6px;padding:6px 10px;font:inherit;background:#2b2d3a;color:#fff;');\n btn.textContent = '\u691C\u8A3C\u3059\u308B';\n btn.onclick = function () { setInspecting(!inspecting); };\n bar.appendChild(btn);\n bar.__btn = btn;\n\n var thumbLink = mkEl('a', 'cursor:pointer;border:0;border-radius:6px;padding:6px 10px;font:inherit;background:#2b2d3a;color:#bbb;text-decoration:none;');\n thumbLink.textContent = '\u914D\u4FE1\u9762';\n thumbLink.href = ENDPOINT + '/thumbnail';\n thumbLink.target = '_blank';\n thumbLink.title = 'SNS \u914D\u4FE1\u9762\u30D7\u30EC\u30D3\u30E5\u30FC (9:16 / 1:1 / 4:5 / 16:9)';\n bar.appendChild(thumbLink);\n\n badge = mkEl('span', 'min-width:18px;text-align:center;border-radius:9px;padding:3px 7px;background:#2b2d3a;color:#8b8d98;');\n badge.textContent = '0';\n badge.title = 'JS/HTTP \u30A8\u30E9\u30FC\u4EF6\u6570';\n bar.appendChild(badge);\n\n document.body.appendChild(bar);\n }\n\n function updateBadge() {\n if (!badge) return;\n badge.textContent = String(errors.length);\n badge.style.background = errors.length ? '#ff3b6b' : '#2b2d3a';\n badge.style.color = errors.length ? '#fff' : '#8b8d98';\n }\n\n function showToast(msg) {\n if (toast) toast.remove();\n toast = mkEl('div', 'position:fixed;bottom:64px;right:16px;z-index:2147483647;max-width:320px;font:500 12px/1.5 ui-monospace,monospace;background:#10111a;color:#fff;padding:10px 12px;border-radius:8px;box-shadow:0 4px 20px rgba(0,0,0,.35);white-space:pre-wrap;');\n toast.textContent = msg;\n document.body.appendChild(toast);\n setTimeout(function () { if (toast) { toast.remove(); toast = null; } }, 4000);\n }\n\n function setInspecting(on) {\n inspecting = on;\n if (bar && bar.__btn) {\n bar.__btn.textContent = on ? '\u9078\u629E\u4E2D\u2026(Esc\u3067\u4E2D\u6B62)' : '\u691C\u8A3C\u3059\u308B';\n bar.__btn.style.background = on ? '#ff3b6b' : '#2b2d3a';\n }\n document.body.style.cursor = on ? 'crosshair' : '';\n if (!on && overlay) overlay.style.display = 'none';\n }\n\n function isOurs(el) {\n while (el) { if (el.nodeType === 1 && el.hasAttribute && el.hasAttribute(MARK)) return true; el = el.parentNode; }\n return false;\n }\n\n document.addEventListener('mousemove', function (ev) {\n if (!inspecting || !overlay) return;\n var el = ev.target;\n if (!el || isOurs(el)) { overlay.style.display = 'none'; return; }\n var r = el.getBoundingClientRect();\n overlay.style.display = 'block';\n overlay.style.left = r.left + 'px';\n overlay.style.top = r.top + 'px';\n overlay.style.width = r.width + 'px';\n overlay.style.height = r.height + 'px';\n }, true);\n\n document.addEventListener('keydown', function (ev) {\n if (ev.key === 'Escape' && inspecting) setInspecting(false);\n });\n\n document.addEventListener('click', function (ev) {\n if (!inspecting) return;\n var el = ev.target;\n if (isOurs(el)) return;\n ev.preventDefault();\n ev.stopPropagation();\n setInspecting(false);\n var pack = buildPack(el);\n el.scrollIntoView({ block: 'center', behavior: 'smooth' });\n var prev = el.style.outline;\n el.style.outline = '3px solid #ff3b6b';\n setTimeout(function () { el.style.outline = prev; }, 1500);\n copyText(pack).then(function (ok) {\n showToast(ok\n ? '\u8A3A\u65AD\u30D1\u30C3\u30AF\u3092\u30B3\u30D4\u30FC\u3057\u307E\u3057\u305F\u3002AI \u306B\u8CBC\u308A\u4ED8\u3051\u3066\u304F\u3060\u3055\u3044\u3002' + NL + '(\u898B\u305F\u76EE\u306E\u5D29\u308C\u306F\u624B\u52D5\u3067\u30B9\u30AF\u30B7\u30E7\u3057\u3066\u6DFB\u4ED8)'\n : '\u30AF\u30EA\u30C3\u30D7\u30DC\u30FC\u30C9\u3078\u306E\u30B3\u30D4\u30FC\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u30B3\u30F3\u30BD\u30FC\u30EB\u306B\u51FA\u529B\u3057\u307E\u3059\u3002');\n if (!ok) console.log(pack);\n });\n }, true);\n\n if (document.body) buildUI();\n else window.addEventListener('DOMContentLoaded', buildUI);\n})();\n";
3
- //# sourceMappingURL=inspector-client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"inspector-client.d.ts","sourceRoot":"","sources":["../../src/lib/inspector-client.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,kBAAkB,sBAAsB,CAAC;AAEtD,eAAO,MAAM,mBAAmB,mySAoP/B,CAAC"}
@@ -1,253 +0,0 @@
1
- // 42ws dev サーバーが HTML に inject するクライアント検証スクリプト。
2
- // このファイルは「文字列としての JS ソース」を export する。TS テンプレート
3
- // リテラル内に置くため、クライアント側コードでは次を厳守する:
4
- // - バッククォートと ${ を使わない(テンプレートリテラル禁止)
5
- // - 改行文字が必要な箇所は NL 変数 (String.fromCharCode(10)) を使う
6
- // これにより TS 側でのエスケープ事故を防ぐ。
7
- export const INSPECTOR_ENDPOINT = '/__42ws_inspector';
8
- export const INSPECTOR_CLIENT_JS = `(function () {
9
- 'use strict';
10
- if (window.__42wsInspector) return;
11
- window.__42wsInspector = true;
12
-
13
- var NL = String.fromCharCode(10);
14
- var ENDPOINT = '${INSPECTOR_ENDPOINT}';
15
- var MARK = 'data-42ws-inspector';
16
-
17
- // ---- error ring buffer (last 5) ----------------------------------------
18
- var errors = [];
19
- function pushError(type, message) {
20
- errors.push({ type: type, message: String(message).slice(0, 400) });
21
- if (errors.length > 5) errors.shift();
22
- updateBadge();
23
- try {
24
- fetch(ENDPOINT + '/log', {
25
- method: 'POST',
26
- keepalive: true,
27
- headers: { 'content-type': 'application/json' },
28
- body: JSON.stringify({ type: type, message: String(message).slice(0, 1000), url: location.href })
29
- });
30
- } catch (e) { /* ignore */ }
31
- }
32
-
33
- window.addEventListener('error', function (ev) {
34
- var t = ev.target;
35
- if (t && t !== window && t.tagName) {
36
- var src = t.src || t.href || '';
37
- pushError('Resource', t.tagName.toLowerCase() + ' failed to load: ' + src);
38
- } else {
39
- pushError('JS', (ev.message || 'Error') + (ev.filename ? ' @ ' + ev.filename + ':' + ev.lineno : ''));
40
- }
41
- }, true);
42
-
43
- window.addEventListener('unhandledrejection', function (ev) {
44
- var r = ev.reason;
45
- pushError('Promise', (r && r.message) ? r.message : String(r));
46
- });
47
-
48
- var origFetch = window.fetch;
49
- if (origFetch) {
50
- window.fetch = function () {
51
- var args = arguments;
52
- var url = (args[0] && args[0].url) ? args[0].url : String(args[0]);
53
- var p = origFetch.apply(this, args);
54
- if (url.indexOf(ENDPOINT) === -1) {
55
- p.then(function (res) {
56
- if (res && res.status >= 400) {
57
- var method = (args[1] && args[1].method) ? args[1].method : 'GET';
58
- pushError('HTTP ' + res.status, method + ' ' + url);
59
- }
60
- return res;
61
- }).catch(function (err) {
62
- pushError('Network', (err && err.message ? err.message : 'fetch failed') + ' ' + url);
63
- });
64
- }
65
- return p;
66
- };
67
- }
68
-
69
- // ---- selector / pack ----------------------------------------------------
70
- function truncate(s, n) {
71
- s = String(s);
72
- return s.length > n ? s.slice(0, n) + ' …(truncated)' : s;
73
- }
74
-
75
- function cssPath(el) {
76
- if (!el || el.nodeType !== 1) return '(unknown)';
77
- var parts = [];
78
- var cur = el;
79
- while (cur && cur.nodeType === 1 && parts.length < 5) {
80
- if (cur.id) { parts.unshift('#' + cur.id); break; }
81
- var sel = cur.tagName.toLowerCase();
82
- var cls = (cur.className && typeof cur.className === 'string')
83
- ? cur.className.trim().split(/\\s+/).filter(Boolean).slice(0, 2) : [];
84
- if (cls.length) sel += '.' + cls.join('.');
85
- var parent = cur.parentElement;
86
- if (parent) {
87
- var same = Array.prototype.filter.call(parent.children, function (c) { return c.tagName === cur.tagName; });
88
- if (same.length > 1) sel += ':nth-of-type(' + (same.indexOf(cur) + 1) + ')';
89
- }
90
- parts.unshift(sel);
91
- cur = cur.parentElement;
92
- }
93
- return parts.join(' > ');
94
- }
95
-
96
- function buildPack(el) {
97
- var errLines = errors.length
98
- ? errors.map(function (e) { return '- [' + e.type + '] ' + e.message; }).join(NL)
99
- : '- (none)';
100
- var ctx = el.parentElement ? truncate(el.parentElement.outerHTML, 1000) : '(no parent)';
101
- return [
102
- '<!-- 42ws page diagnostic pack -->',
103
- '## url',
104
- location.href,
105
- '',
106
- '## selector',
107
- cssPath(el),
108
- '',
109
- '## outerHTML excerpt',
110
- truncate(el.outerHTML, 600),
111
- '',
112
- '## context HTML',
113
- ctx,
114
- '',
115
- '## errors (last 5)',
116
- errLines,
117
- ''
118
- ].join(NL);
119
- }
120
-
121
- function copyText(text) {
122
- if (navigator.clipboard && navigator.clipboard.writeText) {
123
- return navigator.clipboard.writeText(text).then(function () { return true; }, function () { return fallbackCopy(text); });
124
- }
125
- return Promise.resolve(fallbackCopy(text));
126
- }
127
- function fallbackCopy(text) {
128
- try {
129
- var ta = document.createElement('textarea');
130
- ta.value = text;
131
- ta.style.position = 'fixed';
132
- ta.style.opacity = '0';
133
- document.body.appendChild(ta);
134
- ta.select();
135
- var ok = document.execCommand('copy');
136
- document.body.removeChild(ta);
137
- return ok;
138
- } catch (e) { return false; }
139
- }
140
-
141
- // ---- UI: toolbar + overlay ----------------------------------------------
142
- var inspecting = false;
143
- var overlay, bar, badge, toast;
144
-
145
- function mkEl(tag, css) {
146
- var el = document.createElement(tag);
147
- el.setAttribute(MARK, '');
148
- if (css) el.style.cssText = css;
149
- return el;
150
- }
151
-
152
- function buildUI() {
153
- overlay = mkEl('div', 'position:fixed;z-index:2147483646;pointer-events:none;border:2px solid #ff3b6b;background:rgba(255,59,107,0.12);display:none;border-radius:2px;');
154
- document.body.appendChild(overlay);
155
-
156
- bar = mkEl('div', 'position:fixed;bottom:16px;right:16px;z-index:2147483647;display:flex;gap:8px;align-items:center;font:600 12px/1 ui-monospace,monospace;background:#10111a;color:#fff;padding:8px 10px;border-radius:10px;box-shadow:0 4px 20px rgba(0,0,0,.35);');
157
-
158
- var tag = mkEl('span', 'color:#ff3b6b;letter-spacing:.5px;');
159
- tag.textContent = '42ws';
160
- bar.appendChild(tag);
161
-
162
- var btn = mkEl('button', 'cursor:pointer;border:0;border-radius:6px;padding:6px 10px;font:inherit;background:#2b2d3a;color:#fff;');
163
- btn.textContent = '検証する';
164
- btn.onclick = function () { setInspecting(!inspecting); };
165
- bar.appendChild(btn);
166
- bar.__btn = btn;
167
-
168
- var thumbLink = mkEl('a', 'cursor:pointer;border:0;border-radius:6px;padding:6px 10px;font:inherit;background:#2b2d3a;color:#bbb;text-decoration:none;');
169
- thumbLink.textContent = '配信面';
170
- thumbLink.href = ENDPOINT + '/thumbnail';
171
- thumbLink.target = '_blank';
172
- thumbLink.title = 'SNS 配信面プレビュー (9:16 / 1:1 / 4:5 / 16:9)';
173
- bar.appendChild(thumbLink);
174
-
175
- badge = mkEl('span', 'min-width:18px;text-align:center;border-radius:9px;padding:3px 7px;background:#2b2d3a;color:#8b8d98;');
176
- badge.textContent = '0';
177
- badge.title = 'JS/HTTP エラー件数';
178
- bar.appendChild(badge);
179
-
180
- document.body.appendChild(bar);
181
- }
182
-
183
- function updateBadge() {
184
- if (!badge) return;
185
- badge.textContent = String(errors.length);
186
- badge.style.background = errors.length ? '#ff3b6b' : '#2b2d3a';
187
- badge.style.color = errors.length ? '#fff' : '#8b8d98';
188
- }
189
-
190
- function showToast(msg) {
191
- if (toast) toast.remove();
192
- toast = mkEl('div', 'position:fixed;bottom:64px;right:16px;z-index:2147483647;max-width:320px;font:500 12px/1.5 ui-monospace,monospace;background:#10111a;color:#fff;padding:10px 12px;border-radius:8px;box-shadow:0 4px 20px rgba(0,0,0,.35);white-space:pre-wrap;');
193
- toast.textContent = msg;
194
- document.body.appendChild(toast);
195
- setTimeout(function () { if (toast) { toast.remove(); toast = null; } }, 4000);
196
- }
197
-
198
- function setInspecting(on) {
199
- inspecting = on;
200
- if (bar && bar.__btn) {
201
- bar.__btn.textContent = on ? '選択中…(Escで中止)' : '検証する';
202
- bar.__btn.style.background = on ? '#ff3b6b' : '#2b2d3a';
203
- }
204
- document.body.style.cursor = on ? 'crosshair' : '';
205
- if (!on && overlay) overlay.style.display = 'none';
206
- }
207
-
208
- function isOurs(el) {
209
- while (el) { if (el.nodeType === 1 && el.hasAttribute && el.hasAttribute(MARK)) return true; el = el.parentNode; }
210
- return false;
211
- }
212
-
213
- document.addEventListener('mousemove', function (ev) {
214
- if (!inspecting || !overlay) return;
215
- var el = ev.target;
216
- if (!el || isOurs(el)) { overlay.style.display = 'none'; return; }
217
- var r = el.getBoundingClientRect();
218
- overlay.style.display = 'block';
219
- overlay.style.left = r.left + 'px';
220
- overlay.style.top = r.top + 'px';
221
- overlay.style.width = r.width + 'px';
222
- overlay.style.height = r.height + 'px';
223
- }, true);
224
-
225
- document.addEventListener('keydown', function (ev) {
226
- if (ev.key === 'Escape' && inspecting) setInspecting(false);
227
- });
228
-
229
- document.addEventListener('click', function (ev) {
230
- if (!inspecting) return;
231
- var el = ev.target;
232
- if (isOurs(el)) return;
233
- ev.preventDefault();
234
- ev.stopPropagation();
235
- setInspecting(false);
236
- var pack = buildPack(el);
237
- el.scrollIntoView({ block: 'center', behavior: 'smooth' });
238
- var prev = el.style.outline;
239
- el.style.outline = '3px solid #ff3b6b';
240
- setTimeout(function () { el.style.outline = prev; }, 1500);
241
- copyText(pack).then(function (ok) {
242
- showToast(ok
243
- ? '診断パックをコピーしました。AI に貼り付けてください。' + NL + '(見た目の崩れは手動でスクショして添付)'
244
- : 'クリップボードへのコピーに失敗しました。コンソールに出力します。');
245
- if (!ok) console.log(pack);
246
- });
247
- }, true);
248
-
249
- if (document.body) buildUI();
250
- else window.addEventListener('DOMContentLoaded', buildUI);
251
- })();
252
- `;
253
- //# sourceMappingURL=inspector-client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"inspector-client.js","sourceRoot":"","sources":["../../src/lib/inspector-client.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,+CAA+C;AAC/C,iCAAiC;AACjC,sCAAsC;AACtC,sDAAsD;AACtD,0BAA0B;AAE1B,MAAM,CAAC,MAAM,kBAAkB,GAAG,mBAAmB,CAAC;AAEtD,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;oBAMf,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8OrC,CAAC"}
@@ -1,11 +0,0 @@
1
- export interface OutputOptions {
2
- json?: boolean;
3
- }
4
- export declare function setJsonMode(enabled: boolean): void;
5
- export declare function isJsonMode(): boolean;
6
- export declare function info(msg: string): void;
7
- export declare function warn(msg: string): void;
8
- export declare function success(data: Record<string, unknown>): void;
9
- export declare function successMessage(msg: string): void;
10
- export declare function error(code: string, message: string, suggestedFix?: string, extra?: Record<string, unknown>): void;
11
- //# sourceMappingURL=output.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAID,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAElD;AAED,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AAED,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAItC;AAED,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAItC;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAI3D;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAIhD;AAED,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAiBjH"}
@@ -1,49 +0,0 @@
1
- let jsonMode = false;
2
- export function setJsonMode(enabled) {
3
- jsonMode = enabled;
4
- }
5
- export function isJsonMode() {
6
- return jsonMode;
7
- }
8
- export function info(msg) {
9
- if (!jsonMode) {
10
- process.stderr.write(msg + '\n');
11
- }
12
- }
13
- export function warn(msg) {
14
- if (!jsonMode) {
15
- process.stderr.write(`${msg}\n`);
16
- }
17
- }
18
- export function success(data) {
19
- if (jsonMode) {
20
- process.stdout.write(JSON.stringify({ ok: true, ...data }) + '\n');
21
- }
22
- }
23
- export function successMessage(msg) {
24
- if (!jsonMode) {
25
- process.stdout.write(msg + '\n');
26
- }
27
- }
28
- export function error(code, message, suggestedFix, extra) {
29
- if (jsonMode) {
30
- const obj = { code, message };
31
- if (suggestedFix)
32
- obj['suggestedFix'] = suggestedFix;
33
- if (extra)
34
- Object.assign(obj, extra);
35
- process.stdout.write(JSON.stringify({ ok: false, error: obj }) + '\n');
36
- }
37
- else {
38
- process.stderr.write(`Error [${code}]: ${message}\n`);
39
- if (suggestedFix) {
40
- process.stderr.write(` Fix: ${suggestedFix}\n`);
41
- }
42
- if (extra && Object.keys(extra).length > 0) {
43
- for (const [k, v] of Object.entries(extra)) {
44
- process.stderr.write(` ${k}: ${typeof v === 'string' ? v : JSON.stringify(v)}\n`);
45
- }
46
- }
47
- }
48
- }
49
- //# sourceMappingURL=output.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"AAIA,IAAI,QAAQ,GAAG,KAAK,CAAC;AAErB,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC1C,QAAQ,GAAG,OAAO,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,GAAW;IAC9B,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;IACnC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,GAAW;IAC9B,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAA6B;IACnD,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;IACnC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,IAAY,EAAE,OAAe,EAAE,YAAqB,EAAE,KAA+B;IACzG,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,GAAG,GAA4B,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QACvD,IAAI,YAAY;YAAE,GAAG,CAAC,cAAc,CAAC,GAAG,YAAY,CAAC;QACrD,IAAI,KAAK;YAAE,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;IACzE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,IAAI,MAAM,OAAO,IAAI,CAAC,CAAC;QACtD,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,YAAY,IAAI,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACrF,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -1,25 +0,0 @@
1
- export interface ProjectConfig {
2
- site?: string;
3
- build?: string;
4
- output?: string;
5
- spa?: boolean;
6
- ignore?: string[];
7
- }
8
- export declare function loadProjectConfig(cwd?: string): ProjectConfig;
9
- export declare function resolveOutputDir(cwd?: string): string | undefined;
10
- /**
11
- * site/page から **ローカルファイルパスを推測** する。
12
- * 1. 明示的に --file が指定されていればそれを優先
13
- * 2. 42ws.json の output、なければ ['dist','build','_site','out','public'] を順に
14
- * 3. それも無ければ cwd 直下
15
- * 見つかったパス (存在するファイル) を返す。なければ undefined。
16
- *
17
- * forms / collections create --inject --site --page で「リモート書き換え」より先に
18
- * ローカルを書き換えられるかを判定するために使う。ローカル → publish 一方向に揃えて、
19
- * remote/local 乖離からのトラブルを防ぐ目的。
20
- */
21
- export declare function findLocalPageFile(page: string, options?: {
22
- cwd?: string;
23
- explicitFile?: string;
24
- }): string | undefined;
25
- //# sourceMappingURL=project.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/lib/project.ts"],"names":[],"mappings":"AAGA,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;AAED,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAsB,GAAG,aAAa,CAQ5E;AAMD,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,GAAG,SAAS,CAYhF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAO,GACpD,MAAM,GAAG,SAAS,CAgBpB"}
@@ -1,62 +0,0 @@
1
- import { readFileSync, existsSync, statSync } from 'node:fs';
2
- import { join, resolve } from 'node:path';
3
- export function loadProjectConfig(cwd = process.cwd()) {
4
- const configPath = join(cwd, '42ws.json');
5
- if (!existsSync(configPath))
6
- return {};
7
- try {
8
- return JSON.parse(readFileSync(configPath, 'utf-8'));
9
- }
10
- catch {
11
- return {};
12
- }
13
- }
14
- // よくある静的サイト出力先を順に探して、最初に存在するディレクトリを返す。
15
- // publish の detectFramework に近い軽量版 (依存を増やしたくないため最小限)。
16
- const CANDIDATE_OUTPUT_DIRS = ['dist', 'build', '_site', 'out', 'public'];
17
- export function resolveOutputDir(cwd = process.cwd()) {
18
- const cfg = loadProjectConfig(cwd);
19
- if (cfg.output) {
20
- const p = resolve(cwd, cfg.output);
21
- return existsSync(p) ? p : undefined;
22
- }
23
- for (const d of CANDIDATE_OUTPUT_DIRS) {
24
- const p = resolve(cwd, d);
25
- if (existsSync(p) && statSync(p).isDirectory())
26
- return p;
27
- }
28
- // 出力ディレクトリが見当たらない場合は cwd 直下を返す (素の HTML 配置)
29
- return cwd;
30
- }
31
- /**
32
- * site/page から **ローカルファイルパスを推測** する。
33
- * 1. 明示的に --file が指定されていればそれを優先
34
- * 2. 42ws.json の output、なければ ['dist','build','_site','out','public'] を順に
35
- * 3. それも無ければ cwd 直下
36
- * 見つかったパス (存在するファイル) を返す。なければ undefined。
37
- *
38
- * forms / collections create --inject --site --page で「リモート書き換え」より先に
39
- * ローカルを書き換えられるかを判定するために使う。ローカル → publish 一方向に揃えて、
40
- * remote/local 乖離からのトラブルを防ぐ目的。
41
- */
42
- export function findLocalPageFile(page, options = {}) {
43
- const cwd = options.cwd ?? process.cwd();
44
- if (options.explicitFile) {
45
- const p = resolve(cwd, options.explicitFile);
46
- return existsSync(p) ? p : undefined;
47
- }
48
- const outDir = resolveOutputDir(cwd);
49
- if (!outDir)
50
- return undefined;
51
- const candidate = join(outDir, page);
52
- if (existsSync(candidate))
53
- return candidate;
54
- // output 配下になければ cwd 直下も見る (output 未ビルドの素ソース運用)
55
- if (outDir !== cwd) {
56
- const fallback = join(cwd, page);
57
- if (existsSync(fallback))
58
- return fallback;
59
- }
60
- return undefined;
61
- }
62
- //# sourceMappingURL=project.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/lib/project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAU1C,MAAM,UAAU,iBAAiB,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IAC3D,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,uCAAuC;AACvC,sDAAsD;AACtD,MAAM,qBAAqB,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;AAE1E,MAAM,UAAU,gBAAgB,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IAC1D,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACf,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QACnC,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACvC,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,qBAAqB,EAAE,CAAC;QACtC,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC1B,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;YAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;IACD,4CAA4C;IAC5C,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAY,EACZ,UAAmD,EAAE;IAErD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACzC,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;QAC7C,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACvC,CAAC;IACD,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACrC,IAAI,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5C,gDAAgD;IAChD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACjC,IAAI,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO,QAAQ,CAAC;IAC5C,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -1,12 +0,0 @@
1
- export interface Suggestion {
2
- /** i18n key — `suggest.<key>.label` / `.hint` を引く */
3
- key: string;
4
- cmd?: string;
5
- url?: string;
6
- }
7
- /**
8
- * サーバから返ってきた `_suggest` を整形して stderr に出す(JSON モード時はスキップ)。
9
- * label / hint は CLI 側 i18n テーブルで翻訳する。未登録のキーは表示をスキップ。
10
- */
11
- export declare function printSuggestions(suggestions: unknown): void;
12
- //# sourceMappingURL=suggest.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"suggest.d.ts","sourceRoot":"","sources":["../../src/lib/suggest.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,UAAU;IACzB,qDAAqD;IACrD,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,OAAO,GAAG,IAAI,CAqB3D"}
@@ -1,36 +0,0 @@
1
- import { isJsonMode } from './output.js';
2
- import { t } from './i18n.js';
3
- /**
4
- * サーバから返ってきた `_suggest` を整形して stderr に出す(JSON モード時はスキップ)。
5
- * label / hint は CLI 側 i18n テーブルで翻訳する。未登録のキーは表示をスキップ。
6
- */
7
- export function printSuggestions(suggestions) {
8
- if (isJsonMode())
9
- return;
10
- if (!Array.isArray(suggestions) || suggestions.length === 0)
11
- return;
12
- const list = suggestions;
13
- let printedHeader = false;
14
- for (const s of list) {
15
- if (!s || typeof s.key !== 'string')
16
- continue;
17
- const labelKey = `suggest.${s.key}.label`;
18
- const label = t(labelKey);
19
- if (label === labelKey)
20
- continue; // 翻訳が無いキーはスキップ(壊さない)
21
- if (!printedHeader) {
22
- process.stderr.write(t('suggest.header') + '\n');
23
- printedHeader = true;
24
- }
25
- process.stderr.write(` • ${label}\n`);
26
- const hintKey = `suggest.${s.key}.hint`;
27
- const hint = t(hintKey);
28
- if (hint !== hintKey)
29
- process.stderr.write(` ${hint}\n`);
30
- if (s.cmd)
31
- process.stderr.write(` $ ${s.cmd}\n`);
32
- if (s.url)
33
- process.stderr.write(` → ${s.url}\n`);
34
- }
35
- }
36
- //# sourceMappingURL=suggest.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"suggest.js","sourceRoot":"","sources":["../../src/lib/suggest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,WAAW,CAAC;AAS9B;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,WAAoB;IACnD,IAAI,UAAU,EAAE;QAAE,OAAO;IACzB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACpE,MAAM,IAAI,GAAG,WAA2B,CAAC;IACzC,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ;YAAE,SAAS;QAC9C,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,GAAG,QAAQ,CAAC;QAC1C,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC1B,IAAI,KAAK,KAAK,QAAQ;YAAE,SAAS,CAAC,qBAAqB;QACvD,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,CAAC;YACjD,aAAa,GAAG,IAAI,CAAC;QACvB,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC;QACvC,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,GAAG,OAAO,CAAC;QACxC,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;QACxB,IAAI,IAAI,KAAK,OAAO;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC;QAC5D,IAAI,CAAC,CAAC,GAAG;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,CAAC,GAAG;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACtD,CAAC;AACH,CAAC"}
@@ -1,22 +0,0 @@
1
- export declare function compareVersions(a: string, b: string): 'patch' | 'minor' | 'major' | null;
2
- export declare function currentPlatform(): string | null;
3
- /** 最新バイナリを temp に DL → 検証 → atomic 置換。成功で true。 */
4
- export declare function downloadAndReplace(targetPath: string): Promise<boolean>;
5
- /**
6
- * 前景コマンドから呼ぶ。throttle を見て、必要なら detached でバックグラウンド検査を起動して即戻る。
7
- * ネットワークも更新も前景をブロックしない。
8
- */
9
- export declare function scheduleUpdateCheck(): void;
10
- /** 隠しサブコマンド `_self-update-check` の本体(detached プロセスで実行)。 */
11
- export declare function runUpdateCheck(): Promise<void>;
12
- /**
13
- * minor/major の更新通知を stderr に1行出す(前回チェックで書かれた ~/.42ws/update.json を読む)。
14
- * 前景コマンドの末尾で best-effort 呼び出し。JSON モードや通知無しでは何もしない。
15
- */
16
- export declare function printUpdateNotice(): void;
17
- /** `42ws upgrade` の本体。明示更新(kind 問わず最新へ)。 */
18
- export declare function runUpgrade(): Promise<{
19
- ok: boolean;
20
- message: string;
21
- }>;
22
- //# sourceMappingURL=update-check.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"update-check.d.ts","sourceRoot":"","sources":["../../src/lib/update-check.ts"],"names":[],"mappings":"AAyBA,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,IAAI,CAMxF;AAED,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAI/C;AA4BD,mDAAmD;AACnD,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAkB7E;AAUD;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAe1C;AAED,2DAA2D;AAC3D,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAgBpD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAQxC;AAED,4CAA4C;AAC5C,wBAAsB,UAAU,IAAI,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAgB5E"}