@nx/storybook 17.0.3 → 17.0.4

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.
Files changed (39) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +9 -4
  3. package/generators.json +2 -2
  4. package/migrations.json +140 -0
  5. package/package.json +7 -7
  6. package/plugin.d.ts +1 -0
  7. package/plugin.js +6 -0
  8. package/presets/cypress.d.ts +1 -20
  9. package/src/executors/build-storybook/build-storybook.impl.js +1 -1
  10. package/src/executors/storybook/storybook.impl.js +1 -1
  11. package/src/generators/configuration/configuration.d.ts +2 -1
  12. package/src/generators/configuration/configuration.js +69 -32
  13. package/src/generators/configuration/lib/edit-root-tsconfig.d.ts +8 -0
  14. package/src/generators/configuration/lib/edit-root-tsconfig.js +35 -0
  15. package/src/generators/configuration/lib/ensure-dependencies.d.ts +6 -0
  16. package/src/generators/configuration/lib/ensure-dependencies.js +70 -0
  17. package/src/generators/configuration/lib/util-functions.d.ts +11 -5
  18. package/src/generators/configuration/lib/util-functions.js +88 -69
  19. package/src/generators/configuration/project-files/.storybook/main.js__tmpl__ +23 -3
  20. package/src/generators/configuration/project-files-ts/.storybook/main.ts__tmpl__ +22 -3
  21. package/src/generators/configuration/schema.d.ts +9 -3
  22. package/src/generators/configuration/schema.json +6 -13
  23. package/src/generators/cypress-project/cypress-project.d.ts +3 -3
  24. package/src/generators/cypress-project/cypress-project.js +3 -8
  25. package/src/generators/cypress-project/schema.json +1 -1
  26. package/src/generators/init/init.d.ts +1 -0
  27. package/src/generators/init/init.js +47 -117
  28. package/src/generators/init/lib/update-gitignore.d.ts +2 -0
  29. package/src/generators/init/lib/update-gitignore.js +16 -0
  30. package/src/generators/init/schema.d.ts +5 -4
  31. package/src/generators/init/schema.json +18 -33
  32. package/src/migrations/update-16-5-0/move-storybook-tsconfig.js +1 -0
  33. package/src/plugins/plugin.d.ts +9 -0
  34. package/src/plugins/plugin.js +232 -0
  35. package/src/utils/models.d.ts +1 -1
  36. package/src/utils/utilities.d.ts +1 -0
  37. package/src/utils/utilities.js +30 -8
  38. package/src/utils/versions.d.ts +6 -7
  39. package/src/utils/versions.js +7 -8
@@ -1,89 +1,28 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.initGenerator = void 0;
3
+ exports.initGeneratorInternal = exports.initGenerator = void 0;
4
4
  const devkit_1 = require("@nx/devkit");
5
- const js_1 = require("@nx/js");
6
- const versions_1 = require("../../utils/versions");
7
- const utilities_1 = require("../../utils/utilities");
5
+ const update_package_scripts_1 = require("@nx/devkit/src/utils/update-package-scripts");
8
6
  const semver_1 = require("semver");
7
+ const plugin_1 = require("../../plugins/plugin");
8
+ const utilities_1 = require("../../utils/utilities");
9
+ const versions_1 = require("../../utils/versions");
10
+ const update_gitignore_1 = require("./lib/update-gitignore");
9
11
  function checkDependenciesInstalled(host, schema) {
10
- const packageJson = (0, devkit_1.readJson)(host, 'package.json');
11
- const devDependencies = {};
12
- const dependencies = {};
13
- packageJson.dependencies = packageJson.dependencies || {};
14
- packageJson.devDependencices = packageJson.devDependencices || {};
15
- // base deps
16
- devDependencies['@nx/storybook'] = versions_1.nxVersion;
17
- let storybook7VersionToInstall = versions_1.storybookVersion;
18
- if ((0, utilities_1.storybookMajorVersion)() === 7 &&
19
- (0, utilities_1.getInstalledStorybookVersion)() &&
20
- (0, semver_1.gte)((0, utilities_1.getInstalledStorybookVersion)(), '7.0.0')) {
21
- storybook7VersionToInstall = (0, utilities_1.getInstalledStorybookVersion)();
22
- }
23
- // Needed for Storybook 7
24
- // https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#react-peer-dependencies-required
25
- if (!packageJson.dependencies['react'] &&
26
- !packageJson.devDependencies['react']) {
27
- dependencies['react'] = versions_1.reactVersion;
28
- }
29
- if (!packageJson.dependencies['react-dom'] &&
30
- !packageJson.devDependencies['react-dom']) {
31
- dependencies['react-dom'] = versions_1.reactVersion;
32
- }
33
- devDependencies['@storybook/core-server'] = storybook7VersionToInstall;
34
- devDependencies['@storybook/addon-essentials'] = storybook7VersionToInstall;
35
- if (schema.uiFramework) {
36
- if (schema.uiFramework === '@storybook/react-native') {
37
- devDependencies['@storybook/react-native'] = versions_1.storybookReactNativeVersion;
38
- }
39
- else {
40
- devDependencies[schema.uiFramework] = storybook7VersionToInstall;
41
- const isPnpm = (0, devkit_1.detectPackageManager)(host.root) === 'pnpm';
42
- if (isPnpm) {
43
- // If it's pnpm, it needs the framework without the builder
44
- // as a dependency too (eg. @storybook/react)
45
- const matchResult = schema.uiFramework?.match(/^@storybook\/(\w+)/);
46
- const uiFrameworkWithoutBuilder = matchResult ? matchResult[0] : null;
47
- if (uiFrameworkWithoutBuilder) {
48
- devDependencies[uiFrameworkWithoutBuilder] =
49
- storybook7VersionToInstall;
50
- }
51
- }
52
- }
53
- if (schema.uiFramework === '@storybook/vue3-vite') {
54
- if (!packageJson.dependencies['@storybook/vue3'] &&
55
- !packageJson.devDependencies['@storybook/vue3']) {
56
- devDependencies['@storybook/vue3'] = storybook7VersionToInstall;
57
- }
58
- }
59
- if (schema.uiFramework === '@storybook/angular') {
60
- if (!packageJson.dependencies['@angular/forms'] &&
61
- !packageJson.devDependencies['@angular/forms']) {
62
- devDependencies['@angular/forms'] = '*';
63
- }
64
- }
65
- if (schema.uiFramework === '@storybook/web-components-vite' ||
66
- schema.uiFramework === '@storybook/web-components-webpack5') {
67
- devDependencies['lit'] = versions_1.litVersion;
68
- }
69
- if (schema.uiFramework === '@storybook/react-native') {
70
- devDependencies['@storybook/addon-ondevice-actions'] =
71
- versions_1.storybookReactNativeVersion;
72
- devDependencies['@storybook/addon-ondevice-backgrounds'] =
73
- versions_1.storybookReactNativeVersion;
74
- devDependencies['@storybook/addon-ondevice-controls'] =
75
- versions_1.storybookReactNativeVersion;
76
- devDependencies['@storybook/addon-ondevice-notes'] =
77
- versions_1.storybookReactNativeVersion;
78
- }
79
- if (schema.uiFramework.endsWith('-vite')) {
80
- if (!packageJson.dependencies['vite'] &&
81
- !packageJson.devDependencies['vite']) {
82
- devDependencies['vite'] = versions_1.viteVersion;
83
- }
12
+ const devDependencies = {
13
+ '@nx/storybook': versions_1.nxVersion,
14
+ '@nx/web': versions_1.nxVersion,
15
+ };
16
+ if (schema.addPlugin) {
17
+ let storybook7VersionToInstall = versions_1.storybookVersion;
18
+ if ((0, utilities_1.storybookMajorVersion)() >= 7 &&
19
+ (0, utilities_1.getInstalledStorybookVersion)() &&
20
+ (0, semver_1.gte)((0, utilities_1.getInstalledStorybookVersion)(), '7.0.0')) {
21
+ storybook7VersionToInstall = (0, utilities_1.getInstalledStorybookVersion)();
84
22
  }
23
+ devDependencies['storybook'] = storybook7VersionToInstall;
85
24
  }
86
- return (0, devkit_1.addDependenciesToPackageJson)(host, dependencies, devDependencies);
25
+ return (0, devkit_1.addDependenciesToPackageJson)(host, {}, devDependencies, undefined, schema.keepExistingVersions);
87
26
  }
88
27
  function addCacheableOperation(tree) {
89
28
  const nxJson = (0, devkit_1.readNxJson)(tree);
@@ -97,6 +36,7 @@ function addCacheableOperation(tree) {
97
36
  (0, devkit_1.updateNxJson)(tree, nxJson);
98
37
  }
99
38
  function moveToDevDependencies(tree) {
39
+ let updated = false;
100
40
  (0, devkit_1.updateJson)(tree, 'package.json', (packageJson) => {
101
41
  packageJson.dependencies = packageJson.dependencies || {};
102
42
  packageJson.devDependencies = packageJson.devDependencies || {};
@@ -104,50 +44,40 @@ function moveToDevDependencies(tree) {
104
44
  packageJson.devDependencies['@nx/storybook'] =
105
45
  packageJson.dependencies['@nx/storybook'];
106
46
  delete packageJson.dependencies['@nx/storybook'];
47
+ updated = true;
107
48
  }
108
49
  return packageJson;
109
50
  });
51
+ return updated ? () => (0, devkit_1.installPackagesTask)(tree) : () => { };
110
52
  }
111
- /**
112
- * This is a temporary fix for Storybook to support TypeScript configuration files.
113
- * The issue is that if there is a root tsconfig.json file, Storybook will use it, and
114
- * ignore the tsconfig.json file in the .storybook folder. This results in module being set
115
- * to esnext, and Storybook does not recognise the main.ts code as a module.
116
- */
117
- function editRootTsConfig(tree) {
118
- if (tree.exists('tsconfig.json')) {
119
- (0, devkit_1.updateJson)(tree, 'tsconfig.json', (json) => {
120
- if (json['ts-node']) {
121
- json['ts-node'] = {
122
- ...json['ts-node'],
123
- compilerOptions: {
124
- ...(json['ts-node'].compilerOptions ?? {}),
125
- module: 'commonjs',
126
- },
127
- };
128
- }
129
- else {
130
- json['ts-node'] = {
131
- compilerOptions: {
132
- module: 'commonjs',
133
- },
134
- };
135
- }
136
- return json;
137
- });
138
- }
53
+ function initGenerator(tree, schema) {
54
+ return initGeneratorInternal(tree, { addPlugin: false, ...schema });
139
55
  }
140
- async function initGenerator(tree, schema) {
56
+ exports.initGenerator = initGenerator;
57
+ async function initGeneratorInternal(tree, schema) {
58
+ const nxJson = (0, devkit_1.readNxJson)(tree);
59
+ const addPluginDefault = process.env.NX_ADD_PLUGINS !== 'false' &&
60
+ nxJson.useInferencePlugins !== false;
61
+ schema.addPlugin ??= addPluginDefault;
62
+ if (schema.addPlugin) {
63
+ (0, utilities_1.addPlugin)(tree);
64
+ (0, update_gitignore_1.updateGitignore)(tree);
65
+ }
66
+ else {
67
+ addCacheableOperation(tree);
68
+ }
141
69
  const tasks = [];
142
- tasks.push(await (0, js_1.initGenerator)(tree, {
143
- ...schema,
144
- skipFormat: true,
145
- }));
146
- tasks.push(checkDependenciesInstalled(tree, schema));
147
- moveToDevDependencies(tree);
148
- editRootTsConfig(tree);
149
- addCacheableOperation(tree);
70
+ if (!schema.skipPackageJson) {
71
+ tasks.push(moveToDevDependencies(tree));
72
+ tasks.push(checkDependenciesInstalled(tree, schema));
73
+ }
74
+ if (schema.updatePackageScripts) {
75
+ await (0, update_package_scripts_1.updatePackageScripts)(tree, plugin_1.createNodes);
76
+ }
77
+ if (!schema.skipFormat) {
78
+ await (0, devkit_1.formatFiles)(tree);
79
+ }
150
80
  return (0, devkit_1.runTasksInSerial)(...tasks);
151
81
  }
152
- exports.initGenerator = initGenerator;
82
+ exports.initGeneratorInternal = initGeneratorInternal;
153
83
  exports.default = initGenerator;
@@ -0,0 +1,2 @@
1
+ import { Tree } from '@nx/devkit';
2
+ export declare function updateGitignore(tree: Tree): void;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.updateGitignore = void 0;
4
+ function updateGitignore(tree) {
5
+ if (!tree.exists('.gitignore')) {
6
+ return;
7
+ }
8
+ const gitignore = tree.read('.gitignore', 'utf-8');
9
+ const regex = /storybook-static/gm;
10
+ const hasStorybookStatic = regex.test(gitignore ?? '');
11
+ if (hasStorybookStatic) {
12
+ return;
13
+ }
14
+ tree.write('.gitignore', `${gitignore}\n\nstorybook-static`);
15
+ }
16
+ exports.updateGitignore = updateGitignore;
@@ -1,6 +1,7 @@
1
- import { UiFramework } from '../../utils/models';
2
-
3
1
  export interface Schema {
4
- uiFramework: UiFramework;
5
- js?: boolean;
2
+ skipFormat?: boolean;
3
+ skipPackageJson?: boolean;
4
+ keepExistingVersions?: boolean;
5
+ updatePackageScripts?: boolean;
6
+ addPlugin?: boolean;
6
7
  }
@@ -5,41 +5,26 @@
5
5
  "$id": "init-storybook-plugin",
6
6
  "type": "object",
7
7
  "properties": {
8
- "uiFramework": {
9
- "type": "string",
10
- "description": "Storybook UI Framework to use.",
11
- "enum": [
12
- "@storybook/angular",
13
- "@storybook/html-webpack5",
14
- "@storybook/nextjs",
15
- "@storybook/preact-webpack5",
16
- "@storybook/react-webpack5",
17
- "@storybook/react-vite",
18
- "@storybook/server-webpack5",
19
- "@storybook/svelte-webpack5",
20
- "@storybook/svelte-vite",
21
- "@storybook/sveltekit",
22
- "@storybook/vue-webpack5",
23
- "@storybook/vue-vite",
24
- "@storybook/vue3-webpack5",
25
- "@storybook/vue3-vite",
26
- "@storybook/web-components-webpack5",
27
- "@storybook/web-components-vite",
28
- "@storybook/react",
29
- "@storybook/html",
30
- "@storybook/web-components",
31
- "@storybook/vue",
32
- "@storybook/vue3",
33
- "@storybook/svelte",
34
- "@storybook/react-native"
35
- ],
36
- "x-prompt": "What UI framework plugin should storybook use?",
37
- "x-priority": "important",
38
- "aliases": ["storybook7UiFramework"]
8
+ "skipFormat": {
9
+ "description": "Skip formatting files.",
10
+ "type": "boolean",
11
+ "default": false
12
+ },
13
+ "skipPackageJson": {
14
+ "description": "Do not add dependencies to `package.json`.",
15
+ "type": "boolean",
16
+ "default": false
17
+ },
18
+ "keepExistingVersions": {
19
+ "type": "boolean",
20
+ "x-priority": "internal",
21
+ "description": "Keep existing dependencies versions",
22
+ "default": false
39
23
  },
40
- "js": {
24
+ "updatePackageScripts": {
41
25
  "type": "boolean",
42
- "description": "Generate JavaScript story files rather than TypeScript story files.",
26
+ "x-priority": "internal",
27
+ "description": "Update `package.json` scripts with inferred targets",
43
28
  "default": false
44
29
  }
45
30
  }
@@ -14,6 +14,7 @@ async function default_1(tree) {
14
14
  (0, util_functions_1.renameAndMoveOldTsConfig)(projectRoot, pathToStorybookConfigFile, tree);
15
15
  });
16
16
  (0, util_functions_1.addStorybookToNamedInputs)(tree);
17
+ (0, util_functions_1.addStorybookToTargetDefaults)(tree, false);
17
18
  await (0, devkit_1.formatFiles)(tree);
18
19
  }
19
20
  exports.default = default_1;
@@ -0,0 +1,9 @@
1
+ import { CreateDependencies, CreateNodes } from '@nx/devkit';
2
+ export interface StorybookPluginOptions {
3
+ buildStorybookTargetName?: string;
4
+ serveStorybookTargetName?: string;
5
+ staticStorybookTargetName?: string;
6
+ testStorybookTargetName?: string;
7
+ }
8
+ export declare const createDependencies: CreateDependencies;
9
+ export declare const createNodes: CreateNodes<StorybookPluginOptions>;
@@ -0,0 +1,232 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createNodes = exports.createDependencies = void 0;
4
+ const devkit_1 = require("@nx/devkit");
5
+ const path_1 = require("path");
6
+ const get_named_inputs_1 = require("@nx/devkit/src/utils/get-named-inputs");
7
+ const fs_1 = require("fs");
8
+ const calculate_hash_for_create_nodes_1 = require("@nx/devkit/src/utils/calculate-hash-for-create-nodes");
9
+ const cache_directory_1 = require("nx/src/utils/cache-directory");
10
+ const js_1 = require("@nx/js");
11
+ const tsquery_1 = require("@phenomnomnominal/tsquery");
12
+ const cachePath = (0, path_1.join)(cache_directory_1.projectGraphCacheDirectory, 'storybook.hash');
13
+ const targetsCache = (0, fs_1.existsSync)(cachePath) ? readTargetsCache() : {};
14
+ const calculatedTargets = {};
15
+ function readTargetsCache() {
16
+ return (0, devkit_1.readJsonFile)(cachePath);
17
+ }
18
+ function writeTargetsToCache(targets) {
19
+ (0, devkit_1.writeJsonFile)(cachePath, targets);
20
+ }
21
+ const createDependencies = () => {
22
+ writeTargetsToCache(calculatedTargets);
23
+ return [];
24
+ };
25
+ exports.createDependencies = createDependencies;
26
+ exports.createNodes = [
27
+ '**/.storybook/main.{js,ts,mjs,mts,cjs,cts}',
28
+ (configFilePath, options, context) => {
29
+ let projectRoot = '';
30
+ if (configFilePath.includes('/.storybook')) {
31
+ projectRoot = (0, path_1.dirname)(configFilePath).replace('/.storybook', '');
32
+ }
33
+ else {
34
+ projectRoot = (0, path_1.dirname)(configFilePath).replace('.storybook', '');
35
+ }
36
+ if (projectRoot === '') {
37
+ projectRoot = '.';
38
+ }
39
+ // Do not create a project if package.json and project.json isn't there.
40
+ const siblingFiles = (0, fs_1.readdirSync)((0, path_1.join)(context.workspaceRoot, projectRoot));
41
+ if (!siblingFiles.includes('package.json') &&
42
+ !siblingFiles.includes('project.json')) {
43
+ return {};
44
+ }
45
+ options = normalizeOptions(options);
46
+ const hash = (0, calculate_hash_for_create_nodes_1.calculateHashForCreateNodes)(projectRoot, options, context, [
47
+ (0, js_1.getLockFileName)((0, devkit_1.detectPackageManager)(context.workspaceRoot)),
48
+ ]);
49
+ const projectName = buildProjectName(projectRoot, context.workspaceRoot);
50
+ const targets = targetsCache[hash]
51
+ ? targetsCache[hash]
52
+ : buildStorybookTargets(configFilePath, projectRoot, options, context, projectName);
53
+ calculatedTargets[hash] = targets;
54
+ const result = {
55
+ projects: {
56
+ [projectRoot]: {
57
+ root: projectRoot,
58
+ targets,
59
+ },
60
+ },
61
+ };
62
+ return result;
63
+ },
64
+ ];
65
+ function buildStorybookTargets(configFilePath, projectRoot, options, context, projectName) {
66
+ const buildOutputs = getOutputs(projectRoot);
67
+ const namedInputs = (0, get_named_inputs_1.getNamedInputs)(projectRoot, context);
68
+ const storybookFramework = getStorybookFramework(configFilePath, context);
69
+ const frameworkIsAngular = storybookFramework === "'@storybook/angular'";
70
+ if (frameworkIsAngular && !projectName) {
71
+ throw new Error(`Could not find a name for the project at '${projectRoot}'. Please make sure that the project has a package.json or project.json file with name specified.`);
72
+ }
73
+ const targets = {};
74
+ targets[options.buildStorybookTargetName] = buildTarget(namedInputs, buildOutputs, projectRoot, frameworkIsAngular, projectName, configFilePath);
75
+ targets[options.serveStorybookTargetName] = serveTarget(projectRoot, frameworkIsAngular, projectName, configFilePath);
76
+ targets[options.testStorybookTargetName] = testTarget(projectRoot);
77
+ targets[options.staticStorybookTargetName] = serveStaticTarget(options, projectRoot);
78
+ return targets;
79
+ }
80
+ function buildTarget(namedInputs, outputs, projectRoot, frameworkIsAngular, projectName, configFilePath) {
81
+ let targetConfig;
82
+ if (frameworkIsAngular) {
83
+ targetConfig = {
84
+ executor: '@storybook/angular:build-storybook',
85
+ options: {
86
+ configDir: `${(0, path_1.dirname)(configFilePath)}`,
87
+ browserTarget: `${projectName}:build-storybook`,
88
+ compodoc: false,
89
+ outputDir: (0, devkit_1.joinPathFragments)(projectRoot, 'storybook-static'),
90
+ },
91
+ cache: true,
92
+ outputs,
93
+ inputs: [
94
+ ...('production' in namedInputs
95
+ ? ['production', '^production']
96
+ : ['default', '^default']),
97
+ {
98
+ externalDependencies: [
99
+ 'storybook',
100
+ '@storybook/angular',
101
+ '@storybook/test-runner',
102
+ ],
103
+ },
104
+ ],
105
+ };
106
+ }
107
+ else {
108
+ targetConfig = {
109
+ command: `storybook build`,
110
+ options: { cwd: projectRoot },
111
+ cache: true,
112
+ outputs,
113
+ inputs: [
114
+ ...('production' in namedInputs
115
+ ? ['production', '^production']
116
+ : ['default', '^default']),
117
+ {
118
+ externalDependencies: ['storybook', '@storybook/test-runner'],
119
+ },
120
+ ],
121
+ };
122
+ }
123
+ return targetConfig;
124
+ }
125
+ function serveTarget(projectRoot, frameworkIsAngular, projectName, configFilePath) {
126
+ if (frameworkIsAngular) {
127
+ return {
128
+ executor: '@storybook/angular:start-storybook',
129
+ options: {
130
+ configDir: `${(0, path_1.dirname)(configFilePath)}`,
131
+ browserTarget: `${projectName}:build-storybook`,
132
+ compodoc: false,
133
+ },
134
+ };
135
+ }
136
+ else {
137
+ return {
138
+ command: `storybook dev`,
139
+ options: { cwd: projectRoot },
140
+ };
141
+ }
142
+ }
143
+ function testTarget(projectRoot) {
144
+ const targetConfig = {
145
+ command: `test-storybook`,
146
+ options: { cwd: projectRoot },
147
+ inputs: [
148
+ {
149
+ externalDependencies: ['storybook', '@storybook/test-runner'],
150
+ },
151
+ ],
152
+ };
153
+ return targetConfig;
154
+ }
155
+ function serveStaticTarget(options, projectRoot) {
156
+ const targetConfig = {
157
+ executor: '@nx/web:file-server',
158
+ options: {
159
+ buildTarget: `${options.buildStorybookTargetName}`,
160
+ staticFilePath: (0, devkit_1.joinPathFragments)(projectRoot, 'storybook-static'),
161
+ },
162
+ };
163
+ return targetConfig;
164
+ }
165
+ function getStorybookFramework(configFilePath, context) {
166
+ const resolvedPath = (0, path_1.join)(context.workspaceRoot, configFilePath);
167
+ const mainTsJs = (0, fs_1.readFileSync)(resolvedPath, 'utf-8');
168
+ const importDeclarations = tsquery_1.tsquery.query(mainTsJs, 'ImportDeclaration:has(ImportSpecifier:has([text="StorybookConfig"]))')?.[0];
169
+ if (!importDeclarations) {
170
+ return parseFrameworkName(mainTsJs);
171
+ }
172
+ const storybookConfigImportPackage = tsquery_1.tsquery.query(importDeclarations, 'StringLiteral')?.[0];
173
+ if (storybookConfigImportPackage?.getText() === `'@storybook/core-common'`) {
174
+ return parseFrameworkName(mainTsJs);
175
+ }
176
+ return storybookConfigImportPackage?.getText();
177
+ }
178
+ function parseFrameworkName(mainTsJs) {
179
+ const frameworkPropertyAssignment = tsquery_1.tsquery.query(mainTsJs, `PropertyAssignment:has(Identifier:has([text="framework"]))`)?.[0];
180
+ if (!frameworkPropertyAssignment) {
181
+ return undefined;
182
+ }
183
+ const propertyAssignments = tsquery_1.tsquery.query(frameworkPropertyAssignment, `PropertyAssignment:has(Identifier:has([text="name"]))`);
184
+ const namePropertyAssignment = propertyAssignments?.find((expression) => {
185
+ return expression.getText().startsWith('name');
186
+ });
187
+ if (!namePropertyAssignment) {
188
+ const storybookConfigImportPackage = tsquery_1.tsquery.query(frameworkPropertyAssignment, 'StringLiteral')?.[0];
189
+ return storybookConfigImportPackage?.getText();
190
+ }
191
+ return tsquery_1.tsquery.query(namePropertyAssignment, `StringLiteral`)?.[0]?.getText();
192
+ }
193
+ function getOutputs(projectRoot) {
194
+ const normalizedOutputPath = normalizeOutputPath(projectRoot);
195
+ const outputs = [
196
+ normalizedOutputPath,
197
+ `{options.output-dir}`,
198
+ `{options.outputDir}`,
199
+ `{options.o}`,
200
+ ];
201
+ return outputs;
202
+ }
203
+ function normalizeOutputPath(projectRoot) {
204
+ if (projectRoot === '.') {
205
+ return `{projectRoot}/storybook-static`;
206
+ }
207
+ else {
208
+ return `{workspaceRoot}/{projectRoot}/storybook-static`;
209
+ }
210
+ }
211
+ function normalizeOptions(options) {
212
+ options ??= {};
213
+ options.buildStorybookTargetName = 'build-storybook';
214
+ options.serveStorybookTargetName = 'storybook';
215
+ options.testStorybookTargetName = 'test-storybook';
216
+ options.staticStorybookTargetName = 'static-storybook';
217
+ return options;
218
+ }
219
+ function buildProjectName(projectRoot, workspaceRoot) {
220
+ const packageJsonPath = (0, path_1.join)(workspaceRoot, projectRoot, 'package.json');
221
+ const projectJsonPath = (0, path_1.join)(workspaceRoot, projectRoot, 'project.json');
222
+ let name;
223
+ if ((0, fs_1.existsSync)(projectJsonPath)) {
224
+ const projectJson = (0, devkit_1.parseJson)((0, fs_1.readFileSync)(projectJsonPath, 'utf-8'));
225
+ name = projectJson.name;
226
+ }
227
+ else if ((0, fs_1.existsSync)(packageJsonPath)) {
228
+ const packageJson = (0, devkit_1.parseJson)((0, fs_1.readFileSync)(packageJsonPath, 'utf-8'));
229
+ name = packageJson.name;
230
+ }
231
+ return name;
232
+ }
@@ -1 +1 @@
1
- export type UiFramework = '@storybook/angular' | '@storybook/html-webpack5' | '@storybook/nextjs' | '@storybook/preact-webpack5' | '@storybook/react-webpack5' | '@storybook/react-vite' | '@storybook/server-webpack5' | '@storybook/svelte-webpack5' | '@storybook/svelte-vite' | '@storybook/sveltekit' | '@storybook/vue-webpack5' | '@storybook/vue-vite' | '@storybook/vue3-webpack5' | '@storybook/vue3-vite' | '@storybook/web-components-webpack5' | '@storybook/web-components-vite' | '@storybook/react-native';
1
+ export type UiFramework = '@storybook/angular' | '@storybook/html-webpack5' | '@storybook/nextjs' | '@storybook/preact-webpack5' | '@storybook/react-webpack5' | '@storybook/react-vite' | '@storybook/server-webpack5' | '@storybook/svelte-webpack5' | '@storybook/svelte-vite' | '@storybook/sveltekit' | '@storybook/vue-webpack5' | '@storybook/vue-vite' | '@storybook/vue3-webpack5' | '@storybook/vue3-vite' | '@storybook/web-components-webpack5' | '@storybook/web-components-vite';
@@ -40,3 +40,4 @@ export declare function findStorybookAndBuildTargetsAndCompiler(targets: {
40
40
  export declare function isTheFileAStory(tree: Tree, path: string): boolean;
41
41
  export declare function getTsSourceFile(host: Tree, path: string): ts.SourceFile;
42
42
  export declare function pleaseUpgrade(): string;
43
+ export declare function addPlugin(tree: Tree): void;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.pleaseUpgrade = exports.getTsSourceFile = exports.isTheFileAStory = exports.findStorybookAndBuildTargetsAndCompiler = exports.dedupe = exports.storybookConfigExistsCheck = exports.safeFileDelete = exports.getInstalledStorybookVersion = exports.storybookMajorVersion = exports.Constants = void 0;
3
+ exports.addPlugin = exports.pleaseUpgrade = exports.getTsSourceFile = exports.isTheFileAStory = exports.findStorybookAndBuildTargetsAndCompiler = exports.dedupe = exports.storybookConfigExistsCheck = exports.safeFileDelete = exports.getInstalledStorybookVersion = exports.storybookMajorVersion = exports.Constants = void 0;
4
+ const devkit_1 = require("@nx/devkit");
4
5
  const fs_1 = require("fs");
5
6
  const js_1 = require("@nx/js");
6
7
  const ts = require("typescript");
@@ -92,9 +93,6 @@ function findStorybookAndBuildTargetsAndCompiler(targets) {
92
93
  '@nx/angular:webpack-browser',
93
94
  '@nx/esbuild:esbuild',
94
95
  '@nx/next:build',
95
- '@nx/react-native:bundle',
96
- '@nx/react-native:build-android',
97
- '@nx/react-native:bundle',
98
96
  '@nrwl/js:babel',
99
97
  '@nrwl/js:swc',
100
98
  '@nrwl/js:tsc',
@@ -107,15 +105,17 @@ function findStorybookAndBuildTargetsAndCompiler(targets) {
107
105
  '@nrwl/angular:webpack-browser',
108
106
  '@nrwl/esbuild:esbuild',
109
107
  '@nrwl/next:build',
110
- '@nrwl/react-native:bundle',
111
- '@nrwl/react-native:build-android',
112
- '@nrwl/react-native:bundle',
113
108
  '@nxext/vite:build',
109
+ '@angular-devkit/build-angular:application',
114
110
  '@angular-devkit/build-angular:browser',
111
+ '@angular-devkit/build-angular:browser-esbuild',
115
112
  ];
116
113
  for (const target in targets) {
117
114
  if (arrayOfBuilders.includes(targets[target].executor)) {
118
- if (targets[target].executor === '@angular-devkit/build-angular:browser') {
115
+ if (targets[target].executor === '@angular-devkit/build-angular:browser' ||
116
+ targets[target].executor ===
117
+ '@angular-devkit/build-angular:browser-esbuild' ||
118
+ targets[target].executor === '@angular-devkit/build-angular:application') {
119
119
  /**
120
120
  * Not looking for '@nx/angular:ng-packagr-lite' or any other
121
121
  * @nx/angular:* executors.
@@ -222,3 +222,25 @@ function pleaseUpgrade() {
222
222
  `;
223
223
  }
224
224
  exports.pleaseUpgrade = pleaseUpgrade;
225
+ function addPlugin(tree) {
226
+ const nxJson = (0, devkit_1.readNxJson)(tree);
227
+ nxJson.plugins ??= [];
228
+ for (const plugin of nxJson.plugins) {
229
+ if (typeof plugin === 'string'
230
+ ? plugin === '@nx/storybook/plugin'
231
+ : plugin.plugin === '@nx/storybook/plugin') {
232
+ return;
233
+ }
234
+ }
235
+ nxJson.plugins.push({
236
+ plugin: '@nx/storybook/plugin',
237
+ options: {
238
+ buildStorybookTargetName: 'build-storybook',
239
+ serveStorybookTargetName: 'storybook',
240
+ testStorybookTargetName: 'test-storybook',
241
+ staticStorybookTargetName: 'static-storybook',
242
+ },
243
+ });
244
+ (0, devkit_1.updateNxJson)(tree, nxJson);
245
+ }
246
+ exports.addPlugin = addPlugin;
@@ -1,12 +1,11 @@
1
1
  export declare const nxVersion: any;
2
- export declare const storybookReactNativeVersion = "^6.5.3";
3
- export declare const reactNativeStorybookLoader = "^2.0.5";
4
2
  export declare const storybookTestRunnerVersion = "^0.13.0";
5
- export declare const storybookTestingLibraryVersion = "~0.2.0";
6
- export declare const storybookJestVersion = "~0.1.0";
3
+ export declare const storybookTestingLibraryVersion = "^0.2.2";
4
+ export declare const storybookJestVersion = "^0.2.3";
7
5
  export declare const litVersion = "^2.6.1";
8
6
  export declare const tsNodeVersion = "10.9.1";
9
- export declare const storybookVersion = "^7.5.1";
7
+ export declare const tsLibVersion = "^2.3.0";
8
+ export declare const storybookVersion = "^7.5.3";
10
9
  export declare const reactVersion = "^18.2.0";
11
- export declare const viteVersion = "~4.3.9";
12
- export declare const coreJsVersion = "^3.6.5";
10
+ export declare const viteVersion = "~5.0.0";
11
+ export declare const coreJsVersion = "^3.36.1";