| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 | "use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.getAllNamedExports = exports.isValidStoryExport = exports.getDescriptor = exports.getMetaObjectExpression = exports.docsUrl = void 0;/* eslint-disable no-fallthrough */const csf_1 = require("@storybook/csf");const utils_1 = require("@typescript-eslint/utils");const ast_1 = require("./ast");const docsUrl = (ruleName) => `https://github.com/storybookjs/eslint-plugin-storybook/blob/main/docs/rules/${ruleName}.md`;exports.docsUrl = docsUrl;const getMetaObjectExpression = (node, context) => {    let meta = node.declaration;    if ((0, ast_1.isIdentifier)(meta)) {        const variable = utils_1.ASTUtils.findVariable(context.getScope(), meta.name);        const decl = variable && variable.defs.find((def) => (0, ast_1.isVariableDeclarator)(def.node));        if (decl && (0, ast_1.isVariableDeclarator)(decl.node)) {            meta = decl.node.init;        }    }    if ((0, ast_1.isTSAsExpression)(meta) || (0, ast_1.isTSSatisfiesExpression)(meta)) {        meta = meta.expression;    }    return (0, ast_1.isObjectExpression)(meta) ? meta : null;};exports.getMetaObjectExpression = getMetaObjectExpression;const getDescriptor = (metaDeclaration, propertyName) => {    const property = metaDeclaration &&        metaDeclaration.properties.find((p) => 'key' in p && 'name' in p.key && p.key.name === propertyName);    if (!property || (0, ast_1.isSpreadElement)(property)) {        return undefined;    }    const { type } = property.value;    switch (type) {        case 'ArrayExpression':            return property.value.elements.map((t) => {                if (!['StringLiteral', 'Literal'].includes(t.type)) {                    throw new Error(`Unexpected descriptor element: ${t.type}`);                }                // @ts-expect-error TODO: t should be only StringLiteral or Literal, and the type is not resolving correctly                return t.value;            });        case 'Literal':        // @ts-expect-error TODO: Investigation needed. Type systems says, that "RegExpLiteral" does not exist        case 'RegExpLiteral':            // @ts-expect-error TODO: investigation needed            return property.value.value;        default:            throw new Error(`Unexpected descriptor: ${type}`);    }};exports.getDescriptor = getDescriptor;const isValidStoryExport = (node, nonStoryExportsConfig) => (0, csf_1.isExportStory)(node.name, nonStoryExportsConfig) && node.name !== '__namedExportsOrder';exports.isValidStoryExport = isValidStoryExport;const getAllNamedExports = (node) => {    // e.g. `export { MyStory }`    if (!node.declaration && node.specifiers) {        return node.specifiers.reduce((acc, specifier) => {            if ((0, ast_1.isIdentifier)(specifier.exported)) {                acc.push(specifier.exported);            }            return acc;        }, []);    }    const decl = node.declaration;    if ((0, ast_1.isVariableDeclaration)(decl)) {        const declaration = decl.declarations[0];        if (declaration) {            const { id } = declaration;            // e.g. `export const MyStory`            if ((0, ast_1.isIdentifier)(id)) {                return [id];            }        }    }    if ((0, ast_1.isFunctionDeclaration)(decl)) {        // e.g. `export function MyStory() {}`        if ((0, ast_1.isIdentifier)(decl.id)) {            return [decl.id];        }    }    return [];};exports.getAllNamedExports = getAllNamedExports;
 |