ugly-app 0.1.776 → 0.1.777

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli/index.js CHANGED
@@ -106,7 +106,7 @@ program
106
106
  });
107
107
  program
108
108
  .command('lint')
109
- .description('Lint server/client/shared with the shared ugly-app eslint config')
109
+ .description('Lint the project with eslint (scope decided by eslint.config.js)')
110
110
  .option('--fix', 'Automatically fix problems where possible')
111
111
  .option('--quiet', 'Report errors only (suppress warnings)')
112
112
  .option('--max-warnings <n>', 'Number of warnings to trigger a nonzero exit code')
@@ -1 +1 @@
1
- {"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../../src/cli/lint.ts"],"names":[],"mappings":"AA2EA,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,uEAAuE;IACvE,GAAG,EAAE,OAAO,CAAC;IACb,uEAAuE;IACvE,EAAE,EAAE,OAAO,CAAC;CACb;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,IAAI,GAAE,cAAmB,GAAG,aAAa,CAqBhE;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,OAAO,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAsCnF"}
1
+ {"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../../src/cli/lint.ts"],"names":[],"mappings":"AAqGA,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,uEAAuE;IACvE,GAAG,EAAE,OAAO,CAAC;IACb,uEAAuE;IACvE,EAAE,EAAE,OAAO,CAAC;CACb;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,IAAI,GAAE,cAAmB,GAAG,aAAa,CAqBhE;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,OAAO,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAsCnF"}
package/dist/cli/lint.js CHANGED
@@ -16,8 +16,32 @@ import { spawn, spawnSync } from 'node:child_process';
16
16
  import { createRequire } from 'node:module';
17
17
  import fs from 'node:fs';
18
18
  import path from 'node:path';
19
- const DEFAULT_DIRS = ['server', 'client', 'shared'];
20
- const LINT_ENV = { ...process.env, ESLINT_USE_FLAT_CONFIG: 'true' };
19
+ // Lint the project root and let the app's own eslint.config.js `files` /
20
+ // `ignores` decide scope. Passing specific dirs (e.g. `client`) is brittle:
21
+ // ESLint 9 *fatally errors* if a passed directory's files are all ignored
22
+ // (e.g. ugly-studio's config lints server/shared/electron but not client).
23
+ // `.` always has matching files, mirrors the standard `eslint .` invocation,
24
+ // and stays correct for any app layout.
25
+ const DEFAULT_LINT_PATHS = ['.'];
26
+ /**
27
+ * Env for the spawned eslint:
28
+ * - ESLINT_USE_FLAT_CONFIG makes the pinned eslint v8 honor eslint.config.js.
29
+ * - Bump the V8 heap: type-aware linting (`strictTypeChecked`) over a whole
30
+ * project OOMs at the default ~4GB on large repos (ugly-studio crashes),
31
+ * which a lint gate must not mistake for a lint failure. Matches how apps
32
+ * already run eslint (`NODE_OPTIONS=--max-old-space-size=8192 eslint .`).
33
+ */
34
+ function lintEnv() {
35
+ const existing = process.env['NODE_OPTIONS'] ?? '';
36
+ const nodeOptions = existing.includes('--max-old-space-size')
37
+ ? existing
38
+ : `${existing} --max-old-space-size=8192`.trim();
39
+ return {
40
+ ...process.env,
41
+ ESLINT_USE_FLAT_CONFIG: 'true',
42
+ NODE_OPTIONS: nodeOptions,
43
+ };
44
+ }
21
45
  /** Resolve the eslint CLI entry through the project's module graph (which
22
46
  * includes ugly-app's bundled eslint). Returns null if eslint isn't installed. */
23
47
  function resolveEslintBin(cwd) {
@@ -48,7 +72,7 @@ function hasEslintConfig(cwd) {
48
72
  ].some((f) => fs.existsSync(path.join(cwd, f)));
49
73
  }
50
74
  function targetDirs(cwd, dirs) {
51
- return (dirs ?? DEFAULT_DIRS).filter((d) => fs.existsSync(path.join(cwd, d)));
75
+ return (dirs ?? DEFAULT_LINT_PATHS).filter((d) => fs.existsSync(path.join(cwd, d)));
52
76
  }
53
77
  /**
54
78
  * Returns null when linting can't or shouldn't run (eslint absent, no config,
@@ -89,7 +113,7 @@ export function runLint(opts = {}) {
89
113
  const res = spawnSync(process.execPath, args, {
90
114
  cwd,
91
115
  stdio: 'inherit',
92
- env: LINT_ENV,
116
+ env: lintEnv(),
93
117
  });
94
118
  return { ran: true, ok: res.status === 0 };
95
119
  }
@@ -106,7 +130,7 @@ export function lintSummaryAsync(cwd, dirs) {
106
130
  resolve(empty);
107
131
  return;
108
132
  }
109
- const child = spawn(process.execPath, [target.bin, ...target.dirs, '--format', 'json'], { cwd, env: LINT_ENV });
133
+ const child = spawn(process.execPath, [target.bin, ...target.dirs, '--format', 'json'], { cwd, env: lintEnv() });
110
134
  let out = '';
111
135
  child.stdout.on('data', (d) => {
112
136
  out += d.toString();
@@ -1 +1 @@
1
- {"version":3,"file":"lint.js","sourceRoot":"","sources":["../../src/cli/lint.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lint.js","sourceRoot":"","sources":["../../src/cli/lint.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export declare const CLI_VERSION = "0.1.776";
1
+ export declare const CLI_VERSION = "0.1.777";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1,3 +1,3 @@
1
1
  // Auto-generated by prebuild — do not edit manually
2
- export const CLI_VERSION = "0.1.776";
2
+ export const CLI_VERSION = "0.1.777";
3
3
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ugly-app",
3
- "version": "0.1.776",
3
+ "version": "0.1.777",
4
4
  "type": "module",
5
5
  "comment:files": "Allowlist what ships to npm. dist = runtime; src = sourcemap targets (dist/*.js.map reference ../../src/); templates = CLI scaffold. Everything else at repo root (.pgdata local Postgres, coverage, assets/icons sources, test/, test-results/) is excluded by omission. The !negations strip the scaffold's installed deps + cruft (templates/node_modules is 200MB+ and must never ship). package.json/README/LICENSE ship automatically.",
6
6
  "files": [
package/src/cli/index.ts CHANGED
@@ -112,7 +112,7 @@ program
112
112
 
113
113
  program
114
114
  .command('lint')
115
- .description('Lint server/client/shared with the shared ugly-app eslint config')
115
+ .description('Lint the project with eslint (scope decided by eslint.config.js)')
116
116
  .option('--fix', 'Automatically fix problems where possible')
117
117
  .option('--quiet', 'Report errors only (suppress warnings)')
118
118
  .option('--max-warnings <n>', 'Number of warnings to trigger a nonzero exit code')
package/src/cli/lint.ts CHANGED
@@ -17,9 +17,33 @@ import { createRequire } from 'node:module';
17
17
  import fs from 'node:fs';
18
18
  import path from 'node:path';
19
19
 
20
- const DEFAULT_DIRS = ['server', 'client', 'shared'];
20
+ // Lint the project root and let the app's own eslint.config.js `files` /
21
+ // `ignores` decide scope. Passing specific dirs (e.g. `client`) is brittle:
22
+ // ESLint 9 *fatally errors* if a passed directory's files are all ignored
23
+ // (e.g. ugly-studio's config lints server/shared/electron but not client).
24
+ // `.` always has matching files, mirrors the standard `eslint .` invocation,
25
+ // and stays correct for any app layout.
26
+ const DEFAULT_LINT_PATHS = ['.'];
21
27
 
22
- const LINT_ENV = { ...process.env, ESLINT_USE_FLAT_CONFIG: 'true' };
28
+ /**
29
+ * Env for the spawned eslint:
30
+ * - ESLINT_USE_FLAT_CONFIG makes the pinned eslint v8 honor eslint.config.js.
31
+ * - Bump the V8 heap: type-aware linting (`strictTypeChecked`) over a whole
32
+ * project OOMs at the default ~4GB on large repos (ugly-studio crashes),
33
+ * which a lint gate must not mistake for a lint failure. Matches how apps
34
+ * already run eslint (`NODE_OPTIONS=--max-old-space-size=8192 eslint .`).
35
+ */
36
+ function lintEnv(): NodeJS.ProcessEnv {
37
+ const existing = process.env['NODE_OPTIONS'] ?? '';
38
+ const nodeOptions = existing.includes('--max-old-space-size')
39
+ ? existing
40
+ : `${existing} --max-old-space-size=8192`.trim();
41
+ return {
42
+ ...process.env,
43
+ ESLINT_USE_FLAT_CONFIG: 'true',
44
+ NODE_OPTIONS: nodeOptions,
45
+ };
46
+ }
23
47
 
24
48
  /** Resolve the eslint CLI entry through the project's module graph (which
25
49
  * includes ugly-app's bundled eslint). Returns null if eslint isn't installed. */
@@ -53,7 +77,9 @@ function hasEslintConfig(cwd: string): boolean {
53
77
  }
54
78
 
55
79
  function targetDirs(cwd: string, dirs?: string[]): string[] {
56
- return (dirs ?? DEFAULT_DIRS).filter((d) => fs.existsSync(path.join(cwd, d)));
80
+ return (dirs ?? DEFAULT_LINT_PATHS).filter((d) =>
81
+ fs.existsSync(path.join(cwd, d)),
82
+ );
57
83
  }
58
84
 
59
85
  /**
@@ -111,7 +137,7 @@ export function runLint(opts: RunLintOptions = {}): RunLintResult {
111
137
  const res = spawnSync(process.execPath, args, {
112
138
  cwd,
113
139
  stdio: 'inherit',
114
- env: LINT_ENV,
140
+ env: lintEnv(),
115
141
  });
116
142
  return { ran: true, ok: res.status === 0 };
117
143
  }
@@ -138,7 +164,7 @@ export function lintSummaryAsync(cwd: string, dirs?: string[]): Promise<LintSumm
138
164
  const child = spawn(
139
165
  process.execPath,
140
166
  [target.bin, ...target.dirs, '--format', 'json'],
141
- { cwd, env: LINT_ENV },
167
+ { cwd, env: lintEnv() },
142
168
  );
143
169
  let out = '';
144
170
  child.stdout.on('data', (d: Buffer) => {
@@ -1,2 +1,2 @@
1
1
  // Auto-generated by prebuild — do not edit manually
2
- export const CLI_VERSION = "0.1.776";
2
+ export const CLI_VERSION = "0.1.777";
@@ -11,7 +11,7 @@ Full API reference: https://www.npmjs.com/package/ugly-app
11
11
 
12
12
  ## Commands
13
13
  - `npm run dev` — Start everything (local Postgres/MinIO, server, Vite, tsc watch, + a one-shot eslint summary)
14
- - `npm run lint` — Lint server/client/shared (`npm run lint:fix` to auto-fix)
14
+ - `npm run lint` — Lint the project (`npm run lint:fix` to auto-fix)
15
15
  - `npm run build` — Production build
16
16
  - `npm run publish` — Deploy to Cloudflare Workers (runs an eslint gate first)
17
17
  - `npm run db:migrate` — Run pending migrations