From 7decf26e1acf6cfabc77fcf7e3c9d6e8d7a45070 Mon Sep 17 00:00:00 2001 From: ysdy823 Date: Fri, 27 Mar 2026 14:34:57 +0000 Subject: [PATCH 1/2] fix(cli): remove @o2s/framework references from .storybook/main.ts during scaffolding The packages/framework directory is always removed during scaffolding (listed in ALWAYS_REMOVE_DIRS), but .storybook/main.ts still referenced @o2s/framework/sdk and @o2s/framework/modules in both resolve.alias and optimizeDeps.include entries. This caused Storybook to fail after scaffolding because the referenced paths no longer existed. Add a new transform-storybook-config step that strips lines containing @o2s/framework/ references from .storybook/main.ts as part of the scaffold pipeline. Closes #836 Co-Authored-By: Claude Opus 4.6 (1M context) --- .../cli/create-o2s-app/src/scaffold/index.ts | 2 ++ .../scaffold/transform-storybook-config.ts | 22 +++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 packages/cli/create-o2s-app/src/scaffold/transform-storybook-config.ts diff --git a/packages/cli/create-o2s-app/src/scaffold/index.ts b/packages/cli/create-o2s-app/src/scaffold/index.ts index 4932e40a2..47741ed31 100644 --- a/packages/cli/create-o2s-app/src/scaffold/index.ts +++ b/packages/cli/create-o2s-app/src/scaffold/index.ts @@ -10,6 +10,7 @@ import { transformIntegrationConfigs } from './transform-integration-configs'; import { transformRootPackageJson } from './transform-package-json'; import { transformPageModel } from './transform-page-model'; import { transformRenderBlocks } from './transform-render-blocks'; +import { transformStorybookConfig } from './transform-storybook-config'; import * as fs from 'fs-extra'; import * as path from 'path'; @@ -74,6 +75,7 @@ export const scaffold = async ( transformRenderBlocks(targetDir, selectedBlocks), transformPageModel(targetDir, selectedBlocks), transformAppsPackageJson(targetDir, selectedBlocks, selectedIntegrations), + transformStorybookConfig(targetDir), ]); // Step 5: Clean up root package.json (remove workspace entries for deleted dirs) diff --git a/packages/cli/create-o2s-app/src/scaffold/transform-storybook-config.ts b/packages/cli/create-o2s-app/src/scaffold/transform-storybook-config.ts new file mode 100644 index 000000000..25b705c58 --- /dev/null +++ b/packages/cli/create-o2s-app/src/scaffold/transform-storybook-config.ts @@ -0,0 +1,22 @@ +import * as fs from 'fs-extra'; +import * as path from 'path'; + +const FILE_PATH = '.storybook/main.ts'; + +// Regex matches lines containing '@o2s/framework' in optimizeDeps.include or resolve.alias +const FRAMEWORK_REFERENCE_REGEX = /['"]@o2s\/framework\//; + +export const transformStorybookConfig = async (projectDir: string): Promise => { + const filePath = path.join(projectDir, FILE_PATH); + + if (!(await fs.pathExists(filePath))) return; + + const content = await fs.readFile(filePath, 'utf-8'); + const lines = content.split('\n'); + + const filteredLines = lines.filter((line) => { + return !FRAMEWORK_REFERENCE_REGEX.test(line); + }); + + await fs.writeFile(filePath, filteredLines.join('\n'), 'utf-8'); +}; From c41878c42637e181c704294239d78ed765724225 Mon Sep 17 00:00:00 2001 From: ysdy823 Date: Fri, 27 Mar 2026 14:47:49 +0000 Subject: [PATCH 2/2] Skip no-op writes when no framework references are filtered Add early return when filteredLines has the same length as the original lines array, avoiding unnecessary file writes when the storybook config contains no @o2s/framework references. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../create-o2s-app/src/scaffold/transform-storybook-config.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/cli/create-o2s-app/src/scaffold/transform-storybook-config.ts b/packages/cli/create-o2s-app/src/scaffold/transform-storybook-config.ts index 25b705c58..e2af4df98 100644 --- a/packages/cli/create-o2s-app/src/scaffold/transform-storybook-config.ts +++ b/packages/cli/create-o2s-app/src/scaffold/transform-storybook-config.ts @@ -18,5 +18,7 @@ export const transformStorybookConfig = async (projectDir: string): Promise