Skip to content

Commit

Permalink
Merge branch 'next' into tech/tsup-core-server-v2
Browse files Browse the repository at this point in the history
  • Loading branch information
ndelangen committed Dec 7, 2022
2 parents a397fd3 + 9275eb9 commit 4143f84
Show file tree
Hide file tree
Showing 19 changed files with 429 additions and 48 deletions.
2 changes: 1 addition & 1 deletion code/frameworks/nextjs/template/cli/js/Introduction.mdx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Meta } from '@storybook/addon-docs';
import { Meta } from '@storybook/blocks';
import Image from 'next/image';

import Code from './assets/code-brackets.svg';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Meta } from '@storybook/addon-docs';
import { Meta } from '@storybook/blocks';
import Image from 'next/image';

import Code from './assets/code-brackets.svg';
Expand Down
2 changes: 1 addition & 1 deletion code/lib/cli/rendererAssets/common/Introduction.mdx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Meta } from '@storybook/addon-docs';
import { Meta } from '@storybook/blocks';
import Code from './assets/code-brackets.svg';
import Colors from './assets/colors.svg';
import Comments from './assets/comments.svg';
Expand Down
15 changes: 14 additions & 1 deletion code/lib/cli/src/automigrate/fixes/new-frameworks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,20 @@ export const getBuilder = (builder: string | { name: string }) => {
};

export const getFrameworkOptions = (framework: string, main: ConfigFile) => {
const frameworkOptions = main.getFieldValue([`${framework}Options`]);
let frameworkOptions = {};
try {
frameworkOptions = main.getFieldValue([`${framework}Options`]);
} catch (e) {
logger.warn(dedent`
Unable to get the ${framework}Options field.
Please review the changes made to your main.js config and make any necessary changes.
The ${framework}Options should be moved to the framework.options field.
The following error occurred when we tried to get the ${framework}Options field:
`);
console.log(e);
}
return frameworkOptions || {};
};

Expand Down
4 changes: 1 addition & 3 deletions code/lib/cli/src/generators/baseGenerator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,7 @@ export async function baseGenerator(
const addonPackages = [
'@storybook/addon-links',
'@storybook/addon-essentials',
'@storybook/blocks',
...extraAddonPackages,
];

Expand All @@ -152,8 +153,6 @@ export async function baseGenerator(
addonPackages.push('@storybook/addon-interactions', '@storybook/testing-library');
}

const yarn2ExtraPackages = packageManager.type === 'yarn2' ? ['@storybook/addon-docs'] : [];

const files = await fse.readdir(process.cwd());

const packageJson = packageManager.retrievePackageJson();
Expand Down Expand Up @@ -187,7 +186,6 @@ export async function baseGenerator(
...frameworkPackages,
...addonPackages,
...extraPackages,
...yarn2ExtraPackages,
]
.filter(Boolean)
.filter(
Expand Down
15 changes: 9 additions & 6 deletions code/lib/core-server/src/build-static.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { dedent } from 'ts-dedent';
import global from 'global';

import { logger } from '@storybook/node-logger';
import { telemetry } from '@storybook/telemetry';
import { telemetry, getPrecedingUpgrade } from '@storybook/telemetry';
import type {
BuilderOptions,
CLIOptions,
Expand Down Expand Up @@ -176,11 +176,14 @@ export async function buildStaticStandalone(
effects.push(
initializedStoryIndexGenerator.then(async (generator) => {
const storyIndex = await generator?.getIndex();
const payload = storyIndex
? {
storyIndex: summarizeIndex(storyIndex),
}
: undefined;
const payload = {
precedingUpgrade: await getPrecedingUpgrade(),
};
if (storyIndex) {
Object.assign(payload, {
storyIndex: summarizeIndex(storyIndex),
});
}
await telemetry('build', payload, { configDir: options.configDir });
})
);
Expand Down
17 changes: 10 additions & 7 deletions code/lib/core-server/src/utils/doTelemetry.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import type { CoreConfig, Options } from '@storybook/types';
import { telemetry } from '@storybook/telemetry';
import { telemetry, getPrecedingUpgrade } from '@storybook/telemetry';
import { useStorybookMetadata } from './metadata';
import type { StoryIndexGenerator } from './StoryIndexGenerator';
import { summarizeIndex } from './summarizeIndex';
Expand All @@ -15,12 +15,15 @@ export async function doTelemetry(
initializedStoryIndexGenerator.then(async (generator) => {
const storyIndex = await generator?.getIndex();
const { versionCheck, versionUpdates } = options;
const payload = storyIndex
? {
versionStatus: versionUpdates ? versionStatus(versionCheck) : 'disabled',
storyIndex: summarizeIndex(storyIndex),
}
: undefined;
const payload = {
precedingUpgrade: await getPrecedingUpgrade(),
};
if (storyIndex) {
Object.assign(payload, {
versionStatus: versionUpdates ? versionStatus(versionCheck) : 'disabled',
storyIndex: summarizeIndex(storyIndex),
});
}
telemetry('dev', payload, { configDir: options.configDir });
});
}
Expand Down
20 changes: 10 additions & 10 deletions code/lib/core-server/src/withTelemetry.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,10 +63,10 @@ describe('when command fails', () => {
withTelemetry('dev', { presetOptions: {} as any }, run)
).rejects.toThrow(error);

expect(telemetry).toHaveBeenCalledTimes(1);
expect(telemetry).not.toHaveBeenCalledWith(
expect(telemetry).toHaveBeenCalledTimes(2);
expect(telemetry).toHaveBeenCalledWith(
'error',
{ eventType: 'dev', error },
{ eventType: 'dev' },
expect.objectContaining({})
);
});
Expand All @@ -88,7 +88,7 @@ describe('when command fails', () => {
);
});

it('does not send error message when telemetry is disabled', async () => {
it('does not send full error message when telemetry is disabled', async () => {
jest.mocked(loadAllPresets).mockResolvedValueOnce({
apply: async () => ({ disableTelemetry: true } as any),
});
Expand Down Expand Up @@ -132,10 +132,10 @@ describe('when command fails', () => {
withTelemetry('dev', { presetOptions: {} as any }, run)
).rejects.toThrow(error);

expect(telemetry).toHaveBeenCalledTimes(1);
expect(telemetry).not.toHaveBeenCalledWith(
expect(telemetry).toHaveBeenCalledTimes(2);
expect(telemetry).toHaveBeenCalledWith(
'error',
{ eventType: 'dev', error },
{ eventType: 'dev' },
expect.objectContaining({})
);
});
Expand Down Expand Up @@ -169,10 +169,10 @@ describe('when command fails', () => {
withTelemetry('dev', { presetOptions: {} as any }, run)
).rejects.toThrow(error);

expect(telemetry).toHaveBeenCalledTimes(1);
expect(telemetry).not.toHaveBeenCalledWith(
expect(telemetry).toHaveBeenCalledTimes(2);
expect(telemetry).toHaveBeenCalledWith(
'error',
{ eventType: 'dev', error },
{ eventType: 'dev' },
expect.objectContaining({})
);
});
Expand Down
29 changes: 17 additions & 12 deletions code/lib/core-server/src/withTelemetry.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import prompts from 'prompts';
import type { CLIOptions, CoreConfig } from '@storybook/types';
import { loadAllPresets, cache } from '@storybook/core-common';
import { telemetry } from '@storybook/telemetry';
import { telemetry, getPrecedingUpgrade } from '@storybook/telemetry';
import type { EventType } from '@storybook/telemetry';

type TelemetryOptions = {
Expand All @@ -26,11 +26,13 @@ const promptCrashReports = async () => {
return enableCrashReports;
};

async function shouldSendError({ cliOptions, presetOptions }: TelemetryOptions) {
if (cliOptions?.disableTelemetry) return false;
type ErrorLevel = 'none' | 'error' | 'full';

async function getErrorLevel({ cliOptions, presetOptions }: TelemetryOptions): Promise<ErrorLevel> {
if (cliOptions?.disableTelemetry) return 'none';

// If we are running init or similar, we just have to go with true here
if (!presetOptions) return true;
if (!presetOptions) return 'full';

// should we load the preset?
const presets = await loadAllPresets({
Expand All @@ -42,18 +44,18 @@ async function shouldSendError({ cliOptions, presetOptions }: TelemetryOptions)
// If the user has chosen to enable/disable crash reports in main.js
// or disabled telemetry, we can return that
const core = await presets.apply<CoreConfig>('core');
if (core?.enableCrashReports !== undefined) return core.enableCrashReports;
if (core?.disableTelemetry) return false;
if (core?.enableCrashReports !== undefined) return core.enableCrashReports ? 'full' : 'error';
if (core?.disableTelemetry) return 'none';

// Deal with typo, remove in future version (7.1?)
const valueFromCache =
(await cache.get('enableCrashReports')) ?? (await cache.get('enableCrashreports'));
if (valueFromCache !== undefined) return valueFromCache;
if (valueFromCache !== undefined) return valueFromCache ? 'full' : 'error';

const valueFromPrompt = await promptCrashReports();
if (valueFromPrompt !== undefined) return valueFromPrompt;
if (valueFromPrompt !== undefined) return valueFromPrompt ? 'full' : 'error';

return true;
return 'full';
}

export async function withTelemetry(
Expand All @@ -67,14 +69,17 @@ export async function withTelemetry(
await run();
} catch (error) {
try {
if (await shouldSendError(options)) {
const errorLevel = await getErrorLevel(options);
if (errorLevel !== 'none') {
const precedingUpgrade = await getPrecedingUpgrade();

await telemetry(
'error',
{ eventType, error },
{ eventType, precedingUpgrade, error: errorLevel === 'full' ? error : undefined },
{
immediate: true,
configDir: options.cliOptions?.configDir || options.presetOptions?.configDir,
enableCrashReports: true,
enableCrashReports: errorLevel === 'full',
}
);
}
Expand Down
Loading

0 comments on commit 4143f84

Please sign in to comment.