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,
- },
- });
- });
- }
- },
- };
- },
- });
|