@stll/oxlint-config 1.4.0 → 1.5.1

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 (69) hide show
  1. package/README.md +90 -14
  2. package/dist/cloud-setup-cli.cjs +3 -3
  3. package/dist/cloud-setup-cli.mjs +3 -3
  4. package/dist/consumer-compat-cli.cjs +2 -2
  5. package/dist/consumer-compat-cli.mjs +2 -2
  6. package/dist/dependabot-cli.cjs +34 -10
  7. package/dist/dependabot-cli.cjs.map +1 -1
  8. package/dist/dependabot-cli.mjs +35 -11
  9. package/dist/dependabot-cli.mjs.map +1 -1
  10. package/dist/dependabot.cjs +2 -0
  11. package/dist/dependabot.d.cts +12 -2
  12. package/dist/dependabot.d.mts +12 -2
  13. package/dist/dependabot.mjs +2 -2
  14. package/dist/generated-file.cjs +2 -2
  15. package/dist/generated-file.mjs +2 -2
  16. package/dist/git-tracked-output.cjs +2 -2
  17. package/dist/git-tracked-output.mjs +1 -1
  18. package/dist/jsonc.cjs +66 -0
  19. package/dist/jsonc.cjs.map +1 -0
  20. package/dist/jsonc.mjs +61 -0
  21. package/dist/jsonc.mjs.map +1 -0
  22. package/dist/publish-artifact-syntax.cjs +2 -2
  23. package/dist/publish-artifact-syntax.mjs +2 -2
  24. package/dist/publish-build-target-vite-dts-helper2.cjs +1 -1
  25. package/dist/publish-build-target-vite-dts-helper2.mjs +1 -1
  26. package/dist/publish-contract-cli.cjs +2 -2
  27. package/dist/publish-contract-cli.mjs +1 -1
  28. package/dist/quarantine-cli.cjs +66 -0
  29. package/dist/quarantine-cli.cjs.map +1 -0
  30. package/dist/quarantine-cli.d.cts +1 -0
  31. package/dist/quarantine-cli.d.mts +1 -0
  32. package/dist/quarantine-cli.mjs +66 -0
  33. package/dist/quarantine-cli.mjs.map +1 -0
  34. package/dist/quarantine-policy.cjs +10 -0
  35. package/dist/quarantine-policy.d.cts +27 -0
  36. package/dist/quarantine-policy.d.mts +27 -0
  37. package/dist/quarantine-policy.mjs +1 -0
  38. package/dist/quarantine-policy2.cjs +399 -0
  39. package/dist/quarantine-policy2.cjs.map +1 -0
  40. package/dist/quarantine-policy2.mjs +352 -0
  41. package/dist/quarantine-policy2.mjs.map +1 -0
  42. package/dist/toolchain-changed.cjs +11 -66
  43. package/dist/toolchain-changed.cjs.map +1 -1
  44. package/dist/toolchain-changed.mjs +13 -68
  45. package/dist/toolchain-changed.mjs.map +1 -1
  46. package/dist/toolchain-check-cli.cjs +1 -0
  47. package/dist/toolchain-check-cli.cjs.map +1 -1
  48. package/dist/toolchain-check-cli.mjs +1 -0
  49. package/dist/toolchain-check-cli.mjs.map +1 -1
  50. package/dist/toolchain-dependabot.cjs +77 -3
  51. package/dist/toolchain-dependabot.cjs.map +1 -1
  52. package/dist/toolchain-dependabot.mjs +66 -4
  53. package/dist/toolchain-dependabot.mjs.map +1 -1
  54. package/dist/toolchain-guard.cjs +49 -10
  55. package/dist/toolchain-guard.cjs.map +1 -1
  56. package/dist/toolchain-guard.mjs +51 -12
  57. package/dist/toolchain-guard.mjs.map +1 -1
  58. package/dist/toolchain-inputs.cjs +104 -18
  59. package/dist/toolchain-inputs.cjs.map +1 -1
  60. package/dist/toolchain-inputs.mjs +106 -20
  61. package/dist/toolchain-inputs.mjs.map +1 -1
  62. package/dist/typecheck-parity.cjs +4 -3
  63. package/dist/typecheck-parity.cjs.map +1 -1
  64. package/dist/typecheck-parity.mjs +4 -3
  65. package/dist/typecheck-parity.mjs.map +1 -1
  66. package/dist/typecheck-probe-cli.cjs +2 -2
  67. package/dist/typecheck-probe-cli.mjs +2 -2
  68. package/package.json +13 -1
  69. package/toolchain.json +11 -4
@@ -1,7 +1,7 @@
1
1
  import path from "node:path";
2
+ import { parse } from "smol-toml";
2
3
  import { createHash } from "node:crypto";
3
4
  import { subset, valid, validRange } from "semver";
4
- import { parse as parse$1 } from "smol-toml";
5
5
  import { isDeepStrictEqual } from "node:util";
6
6
  import { parseDocument } from "yaml";
7
7
  import picomatch from "picomatch";
@@ -697,7 +697,12 @@ const postgresStart = String.raw`
697
697
  pg_pid="$(head -n 1 "$pg_data/postmaster.pid")"
698
698
  service_process "$pg_pid" "$pg_bin/postgres"
699
699
  [[ "$(env -u PGSERVICE -u PGSERVICEFILE -u PGOPTIONS PGHOSTADDR=127.0.0.1 PGPASSWORD="$pg_password" PGCONNECT_TIMEOUT=2 "$pg_bin/psql" -X -h 127.0.0.1 -p 55432 -U stll_cloud -d postgres -At -v ON_ERROR_STOP=1 -c "SELECT count(*) FROM pg_database WHERE datname = 'cloud_test'")" == 1 ]] || env -u PGSERVICE -u PGSERVICEFILE -u PGOPTIONS PGHOSTADDR=127.0.0.1 PGPASSWORD="$pg_password" PGCONNECT_TIMEOUT=2 "$pg_bin/createdb" -h 127.0.0.1 -p 55432 -U stll_cloud cloud_test || fail "PostgreSQL test database creation failed"
700
- DATABASE_URL="postgresql://stll_cloud:$pg_password@127.0.0.1:55432/cloud_test"
700
+ POSTGRES_HOST='127.0.0.1:55432'
701
+ POSTGRES_USER='stll_cloud'
702
+ POSTGRES_PASSWORD="$pg_password"
703
+ POSTGRES_DB_NAME='cloud_test'
704
+ POSTGRES_ADDITIONAL_CONNECTION_DATA=''
705
+ DATABASE_URL="postgresql://$POSTGRES_USER:$POSTGRES_PASSWORD@$POSTGRES_HOST/$POSTGRES_DB_NAME$POSTGRES_ADDITIONAL_CONNECTION_DATA"
701
706
  printf 'postgres: %s\n' "$pg_state"
702
707
  `;
703
708
  const valkeyStart = String.raw`
@@ -842,7 +847,7 @@ const resolveCloudToolchains = ({ cloud, files, rust, rustExceptions }) => {
842
847
  if (source !== void 0 && selector !== void 0) throw new Error("cloud Rust requires one root rust-toolchain.toml or rust-toolchain file");
843
848
  let declared;
844
849
  if (source !== void 0 || selector?.trimStart().startsWith("[")) {
845
- const parsed = parse$1(source ?? selector ?? "");
850
+ const parsed = parse(source ?? selector ?? "");
846
851
  if (!record$2(parsed["toolchain"])) throw new Error("cloud Rust requires [toolchain]");
847
852
  declared = parsed["toolchain"];
848
853
  if (Object.keys(declared).some((key) => ![
@@ -877,7 +882,7 @@ const resolveCloudToolchains = ({ cloud, files, rust, rustExceptions }) => {
877
882
  if (tool === "wasm-bindgen-cli") {
878
883
  const lock = files["Cargo.lock"];
879
884
  if (lock === void 0) throw new Error("wasm-bindgen-cli requires tracked root Cargo.lock");
880
- const packages = parse$1(lock)["package"];
885
+ const packages = parse(lock)["package"];
881
886
  if (!Array.isArray(packages)) throw new Error("Cargo.lock requires package entries for wasm-bindgen-cli");
882
887
  const versions = new Set(packages.flatMap((entry) => record$2(entry) && entry["name"] === "wasm-bindgen" ? [entry["version"]] : []));
883
888
  if (versions.size !== 1 || !versions.has(version)) throw new Error(`cloud.tools.wasm-bindgen-cli ${version} must equal the unique wasm-bindgen crate version in Cargo.lock (found ${[...versions].join(", ") || "none"})`);
@@ -1093,9 +1098,9 @@ const script = String.raw`#!/usr/bin/env bash
1093
1098
  # Supported platform: Ubuntu 24.04 (noble), amd64/arm64, root or passwordless sudo.
1094
1099
  set -euo pipefail
1095
1100
 
1096
- usage() { echo 'Usage: cloud-setup.sh install|start' >&2; exit 2; }
1101
+ usage() { echo 'Usage: cloud-setup.sh install|start|session' >&2; exit 2; }
1097
1102
  [[ "$#" == 1 ]] || usage
1098
- case "$1" in install|start) MODE="$1" ;; *) usage ;; esac
1103
+ case "$1" in install|start|session) MODE="$1" ;; *) usage ;; esac
1099
1104
  fail() { echo "cloud-setup: $*" >&2; exit 1; }
1100
1105
  trap 'echo "cloud-setup: command failed at line $LINENO" >&2' ERR
1101
1106
  # Each phase logs its start and duration so a stalled phase is visible in the task log.
@@ -1248,6 +1253,8 @@ process.stdout.write([...hosts].sort().join(","));
1248
1253
  @INPUT_VALIDATION@
1249
1254
 
1250
1255
  @ENV_FUNCTIONS@
1256
+ @ENVIRONMENT_VALUES@
1257
+ @SESSION_ENVIRONMENT@
1251
1258
 
1252
1259
  @PREPARE_FUNCTION@
1253
1260
 
@@ -1260,14 +1267,38 @@ if [[ "$MODE" == install ]]; then
1260
1267
  @PREPARE_STEP@
1261
1268
  exit 0
1262
1269
  fi
1263
- step runtime-check runtime_ready
1264
- step tool-check verify_tools
1265
- step shell install_shell_environment
1266
- step shell-check verify_shell_environment
1267
- @ENV_VALIDATE@
1268
- step state prepare_state
1269
- step service-start start_services
1270
- @ENV_WRITE@
1270
+ @ENV_INITIALIZE@
1271
+ start_environment() {
1272
+ step runtime-check runtime_ready
1273
+ step tool-check verify_tools
1274
+ step shell install_shell_environment
1275
+ step shell-check verify_shell_environment
1276
+ @ENV_VALIDATE@
1277
+ step state prepare_state
1278
+ step service-start start_services
1279
+ @ENV_WRITE@
1280
+ }
1281
+ if [[ "$MODE" == session ]]; then
1282
+ start_environment >&2
1283
+ else
1284
+ start_environment
1285
+ fi
1286
+ @SESSION_ENVIRONMENT_CALL@
1287
+ `;
1288
+ const environmentValuesFunction = String.raw`
1289
+ environment_values() {
1290
+ local emit="$1"
1291
+ "$emit" NODE_ENV test
1292
+ if [[ -n "$DATABASE_URL" ]]; then
1293
+ "$emit" DATABASE_URL "$DATABASE_URL"
1294
+ "$emit" POSTGRES_HOST "$POSTGRES_HOST"
1295
+ "$emit" POSTGRES_USER "$POSTGRES_USER"
1296
+ "$emit" POSTGRES_PASSWORD "$POSTGRES_PASSWORD"
1297
+ "$emit" POSTGRES_DB_NAME "$POSTGRES_DB_NAME"
1298
+ "$emit" POSTGRES_ADDITIONAL_CONNECTION_DATA "$POSTGRES_ADDITIONAL_CONNECTION_DATA"
1299
+ fi
1300
+ if [[ -n "$REDIS_URL" ]]; then "$emit" REDIS_URL "$REDIS_URL"; fi
1301
+ }
1271
1302
  `;
1272
1303
  const environmentFunctions = String.raw`
1273
1304
  validate_environment() {
@@ -1283,20 +1314,26 @@ validate_environment() {
1283
1314
  [[ "$first_line" == "$ENV_MARKER" ]] || fail 'Refusing to overwrite an unowned environment file'
1284
1315
  fi
1285
1316
  }
1317
+ environment_file_value() { printf '%s=%s\n' "$1" "$2"; }
1286
1318
  write_environment() {
1287
1319
  validate_environment
1288
1320
  local env_path="$REPO_ROOT/$ENV_FILE" temporary
1289
1321
  temporary="$(mktemp "$(dirname -- "$env_path")/.stll-cloud-env.XXXXXX")"
1290
1322
  chmod 600 "$temporary"
1291
1323
  {
1292
- printf '%s\n' "$ENV_MARKER" 'NODE_ENV=test'
1293
- if [[ -n "$DATABASE_URL" ]]; then printf 'DATABASE_URL=%s\n' "$DATABASE_URL"; fi
1294
- if [[ -n "$REDIS_URL" ]]; then printf 'REDIS_URL=%s\n' "$REDIS_URL"; fi
1324
+ printf '%s\n' "$ENV_MARKER"
1325
+ environment_values environment_file_value
1295
1326
  } > "$temporary"
1296
1327
  chown "$OUTPUT_UID:$OUTPUT_GID" "$temporary"
1297
1328
  mv -f -- "$temporary" "$env_path"
1298
1329
  }
1299
1330
  `;
1331
+ const sessionEnvironmentFunction = String.raw`
1332
+ environment_shell_value() { printf 'export %s=%q\n' "$1" "$2"; }
1333
+ emit_session_environment() {
1334
+ environment_values environment_shell_value
1335
+ }
1336
+ `;
1300
1337
  const shellQuote = (value) => `'${value.replaceAll("'", "'\\''")}'`;
1301
1338
  const renderPrepare = (prepare, files) => {
1302
1339
  if (prepare === void 0) return "";
@@ -1350,7 +1387,11 @@ const generateCloudSetup = ({ policy, cloud, nodeVersion, files = {}, rustExcept
1350
1387
  ["@NODE@", exactNode],
1351
1388
  ["@ENV_ASSIGNMENTS@", selected.envFile === void 0 ? "" : `ENV_FILE=${shellQuote(selected.envFile)}\nENV_MARKER=${shellQuote(cloudEnvironmentMarker)}`],
1352
1389
  ["@ENV_FUNCTIONS@", selected.envFile === void 0 ? "" : environmentFunctions],
1353
- ["@ENV_VALIDATE@", selected.envFile === void 0 ? "" : "DATABASE_URL=''\nREDIS_URL=''\nvalidate_environment"],
1390
+ ["@ENVIRONMENT_VALUES@", selected.services.length === 0 ? "" : environmentValuesFunction],
1391
+ ["@ENV_INITIALIZE@", selected.services.length === 0 ? "" : "DATABASE_URL=''\nPOSTGRES_HOST=''\nPOSTGRES_USER=''\nPOSTGRES_PASSWORD=''\nPOSTGRES_DB_NAME=''\nPOSTGRES_ADDITIONAL_CONNECTION_DATA=''\nREDIS_URL=''"],
1392
+ ["@ENV_VALIDATE@", selected.envFile === void 0 ? "" : "validate_environment"],
1393
+ ["@SESSION_ENVIRONMENT@", selected.services.length === 0 ? "" : sessionEnvironmentFunction],
1394
+ ["@SESSION_ENVIRONMENT_CALL@", selected.services.length === 0 ? "" : "if [[ \"$MODE\" == session ]]; then emit_session_environment; fi"],
1354
1395
  ["@ENV_WRITE@", selected.envFile === void 0 ? "" : "write_environment"],
1355
1396
  ["@PREPARE_FUNCTION@", renderPrepare(selected.prepare, files)],
1356
1397
  ["@PREPARE_STEP@", selected.prepare === void 0 ? "" : " step prepare prepare_sources"],
@@ -1402,6 +1443,47 @@ const sessionStartHook = (script) => ({
1402
1443
  printf '%s\\n' "cloud-setup: $1" >&2
1403
1444
  exit 0
1404
1445
  }
1446
+ if [ -n "\${CLAUDE_ENV_FILE:-}" ]; then
1447
+ cloud_session_exports="$(${script} session)" || cloud_setup_incomplete 'startup failed; run install'
1448
+ else
1449
+ ${script} start >&2 || cloud_setup_incomplete 'startup failed; run install'
1450
+ exit 0
1451
+ fi
1452
+ if [ -n "\${CLAUDE_ENV_FILE:-}" ]; then
1453
+ if [ ! -s ${cloudShellProfilePath} ]; then
1454
+ cloud_setup_incomplete 'cloud shell profile is unavailable; run install'
1455
+ fi
1456
+ cloud_shell_exports="$(cat ${cloudShellProfilePath})" || cloud_setup_incomplete 'cloud shell profile could not be read; run install'
1457
+ [ -n "$cloud_shell_exports" ] || cloud_setup_incomplete 'cloud shell profile is unavailable; run install'
1458
+ if [ -e "$CLAUDE_ENV_FILE" ] || [ -L "$CLAUDE_ENV_FILE" ]; then
1459
+ [ -f "$CLAUDE_ENV_FILE" ] && [ ! -L "$CLAUDE_ENV_FILE" ] || cloud_setup_incomplete 'session environment must be a regular file; check its path and rerun start'
1460
+ fi
1461
+ cloud_env_temporary="$(umask 077; mktemp "\${CLAUDE_ENV_FILE}.XXXXXX")" || cloud_setup_incomplete 'session environment could not be prepared; check its write access and rerun start'
1462
+ if [ -e "$CLAUDE_ENV_FILE" ] || [ -L "$CLAUDE_ENV_FILE" ]; then
1463
+ cat "$CLAUDE_ENV_FILE" > "$cloud_env_temporary" || { rm -f -- "$cloud_env_temporary"; cloud_setup_incomplete 'session environment could not be read; check its access and rerun start'; }
1464
+ fi
1465
+ if [ -n "$cloud_session_exports" ]; then
1466
+ cloud_session_exports="$cloud_session_exports
1467
+ $cloud_shell_exports"
1468
+ else
1469
+ cloud_session_exports="$cloud_shell_exports"
1470
+ fi
1471
+ printf '\\n%s\\n' "$cloud_session_exports" >> "$cloud_env_temporary" || { rm -f -- "$cloud_env_temporary"; cloud_setup_incomplete 'session environment could not be prepared; check its write access and rerun start'; }
1472
+ mv -f -- "$cloud_env_temporary" "$CLAUDE_ENV_FILE" || { rm -f -- "$cloud_env_temporary"; cloud_setup_incomplete 'session environment could not be persisted; check its write access and rerun start'; }
1473
+ fi
1474
+ fi`
1475
+ }]
1476
+ });
1477
+ const currentMainSessionStartHook = (script) => ({
1478
+ matcher: "",
1479
+ hooks: [{
1480
+ type: "command",
1481
+ command: `if [ "\${CLAUDE_CODE_REMOTE:-}" = "true" ]; then
1482
+ cloud_setup_incomplete() {
1483
+ printf '%s\\n' 'Cloud setup could not establish a verified session environment. From the repository root, run bash .agents/cloud-setup.sh install and then bash .agents/cloud-setup.sh start. Do not assume pinned tools or services are ready until start succeeds.'
1484
+ printf '%s\\n' "cloud-setup: $1" >&2
1485
+ exit 0
1486
+ }
1405
1487
  ${script} start >&2 || cloud_setup_incomplete 'startup failed; run install'
1406
1488
  if [ -n "\${CLAUDE_ENV_FILE:-}" ]; then
1407
1489
  if [ ! -s ${cloudShellProfilePath} ]; then
@@ -1415,7 +1497,11 @@ fi`
1415
1497
  }]
1416
1498
  });
1417
1499
  const cloudSessionStartHook = sessionStartHook(`bash "$CLAUDE_PROJECT_DIR/${cloudSetupPath}"`);
1418
- const previousCloudSessionStartHooks = [releasedSessionStartHook(`bash ${cloudSetupPath}`), releasedSessionStartHook(`bash "$CLAUDE_PROJECT_DIR/${cloudSetupPath}"`)];
1500
+ const previousCloudSessionStartHooks = [
1501
+ releasedSessionStartHook(`bash ${cloudSetupPath}`),
1502
+ releasedSessionStartHook(`bash "$CLAUDE_PROJECT_DIR/${cloudSetupPath}"`),
1503
+ currentMainSessionStartHook(`bash "$CLAUDE_PROJECT_DIR/${cloudSetupPath}"`)
1504
+ ];
1419
1505
  const cloudAttribution = {
1420
1506
  commit: "",
1421
1507
  pr: ""
@@ -1696,7 +1782,7 @@ const isDockerDefinitionPath = (file) => {
1696
1782
  const isShellScript = (file, text = "") => !excludedInputPath(file) && (/\.(?:sh|bash|zsh)$/.test(file) || /^#![ \t]*(?:\/(?:[^ \t\r\n]+\/)*(?:bash|dash|ksh|zsh|sh)|\/usr\/bin\/env[ \t]+(?:-S[ \t]+)?(?:bash|dash|ksh|zsh|sh))(?=[ \t\r\n]|$)/.test(text));
1697
1783
  /** Lockfiles establish ecosystem presence without reading their dependency graphs. */
1698
1784
  const toolchainInputKind = (file, text = "") => {
1699
- if (file === ".agents/cloud-setup.sh" || file === ".claude/settings.json" || file === "Cargo.lock") return "config";
1785
+ if (file === "bunfig.toml" || file === ".agents/cloud-setup.sh" || file === ".claude/settings.json" || file === "Cargo.lock") return "config";
1700
1786
  if (githubAutomationFileKind(file) !== void 0) return "config";
1701
1787
  if (excludedInputPath(file)) return void 0;
1702
1788
  if (dependabotManifestEcosystem(file) !== void 0 || pythonDependencyManifestKind(file) === "pipfile-lock" || javascriptDependencyLockfiles.some((name) => file.split("/").at(-1) === name) || /(?:^|\/)uv\.lock$/.test(file)) return "presence";