UNPKG

@storybook/angular

Version:

Storybook for Angular: Develop Angular components in isolation with hot reloading.

178 lines (177 loc) • 9.59 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const common_1 = require("@angular/common"); const core_1 = require("@angular/core"); const platform_browser_1 = require("@angular/platform-browser"); const animations_1 = require("@angular/platform-browser/animations"); const vitest_1 = require("vitest"); const test_module_1 = require("../__testfixtures__/test.module"); const PropertyExtractor_1 = require("./PropertyExtractor"); const TEST_TOKEN = new core_1.InjectionToken('testToken'); const TestTokenProvider = { provide: TEST_TOKEN, useValue: 123 }; const TestService = (0, core_1.Injectable)()(class { }); const TestComponent1 = (0, core_1.Component)({ standalone: false })(class { }); const TestComponent2 = (0, core_1.Component)({ standalone: false })(class { }); const StandaloneTestComponent = (0, core_1.Component)({})(class { }); const StandaloneTestDirective = (0, core_1.Directive)({})(class { }); const MixedTestComponent1 = (0, core_1.Component)({})(class extends StandaloneTestComponent { }); const MixedTestComponent2 = (0, core_1.Component)({ standalone: false })(class extends MixedTestComponent1 { }); const MixedTestComponent3 = (0, core_1.Component)({})(class extends MixedTestComponent2 { }); const TestModuleWithDeclarations = (0, core_1.NgModule)({ declarations: [TestComponent1] })(class { }); const TestModuleWithImportsAndProviders = (0, core_1.NgModule)({ imports: [TestModuleWithDeclarations], providers: [TestTokenProvider], })(class { }); const analyzeMetadata = async (metadata, component) => { const propertyExtractor = new PropertyExtractor_1.PropertyExtractor(metadata, component); await propertyExtractor.init(); return propertyExtractor; }; const extractImports = async (metadata, component) => { const propertyExtractor = new PropertyExtractor_1.PropertyExtractor(metadata, component); await propertyExtractor.init(); return propertyExtractor.imports; }; const extractDeclarations = async (metadata, component) => { const propertyExtractor = new PropertyExtractor_1.PropertyExtractor(metadata, component); await propertyExtractor.init(); return propertyExtractor.declarations; }; const extractProviders = async (metadata, component) => { const propertyExtractor = new PropertyExtractor_1.PropertyExtractor(metadata, component); await propertyExtractor.init(); return propertyExtractor.providers; }; const extractApplicationProviders = async (metadata, component) => { const propertyExtractor = new PropertyExtractor_1.PropertyExtractor(metadata, component); await propertyExtractor.init(); return propertyExtractor.applicationProviders; }; (0, vitest_1.describe)('PropertyExtractor', () => { vitest_1.vi.spyOn(console, 'warn').mockImplementation(() => { }); (0, vitest_1.describe)('analyzeMetadata', () => { (0, vitest_1.it)('should remove BrowserModule', async () => { const metadata = { imports: [platform_browser_1.BrowserModule], }; const { imports, providers, applicationProviders } = await analyzeMetadata(metadata); (0, vitest_1.expect)(imports.flat(Number.MAX_VALUE)).toEqual([common_1.CommonModule]); (0, vitest_1.expect)(providers.flat(Number.MAX_VALUE)).toEqual([]); (0, vitest_1.expect)(applicationProviders.flat(Number.MAX_VALUE)).toEqual([]); }); (0, vitest_1.it)('should remove BrowserAnimationsModule and use its providers instead', async () => { const metadata = { imports: [animations_1.BrowserAnimationsModule], }; const { imports, providers, applicationProviders } = await analyzeMetadata(metadata); (0, vitest_1.expect)(imports.flat(Number.MAX_VALUE)).toEqual([common_1.CommonModule]); (0, vitest_1.expect)(providers.flat(Number.MAX_VALUE)).toEqual([]); (0, vitest_1.expect)(applicationProviders.flat(Number.MAX_VALUE)).toEqual((0, animations_1.provideAnimations)()); }); (0, vitest_1.it)('should remove NoopAnimationsModule and use its providers instead', async () => { const metadata = { imports: [animations_1.NoopAnimationsModule], }; const { imports, providers, applicationProviders } = await analyzeMetadata(metadata); (0, vitest_1.expect)(imports.flat(Number.MAX_VALUE)).toEqual([common_1.CommonModule]); (0, vitest_1.expect)(providers.flat(Number.MAX_VALUE)).toEqual([]); (0, vitest_1.expect)(applicationProviders.flat(Number.MAX_VALUE)).toEqual((0, animations_1.provideNoopAnimations)()); }); (0, vitest_1.it)('should remove Browser/Animations modules recursively', async () => { const metadata = { imports: [animations_1.BrowserAnimationsModule, platform_browser_1.BrowserModule], }; const { imports, providers, applicationProviders } = await analyzeMetadata(metadata); (0, vitest_1.expect)(imports.flat(Number.MAX_VALUE)).toEqual([common_1.CommonModule]); (0, vitest_1.expect)(providers.flat(Number.MAX_VALUE)).toEqual([]); (0, vitest_1.expect)(applicationProviders.flat(Number.MAX_VALUE)).toEqual((0, animations_1.provideAnimations)()); }); (0, vitest_1.it)('should not destructure Angular official module', async () => { const metadata = { imports: [test_module_1.WithOfficialModule], }; const { imports, providers, applicationProviders } = await analyzeMetadata(metadata); (0, vitest_1.expect)(imports.flat(Number.MAX_VALUE)).toEqual([common_1.CommonModule, test_module_1.WithOfficialModule]); (0, vitest_1.expect)(providers.flat(Number.MAX_VALUE)).toEqual([]); (0, vitest_1.expect)(applicationProviders.flat(Number.MAX_VALUE)).toEqual([]); }); }); (0, vitest_1.describe)('extractImports', () => { (0, vitest_1.it)('should return Angular official modules', async () => { const imports = await extractImports({ imports: [TestModuleWithImportsAndProviders] }); (0, vitest_1.expect)(imports).toEqual([common_1.CommonModule, TestModuleWithImportsAndProviders]); }); (0, vitest_1.it)('should return standalone components', async () => { const imports = await extractImports({ imports: [TestModuleWithImportsAndProviders], }, StandaloneTestComponent); (0, vitest_1.expect)(imports).toEqual([ common_1.CommonModule, TestModuleWithImportsAndProviders, StandaloneTestComponent, ]); }); (0, vitest_1.it)('should return standalone directives', async () => { const imports = await extractImports({ imports: [TestModuleWithImportsAndProviders], }, StandaloneTestDirective); (0, vitest_1.expect)(imports).toEqual([ common_1.CommonModule, TestModuleWithImportsAndProviders, StandaloneTestDirective, ]); }); }); (0, vitest_1.describe)('extractDeclarations', () => { (0, vitest_1.it)('should return an array of declarations that contains `storyComponent`', async () => { const declarations = await extractDeclarations({ declarations: [TestComponent1] }, TestComponent2); (0, vitest_1.expect)(declarations).toEqual([TestComponent1, TestComponent2]); }); }); (0, vitest_1.describe)('analyzeDecorators', () => { (0, vitest_1.it)('isStandalone should be false', () => { const { isStandalone } = PropertyExtractor_1.PropertyExtractor.analyzeDecorators(TestComponent1); (0, vitest_1.expect)(isStandalone).toBe(false); }); (0, vitest_1.it)('isStandalone should be true', () => { const { isStandalone } = PropertyExtractor_1.PropertyExtractor.analyzeDecorators(StandaloneTestComponent); (0, vitest_1.expect)(isStandalone).toBe(true); }); (0, vitest_1.it)('isStandalone should be true', () => { const { isStandalone } = PropertyExtractor_1.PropertyExtractor.analyzeDecorators(MixedTestComponent1); (0, vitest_1.expect)(isStandalone).toBe(true); }); (0, vitest_1.it)('isStandalone should be false', () => { const { isStandalone } = PropertyExtractor_1.PropertyExtractor.analyzeDecorators(MixedTestComponent2); (0, vitest_1.expect)(isStandalone).toBe(false); }); (0, vitest_1.it)('isStandalone should be true', () => { const { isStandalone } = PropertyExtractor_1.PropertyExtractor.analyzeDecorators(MixedTestComponent3); (0, vitest_1.expect)(isStandalone).toBe(true); }); }); (0, vitest_1.describe)('extractProviders', () => { (0, vitest_1.it)('should return an array of providers', async () => { const providers = await extractProviders({ providers: [TestService], }); (0, vitest_1.expect)(providers).toEqual([TestService]); }); (0, vitest_1.it)('should return an array of singletons extracted', async () => { const singeltons = await extractApplicationProviders({ imports: [animations_1.BrowserAnimationsModule], }); (0, vitest_1.expect)(singeltons).toEqual((0, animations_1.provideAnimations)()); }); }); });