@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,65 +0,0 @@
1
- import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'node:fs';
2
- import { homedir } from 'node:os';
3
- import { join, dirname } from 'node:path';
4
- const CONFIG_DIR = join(homedir(), '.42ws');
5
- const CONFIG_FILE = join(CONFIG_DIR, 'config.json');
6
- // 既定は本番。dev/内部で使う場合は FORTYTWO_WS_API_URL=https://api.dev.42ws.com で上書き。
7
- const DEFAULT_API_URL = 'https://api.42ws.com';
8
- export function loadConfig() {
9
- const apiUrl = process.env['FORTYTWO_WS_API_URL'] ?? DEFAULT_API_URL;
10
- const token = process.env['FORTYTWO_WS_TOKEN'];
11
- let fileConfig = {};
12
- if (existsSync(CONFIG_FILE)) {
13
- try {
14
- const raw = readFileSync(CONFIG_FILE, 'utf-8');
15
- fileConfig = JSON.parse(raw);
16
- }
17
- catch {
18
- // config file is malformed, ignore
19
- }
20
- }
21
- return {
22
- token: token ?? fileConfig.token,
23
- apiUrl: process.env['FORTYTWO_WS_API_URL'] ?? fileConfig.apiUrl ?? DEFAULT_API_URL,
24
- };
25
- }
26
- /**
27
- * apiUrl から Web ベース URL とユーザーサイトのドメインを導出する。
28
- * `https://api.42ws.com` → { webBase: 'https://42ws.com', sitesHost: '42ws.com' }
29
- * `https://api.dev.42ws.com` → { webBase: 'https://dev.42ws.com', sitesHost: 'dev.42ws.com' }
30
- */
31
- export function deriveDomains(apiUrl) {
32
- try {
33
- const u = new URL(apiUrl);
34
- const host = u.host.replace(/^api\./, '');
35
- return { webBase: `${u.protocol}//${host}`, sitesHost: host };
36
- }
37
- catch {
38
- return { webBase: 'https://42ws.com', sitesHost: '42ws.com' };
39
- }
40
- }
41
- /**
42
- * Save config. Pass `removeToken: true` to explicitly remove the token field.
43
- * Otherwise the existing token is preserved unless `token` is supplied.
44
- */
45
- export function saveConfig(config) {
46
- const existing = loadConfig();
47
- const merged = {
48
- token: config.removeToken ? undefined : (config.token ?? existing.token),
49
- // removeApiUrl: 既定 (prod) に戻す。logout 後の次回 login が prod を向くように。
50
- apiUrl: config.removeApiUrl ? DEFAULT_API_URL : (config.apiUrl ?? existing.apiUrl),
51
- };
52
- if (!existsSync(dirname(CONFIG_FILE))) {
53
- mkdirSync(dirname(CONFIG_FILE), { recursive: true });
54
- }
55
- writeFileSync(CONFIG_FILE, JSON.stringify(merged, null, 2) + '\n', { mode: 0o600 });
56
- }
57
- /** ~/.42ws 配下のファイルパスを返す(update.json 等の補助状態の置き場)。 */
58
- export function configPath(name) {
59
- return join(CONFIG_DIR, name);
60
- }
61
- /** ~/.42ws 配下のバイナリ設置ディレクトリ(install.sh の配置先と一致)。 */
62
- export function binDir() {
63
- return join(CONFIG_DIR, 'bin');
64
- }
65
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- export interface DetectionResult {
2
- framework: 'vite' | 'astro' | 'next-static' | 'sveltekit-static' | 'plain-html' | 'unknown';
3
- build?: string;
4
- output?: string;
5
- spa?: boolean;
6
- confidence: 'high' | 'medium' | 'low';
7
- }
8
- export declare function detectFramework(cwd: string): DetectionResult;
9
- //# sourceMappingURL=detect.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../src/lib/detect.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,aAAa,GAAG,kBAAkB,GAAG,YAAY,GAAG,SAAS,CAAC;IAC5F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;CACvC;AA8CD,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CA6E5D"}
@@ -1,112 +0,0 @@
1
- import { existsSync, readFileSync } from 'node:fs';
2
- import { join } from 'node:path';
3
- function readPackageJson(cwd) {
4
- const pkgPath = join(cwd, 'package.json');
5
- if (!existsSync(pkgPath))
6
- return null;
7
- try {
8
- return JSON.parse(readFileSync(pkgPath, 'utf-8'));
9
- }
10
- catch {
11
- return null;
12
- }
13
- }
14
- function hasDep(pkg, name) {
15
- return !!(pkg.dependencies?.[name] ?? pkg.devDependencies?.[name]);
16
- }
17
- function hasNextStaticExport(cwd, pkg) {
18
- // Check next.config.{js,mjs,ts} for output: 'export'
19
- const configFiles = ['next.config.js', 'next.config.mjs', 'next.config.ts'];
20
- for (const file of configFiles) {
21
- const configPath = join(cwd, file);
22
- if (existsSync(configPath)) {
23
- try {
24
- const content = readFileSync(configPath, 'utf-8');
25
- if (content.includes("output: 'export'") || content.includes('output: "export"')) {
26
- return true;
27
- }
28
- }
29
- catch {
30
- // ignore
31
- }
32
- }
33
- }
34
- // Check scripts.build for next export
35
- const buildScript = pkg.scripts?.['build'] ?? '';
36
- if (buildScript.includes('next export')) {
37
- return true;
38
- }
39
- return false;
40
- }
41
- export function detectFramework(cwd) {
42
- const pkg = readPackageJson(cwd);
43
- if (pkg) {
44
- // Vite
45
- if (hasDep(pkg, 'vite')) {
46
- return {
47
- framework: 'vite',
48
- build: 'npm run build',
49
- output: 'dist',
50
- spa: true,
51
- confidence: 'high',
52
- };
53
- }
54
- // Astro
55
- if (hasDep(pkg, 'astro')) {
56
- return {
57
- framework: 'astro',
58
- build: 'npm run build',
59
- output: 'dist',
60
- spa: false,
61
- confidence: 'high',
62
- };
63
- }
64
- // Next static export
65
- if (hasDep(pkg, 'next') && hasNextStaticExport(cwd, pkg)) {
66
- return {
67
- framework: 'next-static',
68
- build: 'npm run build',
69
- output: 'out',
70
- spa: false,
71
- confidence: 'high',
72
- };
73
- }
74
- // SvelteKit static
75
- if (hasDep(pkg, '@sveltejs/adapter-static')) {
76
- return {
77
- framework: 'sveltekit-static',
78
- build: 'npm run build',
79
- output: 'build',
80
- spa: true,
81
- confidence: 'medium',
82
- };
83
- }
84
- }
85
- // Plain HTML in current directory
86
- if (existsSync(join(cwd, 'index.html'))) {
87
- return {
88
- framework: 'plain-html',
89
- build: undefined,
90
- output: '.',
91
- spa: false,
92
- confidence: 'high',
93
- };
94
- }
95
- // Pre-built output directory
96
- for (const dir of ['dist', 'build', 'out']) {
97
- if (existsSync(join(cwd, dir, 'index.html'))) {
98
- return {
99
- framework: 'unknown',
100
- build: undefined,
101
- output: dir,
102
- spa: false,
103
- confidence: 'medium',
104
- };
105
- }
106
- }
107
- return {
108
- framework: 'unknown',
109
- confidence: 'low',
110
- };
111
- }
112
- //# sourceMappingURL=detect.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/lib/detect.ts"],"names":[],"mappings":"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"}
@@ -1,16 +0,0 @@
1
- export interface FileEntry {
2
- path: string;
3
- absolutePath: string;
4
- contentType: string;
5
- size: number;
6
- sha256: string;
7
- content: Buffer;
8
- }
9
- export interface CollectResult {
10
- files: FileEntry[];
11
- excluded: string[];
12
- }
13
- export declare function collectFiles(dir: string): FileEntry[];
14
- export declare function collectFilesDetailed(dir: string): CollectResult;
15
- export declare function formatBytes(bytes: number): string;
16
- //# sourceMappingURL=files.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/lib/files.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAkHD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,CAErD;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAkG/D;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIjD"}
package/dist/lib/files.js DELETED
@@ -1,200 +0,0 @@
1
- import { readdirSync, lstatSync, readFileSync, existsSync } from 'node:fs';
2
- import { join, relative, extname } from 'node:path';
3
- import { createHash } from 'node:crypto';
4
- import { ApiError } from './api.js';
5
- const BLOCKED_PATTERNS = [
6
- /^\.env$/,
7
- /^\.env\..+$/,
8
- /^\.git$/,
9
- /^\.git\//,
10
- /^node_modules$/,
11
- /^node_modules\//,
12
- /\.pem$/,
13
- /\.key$/,
14
- /^id_rsa$/,
15
- /^id_ed25519$/,
16
- ];
17
- const SILENT_EXCLUDE_PATTERNS = [
18
- /^\.DS_Store$/,
19
- /^npm-debug\.log$/,
20
- /^yarn-error\.log$/,
21
- /^pnpm-debug\.log$/,
22
- ];
23
- // ルート直下に置きがちな AI/プロジェクト向けメタファイル。
24
- // publish 対象 (dist 等) からは普通出ないが、output 未指定で cwd 直下を
25
- // publish したケースで「design.md / CLAUDE.md / 42ws.json が公開 URL で
26
- // 丸見え」事故になるため既定で除外する。
27
- // 拡張子ではなく**ファイル名一致 + ルート直下のみ**で判定する
28
- // (記事として .md を配置するケースは尊重する)。
29
- const PROJECT_META_FILES_ROOT_ONLY = new Set([
30
- '42ws.json',
31
- 'CLAUDE.md',
32
- 'AGENTS.md',
33
- 'README.md',
34
- 'BRIEF.md',
35
- 'TODO.md',
36
- 'design.md',
37
- 'package.json',
38
- 'package-lock.json',
39
- 'pnpm-lock.yaml',
40
- 'yarn.lock',
41
- 'tsconfig.json',
42
- 'vite.config.js',
43
- 'vite.config.ts',
44
- '.gitignore',
45
- '.npmignore',
46
- '.editorconfig',
47
- '.prettierrc',
48
- '.prettierrc.json',
49
- '.eslintrc',
50
- '.eslintrc.json',
51
- '.eslintrc.js',
52
- '.eslintrc.cjs',
53
- '.42wsignore',
54
- ]);
55
- // .42wsignore があれば追加除外パターンとして読む (1 行 1 パターン、glob 風)。
56
- // 簡易実装: ファイル名完全一致 or 末尾 `/` でディレクトリ prefix。
57
- function loadIgnoreFile(dir) {
58
- const files = new Set();
59
- const dirs = [];
60
- const path = join(dir, '.42wsignore');
61
- if (!existsSync(path))
62
- return { files, dirs };
63
- try {
64
- const text = readFileSync(path, 'utf-8');
65
- for (const raw of text.split('\n')) {
66
- const line = raw.trim();
67
- if (!line || line.startsWith('#'))
68
- continue;
69
- if (line.endsWith('/'))
70
- dirs.push(line.slice(0, -1));
71
- else
72
- files.add(line);
73
- }
74
- }
75
- catch {
76
- // ignore parse errors
77
- }
78
- return { files, dirs };
79
- }
80
- const CONTENT_TYPE_MAP = {
81
- '.html': 'text/html; charset=utf-8',
82
- '.css': 'text/css; charset=utf-8',
83
- '.js': 'application/javascript',
84
- '.mjs': 'application/javascript',
85
- '.json': 'application/json',
86
- '.png': 'image/png',
87
- '.jpg': 'image/jpeg',
88
- '.jpeg': 'image/jpeg',
89
- '.webp': 'image/webp',
90
- '.svg': 'image/svg+xml',
91
- '.ico': 'image/x-icon',
92
- '.woff': 'font/woff',
93
- '.woff2': 'font/woff2',
94
- '.txt': 'text/plain; charset=utf-8',
95
- '.xml': 'application/xml',
96
- '.pdf': 'application/pdf',
97
- '.mp4': 'video/mp4',
98
- '.mp3': 'audio/mpeg',
99
- };
100
- const MAX_FILE_SIZE = 50 * 1024 * 1024; // 50 MB
101
- const MAX_FILES = 5000;
102
- function getContentType(filePath) {
103
- const ext = extname(filePath).toLowerCase();
104
- return CONTENT_TYPE_MAP[ext] ?? 'application/octet-stream';
105
- }
106
- function isBlocked(relPath) {
107
- const normalized = relPath.replace(/\\/g, '/');
108
- return BLOCKED_PATTERNS.some(p => p.test(normalized));
109
- }
110
- function isSilentExcluded(name) {
111
- return SILENT_EXCLUDE_PATTERNS.some(p => p.test(name));
112
- }
113
- export function collectFiles(dir) {
114
- return collectFilesDetailed(dir).files;
115
- }
116
- export function collectFilesDetailed(dir) {
117
- const entries = [];
118
- const excluded = [];
119
- const ignore = loadIgnoreFile(dir);
120
- function walk(current) {
121
- let items;
122
- try {
123
- items = readdirSync(current);
124
- }
125
- catch {
126
- return;
127
- }
128
- for (const name of items) {
129
- const absolutePath = join(current, name);
130
- const relPath = relative(dir, absolutePath).replace(/\\/g, '/');
131
- if (isSilentExcluded(name))
132
- continue;
133
- // ルート直下のメタファイル既定除外
134
- const isRootLevel = !relPath.includes('/');
135
- if (isRootLevel && PROJECT_META_FILES_ROOT_ONLY.has(name)) {
136
- excluded.push(relPath);
137
- continue;
138
- }
139
- // .claude/, .github/, .vscode/ などのドット始まりディレクトリは既定除外
140
- if (isRootLevel && name.startsWith('.') && lstatSync(absolutePath).isDirectory()) {
141
- excluded.push(relPath + '/');
142
- continue;
143
- }
144
- // .42wsignore による除外
145
- if (ignore.files.has(relPath) || ignore.files.has(name)) {
146
- excluded.push(relPath);
147
- continue;
148
- }
149
- if (ignore.dirs.some((d) => relPath === d || relPath.startsWith(d + '/'))) {
150
- excluded.push(relPath);
151
- continue;
152
- }
153
- if (isBlocked(relPath)) {
154
- throw new ApiError('BLOCKED_FILE', `Refusing to publish sensitive file: ${relPath}`, 'Remove sensitive files from your output directory before publishing.');
155
- }
156
- // lstat to detect symlinks without following them
157
- let lstats;
158
- try {
159
- lstats = lstatSync(absolutePath);
160
- }
161
- catch {
162
- continue;
163
- }
164
- if (lstats.isSymbolicLink())
165
- continue;
166
- if (lstats.isDirectory()) {
167
- walk(absolutePath);
168
- continue;
169
- }
170
- if (!lstats.isFile())
171
- continue;
172
- if (lstats.size > MAX_FILE_SIZE) {
173
- throw new ApiError('FILE_TOO_LARGE', `File too large (${(lstats.size / 1024 / 1024).toFixed(1)} MB): ${relPath}`, 'Individual files must be under 50 MB.');
174
- }
175
- const content = readFileSync(absolutePath);
176
- const sha256 = createHash('sha256').update(content).digest('hex');
177
- entries.push({
178
- path: relPath,
179
- absolutePath,
180
- contentType: getContentType(absolutePath),
181
- size: lstats.size,
182
- sha256,
183
- content,
184
- });
185
- }
186
- }
187
- walk(dir);
188
- if (entries.length > MAX_FILES) {
189
- throw new ApiError('TOO_MANY_FILES', `Too many files: ${entries.length} (max ${MAX_FILES})`, 'Reduce the number of files to publish (max 5000).');
190
- }
191
- return { files: entries, excluded };
192
- }
193
- export function formatBytes(bytes) {
194
- if (bytes < 1024)
195
- return `${bytes} B`;
196
- if (bytes < 1024 * 1024)
197
- return `${(bytes / 1024).toFixed(1)} KB`;
198
- return `${(bytes / 1024 / 1024).toFixed(1)} MB`;
199
- }
200
- //# sourceMappingURL=files.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/lib/files.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- /**
2
- * html 内の最初の <tag>...</tag> 要素を replacement で置換する。
3
- * - HTML コメント内の <tag> は無視する(誤爆防止)
4
- * - 同名タグのネストは深さを数えて対応する閉じタグを見つける
5
- * 見つからなければ null を返す。
6
- */
7
- export declare function replaceFirstElement(html: string, tag: string, replacement: string): string | null;
8
- //# sourceMappingURL=html.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/lib/html.ts"],"names":[],"mappings":"AAgBA;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAyCjG"}
package/dist/lib/html.js DELETED
@@ -1,63 +0,0 @@
1
- // コメント等を考慮した最小の HTML 要素置換ユーティリティ。
2
- // 完全な HTML パーサではないが、正規表現の素朴な置換で起きる
3
- // 「コメント内の <tag> を誤爆して以降を巻き込む」事故を防ぐ。
4
- function commentRanges(html) {
5
- const ranges = [];
6
- const re = /<!--[\s\S]*?-->/g;
7
- let m;
8
- while ((m = re.exec(html)))
9
- ranges.push([m.index, m.index + m[0].length]);
10
- return ranges;
11
- }
12
- function inRanges(idx, ranges) {
13
- return ranges.some(([s, e]) => idx >= s && idx < e);
14
- }
15
- /**
16
- * html 内の最初の <tag>...</tag> 要素を replacement で置換する。
17
- * - HTML コメント内の <tag> は無視する(誤爆防止)
18
- * - 同名タグのネストは深さを数えて対応する閉じタグを見つける
19
- * 見つからなければ null を返す。
20
- */
21
- export function replaceFirstElement(html, tag, replacement) {
22
- const comments = commentRanges(html);
23
- // コメント外の最初の開始タグ
24
- const openRe = new RegExp(`<${tag}\\b[^>]*>`, 'gi');
25
- let openStart = -1;
26
- let openEnd = -1;
27
- let m;
28
- while ((m = openRe.exec(html))) {
29
- if (!inRanges(m.index, comments)) {
30
- openStart = m.index;
31
- openEnd = m.index + m[0].length;
32
- break;
33
- }
34
- }
35
- if (openStart === -1)
36
- return null;
37
- // 自己終了タグ <tag ... /> は稀だが一応対応
38
- if (/\/>\s*$/.test(html.slice(openStart, openEnd))) {
39
- return html.slice(0, openStart) + replacement + html.slice(openEnd);
40
- }
41
- // 深さを数えて対応する </tag> を探す(コメント内は無視)
42
- const tokenRe = new RegExp(`<${tag}\\b[^>]*>|</${tag}\\s*>`, 'gi');
43
- tokenRe.lastIndex = openEnd;
44
- let depth = 1;
45
- let tok;
46
- while ((tok = tokenRe.exec(html))) {
47
- if (inRanges(tok.index, comments))
48
- continue;
49
- const isClose = tok[0].slice(0, 2) === '</';
50
- if (isClose) {
51
- depth--;
52
- if (depth === 0) {
53
- const closeEnd = tok.index + tok[0].length;
54
- return html.slice(0, openStart) + replacement + html.slice(closeEnd);
55
- }
56
- }
57
- else {
58
- depth++;
59
- }
60
- }
61
- return null; // 対応する閉じタグが無い(壊れた HTML)→ 置換しない
62
- }
63
- //# sourceMappingURL=html.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/lib/html.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAClC,mCAAmC;AACnC,oCAAoC;AAEpC,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,MAAM,EAAE,GAAG,kBAAkB,CAAC;IAC9B,IAAI,CAAyB,CAAC;IAC9B,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1E,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW,EAAE,MAA+B;IAC5D,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;AACtD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY,EAAE,GAAW,EAAE,WAAmB;IAChF,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAErC,gBAAgB;IAChB,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,GAAG,WAAW,EAAE,IAAI,CAAC,CAAC;IACpD,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC;IACnB,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC;IACjB,IAAI,CAAyB,CAAC;IAC9B,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC;YACjC,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC;YACpB,OAAO,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YAChC,MAAM;QACR,CAAC;IACH,CAAC;IACD,IAAI,SAAS,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAElC,8BAA8B;IAC9B,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;QACnD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtE,CAAC;IAED,kCAAkC;IAClC,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,IAAI,GAAG,eAAe,GAAG,OAAO,EAAE,IAAI,CAAC,CAAC;IACnE,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC;IAC5B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,GAA2B,CAAC;IAChC,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAClC,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC;YAAE,SAAS;QAC5C,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC;QAC5C,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,EAAE,CAAC;YACR,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;gBAChB,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBAC3C,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;aAAM,CAAC;YACN,KAAK,EAAE,CAAC;QACV,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC,CAAC,+BAA+B;AAC9C,CAAC"}
@@ -1,6 +0,0 @@
1
- type Locale = 'en' | 'ja';
2
- export declare function setLocale(loc: string | undefined): void;
3
- export declare function getLocale(): Locale;
4
- export declare function t(key: string, params?: Record<string, string | number>): string;
5
- export {};
6
- //# sourceMappingURL=i18n.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/lib/i18n.ts"],"names":[],"mappings":"AAEA,KAAK,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;AAgB1B,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAQvD;AAED,wBAAgB,SAAS,IAAI,MAAM,CAElC;AA0OD,wBAAgB,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM,CAO/E"}