diff --git a/lib/cli/generators/ANGULAR/angular-helpers.js b/lib/cli/generators/ANGULAR/angular-helpers.js new file mode 100644 index 00000000000..f9013d39bc8 --- /dev/null +++ b/lib/cli/generators/ANGULAR/angular-helpers.js @@ -0,0 +1,37 @@ +import * as path from 'path'; +import * as fs from 'fs'; +import { readFileAsJson, writeFileAsJson } from '../../lib/helpers'; + +export function getAngularAppTsConfigPath() { + const angularJson = readFileAsJson('angular.json'); + const { defaultProject } = angularJson; + const tsConfigPath = angularJson.projects[defaultProject].architect.build.options.tsConfig; + + if (!tsConfigPath || !fs.existsSync(path.resolve(tsConfigPath))) { + return false; + } + return tsConfigPath; +} + +export function getAngularAppTsConfigJson() { + const tsConfigPath = getAngularAppTsConfigPath(); + + if (!tsConfigPath) { + return false; + } + + return readFileAsJson(tsConfigPath); +} + +function setStorybookTsconfigExtendsPath(tsconfigJson) { + const angularProjectTsConfigPath = getAngularAppTsConfigPath(); + const newTsconfigJson = { ...tsconfigJson }; + newTsconfigJson.extends = `../${angularProjectTsConfigPath}`; + return newTsconfigJson; +} + +export function editStorybookTsConfig(tsconfigPath) { + let tsConfigJson = readFileAsJson(tsconfigPath); + tsConfigJson = setStorybookTsconfigExtendsPath(tsConfigJson); + writeFileAsJson(tsconfigPath, tsConfigJson); +} diff --git a/lib/cli/generators/ANGULAR/index.js b/lib/cli/generators/ANGULAR/index.js index 8e660baaff7..d437358cf96 100644 --- a/lib/cli/generators/ANGULAR/index.js +++ b/lib/cli/generators/ANGULAR/index.js @@ -1,13 +1,17 @@ import mergeDirs from 'merge-dirs'; import path from 'path'; +import { + editStorybookTsConfig, + getAngularAppTsConfigJson, + getAngularAppTsConfigPath, +} from './angular-helpers'; import { getVersions, getPackageJson, writePackageJson, getBabelDependencies, installDependencies, - getAngularAppTsConfigJson, - writeAngularAppTsConfig, + writeFileAsJson, } from '../../lib/helpers'; async function addDependencies(npmOptions) { @@ -62,7 +66,7 @@ function editAngularAppTsConfig() { } tsConfigJson.exclude = [...exclude, glob]; - writeAngularAppTsConfig(tsConfigJson); + writeFileAsJson(getAngularAppTsConfigPath(), tsConfigJson); } export default async npmOptions => { @@ -70,4 +74,5 @@ export default async npmOptions => { await addDependencies(npmOptions); editAngularAppTsConfig(); + editStorybookTsConfig(path.resolve('./.storybook/tsconfig.json')); }; diff --git a/lib/cli/generators/ANGULAR/template/.storybook/tsconfig.json b/lib/cli/generators/ANGULAR/template/.storybook/tsconfig.json index f01af58ecde..28aadc68fd9 100644 --- a/lib/cli/generators/ANGULAR/template/.storybook/tsconfig.json +++ b/lib/cli/generators/ANGULAR/template/.storybook/tsconfig.json @@ -1,20 +1,9 @@ { - "extends": "../src/tsconfig.app.json", + "extends": "%SET_DURING_SB_INIT%", "compilerOptions": { - "types": [ - "node" - ] + "types": ["node"] }, - "exclude": [ - "../src/test.ts", - "../src/**/*.spec.ts", - "../projects/**/*.spec.ts" - ], - "include": [ - "../src/**/*", - "../projects/**/*" - ], - "files": [ - "./typings.d.ts" - ] + "exclude": ["../src/test.ts", "../src/**/*.spec.ts", "../projects/**/*.spec.ts"], + "include": ["../src/**/*", "../projects/**/*"], + "files": ["./typings.d.ts"] } diff --git a/lib/cli/lib/helpers.js b/lib/cli/lib/helpers.js index 2cffc0c502c..03290d91ae5 100644 --- a/lib/cli/lib/helpers.js +++ b/lib/cli/lib/helpers.js @@ -62,44 +62,25 @@ export function getBowerJson() { return JSON.parse(jsonContent); } -export function getAngularJson() { - const angularJsonPath = path.resolve('angular.json'); - if (!fs.existsSync(angularJsonPath)) { +export function readFileAsJson(jsonPath) { + const filePath = path.resolve(jsonPath); + if (!fs.existsSync(filePath)) { return false; } - const jsonContent = fs.readFileSync(angularJsonPath, 'utf8'); + const jsonContent = fs.readFileSync(filePath, 'utf8'); return JSON.parse(jsonContent); } -export function getAngularAppTsConfigPath() { - const angularJson = getAngularJson(); - const { defaultProject } = angularJson; - const tsConfigPath = angularJson.projects[defaultProject].architect.build.options.tsConfig; - - if (!tsConfigPath || !fs.existsSync(path.resolve(tsConfigPath))) { - return false; - } - return tsConfigPath; -} - -export function getAngularAppTsConfigJson() { - const tsConfigPath = getAngularAppTsConfigPath(); - - if (!tsConfigPath || !fs.existsSync(path.resolve(tsConfigPath))) { +export function writeFileAsJson(jsonPath, content) { + const filePath = path.resolve(jsonPath); + if (!fs.existsSync(filePath)) { return false; } - const jsonContent = fs.readFileSync(tsConfigPath, 'utf8'); - return JSON.parse(jsonContent); -} - -export function writeAngularAppTsConfig(tsConfigJson) { - const content = `${JSON.stringify(tsConfigJson, null, 2)}\n`; - const tsConfigPath = getAngularAppTsConfigPath(); - if (tsConfigPath) { - fs.writeFileSync(path.resolve(tsConfigPath), content, 'utf8'); - } + const jsonContent = fs.readFileSync(filePath, 'utf8'); + fs.writeFileSync(filePath, `${JSON.stringify(content, null, 2)}\n`); + return true; } export function writePackageJson(packageJson) {