svelte-vitals 0.31.1 → 0.33.0

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/bin.js CHANGED
@@ -9,7 +9,7 @@ import {
9
9
  readCoreVersion,
10
10
  readPackageVersion,
11
11
  run
12
- } from "./chunk-3YO2A3YF.js";
12
+ } from "./chunk-CWCO6A5B.js";
13
13
 
14
14
  // src/bin.ts
15
15
  import mri3 from "mri";
@@ -341,12 +341,6 @@ function isConfigTargetId(id) {
341
341
  return CONFIG_TARGETS.some((t) => t.id === id);
342
342
  }
343
343
 
344
- // src/ci/action-pin-comment.ts
345
- function actionPinComment(version) {
346
- return `action-v${version}`;
347
- }
348
- var ACTION_PIN_COMMENT_RE = /#\s*(?:action-v|@svelte-vitals\/action@)(\S+)/;
349
-
350
344
  // src/ci/workflow.ts
351
345
  var WORKFLOW_PATH = ".github/workflows/svelte-vitals.yml";
352
346
  var CHECKOUT_SHA = "9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0";
@@ -377,7 +371,7 @@ function buildWorkflowYaml(opts) {
377
371
  ` - uses: actions/checkout@${CHECKOUT_SHA} # ${CHECKOUT_VERSION}`,
378
372
  " with:",
379
373
  " fetch-depth: 0",
380
- ` - uses: oekazuma/svelte-vitals/packages/action@${actionSha} # ${actionPinComment(actionVersion)}`,
374
+ ` - uses: oekazuma/svelte-vitals-action@${actionSha} # v${actionVersion}`,
381
375
  " with:",
382
376
  " diff: origin/${{ github.base_ref }}",
383
377
  " baseline: origin/${{ github.base_ref }}",
@@ -1004,8 +998,8 @@ function readInstalledViteVersion(io) {
1004
998
  }
1005
999
 
1006
1000
  // src/ci/action-pin.generated.ts
1007
- var ACTION_SHA = "7ae39edda8bfbaba16ddb6c24871619a9ebe0a5d";
1008
- var ACTION_VERSION = "0.3.7";
1001
+ var ACTION_SHA = "67ec0af79398845d01e4371d4953d08f6f6a244f";
1002
+ var ACTION_VERSION = "0.4.0";
1009
1003
 
1010
1004
  // src/install/index.ts
1011
1005
  function detectPackageManagerNear(io, appDir) {
@@ -1577,8 +1571,12 @@ import { join as join5 } from "path";
1577
1571
  import mri2 from "mri";
1578
1572
 
1579
1573
  // src/ci/upgrade.ts
1580
- var ACTION_USES_LINE = /^(?<indent>\s*-\s*uses:\s*(?:&\S+\s+)?oekazuma\/svelte-vitals\/packages\/action@)(?<ref>[^\s#]+)(?<comment>\s*#.*)?$/;
1581
- var LEGACY_COMMENT = /#\s*@svelte-vitals\/action@/;
1574
+ var CANONICAL_PATH = "oekazuma/svelte-vitals-action";
1575
+ var ACTION_USES_LINE = /^(?<indent>\s*-\s*uses:\s*(?:&\S+\s+)?)(?<repoPath>oekazuma\/svelte-vitals(?:-action|\/packages\/action))@(?<ref>[^\s#]+)(?<comment>\s*#.*)?$/;
1576
+ var PIN_COMMENT_RE = /#\s*(?:v|action-v|@svelte-vitals\/action@)(\S+)/;
1577
+ function isCanonicalComment(comment, version) {
1578
+ return comment.trim() === `# v${version}`;
1579
+ }
1582
1580
  function upgradeActionPin(content, sha, version) {
1583
1581
  const lines = content.split("\n");
1584
1582
  let replaced = 0;
@@ -1588,17 +1586,16 @@ function upgradeActionPin(content, sha, version) {
1588
1586
  const bare = eol ? line.slice(0, -1) : line;
1589
1587
  const match = ACTION_USES_LINE.exec(bare);
1590
1588
  if (!match || !match.groups) return line;
1591
- const { indent: indent2, ref } = match.groups;
1592
- if (indent2 === void 0 || ref === void 0) return line;
1589
+ const { indent: indent2, repoPath, ref } = match.groups;
1590
+ if (indent2 === void 0 || repoPath === void 0 || ref === void 0) return line;
1593
1591
  const comment = match.groups.comment ?? "";
1594
- const commentMatch = ACTION_PIN_COMMENT_RE.exec(comment);
1595
- const isCanonicalComment = commentMatch !== null && !LEGACY_COMMENT.test(comment);
1596
- if (ref === sha && isCanonicalComment) return line;
1592
+ const commentMatch = PIN_COMMENT_RE.exec(comment);
1593
+ if (ref === sha && isCanonicalComment(comment, version) && repoPath === CANONICAL_PATH) return line;
1597
1594
  if (from === void 0) {
1598
1595
  from = commentMatch ? commentMatch[1] : ref.slice(0, 7);
1599
1596
  }
1600
1597
  replaced += 1;
1601
- return `${indent2}${sha} # ${actionPinComment(version)}${eol}`;
1598
+ return `${indent2}${CANONICAL_PATH}@${sha} # v${version}${eol}`;
1602
1599
  });
1603
1600
  if (replaced === 0) {
1604
1601
  const hasAnyReference = lines.some((line) => ACTION_USES_LINE.test(line.endsWith("\r") ? line.slice(0, -1) : line));
@@ -63,6 +63,38 @@ var ProjectError = class extends Error {
63
63
  }
64
64
  };
65
65
  var ROUTES_DIR = "src/routes";
66
+ var MIN_SVELTE_MAJOR = 5;
67
+ var MIN_KIT_MAJOR = 2;
68
+ function leadingMajor(range) {
69
+ const m = range ? /^(?:[\^~]|>=|<=|>|<|=)?\s*(\d+)/.exec(range.trim()) : null;
70
+ return m ? Number(m[1]) : void 0;
71
+ }
72
+ async function checkVersionFloor(rt, cwd) {
73
+ const pkgPath = rt.join(cwd, "package.json");
74
+ if (!await rt.exists(pkgPath)) return [];
75
+ let pkg;
76
+ try {
77
+ pkg = JSON.parse(await rt.readFile(pkgPath));
78
+ } catch {
79
+ return [];
80
+ }
81
+ const warnings = [];
82
+ const svelteRange = pkg.dependencies?.svelte ?? pkg.devDependencies?.svelte;
83
+ const svelteMajor = leadingMajor(svelteRange);
84
+ if (svelteMajor !== void 0 && svelteMajor < MIN_SVELTE_MAJOR) {
85
+ warnings.push(
86
+ `this project declares svelte "${svelteRange}", but rules assume Svelte ${MIN_SVELTE_MAJOR}+ (runes) \u2014 findings may miss the legacy (export let / $:) equivalent of runes-only checks.`
87
+ );
88
+ }
89
+ const kitRange = pkg.dependencies?.["@sveltejs/kit"] ?? pkg.devDependencies?.["@sveltejs/kit"];
90
+ const kitMajor = leadingMajor(kitRange);
91
+ if (kitMajor !== void 0 && kitMajor < MIN_KIT_MAJOR) {
92
+ warnings.push(
93
+ `this project declares @sveltejs/kit "${kitRange}", but rules assume SvelteKit ${MIN_KIT_MAJOR}+ \u2014 some checks may not apply.`
94
+ );
95
+ }
96
+ return warnings;
97
+ }
66
98
  async function detectProject(rt, cwd) {
67
99
  const pkgPath = rt.join(cwd, "package.json");
68
100
  let hasKitDep = false;
@@ -1376,7 +1408,6 @@ async function analyzeProject(opts = {}) {
1376
1408
  const rt = createNodeRuntime();
1377
1409
  const loaded = await loadConfigFile(cwd);
1378
1410
  const file = loaded?.config;
1379
- const warnings = loaded?.warnings ?? [];
1380
1411
  const weights = opts.weights ?? file?.weights;
1381
1412
  const config = defineConfig({
1382
1413
  treatDynamicAs: opts.treatDynamicAs ?? file?.treatDynamicAs ?? "pass",
@@ -1387,6 +1418,7 @@ async function analyzeProject(opts = {}) {
1387
1418
  ...file?.overrides !== void 0 ? { overrides: file.overrides } : {}
1388
1419
  });
1389
1420
  await detectProject(rt, cwd);
1421
+ const warnings = [...loaded?.warnings ?? [], ...await checkVersionFloor(rt, cwd)];
1390
1422
  const matches = routeMatcher(opts.route);
1391
1423
  const collected = await collectRoutes(rt, cwd, config, opts.parseCache);
1392
1424
  const heads = collected.heads.filter((h) => matches(h.route));
package/dist/index.js CHANGED
@@ -10,7 +10,7 @@ import {
10
10
  routeMatcher,
11
11
  run,
12
12
  spinnerEnabled
13
- } from "./chunk-3YO2A3YF.js";
13
+ } from "./chunk-CWCO6A5B.js";
14
14
  export {
15
15
  ProjectError,
16
16
  analyzeProject,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "svelte-vitals",
3
- "version": "0.31.1",
3
+ "version": "0.33.0",
4
4
  "description": "A SvelteKit SEO checker — not a runtime Web Vitals reporter. Static analysis of your routes' head metadata.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -46,15 +46,16 @@
46
46
  "smol-toml": "^1.7.0",
47
47
  "svelte": "^5.56.6",
48
48
  "tinyglobby": "^0.2.17",
49
- "@svelte-vitals/core": "0.28.0"
49
+ "@svelte-vitals/core": "0.29.0"
50
50
  },
51
51
  "devDependencies": {
52
52
  "@types/estree": "^1.0.9",
53
53
  "@types/node": "^24.13.3"
54
54
  },
55
55
  "scripts": {
56
- "build": "node scripts/gen-action-pin.mjs && tsup",
57
- "typecheck": "node scripts/gen-action-pin.mjs && tsc --noEmit",
58
- "test": "node scripts/gen-action-pin.mjs && vitest run"
56
+ "build": "tsup",
57
+ "typecheck": "tsc --noEmit",
58
+ "test": "vitest run",
59
+ "update-action-pin": "node scripts/gen-action-pin.mjs"
59
60
  }
60
61
  }