UNPKG

@rxap/ts-morph

Version:

Provides utilities for manipulating TypeScript code using the ts-morph library. It offers a fluent API to add, modify, and remove code elements such as classes, decorators, imports, and properties in both Angular and NestJS projects. This package simplifi

67 lines 3.25 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CoerceStories = CoerceStories; const utilities_1 = require("@rxap/utilities"); const ts_morph_1 = require("ts-morph"); const coerce_imports_1 = require("../coerce-imports"); const coerce_property_assignment_1 = require("../coerce-property-assignment"); const coerce_variable_declaration_1 = require("../coerce-variable-declaration"); function CoerceStories(sourceFile, options) { const { feature, componentName, moduleMetadata, parentTitle } = options; (0, coerce_imports_1.CoerceImports)(sourceFile, [ { moduleSpecifier: '@storybook/angular', namedImports: ['Meta', 'StoryObj'] }, { moduleSpecifier: `./${(0, utilities_1.dasherize)(componentName)}.component`, namedImports: [`${(0, utilities_1.classify)(componentName)}Component`] } ]); let title = (0, utilities_1.classify)(componentName); if (parentTitle) { title = `${parentTitle} / ${title}`; } else if (feature) { title = `${(0, utilities_1.classify)(feature)} / ${title}`; } const meta = { component: `${(0, utilities_1.classify)(componentName)}Component`, title: w => w.quote(title), }; if (moduleMetadata) { meta['decorators'] = w => { w.writeLine('['); w.writeLine(' moduleMetadata({})'); w.newLine(); w.write(']'); }; (0, coerce_imports_1.CoerceImports)(sourceFile, { moduleSpecifier: '@storybook/angular', namedImports: ['moduleMetadata'] }); } const metaDeclaration = (0, coerce_variable_declaration_1.CoerceVariableDeclaration)(sourceFile, 'meta', { type: `Meta<${(0, utilities_1.classify)(componentName)}Component>`, initializer: ts_morph_1.Writers.object(meta) }, { isExported: false }); if (!sourceFile.getStatement(s => s.getText().includes('export default meta;'))) { sourceFile.addStatements(`export default meta;`); } if (!sourceFile.getStatement(s => s.getText().includes('type Story = StoryObj<'))) { sourceFile.addStatements(`type Story = StoryObj<${(0, utilities_1.classify)(componentName)}Component>;`); } (0, coerce_variable_declaration_1.CoerceVariableDeclaration)(sourceFile, 'Primary', { type: `Story`, initializer: ts_morph_1.Writers.object({ args: '{}' }) }); if (moduleMetadata) { const initializer = metaDeclaration.getInitializerIfKindOrThrow(ts_morph_1.SyntaxKind.ObjectLiteralExpression); const decoratorsProperty = (0, coerce_property_assignment_1.CoercePropertyAssignment)(initializer, 'decorators', '[ moduleMetadata({}) ]'); const decoratorsInitializer = decoratorsProperty.getInitializerIfKindOrThrow(ts_morph_1.SyntaxKind.ArrayLiteralExpression); const moduleMetadataFunction = decoratorsInitializer.getElements().find(e => e.isKind(ts_morph_1.SyntaxKind.CallExpression)); const firstArgument = moduleMetadataFunction.getArguments()[0].asKindOrThrow(ts_morph_1.SyntaxKind.ObjectLiteralExpression); moduleMetadata(firstArgument); } } //# sourceMappingURL=coerce-stories.js.map