apollo-angular
Version:
Use your GraphQL data in your Angular app, with the Apollo Client
1 lines • 11.7 kB
Source Map (JSON)
{"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../../schematics/install/index.cts"],"names":[],"mappings":"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","sourcesContent":["import { dirname } from 'path';\nimport { CompilerOptions } from 'typescript';\nimport { tags } from '@angular-devkit/core';\nimport {\n apply,\n chain,\n mergeWith,\n move,\n Rule,\n SchematicContext,\n template,\n Tree,\n url,\n} from '@angular-devkit/schematics';\nimport { NodePackageInstallTask } from '@angular-devkit/schematics/tasks';\nimport { addRootProvider } from '@schematics/angular/utility';\nimport { getAppModulePath, isStandaloneApp } from '@schematics/angular/utility/ng-ast-utils';\nimport { getMainFilePath } from '@schematics/angular/utility/standalone/util';\nimport { addModuleImportToRootModule } from '../utils/ast.cjs';\nimport { getJsonFile } from '../utils/index.cjs';\nimport { Schema } from './schema.cjs';\n\nexport function factory(options: Schema): Rule {\n return chain([\n addDependencies(options),\n includeAsyncIterableLib(),\n allowSyntheticDefaultImports(),\n addSetupFiles(options),\n importHttpClient(options),\n importSetup(options),\n ]);\n}\n\nexport function createDependenciesMap(options: Schema): Record<string, string> {\n return {\n 'apollo-angular': '^7.0.0',\n '@apollo/client': '^3.0.0',\n graphql: `^${options.graphql ?? '16.0.0'}`,\n };\n}\n\n/**\n * Add all necessary node packages\n * as dependencies in the package.json\n * and installs them by running `npm install`.\n */\nfunction addDependencies(options: Schema): Rule {\n return (host: Tree, context: SchematicContext) => {\n const packageJsonPath = 'package.json';\n const packageJson = getJsonFile(host, packageJsonPath);\n\n packageJson.dependencies = packageJson.dependencies || {};\n\n const dependenciesMap = createDependenciesMap(options);\n for (const dependency in dependenciesMap) {\n if (dependenciesMap.hasOwnProperty(dependency)) {\n const version = dependenciesMap[dependency];\n if (!packageJson.dependencies[dependency]) {\n packageJson.dependencies[dependency] = version;\n }\n }\n }\n\n // save the changed file\n host.overwrite(packageJsonPath, JSON.stringify(packageJson, null, 2));\n\n // schedule `npm install`\n context.addTask(new NodePackageInstallTask());\n\n return host;\n };\n}\n\nfunction includeAsyncIterableLib(): Rule {\n const requiredLib = 'esnext.asynciterable';\n\n function updateFn(tsconfig: any): boolean {\n const compilerOptions: CompilerOptions = tsconfig.compilerOptions;\n\n if (\n compilerOptions &&\n compilerOptions.lib &&\n !compilerOptions.lib.find(lib => lib.toLowerCase() === requiredLib)\n ) {\n compilerOptions.lib.push(requiredLib);\n return true;\n }\n\n return false;\n }\n\n return (host: Tree) => {\n if (\n !updateTSConfig('tsconfig.json', host, updateFn) &&\n !updateTSConfig('tsconfig.base.json', host, updateFn)\n ) {\n console.error(\n '\\n' +\n tags.stripIndent`\n We couldn't find '${requiredLib}' in the list of library files to be included in the compilation.\n It's required by '@apollo/client/core' package so please add it to your tsconfig.\n ` +\n '\\n',\n );\n }\n\n return host;\n };\n}\n\nfunction updateTSConfig(\n tsconfigPath: string,\n host: Tree,\n updateFn: (tsconfig: any) => boolean,\n): boolean {\n try {\n const tsconfig = getJsonFile(host, tsconfigPath);\n\n if (updateFn(tsconfig)) {\n host.overwrite(tsconfigPath, JSON.stringify(tsconfig, null, 2));\n\n return true;\n }\n } catch (error) {\n //\n }\n\n return false;\n}\n\nfunction allowSyntheticDefaultImports(): Rule {\n function updateFn(tsconfig: any): boolean {\n if (\n tsconfig?.compilerOptions &&\n tsconfig?.compilerOptions?.lib &&\n !tsconfig.compilerOptions.allowSyntheticDefaultImports\n ) {\n tsconfig.compilerOptions.allowSyntheticDefaultImports = true;\n return true;\n }\n\n return false;\n }\n\n return (host: Tree) => {\n if (\n !updateTSConfig('tsconfig.json', host, updateFn) &&\n !updateTSConfig('tsconfig.base.json', host, updateFn)\n ) {\n console.error(\n '\\n' +\n tags.stripIndent`\n We couldn't enable 'allowSyntheticDefaultImports' flag.\n It's required by '@apollo/client/core' package so please add it to your tsconfig.\n ` +\n '\\n',\n );\n }\n\n return host;\n };\n}\n\nfunction addSetupFiles(options: Schema): Rule {\n return async (host: Tree) => {\n const mainPath = await getMainFilePath(host, options.project);\n const appModuleDirectory = dirname(mainPath) + '/app';\n if (isStandaloneApp(host, mainPath)) {\n const templateSource = apply(url('./files/standalone'), [\n template({\n endpoint: options.endpoint,\n }),\n move(appModuleDirectory),\n ]);\n\n return mergeWith(templateSource);\n } else {\n const appModulePath = getAppModulePath(host, mainPath);\n const appModuleDirectory = dirname(appModulePath);\n const templateSource = apply(url('./files/module'), [\n template({\n endpoint: options.endpoint,\n }),\n move(appModuleDirectory),\n ]);\n\n return mergeWith(templateSource);\n }\n };\n}\n\nfunction importSetup(options: Schema): Rule {\n return async (host: Tree) => {\n const mainPath = await getMainFilePath(host, options.project);\n if (isStandaloneApp(host, mainPath)) {\n return addRootProvider(options.project, ({ code, external }) => {\n return code`${external('provideApollo', 'apollo-angular')}(() => {\n const httpLink = ${external('inject', '@angular/core')}(${external('HttpLink', 'apollo-angular/http')});\n\n return {\n link: httpLink.create({\n uri: '<%= endpoint %>',\n }),\n cache: new ${external('InMemoryCache', '@apollo/client/core')}(),\n };\n })`;\n });\n } else {\n await addModuleImportToRootModule(host, 'GraphQLModule', './graphql.module', options.project);\n }\n };\n}\n\nfunction importHttpClient(options: Schema): Rule {\n return async (host: Tree) => {\n const mainPath = await getMainFilePath(host, options.project);\n if (isStandaloneApp(host, mainPath)) {\n return addRootProvider(options.project, ({ code, external }) => {\n return code`${external('provideHttpClient', '@angular/common/http')}()`;\n });\n } else {\n await addModuleImportToRootModule(\n host,\n 'HttpClientModule',\n '@angular/common/http',\n options.project,\n );\n }\n };\n}\n"]}