graphile-build-pg 4.4.5 → 4.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/README.md +2 -1
  2. package/node8plus/QueryBuilder.d.ts +10 -2
  3. package/node8plus/QueryBuilder.js +80 -1
  4. package/node8plus/QueryBuilder.js.flow +75 -2
  5. package/node8plus/QueryBuilder.js.map +1 -1
  6. package/node8plus/index.d.ts +8 -0
  7. package/node8plus/index.js +7 -1
  8. package/node8plus/index.js.flow +6 -1
  9. package/node8plus/index.js.map +1 -1
  10. package/node8plus/plugins/PgBasicsPlugin.js +5 -3
  11. package/node8plus/plugins/PgBasicsPlugin.js.flow +2 -0
  12. package/node8plus/plugins/PgBasicsPlugin.js.map +1 -1
  13. package/node8plus/plugins/PgConnectionTotalCount.js +10 -4
  14. package/node8plus/plugins/PgConnectionTotalCount.js.flow +13 -9
  15. package/node8plus/plugins/PgConnectionTotalCount.js.map +1 -1
  16. package/node8plus/plugins/PgIntrospectionPlugin.d.ts +48 -11
  17. package/node8plus/plugins/PgIntrospectionPlugin.js +53 -23
  18. package/node8plus/plugins/PgIntrospectionPlugin.js.flow +81 -25
  19. package/node8plus/plugins/PgIntrospectionPlugin.js.map +1 -1
  20. package/node8plus/plugins/PgJWTPlugin.js +6 -1
  21. package/node8plus/plugins/PgJWTPlugin.js.flow +7 -1
  22. package/node8plus/plugins/PgJWTPlugin.js.map +1 -1
  23. package/node8plus/plugins/PgMutationUpdateDeletePlugin.js +2 -1
  24. package/node8plus/plugins/PgMutationUpdateDeletePlugin.js.flow +3 -1
  25. package/node8plus/plugins/PgMutationUpdateDeletePlugin.js.map +1 -1
  26. package/node8plus/plugins/PgRecordFunctionConnectionPlugin.js +1 -0
  27. package/node8plus/plugins/PgRecordFunctionConnectionPlugin.js.flow +1 -0
  28. package/node8plus/plugins/PgRecordFunctionConnectionPlugin.js.map +1 -1
  29. package/node8plus/plugins/PgScalarFunctionConnectionPlugin.js +1 -0
  30. package/node8plus/plugins/PgScalarFunctionConnectionPlugin.js.flow +1 -0
  31. package/node8plus/plugins/PgScalarFunctionConnectionPlugin.js.map +1 -1
  32. package/node8plus/plugins/PgTypesPlugin.js +9 -2
  33. package/node8plus/plugins/PgTypesPlugin.js.flow +19 -0
  34. package/node8plus/plugins/PgTypesPlugin.js.map +1 -1
  35. package/node8plus/plugins/introspectionQuery.js +1 -0
  36. package/node8plus/plugins/introspectionQuery.js.flow +1 -0
  37. package/node8plus/plugins/introspectionQuery.js.map +1 -1
  38. package/node8plus/queryFromResolveDataFactory.js +8 -1
  39. package/node8plus/queryFromResolveDataFactory.js.flow +13 -1
  40. package/node8plus/queryFromResolveDataFactory.js.map +1 -1
  41. package/package.json +7 -12
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/QueryBuilder.js"],"names":["isDev","process","env","POSTGRAPHILE_ENV","callIfNecessary","o","context","callIfNecessaryArray","Array","isArray","map","v","escapeLarge","sqlFragment","type","actualType","domainBaseType","category","includes","id","sql","fragment","QueryBuilder","constructor","options","rootValue","supportsJSONB","locks","cursorComparator","select","selectCursor","from","join","whereBound","where","orderBy","orderIsUnique","first","last","limit","offset","finalized","selectedIdentifiers","data","cursorPrefix","lower","upper","beforeLock","liveConditions","compiledData","lock","lockContext","Object","freeze","queryBuilder","jsonbBuildObject","fields","length","fieldsChunks","chunkToJson","fieldsChunk","expr","alias","literal","field","fn","checkLock","push","makeLiveCollection","table","cb","checkerGenerator","checkers","record","every","checker","parentQueryBuilder","Error","allRequirements","reduce","memo","_checkerGenerator","requirements","assign","value","keys","key","addLiveCondition","setCursorComparator","addCursorCondition","cursorValue","isAfter","exprGen","test","selectIdentifiers","primaryKey","primaryKeyConstraint","primaryKeys","keyAttributes","getTableAlias","identifier","name","Symbol","isLower","setOrderIsUnique","ascending","nullsFirst","limitGen","offsetGen","previous","isOrderUnique","getTableExpression","getSelectCursor","getOffset","getFinalLimitAndOffset","flip","Math","min","getFinalOffset","getFinalLimit","getOrderByExpressionsAndDirections","getSelectFieldsCount","lockEverything","buildSelectFields","buildSelectJson","addNullCase","addNotDistinctFromNullCase","buildObject","buildWhereBoundClause","clauses","buildWhereClause","includeLowerBound","includeUpperBound","build","asJson","asJsonAggregate","onlyJsonField","useAsterisk","Number","flipAlias","aggAlias","_finalize","i","l","stack","seenFields","selects","valueOrGenerator","columnName","a","b","c","f","replace"],"mappings":"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","sourcesContent":["// @flow\nimport * as sql from \"pg-sql2\";\nimport type { SQL } from \"pg-sql2\";\nimport isSafeInteger from \"lodash/isSafeInteger\";\nimport chunk from \"lodash/chunk\";\nimport type { PgClass, PgType } from \"./plugins/PgIntrospectionPlugin\";\n\n// eslint-disable-next-line flowtype/no-weak-types\ntype GraphQLContext = any;\n\nconst isDev = process.env.POSTGRAPHILE_ENV === \"development\";\n\ntype GenContext = {\n queryBuilder: QueryBuilder,\n};\ntype Gen<T> = (context: GenContext) => T;\n\n// Importantly, this cannot include a function\ntype CallResult = null | string | number | boolean | SQL;\n\nfunction callIfNecessary<T: CallResult>(o: Gen<T> | T, context: GenContext): T {\n if (typeof o === \"function\") {\n return o(context);\n } else {\n return o;\n }\n}\n\nfunction callIfNecessaryArray<T: CallResult>(\n o: Array<Gen<T> | T>,\n context: GenContext\n): Array<T> {\n if (Array.isArray(o)) {\n return o.map(v => callIfNecessary(v, context));\n } else {\n return o;\n }\n}\n\nexport type RawAlias = Symbol | string;\ntype SQLAlias = SQL;\ntype SQLGen = Gen<SQL> | SQL;\ntype NumberGen = Gen<number> | number;\ntype CursorValue = Array<mixed>;\ntype CursorComparator = (val: CursorValue, isAfter: boolean) => void;\n\nexport type QueryBuilderOptions = {\n supportsJSONB?: boolean, // Defaults to true\n};\n\nfunction escapeLarge(sqlFragment: SQL, type: PgType) {\n const actualType = type.domainBaseType || type;\n if (actualType.category === \"N\") {\n if (\n [\n \"21\" /* int2 */,\n \"23\" /* int4 */,\n \"700\" /* float4 */,\n \"701\" /* float8 */,\n ].includes(actualType.id)\n ) {\n // No need for special handling\n return sqlFragment;\n }\n // Otherwise force the id to be a string\n return sql.fragment`((${sqlFragment})::numeric)::text`;\n }\n return sqlFragment;\n}\n\nclass QueryBuilder {\n parentQueryBuilder: QueryBuilder | void;\n context: GraphQLContext;\n rootValue: any; // eslint-disable-line flowtype/no-weak-types\n supportsJSONB: boolean;\n locks: {\n [string]: false | true | string,\n };\n finalized: boolean;\n selectedIdentifiers: boolean;\n data: {\n cursorPrefix: Array<string>,\n select: Array<[SQLGen, RawAlias]>,\n selectCursor: ?SQLGen,\n from: ?[SQLGen, SQLAlias],\n join: Array<SQLGen>,\n where: Array<SQLGen>,\n whereBound: {\n lower: Array<SQLGen>,\n upper: Array<SQLGen>,\n },\n orderBy: Array<[SQLGen, boolean, boolean | null]>,\n orderIsUnique: boolean,\n limit: ?NumberGen,\n offset: ?NumberGen,\n first: ?number,\n last: ?number,\n beforeLock: {\n [string]: Array<() => void> | null,\n },\n cursorComparator: ?CursorComparator,\n liveConditions: Array<\n // eslint-disable-next-line flowtype/no-weak-types\n [(data: {}) => (record: any) => boolean, { [key: string]: SQL } | void]\n >,\n };\n compiledData: {\n cursorPrefix: Array<string>,\n select: Array<[SQL, RawAlias]>,\n selectCursor: ?SQL,\n from: ?[SQL, SQLAlias],\n join: Array<SQL>,\n where: Array<SQL>,\n whereBound: {\n lower: Array<SQL>,\n upper: Array<SQL>,\n },\n orderBy: Array<[SQL, boolean, boolean | null]>,\n orderIsUnique: boolean,\n limit: ?number,\n offset: ?number,\n first: ?number,\n last: ?number,\n cursorComparator: ?CursorComparator,\n };\n lockContext: {\n queryBuilder: QueryBuilder,\n };\n\n constructor(\n options: QueryBuilderOptions = {},\n context: GraphQLContext = {},\n rootValue?: any // eslint-disable-line flowtype/no-weak-types\n ) {\n this.context = context || {};\n this.rootValue = rootValue;\n this.supportsJSONB =\n typeof options.supportsJSONB === \"undefined\" ||\n options.supportsJSONB === null\n ? true\n : !!options.supportsJSONB;\n\n this.locks = {\n // As a performance optimisation, we're going to list a number of lock\n // types so that V8 doesn't need to mutate the object too much\n cursorComparator: false,\n select: false,\n selectCursor: false,\n from: false,\n join: false,\n whereBound: false,\n where: false,\n orderBy: false,\n orderIsUnique: false,\n first: false,\n last: false,\n limit: false,\n offset: false,\n };\n this.finalized = false;\n this.selectedIdentifiers = false;\n this.data = {\n // TODO: refactor `cursorPrefix`, it shouldn't be here (or should at least have getters/setters)\n cursorPrefix: [\"natural\"],\n select: [],\n selectCursor: null,\n from: null,\n join: [],\n where: [],\n whereBound: {\n lower: [],\n upper: [],\n },\n orderBy: [],\n orderIsUnique: false,\n limit: null,\n offset: null,\n first: null,\n last: null,\n beforeLock: {\n // As a performance optimisation, we're going to list a number of lock\n // types so that V8 doesn't need to mutate the object too much\n cursorComparator: [],\n select: [],\n selectCursor: [],\n from: [],\n join: [],\n whereBound: [],\n where: [],\n orderBy: [],\n orderIsUnique: [],\n first: [],\n last: [],\n limit: [],\n offset: [],\n },\n cursorComparator: null,\n liveConditions: [],\n };\n this.compiledData = {\n cursorPrefix: [\"natural\"],\n select: [],\n selectCursor: null,\n from: null,\n join: [],\n where: [],\n whereBound: {\n lower: [],\n upper: [],\n },\n orderBy: [],\n orderIsUnique: false,\n limit: null,\n offset: null,\n first: null,\n last: null,\n cursorComparator: null,\n };\n this.beforeLock(\"select\", () => {\n this.lock(\"selectCursor\");\n if (this.compiledData.selectCursor) {\n this.select(this.compiledData.selectCursor, \"__cursor\");\n }\n });\n // 'whereBound' and 'natural' order might set offset/limit\n this.beforeLock(\"where\", () => {\n this.lock(\"whereBound\");\n });\n this.beforeLock(\"offset\", () => {\n this.lock(\"whereBound\");\n });\n this.beforeLock(\"limit\", () => {\n this.lock(\"whereBound\");\n });\n this.beforeLock(\"first\", () => {\n this.lock(\"limit\");\n this.lock(\"offset\");\n });\n this.beforeLock(\"last\", () => {\n this.lock(\"limit\");\n this.lock(\"offset\");\n });\n this.lockContext = Object.freeze({\n queryBuilder: this,\n });\n }\n\n // ----------------------------------------\n\n // Helper function\n jsonbBuildObject(fields: Array<[SQL, RawAlias]>) {\n if (this.supportsJSONB && fields.length > 50) {\n const fieldsChunks = chunk(fields, 50);\n const chunkToJson = fieldsChunk =>\n sql.fragment`jsonb_build_object(${sql.join(\n fieldsChunk.map(\n ([expr, alias]) =>\n sql.fragment`${sql.literal(alias)}::text, ${expr}`\n ),\n \", \"\n )})`;\n return sql.fragment`(${sql.join(\n fieldsChunks.map(chunkToJson),\n \" || \"\n )})::json`;\n } else {\n // PG9.4 will have issues with more than 100 parameters (50 keys)\n return sql.fragment`json_build_object(${sql.join(\n fields.map(\n ([expr, alias]) => sql.fragment`${sql.literal(alias)}::text, ${expr}`\n ),\n \", \"\n )})`;\n }\n }\n\n // ----------------------------------------\n\n beforeLock(field: string, fn: () => void) {\n this.checkLock(field);\n if (!this.data.beforeLock[field]) {\n this.data.beforeLock[field] = [];\n }\n // $FlowFixMe: this is guaranteed to be set, due to the if statement above\n this.data.beforeLock[field].push(fn);\n }\n\n makeLiveCollection(\n table: PgClass,\n // eslint-disable-next-line flowtype/no-weak-types\n cb?: (checker: (data: any) => (record: any) => boolean) => void\n ) {\n /* the actual condition doesn't matter hugely, 'select' should work */\n if (!this.rootValue || !this.rootValue.liveConditions) return;\n const liveConditions = this.data.liveConditions;\n const checkerGenerator = data => {\n // Compute this once.\n const checkers = liveConditions.map(([checkerGenerator]) =>\n checkerGenerator(data)\n );\n return record => checkers.every(checker => checker(record));\n };\n if (this.parentQueryBuilder) {\n const parentQueryBuilder = this.parentQueryBuilder;\n if (cb) {\n throw new Error(\n \"Either use parentQueryBuilder or pass callback, not both.\"\n );\n }\n parentQueryBuilder.beforeLock(\"select\", () => {\n const id = this.rootValue.liveConditions.push(checkerGenerator) - 1;\n // BEWARE: it's easy to override others' conditions, and that will cause issues. Be sensible.\n const allRequirements = this.data.liveConditions.reduce(\n (memo, [_checkerGenerator, requirements]) =>\n requirements ? Object.assign(memo, requirements) : memo,\n {}\n );\n parentQueryBuilder.select(\n sql.fragment`\\\njson_build_object('__id', ${sql.value(id)}::int\n${sql.join(\n Object.keys(allRequirements).map(\n key => sql.fragment`, ${sql.literal(key)}::text, ${allRequirements[key]}`\n ),\n \"\"\n)})`,\n \"__live\"\n );\n });\n } else if (cb) {\n cb(checkerGenerator);\n } else {\n throw new Error(\n \"makeLiveCollection was called without parentQueryBuilder and without callback\"\n );\n }\n }\n\n addLiveCondition(\n // eslint-disable-next-line flowtype/no-weak-types\n checkerGenerator: (data: {}) => (record: any) => boolean,\n requirements?: { [key: string]: SQL }\n ) {\n if (requirements && !this.parentQueryBuilder) {\n throw new Error(\n \"There's no parentQueryBuilder, so there cannot be requirements\"\n );\n }\n this.data.liveConditions.push([checkerGenerator, requirements]);\n }\n\n setCursorComparator(fn: CursorComparator) {\n this.checkLock(\"cursorComparator\");\n this.data.cursorComparator = fn;\n this.lock(\"cursorComparator\");\n }\n addCursorCondition(cursorValue: CursorValue, isAfter: boolean) {\n this.beforeLock(\"whereBound\", () => {\n this.lock(\"cursorComparator\");\n if (!this.compiledData.cursorComparator) {\n throw new Error(\"No cursor comparator was set!\");\n }\n this.compiledData.cursorComparator(cursorValue, isAfter);\n });\n }\n select(exprGen: SQLGen, alias: RawAlias) {\n this.checkLock(\"select\");\n if (typeof alias === \"string\") {\n // To protect against vulnerabilities such as\n //\n // https://github.com/brianc/node-postgres/issues/1408\n //\n // we need to ensure column names are safe. Turns out that GraphQL\n // aliases are fairly strict (`[_A-Za-z][_0-9A-Za-z]*`) anyway:\n //\n // https://github.com/graphql/graphql-js/blob/680685dd14bd52c6475305e150e5f295ead2aa7e/src/language/lexer.js#L551-L581\n //\n // so this should not cause any issues in practice.\n if (/^(\\$+|@+|[_A-Za-z])[_0-9A-Za-z]*$/.test(alias) !== true) {\n throw new Error(`Disallowed alias '${alias}'.`);\n }\n }\n this.data.select.push([exprGen, alias]);\n }\n selectIdentifiers(table: PgClass) {\n if (this.selectedIdentifiers) return;\n const primaryKey = table.primaryKeyConstraint;\n if (!primaryKey) return;\n const primaryKeys = primaryKey.keyAttributes;\n this.select(\n sql.fragment`json_build_array(${sql.join(\n primaryKeys.map(key =>\n escapeLarge(\n sql.fragment`${this.getTableAlias()}.${sql.identifier(key.name)}`,\n key.type\n )\n ),\n \", \"\n )})`,\n \"__identifiers\"\n );\n this.selectedIdentifiers = true;\n }\n selectCursor(exprGen: SQLGen) {\n this.checkLock(\"selectCursor\");\n this.data.selectCursor = exprGen;\n }\n from(expr: SQLGen, alias?: SQLAlias = sql.identifier(Symbol())) {\n this.checkLock(\"from\");\n if (!expr) {\n throw new Error(\"No from table source!\");\n }\n if (!alias) {\n throw new Error(\"No from alias!\");\n }\n this.data.from = [expr, alias];\n this.lock(\"from\");\n }\n // XXX: join\n where(exprGen: SQLGen) {\n this.checkLock(\"where\");\n this.data.where.push(exprGen);\n }\n whereBound(exprGen: SQLGen, isLower: boolean) {\n if (typeof isLower !== \"boolean\") {\n throw new Error(\"isLower must be specified as a boolean\");\n }\n this.checkLock(\"whereBound\");\n this.data.whereBound[isLower ? \"lower\" : \"upper\"].push(exprGen);\n }\n setOrderIsUnique() {\n this.data.orderIsUnique = true;\n }\n orderBy(\n exprGen: SQLGen,\n ascending: boolean = true,\n nullsFirst: boolean | null\n ) {\n this.checkLock(\"orderBy\");\n this.data.orderBy.push([exprGen, ascending, nullsFirst]);\n }\n limit(limitGen: NumberGen) {\n this.checkLock(\"limit\");\n\n if (this.data.limit != null) {\n throw new Error(\"Must only set limit once\");\n }\n this.data.limit = limitGen;\n }\n offset(offsetGen: NumberGen) {\n this.checkLock(\"offset\");\n if (this.data.offset != null) {\n // Add the offsets together (this should be able to recurse)\n const previous = this.data.offset;\n this.data.offset = context => {\n return (\n callIfNecessary(previous, context) +\n callIfNecessary(offsetGen, context)\n );\n };\n } else {\n this.data.offset = offsetGen;\n }\n }\n first(first: number) {\n this.checkLock(\"first\");\n if (this.data.first != null) {\n throw new Error(\"Must only set first once\");\n }\n this.data.first = first;\n }\n last(last: number) {\n this.checkLock(\"last\");\n if (this.data.last != null) {\n throw new Error(\"Must only set last once\");\n }\n this.data.last = last;\n }\n\n // ----------------------------------------\n\n isOrderUnique(lock?: boolean = true) {\n if (lock) {\n this.lock(\"orderBy\");\n this.lock(\"orderIsUnique\");\n return this.compiledData.orderIsUnique;\n } else {\n // This is useful inside `beforeLock(\"orderBy\", ...)` calls\n return this.data.orderIsUnique;\n }\n }\n getTableExpression(): SQL {\n this.lock(\"from\");\n if (!this.compiledData.from) {\n throw new Error(\"No from table has been supplied\");\n }\n return this.compiledData.from[0];\n }\n getTableAlias(): SQL {\n this.lock(\"from\");\n if (!this.compiledData.from) {\n throw new Error(\"No from table has been supplied\");\n }\n return this.compiledData.from[1];\n }\n getSelectCursor() {\n this.lock(\"selectCursor\");\n return this.compiledData.selectCursor;\n }\n getOffset() {\n this.lock(\"offset\");\n return this.compiledData.offset || 0;\n }\n getFinalLimitAndOffset() {\n this.lock(\"offset\");\n this.lock(\"limit\");\n this.lock(\"first\");\n this.lock(\"last\");\n let limit = this.compiledData.limit;\n let offset = this.compiledData.offset || 0;\n let flip = false;\n if (this.compiledData.first != null) {\n if (limit != null) {\n limit = Math.min(limit, this.compiledData.first);\n } else {\n limit = this.compiledData.first;\n }\n }\n if (this.compiledData.last != null) {\n if (offset > 0 && limit != null) {\n throw new Error(\n \"Issue within pagination, please report your query to graphile-build\"\n );\n }\n if (limit != null) {\n if (this.compiledData.last < limit) {\n offset = limit - this.compiledData.last;\n limit = this.compiledData.last;\n } else {\n // no need to change anything\n }\n } else if (offset > 0) {\n throw new Error(\"Cannot combine 'last' and 'offset'\");\n } else {\n if (this.compiledData.orderBy.length > 0) {\n flip = true;\n limit = this.compiledData.last;\n } else {\n throw new Error(\"Cannot do last of an unordered set\");\n }\n }\n }\n return {\n limit,\n offset,\n flip,\n };\n }\n getFinalOffset() {\n return this.getFinalLimitAndOffset().offset;\n }\n getFinalLimit() {\n return this.getFinalLimitAndOffset().limit;\n }\n getOrderByExpressionsAndDirections() {\n this.lock(\"orderBy\");\n return this.compiledData.orderBy;\n }\n getSelectFieldsCount() {\n this.lockEverything();\n return this.compiledData.select.length;\n }\n buildSelectFields() {\n this.lockEverything();\n return sql.join(\n this.compiledData.select.map(\n ([sqlFragment, alias]) =>\n sql.fragment`to_json(${sqlFragment}) as ${sql.identifier(alias)}`\n ),\n \", \"\n );\n }\n buildSelectJson({\n addNullCase,\n addNotDistinctFromNullCase,\n }: {\n addNullCase?: boolean,\n addNotDistinctFromNullCase?: boolean,\n }) {\n this.lockEverything();\n let buildObject = this.compiledData.select.length\n ? this.jsonbBuildObject(this.compiledData.select)\n : sql.fragment`to_json(${this.getTableAlias()})`;\n if (addNotDistinctFromNullCase) {\n /*\n * `is null` is not sufficient here because the record might exist but\n * have null as each of its values; so we use `is not distinct from null`\n * to assert that the record itself doesn't exist. This is typically used\n * with column values.\n */\n buildObject = sql.fragment`(case when (${this.getTableAlias()} is not distinct from null) then null else ${buildObject} end)`;\n } else if (addNullCase) {\n /*\n * `is null` is probably used here because it's the result of a function;\n * functions seem to have trouble differentiating between `null::my_type`\n * and `(null,null,null)::my_type`, always opting for the latter which\n * then causes issues with the `GraphQLNonNull`s in the schema.\n */\n buildObject = sql.fragment`(case when (${this.getTableAlias()} is null) then null else ${buildObject} end)`;\n }\n return buildObject;\n }\n buildWhereBoundClause(isLower: boolean) {\n this.lock(\"whereBound\");\n const clauses = this.compiledData.whereBound[isLower ? \"lower\" : \"upper\"];\n if (clauses.length) {\n return sql.fragment`(${sql.join(clauses, \") and (\")})`;\n } else {\n return sql.literal(true);\n }\n }\n buildWhereClause(\n includeLowerBound: boolean,\n includeUpperBound: boolean,\n {\n addNullCase,\n addNotDistinctFromNullCase,\n }: { addNullCase?: boolean, addNotDistinctFromNullCase?: boolean }\n ) {\n this.lock(\"where\");\n const clauses = [\n /*\n * Okay... so this is quite interesting. When we're talking about\n * composite types, `(foo is not null)` and `not (foo is null)` are NOT\n * equivalent! Here's why:\n *\n * `(foo is null)`\n * true if every field of the row is null\n *\n * `(foo is not null)`\n * true if every field of the row is not null\n *\n * `not (foo is null)`\n * true if there's at least one field that is not null\n *\n * `is [not] distinct from null` does differentiate between these cases,\n * but when a function returns something like `select * from my_table\n * where false`, it actually returns `(null, null, null)::my_table`,\n * which will cause issues when we apply the `GraphQLNonNull` constraints\n * to the results - we want to treat this as null.\n *\n * So don't \"simplify\" the line below! We're probably checking if the\n * result of a function call returning a compound type was indeed null.\n */\n ...(addNotDistinctFromNullCase\n ? [sql.fragment`(${this.getTableAlias()} is distinct from null)`]\n : addNullCase\n ? [sql.fragment`not (${this.getTableAlias()} is null)`]\n : []),\n ...this.compiledData.where,\n ...(includeLowerBound ? [this.buildWhereBoundClause(true)] : []),\n ...(includeUpperBound ? [this.buildWhereBoundClause(false)] : []),\n ];\n return clauses.length\n ? sql.fragment`(${sql.join(clauses, \") and (\")})`\n : sql.fragment`1 = 1`;\n }\n build(\n options: {\n asJson?: boolean,\n asJsonAggregate?: boolean,\n onlyJsonField?: boolean,\n addNullCase?: boolean,\n addNotDistinctFromNullCase?: boolean,\n useAsterisk?: boolean,\n } = {}\n ) {\n const {\n asJson = false,\n asJsonAggregate = false,\n onlyJsonField = false,\n addNullCase = false,\n addNotDistinctFromNullCase = false,\n useAsterisk = false,\n } = options;\n\n this.lockEverything();\n if (onlyJsonField) {\n return this.buildSelectJson({ addNullCase, addNotDistinctFromNullCase });\n }\n const { limit, offset, flip } = this.getFinalLimitAndOffset();\n const fields =\n asJson || asJsonAggregate\n ? sql.fragment`${this.buildSelectJson({\n addNullCase,\n addNotDistinctFromNullCase,\n })} as object`\n : this.buildSelectFields();\n\n let fragment = sql.fragment`\\\nselect ${useAsterisk ? sql.fragment`${this.getTableAlias()}.*` : fields}\n${this.compiledData.from &&\n sql.fragment`from ${this.compiledData.from[0]} as ${this.getTableAlias()}`}\n${this.compiledData.join.length && sql.join(this.compiledData.join, \" \")}\nwhere ${this.buildWhereClause(true, true, options)}\n${\n this.compiledData.orderBy.length\n ? sql.fragment`order by ${sql.join(\n this.compiledData.orderBy.map(\n ([expr, ascending, nullsFirst]) =>\n sql.fragment`${expr} ${\n Number(ascending) ^ Number(flip)\n ? sql.fragment`ASC`\n : sql.fragment`DESC`\n }${\n nullsFirst === true\n ? sql.fragment` NULLS FIRST`\n : nullsFirst === false\n ? sql.fragment` NULLS LAST`\n : null\n }`\n ),\n \",\"\n )}`\n : \"\"\n}\n${isSafeInteger(limit) && sql.fragment`limit ${sql.literal(limit)}`}\n${offset && sql.fragment`offset ${sql.literal(offset)}`}`;\n if (flip) {\n const flipAlias = Symbol();\n fragment = sql.fragment`\\\nwith ${sql.identifier(flipAlias)} as (\n ${fragment}\n)\nselect *\nfrom ${sql.identifier(flipAlias)}\norder by (row_number() over (partition by 1)) desc`;\n }\n if (useAsterisk) {\n fragment = sql.fragment`select ${fields} from (${fragment}) ${this.getTableAlias()}`;\n }\n if (asJsonAggregate) {\n const aggAlias = Symbol();\n fragment = sql.fragment`select json_agg(${sql.identifier(\n aggAlias,\n \"object\"\n )}) from (${fragment}) as ${sql.identifier(aggAlias)}`;\n fragment = sql.fragment`select coalesce((${fragment}), '[]'::json)`;\n }\n return fragment;\n }\n\n // ----------------------------------------\n\n _finalize() {\n this.finalized = true;\n }\n lock(type: string) {\n if (this.locks[type]) return;\n const context = this.lockContext;\n const { beforeLock } = this.data;\n let locks = beforeLock[type];\n if (locks) {\n beforeLock[type] = [];\n for (let i = 0, l = locks.length; i < l; i++) {\n locks[i]();\n }\n }\n if (type !== \"select\") {\n this.locks[type] = isDev ? new Error(\"Initally locked here\").stack : true;\n }\n if (type === \"cursorComparator\") {\n // It's meant to be a function\n this.compiledData[type] = this.data[type];\n } else if (type === \"whereBound\") {\n // Handle properties separately\n this.compiledData[type].lower = callIfNecessaryArray(\n this.data[type].lower,\n context\n );\n this.compiledData[type].upper = callIfNecessaryArray(\n this.data[type].upper,\n context\n );\n } else if (type === \"select\") {\n /*\n * NOTICE: locking select can cause additional selects to be added, so the\n * length of this.data[type] may increase during the operation. This is\n * why we handle this.locks[type] separately.\n */\n\n // Assume that duplicate fields must be identical, don't output the same\n // key multiple times\n const seenFields: { [key: string | Symbol]: true } = {};\n const data = [];\n const selects = this.data[type];\n\n // DELIBERATE slow loop, see NOTICE above\n for (let i = 0; i < selects.length; i++) {\n const [valueOrGenerator, columnName] = selects[i];\n if (!seenFields[columnName]) {\n seenFields[columnName] = true;\n data.push([callIfNecessary(valueOrGenerator, context), columnName]);\n locks = beforeLock[type];\n if (locks) {\n beforeLock[type] = [];\n for (let i = 0, l = locks.length; i < l; i++) {\n locks[i]();\n }\n }\n }\n }\n this.locks[type] = isDev ? new Error(\"Initally locked here\").stack : true;\n this.compiledData[type] = data;\n } else if (type === \"orderBy\") {\n this.compiledData[type] = this.data[type].map(([a, b, c]) => [\n callIfNecessary(a, context),\n b,\n c,\n ]);\n } else if (type === \"from\") {\n if (this.data.from) {\n const f = this.data.from;\n this.compiledData.from = [callIfNecessary(f[0], context), f[1]];\n }\n } else if (type === \"join\" || type === \"where\") {\n this.compiledData[type] = callIfNecessaryArray(this.data[type], context);\n } else if (type === \"selectCursor\") {\n this.compiledData[type] = callIfNecessary(this.data[type], context);\n } else if (type === \"cursorPrefix\") {\n this.compiledData[type] = this.data[type];\n } else if (type === \"orderIsUnique\") {\n this.compiledData[type] = this.data[type];\n } else if (type === \"limit\") {\n this.compiledData[type] = callIfNecessary(this.data[type], context);\n } else if (type === \"offset\") {\n this.compiledData[type] = callIfNecessary(this.data[type], context);\n } else if (type === \"first\") {\n this.compiledData[type] = this.data[type];\n } else if (type === \"last\") {\n this.compiledData[type] = this.data[type];\n } else {\n throw new Error(`Wasn't expecting to lock '${type}'`);\n }\n }\n checkLock(type: string) {\n if (this.locks[type]) {\n if (typeof this.locks[type] === \"string\") {\n throw new Error(\n `'${type}' has already been locked\\n ` +\n this.locks[type].replace(/\\n/g, \"\\n \") +\n \"\\n\"\n );\n }\n throw new Error(`'${type}' has already been locked`);\n }\n }\n lockEverything() {\n this._finalize();\n // We must execute everything after `from` so we have the alias to reference\n this.lock(\"from\");\n this.lock(\"join\");\n this.lock(\"orderBy\");\n // We must execute where after orderBy because cursor queries require all orderBy columns\n this.lock(\"cursorComparator\");\n this.lock(\"whereBound\");\n this.lock(\"where\");\n // 'where' -> 'whereBound' can affect 'offset'/'limit'\n this.lock(\"offset\");\n this.lock(\"limit\");\n this.lock(\"first\");\n this.lock(\"last\");\n // We must execute select after orderBy otherwise we cannot generate a cursor\n this.lock(\"selectCursor\");\n this.lock(\"select\");\n }\n}\n\nexport default QueryBuilder;\n"],"file":"QueryBuilder.js"}
1
+ {"version":3,"sources":["../src/QueryBuilder.js"],"names":["isDev","process","env","POSTGRAPHILE_ENV","callIfNecessary","o","context","callIfNecessaryArray","Array","isArray","map","v","escapeLarge","sqlFragment","type","actualType","domainBaseType","category","includes","id","sql","fragment","QueryBuilder","constructor","options","rootValue","supportsJSONB","locks","cursorComparator","fixedSelectExpression","select","selectCursor","from","join","whereBound","where","orderBy","orderIsUnique","first","last","limit","offset","finalized","selectedIdentifiers","data","cursorPrefix","lower","upper","beforeLock","liveConditions","compiledData","_children","Map","lock","lockContext","Object","freeze","queryBuilder","jsonbBuildObject","fields","length","fieldsChunks","chunkToJson","fieldsChunk","expr","alias","literal","field","fn","checkLock","push","makeLiveCollection","table","cb","checkerGenerator","checkers","record","every","checker","parentQueryBuilder","Error","allRequirements","reduce","memo","_checkerGenerator","requirements","assign","value","keys","key","addLiveCondition","setCursorComparator","addCursorCondition","cursorValue","isAfter","exprGen","test","selectIdentifiers","primaryKey","primaryKeyConstraint","primaryKeys","keyAttributes","getTableAlias","identifier","name","Symbol","isLower","setOrderIsUnique","ascending","nullsFirst","limitGen","offsetGen","previous","isOrderUnique","getTableExpression","getSelectCursor","getOffset","getFinalLimitAndOffset","flip","Math","min","getFinalOffset","getFinalLimit","getOrderByExpressionsAndDirections","getSelectFieldsCount","lockEverything","buildSelectFields","buildSelectJson","addNullCase","addNotDistinctFromNullCase","buildObject","buildWhereBoundClause","clauses","buildWhereClause","includeLowerBound","includeUpperBound","build","asJson","asJsonAggregate","onlyJsonField","useAsterisk","Number","flipAlias","aggAlias","_finalize","i","l","stack","seenFields","selects","valueOrGenerator","columnName","a","b","c","f","replace","buildChild","child","buildNamedChildSelecting","selectExpression","has","toString","set","getNamedChild","get"],"mappings":"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","sourcesContent":["// @flow\nimport * as sql from \"pg-sql2\";\nimport type { SQL } from \"pg-sql2\";\nimport isSafeInteger from \"lodash/isSafeInteger\";\nimport chunk from \"lodash/chunk\";\nimport type { PgClass, PgType } from \"./plugins/PgIntrospectionPlugin\";\n\n// eslint-disable-next-line flowtype/no-weak-types\ntype GraphQLContext = any;\n\nconst isDev = process.env.POSTGRAPHILE_ENV === \"development\";\n\ntype GenContext = {\n queryBuilder: QueryBuilder,\n};\ntype Gen<T> = (context: GenContext) => T;\n\n// Importantly, this cannot include a function\ntype CallResult = null | string | number | boolean | SQL;\n\nfunction callIfNecessary<T: CallResult>(o: Gen<T> | T, context: GenContext): T {\n if (typeof o === \"function\") {\n return o(context);\n } else {\n return o;\n }\n}\n\nfunction callIfNecessaryArray<T: CallResult>(\n o: Array<Gen<T> | T>,\n context: GenContext\n): Array<T> {\n if (Array.isArray(o)) {\n return o.map(v => callIfNecessary(v, context));\n } else {\n return o;\n }\n}\n\nexport type RawAlias = Symbol | string;\ntype SQLAlias = SQL;\ntype SQLGen = Gen<SQL> | SQL;\ntype NumberGen = Gen<number> | number;\ntype CursorValue = Array<mixed>;\ntype CursorComparator = (val: CursorValue, isAfter: boolean) => void;\n\nexport type QueryBuilderOptions = {\n supportsJSONB?: boolean, // Defaults to true\n};\n\nfunction escapeLarge(sqlFragment: SQL, type: PgType) {\n const actualType = type.domainBaseType || type;\n if (actualType.category === \"N\") {\n if (\n [\n \"21\" /* int2 */,\n \"23\" /* int4 */,\n \"700\" /* float4 */,\n \"701\" /* float8 */,\n ].includes(actualType.id)\n ) {\n // No need for special handling\n return sqlFragment;\n }\n // Otherwise force the id to be a string\n return sql.fragment`((${sqlFragment})::numeric)::text`;\n }\n return sqlFragment;\n}\n\nclass QueryBuilder {\n parentQueryBuilder: QueryBuilder | void;\n context: GraphQLContext;\n rootValue: any; // eslint-disable-line flowtype/no-weak-types\n supportsJSONB: boolean;\n locks: {\n [string]: false | true | string,\n };\n finalized: boolean;\n selectedIdentifiers: boolean;\n data: {\n cursorPrefix: Array<string>,\n fixedSelectExpression: ?SQLGen,\n select: Array<[SQLGen, RawAlias]>,\n selectCursor: ?SQLGen,\n from: ?[SQLGen, SQLAlias],\n join: Array<SQLGen>,\n where: Array<SQLGen>,\n whereBound: {\n lower: Array<SQLGen>,\n upper: Array<SQLGen>,\n },\n orderBy: Array<[SQLGen, boolean, boolean | null]>,\n orderIsUnique: boolean,\n limit: ?NumberGen,\n offset: ?NumberGen,\n first: ?number,\n last: ?number,\n beforeLock: {\n [string]: Array<() => void> | null,\n },\n cursorComparator: ?CursorComparator,\n liveConditions: Array<\n // eslint-disable-next-line flowtype/no-weak-types\n [(data: {}) => (record: any) => boolean, { [key: string]: SQL } | void]\n >,\n };\n compiledData: {\n cursorPrefix: Array<string>,\n fixedSelectExpression: ?SQL,\n select: Array<[SQL, RawAlias]>,\n selectCursor: ?SQL,\n from: ?[SQL, SQLAlias],\n join: Array<SQL>,\n where: Array<SQL>,\n whereBound: {\n lower: Array<SQL>,\n upper: Array<SQL>,\n },\n orderBy: Array<[SQL, boolean, boolean | null]>,\n orderIsUnique: boolean,\n limit: ?number,\n offset: ?number,\n first: ?number,\n last: ?number,\n cursorComparator: ?CursorComparator,\n };\n lockContext: {\n queryBuilder: QueryBuilder,\n };\n _children: Map<RawAlias, QueryBuilder>;\n\n constructor(\n options: QueryBuilderOptions = {},\n context: GraphQLContext = {},\n rootValue?: any // eslint-disable-line flowtype/no-weak-types\n ) {\n this.context = context || {};\n this.rootValue = rootValue;\n this.supportsJSONB =\n typeof options.supportsJSONB === \"undefined\" ||\n options.supportsJSONB === null\n ? true\n : !!options.supportsJSONB;\n\n this.locks = {\n // As a performance optimisation, we're going to list a number of lock\n // types so that V8 doesn't need to mutate the object too much\n cursorComparator: false,\n fixedSelectExpression: false,\n select: false,\n selectCursor: false,\n from: false,\n join: false,\n whereBound: false,\n where: false,\n orderBy: false,\n orderIsUnique: false,\n first: false,\n last: false,\n limit: false,\n offset: false,\n };\n this.finalized = false;\n this.selectedIdentifiers = false;\n this.data = {\n // TODO: refactor `cursorPrefix`, it shouldn't be here (or should at least have getters/setters)\n cursorPrefix: [\"natural\"],\n fixedSelectExpression: null,\n select: [],\n selectCursor: null,\n from: null,\n join: [],\n where: [],\n whereBound: {\n lower: [],\n upper: [],\n },\n orderBy: [],\n orderIsUnique: false,\n limit: null,\n offset: null,\n first: null,\n last: null,\n beforeLock: {\n // As a performance optimisation, we're going to list a number of lock\n // types so that V8 doesn't need to mutate the object too much\n cursorComparator: [],\n fixedSelectExpression: [],\n select: [],\n selectCursor: [],\n from: [],\n join: [],\n whereBound: [],\n where: [],\n orderBy: [],\n orderIsUnique: [],\n first: [],\n last: [],\n limit: [],\n offset: [],\n },\n cursorComparator: null,\n liveConditions: [],\n };\n this.compiledData = {\n cursorPrefix: [\"natural\"],\n fixedSelectExpression: null,\n select: [],\n selectCursor: null,\n from: null,\n join: [],\n where: [],\n whereBound: {\n lower: [],\n upper: [],\n },\n orderBy: [],\n orderIsUnique: false,\n limit: null,\n offset: null,\n first: null,\n last: null,\n cursorComparator: null,\n };\n this._children = new Map();\n this.beforeLock(\"select\", () => {\n this.lock(\"selectCursor\");\n if (this.compiledData.selectCursor) {\n this.select(this.compiledData.selectCursor, \"__cursor\");\n }\n });\n // 'whereBound' and 'natural' order might set offset/limit\n this.beforeLock(\"where\", () => {\n this.lock(\"whereBound\");\n });\n this.beforeLock(\"offset\", () => {\n this.lock(\"whereBound\");\n });\n this.beforeLock(\"limit\", () => {\n this.lock(\"whereBound\");\n });\n this.beforeLock(\"first\", () => {\n this.lock(\"limit\");\n this.lock(\"offset\");\n });\n this.beforeLock(\"last\", () => {\n this.lock(\"limit\");\n this.lock(\"offset\");\n });\n this.lockContext = Object.freeze({\n queryBuilder: this,\n });\n }\n\n // ----------------------------------------\n\n // Helper function\n jsonbBuildObject(fields: Array<[SQL, RawAlias]>) {\n if (this.supportsJSONB && fields.length > 50) {\n const fieldsChunks = chunk(fields, 50);\n const chunkToJson = fieldsChunk =>\n sql.fragment`jsonb_build_object(${sql.join(\n fieldsChunk.map(\n ([expr, alias]) =>\n sql.fragment`${sql.literal(alias)}::text, ${expr}`\n ),\n \", \"\n )})`;\n return sql.fragment`(${sql.join(\n fieldsChunks.map(chunkToJson),\n \" || \"\n )})::json`;\n } else {\n // PG9.4 will have issues with more than 100 parameters (50 keys)\n return sql.fragment`json_build_object(${sql.join(\n fields.map(\n ([expr, alias]) => sql.fragment`${sql.literal(alias)}::text, ${expr}`\n ),\n \", \"\n )})`;\n }\n }\n\n // ----------------------------------------\n\n beforeLock(field: string, fn: () => void) {\n this.checkLock(field);\n if (!this.data.beforeLock[field]) {\n this.data.beforeLock[field] = [];\n }\n // $FlowFixMe: this is guaranteed to be set, due to the if statement above\n this.data.beforeLock[field].push(fn);\n }\n\n makeLiveCollection(\n table: PgClass,\n // eslint-disable-next-line flowtype/no-weak-types\n cb?: (checker: (data: any) => (record: any) => boolean) => void\n ) {\n /* the actual condition doesn't matter hugely, 'select' should work */\n if (!this.rootValue || !this.rootValue.liveConditions) return;\n const liveConditions = this.data.liveConditions;\n const checkerGenerator = data => {\n // Compute this once.\n const checkers = liveConditions.map(([checkerGenerator]) =>\n checkerGenerator(data)\n );\n return record => checkers.every(checker => checker(record));\n };\n if (this.parentQueryBuilder) {\n const parentQueryBuilder = this.parentQueryBuilder;\n if (cb) {\n throw new Error(\n \"Either use parentQueryBuilder or pass callback, not both.\"\n );\n }\n parentQueryBuilder.beforeLock(\"select\", () => {\n const id = this.rootValue.liveConditions.push(checkerGenerator) - 1;\n // BEWARE: it's easy to override others' conditions, and that will cause issues. Be sensible.\n const allRequirements = this.data.liveConditions.reduce(\n (memo, [_checkerGenerator, requirements]) =>\n requirements ? Object.assign(memo, requirements) : memo,\n {}\n );\n parentQueryBuilder.select(\n sql.fragment`\\\njson_build_object('__id', ${sql.value(id)}::int\n${sql.join(\n Object.keys(allRequirements).map(\n key => sql.fragment`, ${sql.literal(key)}::text, ${allRequirements[key]}`\n ),\n \"\"\n)})`,\n \"__live\"\n );\n });\n } else if (cb) {\n cb(checkerGenerator);\n } else {\n throw new Error(\n \"makeLiveCollection was called without parentQueryBuilder and without callback\"\n );\n }\n }\n\n addLiveCondition(\n // eslint-disable-next-line flowtype/no-weak-types\n checkerGenerator: (data: {}) => (record: any) => boolean,\n requirements?: { [key: string]: SQL }\n ) {\n if (requirements && !this.parentQueryBuilder) {\n throw new Error(\n \"There's no parentQueryBuilder, so there cannot be requirements\"\n );\n }\n this.data.liveConditions.push([checkerGenerator, requirements]);\n }\n\n setCursorComparator(fn: CursorComparator) {\n this.checkLock(\"cursorComparator\");\n this.data.cursorComparator = fn;\n this.lock(\"cursorComparator\");\n }\n addCursorCondition(cursorValue: CursorValue, isAfter: boolean) {\n this.beforeLock(\"whereBound\", () => {\n this.lock(\"cursorComparator\");\n if (!this.compiledData.cursorComparator) {\n throw new Error(\"No cursor comparator was set!\");\n }\n this.compiledData.cursorComparator(cursorValue, isAfter);\n });\n }\n /** this method is experimental */\n fixedSelectExpression(exprGen: SQLGen) {\n this.checkLock(\"fixedSelectExpression\");\n this.lock(\"select\");\n this.lock(\"selectCursor\");\n if (this.data.select.length > 0) {\n throw new Error(\"Cannot use .fixedSelectExpression() with .select()\");\n }\n if (this.data.selectCursor) {\n throw new Error(\n \"Cannot use .fixedSelectExpression() with .selectCursor()\"\n );\n }\n this.data.fixedSelectExpression = exprGen;\n }\n select(exprGen: SQLGen, alias: RawAlias) {\n this.checkLock(\"select\");\n this.lock(\"fixedSelectExpression\");\n if (typeof alias === \"string\") {\n // To protect against vulnerabilities such as\n //\n // https://github.com/brianc/node-postgres/issues/1408\n //\n // we need to ensure column names are safe. Turns out that GraphQL\n // aliases are fairly strict (`[_A-Za-z][_0-9A-Za-z]*`) anyway:\n //\n // https://github.com/graphql/graphql-js/blob/680685dd14bd52c6475305e150e5f295ead2aa7e/src/language/lexer.js#L551-L581\n //\n // so this should not cause any issues in practice.\n if (/^(\\$+|@+|[_A-Za-z])[_0-9A-Za-z]*$/.test(alias) !== true) {\n throw new Error(`Disallowed alias '${alias}'.`);\n }\n }\n this.data.select.push([exprGen, alias]);\n }\n selectIdentifiers(table: PgClass) {\n if (this.selectedIdentifiers) return;\n const primaryKey = table.primaryKeyConstraint;\n if (!primaryKey) return;\n const primaryKeys = primaryKey.keyAttributes;\n this.select(\n sql.fragment`json_build_array(${sql.join(\n primaryKeys.map(key =>\n escapeLarge(\n sql.fragment`${this.getTableAlias()}.${sql.identifier(key.name)}`,\n key.type\n )\n ),\n \", \"\n )})`,\n \"__identifiers\"\n );\n this.selectedIdentifiers = true;\n }\n selectCursor(exprGen: SQLGen) {\n this.checkLock(\"selectCursor\");\n this.lock(\"fixedSelectExpression\");\n this.data.selectCursor = exprGen;\n }\n from(expr: SQLGen, alias?: SQLAlias = sql.identifier(Symbol())) {\n this.checkLock(\"from\");\n if (!expr) {\n throw new Error(\"No from table source!\");\n }\n if (!alias) {\n throw new Error(\"No from alias!\");\n }\n this.data.from = [expr, alias];\n this.lock(\"from\");\n }\n // XXX: join\n where(exprGen: SQLGen) {\n this.checkLock(\"where\");\n this.data.where.push(exprGen);\n }\n whereBound(exprGen: SQLGen, isLower: boolean) {\n if (typeof isLower !== \"boolean\") {\n throw new Error(\"isLower must be specified as a boolean\");\n }\n this.checkLock(\"whereBound\");\n this.data.whereBound[isLower ? \"lower\" : \"upper\"].push(exprGen);\n }\n setOrderIsUnique() {\n this.data.orderIsUnique = true;\n }\n orderBy(\n exprGen: SQLGen,\n ascending: boolean = true,\n nullsFirst: boolean | null\n ) {\n this.checkLock(\"orderBy\");\n this.data.orderBy.push([exprGen, ascending, nullsFirst]);\n }\n limit(limitGen: NumberGen) {\n this.checkLock(\"limit\");\n\n if (this.data.limit != null) {\n throw new Error(\"Must only set limit once\");\n }\n this.data.limit = limitGen;\n }\n offset(offsetGen: NumberGen) {\n this.checkLock(\"offset\");\n if (this.data.offset != null) {\n // Add the offsets together (this should be able to recurse)\n const previous = this.data.offset;\n this.data.offset = context => {\n return (\n callIfNecessary(previous, context) +\n callIfNecessary(offsetGen, context)\n );\n };\n } else {\n this.data.offset = offsetGen;\n }\n }\n first(first: number) {\n this.checkLock(\"first\");\n if (this.data.first != null) {\n throw new Error(\"Must only set first once\");\n }\n this.data.first = first;\n }\n last(last: number) {\n this.checkLock(\"last\");\n if (this.data.last != null) {\n throw new Error(\"Must only set last once\");\n }\n this.data.last = last;\n }\n\n // ----------------------------------------\n\n isOrderUnique(lock?: boolean = true) {\n if (lock) {\n this.lock(\"orderBy\");\n this.lock(\"orderIsUnique\");\n return this.compiledData.orderIsUnique;\n } else {\n // This is useful inside `beforeLock(\"orderBy\", ...)` calls\n return this.data.orderIsUnique;\n }\n }\n getTableExpression(): SQL {\n this.lock(\"from\");\n if (!this.compiledData.from) {\n throw new Error(\"No from table has been supplied\");\n }\n return this.compiledData.from[0];\n }\n getTableAlias(): SQL {\n this.lock(\"from\");\n if (!this.compiledData.from) {\n throw new Error(\"No from table has been supplied\");\n }\n return this.compiledData.from[1];\n }\n getSelectCursor() {\n this.lock(\"selectCursor\");\n return this.compiledData.selectCursor;\n }\n getOffset() {\n this.lock(\"offset\");\n return this.compiledData.offset || 0;\n }\n getFinalLimitAndOffset() {\n this.lock(\"offset\");\n this.lock(\"limit\");\n this.lock(\"first\");\n this.lock(\"last\");\n let limit = this.compiledData.limit;\n let offset = this.compiledData.offset || 0;\n let flip = false;\n if (this.compiledData.first != null) {\n if (limit != null) {\n limit = Math.min(limit, this.compiledData.first);\n } else {\n limit = this.compiledData.first;\n }\n }\n if (this.compiledData.last != null) {\n if (offset > 0 && limit != null) {\n throw new Error(\n \"Issue within pagination, please report your query to graphile-build\"\n );\n }\n if (limit != null) {\n if (this.compiledData.last < limit) {\n offset = limit - this.compiledData.last;\n limit = this.compiledData.last;\n } else {\n // no need to change anything\n }\n } else if (offset > 0) {\n throw new Error(\"Cannot combine 'last' and 'offset'\");\n } else {\n if (this.compiledData.orderBy.length > 0) {\n flip = true;\n limit = this.compiledData.last;\n } else {\n throw new Error(\"Cannot do last of an unordered set\");\n }\n }\n }\n return {\n limit,\n offset,\n flip,\n };\n }\n getFinalOffset() {\n return this.getFinalLimitAndOffset().offset;\n }\n getFinalLimit() {\n return this.getFinalLimitAndOffset().limit;\n }\n getOrderByExpressionsAndDirections() {\n this.lock(\"orderBy\");\n return this.compiledData.orderBy;\n }\n getSelectFieldsCount() {\n this.lockEverything();\n return this.compiledData.select.length;\n }\n buildSelectFields() {\n this.lockEverything();\n if (this.compiledData.fixedSelectExpression) {\n return this.compiledData.fixedSelectExpression;\n }\n return sql.join(\n this.compiledData.select.map(\n ([sqlFragment, alias]) =>\n sql.fragment`to_json(${sqlFragment}) as ${sql.identifier(alias)}`\n ),\n \", \"\n );\n }\n buildSelectJson({\n addNullCase,\n addNotDistinctFromNullCase,\n }: {\n addNullCase?: boolean,\n addNotDistinctFromNullCase?: boolean,\n }) {\n this.lockEverything();\n let buildObject = this.compiledData.select.length\n ? this.jsonbBuildObject(this.compiledData.select)\n : sql.fragment`to_json(${this.getTableAlias()})`;\n if (addNotDistinctFromNullCase) {\n /*\n * `is null` is not sufficient here because the record might exist but\n * have null as each of its values; so we use `is not distinct from null`\n * to assert that the record itself doesn't exist. This is typically used\n * with column values.\n */\n buildObject = sql.fragment`(case when (${this.getTableAlias()} is not distinct from null) then null else ${buildObject} end)`;\n } else if (addNullCase) {\n /*\n * `is null` is probably used here because it's the result of a function;\n * functions seem to have trouble differentiating between `null::my_type`\n * and `(null,null,null)::my_type`, always opting for the latter which\n * then causes issues with the `GraphQLNonNull`s in the schema.\n */\n buildObject = sql.fragment`(case when (${this.getTableAlias()} is null) then null else ${buildObject} end)`;\n }\n return buildObject;\n }\n buildWhereBoundClause(isLower: boolean) {\n this.lock(\"whereBound\");\n const clauses = this.compiledData.whereBound[isLower ? \"lower\" : \"upper\"];\n if (clauses.length) {\n return sql.fragment`(${sql.join(clauses, \") and (\")})`;\n } else {\n return sql.literal(true);\n }\n }\n buildWhereClause(\n includeLowerBound: boolean,\n includeUpperBound: boolean,\n {\n addNullCase,\n addNotDistinctFromNullCase,\n }: { addNullCase?: boolean, addNotDistinctFromNullCase?: boolean }\n ) {\n this.lock(\"where\");\n const clauses = [\n /*\n * Okay... so this is quite interesting. When we're talking about\n * composite types, `(foo is not null)` and `not (foo is null)` are NOT\n * equivalent! Here's why:\n *\n * `(foo is null)`\n * true if every field of the row is null\n *\n * `(foo is not null)`\n * true if every field of the row is not null\n *\n * `not (foo is null)`\n * true if there's at least one field that is not null\n *\n * `is [not] distinct from null` does differentiate between these cases,\n * but when a function returns something like `select * from my_table\n * where false`, it actually returns `(null, null, null)::my_table`,\n * which will cause issues when we apply the `GraphQLNonNull` constraints\n * to the results - we want to treat this as null.\n *\n * So don't \"simplify\" the line below! We're probably checking if the\n * result of a function call returning a compound type was indeed null.\n */\n ...(addNotDistinctFromNullCase\n ? [sql.fragment`(${this.getTableAlias()} is distinct from null)`]\n : addNullCase\n ? [sql.fragment`not (${this.getTableAlias()} is null)`]\n : []),\n ...this.compiledData.where,\n ...(includeLowerBound ? [this.buildWhereBoundClause(true)] : []),\n ...(includeUpperBound ? [this.buildWhereBoundClause(false)] : []),\n ];\n return clauses.length\n ? sql.fragment`(${sql.join(clauses, \") and (\")})`\n : sql.fragment`1 = 1`;\n }\n build(\n options: {\n asJson?: boolean,\n asJsonAggregate?: boolean,\n onlyJsonField?: boolean,\n addNullCase?: boolean,\n addNotDistinctFromNullCase?: boolean,\n useAsterisk?: boolean,\n } = {}\n ) {\n this.lockEverything();\n\n if (this.compiledData.fixedSelectExpression) {\n if (Object.keys(options).length > 0) {\n throw new Error(\n \"Do not pass options to QueryBuilder.build() when using `buildNamedChildSelecting`\"\n );\n }\n }\n const {\n asJson = false,\n asJsonAggregate = false,\n onlyJsonField = false,\n addNullCase = false,\n addNotDistinctFromNullCase = false,\n useAsterisk = false,\n } = options;\n\n if (onlyJsonField) {\n return this.buildSelectJson({ addNullCase, addNotDistinctFromNullCase });\n }\n const { limit, offset, flip } = this.getFinalLimitAndOffset();\n const fields =\n asJson || asJsonAggregate\n ? sql.fragment`${this.buildSelectJson({\n addNullCase,\n addNotDistinctFromNullCase,\n })} as object`\n : this.buildSelectFields();\n\n let fragment = sql.fragment`\\\nselect ${useAsterisk ? sql.fragment`${this.getTableAlias()}.*` : fields}\n${this.compiledData.from &&\n sql.fragment`from ${this.compiledData.from[0]} as ${this.getTableAlias()}`}\n${this.compiledData.join.length && sql.join(this.compiledData.join, \" \")}\nwhere ${this.buildWhereClause(true, true, options)}\n${\n this.compiledData.orderBy.length\n ? sql.fragment`order by ${sql.join(\n this.compiledData.orderBy.map(\n ([expr, ascending, nullsFirst]) =>\n sql.fragment`${expr} ${\n Number(ascending) ^ Number(flip)\n ? sql.fragment`ASC`\n : sql.fragment`DESC`\n }${\n nullsFirst === true\n ? sql.fragment` NULLS FIRST`\n : nullsFirst === false\n ? sql.fragment` NULLS LAST`\n : null\n }`\n ),\n \",\"\n )}`\n : \"\"\n}\n${isSafeInteger(limit) && sql.fragment`limit ${sql.literal(limit)}`}\n${offset && sql.fragment`offset ${sql.literal(offset)}`}`;\n if (flip) {\n const flipAlias = Symbol();\n fragment = sql.fragment`\\\nwith ${sql.identifier(flipAlias)} as (\n ${fragment}\n)\nselect *\nfrom ${sql.identifier(flipAlias)}\norder by (row_number() over (partition by 1)) desc`; /* We don't need to factor useAsterisk into this row_number() usage */\n }\n if (useAsterisk) {\n /*\n * NOTE[useAsterisk/row_number]: since LIMIT/OFFSET is inside this\n * subquery, row_number() outside of this subquery WON'T include the\n * offset. We must add it back wherever row_number() is used.\n */\n fragment = sql.fragment`select ${fields} from (${fragment}) ${this.getTableAlias()}`;\n }\n if (asJsonAggregate) {\n const aggAlias = Symbol();\n fragment = sql.fragment`select json_agg(${sql.identifier(\n aggAlias,\n \"object\"\n )}) from (${fragment}) as ${sql.identifier(aggAlias)}`;\n fragment = sql.fragment`select coalesce((${fragment}), '[]'::json)`;\n }\n return fragment;\n }\n\n // ----------------------------------------\n\n _finalize() {\n this.finalized = true;\n }\n lock(type: string) {\n if (this.locks[type]) return;\n const context = this.lockContext;\n const { beforeLock } = this.data;\n let locks = beforeLock[type];\n if (locks) {\n beforeLock[type] = [];\n for (let i = 0, l = locks.length; i < l; i++) {\n locks[i]();\n }\n }\n if (type !== \"select\") {\n this.locks[type] = isDev ? new Error(\"Initally locked here\").stack : true;\n }\n if (type === \"cursorComparator\") {\n // It's meant to be a function\n this.compiledData[type] = this.data[type];\n } else if (type === \"whereBound\") {\n // Handle properties separately\n this.compiledData[type].lower = callIfNecessaryArray(\n this.data[type].lower,\n context\n );\n this.compiledData[type].upper = callIfNecessaryArray(\n this.data[type].upper,\n context\n );\n } else if (type === \"fixedSelectExpression\") {\n this.compiledData[type] = callIfNecessary(this.data[type], context);\n } else if (type === \"select\") {\n /*\n * NOTICE: locking select can cause additional selects to be added, so the\n * length of this.data[type] may increase during the operation. This is\n * why we handle this.locks[type] separately.\n */\n\n // Assume that duplicate fields must be identical, don't output the same\n // key multiple times\n const seenFields: { [key: string | Symbol]: true } = {};\n const data = [];\n const selects = this.data[type];\n\n // DELIBERATE slow loop, see NOTICE above\n for (let i = 0; i < selects.length; i++) {\n const [valueOrGenerator, columnName] = selects[i];\n if (!seenFields[columnName]) {\n seenFields[columnName] = true;\n data.push([callIfNecessary(valueOrGenerator, context), columnName]);\n locks = beforeLock[type];\n if (locks) {\n beforeLock[type] = [];\n for (let i = 0, l = locks.length; i < l; i++) {\n locks[i]();\n }\n }\n }\n }\n this.locks[type] = isDev ? new Error(\"Initally locked here\").stack : true;\n this.compiledData[type] = data;\n } else if (type === \"orderBy\") {\n this.compiledData[type] = this.data[type].map(([a, b, c]) => [\n callIfNecessary(a, context),\n b,\n c,\n ]);\n } else if (type === \"from\") {\n if (this.data.from) {\n const f = this.data.from;\n this.compiledData.from = [callIfNecessary(f[0], context), f[1]];\n }\n } else if (type === \"join\" || type === \"where\") {\n this.compiledData[type] = callIfNecessaryArray(this.data[type], context);\n } else if (type === \"selectCursor\") {\n this.compiledData[type] = callIfNecessary(this.data[type], context);\n } else if (type === \"cursorPrefix\") {\n this.compiledData[type] = this.data[type];\n } else if (type === \"orderIsUnique\") {\n this.compiledData[type] = this.data[type];\n } else if (type === \"limit\") {\n this.compiledData[type] = callIfNecessary(this.data[type], context);\n } else if (type === \"offset\") {\n this.compiledData[type] = callIfNecessary(this.data[type], context);\n } else if (type === \"first\") {\n this.compiledData[type] = this.data[type];\n } else if (type === \"last\") {\n this.compiledData[type] = this.data[type];\n } else {\n throw new Error(`Wasn't expecting to lock '${type}'`);\n }\n }\n checkLock(type: string) {\n if (this.locks[type]) {\n if (typeof this.locks[type] === \"string\") {\n throw new Error(\n `'${type}' has already been locked\\n ` +\n this.locks[type].replace(/\\n/g, \"\\n \") +\n \"\\n\"\n );\n }\n throw new Error(`'${type}' has already been locked`);\n }\n }\n lockEverything() {\n this._finalize();\n // We must execute everything after `from` so we have the alias to reference\n this.lock(\"from\");\n this.lock(\"join\");\n this.lock(\"orderBy\");\n // We must execute where after orderBy because cursor queries require all orderBy columns\n this.lock(\"cursorComparator\");\n this.lock(\"whereBound\");\n this.lock(\"where\");\n // 'where' -> 'whereBound' can affect 'offset'/'limit'\n this.lock(\"offset\");\n this.lock(\"limit\");\n this.lock(\"first\");\n this.lock(\"last\");\n // We must execute select after orderBy otherwise we cannot generate a cursor\n this.lock(\"fixedSelectExpression\");\n this.lock(\"selectCursor\");\n this.lock(\"select\");\n }\n /** this method is experimental */\n buildChild() {\n const options = { supportsJSONB: this.supportsJSONB };\n const child = new QueryBuilder(options, this.context, this.rootValue);\n child.parentQueryBuilder = this;\n return child;\n }\n /** this method is experimental */\n buildNamedChildSelecting(\n name: RawAlias,\n from: SQLGen,\n selectExpression: SQLGen,\n alias?: SQLAlias\n ) {\n if (this._children.has(name)) {\n throw new Error(\n `QueryBuilder already has a child named ${name.toString()}`\n );\n }\n const child = this.buildChild();\n child.from(from, alias);\n child.fixedSelectExpression(selectExpression);\n this._children.set(name, child);\n return child;\n }\n /** this method is experimental */\n getNamedChild(name: string) {\n return this._children.get(name);\n }\n}\n\nexport default QueryBuilder;\n"],"file":"QueryBuilder.js"}
@@ -7,6 +7,10 @@ import {
7
7
  PgAttribute,
8
8
  PgConstraint,
9
9
  PgExtension,
10
+ PgIndex,
11
+ PgIntrospectionResultsByKind,
12
+ PgEntity,
13
+ PgEntityKind,
10
14
  } from "./plugins/PgIntrospectionPlugin";
11
15
 
12
16
  export {
@@ -17,6 +21,10 @@ export {
17
21
  PgAttribute,
18
22
  PgConstraint,
19
23
  PgExtension,
24
+ PgIndex,
25
+ PgIntrospectionResultsByKind,
26
+ PgEntity,
27
+ PgEntityKind,
20
28
  };
21
29
 
22
30
  export function formatSQLForDebugging(sql: string): string;
@@ -15,6 +15,12 @@ Object.defineProperty(exports, "PgIntrospectionPlugin", {
15
15
  return _PgIntrospectionPlugin.default;
16
16
  }
17
17
  });
18
+ Object.defineProperty(exports, "PgEntityKind", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _PgIntrospectionPlugin.PgEntityKind;
22
+ }
23
+ });
18
24
  Object.defineProperty(exports, "PgTypesPlugin", {
19
25
  enumerable: true,
20
26
  get: function () {
@@ -241,7 +247,7 @@ exports.inflections = exports.defaultPlugins = void 0;
241
247
 
242
248
  var _PgBasicsPlugin = _interopRequireDefault(require("./plugins/PgBasicsPlugin"));
243
249
 
244
- var _PgIntrospectionPlugin = _interopRequireDefault(require("./plugins/PgIntrospectionPlugin"));
250
+ var _PgIntrospectionPlugin = _interopRequireWildcard(require("./plugins/PgIntrospectionPlugin"));
245
251
 
246
252
  var _PgTypesPlugin = _interopRequireDefault(require("./plugins/PgTypesPlugin"));
247
253
 
@@ -1,6 +1,8 @@
1
1
  // @flow
2
2
  import PgBasicsPlugin from "./plugins/PgBasicsPlugin";
3
- import PgIntrospectionPlugin from "./plugins/PgIntrospectionPlugin";
3
+ import PgIntrospectionPlugin, {
4
+ PgEntityKind,
5
+ } from "./plugins/PgIntrospectionPlugin";
4
6
  import PgTypesPlugin from "./plugins/PgTypesPlugin";
5
7
  import PgJWTPlugin from "./plugins/PgJWTPlugin";
6
8
  import PgTablesPlugin from "./plugins/PgTablesPlugin";
@@ -81,6 +83,9 @@ export const defaultPlugins = [
81
83
 
82
84
  export { inflections };
83
85
 
86
+ // TypeScript compatibility
87
+ export { PgEntityKind };
88
+
84
89
  export {
85
90
  PgBasicsPlugin,
86
91
  PgIntrospectionPlugin,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.js"],"names":["defaultPlugins","PgBasicsPlugin","PgIntrospectionPlugin","PgTypesPlugin","PgJWTPlugin","PgTablesPlugin","PgConnectionArgFirstLastBeforeAfter","PgConnectionArgOrderBy","PgConnectionArgOrderByDefaultValue","PgConnectionArgCondition","PgConditionComputedColumnPlugin","PgAllRows","PgColumnsPlugin","PgColumnDeprecationPlugin","PgForwardRelationPlugin","PgBackwardRelationPlugin","PgRowByUniqueConstraint","PgComputedColumnsPlugin","PgQueryProceduresPlugin","PgOrderAllColumnsPlugin","PgOrderComputedColumnsPlugin","PgOrderByPrimaryKeyPlugin","PgRowNode","PgNodeAliasPostGraphile","PgRecordReturnTypesPlugin","PgRecordFunctionConnectionPlugin","PgScalarFunctionConnectionPlugin","PageInfoStartEndCursor","PgConnectionTotalCount","PgMutationCreatePlugin","PgMutationUpdateDeletePlugin","PgMutationProceduresPlugin","PgMutationPayloadEdgePlugin"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAGA;;AACA;;AACA;;AACA;;AAEA;;;;AAEA;;AACA;;AACA;;AA+EA;;;;;;;;AAzFA;AAcO,MAAMA,cAAc,GAAG,CAC5BC,uBAD4B,EAE5BC,8BAF4B,EAG5BC,sBAH4B,EAI5BC,oBAJ4B,EAK5BC,uBAL4B,EAM5BC,4CAN4B,EAO5BC,+BAP4B,EAQ5BC,2CAR4B,EAS5BC,iCAT4B,EAU5BC,wCAV4B,EAW5BC,kBAX4B,EAY5BC,wBAZ4B,EAa5BC,kCAb4B,EAc5BC,gCAd4B,EAe5BC,iCAf4B,EAgB5BC,gCAhB4B,EAiB5BC,gCAjB4B,EAkB5BC,gCAlB4B,EAmB5BC,gCAnB4B,EAoB5BC,qCApB4B,EAqB5BC,kCArB4B,EAsB5BC,kBAtB4B,EAuB5BC,gCAvB4B,EAwB5BC,kCAxB4B,EAyB5BC,yCAzB4B,EA0B5BC,yCA1B4B,EA0BM;AAClCC,+BA3B4B,EA2BJ;AACxBC,+BA5B4B,EA8B5B;AACAC,+BA/B4B,EAgC5BC,qCAhC4B,EAiC5BC,mCAjC4B,EAkC5BC,oCAlC4B,CAAvB","sourcesContent":["// @flow\nimport PgBasicsPlugin from \"./plugins/PgBasicsPlugin\";\nimport PgIntrospectionPlugin from \"./plugins/PgIntrospectionPlugin\";\nimport PgTypesPlugin from \"./plugins/PgTypesPlugin\";\nimport PgJWTPlugin from \"./plugins/PgJWTPlugin\";\nimport PgTablesPlugin from \"./plugins/PgTablesPlugin\";\nimport PgConnectionArgFirstLastBeforeAfter from \"./plugins/PgConnectionArgFirstLastBeforeAfter\";\nimport PgConnectionArgOrderBy from \"./plugins/PgConnectionArgOrderBy\";\nimport PgConnectionArgOrderByDefaultValue from \"./plugins/PgConnectionArgOrderByDefaultValue\";\nimport PgConnectionArgCondition from \"./plugins/PgConnectionArgCondition\";\nimport PgConditionComputedColumnPlugin from \"./plugins/PgConditionComputedColumnPlugin\";\nimport PgAllRows from \"./plugins/PgAllRows\";\nimport PgColumnsPlugin from \"./plugins/PgColumnsPlugin\";\nimport PgColumnDeprecationPlugin from \"./plugins/PgColumnDeprecationPlugin\";\nimport PgForwardRelationPlugin from \"./plugins/PgForwardRelationPlugin\";\nimport PgBackwardRelationPlugin from \"./plugins/PgBackwardRelationPlugin\";\nimport PgRowByUniqueConstraint from \"./plugins/PgRowByUniqueConstraint\";\nimport PgComputedColumnsPlugin from \"./plugins/PgComputedColumnsPlugin\";\nimport PgQueryProceduresPlugin from \"./plugins/PgQueryProceduresPlugin\";\nimport PgOrderAllColumnsPlugin from \"./plugins/PgOrderAllColumnsPlugin\";\nimport PgOrderComputedColumnsPlugin from \"./plugins/PgOrderComputedColumnsPlugin\";\nimport PgOrderByPrimaryKeyPlugin from \"./plugins/PgOrderByPrimaryKeyPlugin\";\nimport PgRowNode from \"./plugins/PgRowNode\";\nimport PgNodeAliasPostGraphile from \"./plugins/PgNodeAliasPostGraphile\";\nimport PgRecordReturnTypesPlugin from \"./plugins/PgRecordReturnTypesPlugin\";\nimport PgRecordFunctionConnectionPlugin from \"./plugins/PgRecordFunctionConnectionPlugin\";\nimport PgScalarFunctionConnectionPlugin from \"./plugins/PgScalarFunctionConnectionPlugin\";\nimport PageInfoStartEndCursor from \"./plugins/PageInfoStartEndCursor\";\nimport PgConnectionTotalCount from \"./plugins/PgConnectionTotalCount\";\n\n// Mutations\nimport PgMutationCreatePlugin from \"./plugins/PgMutationCreatePlugin\";\nimport PgMutationUpdateDeletePlugin from \"./plugins/PgMutationUpdateDeletePlugin\";\nimport PgMutationProceduresPlugin from \"./plugins/PgMutationProceduresPlugin\";\nimport PgMutationPayloadEdgePlugin from \"./plugins/PgMutationPayloadEdgePlugin\";\n\nimport * as inflections from \"./inflections\";\n\nimport parseIdentifier from \"./parseIdentifier\";\nimport omit from \"./omit\";\nexport { formatSQLForDebugging } from \"./plugins/debugSql\";\n\nexport { parseIdentifier, omit };\n\nexport const defaultPlugins = [\n PgBasicsPlugin,\n PgIntrospectionPlugin,\n PgTypesPlugin,\n PgJWTPlugin,\n PgTablesPlugin,\n PgConnectionArgFirstLastBeforeAfter,\n PgConnectionArgOrderBy,\n PgConnectionArgOrderByDefaultValue,\n PgConnectionArgCondition,\n PgConditionComputedColumnPlugin,\n PgAllRows,\n PgColumnsPlugin,\n PgColumnDeprecationPlugin,\n PgForwardRelationPlugin,\n PgBackwardRelationPlugin,\n PgRowByUniqueConstraint,\n PgComputedColumnsPlugin,\n PgQueryProceduresPlugin,\n PgOrderAllColumnsPlugin,\n PgOrderComputedColumnsPlugin,\n PgOrderByPrimaryKeyPlugin,\n PgRowNode,\n PgNodeAliasPostGraphile,\n PgRecordReturnTypesPlugin,\n PgRecordFunctionConnectionPlugin,\n PgScalarFunctionConnectionPlugin, // For PostGraphile compatibility\n PageInfoStartEndCursor, // For PostGraphile compatibility\n PgConnectionTotalCount,\n\n // Mutations\n PgMutationCreatePlugin,\n PgMutationUpdateDeletePlugin,\n PgMutationProceduresPlugin,\n PgMutationPayloadEdgePlugin,\n];\n\nexport { inflections };\n\nexport {\n PgBasicsPlugin,\n PgIntrospectionPlugin,\n PgTypesPlugin,\n PgJWTPlugin,\n PgTablesPlugin,\n PgConnectionArgFirstLastBeforeAfter,\n PgConnectionArgOrderBy,\n PgConnectionArgOrderByDefaultValue,\n PgConnectionArgCondition,\n PgConditionComputedColumnPlugin,\n PgAllRows,\n PgColumnsPlugin,\n PgColumnDeprecationPlugin,\n PgForwardRelationPlugin,\n PgBackwardRelationPlugin,\n PgRowByUniqueConstraint,\n PgComputedColumnsPlugin,\n PgQueryProceduresPlugin,\n PgOrderAllColumnsPlugin,\n PgOrderComputedColumnsPlugin,\n PgOrderByPrimaryKeyPlugin,\n PgRowNode,\n PgNodeAliasPostGraphile,\n PgNodeAliasPostGraphile as PgNodeAliasPostGraphQL,\n PgRecordReturnTypesPlugin,\n PgRecordFunctionConnectionPlugin,\n PgScalarFunctionConnectionPlugin,\n PageInfoStartEndCursor,\n PgConnectionTotalCount,\n PgMutationCreatePlugin,\n PgMutationUpdateDeletePlugin,\n PgMutationProceduresPlugin,\n PgMutationPayloadEdgePlugin,\n};\n\nexport { upperFirst, camelCase, constantCase } from \"graphile-build\";\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../src/index.js"],"names":["defaultPlugins","PgBasicsPlugin","PgIntrospectionPlugin","PgTypesPlugin","PgJWTPlugin","PgTablesPlugin","PgConnectionArgFirstLastBeforeAfter","PgConnectionArgOrderBy","PgConnectionArgOrderByDefaultValue","PgConnectionArgCondition","PgConditionComputedColumnPlugin","PgAllRows","PgColumnsPlugin","PgColumnDeprecationPlugin","PgForwardRelationPlugin","PgBackwardRelationPlugin","PgRowByUniqueConstraint","PgComputedColumnsPlugin","PgQueryProceduresPlugin","PgOrderAllColumnsPlugin","PgOrderComputedColumnsPlugin","PgOrderByPrimaryKeyPlugin","PgRowNode","PgNodeAliasPostGraphile","PgRecordReturnTypesPlugin","PgRecordFunctionConnectionPlugin","PgScalarFunctionConnectionPlugin","PageInfoStartEndCursor","PgConnectionTotalCount","PgMutationCreatePlugin","PgMutationUpdateDeletePlugin","PgMutationProceduresPlugin","PgMutationPayloadEdgePlugin"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;;AACA;;AAGA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAGA;;AACA;;AACA;;AACA;;AAEA;;;;AAEA;;AACA;;AACA;;AAkFA;;;;;;;;AA5FA;AAcO,MAAMA,cAAc,GAAG,CAC5BC,uBAD4B,EAE5BC,8BAF4B,EAG5BC,sBAH4B,EAI5BC,oBAJ4B,EAK5BC,uBAL4B,EAM5BC,4CAN4B,EAO5BC,+BAP4B,EAQ5BC,2CAR4B,EAS5BC,iCAT4B,EAU5BC,wCAV4B,EAW5BC,kBAX4B,EAY5BC,wBAZ4B,EAa5BC,kCAb4B,EAc5BC,gCAd4B,EAe5BC,iCAf4B,EAgB5BC,gCAhB4B,EAiB5BC,gCAjB4B,EAkB5BC,gCAlB4B,EAmB5BC,gCAnB4B,EAoB5BC,qCApB4B,EAqB5BC,kCArB4B,EAsB5BC,kBAtB4B,EAuB5BC,gCAvB4B,EAwB5BC,kCAxB4B,EAyB5BC,yCAzB4B,EA0B5BC,yCA1B4B,EA0BM;AAClCC,+BA3B4B,EA2BJ;AACxBC,+BA5B4B,EA8B5B;AACAC,+BA/B4B,EAgC5BC,qCAhC4B,EAiC5BC,mCAjC4B,EAkC5BC,oCAlC4B,CAAvB","sourcesContent":["// @flow\nimport PgBasicsPlugin from \"./plugins/PgBasicsPlugin\";\nimport PgIntrospectionPlugin, {\n PgEntityKind,\n} from \"./plugins/PgIntrospectionPlugin\";\nimport PgTypesPlugin from \"./plugins/PgTypesPlugin\";\nimport PgJWTPlugin from \"./plugins/PgJWTPlugin\";\nimport PgTablesPlugin from \"./plugins/PgTablesPlugin\";\nimport PgConnectionArgFirstLastBeforeAfter from \"./plugins/PgConnectionArgFirstLastBeforeAfter\";\nimport PgConnectionArgOrderBy from \"./plugins/PgConnectionArgOrderBy\";\nimport PgConnectionArgOrderByDefaultValue from \"./plugins/PgConnectionArgOrderByDefaultValue\";\nimport PgConnectionArgCondition from \"./plugins/PgConnectionArgCondition\";\nimport PgConditionComputedColumnPlugin from \"./plugins/PgConditionComputedColumnPlugin\";\nimport PgAllRows from \"./plugins/PgAllRows\";\nimport PgColumnsPlugin from \"./plugins/PgColumnsPlugin\";\nimport PgColumnDeprecationPlugin from \"./plugins/PgColumnDeprecationPlugin\";\nimport PgForwardRelationPlugin from \"./plugins/PgForwardRelationPlugin\";\nimport PgBackwardRelationPlugin from \"./plugins/PgBackwardRelationPlugin\";\nimport PgRowByUniqueConstraint from \"./plugins/PgRowByUniqueConstraint\";\nimport PgComputedColumnsPlugin from \"./plugins/PgComputedColumnsPlugin\";\nimport PgQueryProceduresPlugin from \"./plugins/PgQueryProceduresPlugin\";\nimport PgOrderAllColumnsPlugin from \"./plugins/PgOrderAllColumnsPlugin\";\nimport PgOrderComputedColumnsPlugin from \"./plugins/PgOrderComputedColumnsPlugin\";\nimport PgOrderByPrimaryKeyPlugin from \"./plugins/PgOrderByPrimaryKeyPlugin\";\nimport PgRowNode from \"./plugins/PgRowNode\";\nimport PgNodeAliasPostGraphile from \"./plugins/PgNodeAliasPostGraphile\";\nimport PgRecordReturnTypesPlugin from \"./plugins/PgRecordReturnTypesPlugin\";\nimport PgRecordFunctionConnectionPlugin from \"./plugins/PgRecordFunctionConnectionPlugin\";\nimport PgScalarFunctionConnectionPlugin from \"./plugins/PgScalarFunctionConnectionPlugin\";\nimport PageInfoStartEndCursor from \"./plugins/PageInfoStartEndCursor\";\nimport PgConnectionTotalCount from \"./plugins/PgConnectionTotalCount\";\n\n// Mutations\nimport PgMutationCreatePlugin from \"./plugins/PgMutationCreatePlugin\";\nimport PgMutationUpdateDeletePlugin from \"./plugins/PgMutationUpdateDeletePlugin\";\nimport PgMutationProceduresPlugin from \"./plugins/PgMutationProceduresPlugin\";\nimport PgMutationPayloadEdgePlugin from \"./plugins/PgMutationPayloadEdgePlugin\";\n\nimport * as inflections from \"./inflections\";\n\nimport parseIdentifier from \"./parseIdentifier\";\nimport omit from \"./omit\";\nexport { formatSQLForDebugging } from \"./plugins/debugSql\";\n\nexport { parseIdentifier, omit };\n\nexport const defaultPlugins = [\n PgBasicsPlugin,\n PgIntrospectionPlugin,\n PgTypesPlugin,\n PgJWTPlugin,\n PgTablesPlugin,\n PgConnectionArgFirstLastBeforeAfter,\n PgConnectionArgOrderBy,\n PgConnectionArgOrderByDefaultValue,\n PgConnectionArgCondition,\n PgConditionComputedColumnPlugin,\n PgAllRows,\n PgColumnsPlugin,\n PgColumnDeprecationPlugin,\n PgForwardRelationPlugin,\n PgBackwardRelationPlugin,\n PgRowByUniqueConstraint,\n PgComputedColumnsPlugin,\n PgQueryProceduresPlugin,\n PgOrderAllColumnsPlugin,\n PgOrderComputedColumnsPlugin,\n PgOrderByPrimaryKeyPlugin,\n PgRowNode,\n PgNodeAliasPostGraphile,\n PgRecordReturnTypesPlugin,\n PgRecordFunctionConnectionPlugin,\n PgScalarFunctionConnectionPlugin, // For PostGraphile compatibility\n PageInfoStartEndCursor, // For PostGraphile compatibility\n PgConnectionTotalCount,\n\n // Mutations\n PgMutationCreatePlugin,\n PgMutationUpdateDeletePlugin,\n PgMutationProceduresPlugin,\n PgMutationPayloadEdgePlugin,\n];\n\nexport { inflections };\n\n// TypeScript compatibility\nexport { PgEntityKind };\n\nexport {\n PgBasicsPlugin,\n PgIntrospectionPlugin,\n PgTypesPlugin,\n PgJWTPlugin,\n PgTablesPlugin,\n PgConnectionArgFirstLastBeforeAfter,\n PgConnectionArgOrderBy,\n PgConnectionArgOrderByDefaultValue,\n PgConnectionArgCondition,\n PgConditionComputedColumnPlugin,\n PgAllRows,\n PgColumnsPlugin,\n PgColumnDeprecationPlugin,\n PgForwardRelationPlugin,\n PgBackwardRelationPlugin,\n PgRowByUniqueConstraint,\n PgComputedColumnsPlugin,\n PgQueryProceduresPlugin,\n PgOrderAllColumnsPlugin,\n PgOrderComputedColumnsPlugin,\n PgOrderByPrimaryKeyPlugin,\n PgRowNode,\n PgNodeAliasPostGraphile,\n PgNodeAliasPostGraphile as PgNodeAliasPostGraphQL,\n PgRecordReturnTypesPlugin,\n PgRecordFunctionConnectionPlugin,\n PgScalarFunctionConnectionPlugin,\n PageInfoStartEndCursor,\n PgConnectionTotalCount,\n PgMutationCreatePlugin,\n PgMutationUpdateDeletePlugin,\n PgMutationProceduresPlugin,\n PgMutationPayloadEdgePlugin,\n};\n\nexport { upperFirst, camelCase, constantCase } from \"graphile-build\";\n"],"file":"index.js"}
@@ -240,8 +240,9 @@ var PgBasicsPlugin = function PgBasicsPlugin(builder, {
240
240
  pgIgnoreIndexes = true,
241
241
  // TODO:v5: change this to false
242
242
  pgHideIndexWarnings = false,
243
- pgLegacyJsonUuid = false // TODO:v5: remove this
244
-
243
+ pgLegacyJsonUuid = false,
244
+ // TODO:v5: remove this
245
+ pgAugmentIntrospectionResults
245
246
  }) {
246
247
  let pgOmit = _omit.default;
247
248
 
@@ -272,7 +273,8 @@ var PgBasicsPlugin = function PgBasicsPlugin(builder, {
272
273
  describePgEntity,
273
274
  pgField: _pgField.default,
274
275
  sqlCommentByAddingTags,
275
- pgPrepareAndRun: _pgPrepareAndRun.default
276
+ pgPrepareAndRun: _pgPrepareAndRun.default,
277
+ pgAugmentIntrospectionResults
276
278
  });
277
279
  }, ["PgBasics"]);
278
280
  builder.hook("inflection", (inflection, build) => {
@@ -321,6 +321,7 @@ export default (function PgBasicsPlugin(
321
321
  pgIgnoreIndexes = true, // TODO:v5: change this to false
322
322
  pgHideIndexWarnings = false,
323
323
  pgLegacyJsonUuid = false, // TODO:v5: remove this
324
+ pgAugmentIntrospectionResults,
324
325
  }
325
326
  ) {
326
327
  let pgOmit = baseOmit;
@@ -354,6 +355,7 @@ export default (function PgBasicsPlugin(
354
355
  pgField,
355
356
  sqlCommentByAddingTags,
356
357
  pgPrepareAndRun,
358
+ pgAugmentIntrospectionResults,
357
359
  });
358
360
  },
359
361
  ["PgBasics"]