(
host: Tree,
deps: Record<string, { dev?: boolean, version: string }>,
context: SchematicContext
)
| 28 | } |
| 29 | |
| 30 | export const addDependencies = ( |
| 31 | host: Tree, |
| 32 | deps: Record<string, { dev?: boolean, version: string }>, |
| 33 | context: SchematicContext |
| 34 | ) => { |
| 35 | const packageJson = |
| 36 | host.exists('package.json') && safeReadJSON('package.json', host); |
| 37 | |
| 38 | if (packageJson === undefined) { |
| 39 | throw new SchematicsException('Could not locate package.json'); |
| 40 | } |
| 41 | |
| 42 | packageJson.devDependencies ??= {}; |
| 43 | packageJson.dependencies ??= {}; |
| 44 | |
| 45 | Object.keys(deps).forEach(depName => { |
| 46 | const dep = deps[depName]; |
| 47 | const existingDeps = dep.dev ? packageJson.devDependencies : packageJson.dependencies; |
| 48 | const existingVersion = existingDeps[depName]; |
| 49 | if (existingVersion) { |
| 50 | try { |
| 51 | if (!semverIntersects(existingVersion, dep.version)) { |
| 52 | context.logger.warn(`⚠️ The ${depName} devDependency specified in your package.json (${existingVersion}) does not fulfill AngularFire's dependency (${dep.version})`); |
| 53 | // TODO offer to fix |
| 54 | } |
| 55 | } catch (e) { |
| 56 | if (existingVersion !== dep.version) { |
| 57 | context.logger.warn(`⚠️ The ${depName} devDependency specified in your package.json (${existingVersion}) does not fulfill AngularFire's dependency (${dep.version})`); |
| 58 | // TODO offer to fix |
| 59 | } |
| 60 | } |
| 61 | } else { |
| 62 | existingDeps[depName] = dep.version; |
| 63 | } |
| 64 | }); |
| 65 | |
| 66 | overwriteIfExists(host, 'package.json', stringifyFormatted(packageJson)); |
| 67 | }; |
no test coverage detected