Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
async init() {
// tell the language server to use the built-in loggers
// from oclif
Debug.SetLoggers({
info: this.log,
warning: this.warn,
error: console.error
});
}
async init() {
const { flags, args } = this.parse(this.constructor as any);
this.ctx = { flags, args } as any;
// tell the language server to use the built-in loggers
// from oclif
Debug.SetLoggers({
info: this.log,
warning: this.warn,
error: console.error
});
const config = await this.createConfig(flags);
if (!config) return;
this.createService(config, flags);
this.ctx.config = config;
// make sure this the first item in the task list
// XXX Somehow this task gets pushed onto the stack multiple times sometimes
this.tasks.push({
title: "Loading Apollo Project",
task: async ctx => {
if (flags.endpoint) {
config.setDefaults({
service: {
endpoint: {
url: flags.endpoint,
headers: headersArrayToObject(flags.header),
...(flags.skipSSLValidation && { skipSSLValidation: true })
}
}
});
}
// this can set a single or multiple local schema files
if (flags.localSchemaFile) {
const files = flags.localSchemaFile.split(",");
if (isClientConfig(config)) {
config.setDefaults({
client: {
service: {
localSchemaFile: files
}
}
});
} else if (isServiceConfig(config)) {
config.setDefaults({
service: {
localSchemaFile: files
}
});
}
}
if (flags.endpoint) {
config.setDefaults({
service: {
endpoint: {
url: flags.endpoint,
headers: headersArrayToObject(flags.header),
...(flags.skipSSLValidation && { skipSSLValidation: true })
}
}
});
}
// this can set a single or multiple local schema files
if (flags.localSchemaFile) {
const files = flags.localSchemaFile.split(",");
if (isClientConfig(config)) {
config.setDefaults({
client: {
service: {
localSchemaFile: files
}
}
});
} else if (isServiceConfig(config)) {
config.setDefaults({
service: {
localSchemaFile: files
}
});
}
}
}
});
}
// this can set a single or multiple local schema files
if (flags.localSchemaFile) {
const files = flags.localSchemaFile.split(",");
if (isClientConfig(config)) {
config.setDefaults({
client: {
service: {
localSchemaFile: files
}
}
});
} else if (isServiceConfig(config)) {
config.setDefaults({
service: {
localSchemaFile: files
}
});
}
}
// load per command type defaults;
if (this.configMap) {
const defaults = this.configMap(flags);
config.setDefaults(defaults);
}
return config;
}
}
});
}
// this can set a single or multiple local schema files
if (flags.localSchemaFile) {
const files = flags.localSchemaFile.split(",");
if (isClientConfig(config)) {
config.setDefaults({
client: {
service: {
localSchemaFile: files
}
}
});
} else if (isServiceConfig(config)) {
config.setDefaults({
service: {
localSchemaFile: files
}
});
}
}
// load per command type defaults;
if (this.configMap) {
const defaults = this.configMap(flags);
config.setDefaults(defaults);
}
return config;
}
protected async createConfig(flags: Flags) {
const service = flags.key ? getServiceFromKey(flags.key) : undefined;
const config = await loadConfig({
configPath: flags.config && parse(resolve(flags.config)).dir,
configFileName: flags.config,
name: service,
type: this.type
});
if (!config) {
this.error("A config failed to load, so the command couldn't be run");
this.exit(1);
return;
}
config.tag = flags.tag || config.tag || "current";
// flag overrides
config.setDefaults({
protected async createConfig(flags: Flags) {
const service = flags.key ? getServiceFromKey(flags.key) : undefined;
const config = await loadConfig({
configPath: flags.config && parse(resolve(flags.config)).dir,
configFileName: flags.config,
name: service,
type: this.type
});
if (!config) {
this.error("A config failed to load, so the command couldn't be run");
this.exit(1);
return;
}
config.tag = flags.tag || config.tag || "current";
// flag overrides
config.setDefaults({
engine: {
watcher.on("all", (event, file) => {
// don't trigger write events for generated file changes
if (file.indexOf("__generated__") > -1) return;
// don't trigger write events on single output file
if (file.indexOf(output) > -1) return;
this.project.fileDidChange(URI.file(file).toString());
console.log("\nChange detected, generating types...");
try {
const fileCount = write();
console.log(`${chalk.green("✔")} Wrote ${fileCount} files`);
} catch (e) {
Debug.error("Error while generating types: " + e.message);
}
});
if (tty.isatty((process.stdin as any).fd)) {
// When no config is provided, configURI === process.cwd()
// In this case, we don't want to look to the .dir since that's the parent
const configPath = config.configURI!.fsPath;
const rootURI =
configPath === process.cwd()
? URI.file(configPath)
: URI.file(parse(configPath).dir);
const clientIdentity = {
name: "Apollo CLI",
version,
referenceID
};
if (isServiceConfig(config)) {
this.project = new GraphQLServiceProject({
config,
loadingHandler,
rootURI,
clientIdentity
});
} else if (isClientConfig(config)) {
this.project = new GraphQLClientProject({
config,
loadingHandler,
rootURI,
clientIdentity
});
} else {
throw new Error(
"Unable to resolve project type. Please add either a client or service config. For more information, please refer to https://bit.ly/2ByILPj"