vortix-cli 0.1.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.
Files changed (72) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +80 -0
  3. package/dist/adapters/index.d.ts +5 -0
  4. package/dist/adapters/types.d.ts +13 -0
  5. package/dist/checks/accessibility/axe.d.ts +2 -0
  6. package/dist/checks/accessibility/color-contrast.d.ts +2 -0
  7. package/dist/checks/accessibility/run-axe.d.ts +6 -0
  8. package/dist/checks/bugs/anchor-links.d.ts +2 -0
  9. package/dist/checks/bugs/broken-links.d.ts +2 -0
  10. package/dist/checks/bugs/console-errors.d.ts +2 -0
  11. package/dist/checks/bugs/nested-block-elements.d.ts +2 -0
  12. package/dist/checks/bugs/viewport-meta.d.ts +2 -0
  13. package/dist/checks/index.d.ts +2 -0
  14. package/dist/checks/maintainability/dead-css.d.ts +2 -0
  15. package/dist/checks/maintainability/duplication.d.ts +2 -0
  16. package/dist/checks/maintainability/license-check.d.ts +2 -0
  17. package/dist/checks/maintainability/outdated-dependencies.d.ts +2 -0
  18. package/dist/checks/performance/asset-weight.d.ts +2 -0
  19. package/dist/checks/performance/core-web-vitals.d.ts +2 -0
  20. package/dist/checks/performance/image-format.d.ts +2 -0
  21. package/dist/checks/performance/lazy-loading.d.ts +2 -0
  22. package/dist/checks/performance/third-party-impact.d.ts +2 -0
  23. package/dist/checks/privacy/external-fonts.d.ts +2 -0
  24. package/dist/checks/privacy/fingerprinting.d.ts +2 -0
  25. package/dist/checks/privacy/match-domains.d.ts +2 -0
  26. package/dist/checks/privacy/tracker-requests.d.ts +2 -0
  27. package/dist/checks/security/cookie-security.d.ts +2 -0
  28. package/dist/checks/security/dependency-vulnerabilities.d.ts +2 -0
  29. package/dist/checks/security/https-enforced.d.ts +2 -0
  30. package/dist/checks/security/mixed-content.d.ts +2 -0
  31. package/dist/checks/security/security-headers.d.ts +2 -0
  32. package/dist/checks/security/server-info-disclosure.d.ts +2 -0
  33. package/dist/checks/seo/canonical-url.d.ts +2 -0
  34. package/dist/checks/seo/meta-tags.d.ts +2 -0
  35. package/dist/checks/seo/og-images.d.ts +2 -0
  36. package/dist/checks/seo/robots-sitemap.d.ts +2 -0
  37. package/dist/checks/seo/structured-data.d.ts +2 -0
  38. package/dist/chunk-KNVCFVGJ.js +183 -0
  39. package/dist/cli.d.ts +2 -0
  40. package/dist/cli.js +3112 -0
  41. package/dist/commands/check.d.ts +5 -0
  42. package/dist/commands/ci.d.ts +5 -0
  43. package/dist/commands/config.d.ts +1 -0
  44. package/dist/commands/detail-ui.d.ts +2 -0
  45. package/dist/commands/init.d.ts +3 -0
  46. package/dist/commands/progress-ui.d.ts +3 -0
  47. package/dist/core/config.d.ts +6 -0
  48. package/dist/core/define-check.d.ts +2 -0
  49. package/dist/core/detail.d.ts +2 -0
  50. package/dist/core/finding.d.ts +2 -0
  51. package/dist/core/load-checks.d.ts +10 -0
  52. package/dist/core/messages.d.ts +3 -0
  53. package/dist/core/report.d.ts +15 -0
  54. package/dist/core/runner.d.ts +64 -0
  55. package/dist/core/score.d.ts +9 -0
  56. package/dist/core/types.d.ts +162 -0
  57. package/dist/dynamic/serve.d.ts +5 -0
  58. package/dist/dynamic/session.d.ts +8 -0
  59. package/dist/index.d.ts +3 -0
  60. package/dist/index.js +8 -0
  61. package/dist/utils/box.d.ts +19 -0
  62. package/dist/utils/budget.d.ts +2 -0
  63. package/dist/utils/clipboard.d.ts +1 -0
  64. package/dist/utils/exec.d.ts +18 -0
  65. package/dist/utils/github-workflow.d.ts +9 -0
  66. package/dist/utils/glob.d.ts +3 -0
  67. package/dist/utils/html.d.ts +2 -0
  68. package/dist/utils/humanize.d.ts +1 -0
  69. package/dist/utils/package-manager.d.ts +3 -0
  70. package/dist/utils/pages.d.ts +2 -0
  71. package/dist/utils/resolve-bin.d.ts +1 -0
  72. package/package.json +87 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Vortix Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,80 @@
1
+ # Vortix CLI
2
+
3
+ [![npm](https://img.shields.io/npm/v/vortix-cli.svg)](https://www.npmjs.com/package/vortix-cli)
4
+ [![CI](https://github.com/jannikmenzel/vortix-cli/actions/workflows/ci.yml/badge.svg)](https://github.com/jannikmenzel/vortix-cli/actions/workflows/ci.yml)
5
+ [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE)
6
+ [![Node](https://img.shields.io/badge/node-%3E%3D20-339933?logo=node.js&logoColor=white)](package.json)
7
+
8
+ Local, no-account CLI that audits static sites for performance, security, accessibility, bugs, SEO, maintainability & privacy issues. Auto-detects Astro, Eleventy, Next.js, Nuxt, SvelteKit, Gatsby, Docusaurus, VuePress, Gridsome, Vite, MkDocs, Zola, Hugo, Hexo, Jekyll — or any generator via its output folder.
9
+
10
+ ## Quick Start
11
+
12
+ ```bash
13
+ npm install -D vortix-cli
14
+ npx vortix init
15
+ npx vortix check
16
+ ```
17
+
18
+ Node.js `>=20` required. Chromium downloads automatically via `@playwright/browser-chromium`.
19
+
20
+ ## Commands
21
+
22
+ ```bash
23
+ npx vortix check
24
+ npx vortix check https://example.com
25
+ npx vortix ci
26
+ ```
27
+
28
+ Checks run in one of three modes: **static** (built files on disk), **dynamic** (headless browser), **live** (a real HTTP request — only when you pass a URL, otherwise shown as skipped).
29
+
30
+ ## Config
31
+
32
+ `vortix init` writes `.vortix/config.json`:
33
+
34
+ ```json
35
+ {
36
+ "target": { "adapter": "astro" },
37
+ "categories": { "performance": true, "security": true, "privacy": false },
38
+ "failOn": "error",
39
+ "performance": { "budgets": { "lcpMs": 2500, "cls": 0.1, "maxPageWeightKb": 1500 } },
40
+ "checks": ["./checks/no-todo-comments.js"]
41
+ }
42
+ ```
43
+
44
+ ## Custom checks
45
+
46
+ ```js
47
+ // ./checks/no-todo-comments.js
48
+ import { defineCheck } from "vortix-cli";
49
+
50
+ export default defineCheck({
51
+ id: "custom.no-todo-comments",
52
+ category: "maintainability",
53
+ mode: "static",
54
+ severity: "warn",
55
+ async run(ctx) {
56
+ const files = await ctx.glob("src/**/*.{astro,md}");
57
+ return files.filter((f) => ctx.readFile(f).includes("TODO")).map((f) => ctx.finding({ message: "Found a TODO", file: f }));
58
+ },
59
+ });
60
+ ```
61
+
62
+ Reference a local path or a published npm package in `checks: []`.
63
+
64
+ ## Included checks
65
+
66
+ | Category | Checks |
67
+ |---|---|
68
+ | Performance | Core Web Vitals budget, page weight & image size, image formats, lazy loading, third-party impact |
69
+ | Security | `npm audit`, mixed content, security headers, HTTPS enforcement, server info disclosure, cookie security |
70
+ | Accessibility | WCAG 2.1 A/AA (axe-core), color contrast |
71
+ | Bugs | Broken links/images/assets, dangling anchors, invalid nesting, viewport meta, console errors |
72
+ | SEO | Meta/OG tags, OG images, canonical URL, structured data, robots.txt/sitemap |
73
+ | Maintainability | Code duplication, outdated deps, dead CSS, license check |
74
+ | Privacy | Tracking requests, external fonts/APIs, fingerprinting APIs |
75
+
76
+ Each run ends in a 0–100 score (A–F), averaged per-check → per-category so no category drowns out another. Any `error`-severity finding caps the grade at "C", regardless of the average.
77
+
78
+ ## License
79
+
80
+ [MIT](./LICENSE)
@@ -0,0 +1,5 @@
1
+ import type { ResolvedConfig } from "@core/types.js";
2
+ import type { Adapter } from "./types.js";
3
+ export declare const BUILT_IN_ADAPTERS: Adapter[];
4
+ export declare function detectAdapter(cwd: string): Adapter | undefined;
5
+ export declare function resolveAdapter(cwd: string, target: ResolvedConfig["target"], build: boolean): Adapter;
@@ -0,0 +1,13 @@
1
+ export interface Adapter {
2
+ name: string;
3
+ detect(cwd: string): boolean;
4
+ buildCommand: string;
5
+ outputDir: string;
6
+ /**
7
+ * Resolves the directory that is actually scanned and served, for build tools that nest the
8
+ * servable output in a subfolder of `outputDir` (e.g. Astro's SSR adapters split it into
9
+ * `dist/client` and `dist/server`). Called after the build with the resolved absolute
10
+ * `outputDir` and returns an absolute path. Defaults to `outputDir` when omitted.
11
+ */
12
+ resolveServeDir?(outputDir: string): string;
13
+ }
@@ -0,0 +1,2 @@
1
+ declare const _default: import("../../index.js").CheckDefinition;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import("@core/types.js").CheckDefinition;
2
+ export default _default;
@@ -0,0 +1,6 @@
1
+ import { AxeBuilder } from "@axe-core/playwright";
2
+ import type { Severity } from "@core/types.js";
3
+ import type { Page } from "playwright";
4
+ export type AxeResults = Awaited<ReturnType<AxeBuilder["analyze"]>>;
5
+ export declare const IMPACT_SEVERITY: Record<string, Severity>;
6
+ export declare function runAxe(page: Page): Promise<AxeResults>;
@@ -0,0 +1,2 @@
1
+ declare const _default: import("@core/types.js").CheckDefinition;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import("@core/types.js").CheckDefinition;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import("../..").CheckDefinition;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import("@core/types.js").CheckDefinition;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import("@core/types.js").CheckDefinition;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ import type { CheckDefinition } from "@core/types.js";
2
+ export declare const BUILT_IN_CHECKS: CheckDefinition[];
@@ -0,0 +1,2 @@
1
+ declare const _default: import("@core/types.js").CheckDefinition;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import("../..").CheckDefinition;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import("@core/types.js").CheckDefinition;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import("../..").CheckDefinition;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import("@core/types.js").CheckDefinition;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import("@core/types.js").CheckDefinition;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import("@core/types.js").CheckDefinition;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import("@core/types.js").CheckDefinition;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import("@core/types.js").CheckDefinition;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import("../../index.js").CheckDefinition;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import("@core/types.js").CheckDefinition;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ import type { CapturedNetworkRequest } from "@core/types.js";
2
+ export declare function uniqueUrlsMatchingDomains(requests: CapturedNetworkRequest[], domains: string[]): string[];
@@ -0,0 +1,2 @@
1
+ declare const _default: import("../../index.js").CheckDefinition;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import("@core/types.js").CheckDefinition;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import("@core/types.js").CheckDefinition;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import("../..").CheckDefinition;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import("@core/types.js").CheckDefinition;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import("@core/types.js").CheckDefinition;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import("@core/types.js").CheckDefinition;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import("@core/types.js").CheckDefinition;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import("@core/types.js").CheckDefinition;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import("@core/types.js").CheckDefinition;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import("@core/types.js").CheckDefinition;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import("@core/types.js").CheckDefinition;
2
+ export default _default;
@@ -0,0 +1,183 @@
1
+ // src/messages/en.json
2
+ var en_default = {
3
+ cli: {
4
+ description: "Swiss-army-knife CLI for quality checks on static websites.",
5
+ init: { description: "Interactively configure vortix for this project" },
6
+ config: { description: "Adjust vortix settings for this project" },
7
+ check: { description: "Run checks locally with a human-readable report" },
8
+ ci: { description: "Run checks non-interactively \u2014 JSON output + exit code for automation" }
9
+ },
10
+ errors: {
11
+ outputDirMissing: 'Output directory "{dir}" does not exist after the build. Check target.outputDir in .vortix/config.json.',
12
+ noPagesFound: 'No HTML pages found in "{dir}" \u2014 nothing to check. This usually means target.outputDir is misconfigured or the build produced no output.',
13
+ unknownAdapter: 'Unknown adapter "{name}". Available: {available}',
14
+ noGeneratorOutputDir: "No static site generator detected. Set target.outputDir manually in .vortix/config.json.",
15
+ noGeneratorBuildCommand: "No static site generator detected. Set target.buildCommand manually, or build: false if the output is already built.",
16
+ configRead: "Failed to read .vortix/config.json: {message}",
17
+ configParse: "Failed to parse .vortix/config.json: {message}",
18
+ checkCrashed: "Check crashed: {message}",
19
+ buildFailed: 'Build command "{command}" failed: {message}',
20
+ pageCrashed: 'Page "{url}" could not be loaded for dynamic checks: {message}'
21
+ },
22
+ progress: {
23
+ building: "Building project",
24
+ buildDone: "Build done",
25
+ staticStart: "Static checks ({index}/{total})",
26
+ staticRunning: "Static checks ({index}/{total}): {name}",
27
+ staticDone: "Static checks done ({total})",
28
+ dynamicStart: "Dynamic checks ({index}/{total})",
29
+ dynamicPageRunning: "Checking page {index}/{total}: {urlPath}",
30
+ dynamicPageDone: "Dynamic checks ({index}/{total})",
31
+ dynamicDone: "Dynamic checks done ({total} pages)",
32
+ playwrightMissing: "Playwright browsers not installed \u2014 run `npx playwright install chromium`",
33
+ liveStart: "Live checks against {url} ({total})",
34
+ liveRunning: "Live checks ({index}/{total}): {name}",
35
+ liveDone: "Live checks done ({total})",
36
+ liveNoUrl: "no live URL given \u2014 run `vortix check <url>` (or `vortix ci <url>`) to include this check"
37
+ },
38
+ init: {
39
+ intro: "Vortix init",
40
+ detectedStack: "Detected stack: {name}. Use it?",
41
+ noGeneratorDetected: "No known static site generator detected.",
42
+ pickStack: "Which stack are you using?",
43
+ manualOption: "Other / configure manually",
44
+ pickCategories: "Which categories should be enabled?",
45
+ pickFailOn: "At which severity level should `vortix ci` fail?",
46
+ failOnRecommended: "error (recommended)",
47
+ configExists: ".vortix/config.json already exists. Overwrite?",
48
+ aborted: "Aborted.",
49
+ abortedKept: "Aborted \u2014 existing config was not changed.",
50
+ done: "Configuration saved to .vortix/config.json. Get started with: {cmd}",
51
+ pickGithubWorkflow: "Set up a GitHub Actions workflow that runs `vortix ci` on every push and pull request?",
52
+ githubWorkflowExists: "{path} already exists. Overwrite?",
53
+ githubWorkflowDone: "GitHub Actions workflow written to {path}",
54
+ githubWorkflowSkipped: "Skipped \u2014 existing workflow was not changed."
55
+ },
56
+ config: {
57
+ intro: "Vortix config",
58
+ corrupt: ".vortix/config.json is corrupt, starting fresh.",
59
+ noConfig: "No config found. Let's set one up.",
60
+ done: "Configuration updated in .vortix/config.json"
61
+ },
62
+ report: {
63
+ header: "Vortix \u2014 adapter: {adapter} \xB7 static checks: {totalPages} pages \xB7 dynamic checks: {pagesChecked}/{totalPages} pages",
64
+ headerLiveSuffix: " \xB7 live checks: {url}",
65
+ moreFindingsSuffix: " (+{count} more)",
66
+ configErrorPrefix: "Custom check failed to load",
67
+ overallScoreLabel: "Overall score",
68
+ byCategoryLabel: "By category",
69
+ scoreCappedNote: "capped at C: at least one error-level finding",
70
+ scorePartialPagesNote: "based on {pagesChecked}/{totalPages} pages \u2014 some dynamic checks (accessibility, performance, console errors, tracking, fonts) were skipped. Use `vortix check` for a full-site score.",
71
+ scoreLiveSkippedNote: "live checks (security headers, HTTPS, cookies, ...) were skipped \u2014 pass a URL to include them, e.g. `vortix check https://example.com`.",
72
+ copyPrompt: "Copy report to clipboard?",
73
+ copied: "Report copied to clipboard",
74
+ copyFailed: "Could not copy report to clipboard \u2014 no clipboard utility found (install xclip, xsel, or wl-copy on Linux)",
75
+ detailSelectPrompt: "Select a check for details",
76
+ detailDoneOption: "Done \u2014 continue",
77
+ detailContinuePrompt: "Press Enter to continue",
78
+ detailBackOption: "Back to the check list",
79
+ detailStatusPass: "Status: passed",
80
+ detailStatusIssues: "Status: {summary}",
81
+ detailStatusSkipped: "Status: skipped \u2014 {reason}",
82
+ detailFindingsHeader: "Findings:",
83
+ detailNoFindings: "No issues found.",
84
+ detailValuesHeader: "Measured values:",
85
+ detailNoValues: "No measured values reported by this check."
86
+ }
87
+ };
88
+
89
+ // src/core/messages.ts
90
+ function resolve(key) {
91
+ const value = key.split(".").reduce((node, segment) => node?.[segment], en_default);
92
+ if (typeof value !== "string") throw new Error(`Unknown message key: "${key}"`);
93
+ return value;
94
+ }
95
+ function t(key, params) {
96
+ const template = resolve(key);
97
+ if (!params) return template;
98
+ return template.replace(/{(\w+)}/g, (match, name) => name in params ? String(params[name]) : match);
99
+ }
100
+
101
+ // src/core/config.ts
102
+ import { existsSync, readFileSync } from "fs";
103
+ import path from "path";
104
+ var CONFIG_DIR = ".vortix";
105
+ var CONFIG_FILE = "config.json";
106
+ var DEFAULTS = {
107
+ build: true,
108
+ failOn: "error",
109
+ target: {},
110
+ categories: {
111
+ performance: true,
112
+ security: true,
113
+ accessibility: true,
114
+ bugs: true,
115
+ seo: true,
116
+ maintainability: true,
117
+ privacy: true
118
+ },
119
+ checks: [],
120
+ disabledChecks: [],
121
+ severity: {},
122
+ performance: {
123
+ budgets: { lcpMs: 2500, cls: 0.1, maxPageWeightKb: 1500, maxImageKb: 300 }
124
+ },
125
+ privacy: { trackerDomains: [] }
126
+ };
127
+ function defineConfig(config) {
128
+ return config;
129
+ }
130
+ function getConfigPath(cwd) {
131
+ return path.join(cwd, CONFIG_DIR, CONFIG_FILE);
132
+ }
133
+ function loadConfig(cwd) {
134
+ const configPath = getConfigPath(cwd);
135
+ if (!existsSync(configPath)) {
136
+ return mergeConfig(cwd, {});
137
+ }
138
+ let raw;
139
+ try {
140
+ raw = readFileSync(configPath, "utf-8");
141
+ } catch (error) {
142
+ throw new Error(t("errors.configRead", { message: error.message }), { cause: error });
143
+ }
144
+ let userConfig;
145
+ try {
146
+ userConfig = JSON.parse(raw);
147
+ } catch (error) {
148
+ throw new Error(t("errors.configParse", { message: error.message }), { cause: error });
149
+ }
150
+ return mergeConfig(cwd, userConfig);
151
+ }
152
+ function mergeConfig(cwd, user) {
153
+ return {
154
+ cwd,
155
+ build: user.build ?? DEFAULTS.build,
156
+ failOn: user.failOn ?? DEFAULTS.failOn,
157
+ target: { ...DEFAULTS.target, ...user.target },
158
+ categories: { ...DEFAULTS.categories, ...user.categories },
159
+ checks: user.checks ?? DEFAULTS.checks,
160
+ disabledChecks: user.disabledChecks ?? DEFAULTS.disabledChecks,
161
+ severity: { ...DEFAULTS.severity, ...user.severity },
162
+ performance: {
163
+ budgets: { ...DEFAULTS.performance.budgets, ...user.performance?.budgets }
164
+ },
165
+ privacy: {
166
+ trackerDomains: [...DEFAULTS.privacy.trackerDomains, ...user.privacy?.trackerDomains ?? []]
167
+ }
168
+ };
169
+ }
170
+
171
+ // src/core/define-check.ts
172
+ function defineCheck(def) {
173
+ return def;
174
+ }
175
+
176
+ export {
177
+ t,
178
+ CONFIG_DIR,
179
+ defineConfig,
180
+ getConfigPath,
181
+ loadConfig,
182
+ defineCheck
183
+ };
package/dist/cli.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};