qualety 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.
- package/LICENSE +21 -0
- package/dist/biome.d.ts +18 -0
- package/dist/biome.d.ts.map +1 -0
- package/dist/biome.js +312 -0
- package/dist/biome.js.map +1 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +149 -0
- package/dist/cli.js.map +1 -0
- package/dist/companion-closure.d.ts +2 -0
- package/dist/companion-closure.d.ts.map +1 -0
- package/dist/companion-closure.js +29 -0
- package/dist/companion-closure.js.map +1 -0
- package/dist/config.d.ts +51 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +222 -0
- package/dist/config.js.map +1 -0
- package/dist/default-providers.d.ts +5 -0
- package/dist/default-providers.d.ts.map +1 -0
- package/dist/default-providers.js +5 -0
- package/dist/default-providers.js.map +1 -0
- package/dist/define-rule.d.ts +9 -0
- package/dist/define-rule.d.ts.map +1 -0
- package/dist/define-rule.js +5 -0
- package/dist/define-rule.js.map +1 -0
- package/dist/define-rule.types.d.ts +2 -0
- package/dist/define-rule.types.d.ts.map +1 -0
- package/dist/define-rule.types.js +33 -0
- package/dist/define-rule.types.js.map +1 -0
- package/dist/engine.d.ts +10 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +447 -0
- package/dist/engine.js.map +1 -0
- package/dist/git-seed.d.ts +2 -0
- package/dist/git-seed.d.ts.map +1 -0
- package/dist/git-seed.js +52 -0
- package/dist/git-seed.js.map +1 -0
- package/dist/index.d.ts +138 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/record.d.ts +2 -0
- package/dist/record.d.ts.map +1 -0
- package/dist/record.js +4 -0
- package/dist/record.js.map +1 -0
- package/dist/ruff.d.ts +17 -0
- package/dist/ruff.d.ts.map +1 -0
- package/dist/ruff.js +303 -0
- package/dist/ruff.js.map +1 -0
- package/dist/rule-options.d.ts +3 -0
- package/dist/rule-options.d.ts.map +1 -0
- package/dist/rule-options.js +78 -0
- package/dist/rule-options.js.map +1 -0
- package/dist/run-command.d.ts +13 -0
- package/dist/run-command.d.ts.map +1 -0
- package/dist/run-command.js +60 -0
- package/dist/run-command.js.map +1 -0
- package/dist/schemas.d.ts +125 -0
- package/dist/schemas.d.ts.map +1 -0
- package/dist/schemas.js +79 -0
- package/dist/schemas.js.map +1 -0
- package/dist/standalone-wasm.d.ts +7 -0
- package/dist/standalone-wasm.d.ts.map +1 -0
- package/dist/standalone-wasm.js +31 -0
- package/dist/standalone-wasm.js.map +1 -0
- package/dist/typescript-frontend.d.ts +4 -0
- package/dist/typescript-frontend.d.ts.map +1 -0
- package/dist/typescript-frontend.js +105 -0
- package/dist/typescript-frontend.js.map +1 -0
- package/package.json +46 -0
package/dist/config.js
ADDED
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
|
|
2
|
+
if (typeof path === "string" && /^\.\.?\//.test(path)) {
|
|
3
|
+
return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
|
|
4
|
+
return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
|
|
5
|
+
});
|
|
6
|
+
}
|
|
7
|
+
return path;
|
|
8
|
+
};
|
|
9
|
+
import { access, readFile } from "node:fs/promises";
|
|
10
|
+
import { dirname, join } from "node:path";
|
|
11
|
+
import { pathToFileURL } from "node:url";
|
|
12
|
+
import { z } from "zod";
|
|
13
|
+
import { isRecord } from "./record.js";
|
|
14
|
+
import { ruleSettingSchema, userBiomeSchema, userRuffSchema } from "./schemas.js";
|
|
15
|
+
export const userConfigSchema = z
|
|
16
|
+
.object({
|
|
17
|
+
plugins: z.array(z.string()),
|
|
18
|
+
rules: z.record(z.string(), ruleSettingSchema).optional(),
|
|
19
|
+
include: z.array(z.string()).optional(),
|
|
20
|
+
exclude: z.array(z.string()).optional(),
|
|
21
|
+
biome: z.union([z.literal(false), userBiomeSchema]).optional(),
|
|
22
|
+
ruff: z.union([z.literal(false), userRuffSchema]).optional(),
|
|
23
|
+
})
|
|
24
|
+
.strict();
|
|
25
|
+
// ponytail: bun --compile embeds no node_modules, so the standalone build can
|
|
26
|
+
// resolve neither the Biome binary nor the Ruff wasm module. Gate the two
|
|
27
|
+
// composed tools off here rather than letting resolve throw at check time.
|
|
28
|
+
export function isStandalone() {
|
|
29
|
+
return typeof STANDALONE !== "undefined" && STANDALONE;
|
|
30
|
+
}
|
|
31
|
+
export const CONFIG_FILENAMES = [
|
|
32
|
+
"qualety.config.ts",
|
|
33
|
+
"qualety.config.mts",
|
|
34
|
+
"qualety.config.js",
|
|
35
|
+
"qualety.config.mjs",
|
|
36
|
+
"qualety.config.json",
|
|
37
|
+
];
|
|
38
|
+
export class ConfigError extends Error {
|
|
39
|
+
constructor(message) {
|
|
40
|
+
super(message);
|
|
41
|
+
this.name = "ConfigError";
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
export function validateConfig(raw) {
|
|
45
|
+
const result = userConfigSchema.safeParse(raw);
|
|
46
|
+
if (result.success) {
|
|
47
|
+
return result.data;
|
|
48
|
+
}
|
|
49
|
+
throw mapConfigZodError(raw, result.error);
|
|
50
|
+
}
|
|
51
|
+
export async function loadConfig(cwd) {
|
|
52
|
+
let dir = cwd;
|
|
53
|
+
while (true) {
|
|
54
|
+
for (const name of CONFIG_FILENAMES) {
|
|
55
|
+
const candidate = join(dir, name);
|
|
56
|
+
try {
|
|
57
|
+
await access(candidate);
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
return { path: candidate, config: await readConfigFile(candidate) };
|
|
63
|
+
}
|
|
64
|
+
const parent = dirname(dir);
|
|
65
|
+
if (parent === dir) {
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
dir = parent;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
export async function readConfigFile(path) {
|
|
72
|
+
if (path.endsWith(".json")) {
|
|
73
|
+
let text;
|
|
74
|
+
try {
|
|
75
|
+
text = await readFile(path, "utf8");
|
|
76
|
+
}
|
|
77
|
+
catch (e) {
|
|
78
|
+
throw new ConfigError(`Failed to read ${path}: ${messageOf(e)}`);
|
|
79
|
+
}
|
|
80
|
+
let parsed;
|
|
81
|
+
try {
|
|
82
|
+
parsed = JSON.parse(text);
|
|
83
|
+
}
|
|
84
|
+
catch (e) {
|
|
85
|
+
throw new ConfigError(`Invalid JSON in ${path}: ${messageOf(e)}`);
|
|
86
|
+
}
|
|
87
|
+
return validateConfig(parsed);
|
|
88
|
+
}
|
|
89
|
+
let loaded;
|
|
90
|
+
try {
|
|
91
|
+
loaded = await import(__rewriteRelativeImportExtension(pathToFileURL(path).href));
|
|
92
|
+
}
|
|
93
|
+
catch (e) {
|
|
94
|
+
throw new ConfigError(`Failed to load ${path}: ${messageOf(e)}`);
|
|
95
|
+
}
|
|
96
|
+
if (!isRecord(loaded) || !("default" in loaded)) {
|
|
97
|
+
throw new ConfigError(`${path} must have a default export`);
|
|
98
|
+
}
|
|
99
|
+
return validateConfig(loaded.default);
|
|
100
|
+
}
|
|
101
|
+
function mapConfigZodError(raw, error) {
|
|
102
|
+
if (raw === null || typeof raw !== "object" || Array.isArray(raw)) {
|
|
103
|
+
return new ConfigError("Config must be an object");
|
|
104
|
+
}
|
|
105
|
+
const extraKeys = unrecognizedConfigKeys(error);
|
|
106
|
+
if (extraKeys.length > 0) {
|
|
107
|
+
const allowed = Object.keys(userConfigSchema.shape).join(", ");
|
|
108
|
+
return new ConfigError(`Unknown config key${extraKeys.length > 1 ? "s" : ""}: ${extraKeys.join(", ")}. Allowed keys: ${allowed}.`);
|
|
109
|
+
}
|
|
110
|
+
if (error.issues.some((issue) => {
|
|
111
|
+
const key = issue.path[0];
|
|
112
|
+
return (key === "plugins" && issue.code === "invalid_type" && valueAt(raw, issue.path) === undefined);
|
|
113
|
+
})) {
|
|
114
|
+
return new ConfigError('Config must include "plugins"');
|
|
115
|
+
}
|
|
116
|
+
return (firstFieldError(raw, error) ?? new ConfigError(error.issues[0]?.message ?? "Invalid config"));
|
|
117
|
+
}
|
|
118
|
+
function firstFieldError(raw, error) {
|
|
119
|
+
for (const issue of error.issues) {
|
|
120
|
+
const mapped = mapFieldIssue(raw, issue);
|
|
121
|
+
if (mapped !== undefined) {
|
|
122
|
+
return mapped;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return undefined;
|
|
126
|
+
}
|
|
127
|
+
function mapFieldIssue(raw, issue) {
|
|
128
|
+
const key = issue.path[0];
|
|
129
|
+
if (key === "plugins" || key === "include" || key === "exclude") {
|
|
130
|
+
return new ConfigError(`"${String(key)}" must be an array of strings`);
|
|
131
|
+
}
|
|
132
|
+
if (key === "biome") {
|
|
133
|
+
return mapComposedLinterIssue(issue, "biome", "expected group/name.");
|
|
134
|
+
}
|
|
135
|
+
if (key === "ruff") {
|
|
136
|
+
return mapComposedLinterIssue(issue, "ruff", "expected a Ruff code or prefix.");
|
|
137
|
+
}
|
|
138
|
+
if (key !== "rules") {
|
|
139
|
+
return undefined;
|
|
140
|
+
}
|
|
141
|
+
if (issue.path.length === 1) {
|
|
142
|
+
return new ConfigError('"rules" must be an object of rule ids to "error" | "warn" | "off" or [severity, options]');
|
|
143
|
+
}
|
|
144
|
+
const id = issue.path[1];
|
|
145
|
+
if (typeof id !== "string") {
|
|
146
|
+
return undefined;
|
|
147
|
+
}
|
|
148
|
+
const value = valueAt(raw, ["rules", id]);
|
|
149
|
+
if (isRecord(value)) {
|
|
150
|
+
return new ConfigError(`Invalid rules entry for "${id}": options require a severity. Use "error", "warn", or "off", or ["error" | "warn", options].`);
|
|
151
|
+
}
|
|
152
|
+
if (!Array.isArray(value)) {
|
|
153
|
+
return new ConfigError(`Invalid severity for "${id}": ${JSON.stringify(value)}. Use "error", "warn", or "off".`);
|
|
154
|
+
}
|
|
155
|
+
if (value.length !== 2) {
|
|
156
|
+
return new ConfigError(`Invalid rules entry for "${id}": expected [severity, options].`);
|
|
157
|
+
}
|
|
158
|
+
if (value[0] === "off") {
|
|
159
|
+
return new ConfigError(`Rule "${id}" is "off"; options are not allowed.`);
|
|
160
|
+
}
|
|
161
|
+
if (!isRecord(value[1])) {
|
|
162
|
+
return new ConfigError(`Invalid options for "${id}": options must be an object.`);
|
|
163
|
+
}
|
|
164
|
+
return new ConfigError(`Invalid severity for "${id}": ${JSON.stringify(value[0])}. Use "error", "warn", or "off".`);
|
|
165
|
+
}
|
|
166
|
+
function mapComposedLinterIssue(issue, tool, idHint) {
|
|
167
|
+
if (issue.code === "invalid_union") {
|
|
168
|
+
for (const branch of issue.errors) {
|
|
169
|
+
const mapped = mapComposedLinterUnionBranch(branch, tool, idHint);
|
|
170
|
+
if (mapped !== undefined) {
|
|
171
|
+
return mapped;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
if (issue.code === "unrecognized_keys") {
|
|
176
|
+
return new ConfigError(`Unknown ${tool} key${issue.keys.length > 1 ? "s" : ""}: ${issue.keys.join(", ")}.`);
|
|
177
|
+
}
|
|
178
|
+
if (issue.path[1] === "rules" && typeof issue.path[2] === "string") {
|
|
179
|
+
return new ConfigError(`Invalid ${tool === "biome" ? "Biome" : "Ruff"} rule id ${JSON.stringify(issue.path[2])}; ${idHint}`);
|
|
180
|
+
}
|
|
181
|
+
if (issue.path[1] === "format") {
|
|
182
|
+
return new ConfigError(`"${tool}.format" must be a boolean`);
|
|
183
|
+
}
|
|
184
|
+
return new ConfigError(`Invalid ${tool} config: ${issue.message}`);
|
|
185
|
+
}
|
|
186
|
+
function mapComposedLinterUnionBranch(branch, tool, idHint) {
|
|
187
|
+
for (const inner of branch) {
|
|
188
|
+
if (inner.code === "unrecognized_keys") {
|
|
189
|
+
return new ConfigError(`Unknown ${tool} key${inner.keys.length > 1 ? "s" : ""}: ${inner.keys.join(", ")}.`);
|
|
190
|
+
}
|
|
191
|
+
if (inner.code === "invalid_key") {
|
|
192
|
+
const id = inner.path.find((part) => part !== "rules") ?? inner.path.at(-1);
|
|
193
|
+
const label = tool === "biome" ? "Biome" : "Ruff";
|
|
194
|
+
return new ConfigError(`Invalid ${label} rule id ${JSON.stringify(String(id))}; ${idHint}`);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
return undefined;
|
|
198
|
+
}
|
|
199
|
+
function unrecognizedConfigKeys(error) {
|
|
200
|
+
const keys = [];
|
|
201
|
+
for (const issue of error.issues) {
|
|
202
|
+
if (issue.code !== "unrecognized_keys" || issue.path.length > 0) {
|
|
203
|
+
continue;
|
|
204
|
+
}
|
|
205
|
+
keys.push(...issue.keys);
|
|
206
|
+
}
|
|
207
|
+
return keys;
|
|
208
|
+
}
|
|
209
|
+
function valueAt(raw, path) {
|
|
210
|
+
let current = raw;
|
|
211
|
+
for (const key of path) {
|
|
212
|
+
if (!isRecord(current)) {
|
|
213
|
+
return current;
|
|
214
|
+
}
|
|
215
|
+
current = current[String(key)];
|
|
216
|
+
}
|
|
217
|
+
return current;
|
|
218
|
+
}
|
|
219
|
+
function messageOf(e) {
|
|
220
|
+
return e instanceof Error ? e.message : String(e);
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-providers.d.ts","sourceRoot":"","sources":["../src/default-providers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,eAAO,MAAM,iBAAiB;aAC5B,UAAU;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-providers.js","sourceRoot":"","sources":["../src/default-providers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,UAAU,EAAE,wBAAwB;CAC5B,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { RuleContext, RuleListener, RuleMeta } from "./index.ts";
|
|
2
|
+
/** Identity helper. The engine validates `ruleSchema` at load; this does not parse. */
|
|
3
|
+
export declare function defineRule<const Requires extends readonly string[] = []>(rule: {
|
|
4
|
+
meta: RuleMeta & {
|
|
5
|
+
requires?: Requires;
|
|
6
|
+
};
|
|
7
|
+
create(context: RuleContext<Requires>): void | RuleListener;
|
|
8
|
+
}): typeof rule;
|
|
9
|
+
//# sourceMappingURL=define-rule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"define-rule.d.ts","sourceRoot":"","sources":["../src/define-rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtE,uFAAuF;AACvF,wBAAgB,UAAU,CAAC,KAAK,CAAC,QAAQ,SAAS,SAAS,MAAM,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE;IAC9E,IAAI,EAAE,QAAQ,GAAG;QAAE,QAAQ,CAAC,EAAE,QAAQ,CAAA;KAAE,CAAC;IACzC,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,GAAG,IAAI,GAAG,YAAY,CAAC;CAC7D,GAAG,OAAO,IAAI,CAEd"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"define-rule.js","sourceRoot":"","sources":["../src/define-rule.ts"],"names":[],"mappings":"AAEA,uFAAuF;AACvF,MAAM,UAAU,UAAU,CAAgD,IAGzE;IACC,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"define-rule.types.d.ts","sourceRoot":"","sources":["../src/define-rule.types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { defineRule } from "./define-rule.js";
|
|
2
|
+
defineRule({
|
|
3
|
+
meta: { requires: ["typescript"], docs: { description: "typed" } },
|
|
4
|
+
create: (context) => {
|
|
5
|
+
const project = context.getArtifact("typescript");
|
|
6
|
+
void project;
|
|
7
|
+
// @ts-expect-error workspace-docs is not in requires
|
|
8
|
+
context.getArtifact("workspace-docs");
|
|
9
|
+
},
|
|
10
|
+
});
|
|
11
|
+
defineRule({
|
|
12
|
+
meta: {
|
|
13
|
+
requires: ["typescript", "workspace-docs"],
|
|
14
|
+
docs: { description: "both" },
|
|
15
|
+
},
|
|
16
|
+
create: (context) => {
|
|
17
|
+
context.getArtifact("typescript");
|
|
18
|
+
context.getArtifact("workspace-docs");
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
defineRule({
|
|
22
|
+
meta: { docs: { description: "omitted" } },
|
|
23
|
+
create: (context) => {
|
|
24
|
+
// @ts-expect-error omitted requires ⇒ no getArtifact
|
|
25
|
+
context.getArtifact("typescript");
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
const assignable = defineRule({
|
|
29
|
+
meta: { requires: ["typescript"], docs: { description: "assignable" } },
|
|
30
|
+
create: () => { },
|
|
31
|
+
});
|
|
32
|
+
void assignable;
|
|
33
|
+
//# sourceMappingURL=define-rule.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"define-rule.types.js","sourceRoot":"","sources":["../src/define-rule.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,UAAU,CAAC;IACT,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE;IAClE,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE;QAClB,MAAM,OAAO,GAAkB,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QACjE,KAAK,OAAO,CAAC;QACb,qDAAqD;QACrD,OAAO,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;IACxC,CAAC;CACF,CAAC,CAAC;AAEH,UAAU,CAAC;IACT,IAAI,EAAE;QACJ,QAAQ,EAAE,CAAC,YAAY,EAAE,gBAAgB,CAAC;QAC1C,IAAI,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE;KAC9B;IACD,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE;QAClB,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QAClC,OAAO,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;IACxC,CAAC;CACF,CAAC,CAAC;AAEH,UAAU,CAAC;IACT,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE;IAC1C,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE;QAClB,qDAAqD;QACrD,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IACpC,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,UAAU,GAAS,UAAU,CAAC;IAClC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,EAAE;IACvE,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC;CACjB,CAAC,CAAC;AACH,KAAK,UAAU,CAAC"}
|
package/dist/engine.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type Plugin, type UserConfig } from "./index.ts";
|
|
2
|
+
export type CheckFilters = {
|
|
3
|
+
plugins: string[];
|
|
4
|
+
excludePlugins: string[];
|
|
5
|
+
rules: string[];
|
|
6
|
+
diff: "off" | "upstream" | "worktree";
|
|
7
|
+
};
|
|
8
|
+
export declare function check(cwd: string, out: (msg: string) => void, err: (msg: string) => void, filters?: CheckFilters): Promise<number>;
|
|
9
|
+
export declare function loadPluginsFromConfig(config: UserConfig, configPath: string): Promise<Plugin[]>;
|
|
10
|
+
//# sourceMappingURL=engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAQA,OAAO,EAIL,KAAK,MAAM,EAGX,KAAK,UAAU,EAEhB,MAAM,YAAY,CAAC;AA0BpB,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,EAAE,KAAK,GAAG,UAAU,GAAG,UAAU,CAAC;CACvC,CAAC;AAqBF,wBAAsB,KAAK,CACzB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,EAC1B,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,EAC1B,OAAO,GAAE,YAA4B,GACpC,OAAO,CAAC,MAAM,CAAC,CAgEjB;AAwFD,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,UAAU,EAClB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC,CAMnB"}
|