UNPKG

@graphql-cli/init

Version:

Creates a GraphQL project using a template or GraphQL Config file for your existing project.

110 lines 4.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.managePackageManifest = exports.BackendType = exports.FrontendType = exports.ProjectType = exports.InitializationType = exports.askForEnum = void 0; const tslib_1 = require("tslib"); const path_1 = require("path"); const fs_extra_1 = require("fs-extra"); const inquirer_1 = require("inquirer"); const fullname_1 = tslib_1.__importDefault(require("fullname")); const latest_version_1 = tslib_1.__importDefault(require("latest-version")); async function askForEnum(options) { let choices; const enumValues = Object.values(options.enum); if (options.ignoreList) { choices = enumValues.filter((enumValue) => !options.ignoreList.includes(enumValue)); } else { choices = enumValues; } const { answer } = await inquirer_1.prompt([ { type: 'list', name: 'answer', message: options.message, choices, default: options.defaultValue, }, ]); return answer; } exports.askForEnum = askForEnum; var InitializationType; (function (InitializationType) { InitializationType["FromScratch"] = "I want to create a new project from a GraphQL CLI Project Template."; InitializationType["ExistingOpenAPI"] = "I have an existing project using OpenAPI/Swagger Schema Definition."; InitializationType["ExistingGraphQL"] = "I have an existing project using GraphQL and want to add GraphQL CLI (run from project root)."; })(InitializationType = exports.InitializationType || (exports.InitializationType = {})); var ProjectType; (function (ProjectType) { ProjectType["FullStack"] = "Full Stack"; ProjectType["FrontendOnly"] = "Frontend only"; ProjectType["BackendOnly"] = "Backend only"; })(ProjectType = exports.ProjectType || (exports.ProjectType = {})); var FrontendType; (function (FrontendType) { FrontendType["TSReactApollo"] = "TypeScript React Apollo"; FrontendType["ApolloAngular"] = "Apollo Angular"; FrontendType["StencilApollo"] = "Stencil Apollo"; FrontendType["TSUrql"] = "TypeScript Urql"; FrontendType["GraphQLRequest"] = "GraphQL Request"; FrontendType["ApolloAndroid"] = "Apollo Android"; FrontendType["Other"] = "Other"; })(FrontendType = exports.FrontendType || (exports.FrontendType = {})); var BackendType; (function (BackendType) { BackendType["TS"] = "TypeScript"; BackendType["Java"] = "Java"; BackendType["Kotlin"] = "Kotlin"; BackendType["Other"] = "Other"; })(BackendType = exports.BackendType || (exports.BackendType = {})); function managePackageManifest() { const packages = new Set(); const scripts = new Map(); return { addDependency(name) { packages.add(name); }, addScript(name, script) { scripts.set(name, script); }, async writePackage({ path, name, initializationType, }) { let packageJson = {}; const packageJsonPath = path_1.join(path, 'package.json'); // Try to load existing package.json try { const importedPackageJson = require(packageJsonPath); packageJson = importedPackageJson || {}; } catch (err) { } if (initializationType === InitializationType.FromScratch) { packageJson.private = true; packageJson.name = name; const author = await fullname_1.default(); if (author) { packageJson.author = { name: author, }; } } for (const [scriptName, scriptValue] of scripts) { if (!packageJson.scripts) { packageJson.scripts = {}; } if (!packageJson.scripts[scriptName]) { packageJson.scripts[scriptName] = scriptValue; } } // Add dev dependencies packageJson.devDependencies = packageJson.devDependencies || {}; for await (const npmDependency of packages) { if (!(npmDependency in packageJson.devDependencies)) { packageJson.devDependencies[npmDependency] = await latest_version_1.default(npmDependency); } } await fs_extra_1.ensureFile(packageJsonPath); fs_extra_1.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2)); }, }; } exports.managePackageManifest = managePackageManifest; //# sourceMappingURL=common.js.map