🚀 Big News: Socket Acquires Coana to Bring Reachability Analysis to Every Appsec Team.Learn more
Socket
Book a DemoInstallSign in
Socket

apollo-codegen-typescript-legacy

Package Overview
Dependencies
Maintainers
1
Versions
15
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

apollo-codegen-typescript-legacy - npm Package Compare versions

Comparing version

to
0.27.3

LICENSE

8

lib/codeGeneration.d.ts

@@ -1,5 +0,5 @@

import { LegacyCompilerContext, LegacyInlineFragment, LegacyFragment, LegacyOperation } from 'apollo-codegen-core/lib/compiler/legacyIR';
import { GraphQLType } from 'graphql';
import CodeGenerator from 'apollo-codegen-core/lib/utilities/CodeGenerator';
import { Property } from './language';
import { LegacyCompilerContext, LegacyInlineFragment, LegacyFragment, LegacyOperation } from "apollo-codegen-core/lib/compiler/legacyIR";
import { GraphQLType } from "graphql";
import CodeGenerator from "apollo-codegen-core/lib/utilities/CodeGenerator";
import { Property } from "./language";
export declare function generateSource(context: LegacyCompilerContext): string;

@@ -6,0 +6,0 @@ export declare function typeDeclarationForGraphQLType(generator: CodeGenerator, type: GraphQLType): void;

@@ -10,4 +10,4 @@ "use strict";

const generator = new CodeGenerator_1.default(context);
generator.printOnNewline('/* tslint:disable */');
generator.printOnNewline('// This file was automatically generated and should not be edited.');
generator.printOnNewline("/* tslint:disable */");
generator.printOnNewline("// This file was automatically generated and should not be edited.");
context.typesUsed.forEach(type => typeDeclarationForGraphQLType(generator, type));

@@ -38,3 +38,3 @@ Object.values(context.operations).forEach(operation => {

generator.printOnNewline(`export enum ${name} {`);
graphql_2.sortEnumValues(values).forEach((value) => {
graphql_2.sortEnumValues(values).forEach(value => {
printDocComment(generator, value.description || undefined, 1);

@@ -49,3 +49,3 @@ generator.printOnNewline(` ${value.value} = "${value.value}",`);

language_1.interfaceDeclaration(generator, {
interfaceName,
interfaceName
}, () => {

@@ -58,9 +58,9 @@ const properties = propertiesFromFields(generator.context, Object.values(type.getFields()));

switch (operationType) {
case 'query':
case "query":
return `${operationName}Query`;
break;
case 'mutation':
case "mutation":
return `${operationName}Mutation`;
break;
case 'subscription':
case "subscription":
return `${operationName}Subscription`;

@@ -76,5 +76,8 @@ break;

}
const interfaceName = `${interfaceNameFromOperation({ operationName, operationType })}Variables`;
const interfaceName = `${interfaceNameFromOperation({
operationName,
operationType
})}Variables`;
language_1.interfaceDeclaration(generator, {
interfaceName,
interfaceName
}, () => {

@@ -97,3 +100,6 @@ const properties = propertiesFromFields(generator.context, variables);

if (type instanceof graphql_1.GraphQLUnionType) {
return type.getTypes().map(type => getObjectTypeName(type)).join(" | ");
return type
.getTypes()
.map(type => getObjectTypeName(type))
.join(" | ");
}

@@ -103,20 +109,24 @@ return `"${type.name}"`;

function updateTypeNameField(rootField) {
const fields = rootField.fields && rootField.fields.map(field => {
if (field.fieldName === '__typename') {
const objectTypeName = getObjectTypeName(rootField.type);
return Object.assign({}, field, { typeName: objectTypeName, type: { name: objectTypeName } });
}
if (field.fields) {
return updateTypeNameField(field);
}
return field;
});
const fields = rootField.fields &&
rootField.fields.map(field => {
if (field.fieldName === "__typename") {
const objectTypeName = getObjectTypeName(rootField.type);
return Object.assign({}, field, { typeName: objectTypeName, type: { name: objectTypeName } });
}
if (field.fields) {
return updateTypeNameField(field);
}
return field;
});
return Object.assign({}, rootField, { fields });
}
function interfaceDeclarationForOperation(generator, { operationName, operationType, fields }) {
const interfaceName = interfaceNameFromOperation({ operationName, operationType });
const interfaceName = interfaceNameFromOperation({
operationName,
operationType
});
fields = fields.map(field => updateTypeNameField(field));
const properties = propertiesFromFields(generator.context, fields);
language_1.interfaceDeclaration(generator, {
interfaceName,
interfaceName
}, () => {

@@ -135,4 +145,3 @@ propertyDeclarations(generator, properties);

if (graphql_1.isAbstractType(typeCondition)) {
const propertySets = fragment.possibleTypes
.map(type => {
const propertySets = fragment.possibleTypes.map(type => {
const inlineFragment = inlineFragments.find(inlineFragment => {

@@ -143,4 +152,6 @@ return inlineFragment.typeCondition.toString() == type.toString();

const fields = inlineFragment.fields.map(field => {
if (field.fieldName === '__typename') {
return Object.assign({}, field, { typeName: `"${inlineFragment.typeCondition}"`, type: { name: `"${inlineFragment.typeCondition}"` } });
if (field.fieldName === "__typename") {
return Object.assign({}, field, { typeName: `"${inlineFragment.typeCondition}"`, type: {
name: `"${inlineFragment.typeCondition}"`
} });
}

@@ -155,3 +166,3 @@ else {

const fragmentFields = fields.map(field => {
if (field.fieldName === '__typename') {
if (field.fieldName === "__typename") {
return Object.assign({}, field, { typeName: `"${type}"`, type: { name: `"${type}"` } });

@@ -170,3 +181,3 @@ }

const fragmentFields = fields.map(field => {
if (field.fieldName === '__typename') {
if (field.fieldName === "__typename") {
return Object.assign({}, field, { typeName: `"${fragment.typeCondition}"`, type: { name: `"${fragment.typeCondition}"` } });

@@ -206,11 +217,16 @@ }

}
else if (fieldType instanceof graphql_1.GraphQLNonNull && fieldType.ofType instanceof graphql_1.GraphQLList) {
else if (fieldType instanceof graphql_1.GraphQLNonNull &&
fieldType.ofType instanceof graphql_1.GraphQLList) {
isArray = true;
isArrayElementNullable = !(fieldType.ofType.ofType instanceof graphql_1.GraphQLNonNull);
}
return Object.assign({}, property, { typeName, fields: field.fields, isComposite: true, fragmentSpreads, inlineFragments, fieldType,
isArray, isNullable, isArrayElementNullable });
return Object.assign({}, property, { typeName, fields: field.fields, isComposite: true, fragmentSpreads,
inlineFragments,
fieldType,
isArray,
isNullable,
isArrayElementNullable });
}
else {
if (field.fieldName === '__typename') {
if (field.fieldName === "__typename") {
const typeName = types_1.typeNameFromGraphQLType(context, fieldType, null, false);

@@ -221,3 +237,4 @@ return Object.assign({}, property, { typeName, isComposite: false, fieldType, isNullable: false });

const typeName = types_1.typeNameFromGraphQLType(context, fieldType, null, isNullable);
return Object.assign({}, property, { typeName, isComposite: false, fieldType, isNullable });
return Object.assign({}, property, { typeName, isComposite: false, fieldType,
isNullable });
}

@@ -232,11 +249,13 @@ }

if (graphql_1.isAbstractType(graphql_1.getNamedType(property.type || property.fieldType))) {
const propertySets = getPossibleTypeNames(generator, property)
.map(type => {
const inlineFragment = property.inlineFragments && property.inlineFragments.find(inlineFragment => {
return inlineFragment.typeCondition.toString() == type;
});
const propertySets = getPossibleTypeNames(generator, property).map(type => {
const inlineFragment = property.inlineFragments &&
property.inlineFragments.find(inlineFragment => {
return inlineFragment.typeCondition.toString() == type;
});
if (inlineFragment) {
const fields = inlineFragment.fields.map(field => {
if (field.fieldName === '__typename') {
return Object.assign({}, field, { typeName: `"${inlineFragment.typeCondition}"`, type: { name: `"${inlineFragment.typeCondition}"` } });
if (field.fieldName === "__typename") {
return Object.assign({}, field, { typeName: `"${inlineFragment.typeCondition}"`, type: {
name: `"${inlineFragment.typeCondition}"`
} });
}

@@ -251,3 +270,3 @@ else {

const fields = property.fields.map(field => {
if (field.fieldName === '__typename') {
if (field.fieldName === "__typename") {
return Object.assign({}, field, { typeName: `"${type}"`, type: { name: `"${type}"` } });

@@ -265,8 +284,8 @@ }

else {
if (property.fields && property.fields.length > 0
|| property.inlineFragments && property.inlineFragments.length > 0
|| property.fragmentSpreads && property.fragmentSpreads.length > 0) {
if ((property.fields && property.fields.length > 0) ||
(property.inlineFragments && property.inlineFragments.length > 0) ||
(property.fragmentSpreads && property.fragmentSpreads.length > 0)) {
language_1.propertyDeclaration(generator, property, () => {
const fields = property.fields.map(field => {
if (field.fieldName === '__typename') {
if (field.fieldName === "__typename") {
const objectTypeName = getObjectTypeName(property.fieldType || property.type);

@@ -292,4 +311,7 @@ return Object.assign({}, field, { typeName: objectTypeName, type: { name: objectTypeName } });

const type = graphql_1.getNamedType(property.fieldType || property.type);
if (type instanceof graphql_1.GraphQLUnionType || type instanceof graphql_1.GraphQLInterfaceType) {
return generator.context.schema.getPossibleTypes(type).map(type => type.name);
if (type instanceof graphql_1.GraphQLUnionType ||
type instanceof graphql_1.GraphQLInterfaceType) {
return generator.context.schema
.getPossibleTypes(type)
.map(type => type.name);
}

@@ -302,6 +324,5 @@ return [];

}
const leadingSpace = ' '.repeat(2 * depth);
const leadingSpace = " ".repeat(2 * depth);
generator.printOnNewline(`${leadingSpace}/**`);
description.split('\n')
.forEach(line => {
description.split("\n").forEach(line => {
generator.printOnNewline(`${leadingSpace} * ${line.trim()}`);

@@ -308,0 +329,0 @@ });

@@ -1,1 +0,1 @@

export { generateSource } from './codeGeneration';
export { generateSource } from "./codeGeneration";

@@ -1,2 +0,2 @@

import { LegacyInlineFragment } from 'apollo-codegen-core/lib/compiler/legacyIR';
import { LegacyInlineFragment } from "apollo-codegen-core/lib/compiler/legacyIR";
import CodeGenerator from "apollo-codegen-core/lib/utilities/CodeGenerator";

@@ -3,0 +3,0 @@ import { GraphQLType } from "graphql";

@@ -16,9 +16,9 @@ "use strict";

if (noBrackets) {
generator.withinBlock(closure, '', '');
generator.withinBlock(closure, "", "");
}
else {
generator.withinBlock(closure, '{', '}');
generator.withinBlock(closure, "{", "}");
}
generator.popScope();
generator.print(';');
generator.print(";");
}

@@ -32,7 +32,7 @@ exports.interfaceDeclaration = interfaceDeclaration;

if (isNullable && isInput) {
generator.print('?');
generator.print("?");
}
generator.print(': ');
generator.print(": ");
if (isArray) {
generator.print(' Array<');
generator.print(" Array<");
}

@@ -44,8 +44,8 @@ generator.pushScope({ typeName: name });

if (isArrayElementNullable) {
generator.print(' | null');
generator.print(" | null");
}
generator.print(' >');
generator.print(" >");
}
if (isNullable) {
generator.print(' | null');
generator.print(" | null");
}

@@ -56,11 +56,12 @@ }

if (isInput && isNullable) {
generator.print('?');
generator.print("?");
}
generator.print(`: ${typeName || type && types_1.typeNameFromGraphQLType(generator.context, type)}`);
generator.print(`: ${typeName ||
(type && types_1.typeNameFromGraphQLType(generator.context, type))}`);
}
generator.print(',');
generator.print(",");
}
exports.propertyDeclaration = propertyDeclaration;
function propertySetsDeclaration(generator, property, propertySets, standalone = false) {
const { description, fieldName, propertyName, isNullable, isArray, isArrayElementNullable, } = property;
const { description, fieldName, propertyName, isNullable, isArray, isArrayElementNullable } = property;
const name = fieldName || propertyName;

@@ -72,3 +73,3 @@ codeGeneration_1.printDocComment(generator, description);

if (isArray) {
generator.print(' Array<');
generator.print(" Array<");
}

@@ -82,18 +83,18 @@ generator.pushScope({ typeName: name });

if (index !== propertySets.length - 1) {
generator.print(' |');
generator.print(" |");
}
});
}, '(', ')');
}, "(", ")");
generator.popScope();
if (isArray) {
if (isArrayElementNullable) {
generator.print(' | null');
generator.print(" | null");
}
generator.print(' >');
generator.print(" >");
}
if (isNullable) {
generator.print(' | null');
generator.print(" | null");
}
if (!standalone) {
generator.print(',');
generator.print(",");
}

@@ -100,0 +101,0 @@ }

@@ -1,3 +0,3 @@

import { LegacyCompilerContext } from 'apollo-codegen-core/lib/compiler/legacyIR';
import { GraphQLType } from 'graphql';
import { LegacyCompilerContext } from "apollo-codegen-core/lib/compiler/legacyIR";
import { GraphQLType } from "graphql";
export declare function typeNameFromGraphQLType(context: LegacyCompilerContext, type: GraphQLType, bareTypeName?: string | null, nullable?: boolean): string;

@@ -5,7 +5,7 @@ "use strict";

const builtInScalarMap = {
[graphql_1.GraphQLString.name]: 'string',
[graphql_1.GraphQLInt.name]: 'number',
[graphql_1.GraphQLFloat.name]: 'number',
[graphql_1.GraphQLBoolean.name]: 'boolean',
[graphql_1.GraphQLID.name]: 'string',
[graphql_1.GraphQLString.name]: "string",
[graphql_1.GraphQLInt.name]: "number",
[graphql_1.GraphQLFloat.name]: "number",
[graphql_1.GraphQLBoolean.name]: "boolean",
[graphql_1.GraphQLID.name]: "string"
};

@@ -21,3 +21,7 @@ function typeNameFromGraphQLType(context, type, bareTypeName, nullable = true) {

else if (type instanceof graphql_1.GraphQLScalarType) {
typeName = builtInScalarMap[type.name] || (context.options.passthroughCustomScalars ? context.options.customScalarsPrefix + type.name : builtInScalarMap[graphql_1.GraphQLString.name]);
typeName =
builtInScalarMap[type.name] ||
(context.options.passthroughCustomScalars
? context.options.customScalarsPrefix + type.name
: builtInScalarMap[graphql_1.GraphQLString.name]);
}

@@ -27,5 +31,5 @@ else {

}
return nullable ? typeName + ' | null' : typeName;
return nullable ? typeName + " | null" : typeName;
}
exports.typeNameFromGraphQLType = typeNameFromGraphQLType;
//# sourceMappingURL=types.js.map
{
"name": "apollo-codegen-typescript-legacy",
"description": "Legacy TypeScript generator module for Apollo Codegen",
"version": "0.27.0",
"main": "./lib/index.js",
"version": "0.27.3",
"author": "Apollo GraphQL <opensource@apollographql.com>",
"license": "MIT",
"repository": {
"type": "git",
"url": "git+https://github.com/apollographql/apollo-cli.git"
},
"homepage": "https://github.com/apollographql/apollo-cli",
"bugs": "https://github.com/apollographql/apollo-cli/issues",
"main": "lib/index.js",
"types": "lib/index.d.ts",
"scripts": {
"clean": "rm -rf lib",
"prebuild": "npm run clean",
"build": "tsc -p .",
"watch": "tsc -w -p .",
"test": "./node_modules/.bin/jest",
"prepack": "npm run build"
"build": "tsc",
"prepare": "npm run build"
},
"repository": {
"type": "git",
"url": "apollographql/apollo-cli"
},
"author": "Martijn Walraven <martijn@martijnwalraven.com>",
"license": "MIT",
"engines": {
"node": ">=6.0",
"npm": ">=5.0"
"node": ">=8",
"npm": ">=6"
},
"devDependencies": {
"@types/graphql": "^0.13.1",
"@types/inflected": "^1.1.29",
"graphql": "^0.13.1",
"jest": "^22.0.3",
"jest-matcher-utils": "^22.0.3",
"lerna": "^2.11.0",
"ts-jest": "^22.0.0",
"typescript": "^2.6.2"
},
"dependencies": {
"apollo-codegen-core": "^0.27.0"
"apollo-codegen-core": "0.27.3"
},

@@ -64,3 +55,4 @@ "jest": {

}
}
},
"gitHead": "e8d31998beae239ea92e140c670f45412ca0ffd4"
}

@@ -1,14 +0,18 @@

import { parse } from 'graphql';
import { parse } from "graphql";
import { generateSource } from '../codeGeneration';
import { generateSource } from "../codeGeneration";
import { loadSchema } from 'apollo-codegen-core/lib/loading';
const starWarsSchema = loadSchema(require.resolve('../../../common-test/fixtures/starwars/schema.json'));
const miscSchema = loadSchema(require.resolve('../../../common-test/fixtures/misc/schema.json'));
import { loadSchema } from "apollo-codegen-core/lib/loading";
const starWarsSchema = loadSchema(
require.resolve("../../../common-test/fixtures/starwars/schema.json")
);
const miscSchema = loadSchema(
require.resolve("../../../common-test/fixtures/misc/schema.json")
);
import CodeGenerator from 'apollo-codegen-core/lib/utilities/CodeGenerator';
import CodeGenerator from "apollo-codegen-core/lib/utilities/CodeGenerator";
import { compileToLegacyIR } from 'apollo-codegen-core/lib/compiler/legacyIR';
import { compileToLegacyIR } from "apollo-codegen-core/lib/compiler/legacyIR";
describe('TypeScript code generation', function() {
describe("TypeScript code generation", function() {
let generator;

@@ -24,7 +28,7 @@ let compileFromSource;

typesUsed: {}
}
};
generator = new CodeGenerator(context);
compileFromSource = (source) => {
compileFromSource = source => {
const document = parse(source);

@@ -39,3 +43,3 @@ const context = compileToLegacyIR(schema, document, {

addFragment = (fragment) => {
addFragment = fragment => {
generator.context.fragments[fragment.fragmentName] = fragment;

@@ -47,3 +51,3 @@ };

describe('#generateSource()', function() {
describe("#generateSource()", function() {
test(`should generate simple query operations`, function() {

@@ -189,3 +193,3 @@ const { compileFromSource } = setup(starWarsSchema);

test('should handle single line comments', () => {
test("should handle single line comments", () => {
const { compileFromSource } = setup(miscSchema);

@@ -204,3 +208,3 @@ const context = compileFromSource(`

test('should handle multi-line comments', () => {
test("should handle multi-line comments", () => {
const { compileFromSource } = setup(miscSchema);

@@ -219,3 +223,3 @@ const context = compileFromSource(`

test('should handle comments in enums', () => {
test("should handle comments in enums", () => {
const { compileFromSource } = setup(miscSchema);

@@ -234,3 +238,3 @@ const context = compileFromSource(`

test('should handle interfaces at root', () => {
test("should handle interfaces at root", () => {
const { compileFromSource } = setup(miscSchema);

@@ -255,3 +259,3 @@ const context = compileFromSource(`

test('should handle unions at root', () => {
test("should handle unions at root", () => {
const { compileFromSource } = setup(miscSchema);

@@ -275,3 +279,3 @@ const context = compileFromSource(`

test('should have __typename value matching fragment type on generic type', () => {
test("should have __typename value matching fragment type on generic type", () => {
const { compileFromSource } = setup(starWarsSchema);

@@ -295,3 +299,3 @@ const context = compileFromSource(`

test('should have __typename value matching fragment type on specific type', () => {
test("should have __typename value matching fragment type on specific type", () => {
const { compileFromSource } = setup(starWarsSchema);

@@ -315,3 +319,3 @@ const context = compileFromSource(`

test('should have __typename value in nested property', () => {
test("should have __typename value in nested property", () => {
const { compileFromSource } = setup(starWarsSchema);

@@ -318,0 +322,0 @@ const context = compileFromSource(`

@@ -7,3 +7,3 @@ import {

LegacyOperation
} from 'apollo-codegen-core/lib/compiler/legacyIR';
} from "apollo-codegen-core/lib/compiler/legacyIR";

@@ -23,9 +23,7 @@ import {

GraphQLObjectType
} from 'graphql'
} from "graphql";
import {
sortEnumValues
} from 'apollo-codegen-core/lib/utilities/graphql';
import { sortEnumValues } from "apollo-codegen-core/lib/utilities/graphql";
import CodeGenerator from 'apollo-codegen-core/lib/utilities/CodeGenerator';
import CodeGenerator from "apollo-codegen-core/lib/utilities/CodeGenerator";

@@ -37,7 +35,5 @@ import {

Property
} from './language';
} from "./language";
import {
typeNameFromGraphQLType,
} from './types';
import { typeNameFromGraphQLType } from "./types";

@@ -47,4 +43,6 @@ export function generateSource(context: LegacyCompilerContext) {

generator.printOnNewline('/* tslint:disable */');
generator.printOnNewline('// This file was automatically generated and should not be edited.');
generator.printOnNewline("/* tslint:disable */");
generator.printOnNewline(
"// This file was automatically generated and should not be edited."
);

@@ -67,3 +65,6 @@ context.typesUsed.forEach(type =>

export function typeDeclarationForGraphQLType(generator: CodeGenerator, type: GraphQLType) {
export function typeDeclarationForGraphQLType(
generator: CodeGenerator,
type: GraphQLType
) {
if (type instanceof GraphQLEnumType) {

@@ -76,3 +77,6 @@ enumerationDeclaration(generator, type);

function enumerationDeclaration(generator: CodeGenerator, type: GraphQLEnumType) {
function enumerationDeclaration(
generator: CodeGenerator,
type: GraphQLEnumType
) {
const { name, description } = type;

@@ -84,5 +88,5 @@ const values = type.getValues();

generator.printOnNewline(`export enum ${name} {`);
sortEnumValues(values).forEach((value) => {
sortEnumValues(values).forEach(value => {
printDocComment(generator, value.description || undefined, 1);
generator.printOnNewline(` ${value.value} = "${value.value}",`)
generator.printOnNewline(` ${value.value} = "${value.value}",`);
});

@@ -98,19 +102,32 @@ generator.printOnNewline(`}`);

const interfaceName = type.name;
interfaceDeclaration(generator, {
interfaceName,
}, () => {
const properties = propertiesFromFields(generator.context, Object.values(type.getFields()));
propertyDeclarations(generator, properties, true);
});
interfaceDeclaration(
generator,
{
interfaceName
},
() => {
const properties = propertiesFromFields(
generator.context,
Object.values(type.getFields())
);
propertyDeclarations(generator, properties, true);
}
);
}
function interfaceNameFromOperation({ operationName, operationType }: { operationName: string, operationType: string }) {
function interfaceNameFromOperation({
operationName,
operationType
}: {
operationName: string;
operationType: string;
}) {
switch (operationType) {
case 'query':
case "query":
return `${operationName}Query`;
break;
case 'mutation':
case "mutation":
return `${operationName}Mutation`;
break;
case 'subscription':
case "subscription":
return `${operationName}Subscription`;

@@ -125,7 +142,3 @@ break;

generator: CodeGenerator,
{
operationName,
operationType,
variables
}: LegacyOperation
{ operationName, operationType, variables }: LegacyOperation
) {

@@ -135,10 +148,17 @@ if (!variables || variables.length < 1) {

}
const interfaceName = `${interfaceNameFromOperation({ operationName, operationType })}Variables`;
const interfaceName = `${interfaceNameFromOperation({
operationName,
operationType
})}Variables`;
interfaceDeclaration(generator, {
interfaceName,
}, () => {
const properties = propertiesFromFields(generator.context, variables);
propertyDeclarations(generator, properties, true);
});
interfaceDeclaration(
generator,
{
interfaceName
},
() => {
const properties = propertiesFromFields(generator.context, variables);
propertyDeclarations(generator, properties, true);
}
);
}

@@ -157,3 +177,6 @@

if (type instanceof GraphQLUnionType) {
return type.getTypes().map(type => getObjectTypeName(type)).join(" | ");
return type
.getTypes()
.map(type => getObjectTypeName(type))
.join(" | ");
}

@@ -164,21 +187,23 @@ return `"${type.name}"`;

function updateTypeNameField(rootField: LegacyField): LegacyField {
const fields = rootField.fields && rootField.fields.map(field => {
if (field.fieldName === '__typename') {
const objectTypeName = getObjectTypeName(rootField.type);
return {
...field,
typeName: objectTypeName,
type: { name: objectTypeName },
};
}
const fields =
rootField.fields &&
rootField.fields.map(field => {
if (field.fieldName === "__typename") {
const objectTypeName = getObjectTypeName(rootField.type);
return {
...field,
typeName: objectTypeName,
type: { name: objectTypeName }
};
}
if (field.fields) {
return updateTypeNameField(field);
}
if (field.fields) {
return updateTypeNameField(field);
}
return field;
});
return field;
});
return {
...rootField,
fields,
fields
} as LegacyField;

@@ -189,16 +214,19 @@ }

generator: CodeGenerator,
{
{ operationName, operationType, fields }: LegacyOperation
) {
const interfaceName = interfaceNameFromOperation({
operationName,
operationType,
fields
}: LegacyOperation
) {
const interfaceName = interfaceNameFromOperation({ operationName, operationType });
operationType
});
fields = fields.map(field => updateTypeNameField(field));
const properties = propertiesFromFields(generator.context, fields);
interfaceDeclaration(generator, {
interfaceName,
}, () => {
propertyDeclarations(generator, properties);
});
interfaceDeclaration(
generator,
{
interfaceName
},
() => {
propertyDeclarations(generator, properties);
}
);
}

@@ -210,18 +238,15 @@

) {
const {
fragmentName,
typeCondition,
fields,
inlineFragments
} = fragment;
const { fragmentName, typeCondition, fields, inlineFragments } = fragment;
const interfaceName = `${fragmentName}Fragment`;
interfaceDeclaration(generator, {
interfaceName,
noBrackets: isAbstractType(typeCondition)
}, () => {
if (isAbstractType(typeCondition)) {
const propertySets = fragment.possibleTypes
.map(type => {
interfaceDeclaration(
generator,
{
interfaceName,
noBrackets: isAbstractType(typeCondition)
},
() => {
if (isAbstractType(typeCondition)) {
const propertySets = fragment.possibleTypes.map(type => {
// NOTE: inlineFragment currently consists of the merged fields

@@ -231,3 +256,3 @@ // from both inline fragments and fragment spreads.

const inlineFragment = inlineFragments.find(inlineFragment => {
return inlineFragment.typeCondition.toString() == type.toString()
return inlineFragment.typeCondition.toString() == type.toString();
});

@@ -237,8 +262,10 @@

const fields = inlineFragment.fields.map(field => {
if (field.fieldName === '__typename') {
if (field.fieldName === "__typename") {
return {
...field,
typeName: `"${inlineFragment.typeCondition}"`,
type: { name: `"${inlineFragment.typeCondition}"` } as GraphQLType
}
type: {
name: `"${inlineFragment.typeCondition}"`
} as GraphQLType
};
} else {

@@ -252,3 +279,3 @@ return field;

const fragmentFields = fields.map(field => {
if (field.fieldName === '__typename') {
if (field.fieldName === "__typename") {
return {

@@ -258,3 +285,3 @@ ...field,

type: { name: `"${type}"` } as GraphQLType
}
};
} else {

@@ -269,47 +296,66 @@ return field;

propertySetsDeclaration(generator, fragment, propertySets, true);
} else {
const fragmentFields = fields.map(field => {
if (field.fieldName === '__typename') {
return {
...field,
typeName: `"${fragment.typeCondition}"`,
type: { name: `"${fragment.typeCondition}"` } as GraphQLType
propertySetsDeclaration(generator, fragment, propertySets, true);
} else {
const fragmentFields = fields.map(field => {
if (field.fieldName === "__typename") {
return {
...field,
typeName: `"${fragment.typeCondition}"`,
type: { name: `"${fragment.typeCondition}"` } as GraphQLType
};
} else {
return field;
}
} else {
return field;
}
});
});
const properties = propertiesFromFields(generator.context, fragmentFields)
propertyDeclarations(generator, properties);
const properties = propertiesFromFields(
generator.context,
fragmentFields
);
propertyDeclarations(generator, properties);
}
}
});
);
}
export function propertiesFromFields(context: LegacyCompilerContext, fields: {
name?: string,
type: GraphQLType,
responseName?: string,
description?: string | undefined | null,
fragmentSpreads?: any,
inlineFragments?: LegacyInlineFragment[],
fieldName?: string
}[]) {
return fields.map(field => propertyFromField(
context, { ...field, description: field.description || undefined }
));
export function propertiesFromFields(
context: LegacyCompilerContext,
fields: {
name?: string;
type: GraphQLType;
responseName?: string;
description?: string | undefined | null;
fragmentSpreads?: any;
inlineFragments?: LegacyInlineFragment[];
fieldName?: string;
}[]
) {
return fields.map(field =>
propertyFromField(context, {
...field,
description: field.description || undefined
})
);
}
export function propertyFromField(context: LegacyCompilerContext, field: {
name?: string,
type: GraphQLType,
fields?: any[],
responseName?: string,
description?: string,
fragmentSpreads?: any,
inlineFragments?: LegacyInlineFragment[],
fieldName?: string
}): Property {
let { name: fieldName, type: fieldType, description, fragmentSpreads, inlineFragments } = field;
export function propertyFromField(
context: LegacyCompilerContext,
field: {
name?: string;
type: GraphQLType;
fields?: any[];
responseName?: string;
description?: string;
fragmentSpreads?: any;
inlineFragments?: LegacyInlineFragment[];
fieldName?: string;
}
): Property {
let {
name: fieldName,
type: fieldType,
description,
fragmentSpreads,
inlineFragments
} = field;
fieldName = fieldName || field.responseName;

@@ -335,5 +381,10 @@

isArrayElementNullable = !(fieldType.ofType instanceof GraphQLNonNull);
} else if (fieldType instanceof GraphQLNonNull && fieldType.ofType instanceof GraphQLList) {
isArray = true
isArrayElementNullable = !(fieldType.ofType.ofType instanceof GraphQLNonNull);
} else if (
fieldType instanceof GraphQLNonNull &&
fieldType.ofType instanceof GraphQLList
) {
isArray = true;
isArrayElementNullable = !(
fieldType.ofType.ofType instanceof GraphQLNonNull
);
}

@@ -346,12 +397,33 @@

isComposite: true,
fragmentSpreads, inlineFragments, fieldType,
isArray, isNullable, isArrayElementNullable,
fragmentSpreads,
inlineFragments,
fieldType,
isArray,
isNullable,
isArrayElementNullable
};
} else {
if (field.fieldName === '__typename') {
if (field.fieldName === "__typename") {
const typeName = typeNameFromGraphQLType(context, fieldType, null, false);
return { ...property, typeName, isComposite: false, fieldType, isNullable: false };
return {
...property,
typeName,
isComposite: false,
fieldType,
isNullable: false
};
} else {
const typeName = typeNameFromGraphQLType(context, fieldType, null, isNullable);
return { ...property, typeName, isComposite: false, fieldType, isNullable };
const typeName = typeNameFromGraphQLType(
context,
fieldType,
null,
isNullable
);
return {
...property,
typeName,
isComposite: false,
fieldType,
isNullable
};
}

@@ -361,21 +433,28 @@ }

export function propertyDeclarations(generator: CodeGenerator, properties: Property[], isInput = false) {
export function propertyDeclarations(
generator: CodeGenerator,
properties: Property[],
isInput = false
) {
if (!properties) return;
properties.forEach(property => {
if (isAbstractType(getNamedType(property.type || property.fieldType!))) {
const propertySets = getPossibleTypeNames(generator, property)
.map(type => {
const inlineFragment = property.inlineFragments && property.inlineFragments.find(inlineFragment => {
return inlineFragment.typeCondition.toString() == type
});
const propertySets = getPossibleTypeNames(generator, property).map(
type => {
const inlineFragment =
property.inlineFragments &&
property.inlineFragments.find(inlineFragment => {
return inlineFragment.typeCondition.toString() == type;
});
if (inlineFragment) {
const fields = inlineFragment.fields.map(field => {
if (field.fieldName === '__typename') {
if (field.fieldName === "__typename") {
return {
...field,
typeName: `"${inlineFragment.typeCondition}"`,
type: { name: `"${inlineFragment.typeCondition}"` } as GraphQLType
}
type: {
name: `"${inlineFragment.typeCondition}"`
} as GraphQLType
};
} else {

@@ -389,3 +468,3 @@ return field;

const fields = property.fields!.map(field => {
if (field.fieldName === '__typename') {
if (field.fieldName === "__typename") {
return {

@@ -395,3 +474,3 @@ ...field,

type: { name: `"${type}"` } as GraphQLType
}
};
} else {

@@ -404,14 +483,18 @@ return field;

}
});
}
);
propertySetsDeclaration(generator, property, propertySets);
} else {
if (property.fields && property.fields.length > 0
|| property.inlineFragments && property.inlineFragments.length > 0
|| property.fragmentSpreads && property.fragmentSpreads.length > 0
if (
(property.fields && property.fields.length > 0) ||
(property.inlineFragments && property.inlineFragments.length > 0) ||
(property.fragmentSpreads && property.fragmentSpreads.length > 0)
) {
propertyDeclaration(generator, property, () => {
const fields = property.fields!.map(field => {
if (field.fieldName === '__typename') {
const objectTypeName = getObjectTypeName(property.fieldType || property.type!);
if (field.fieldName === "__typename") {
const objectTypeName = getObjectTypeName(
property.fieldType || property.type!
);
return {

@@ -421,3 +504,3 @@ ...field,

type: { name: objectTypeName }
}
};
} else {

@@ -442,7 +525,15 @@ return field;

*/
function getPossibleTypeNames(generator: CodeGenerator<LegacyCompilerContext>, property: Property) {
function getPossibleTypeNames(
generator: CodeGenerator<LegacyCompilerContext>,
property: Property
) {
const type = getNamedType(property.fieldType || property.type!);
if (type instanceof GraphQLUnionType || type instanceof GraphQLInterfaceType) {
return generator.context.schema.getPossibleTypes(type).map(type => type.name);
if (
type instanceof GraphQLUnionType ||
type instanceof GraphQLInterfaceType
) {
return generator.context.schema
.getPossibleTypes(type)
.map(type => type.name);
}

@@ -453,3 +544,7 @@

export function printDocComment(generator: CodeGenerator, description?: string, depth: number = 0): void {
export function printDocComment(
generator: CodeGenerator,
description?: string,
depth: number = 0
): void {
if (!description) {

@@ -459,10 +554,9 @@ return;

const leadingSpace = ' '.repeat(2 * depth);
const leadingSpace = " ".repeat(2 * depth);
generator.printOnNewline(`${leadingSpace}/**`);
description.split('\n')
.forEach(line => {
generator.printOnNewline(`${leadingSpace} * ${line.trim()}`);
});
description.split("\n").forEach(line => {
generator.printOnNewline(`${leadingSpace} * ${line.trim()}`);
});
generator.printOnNewline(`${leadingSpace} */`);
}

@@ -1,1 +0,1 @@

export { generateSource } from './codeGeneration';
export { generateSource } from "./codeGeneration";

@@ -1,5 +0,5 @@

import { LegacyInlineFragment } from 'apollo-codegen-core/lib/compiler/legacyIR';
import { LegacyInlineFragment } from "apollo-codegen-core/lib/compiler/legacyIR";
import { propertyDeclarations, printDocComment } from './codeGeneration';
import { typeNameFromGraphQLType } from './types';
import { propertyDeclarations, printDocComment } from "./codeGeneration";
import { typeNameFromGraphQLType } from "./types";

@@ -10,23 +10,26 @@ import CodeGenerator from "apollo-codegen-core/lib/utilities/CodeGenerator";

export interface Property {
fieldName?: string,
fieldType?: GraphQLType,
propertyName?: string,
type?: GraphQLType,
description?: string,
typeName?: string,
isComposite?: boolean,
isNullable?: boolean,
fields?: any[],
inlineFragments?: LegacyInlineFragment[],
fragmentSpreads?: any,
isInput?: boolean,
isArray?: boolean,
isArrayElementNullable?: boolean | null,
fieldName?: string;
fieldType?: GraphQLType;
propertyName?: string;
type?: GraphQLType;
description?: string;
typeName?: string;
isComposite?: boolean;
isNullable?: boolean;
fields?: any[];
inlineFragments?: LegacyInlineFragment[];
fragmentSpreads?: any;
isInput?: boolean;
isArray?: boolean;
isArrayElementNullable?: boolean | null;
}
export function interfaceDeclaration(generator: CodeGenerator, {
interfaceName,
noBrackets
}: { interfaceName: string, noBrackets?: boolean },
closure: () => void) {
export function interfaceDeclaration(
generator: CodeGenerator,
{
interfaceName,
noBrackets
}: { interfaceName: string; noBrackets?: boolean },
closure: () => void
) {
generator.printNewlineIfNeeded();

@@ -42,21 +45,25 @@ generator.printNewline();

if (noBrackets) {
generator.withinBlock(closure, '', '');
generator.withinBlock(closure, "", "");
} else {
generator.withinBlock(closure, '{', '}');
generator.withinBlock(closure, "{", "}");
}
generator.popScope();
generator.print(';');
generator.print(";");
}
export function propertyDeclaration(generator: CodeGenerator, {
fieldName,
type,
propertyName,
typeName,
description,
isInput,
isArray,
isNullable,
isArrayElementNullable
}: Property, closure?: () => void) {
export function propertyDeclaration(
generator: CodeGenerator,
{
fieldName,
type,
propertyName,
typeName,
description,
isInput,
isArray,
isNullable,
isArrayElementNullable
}: Property,
closure?: () => void
) {
const name = fieldName || propertyName;

@@ -70,8 +77,8 @@

if (isNullable && isInput) {
generator.print('?');
generator.print("?");
}
generator.print(': ');
generator.print(": ");
if (isArray) {
generator.print(' Array<');
generator.print(" Array<");
}

@@ -86,25 +93,36 @@ generator.pushScope({ typeName: name });

if (isArrayElementNullable) {
generator.print(' | null');
generator.print(" | null");
}
generator.print(' >');
generator.print(" >");
}
if (isNullable) {
generator.print(' | null');
generator.print(" | null");
}
} else {
generator.printOnNewline(name);
if (isInput && isNullable) {
generator.print('?')
generator.print("?");
}
generator.print(`: ${typeName || type && typeNameFromGraphQLType(generator.context, type)}`);
generator.print(
`: ${typeName ||
(type && typeNameFromGraphQLType(generator.context, type))}`
);
}
generator.print(',');
generator.print(",");
}
export function propertySetsDeclaration(generator: CodeGenerator, property: Property, propertySets: Property[][], standalone = false) {
export function propertySetsDeclaration(
generator: CodeGenerator,
property: Property,
propertySets: Property[][],
standalone = false
) {
const {
description, fieldName, propertyName,
isNullable, isArray, isArrayElementNullable,
description,
fieldName,
propertyName,
isNullable,
isArray,
isArrayElementNullable
} = property;

@@ -120,3 +138,3 @@ const name = fieldName || propertyName;

if (isArray) {
generator.print(' Array<');
generator.print(" Array<");
}

@@ -126,12 +144,16 @@

generator.withinBlock(() => {
propertySets.forEach((propertySet, index, propertySets) => {
generator.withinBlock(() => {
propertyDeclarations(generator, propertySet);
generator.withinBlock(
() => {
propertySets.forEach((propertySet, index, propertySets) => {
generator.withinBlock(() => {
propertyDeclarations(generator, propertySet);
});
if (index !== propertySets.length - 1) {
generator.print(" |");
}
});
if (index !== propertySets.length - 1) {
generator.print(' |');
}
})
}, '(', ')');
},
"(",
")"
);

@@ -142,14 +164,14 @@ generator.popScope();

if (isArrayElementNullable) {
generator.print(' | null');
generator.print(" | null");
}
generator.print(' >');
generator.print(" >");
}
if (isNullable) {
generator.print(' | null');
generator.print(" | null");
}
if (!standalone) {
generator.print(',');
generator.print(",");
}
}

@@ -1,2 +0,2 @@

import { LegacyCompilerContext } from 'apollo-codegen-core/lib/compiler/legacyIR';
import { LegacyCompilerContext } from "apollo-codegen-core/lib/compiler/legacyIR";

@@ -13,15 +13,20 @@ import {

GraphQLType
} from 'graphql';
} from "graphql";
const builtInScalarMap = {
[GraphQLString.name]: 'string',
[GraphQLInt.name]: 'number',
[GraphQLFloat.name]: 'number',
[GraphQLBoolean.name]: 'boolean',
[GraphQLID.name]: 'string',
}
[GraphQLString.name]: "string",
[GraphQLInt.name]: "number",
[GraphQLFloat.name]: "number",
[GraphQLBoolean.name]: "boolean",
[GraphQLID.name]: "string"
};
export function typeNameFromGraphQLType(context: LegacyCompilerContext, type: GraphQLType, bareTypeName?: string | null, nullable = true): string {
export function typeNameFromGraphQLType(
context: LegacyCompilerContext,
type: GraphQLType,
bareTypeName?: string | null,
nullable = true
): string {
if (type instanceof GraphQLNonNull) {
return typeNameFromGraphQLType(context, type.ofType, bareTypeName, false)
return typeNameFromGraphQLType(context, type.ofType, bareTypeName, false);
}

@@ -31,5 +36,14 @@

if (type instanceof GraphQLList) {
typeName = `Array< ${typeNameFromGraphQLType(context, type.ofType, bareTypeName, true)} >`;
typeName = `Array< ${typeNameFromGraphQLType(
context,
type.ofType,
bareTypeName,
true
)} >`;
} else if (type instanceof GraphQLScalarType) {
typeName = builtInScalarMap[type.name] || (context.options.passthroughCustomScalars ? context.options.customScalarsPrefix + type.name : builtInScalarMap[GraphQLString.name]);
typeName =
builtInScalarMap[type.name] ||
(context.options.passthroughCustomScalars
? context.options.customScalarsPrefix + type.name
: builtInScalarMap[GraphQLString.name]);
} else {

@@ -39,3 +53,3 @@ typeName = bareTypeName || type.name;

return nullable ? typeName + ' | null' : typeName;
return nullable ? typeName + " | null" : typeName;
}

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet