Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
b9bf7d3
Revert "Revert: Nuxt support"
valentinpalkovic Jul 15, 2024
ac0b619
Merge branch 'next' into revert-28479-revert/26884
ndelangen Aug 14, 2024
a729e4f
dedupe
ndelangen Aug 14, 2024
0356e44
fixes
ndelangen Aug 14, 2024
7849598
Merge branch 'next' into revert-28479-revert/26884
tobiasdiez Aug 22, 2024
846bf4b
add nuxt sandbox
tobiasdiez Aug 23, 2024
e78c4cc
Merge branch 'next' into revert-28479-revert/26884
valentinpalkovic Sep 10, 2024
00ffb6b
Update sandbox template for Nuxt v3 (Vite | TypeScript)
valentinpalkovic Sep 10, 2024
f434a98
Merge remote-tracking branch 'origin/next' into revert-28479-revert/2…
valentinpalkovic Oct 28, 2024
a4f3e0c
Fix sandbox generation for Nuxt
valentinpalkovic Oct 28, 2024
9439677
Refactor sandbox generation for Nuxt templates
valentinpalkovic Oct 28, 2024
4ca546b
Refactor parallelism values in CircleCI config to add Nuxt sandbox
valentinpalkovic Oct 28, 2024
7635ba7
Merge branch 'next' into revert-28479-revert/26884
valentinpalkovic Nov 1, 2024
1f8bcbb
Skip e2e tests for nuxt sandbox
valentinpalkovic Nov 1, 2024
19f21e0
Fix typings
valentinpalkovic Nov 1, 2024
bf7484a
Fix CI scripts
valentinpalkovic Nov 1, 2024
e8daf4e
Use vue3 template stories for sandbox creation
kasperpeulen Dec 2, 2024
dee3222
Run e2e tests for Nuxt
kasperpeulen Dec 2, 2024
d02250a
Fix parallelism
kasperpeulen Dec 2, 2024
31aee40
Merge remote-tracking branch 'origin/next' into revert-28479-revert/2…
kasperpeulen Dec 3, 2024
bf3a3ca
Adjust tests
kasperpeulen Dec 3, 2024
47b4b69
Merge branch 'next' into revert-28479-revert/26884
kasperpeulen Dec 3, 2024
e7f32c8
Add temporary workaround for Nuxt sandboxes
yannbf Dec 5, 2024
8b788b1
Merge branch 'next' into revert-28479-revert/26884
yannbf Dec 5, 2024
334d401
Merge remote-tracking branch 'origin/next' into revert-28479-revert/2…
kasperpeulen Dec 9, 2024
abd2d62
Fix parallelism
kasperpeulen Dec 9, 2024
1c0791e
Fix parallelism
kasperpeulen Dec 9, 2024
72c0fab
Merge branch 'next' into revert-28479-revert/26884
kasperpeulen Dec 13, 2024
f3b3e56
Disable react check for nuxt
kasperpeulen Dec 13, 2024
54ec63f
Merge branch 'next' into revert-28479-revert/26884
kasperpeulen Dec 14, 2024
b2ad07e
Prevent addon state from absolutely bombing render performance
ghengeveld Dec 16, 2024
8e2e08f
Don't ignore addon state as it may be relevant
ghengeveld Dec 18, 2024
3d2eaaf
Merge pull request #30081 from storybookjs/fix-infinite-rerender
ghengeveld Dec 19, 2024
1ded935
Addon Themes: deprecate useThemeParameters
yannbf Dec 19, 2024
eeb7001
Merge pull request #28607 from storybookjs/revert-28479-revert/26884
kasperpeulen Dec 20, 2024
5f2a0e1
Merge pull request #30111 from storybookjs/fix-addon-themes-issue
yannbf Dec 20, 2024
a8a20ff
Deps: Limit esbuild to v0.24.0
yannbf Dec 20, 2024
5b7be19
Merge pull request #30116 from storybookjs/yann/fix-esbuild-ci-issue
valentinpalkovic Dec 20, 2024
5932a18
Write changelog for 8.5.0-beta.4 [skip ci]
storybook-bot Dec 20, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
Revert "Revert: Nuxt support"
  • Loading branch information
valentinpalkovic authored Jul 15, 2024
commit b9bf7d39ff58df17365fe309cd629e5b4669ea78
2 changes: 1 addition & 1 deletion code/core/scripts/helpers/sourcefiles.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ async function generateVersionsFile(prettierConfig: prettier.Options | null): Pr
}

async function generateFrameworksFile(prettierConfig: prettier.Options | null): Promise<void> {
const thirdPartyFrameworks = ['qwik', 'solid'];
const thirdPartyFrameworks = ['qwik', 'solid', 'nuxt'];
const location = join(
import.meta.dirname,
'..',
Expand Down
1 change: 1 addition & 0 deletions code/core/src/common/utils/framework-to-renderer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ export const frameworkToRenderer: Record<
sveltekit: 'svelte',
'vue3-vite': 'vue3',
'vue3-webpack5': 'vue3',
nuxt: 'vue3',
'web-components-vite': 'web-components',
'web-components-webpack5': 'web-components',
// renderers
Expand Down
3 changes: 2 additions & 1 deletion code/core/src/types/modules/frameworks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,5 @@ export type SupportedFrameworks =
| 'web-components-vite'
| 'web-components-webpack5'
| 'qwik'
| 'solid';
| 'solid'
| 'nuxt';
3 changes: 2 additions & 1 deletion code/core/src/types/modules/renderers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,5 @@ export type SupportedRenderers =
| 'html'
| 'web-components'
| 'server'
| 'solid';
| 'solid'
| 'nuxt';
3 changes: 2 additions & 1 deletion code/lib/cli/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -282,7 +282,8 @@
],
"scripts": {
"check": "node --loader ../../../scripts/node_modules/esbuild-register/loader.js -r ../../../scripts/node_modules/esbuild-register/register.js ../../../scripts/prepare/check.ts",
"prep": "node --loader ../../../scripts/node_modules/esbuild-register/loader.js -r ../../../scripts/node_modules/esbuild-register/register.js ../../../scripts/prepare/bundle.ts"
"prep": "node --loader ../../../scripts/node_modules/esbuild-register/loader.js -r ../../../scripts/node_modules/esbuild-register/register.js ../../../scripts/prepare/bundle.ts",
"sb": "node ./bin/index.js"
},
"dependencies": {
"@babel/core": "^7.24.4",
Expand Down
32 changes: 22 additions & 10 deletions code/lib/cli/src/detect.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,28 @@ const MOCK_FRAMEWORK_FILES: {
},
},
},
{
name: ProjectType.NUXT,
files: {
'package.json': {
dependencies: {
nuxt: '^3.11.2',
},
},
},
},
{
name: ProjectType.NUXT,
files: {
'package.json': {
dependencies: {
// Nuxt projects may have Vue 3 as an explicit dependency
nuxt: '^3.11.2',
vue: '^3.0.0',
},
},
},
},
{
name: ProjectType.VUE3,
files: {
Expand Down Expand Up @@ -434,16 +456,6 @@ describe('Detect', () => {
expect(result).toBe(ProjectType.UNDETECTED);
});

// TODO(blaine): Remove once Nuxt3 is supported
it(`UNSUPPORTED for Nuxt framework above version 3.0.0`, () => {
const result = detectFrameworkPreset({
dependencies: {
nuxt: '3.0.0',
},
});
expect(result).toBe(ProjectType.UNSUPPORTED);
});

// TODO: The mocking in this test causes tests after it to fail
it('REACT_SCRIPTS for custom react scripts config', () => {
const forkedReactScriptsConfig = {
Expand Down
15 changes: 14 additions & 1 deletion code/lib/cli/src/detect.ts
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,11 @@ export async function detectBuilder(packageManager: JsPackageManager, projectTyp
}

// REWORK
if (webpackConfig || (dependencies.webpack && dependencies.vite !== undefined)) {
if (
webpackConfig ||
((dependencies.webpack || dependencies['@nuxt/webpack-builder']) &&
dependencies.vite !== undefined)
) {
commandLog('Detected webpack project. Setting builder to webpack')();
return CoreBuilder.Webpack5;
}
Expand All @@ -133,6 +137,8 @@ export async function detectBuilder(packageManager: JsPackageManager, projectTyp
case ProjectType.NEXTJS:
case ProjectType.EMBER:
return CoreBuilder.Webpack5;
case ProjectType.NUXT:
return CoreBuilder.Vite;
default:
const { builder } = await prompts(
{
Expand Down Expand Up @@ -202,6 +208,13 @@ export async function detectLanguage(packageManager: JsPackageManager) {
} else if (semver.lt(typescriptVersion, '3.8.0')) {
logger.warn('Detected TypeScript < 3.8, populating with JavaScript examples');
}
} else {
// No direct dependency on TypeScript, but could be a transitive dependency
// This is eg the case for Nuxt projects, which support a recent version of TypeScript
// Check for tsconfig.json (https://www.typescriptlang.org/docs/handbook/tsconfig-json.html)
if (fs.existsSync('tsconfig.json')) {
language = SupportedLanguage.TYPESCRIPT_4_9;
}
}

return language;
Expand Down
31 changes: 31 additions & 0 deletions code/lib/cli/src/generators/NUXT/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import { baseGenerator } from '../baseGenerator';
import type { Generator } from '../types';

const generator: Generator = async (packageManager, npmOptions, options) => {
await baseGenerator(
packageManager,
npmOptions,
options,
'nuxt',
{
extraPackages: async ({ builder }) => {
return ['@nuxtjs/storybook'];
},
installFrameworkPackages: false,
componentsDestinationPath: './components',
extraMain: {
stories: ['../components/**/*.mdx', '../components/**/*.stories.@(js|jsx|ts|tsx|mdx)'],
},
},
'nuxt'
);
// Add nuxtjs/storybook to nuxt.config.js
await packageManager.runPackageCommand('nuxi', [
'module',
'add',
'@nuxtjs/storybook',
'--skipInstall',
]);
};

export default generator;
24 changes: 16 additions & 8 deletions code/lib/cli/src/generators/baseGenerator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,15 @@ const defaultOptions: FrameworkOptions = {
staticDir: undefined,
addScripts: true,
addMainFile: true,
addPreviewFile: true,
addComponents: true,
webpackCompiler: () => undefined,
extraMain: undefined,
framework: undefined,
extensions: undefined,
componentsDestinationPath: undefined,
storybookConfigFolder: '.storybook',
installFrameworkPackages: true,
};

const getBuilderDetails = (builder: string) => {
Expand Down Expand Up @@ -202,12 +204,14 @@ export async function baseGenerator(
staticDir,
addScripts,
addMainFile,
addPreviewFile,
addComponents,
extraMain,
extensions,
storybookConfigFolder,
componentsDestinationPath,
webpackCompiler,
installFrameworkPackages,
} = {
...defaultOptions,
...options,
Expand Down Expand Up @@ -281,7 +285,7 @@ export async function baseGenerator(
const allPackages = [
'storybook',
getExternalFramework(rendererId) ? undefined : `@storybook/${rendererId}`,
...frameworkPackages,
...(installFrameworkPackages ? frameworkPackages : []),
...addonPackages,
...(extraPackagesToInstall || []),
].filter(Boolean);
Expand Down Expand Up @@ -323,7 +327,9 @@ export async function baseGenerator(
addDependenciesSpinner.succeed();
}

await fse.ensureDir(`./${storybookConfigFolder}`);
if (addMainFile || addPreviewFile) {
await fse.ensureDir(`./${storybookConfigFolder}`);
}

if (addMainFile) {
const prefixes = shouldApplyRequireWrapperOnPackageNames
Expand Down Expand Up @@ -371,12 +377,14 @@ export async function baseGenerator(
});
}

await configurePreview({
frameworkPreviewParts,
storybookConfigFolder: storybookConfigFolder as string,
language,
rendererId,
});
if (addPreviewFile) {
await configurePreview({
frameworkPreviewParts,
storybookConfigFolder: storybookConfigFolder as string,
language,
rendererId,
});
}

if (addScripts) {
await packageManager.addStorybookCommandInScripts({
Expand Down
2 changes: 2 additions & 0 deletions code/lib/cli/src/generators/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,15 @@ export interface FrameworkOptions {
staticDir?: string;
addScripts?: boolean;
addMainFile?: boolean;
addPreviewFile?: boolean;
addComponents?: boolean;
webpackCompiler?: ({ builder }: { builder: Builder }) => 'babel' | 'swc' | undefined;
extraMain?: any;
extensions?: string[];
framework?: Record<string, any>;
storybookConfigFolder?: string;
componentsDestinationPath?: string;
installFrameworkPackages?: boolean;
}

export type Generator<T = void> = (
Expand Down
1 change: 1 addition & 0 deletions code/lib/cli/src/helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,7 @@ export const frameworkToDefaultBuilder: Record<SupportedFrameworks, CoreBuilder>
'html-vite': CoreBuilder.Vite,
'html-webpack5': CoreBuilder.Webpack5,
nextjs: CoreBuilder.Webpack5,
nuxt: CoreBuilder.Vite,
'preact-vite': CoreBuilder.Vite,
'preact-webpack5': CoreBuilder.Webpack5,
qwik: CoreBuilder.Vite,
Expand Down
6 changes: 6 additions & 0 deletions code/lib/cli/src/initiate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import reactNativeGenerator from './generators/REACT_NATIVE';
import reactScriptsGenerator from './generators/REACT_SCRIPTS';
import nextjsGenerator from './generators/NEXTJS';
import vue3Generator from './generators/VUE3';
import nuxtGenerator from './generators/NUXT';
import webpackReactGenerator from './generators/WEBPACK_REACT';
import htmlGenerator from './generators/HTML';
import webComponentsGenerator from './generators/WEB-COMPONENTS';
Expand Down Expand Up @@ -109,6 +110,11 @@ const installStorybook = async <Project extends ProjectType>(
commandLog('Adding Storybook support to your "Vue 3" app')
);

case ProjectType.NUXT:
return nuxtGenerator(packageManager, npmOptions, generatorOptions).then(
commandLog('Adding Storybook support to your "Nuxt" app')
);

case ProjectType.ANGULAR:
commandLog('Adding Storybook support to your "Angular" app');
return angularGenerator(packageManager, npmOptions, generatorOptions, options);
Expand Down
14 changes: 10 additions & 4 deletions code/lib/cli/src/project_types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ export type ExternalFramework = {
export const externalFrameworks: ExternalFramework[] = [
{ name: 'qwik', packageName: 'storybook-framework-qwik' },
{ name: 'solid', frameworks: ['storybook-solidjs-vite'], renderer: 'storybook-solidjs' },
{ name: 'nuxt', packageName: '@storybook-vue/nuxt' },
];

/**
Expand Down Expand Up @@ -52,6 +53,7 @@ export enum ProjectType {
WEBPACK_REACT = 'WEBPACK_REACT',
NEXTJS = 'NEXTJS',
VUE3 = 'VUE3',
NUXT = 'NUXT',
ANGULAR = 'ANGULAR',
EMBER = 'EMBER',
WEB_COMPONENTS = 'WEB_COMPONENTS',
Expand Down Expand Up @@ -117,6 +119,13 @@ export type TemplateConfiguration = {
* therefore WEBPACK_REACT has to come first, as it's more specific.
*/
export const supportedTemplates: TemplateConfiguration[] = [
{
preset: ProjectType.NUXT,
dependencies: ['nuxt'],
matcherFunction: ({ dependencies }) => {
return dependencies?.every(Boolean) ?? true;
},
},
{
preset: ProjectType.VUE3,
dependencies: {
Expand Down Expand Up @@ -238,10 +247,7 @@ export const supportedTemplates: TemplateConfiguration[] = [
// users an "Unsupported framework" message
export const unsupportedTemplate: TemplateConfiguration = {
preset: ProjectType.UNSUPPORTED,
dependencies: {
// TODO(blaine): Remove when we support Nuxt 3
nuxt: (versionRange) => eqMajor(versionRange, 3),
},
dependencies: {},
matcherFunction: ({ dependencies }) => {
return dependencies?.some(Boolean) ?? false;
},
Expand Down