@analogjs/storybook-angular 3.0.0-alpha.34 → 3.0.0-alpha.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@analogjs/storybook-angular",
3
- "version": "3.0.0-alpha.34",
3
+ "version": "3.0.0-alpha.35",
4
4
  "description": "Storybook Integration for Angular & Vite",
5
5
  "type": "module",
6
6
  "keywords": [
package/src/lib/preset.js CHANGED
@@ -42,8 +42,9 @@ async function resolveExperimentalZoneless(frameworkOptions, angularBuilderOptio
42
42
  }
43
43
  var viteFinal = async (config, options) => {
44
44
  config.plugins = (config.plugins ?? []).flat().filter((plugin) => !plugin.name.includes("analogjs"));
45
- const framework = await options.presets.apply("framework");
46
- const experimentalZoneless = await resolveExperimentalZoneless(framework.options, options?.angularBuilderOptions);
45
+ const { hmr: _removedHmrOption, ...frameworkOptions } = (await options.presets.apply("framework")).options ?? {};
46
+ const experimentalZoneless = await resolveExperimentalZoneless(frameworkOptions, options?.angularBuilderOptions);
47
+ const liveReload = typeof frameworkOptions.liveReload !== "undefined" ? frameworkOptions.liveReload : false;
47
48
  return vite.mergeConfig(config, {
48
49
  optimizeDeps: { include: [
49
50
  "@storybook/angular/client",
@@ -57,11 +58,10 @@ var viteFinal = async (config, options) => {
57
58
  resolve: { alias: { "@storybook/globalThis": "@storybook/global" } },
58
59
  plugins: [
59
60
  angular({
60
- jit: typeof framework.options?.jit !== "undefined" ? framework.options?.jit : true,
61
- hmr: typeof framework.options?.hmr !== "undefined" ? framework.options?.hmr : typeof framework.options?.liveReload !== "undefined" ? framework.options?.liveReload : false,
62
- liveReload: framework.options?.liveReload,
63
- tsconfig: typeof framework.options?.tsconfig !== "undefined" ? framework.options?.tsconfig : options?.tsConfig ?? "./.storybook/tsconfig.json",
64
- inlineStylesExtension: typeof framework.options?.inlineStylesExtension !== "undefined" ? framework.options?.inlineStylesExtension : "css"
61
+ jit: typeof frameworkOptions.jit !== "undefined" ? frameworkOptions.jit : true,
62
+ liveReload,
63
+ tsconfig: typeof frameworkOptions.tsconfig !== "undefined" ? frameworkOptions.tsconfig : options?.tsConfig ?? "./.storybook/tsconfig.json",
64
+ inlineStylesExtension: typeof frameworkOptions.inlineStylesExtension !== "undefined" ? frameworkOptions.inlineStylesExtension : "css"
65
65
  }),
66
66
  angularOptionsPlugin(options, {
67
67
  normalizePath: vite.normalizePath,
@@ -1 +1 @@
1
- {"version":3,"file":"preset.js","names":[],"sources":["../../../src/lib/preset.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport { core as PresetCore } from '@storybook/angular/preset';\nimport { fileURLToPath } from 'node:url';\nimport * as vite from 'vite';\nimport type { Plugin, UserConfig } from 'vite';\nimport angular from '@analogjs/vite-plugin-angular';\nimport { debugStyles } from './debug';\n\nexport const previewAnnotations = async (\n entries: string[] = [],\n options: any,\n): Promise<string[]> => {\n const config = fileURLToPath(\n import.meta.resolve('@storybook/angular/client/config'),\n );\n const annotations = [...entries, config];\n\n if (options.enableProdMode) {\n const previewProdPath = fileURLToPath(\n import.meta.resolve('@storybook/angular/client/preview-prod'),\n );\n annotations.unshift(previewProdPath);\n }\n\n const docsConfig = await options.presets.apply('docs', {}, options);\n const docsEnabled = Object.keys(docsConfig).length > 0;\n if (docsEnabled) {\n const docsConfigPath = fileURLToPath(\n import.meta.resolve('@storybook/angular/client/docs/config'),\n );\n annotations.push(docsConfigPath);\n }\n return annotations;\n};\n\nexport const core = async (config: any, options: any): Promise<any> => {\n const presetCore = await PresetCore(config, options);\n return {\n ...presetCore,\n builder: {\n name: import.meta.resolve('@storybook/builder-vite'),\n options: { ...presetCore.options },\n },\n };\n};\n\nasync function resolveExperimentalZoneless(\n frameworkOptions: any,\n angularBuilderOptions: any,\n) {\n // 1. Explicit framework option (user's .storybook/main.ts)\n if (typeof frameworkOptions?.experimentalZoneless === 'boolean') {\n return frameworkOptions.experimentalZoneless;\n }\n\n // 2. Angular builder options (set by start-storybook/build-storybook)\n if (typeof angularBuilderOptions?.experimentalZoneless === 'boolean') {\n return angularBuilderOptions.experimentalZoneless;\n }\n\n // 3. Auto-detect Angular 21+ (matches @storybook/angular builder behavior)\n try {\n const { VERSION } = await import('@angular/core');\n return !!(VERSION.major && Number(VERSION.major) >= 21);\n } catch {\n return false;\n }\n}\n\nexport const viteFinal = async (config: any, options: any): Promise<any> => {\n // Remove any loaded analogjs plugins from a vite.config.(m)ts file\n config.plugins = (config.plugins ?? [])\n .flat()\n .filter((plugin: any) => !plugin.name.includes('analogjs'));\n\n // @ts-expect-error - untyped storybook presets API\n const framework = await options.presets.apply('framework');\n const experimentalZoneless = await resolveExperimentalZoneless(\n framework.options,\n options?.angularBuilderOptions,\n );\n return vite.mergeConfig(config, {\n // Add dependencies to pre-optimization\n optimizeDeps: {\n include: [\n '@storybook/angular/client',\n '@analogjs/storybook-angular',\n '@angular/compiler',\n '@angular/platform-browser',\n '@angular/platform-browser/animations',\n 'tslib',\n ...(experimentalZoneless ? [] : ['zone.js']),\n ],\n },\n resolve: {\n alias: {\n '@storybook/globalThis': '@storybook/global',\n },\n },\n plugins: [\n angular({\n jit:\n typeof framework.options?.jit !== 'undefined'\n ? framework.options?.jit\n : true,\n hmr:\n typeof framework.options?.hmr !== 'undefined'\n ? framework.options?.hmr\n : typeof framework.options?.liveReload !== 'undefined'\n ? framework.options?.liveReload\n : false,\n liveReload: framework.options?.liveReload,\n tsconfig:\n typeof framework.options?.tsconfig !== 'undefined'\n ? framework.options?.tsconfig\n : (options?.tsConfig ?? './.storybook/tsconfig.json'),\n inlineStylesExtension:\n typeof framework.options?.inlineStylesExtension !== 'undefined'\n ? framework.options?.inlineStylesExtension\n : 'css',\n }),\n angularOptionsPlugin(options, {\n normalizePath: vite.normalizePath,\n experimentalZoneless,\n }),\n storybookTransformConfigPlugin(),\n ],\n define: {\n STORYBOOK_ANGULAR_OPTIONS: JSON.stringify({\n experimentalZoneless: !!experimentalZoneless,\n }),\n },\n });\n};\n\nfunction angularOptionsPlugin(\n options: any,\n {\n normalizePath,\n experimentalZoneless,\n }: { normalizePath: (path: string) => string; experimentalZoneless: boolean },\n): Plugin {\n let resolvedConfig: UserConfig | undefined;\n\n const resolveStyleImport = (\n extraImport: string,\n projectRoot: string,\n workspaceRoot: string,\n ) => {\n const resolvedProjectImport = resolve(projectRoot, extraImport);\n const resolvedWorkspaceImport = resolve(workspaceRoot, extraImport);\n\n if (\n extraImport.startsWith('.') ||\n extraImport.startsWith('src') ||\n existsSync(resolvedProjectImport)\n ) {\n return {\n specifier: resolvedProjectImport,\n source: 'project',\n } as const;\n }\n\n if (existsSync(resolvedWorkspaceImport)) {\n return {\n specifier: resolvedWorkspaceImport,\n source: 'workspace',\n } as const;\n }\n\n return {\n specifier: extraImport,\n source: 'bare',\n } as const;\n };\n\n return {\n name: 'analogjs-storybook-options-plugin',\n config(userConfig: UserConfig) {\n resolvedConfig = userConfig;\n const loadPaths =\n options?.angularBuilderOptions?.stylePreprocessorOptions?.loadPaths;\n const sassOptions =\n options?.angularBuilderOptions?.stylePreprocessorOptions?.sass;\n\n if (Array.isArray(loadPaths)) {\n const workspaceRoot =\n options.angularBuilderContext?.workspaceRoot ??\n userConfig?.root ??\n process.cwd();\n const resolvedLoadPaths = loadPaths.map(\n (loadPath) => `${resolve(workspaceRoot, loadPath)}`,\n );\n\n debugStyles('resolved SCSS load paths', {\n configDir: options.configDir,\n workspaceRoot,\n projectRoot: userConfig?.root ?? process.cwd(),\n loadPaths,\n resolvedLoadPaths,\n });\n\n return {\n css: {\n preprocessorOptions: {\n scss: {\n ...sassOptions,\n loadPaths: resolvedLoadPaths,\n },\n },\n },\n };\n }\n\n return;\n },\n async transform(code: string, id: string) {\n if (\n normalizePath(id).endsWith(\n normalizePath(`${options.configDir}/preview.ts`),\n )\n ) {\n const imports = [];\n const styles = options?.angularBuilderOptions?.styles;\n const workspaceRoot =\n options?.angularBuilderContext?.workspaceRoot ?? process.cwd();\n\n if (Array.isArray(styles)) {\n debugStyles('injecting Storybook global styles', {\n configDir: options.configDir,\n workspaceRoot,\n projectRoot: resolvedConfig?.root ?? process.cwd(),\n styles,\n });\n\n styles.forEach((style) => {\n imports.push(style);\n });\n }\n\n if (!experimentalZoneless) {\n imports.push('zone.js');\n }\n\n // Use vite config root when angularBuilderContext is not available\n // (e.g., when running via Vitest instead of Angular builders)\n const projectRoot = resolvedConfig?.root ?? process.cwd();\n\n return {\n code: `\n ${imports\n .map((extraImport) => {\n const resolved = resolveStyleImport(\n extraImport,\n projectRoot,\n workspaceRoot,\n );\n\n debugStyles('resolved Storybook style import', {\n input: extraImport,\n source: resolved.source,\n specifier: resolved.specifier,\n });\n\n return `import '${resolved.specifier}';`;\n })\n .join('\\n')}\n ${code}\n `,\n };\n }\n\n return;\n },\n };\n}\n\nfunction storybookTransformConfigPlugin(): Plugin {\n const configKey = vite.rolldownVersion ? 'oxc' : 'esbuild';\n\n return {\n name: 'analogjs-storybook-transform-config',\n apply: 'build',\n config() {\n return {\n [configKey]: {\n // Don't mangle class names during the build\n // This fixes display of compodoc argtypes\n keepNames: true,\n },\n };\n },\n };\n}\n\nexport { addons } from '@storybook/angular/preset';\n"],"mappings":"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"}
1
+ {"version":3,"file":"preset.js","names":[],"sources":["../../../src/lib/preset.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport { core as PresetCore } from '@storybook/angular/preset';\nimport { fileURLToPath } from 'node:url';\nimport * as vite from 'vite';\nimport type { Plugin, UserConfig } from 'vite';\nimport angular from '@analogjs/vite-plugin-angular';\nimport { debugStyles } from './debug';\n\nexport const previewAnnotations = async (\n entries: string[] = [],\n options: any,\n): Promise<string[]> => {\n const config = fileURLToPath(\n import.meta.resolve('@storybook/angular/client/config'),\n );\n const annotations = [...entries, config];\n\n if (options.enableProdMode) {\n const previewProdPath = fileURLToPath(\n import.meta.resolve('@storybook/angular/client/preview-prod'),\n );\n annotations.unshift(previewProdPath);\n }\n\n const docsConfig = await options.presets.apply('docs', {}, options);\n const docsEnabled = Object.keys(docsConfig).length > 0;\n if (docsEnabled) {\n const docsConfigPath = fileURLToPath(\n import.meta.resolve('@storybook/angular/client/docs/config'),\n );\n annotations.push(docsConfigPath);\n }\n return annotations;\n};\n\nexport const core = async (config: any, options: any): Promise<any> => {\n const presetCore = await PresetCore(config, options);\n return {\n ...presetCore,\n builder: {\n name: import.meta.resolve('@storybook/builder-vite'),\n options: { ...presetCore.options },\n },\n };\n};\n\nasync function resolveExperimentalZoneless(\n frameworkOptions: any,\n angularBuilderOptions: any,\n) {\n // 1. Explicit framework option (user's .storybook/main.ts)\n if (typeof frameworkOptions?.experimentalZoneless === 'boolean') {\n return frameworkOptions.experimentalZoneless;\n }\n\n // 2. Angular builder options (set by start-storybook/build-storybook)\n if (typeof angularBuilderOptions?.experimentalZoneless === 'boolean') {\n return angularBuilderOptions.experimentalZoneless;\n }\n\n // 3. Auto-detect Angular 21+ (matches @storybook/angular builder behavior)\n try {\n const { VERSION } = await import('@angular/core');\n return !!(VERSION.major && Number(VERSION.major) >= 21);\n } catch {\n return false;\n }\n}\n\nexport const viteFinal = async (config: any, options: any): Promise<any> => {\n // Remove any loaded analogjs plugins from a vite.config.(m)ts file\n config.plugins = (config.plugins ?? [])\n .flat()\n .filter((plugin: any) => !plugin.name.includes('analogjs'));\n\n // @ts-expect-error - untyped storybook presets API\n const framework = await options.presets.apply('framework');\n const { hmr: _removedHmrOption, ...frameworkOptions } =\n framework.options ?? {};\n const experimentalZoneless = await resolveExperimentalZoneless(\n frameworkOptions,\n options?.angularBuilderOptions,\n );\n const liveReload =\n typeof frameworkOptions.liveReload !== 'undefined'\n ? frameworkOptions.liveReload\n : false;\n return vite.mergeConfig(config, {\n // Add dependencies to pre-optimization\n optimizeDeps: {\n include: [\n '@storybook/angular/client',\n '@analogjs/storybook-angular',\n '@angular/compiler',\n '@angular/platform-browser',\n '@angular/platform-browser/animations',\n 'tslib',\n ...(experimentalZoneless ? [] : ['zone.js']),\n ],\n },\n resolve: {\n alias: {\n '@storybook/globalThis': '@storybook/global',\n },\n },\n plugins: [\n angular({\n jit:\n typeof frameworkOptions.jit !== 'undefined'\n ? frameworkOptions.jit\n : true,\n liveReload,\n tsconfig:\n typeof frameworkOptions.tsconfig !== 'undefined'\n ? frameworkOptions.tsconfig\n : (options?.tsConfig ?? './.storybook/tsconfig.json'),\n inlineStylesExtension:\n typeof frameworkOptions.inlineStylesExtension !== 'undefined'\n ? frameworkOptions.inlineStylesExtension\n : 'css',\n }),\n angularOptionsPlugin(options, {\n normalizePath: vite.normalizePath,\n experimentalZoneless,\n }),\n storybookTransformConfigPlugin(),\n ],\n define: {\n STORYBOOK_ANGULAR_OPTIONS: JSON.stringify({\n experimentalZoneless: !!experimentalZoneless,\n }),\n },\n });\n};\n\nfunction angularOptionsPlugin(\n options: any,\n {\n normalizePath,\n experimentalZoneless,\n }: { normalizePath: (path: string) => string; experimentalZoneless: boolean },\n): Plugin {\n let resolvedConfig: UserConfig | undefined;\n\n const resolveStyleImport = (\n extraImport: string,\n projectRoot: string,\n workspaceRoot: string,\n ) => {\n const resolvedProjectImport = resolve(projectRoot, extraImport);\n const resolvedWorkspaceImport = resolve(workspaceRoot, extraImport);\n\n if (\n extraImport.startsWith('.') ||\n extraImport.startsWith('src') ||\n existsSync(resolvedProjectImport)\n ) {\n return {\n specifier: resolvedProjectImport,\n source: 'project',\n } as const;\n }\n\n if (existsSync(resolvedWorkspaceImport)) {\n return {\n specifier: resolvedWorkspaceImport,\n source: 'workspace',\n } as const;\n }\n\n return {\n specifier: extraImport,\n source: 'bare',\n } as const;\n };\n\n return {\n name: 'analogjs-storybook-options-plugin',\n config(userConfig: UserConfig) {\n resolvedConfig = userConfig;\n const loadPaths =\n options?.angularBuilderOptions?.stylePreprocessorOptions?.loadPaths;\n const sassOptions =\n options?.angularBuilderOptions?.stylePreprocessorOptions?.sass;\n\n if (Array.isArray(loadPaths)) {\n const workspaceRoot =\n options.angularBuilderContext?.workspaceRoot ??\n userConfig?.root ??\n process.cwd();\n const resolvedLoadPaths = loadPaths.map(\n (loadPath) => `${resolve(workspaceRoot, loadPath)}`,\n );\n\n debugStyles('resolved SCSS load paths', {\n configDir: options.configDir,\n workspaceRoot,\n projectRoot: userConfig?.root ?? process.cwd(),\n loadPaths,\n resolvedLoadPaths,\n });\n\n return {\n css: {\n preprocessorOptions: {\n scss: {\n ...sassOptions,\n loadPaths: resolvedLoadPaths,\n },\n },\n },\n };\n }\n\n return;\n },\n async transform(code: string, id: string) {\n if (\n normalizePath(id).endsWith(\n normalizePath(`${options.configDir}/preview.ts`),\n )\n ) {\n const imports = [];\n const styles = options?.angularBuilderOptions?.styles;\n const workspaceRoot =\n options?.angularBuilderContext?.workspaceRoot ?? process.cwd();\n\n if (Array.isArray(styles)) {\n debugStyles('injecting Storybook global styles', {\n configDir: options.configDir,\n workspaceRoot,\n projectRoot: resolvedConfig?.root ?? process.cwd(),\n styles,\n });\n\n styles.forEach((style) => {\n imports.push(style);\n });\n }\n\n if (!experimentalZoneless) {\n imports.push('zone.js');\n }\n\n // Use vite config root when angularBuilderContext is not available\n // (e.g., when running via Vitest instead of Angular builders)\n const projectRoot = resolvedConfig?.root ?? process.cwd();\n\n return {\n code: `\n ${imports\n .map((extraImport) => {\n const resolved = resolveStyleImport(\n extraImport,\n projectRoot,\n workspaceRoot,\n );\n\n debugStyles('resolved Storybook style import', {\n input: extraImport,\n source: resolved.source,\n specifier: resolved.specifier,\n });\n\n return `import '${resolved.specifier}';`;\n })\n .join('\\n')}\n ${code}\n `,\n };\n }\n\n return;\n },\n };\n}\n\nfunction storybookTransformConfigPlugin(): Plugin {\n const configKey = vite.rolldownVersion ? 'oxc' : 'esbuild';\n\n return {\n name: 'analogjs-storybook-transform-config',\n apply: 'build',\n config() {\n return {\n [configKey]: {\n // Don't mangle class names during the build\n // This fixes display of compodoc argtypes\n keepNames: true,\n },\n };\n },\n };\n}\n\nexport { addons } from '@storybook/angular/preset';\n"],"mappings":"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"}
package/src/types.d.ts CHANGED
@@ -6,9 +6,11 @@ type BuilderName = CompatibleString<"@storybook/builder-vite">;
6
6
  export type FrameworkOptions = {
7
7
  builder?: BuilderOptions;
8
8
  jit?: boolean;
9
- hmr?: boolean;
10
9
  /**
11
- * @deprecated Use `hmr` instead. Kept as a compatibility alias.
10
+ * Enables Analog's Angular live-reload/HMR pipeline for Storybook.
11
+ *
12
+ * This is separate from Vite's `server.hmr` option, which configures the
13
+ * HMR client transport.
12
14
  */
13
15
  liveReload?: boolean;
14
16
  inlineStylesExtension?: string;