routie dev init since i didn't adhere to any proper guidance up until now
This commit is contained in:
Generated
Vendored
+79
@@ -0,0 +1,79 @@
|
||||
import { a as createRule, r as getValue } from "../utils.mjs";
|
||||
//#region src/rules/prefer-default-export/prefer-default-export.ts
|
||||
var prefer_default_export_default = createRule({
|
||||
name: "prefer-default-export",
|
||||
meta: {
|
||||
type: "suggestion",
|
||||
docs: { description: "Prefer a default export if module exports a single name or multiple names." },
|
||||
schema: [{
|
||||
type: "object",
|
||||
properties: { target: {
|
||||
type: "string",
|
||||
enum: ["single", "any"],
|
||||
default: "single"
|
||||
} },
|
||||
additionalProperties: false
|
||||
}],
|
||||
messages: {
|
||||
single: "Prefer default export on a file with single export.",
|
||||
any: "Prefer default export to be present on every file that has export."
|
||||
}
|
||||
},
|
||||
defaultOptions: [{ target: "single" }],
|
||||
create(context, [options]) {
|
||||
let specifierExportCount = 0;
|
||||
let hasDefaultExport = false;
|
||||
let hasStarExport = false;
|
||||
let hasTypeExport = false;
|
||||
let namedExportNode;
|
||||
const { target } = options;
|
||||
function captureDeclaration(identifierOrPattern) {
|
||||
if (identifierOrPattern?.type === "ObjectPattern") for (const property of identifierOrPattern.properties) captureDeclaration(property.value);
|
||||
else if (identifierOrPattern?.type === "ArrayPattern") for (const el of identifierOrPattern.elements) captureDeclaration(el);
|
||||
else specifierExportCount++;
|
||||
}
|
||||
return {
|
||||
ExportDefaultSpecifier() {
|
||||
hasDefaultExport = true;
|
||||
},
|
||||
ExportSpecifier(node) {
|
||||
if (getValue(node.exported) === "default") hasDefaultExport = true;
|
||||
else {
|
||||
specifierExportCount++;
|
||||
namedExportNode = node;
|
||||
}
|
||||
},
|
||||
ExportNamedDeclaration(node) {
|
||||
if (!node.declaration) return;
|
||||
const { type } = node.declaration;
|
||||
if (type === "TSTypeAliasDeclaration" || type === "TSInterfaceDeclaration") {
|
||||
specifierExportCount++;
|
||||
hasTypeExport = true;
|
||||
return;
|
||||
}
|
||||
if ("declarations" in node.declaration && node.declaration.declarations) for (const declaration of node.declaration.declarations) captureDeclaration(declaration.id);
|
||||
else specifierExportCount++;
|
||||
namedExportNode = node;
|
||||
},
|
||||
ExportDefaultDeclaration() {
|
||||
hasDefaultExport = true;
|
||||
},
|
||||
ExportAllDeclaration() {
|
||||
hasStarExport = true;
|
||||
},
|
||||
"Program:exit": function() {
|
||||
if (hasDefaultExport || hasStarExport || hasTypeExport) return;
|
||||
if (target === "single" && specifierExportCount === 1) context.report({
|
||||
node: namedExportNode,
|
||||
messageId: "single"
|
||||
});
|
||||
else if (target === "any" && specifierExportCount > 0) context.report({
|
||||
node: namedExportNode,
|
||||
messageId: "any"
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
});
|
||||
//#endregion
|
||||
export { prefer_default_export_default as t };
|
||||
Reference in New Issue
Block a user