@pushto/cli 0.2.1 → 0.4.9

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 (189) hide show
  1. package/dist/cli.js +0 -0
  2. package/dist/commands/__tests__/deploy-domain.test.d.ts +2 -0
  3. package/dist/commands/__tests__/deploy-domain.test.d.ts.map +1 -0
  4. package/dist/commands/__tests__/deploy-domain.test.js +41 -0
  5. package/dist/commands/__tests__/deploy-domain.test.js.map +1 -0
  6. package/dist/commands/__tests__/headless-smoke.test.d.ts +2 -0
  7. package/dist/commands/__tests__/headless-smoke.test.d.ts.map +1 -0
  8. package/dist/commands/__tests__/headless-smoke.test.js +110 -0
  9. package/dist/commands/__tests__/headless-smoke.test.js.map +1 -0
  10. package/dist/commands/auth.d.ts +2 -0
  11. package/dist/commands/auth.d.ts.map +1 -0
  12. package/dist/commands/auth.js +77 -0
  13. package/dist/commands/auth.js.map +1 -0
  14. package/dist/commands/cron.d.ts +2 -0
  15. package/dist/commands/cron.d.ts.map +1 -0
  16. package/dist/commands/cron.js +157 -0
  17. package/dist/commands/cron.js.map +1 -0
  18. package/dist/commands/db.d.ts +4 -0
  19. package/dist/commands/db.d.ts.map +1 -0
  20. package/dist/commands/db.js +63 -0
  21. package/dist/commands/db.js.map +1 -0
  22. package/dist/commands/deploy.d.ts +16 -1
  23. package/dist/commands/deploy.d.ts.map +1 -1
  24. package/dist/commands/deploy.js +230 -150
  25. package/dist/commands/deploy.js.map +1 -1
  26. package/dist/commands/doctor.d.ts.map +1 -1
  27. package/dist/commands/doctor.js +289 -54
  28. package/dist/commands/doctor.js.map +1 -1
  29. package/dist/commands/domain.d.ts.map +1 -1
  30. package/dist/commands/domain.js +52 -7
  31. package/dist/commands/domain.js.map +1 -1
  32. package/dist/commands/echo.d.ts +2 -0
  33. package/dist/commands/echo.d.ts.map +1 -0
  34. package/dist/commands/echo.js +227 -0
  35. package/dist/commands/echo.js.map +1 -0
  36. package/dist/commands/env.d.ts +3 -1
  37. package/dist/commands/env.d.ts.map +1 -1
  38. package/dist/commands/env.js +76 -50
  39. package/dist/commands/env.js.map +1 -1
  40. package/dist/commands/init.d.ts +3 -1
  41. package/dist/commands/init.d.ts.map +1 -1
  42. package/dist/commands/init.js +58 -11
  43. package/dist/commands/init.js.map +1 -1
  44. package/dist/commands/login.d.ts.map +1 -1
  45. package/dist/commands/login.js +50 -23
  46. package/dist/commands/login.js.map +1 -1
  47. package/dist/commands/logs.d.ts +3 -1
  48. package/dist/commands/logs.d.ts.map +1 -1
  49. package/dist/commands/logs.js +77 -21
  50. package/dist/commands/logs.js.map +1 -1
  51. package/dist/commands/mail.d.ts +2 -0
  52. package/dist/commands/mail.d.ts.map +1 -0
  53. package/dist/commands/mail.js +105 -0
  54. package/dist/commands/mail.js.map +1 -0
  55. package/dist/commands/open.d.ts.map +1 -1
  56. package/dist/commands/open.js +21 -1
  57. package/dist/commands/open.js.map +1 -1
  58. package/dist/commands/preview.d.ts +22 -0
  59. package/dist/commands/preview.d.ts.map +1 -0
  60. package/dist/commands/preview.js +223 -0
  61. package/dist/commands/preview.js.map +1 -0
  62. package/dist/commands/status.d.ts +3 -1
  63. package/dist/commands/status.d.ts.map +1 -1
  64. package/dist/commands/status.js +62 -12
  65. package/dist/commands/status.js.map +1 -1
  66. package/dist/commands/upgrade.d.ts.map +1 -1
  67. package/dist/commands/upgrade.js +73 -10
  68. package/dist/commands/upgrade.js.map +1 -1
  69. package/dist/commands/use.d.ts +2 -0
  70. package/dist/commands/use.d.ts.map +1 -0
  71. package/dist/commands/use.js +108 -0
  72. package/dist/commands/use.js.map +1 -0
  73. package/dist/commands/vault.d.ts +2 -0
  74. package/dist/commands/vault.d.ts.map +1 -0
  75. package/dist/commands/vault.js +119 -0
  76. package/dist/commands/vault.js.map +1 -0
  77. package/dist/commands/whoami.d.ts.map +1 -1
  78. package/dist/commands/whoami.js +12 -1
  79. package/dist/commands/whoami.js.map +1 -1
  80. package/dist/index.js +117 -14
  81. package/dist/index.js.map +1 -1
  82. package/dist/lib/__tests__/build-runner.test.d.ts +2 -0
  83. package/dist/lib/__tests__/build-runner.test.d.ts.map +1 -0
  84. package/dist/lib/__tests__/build-runner.test.js +119 -0
  85. package/dist/lib/__tests__/build-runner.test.js.map +1 -0
  86. package/dist/lib/__tests__/cron-tail.test.d.ts +2 -0
  87. package/dist/lib/__tests__/cron-tail.test.d.ts.map +1 -0
  88. package/dist/lib/__tests__/cron-tail.test.js +27 -0
  89. package/dist/lib/__tests__/cron-tail.test.js.map +1 -0
  90. package/dist/lib/__tests__/detect-static-framework.test.d.ts +2 -0
  91. package/dist/lib/__tests__/detect-static-framework.test.d.ts.map +1 -0
  92. package/dist/lib/__tests__/detect-static-framework.test.js +146 -0
  93. package/dist/lib/__tests__/detect-static-framework.test.js.map +1 -0
  94. package/dist/lib/__tests__/errors.test.d.ts +2 -0
  95. package/dist/lib/__tests__/errors.test.d.ts.map +1 -0
  96. package/dist/lib/__tests__/errors.test.js +56 -0
  97. package/dist/lib/__tests__/errors.test.js.map +1 -0
  98. package/dist/lib/__tests__/interactive.test.d.ts +2 -0
  99. package/dist/lib/__tests__/interactive.test.d.ts.map +1 -0
  100. package/dist/lib/__tests__/interactive.test.js +79 -0
  101. package/dist/lib/__tests__/interactive.test.js.map +1 -0
  102. package/dist/lib/__tests__/npm-packaging.test.d.ts +2 -0
  103. package/dist/lib/__tests__/npm-packaging.test.d.ts.map +1 -0
  104. package/dist/lib/__tests__/npm-packaging.test.js +81 -0
  105. package/dist/lib/__tests__/npm-packaging.test.js.map +1 -0
  106. package/dist/lib/__tests__/output.test.d.ts +2 -0
  107. package/dist/lib/__tests__/output.test.d.ts.map +1 -0
  108. package/dist/lib/__tests__/output.test.js +144 -0
  109. package/dist/lib/__tests__/output.test.js.map +1 -0
  110. package/dist/lib/__tests__/prepare-artifact.test.d.ts +2 -0
  111. package/dist/lib/__tests__/prepare-artifact.test.d.ts.map +1 -0
  112. package/dist/lib/__tests__/prepare-artifact.test.js +55 -0
  113. package/dist/lib/__tests__/prepare-artifact.test.js.map +1 -0
  114. package/dist/lib/__tests__/preview-args.test.d.ts +2 -0
  115. package/dist/lib/__tests__/preview-args.test.d.ts.map +1 -0
  116. package/dist/lib/__tests__/preview-args.test.js +37 -0
  117. package/dist/lib/__tests__/preview-args.test.js.map +1 -0
  118. package/dist/lib/api.d.ts.map +1 -1
  119. package/dist/lib/api.js +22 -4
  120. package/dist/lib/api.js.map +1 -1
  121. package/dist/lib/ask.d.ts +15 -0
  122. package/dist/lib/ask.d.ts.map +1 -0
  123. package/dist/lib/ask.js +24 -0
  124. package/dist/lib/ask.js.map +1 -0
  125. package/dist/lib/build-runner.d.ts +25 -0
  126. package/dist/lib/build-runner.d.ts.map +1 -0
  127. package/dist/lib/build-runner.js +141 -0
  128. package/dist/lib/build-runner.js.map +1 -0
  129. package/dist/lib/config.d.ts +6 -0
  130. package/dist/lib/config.d.ts.map +1 -1
  131. package/dist/lib/config.js +7 -1
  132. package/dist/lib/config.js.map +1 -1
  133. package/dist/lib/cron-tail.d.ts +10 -0
  134. package/dist/lib/cron-tail.d.ts.map +1 -0
  135. package/dist/lib/cron-tail.js +5 -0
  136. package/dist/lib/cron-tail.js.map +1 -0
  137. package/dist/lib/detect-static-framework.d.ts +31 -0
  138. package/dist/lib/detect-static-framework.d.ts.map +1 -0
  139. package/dist/lib/detect-static-framework.js +96 -0
  140. package/dist/lib/detect-static-framework.js.map +1 -0
  141. package/dist/lib/env-parse.d.ts +48 -0
  142. package/dist/lib/env-parse.d.ts.map +1 -0
  143. package/dist/lib/env-parse.js +91 -0
  144. package/dist/lib/env-parse.js.map +1 -0
  145. package/dist/lib/errors.d.ts +111 -0
  146. package/dist/lib/errors.d.ts.map +1 -0
  147. package/dist/lib/errors.js +64 -0
  148. package/dist/lib/errors.js.map +1 -0
  149. package/dist/lib/file-walker.d.ts +23 -0
  150. package/dist/lib/file-walker.d.ts.map +1 -0
  151. package/dist/lib/file-walker.js +114 -0
  152. package/dist/lib/file-walker.js.map +1 -0
  153. package/dist/lib/interactive.d.ts +13 -0
  154. package/dist/lib/interactive.d.ts.map +1 -0
  155. package/dist/lib/interactive.js +24 -0
  156. package/dist/lib/interactive.js.map +1 -0
  157. package/dist/lib/output.d.ts +24 -0
  158. package/dist/lib/output.d.ts.map +1 -0
  159. package/dist/lib/output.js +71 -0
  160. package/dist/lib/output.js.map +1 -0
  161. package/dist/lib/prepare-artifact.d.ts +22 -0
  162. package/dist/lib/prepare-artifact.d.ts.map +1 -0
  163. package/dist/lib/prepare-artifact.js +26 -0
  164. package/dist/lib/prepare-artifact.js.map +1 -0
  165. package/dist/lib/preview-args.d.ts +20 -0
  166. package/dist/lib/preview-args.d.ts.map +1 -0
  167. package/dist/lib/preview-args.js +19 -0
  168. package/dist/lib/preview-args.js.map +1 -0
  169. package/dist/lib/safe-json.d.ts +7 -2
  170. package/dist/lib/safe-json.d.ts.map +1 -1
  171. package/dist/lib/safe-json.js +23 -4
  172. package/dist/lib/safe-json.js.map +1 -1
  173. package/dist/lib/update-check.d.ts +17 -0
  174. package/dist/lib/update-check.d.ts.map +1 -0
  175. package/dist/lib/update-check.js +81 -0
  176. package/dist/lib/update-check.js.map +1 -0
  177. package/dist/lib/upload-limits.d.ts +17 -0
  178. package/dist/lib/upload-limits.d.ts.map +1 -0
  179. package/dist/lib/upload-limits.js +17 -0
  180. package/dist/lib/upload-limits.js.map +1 -0
  181. package/dist/lib/zip-project.d.ts +19 -0
  182. package/dist/lib/zip-project.d.ts.map +1 -0
  183. package/dist/lib/zip-project.js +39 -0
  184. package/dist/lib/zip-project.js.map +1 -0
  185. package/dist/version.d.ts +2 -0
  186. package/dist/version.d.ts.map +1 -0
  187. package/dist/version.js +16 -0
  188. package/dist/version.js.map +1 -0
  189. package/package.json +5 -8
@@ -1,14 +1,65 @@
1
1
  import chalk from 'chalk';
2
2
  import fs from 'node:fs';
3
3
  import path from 'node:path';
4
+ import { execSync } from 'node:child_process';
4
5
  import { getToken } from '../lib/config.js';
5
6
  import { resolveSlug } from '../lib/resolve-slug.js';
6
7
  import { api } from '../lib/api.js';
7
8
  import { safeJson } from '../lib/safe-json.js';
9
+ import { checkForUpdate, getCurrentVersion } from '../lib/update-check.js';
10
+ import { walkProject } from '../lib/file-walker.js';
11
+ import { SERVER_UPLOAD_CAP_BYTES, fmtMB } from '../lib/upload-limits.js';
12
+ import { detectStaticFramework } from '../lib/detect-static-framework.js';
8
13
  export const doctor = async () => {
9
14
  console.log(chalk.green('> pushto doctor\n'));
10
15
  const checks = [];
11
16
  const cwd = process.cwd();
17
+ // ── 0. CLI health ──
18
+ // Detect the most common CLI-side support tickets up front: stale brew
19
+ // binaries, outdated installs, and version mismatches between what brew
20
+ // thinks is installed and what the binary actually reports. (We hit all
21
+ // three of these ourselves while shipping 0.4.x — the user sees a
22
+ // mysterious "0.0.0-dev" and can't tell if their fix worked.)
23
+ const installedVersion = getCurrentVersion();
24
+ if (installedVersion === '0.0.0-dev') {
25
+ checks.push({
26
+ name: 'cli version',
27
+ status: 'fail',
28
+ message: 'binary reports 0.0.0-dev — version not embedded. reinstall: brew uninstall pushto && brew install mydude-industries/tap/pushto',
29
+ });
30
+ }
31
+ else {
32
+ checks.push({ name: 'cli version', status: 'pass', message: installedVersion });
33
+ }
34
+ // Brew/binary mismatch: if you installed via brew, what brew thinks the
35
+ // version is should match what the binary reports. Mismatch usually means
36
+ // a stale shell hash, multiple pushto installs, or a partial brew upgrade.
37
+ if (process.execPath.includes('/Cellar/') || process.execPath.startsWith('/opt/homebrew/') || process.execPath.includes('linuxbrew')) {
38
+ try {
39
+ const brewVersion = execSync('brew list --versions pushto 2>/dev/null', { encoding: 'utf-8' })
40
+ .trim().split(/\s+/)[1] ?? '';
41
+ if (brewVersion && brewVersion !== installedVersion && installedVersion !== '0.0.0-dev') {
42
+ checks.push({
43
+ name: 'brew sync',
44
+ status: 'warn',
45
+ message: `brew has ${brewVersion} but binary reports ${installedVersion}. try: hash -r && pushto --version`,
46
+ });
47
+ }
48
+ }
49
+ catch { /* brew not on PATH or pushto not installed via brew — skip */ }
50
+ }
51
+ // Update available?
52
+ try {
53
+ const updateInfo = await checkForUpdate(false);
54
+ if (updateInfo?.needsUpdate) {
55
+ checks.push({
56
+ name: 'update',
57
+ status: 'warn',
58
+ message: `${updateInfo.current} → ${updateInfo.latest} available. run: pushto upgrade`,
59
+ });
60
+ }
61
+ }
62
+ catch { /* offline or registry down — skip */ }
12
63
  // ── 1. Auth ──
13
64
  const token = getToken();
14
65
  checks.push(token
@@ -20,8 +71,16 @@ export const doctor = async () => {
20
71
  ? { name: 'project', status: 'pass', message: `linked to ${slug}` }
21
72
  : { name: 'project', status: 'fail', message: 'no .pushto file. run pushto init <name>' });
22
73
  // ── 3. Framework detection (Node + Python + Go + Rust + Ruby) ──
74
+ // The Python branch checks all three install-target files, matching what
75
+ // detect.ts handles in production (pip / pipenv / poetry / PEP 621). Pre-fix
76
+ // doctor only checked requirements.txt — Pipfile-only or pyproject-only
77
+ // projects got "no known project files found" and the user thought their
78
+ // project wasn't supported, even though deploy would work fine.
23
79
  const hasPkg = fs.existsSync(path.join(cwd, 'package.json'));
24
80
  const hasRequirements = fs.existsSync(path.join(cwd, 'requirements.txt'));
81
+ const hasPipfile = fs.existsSync(path.join(cwd, 'Pipfile'));
82
+ const hasPyproject = fs.existsSync(path.join(cwd, 'pyproject.toml'));
83
+ const hasPython = hasRequirements || hasPipfile || hasPyproject;
25
84
  const hasGoMod = fs.existsSync(path.join(cwd, 'go.mod'));
26
85
  const hasCargo = fs.existsSync(path.join(cwd, 'Cargo.toml'));
27
86
  const hasGemfile = fs.existsSync(path.join(cwd, 'Gemfile'));
@@ -33,32 +92,131 @@ export const doctor = async () => {
33
92
  const pkg = JSON.parse(fs.readFileSync(path.join(cwd, 'package.json'), 'utf-8'));
34
93
  const deps = { ...pkg.dependencies, ...pkg.devDependencies };
35
94
  detectedRuntime = 'node';
36
- detectedFramework =
37
- deps['next'] ? 'Next.js' :
38
- deps['vue'] ? 'Vue' :
39
- deps['svelte'] ? 'Svelte' :
40
- deps['express'] ? 'Express' :
41
- deps['fastify'] ? 'Fastify' :
42
- deps['hono'] ? 'Hono' :
43
- 'Node.js';
44
- checks.push({ name: 'framework', status: 'pass', message: `detected ${detectedFramework}` });
45
- if (pkg.scripts?.build) {
46
- checks.push({ name: 'build script', status: 'pass', message: `"${pkg.scripts.build}"` });
95
+ // Static-output frameworks (vite, astro, gatsby, angular, cra, eleventy)
96
+ // build HERE, on this machine, and ship their output dir — they never
97
+ // need `scripts.start`, so the missing-start-script check below would
98
+ // be a false "fail" for a project that deploys just fine. Check this
99
+ // FIRST and skip the container-shaped checks entirely when it hits.
100
+ const staticFw = detectStaticFramework(cwd);
101
+ if (staticFw) {
102
+ detectedFramework = staticFw.framework;
103
+ checks.push({
104
+ name: 'framework',
105
+ status: 'pass',
106
+ message: `detected ${staticFw.framework}. pushto builds it on this machine and ships ${staticFw.outputDirs[0]}/ as a static site.`,
107
+ });
108
+ }
109
+ else {
110
+ detectedFramework =
111
+ deps['next'] ? 'Next.js' :
112
+ deps['vue'] ? 'Vue' :
113
+ deps['svelte'] ? 'Svelte' :
114
+ deps['express'] ? 'Express' :
115
+ deps['fastify'] ? 'Fastify' :
116
+ deps['hono'] ? 'Hono' :
117
+ 'Node.js';
118
+ checks.push({ name: 'framework', status: 'pass', message: `detected ${detectedFramework}` });
119
+ if (pkg.scripts?.build) {
120
+ checks.push({ name: 'build script', status: 'pass', message: `"${pkg.scripts.build}"` });
121
+ }
122
+ // The generated Dockerfile's CMD runs `npm start` for every Node
123
+ // framework. If `scripts.start` is missing, the container fails on
124
+ // first run with `npm ERR! Missing script: "start"` — the deploy
125
+ // shows LIVE briefly, then container alive verification flips it
126
+ // to FAILED. doctor catches this up front so the user fixes
127
+ // package.json before they hit the loop.
128
+ if (!pkg.scripts?.start) {
129
+ checks.push({
130
+ name: 'start script',
131
+ status: 'fail',
132
+ message: 'no `scripts.start` in package.json. add `"start": "node <your-entry-file>"` or the container will crash on boot.',
133
+ });
134
+ }
135
+ else {
136
+ checks.push({ name: 'start script', status: 'pass', message: `"${pkg.scripts.start}"` });
137
+ }
138
+ // Node workspace recognition (mirrors detect.ts:detectNodeWorkspace).
139
+ // Without surfacing this, a user with a pnpm/yarn/npm workspace can't
140
+ // tell if pushto's install step will pick up workspace deps — they
141
+ // sometimes pre-emptively flatten the repo for fear of broken builds.
142
+ if (fs.existsSync(path.join(cwd, 'pnpm-workspace.yaml'))) {
143
+ checks.push({
144
+ name: 'workspace',
145
+ status: 'pass',
146
+ message: 'pnpm-workspace.yaml detected. workspace member packages will be installed.',
147
+ });
148
+ }
149
+ else if (Array.isArray(pkg.workspaces) || (pkg.workspaces && typeof pkg.workspaces === 'object')) {
150
+ checks.push({
151
+ name: 'workspace',
152
+ status: 'pass',
153
+ message: 'npm/yarn workspaces detected. member packages will be installed.',
154
+ });
155
+ }
47
156
  }
48
157
  }
49
158
  catch {
50
159
  checks.push({ name: 'package.json', status: 'warn', message: 'could not parse' });
51
160
  }
52
161
  }
53
- else if (hasRequirements) {
162
+ else if (hasPython) {
54
163
  detectedRuntime = 'python';
55
- const reqs = fs.readFileSync(path.join(cwd, 'requirements.txt'), 'utf-8');
164
+ // Read whichever target file exists — the framework hint comes from
165
+ // any of pip/pipenv/poetry's dep listings. Pipfile + pyproject.toml
166
+ // both look enough like requirements.txt for the substring sniff to
167
+ // work for the common cases (flask/django/fastapi).
168
+ let depHints = '';
169
+ const installer = hasRequirements ? 'pip'
170
+ : hasPipfile ? 'pipenv'
171
+ : 'poetry/pyproject';
172
+ try {
173
+ if (hasRequirements) {
174
+ depHints = fs.readFileSync(path.join(cwd, 'requirements.txt'), 'utf-8');
175
+ }
176
+ else if (hasPipfile) {
177
+ depHints = fs.readFileSync(path.join(cwd, 'Pipfile'), 'utf-8');
178
+ }
179
+ else if (hasPyproject) {
180
+ depHints = fs.readFileSync(path.join(cwd, 'pyproject.toml'), 'utf-8');
181
+ }
182
+ }
183
+ catch { /* unreadable — leave depHints empty, fall through to generic */ }
184
+ const lower = depHints.toLowerCase();
56
185
  detectedFramework =
57
- reqs.includes('flask') ? 'Flask' :
58
- reqs.includes('django') ? 'Django' :
59
- reqs.includes('fastapi') ? 'FastAPI' :
186
+ lower.includes('flask') ? 'Flask' :
187
+ lower.includes('django') ? 'Django' :
188
+ lower.includes('fastapi') ? 'FastAPI' :
60
189
  'Python';
61
- checks.push({ name: 'framework', status: 'pass', message: `detected ${detectedFramework}` });
190
+ checks.push({ name: 'framework', status: 'pass', message: `detected ${detectedFramework} (${installer})` });
191
+ // Frontend builder recognition (mirrors detect.ts:detectFrontendBuild).
192
+ // Python projects with a sibling JS frontend at frontend/ get a Node
193
+ // builder stage prepended to the Dockerfile that runs install + build,
194
+ // then COPYs the resulting frontend/dist into the Python runtime image.
195
+ // Surface this so users with a Flask+Vite or Django+Vite project know
196
+ // their frontend will actually be built — pre-fix doctor was silent
197
+ // and users would skip pushto thinking JS frontends weren't supported.
198
+ if (fs.existsSync(path.join(cwd, 'frontend/package.json'))) {
199
+ try {
200
+ const fePkg = JSON.parse(fs.readFileSync(path.join(cwd, 'frontend/package.json'), 'utf-8'));
201
+ if (fePkg.scripts?.build) {
202
+ checks.push({
203
+ name: 'frontend',
204
+ status: 'pass',
205
+ message: `frontend/package.json detected with build script — JS frontend will build before backend starts.`,
206
+ });
207
+ }
208
+ else {
209
+ checks.push({
210
+ name: 'frontend',
211
+ status: 'warn',
212
+ message: 'frontend/package.json found but no `scripts.build` — frontend stage will be skipped.',
213
+ });
214
+ }
215
+ }
216
+ catch {
217
+ checks.push({ name: 'frontend', status: 'warn', message: 'frontend/package.json found but could not parse.' });
218
+ }
219
+ }
62
220
  }
63
221
  else if (hasGoMod) {
64
222
  detectedRuntime = 'go';
@@ -72,8 +230,25 @@ export const doctor = async () => {
72
230
  }
73
231
  else if (hasGemfile) {
74
232
  detectedRuntime = 'ruby';
75
- detectedFramework = 'Ruby';
76
- checks.push({ name: 'framework', status: 'pass', message: 'detected Ruby' });
233
+ // Mirror the i89/i91 production detection: sniff Gemfile content
234
+ // for Rails so the doctor confirms what production will pick. Pre-
235
+ // fix doctor said "Ruby" for Rails apps which made users wonder if
236
+ // their Rails-specific concerns (assets pipeline, secret_key_base,
237
+ // rails server) would be handled. Now: explicit Rails recognition.
238
+ let isRails = false;
239
+ try {
240
+ const gemfile = fs.readFileSync(path.join(cwd, 'Gemfile'), 'utf-8');
241
+ isRails = /^\s*gem\s+['"]rails['"]\s*[,)]?/m.test(gemfile);
242
+ }
243
+ catch { /* unreadable — fall through to generic Ruby */ }
244
+ detectedFramework = isRails ? 'Rails' : 'Ruby';
245
+ checks.push({
246
+ name: 'framework',
247
+ status: 'pass',
248
+ message: isRails
249
+ ? 'detected Rails — pushto auto-injects SECRET_KEY_BASE and runs assets:precompile'
250
+ : 'detected Ruby',
251
+ });
77
252
  }
78
253
  else if (hasHtml) {
79
254
  detectedRuntime = 'static';
@@ -84,7 +259,7 @@ export const doctor = async () => {
84
259
  checks.push({ name: 'framework', status: 'warn', message: 'no known project files found.' });
85
260
  }
86
261
  // ── 4. Env file detection ──
87
- const envFiles = ['.env', '.env.local', '.env.production'];
262
+ const envFiles = ['.env.production', '.env'];
88
263
  const foundEnv = envFiles.find((f) => fs.existsSync(path.join(cwd, f)));
89
264
  if (foundEnv) {
90
265
  const content = fs.readFileSync(path.join(cwd, foundEnv), 'utf-8');
@@ -95,8 +270,30 @@ export const doctor = async () => {
95
270
  checks.push({ name: 'env file', status: 'warn', message: 'no .env file. if your app needs env vars, create one.' });
96
271
  }
97
272
  // ── 5. Gitignore checks ──
273
+ // Pre-fix: every check below was nested inside `if (gitignorePath exists)`,
274
+ // so a project with no .gitignore at all triggered ZERO warnings — the
275
+ // worst case (Python user with .venv + no gitignore = 200MB zip that
276
+ // 413s the upload) was completely silent. Now the absence-of-file
277
+ // case is its own warning, with runtime-aware suggestions for what
278
+ // belongs in the file.
98
279
  const gitignorePath = path.join(cwd, '.gitignore');
99
- if (fs.existsSync(gitignorePath)) {
280
+ if (!fs.existsSync(gitignorePath)) {
281
+ const suggested = ['.env', '.pushto'];
282
+ if (detectedRuntime === 'node')
283
+ suggested.push('node_modules');
284
+ if (detectedRuntime === 'python')
285
+ suggested.push('.venv', '__pycache__', '*.pyc');
286
+ if (detectedRuntime === 'rust')
287
+ suggested.push('target');
288
+ if (detectedRuntime === 'go')
289
+ suggested.push('vendor');
290
+ checks.push({
291
+ name: '.gitignore',
292
+ status: 'warn',
293
+ message: `no .gitignore. your deploy will include EVERYTHING in this folder — likely huge and may leak secrets. add a .gitignore with: ${suggested.join(', ')}`,
294
+ });
295
+ }
296
+ else {
100
297
  const gitignore = fs.readFileSync(gitignorePath, 'utf-8');
101
298
  if (!gitignore.includes('.env')) {
102
299
  checks.push({ name: '.gitignore', status: 'warn', message: '.env not gitignored. secrets might leak.' });
@@ -107,34 +304,55 @@ export const doctor = async () => {
107
304
  if (detectedRuntime === 'node' && !gitignore.includes('node_modules')) {
108
305
  checks.push({ name: '.gitignore', status: 'warn', message: 'node_modules not gitignored. deploy will be slow.' });
109
306
  }
110
- }
111
- // ── 6. Large files ──
112
- const largeFiles = [];
113
- const checkDir = (dir, depth = 0) => {
114
- if (depth > 3)
115
- return;
116
- try {
117
- const entries = fs.readdirSync(dir, { withFileTypes: true });
118
- for (const entry of entries) {
119
- if (['node_modules', '.git', '.next', '__pycache__', '.venv', 'venv', 'target'].includes(entry.name))
120
- continue;
121
- const full = path.join(dir, entry.name);
122
- if (entry.isFile()) {
123
- const stat = fs.statSync(full);
124
- if (stat.size > 10 * 1024 * 1024) {
125
- largeFiles.push(`${entry.name} (${Math.round(stat.size / 1024 / 1024)}MB)`);
126
- }
127
- }
128
- else if (entry.isDirectory()) {
129
- checkDir(full, depth + 1);
130
- }
307
+ // Python venv check moved out of section 8 so it fires here next to the
308
+ // other gitignore checks AND only when .gitignore exists (the no-gitignore
309
+ // branch above already covers the "no protection at all" case).
310
+ if (detectedRuntime === 'python') {
311
+ const hasVenv = fs.existsSync(path.join(cwd, '.venv')) || fs.existsSync(path.join(cwd, 'venv'));
312
+ if (hasVenv && !gitignore.includes('venv')) {
313
+ checks.push({ name: '.gitignore', status: 'warn', message: 'venv not gitignored. deploy will be huge.' });
131
314
  }
132
315
  }
133
- catch { /* skip */ }
134
- };
135
- checkDir(cwd);
136
- if (largeFiles.length > 0) {
137
- checks.push({ name: 'large files', status: 'warn', message: `found: ${largeFiles.join(', ')}` });
316
+ }
317
+ // ── 6. Deploy preview ──
318
+ // Run the EXACT same gitignore + walk logic that `pushto` uses to build
319
+ // the deploy zip, then report total size, file count, and the biggest
320
+ // files. This is the "would your deploy work?" sanity check — we'd
321
+ // rather tell you here than have the server 413 mid-upload.
322
+ try {
323
+ const files = walkProject(cwd);
324
+ const totalBytes = files.reduce((sum, f) => sum + f.sizeBytes, 0);
325
+ const biggest = [...files].sort((a, b) => b.sizeBytes - a.sizeBytes).slice(0, 3);
326
+ if (totalBytes > SERVER_UPLOAD_CAP_BYTES) {
327
+ const top = biggest.map((f) => `${f.archivePath} (${fmtMB(f.sizeBytes)})`).join(', ');
328
+ checks.push({
329
+ name: 'deploy size',
330
+ status: 'fail',
331
+ message: `${files.length} files, ${fmtMB(totalBytes)} — exceeds ${fmtMB(SERVER_UPLOAD_CAP_BYTES)} server cap. biggest: ${top}. add to .pushtoignore or .gitignore`,
332
+ });
333
+ }
334
+ else if (totalBytes > SERVER_UPLOAD_CAP_BYTES * 0.8) {
335
+ const top = biggest.map((f) => `${f.archivePath} (${fmtMB(f.sizeBytes)})`).join(', ');
336
+ checks.push({
337
+ name: 'deploy size',
338
+ status: 'warn',
339
+ message: `${files.length} files, ${fmtMB(totalBytes)} — close to ${fmtMB(SERVER_UPLOAD_CAP_BYTES)} cap. biggest: ${top}`,
340
+ });
341
+ }
342
+ else {
343
+ checks.push({
344
+ name: 'deploy size',
345
+ status: 'pass',
346
+ message: `${files.length} files, ${fmtMB(totalBytes)}`,
347
+ });
348
+ }
349
+ }
350
+ catch (err) {
351
+ checks.push({
352
+ name: 'deploy size',
353
+ status: 'warn',
354
+ message: `couldn't estimate: ${err instanceof Error ? err.message : 'unknown'}`,
355
+ });
138
356
  }
139
357
  // ── 7. Remote checks (project exists, env var completeness) ──
140
358
  if (token && slug) {
@@ -198,19 +416,36 @@ export const doctor = async () => {
198
416
  checks.push({ name: 'api', status: 'fail', message: 'cannot reach pushto.host' });
199
417
  }
200
418
  }
419
+ // ── 7.5. Custom build-config files that pushto silently ignores ──
420
+ // pushto does NOT honor user-shipped nixpacks.toml or Dockerfile —
421
+ // the build engine in apps/web/lib/nixpacks/* is hand-rolled and
422
+ // generates its own Dockerfile from framework detection. Pre-fix
423
+ // a user with their own Dockerfile would deploy thinking pushto
424
+ // would use it, then debug for hours when their custom RUN steps
425
+ // never executed. Surface it loudly here so the user knows up
426
+ // front.
427
+ if (fs.existsSync(path.join(cwd, 'nixpacks.toml'))) {
428
+ checks.push({
429
+ name: 'nixpacks.toml',
430
+ status: 'warn',
431
+ message: 'pushto ignores nixpacks.toml — build commands come from auto-detection. delete it or open an issue if you need custom build steps.',
432
+ });
433
+ }
434
+ if (fs.existsSync(path.join(cwd, 'Dockerfile'))) {
435
+ checks.push({
436
+ name: 'Dockerfile',
437
+ status: 'warn',
438
+ message: 'pushto generates its own Dockerfile and overwrites yours at build time. your custom one is ignored.',
439
+ });
440
+ }
201
441
  // ── 8. Python-specific checks ──
442
+ // venv-not-gitignored check moved up into section 5 (gitignore checks)
443
+ // so the no-gitignore-at-all warning includes venv as a suggested entry.
202
444
  if (detectedRuntime === 'python') {
203
445
  const hasProcfile = fs.existsSync(path.join(cwd, 'Procfile'));
204
446
  if (hasProcfile) {
205
447
  checks.push({ name: 'Procfile', status: 'pass', message: 'found (gunicorn/uvicorn start command)' });
206
448
  }
207
- const hasVenv = fs.existsSync(path.join(cwd, '.venv')) || fs.existsSync(path.join(cwd, 'venv'));
208
- if (hasVenv && fs.existsSync(gitignorePath)) {
209
- const gi = fs.readFileSync(gitignorePath, 'utf-8');
210
- if (!gi.includes('venv')) {
211
- checks.push({ name: '.gitignore', status: 'warn', message: 'venv not gitignored. deploy will be huge.' });
212
- }
213
- }
214
449
  }
215
450
  // ── Print ──
216
451
  console.log();
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAQ1E,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,IAAmB,EAAE;IAC9C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAE9C,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE1B,sBAAsB;IACtB,uEAAuE;IACvE,wEAAwE;IACxE,wEAAwE;IACxE,kEAAkE;IAClE,8DAA8D;IAC9D,MAAM,gBAAgB,GAAG,iBAAiB,EAAE,CAAC;IAC7C,IAAI,gBAAgB,KAAK,WAAW,EAAE,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,aAAa;YACnB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,gIAAgI;SAC1I,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAClF,CAAC;IAED,wEAAwE;IACxE,0EAA0E;IAC1E,2EAA2E;IAC3E,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACrI,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,QAAQ,CAAC,yCAAyC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;iBAC3F,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAChC,IAAI,WAAW,IAAI,WAAW,KAAK,gBAAgB,IAAI,gBAAgB,KAAK,WAAW,EAAE,CAAC;gBACxF,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,WAAW;oBACjB,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,YAAY,WAAW,uBAAuB,gBAAgB,oCAAoC;iBAC5G,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,8DAA8D,CAAC,CAAC;IAC5E,CAAC;IAED,oBAAoB;IACpB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,UAAU,EAAE,WAAW,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,GAAG,UAAU,CAAC,OAAO,MAAM,UAAU,CAAC,MAAM,iCAAiC;aACvF,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,qCAAqC,CAAC,CAAC;IAEjD,gBAAgB;IAChB,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,CAAC,IAAI,CAAC,KAAK;QACf,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE;QACxD,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,iCAAiC,EAAE,CAC/E,CAAC;IAEF,0BAA0B;IAC1B,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;IAC3B,MAAM,CAAC,IAAI,CAAC,IAAI;QACd,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,IAAI,EAAE,EAAE;QACnE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,yCAAyC,EAAE,CAC1F,CAAC;IAEF,kEAAkE;IAClE,yEAAyE;IACzE,6EAA6E;IAC7E,wEAAwE;IACxE,yEAAyE;IACzE,gEAAgE;IAChE,MAAM,MAAM,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC;IAC7D,MAAM,eAAe,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAC1E,MAAM,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;IAC5D,MAAM,YAAY,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC,CAAC;IACrE,MAAM,SAAS,GAAG,eAAe,IAAI,UAAU,IAAI,YAAY,CAAC;IAChE,MAAM,QAAQ,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC;IAC7D,MAAM,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC;IAE5D,IAAI,iBAAiB,GAAkB,IAAI,CAAC;IAC5C,IAAI,eAAe,GAAkB,IAAI,CAAC;IAE1C,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;YACjF,MAAM,IAAI,GAAG,EAAE,GAAG,GAAG,CAAC,YAAY,EAAE,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC;YAC7D,eAAe,GAAG,MAAM,CAAC;YAEzB,yEAAyE;YACzE,sEAAsE;YACtE,sEAAsE;YACtE,qEAAqE;YACrE,oEAAoE;YACpE,MAAM,QAAQ,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;YAC5C,IAAI,QAAQ,EAAE,CAAC;gBACb,iBAAiB,GAAG,QAAQ,CAAC,SAAS,CAAC;gBACvC,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,WAAW;oBACjB,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,YAAY,QAAQ,CAAC,SAAS,gDAAgD,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,qBAAqB;iBACnI,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,iBAAiB;oBACf,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;wBAC1B,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;4BACrB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;gCAC3B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;oCAC7B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;wCAC7B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;4CACvB,SAAS,CAAC;gBACZ,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,iBAAiB,EAAE,EAAE,CAAC,CAAC;gBAE7F,IAAI,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;oBACvB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;gBAC3F,CAAC;gBAED,iEAAiE;gBACjE,mEAAmE;gBACnE,iEAAiE;gBACjE,iEAAiE;gBACjE,4DAA4D;gBAC5D,yCAAyC;gBACzC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;oBACxB,MAAM,CAAC,IAAI,CAAC;wBACV,IAAI,EAAE,cAAc;wBACpB,MAAM,EAAE,MAAM;wBACd,OAAO,EAAE,kHAAkH;qBAC5H,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;gBAC3F,CAAC;gBAED,sEAAsE;gBACtE,sEAAsE;gBACtE,mEAAmE;gBACnE,sEAAsE;gBACtE,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC,EAAE,CAAC;oBACzD,MAAM,CAAC,IAAI,CAAC;wBACV,IAAI,EAAE,WAAW;wBACjB,MAAM,EAAE,MAAM;wBACd,OAAO,EAAE,4EAA4E;qBACtF,CAAC,CAAC;gBACL,CAAC;qBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,CAAC,EAAE,CAAC;oBACnG,MAAM,CAAC,IAAI,CAAC;wBACV,IAAI,EAAE,WAAW;wBACjB,MAAM,EAAE,MAAM;wBACd,OAAO,EAAE,kEAAkE;qBAC5E,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;SAAM,IAAI,SAAS,EAAE,CAAC;QACrB,eAAe,GAAG,QAAQ,CAAC;QAC3B,oEAAoE;QACpE,oEAAoE;QACpE,oEAAoE;QACpE,oDAAoD;QACpD,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,MAAM,SAAS,GACb,eAAe,CAAC,CAAC,CAAC,KAAK;YACrB,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ;gBACrB,CAAC,CAAC,kBAAkB,CAAC;QAC3B,IAAI,CAAC;YACH,IAAI,eAAe,EAAE,CAAC;gBACpB,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,EAAE,OAAO,CAAC,CAAC;YAC1E,CAAC;iBAAM,IAAI,UAAU,EAAE,CAAC;gBACtB,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;YACjE,CAAC;iBAAM,IAAI,YAAY,EAAE,CAAC;gBACxB,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,EAAE,OAAO,CAAC,CAAC;YACxE,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAC,gEAAgE,CAAC,CAAC;QAC5E,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;QACrC,iBAAiB;YACf,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;gBACnC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;oBACrC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;wBACvC,QAAQ,CAAC;QACX,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,iBAAiB,KAAK,SAAS,GAAG,EAAE,CAAC,CAAC;QAE5G,wEAAwE;QACxE,qEAAqE;QACrE,uEAAuE;QACvE,wEAAwE;QACxE,sEAAsE;QACtE,oEAAoE;QACpE,uEAAuE;QACvE,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAAC,EAAE,CAAC;YAC3D,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,uBAAuB,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;gBAC5F,IAAI,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;oBACzB,MAAM,CAAC,IAAI,CAAC;wBACV,IAAI,EAAE,UAAU;wBAChB,MAAM,EAAE,MAAM;wBACd,OAAO,EAAE,kGAAkG;qBAC5G,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,CAAC;wBACV,IAAI,EAAE,UAAU;wBAChB,MAAM,EAAE,MAAM;wBACd,OAAO,EAAE,sFAAsF;qBAChG,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,kDAAkD,EAAE,CAAC,CAAC;YACjH,CAAC;QACH,CAAC;IACH,CAAC;SAAM,IAAI,QAAQ,EAAE,CAAC;QACpB,eAAe,GAAG,IAAI,CAAC;QACvB,iBAAiB,GAAG,IAAI,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC;IAC7E,CAAC;SAAM,IAAI,QAAQ,EAAE,CAAC;QACpB,eAAe,GAAG,MAAM,CAAC;QACzB,iBAAiB,GAAG,MAAM,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC;IAC/E,CAAC;SAAM,IAAI,UAAU,EAAE,CAAC;QACtB,eAAe,GAAG,MAAM,CAAC;QACzB,iEAAiE;QACjE,mEAAmE;QACnE,mEAAmE;QACnE,mEAAmE;QACnE,mEAAmE;QACnE,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;YACpE,OAAO,GAAG,kCAAkC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7D,CAAC;QAAC,MAAM,CAAC,CAAC,+CAA+C,CAAC,CAAC;QAC3D,iBAAiB,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,OAAO;gBACd,CAAC,CAAC,iFAAiF;gBACnF,CAAC,CAAC,eAAe;SACpB,CAAC,CAAC;IACL,CAAC;SAAM,IAAI,OAAO,EAAE,CAAC;QACnB,eAAe,GAAG,QAAQ,CAAC;QAC3B,iBAAiB,GAAG,QAAQ,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC,CAAC;IAC1F,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,+BAA+B,EAAE,CAAC,CAAC;IAC/F,CAAC;IAED,8BAA8B;IAC9B,MAAM,QAAQ,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;QACnE,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;QACpH,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,WAAW,QAAQ,qCAAqC,EAAE,CAAC,CAAC;IAClI,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,uDAAuD,EAAE,CAAC,CAAC;IACtH,CAAC;IAED,4BAA4B;IAC5B,4EAA4E;IAC5E,uEAAuE;IACvE,qEAAqE;IACrE,kEAAkE;IAClE,mEAAmE;IACnE,uBAAuB;IACvB,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IACnD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAClC,MAAM,SAAS,GAAa,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAChD,IAAI,eAAe,KAAK,MAAM;YAAE,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC/D,IAAI,eAAe,KAAK,QAAQ;YAAE,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;QAClF,IAAI,eAAe,KAAK,MAAM;YAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzD,IAAI,eAAe,KAAK,IAAI;YAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvD,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,YAAY;YAClB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,gIAAgI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;SAChK,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,MAAM,SAAS,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAC1D,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,0CAA0C,EAAE,CAAC,CAAC;QAC3G,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,iCAAiC,EAAE,CAAC,CAAC;QAClG,CAAC;QACD,IAAI,eAAe,KAAK,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YACtE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,mDAAmD,EAAE,CAAC,CAAC;QACpH,CAAC;QACD,wEAAwE;QACxE,2EAA2E;QAC3E,gEAAgE;QAChE,IAAI,eAAe,KAAK,QAAQ,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;YAChG,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3C,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,2CAA2C,EAAE,CAAC,CAAC;YAC5G,CAAC;QACH,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,wEAAwE;IACxE,sEAAsE;IACtE,mEAAmE;IACnE,4DAA4D;IAC5D,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAEjF,IAAI,UAAU,GAAG,uBAAuB,EAAE,CAAC;YACzC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtF,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,aAAa;gBACnB,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,GAAG,KAAK,CAAC,MAAM,WAAW,KAAK,CAAC,UAAU,CAAC,cAAc,KAAK,CAAC,uBAAuB,CAAC,yBAAyB,GAAG,sCAAsC;aACnK,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,UAAU,GAAG,uBAAuB,GAAG,GAAG,EAAE,CAAC;YACtD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtF,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,aAAa;gBACnB,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,GAAG,KAAK,CAAC,MAAM,WAAW,KAAK,CAAC,UAAU,CAAC,eAAe,KAAK,CAAC,uBAAuB,CAAC,kBAAkB,GAAG,EAAE;aACzH,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,aAAa;gBACnB,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,GAAG,KAAK,CAAC,MAAM,WAAW,KAAK,CAAC,UAAU,CAAC,EAAE;aACvD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,aAAa;YACnB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,sBAAsB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE;SAChF,CAAC,CAAC;IACL,CAAC;IAED,gEAAgE;IAChE,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAClB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;YAC/C,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;gBACX,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC,CAAC;gBAE/E,0BAA0B;gBAC1B,MAAM,OAAO,GAAG,MAAM,QAAQ,CAI3B,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;gBAEhB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;oBACnB,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;oBACzB,MAAM,MAAM,GAAG,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,UAAU,CAAC;oBAChD,MAAM,GAAG,GAAG,OAAO,CAAC,YAAY,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,SAAS,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;oBACpG,MAAM,CAAC,IAAI,CAAC;wBACV,IAAI,EAAE,UAAU;wBAChB,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;wBAC1D,OAAO,EAAE,MAAM;4BACb,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,OAAO,GAAG,EAAE;4BAChC,CAAC,CAAC,CAAC,KAAK,SAAS;gCACf,CAAC,CAAC,6DAA6D;gCAC/D,CAAC,CAAC,CAAC,KAAK,QAAQ;oCACd,CAAC,CAAC,kDAAkD;oCACpD,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,KAAK;qBAChC,CAAC,CAAC;gBACL,CAAC;gBAED,mDAAmD;gBACnD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,iBAAiB,IAAI,MAAM,CAAC,CAAC;gBACtD,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;oBACd,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAyB,MAAM,CAAC,CAAC;oBAClE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC1F,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC;oBAEpC,IAAI,QAAQ,EAAE,CAAC;wBACb,MAAM,YAAY,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;wBACxE,MAAM,SAAS,GAAa,EAAE,CAAC;wBAC/B,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;4BAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;4BAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;gCAAE,SAAS;4BAClD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;4BACnC,IAAI,KAAK,GAAG,CAAC;gCAAE,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;wBAChE,CAAC;wBACD,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC5D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BACvB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,kCAAkC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,4BAA4B,EAAE,CAAC,CAAC;wBAC9M,CAAC;6BAAM,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;4BAC3B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,WAAW,kBAAkB,EAAE,CAAC,CAAC;wBAC/F,CAAC;oBACH,CAAC;yBAAM,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;wBAC3B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,WAAW,qBAAqB,EAAE,CAAC,CAAC;oBAClG,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,kCAAkC,EAAE,CAAC,CAAC;YAC5F,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;IAED,oEAAoE;IACpE,mEAAmE;IACnE,iEAAiE;IACjE,iEAAiE;IACjE,gEAAgE;IAChE,iEAAiE;IACjE,8DAA8D;IAC9D,SAAS;IACT,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC;QACnD,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,eAAe;YACrB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,oIAAoI;SAC9I,CAAC,CAAC;IACL,CAAC;IACD,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,YAAY;YAClB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,qGAAqG;SAC/G,CAAC,CAAC;IACL,CAAC;IAED,kCAAkC;IAClC,uEAAuE;IACvE,yEAAyE;IACzE,IAAI,eAAe,KAAK,QAAQ,EAAE,CAAC;QACjC,MAAM,WAAW,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC;QAC9D,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,wCAAwC,EAAE,CAAC,CAAC;QACvG,CAAC;IACH,CAAC;IAED,cAAc;IACd,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;YACrD,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;gBAC7C,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnB,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG;YAC/C,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM;gBACxC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACvF,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;IAExD,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,SAAS,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,2BAA2B,CAAC,CAAC,CAAC;IAC3G,CAAC;SAAM,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC,MAAM,WAAW,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,qCAAqC,CAAC,CAAC,CAAC;IAC1H,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC,CAAC;IAChE,CAAC;AACH,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"domain.d.ts","sourceRoot":"","sources":["../../src/commands/domain.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,MAAM,GAAU,QAAQ,MAAM,EAAE,aAAa,MAAM,KAAG,OAAO,CAAC,IAAI,CAwE9E,CAAC"}
1
+ {"version":3,"file":"domain.d.ts","sourceRoot":"","sources":["../../src/commands/domain.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,MAAM,GAAU,QAAQ,MAAM,EAAE,aAAa,MAAM,KAAG,OAAO,CAAC,IAAI,CAkH9E,CAAC"}
@@ -20,16 +20,36 @@ export const domain = async (action, domainName) => {
20
20
  process.exit(1);
21
21
  }
22
22
  console.log(chalk.green(`> registering ${domainName} for ${slug}...`));
23
- const res = await api(`/cli/projects/${slug}/domain`, {
24
- method: 'POST',
25
- body: JSON.stringify({ domain: domainName }),
26
- });
23
+ let res;
24
+ try {
25
+ res = await api(`/cli/projects/${slug}/domain`, {
26
+ method: 'POST',
27
+ body: JSON.stringify({ domain: domainName }),
28
+ });
29
+ }
30
+ catch (err) {
31
+ // Same shape as i61 (init), i71 (status), i72 (use) — classify
32
+ // network errors so users don't get the unhandledRejection
33
+ // handler's generic "something went wrong" for what is really
34
+ // a connectivity issue (or a real local problem they should
35
+ // see directly).
36
+ const msg = err instanceof Error ? err.message : '';
37
+ const isNetwork = /fetch|enotfound|econnrefused|timeout|abort|network/i.test(msg);
38
+ if (isNetwork) {
39
+ console.log(chalk.red('> could not reach pushto.host. check your internet.'));
40
+ }
41
+ else {
42
+ console.log(chalk.red(`> domain setup failed: ${msg || 'unknown error'}`));
43
+ }
44
+ process.exit(1);
45
+ }
27
46
  const data = await safeJson(res);
28
47
  if (!res.ok) {
29
48
  console.log(chalk.red(`> ${data.error ?? 'something went wrong.'}`));
30
49
  process.exit(1);
31
50
  }
32
51
  const nameservers = data.nameservers;
52
+ const warnings = data.warnings ?? [];
33
53
  console.log(chalk.green(`> ${domainName} configured.\n`));
34
54
  if (nameservers?.length) {
35
55
  console.log(' go to where you bought your domain and change the');
@@ -44,13 +64,38 @@ export const domain = async (action, domainName) => {
44
64
  else {
45
65
  console.log(chalk.dim(' DNS is already configured. check status with: pushto status'));
46
66
  }
67
+ // Surface partial-failure warnings from the server (i4 fix added these
68
+ // for www CNAME failures and SSL-mode-config failures). Pre-fix the
69
+ // server logged them but the CLI dropped the response field on the
70
+ // floor so the user never knew their www subdomain wouldn't work.
71
+ if (warnings.length > 0) {
72
+ console.log();
73
+ console.log(chalk.yellow(' heads up:'));
74
+ for (const w of warnings) {
75
+ console.log(chalk.yellow(` ${w}`));
76
+ }
77
+ }
47
78
  console.log();
48
79
  }
49
80
  else if (action === 'remove' || action === 'rm') {
50
81
  console.log(chalk.green(`> removing custom domain from ${slug}...`));
51
- const res = await api(`/cli/projects/${slug}/domain`, {
52
- method: 'DELETE',
53
- });
82
+ let res;
83
+ try {
84
+ res = await api(`/cli/projects/${slug}/domain`, {
85
+ method: 'DELETE',
86
+ });
87
+ }
88
+ catch (err) {
89
+ const msg = err instanceof Error ? err.message : '';
90
+ const isNetwork = /fetch|enotfound|econnrefused|timeout|abort|network/i.test(msg);
91
+ if (isNetwork) {
92
+ console.log(chalk.red('> could not reach pushto.host. check your internet.'));
93
+ }
94
+ else {
95
+ console.log(chalk.red(`> domain remove failed: ${msg || 'unknown error'}`));
96
+ }
97
+ process.exit(1);
98
+ }
54
99
  const data = await safeJson(res);
55
100
  if (!res.ok) {
56
101
  console.log(chalk.red(`> ${data.error ?? 'something went wrong.'}`));
@@ -1 +1 @@
1
- {"version":3,"file":"domain.js","sourceRoot":"","sources":["../../src/commands/domain.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"domain.js","sourceRoot":"","sources":["../../src/commands/domain.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const echo: (action: string, args: string[]) => Promise<void>;
2
+ //# sourceMappingURL=echo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"echo.d.ts","sourceRoot":"","sources":["../../src/commands/echo.ts"],"names":[],"mappings":"AA0QA,eAAO,MAAM,IAAI,GAAU,QAAQ,MAAM,EAAE,MAAM,MAAM,EAAE,KAAG,OAAO,CAAC,IAAI,CAcvE,CAAC"}