| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 | "use strict";/** * @fileoverview Meta should have inline properties * @author Yann Braga */const utils_1 = require("../utils");const constants_1 = require("../utils/constants");const create_storybook_rule_1 = require("../utils/create-storybook-rule");module.exports = (0, create_storybook_rule_1.createStorybookRule)({    name: 'meta-inline-properties',    defaultOptions: [{ csfVersion: 3 }],    meta: {        type: 'problem',        docs: {            description: 'Meta should only have inline properties',            categories: [constants_1.CategoryId.CSF, constants_1.CategoryId.RECOMMENDED],            excludeFromConfig: true,            recommended: 'error',        },        messages: {            metaShouldHaveInlineProperties: 'Meta should only have inline properties: {{property}}',        },        schema: [            {                type: 'object',                properties: {                    csfVersion: {                        type: 'number',                    },                },                additionalProperties: false,            },        ],    },    create(context) {        // variables should be defined here        // In case we need to get options defined in the rule schema        // const options = context.options[0] || {}        // const csfVersion = options.csfVersion        //----------------------------------------------------------------------        // Helpers        //----------------------------------------------------------------------        const isInline = (node) => {            if (!(node && typeof node === 'object' && 'value' in node)) {                return false;            }            return (node.value.type === 'ObjectExpression' ||                node.value.type === 'Literal' ||                node.value.type === 'ArrayExpression');        };        // any helper functions should go here or else delete this section        //----------------------------------------------------------------------        // Public        //----------------------------------------------------------------------        return {            ExportDefaultDeclaration(node) {                const meta = (0, utils_1.getMetaObjectExpression)(node, context);                if (!meta) {                    return null;                }                const ruleProperties = ['title', 'args'];                const dynamicProperties = [];                const metaNodes = meta.properties.filter((prop) => 'key' in prop && 'name' in prop.key && ruleProperties.includes(prop.key.name));                metaNodes.forEach((metaNode) => {                    if (!isInline(metaNode)) {                        dynamicProperties.push(metaNode);                    }                });                if (dynamicProperties.length > 0) {                    dynamicProperties.forEach((propertyNode) => {                        var _a;                        context.report({                            node: propertyNode,                            messageId: 'metaShouldHaveInlineProperties',                            data: {                                property: (_a = propertyNode.key) === null || _a === void 0 ? void 0 : _a.name,                            },                        });                    });                }            },        };    },});
 |