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.
- package/README.md +2 -1
- package/node8plus/QueryBuilder.d.ts +10 -2
- package/node8plus/QueryBuilder.js +80 -1
- package/node8plus/QueryBuilder.js.flow +75 -2
- package/node8plus/QueryBuilder.js.map +1 -1
- package/node8plus/index.d.ts +8 -0
- package/node8plus/index.js +7 -1
- package/node8plus/index.js.flow +6 -1
- package/node8plus/index.js.map +1 -1
- package/node8plus/plugins/PgBasicsPlugin.js +5 -3
- package/node8plus/plugins/PgBasicsPlugin.js.flow +2 -0
- package/node8plus/plugins/PgBasicsPlugin.js.map +1 -1
- package/node8plus/plugins/PgConnectionTotalCount.js +10 -4
- package/node8plus/plugins/PgConnectionTotalCount.js.flow +13 -9
- package/node8plus/plugins/PgConnectionTotalCount.js.map +1 -1
- package/node8plus/plugins/PgIntrospectionPlugin.d.ts +48 -11
- package/node8plus/plugins/PgIntrospectionPlugin.js +53 -23
- package/node8plus/plugins/PgIntrospectionPlugin.js.flow +81 -25
- package/node8plus/plugins/PgIntrospectionPlugin.js.map +1 -1
- package/node8plus/plugins/PgJWTPlugin.js +6 -1
- package/node8plus/plugins/PgJWTPlugin.js.flow +7 -1
- package/node8plus/plugins/PgJWTPlugin.js.map +1 -1
- package/node8plus/plugins/PgMutationUpdateDeletePlugin.js +2 -1
- package/node8plus/plugins/PgMutationUpdateDeletePlugin.js.flow +3 -1
- package/node8plus/plugins/PgMutationUpdateDeletePlugin.js.map +1 -1
- package/node8plus/plugins/PgRecordFunctionConnectionPlugin.js +1 -0
- package/node8plus/plugins/PgRecordFunctionConnectionPlugin.js.flow +1 -0
- package/node8plus/plugins/PgRecordFunctionConnectionPlugin.js.map +1 -1
- package/node8plus/plugins/PgScalarFunctionConnectionPlugin.js +1 -0
- package/node8plus/plugins/PgScalarFunctionConnectionPlugin.js.flow +1 -0
- package/node8plus/plugins/PgScalarFunctionConnectionPlugin.js.map +1 -1
- package/node8plus/plugins/PgTypesPlugin.js +9 -2
- package/node8plus/plugins/PgTypesPlugin.js.flow +19 -0
- package/node8plus/plugins/PgTypesPlugin.js.map +1 -1
- package/node8plus/plugins/introspectionQuery.js +1 -0
- package/node8plus/plugins/introspectionQuery.js.flow +1 -0
- package/node8plus/plugins/introspectionQuery.js.map +1 -1
- package/node8plus/queryFromResolveDataFactory.js +8 -1
- package/node8plus/queryFromResolveDataFactory.js.flow +13 -1
- package/node8plus/queryFromResolveDataFactory.js.map +1 -1
- package/package.json +7 -12
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/plugins/PgBasicsPlugin.js"],"names":["defaultPgColumnFilter","_attr","_build","_context","identity","_","preventEmptyResult","obj","Object","keys","reduce","memo","key","fn","args","result","apply","length","stringifiedArgs","require","inspect","Error","String","omitWithRBACChecks","omit","entity","permission","ORDINARY_TABLE","VIEW","MATERIALIZED_VIEW","isTableLike","kind","classKind","EXECUTE","aclExecutable","tableEntity","READ","ALL","MANY","aclSelectable","attributes","some","attr","CREATE","aclInsertable","UPDATE","aclUpdatable","DELETE","aclDeletable","class","attributeEntity","klass","FILTER","ORDER","omitUnindexed","hideIndexWarnings","isIndexed","type","shouldOutputWarning","_omitUnindexedReadWarningGiven","console","log","describePgEntity","namespaceName","name","keyAttributes","map","a","join","includeAlias","getAlias","tags","value","endsWith","chalk","bold","t","c","f","p","r","v","m","e","error","id","sqlCommentByAddingTags","tagsToAdd","escape","str","replace","chr","description","tagsSql","tag","tagValue","valueArray","Array","isArray","highlightOrNot","green","forEach","push","commentValue","sqlThing","identifier","PgBasicsPlugin","builder","pgStrictFunctions","pgColumnFilter","pgIgnoreRBAC","pgIgnoreIndexes","pgHideIndexWarnings","pgLegacyJsonUuid","pgOmit","baseOmit","hook","build","versions","version","liveCoordinator","registerProvider","PgLiveProvider","extend","graphileBuildPgVersion","pgSql","sql","pgQueryFromResolveData","pgAddStartEndCursor","addStartEndCursor","pgMakeProcField","makeProcField","pgParseIdentifier","parseIdentifier","pgViaTemporaryTable","viaTemporaryTable","pgField","pgPrepareAndRun","inflection","oldBuiltin","builtin","call","conditionType","typeName","upperCamelCase","inputType","rangeBoundType","rangeType","patchType","baseInputType","patchField","itemName","camelCase","orderByType","pluralize","edge","connection","_functionName","proc","coerceToGraphQLName","_typeName","_tableName","table","_singularizedTableName","singularize","_columnName","_options","enumType","argument","index","orderByEnum","columnName","ascending","constantCase","orderByColumnEnum","skipRowId","orderByComputedColumnEnum","pseudoColumnName","computedColumn","domainType","enumName","inValue","$","tableNode","tableFieldName","allRows","allRowsSimple","functionMutationName","functionMutationResultFieldName","gqlType","plural","outputArgNames","resultFieldName","returnTypeId","functionQueryName","functionQueryNameList","functionPayloadType","functionInputType","functionOutputFieldName","outputArgName","tableType","column","_table","fieldName","computedColumnList","singleRelationByKeys","detailedKeys","_foreignTable","constraint","singleRelationByKeysBackwards","foreignSingleFieldName","foreignFieldName","manyRelationByKeys","manyRelationByKeysSimple","foreignSimpleFieldName","rowByUniqueKeys","updateByKeys","updateFieldName","deleteByKeys","deleteFieldName","updateByKeysInputType","deleteByKeysInputType","updateNode","deleteNode","deletedNodeId","updateNodeInputType","deleteNodeInputType","edgeField","recordFunctionReturnType","resultTypeName","recordFunctionConnection","recordFunctionEdge","scalarFunctionConnection","scalarFunctionEdge","createField","createInputType","createPayloadType","updatePayloadType","deletePayloadType"],"mappings":"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","sourcesContent":["// @flow\nimport * as sql from \"pg-sql2\";\nimport type { Plugin } from \"graphile-build\";\nimport { version } from \"../../package.json\";\nimport type {\n PgProc,\n PgType,\n PgClass,\n PgAttribute,\n PgConstraint,\n PgEntity,\n} from \"./PgIntrospectionPlugin\";\nimport pgField from \"./pgField\";\n\nimport queryFromResolveDataFactory from \"../queryFromResolveDataFactory\";\nimport addStartEndCursor from \"./addStartEndCursor\";\nimport baseOmit, {\n CREATE,\n READ,\n UPDATE,\n DELETE,\n ALL,\n MANY,\n ORDER,\n FILTER,\n EXECUTE,\n} from \"../omit\";\nimport makeProcField from \"./makeProcField\";\nimport parseIdentifier from \"../parseIdentifier\";\nimport viaTemporaryTable from \"./viaTemporaryTable\";\nimport chalk from \"chalk\";\nimport pickBy from \"lodash/pickBy\";\nimport PgLiveProvider from \"../PgLiveProvider\";\nimport pgPrepareAndRun from \"../pgPrepareAndRun\";\n\nconst defaultPgColumnFilter = (_attr, _build, _context) => true;\ntype Keys = Array<{\n column: string,\n table: string,\n schema: ?string,\n}>;\n\nconst identity = _ => _;\n\nexport function preventEmptyResult<\n // eslint-disable-next-line flowtype/no-weak-types\n O: { [key: string]: (...args: Array<any>) => string }\n>(obj: O): $ObjMap<O, <V>(V) => V> {\n return Object.keys(obj).reduce((memo, key) => {\n const fn = obj[key];\n memo[key] = function(...args) {\n const result = fn.apply(this, args);\n if (typeof result !== \"string\" || result.length === 0) {\n const stringifiedArgs = require(\"util\").inspect(args);\n throw new Error(\n `Inflector for '${key}' returned '${String(\n result\n )}'; expected non-empty string\\n` +\n `See: https://github.com/graphile/graphile-build/blob/master/packages/graphile-build-pg/src/plugins/PgBasicsPlugin.js\\n` +\n `Arguments passed to ${key}:\\n${stringifiedArgs}`\n );\n }\n return result;\n };\n return memo;\n }, {});\n}\n\nconst omitWithRBACChecks = omit => (\n entity: PgProc | PgClass | PgAttribute | PgConstraint,\n permission: string\n) => {\n const ORDINARY_TABLE = \"r\";\n const VIEW = \"v\";\n const MATERIALIZED_VIEW = \"m\";\n const isTableLike = entity =>\n entity &&\n entity.kind === \"class\" &&\n (entity.classKind === ORDINARY_TABLE ||\n entity.classKind === VIEW ||\n entity.classKind === MATERIALIZED_VIEW);\n if (entity.kind === \"procedure\") {\n if (permission === EXECUTE && !entity.aclExecutable) {\n return true;\n }\n } else if (entity.kind === \"class\" && isTableLike(entity)) {\n const tableEntity: PgClass = entity;\n if (\n (permission === READ || permission === ALL || permission === MANY) &&\n (!tableEntity.aclSelectable &&\n !tableEntity.attributes.some(attr => attr.aclSelectable))\n ) {\n return true;\n } else if (\n permission === CREATE &&\n (!tableEntity.aclInsertable &&\n !tableEntity.attributes.some(attr => attr.aclInsertable))\n ) {\n return true;\n } else if (\n permission === UPDATE &&\n (!tableEntity.aclUpdatable &&\n !tableEntity.attributes.some(attr => attr.aclUpdatable))\n ) {\n return true;\n } else if (permission === DELETE && !tableEntity.aclDeletable) {\n return true;\n }\n } else if (entity.kind === \"attribute\" && isTableLike(entity.class)) {\n const attributeEntity: PgAttribute = entity;\n\n const klass = attributeEntity.class;\n // Have we got *any* permissions on the table?\n if (\n klass.aclSelectable ||\n klass.attributes.some(attr => attr.aclSelectable)\n ) {\n // Yes; this is a regular table; omit if RBAC permissions tell us to.\n if (\n (permission === READ ||\n permission === FILTER ||\n permission === ORDER) &&\n !attributeEntity.aclSelectable\n ) {\n return true;\n } else if (permission === CREATE && !attributeEntity.aclInsertable) {\n return true;\n } else if (permission === UPDATE && !attributeEntity.aclUpdatable) {\n return true;\n }\n } else {\n // No permissions on the table at all, so normal connections will skip\n // over it. Thus we must be being exposed via a security definer function\n // or similar, so we should expose all fields except those that are\n // explicitly @omit-ed.\n }\n }\n return omit(entity, permission);\n};\n\nconst omitUnindexed = (omit, hideIndexWarnings) => (\n entity: PgProc | PgClass | PgAttribute | PgConstraint,\n permission: string\n) => {\n if (\n entity.kind === \"attribute\" &&\n !entity.isIndexed &&\n (permission === \"filter\" || permission === \"order\")\n ) {\n return true;\n }\n if (\n entity.kind === \"constraint\" &&\n entity.type === \"f\" &&\n !entity.isIndexed &&\n permission === \"read\"\n ) {\n const klass = entity.class;\n if (klass) {\n const shouldOutputWarning =\n // $FlowFixMe\n !entity._omitUnindexedReadWarningGiven && !hideIndexWarnings;\n if (shouldOutputWarning) {\n // $FlowFixMe\n entity._omitUnindexedReadWarningGiven = true;\n // eslint-disable-next-line no-console\n console.log(\n \"%s\",\n `Disabled 'read' permission for ${describePgEntity(\n entity\n )} because it isn't indexed. For more information see https://graphile.org/postgraphile/best-practices/ To fix, perform\\n\\n CREATE INDEX ON ${`\"${klass.namespaceName}\".\"${klass.name}\"`}(\"${entity.keyAttributes\n .map(a => a.name)\n .join('\", \"')}\");`\n );\n }\n }\n return true;\n }\n return omit(entity, permission);\n};\n\nfunction describePgEntity(entity: PgEntity, includeAlias = true) {\n const getAlias = !includeAlias\n ? () => \"\"\n : () => {\n const tags = pickBy(\n entity.tags,\n (value, key) => key === \"name\" || key.endsWith(\"Name\")\n );\n if (Object.keys(tags).length) {\n return ` (with smart comments: ${chalk.bold(\n Object.keys(tags)\n .map(t => `@${t} ${tags[t]}`)\n .join(\" | \")\n )})`;\n }\n return \"\";\n };\n\n try {\n if (entity.kind === \"constraint\") {\n return `constraint ${chalk.bold(\n `\"${entity.name}\"`\n )} on ${describePgEntity(entity.class, false)}${getAlias()}`;\n } else if (entity.kind === \"class\") {\n // see pg_class.relkind https://www.postgresql.org/docs/10/static/catalog-pg-class.html\n const kind =\n {\n c: \"composite type\",\n f: \"foreign table\",\n p: \"partitioned table\",\n r: \"table\",\n v: \"view\",\n m: \"materialized view\",\n }[entity.classKind] || \"table-like\";\n return `${kind} ${chalk.bold(\n `\"${entity.namespaceName}\".\"${entity.name}\"`\n )}${getAlias()}`;\n } else if (entity.kind === \"procedure\") {\n return `function ${chalk.bold(\n `\"${entity.namespaceName}\".\"${entity.name}\"(...args...)`\n )}${getAlias()}`;\n } else if (entity.kind === \"attribute\") {\n return `column ${chalk.bold(`\"${entity.name}\"`)} on ${describePgEntity(\n entity.class,\n false\n )}${getAlias()}`;\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(\"Error occurred while attempting to debug entity:\", entity);\n // eslint-disable-next-line no-console\n console.error(e);\n }\n return `entity of kind '${entity.kind}' with ${\n typeof entity.id === \"string\" ? `oid '${entity.id}'` : \"\"\n }`;\n}\n\nfunction sqlCommentByAddingTags(entity, tagsToAdd) {\n // NOTE: this function is NOT intended to be SQL safe; it's for\n // displaying in error messages. Nonetheless if you find issues with\n // SQL compatibility, please send a PR or issue.\n\n // Ref: https://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-BACKSLASH-TABLE\n const escape = str =>\n str.replace(\n /['\\\\\\b\\f\\n\\r\\t]/g,\n chr =>\n ({\n \"\\b\": \"\\\\b\",\n \"\\f\": \"\\\\f\",\n \"\\n\": \"\\\\n\",\n \"\\r\": \"\\\\r\",\n \"\\t\": \"\\\\t\",\n }[chr] || \"\\\\\" + chr)\n );\n\n // tagsToAdd is here twice to ensure that the keys in tagsToAdd come first, but that they also \"win\" any conflicts.\n const tags = {\n ...tagsToAdd,\n ...entity.tags,\n ...tagsToAdd,\n };\n\n const description = entity.description;\n const tagsSql = Object.keys(tags)\n .reduce((memo, tag) => {\n const tagValue = tags[tag];\n const valueArray = Array.isArray(tagValue) ? tagValue : [tagValue];\n const highlightOrNot = tag in tagsToAdd ? chalk.bold.green : identity;\n valueArray.forEach(value => {\n memo.push(\n highlightOrNot(\n `@${escape(escape(tag))}${\n value === true ? \"\" : \" \" + escape(escape(value))\n }`\n )\n );\n });\n return memo;\n }, [])\n .join(\"\\\\n\");\n const commentValue = `E'${tagsSql}${\n description ? \"\\\\n\" + escape(description) : \"\"\n }'`;\n let sqlThing;\n if (entity.kind === \"class\") {\n const identifier = `\"${entity.namespaceName}\".\"${entity.name}\"`;\n if (entity.classKind === \"r\") {\n sqlThing = `TABLE ${identifier}`;\n } else if (entity.classKind === \"v\") {\n sqlThing = `VIEW ${identifier}`;\n } else if (entity.classKind === \"m\") {\n sqlThing = `MATERIALIZED VIEW ${identifier}`;\n } else if (entity.classKind === \"c\") {\n sqlThing = `TYPE ${identifier}`;\n } else {\n sqlThing = `PLEASE_SEND_A_PULL_REQUEST_TO_FIX_THIS ${identifier}`;\n }\n } else if (entity.kind === \"attribute\") {\n sqlThing = `COLUMN \"${entity.class.namespaceName}\".\"${entity.class.name}\".\"${entity.name}\"`;\n } else if (entity.kind === \"procedure\") {\n sqlThing = `FUNCTION \"${entity.namespaceName}\".\"${entity.name}\"(...arg types go here...)`;\n } else if (entity.kind === \"constraint\") {\n // TODO: TEST!\n sqlThing = `CONSTRAINT \"${entity.name}\" ON \"${entity.class.namespaceName}\".\"${entity.class.name}\"`;\n } else {\n sqlThing = `UNKNOWN_ENTITY_PLEASE_SEND_A_PULL_REQUEST`;\n }\n\n return `COMMENT ON ${sqlThing} IS ${commentValue};`;\n}\n\nexport default (function PgBasicsPlugin(\n builder,\n {\n pgStrictFunctions = false,\n pgColumnFilter = defaultPgColumnFilter,\n pgIgnoreRBAC = false,\n pgIgnoreIndexes = true, // TODO:v5: change this to false\n pgHideIndexWarnings = false,\n pgLegacyJsonUuid = false, // TODO:v5: remove this\n }\n) {\n let pgOmit = baseOmit;\n if (!pgIgnoreRBAC) {\n pgOmit = omitWithRBACChecks(pgOmit);\n }\n if (!pgIgnoreIndexes) {\n pgOmit = omitUnindexed(pgOmit, pgHideIndexWarnings);\n }\n builder.hook(\n \"build\",\n build => {\n build.versions[\"graphile-build-pg\"] = version;\n build.liveCoordinator.registerProvider(new PgLiveProvider());\n return build.extend(build, {\n graphileBuildPgVersion: version,\n pgSql: sql,\n pgStrictFunctions,\n pgColumnFilter,\n\n // TODO:v5: remove this workaround\n // BEWARE: this may be overridden in PgIntrospectionPlugin for PG < 9.5\n pgQueryFromResolveData: queryFromResolveDataFactory(),\n\n pgAddStartEndCursor: addStartEndCursor,\n pgOmit,\n pgMakeProcField: makeProcField,\n pgParseIdentifier: parseIdentifier,\n pgViaTemporaryTable: viaTemporaryTable,\n describePgEntity,\n pgField,\n sqlCommentByAddingTags,\n pgPrepareAndRun,\n });\n },\n [\"PgBasics\"]\n );\n\n builder.hook(\n \"inflection\",\n (inflection, build) => {\n // TODO:v5: move this to postgraphile-core\n const oldBuiltin = inflection.builtin;\n inflection.builtin = function(name) {\n if (pgLegacyJsonUuid && name === \"JSON\") return \"Json\";\n if (pgLegacyJsonUuid && name === \"UUID\") return \"Uuid\";\n return oldBuiltin.call(this, name);\n };\n\n return build.extend(\n inflection,\n preventEmptyResult({\n // These helpers are passed GraphQL type names as strings\n conditionType(typeName: string) {\n return this.upperCamelCase(`${typeName}-condition`);\n },\n inputType(typeName: string) {\n return this.upperCamelCase(`${typeName}-input`);\n },\n rangeBoundType(typeName: string) {\n return this.upperCamelCase(`${typeName}-range-bound`);\n },\n rangeType(typeName: string) {\n return this.upperCamelCase(`${typeName}-range`);\n },\n patchType(typeName: string) {\n return this.upperCamelCase(`${typeName}-patch`);\n },\n baseInputType(typeName: string) {\n return this.upperCamelCase(`${typeName}-base-input`);\n },\n patchField(itemName: string) {\n return this.camelCase(`${itemName}-patch`);\n },\n orderByType(typeName: string) {\n return this.upperCamelCase(`${this.pluralize(typeName)}-order-by`);\n },\n edge(typeName: string) {\n return this.upperCamelCase(`${this.pluralize(typeName)}-edge`);\n },\n connection(typeName: string) {\n return this.upperCamelCase(\n `${this.pluralize(typeName)}-connection`\n );\n },\n\n // These helpers handle overrides via smart comments. They should only\n // be used in other inflectors, hence the underscore prefix.\n //\n // IMPORTANT: do NOT do case transforms here, because detail can be\n // lost, e.g.\n // `constantCase(camelCase('foo_1')) !== constantCase('foo_1')`\n _functionName(proc: PgProc) {\n return this.coerceToGraphQLName(proc.tags.name || proc.name);\n },\n _typeName(type: PgType) {\n // 'type' introspection result\n return this.coerceToGraphQLName(type.tags.name || type.name);\n },\n _tableName(table: PgClass) {\n return this.coerceToGraphQLName(\n table.tags.name || table.type.tags.name || table.name\n );\n },\n _singularizedTableName(table: PgClass): string {\n return this.singularize(this._tableName(table)).replace(\n /.(?:(?:[_-]i|I)nput|(?:[_-]p|P)atch)$/,\n \"$&_record\"\n );\n },\n _columnName(attr: PgAttribute, _options?: { skipRowId?: boolean }) {\n return this.coerceToGraphQLName(attr.tags.name || attr.name);\n },\n\n // From here down, functions are passed database introspection results\n enumType(type: PgType) {\n return this.upperCamelCase(this._typeName(type));\n },\n argument(name: ?string, index: number) {\n return this.coerceToGraphQLName(\n this.camelCase(name || `arg${index}`)\n );\n },\n orderByEnum(columnName, ascending) {\n return this.constantCase(\n `${columnName}_${ascending ? \"asc\" : \"desc\"}`\n );\n },\n orderByColumnEnum(attr: PgAttribute, ascending: boolean) {\n const columnName = this._columnName(attr, {\n skipRowId: true, // Because we messed up 😔\n });\n return this.orderByEnum(columnName, ascending);\n },\n orderByComputedColumnEnum(\n pseudoColumnName: string,\n proc: PgProc,\n table: PgClass,\n ascending: boolean\n ) {\n const columnName = this.computedColumn(\n pseudoColumnName,\n proc,\n table\n );\n return this.orderByEnum(columnName, ascending);\n },\n domainType(type: PgType) {\n return this.upperCamelCase(this._typeName(type));\n },\n enumName(inValue: string) {\n let value = inValue;\n\n if (value === \"\") {\n return \"_EMPTY_\";\n }\n\n // Some enums use asterisks to signify wildcards - this might be for\n // the whole item, or prefixes/suffixes, or even in the middle. This\n // is provided on a best efforts basis, if it doesn't suit your\n // purposes then please pass a custom inflector as mentioned below.\n value = value\n .replace(/\\*/g, \"_ASTERISK_\")\n .replace(/^(_?)_+ASTERISK/, \"$1ASTERISK\")\n .replace(/ASTERISK_(_?)_*$/, \"ASTERISK$1\");\n\n // This is a best efforts replacement for common symbols that you\n // might find in enums. Generally we only support enums that are\n // alphanumeric, if these replacements don't work for you, you should\n // pass a custom inflector that replaces this `enumName` method\n // with one of your own chosing.\n value =\n {\n // SQL comparison operators\n \">\": \"GREATER_THAN\",\n \">=\": \"GREATER_THAN_OR_EQUAL\",\n \"=\": \"EQUAL\",\n \"!=\": \"NOT_EQUAL\",\n \"<>\": \"DIFFERENT\",\n \"<=\": \"LESS_THAN_OR_EQUAL\",\n \"<\": \"LESS_THAN\",\n\n // PostgreSQL LIKE shortcuts\n \"~~\": \"LIKE\",\n \"~~*\": \"ILIKE\",\n \"!~~\": \"NOT_LIKE\",\n \"!~~*\": \"NOT_ILIKE\",\n\n // '~' doesn't necessarily represent regexps, but the three\n // operators following it likely do, so we'll use the word TILDE\n // in all for consistency.\n \"~\": \"TILDE\",\n \"~*\": \"TILDE_ASTERISK\",\n \"!~\": \"NOT_TILDE\",\n \"!~*\": \"NOT_TILDE_ASTERISK\",\n\n // A number of other symbols where we're not sure of their\n // meaning. We give them common generic names so that they're\n // suitable for multiple purposes, e.g. favouring 'PLUS' over\n // 'ADDITION' and 'DOT' over 'FULL_STOP'\n \"%\": \"PERCENT\",\n \"+\": \"PLUS\",\n \"-\": \"MINUS\",\n \"/\": \"SLASH\",\n \"\\\\\": \"BACKSLASH\",\n _: \"UNDERSCORE\",\n \"#\": \"POUND\",\n \"£\": \"STERLING\",\n $: \"DOLLAR\",\n \"&\": \"AMPERSAND\",\n \"@\": \"AT\",\n \"'\": \"APOSTROPHE\",\n '\"': \"QUOTE\",\n \"`\": \"BACKTICK\",\n \":\": \"COLON\",\n \";\": \"SEMICOLON\",\n \"!\": \"EXCLAMATION_POINT\",\n \"?\": \"QUESTION_MARK\",\n \",\": \"COMMA\",\n \".\": \"DOT\",\n \"^\": \"CARET\",\n \"|\": \"BAR\",\n \"[\": \"OPEN_BRACKET\",\n \"]\": \"CLOSE_BRACKET\",\n \"(\": \"OPEN_PARENTHESIS\",\n \")\": \"CLOSE_PARENTHESIS\",\n \"{\": \"OPEN_BRACE\",\n \"}\": \"CLOSE_BRACE\",\n }[value] || value;\n return value;\n },\n\n tableNode(table: PgClass) {\n return this.camelCase(this._singularizedTableName(table));\n },\n tableFieldName(table: PgClass) {\n return this.camelCase(this._singularizedTableName(table));\n },\n allRows(table: PgClass) {\n return this.camelCase(\n `all-${this.pluralize(this._singularizedTableName(table))}`\n );\n },\n allRowsSimple(table: PgClass) {\n return this.camelCase(\n `all-${this.pluralize(this._singularizedTableName(table))}-list`\n );\n },\n functionMutationName(proc: PgProc) {\n return this.camelCase(this._functionName(proc));\n },\n functionMutationResultFieldName(\n proc: PgProc,\n gqlType,\n plural: boolean = false,\n outputArgNames: Array<string> = []\n ) {\n if (proc.tags.resultFieldName) {\n return proc.tags.resultFieldName;\n }\n let name;\n if (outputArgNames.length === 1 && outputArgNames[0] !== \"\") {\n name = this.camelCase(outputArgNames[0]);\n } else if (gqlType.name === \"Int\") {\n name = \"integer\";\n } else if (gqlType.name === \"Float\") {\n name = \"float\";\n } else if (gqlType.name === \"Boolean\") {\n name = \"boolean\";\n } else if (gqlType.name === \"String\") {\n name = \"string\";\n } else if (proc.returnTypeId === \"2249\") {\n // returns a record type\n name = \"result\";\n } else {\n name = this.camelCase(gqlType.name);\n }\n return plural ? this.pluralize(name) : name;\n },\n functionQueryName(proc: PgProc) {\n return this.camelCase(this._functionName(proc));\n },\n functionQueryNameList(proc: PgProc) {\n return this.camelCase(`${this._functionName(proc)}-list`);\n },\n functionPayloadType(proc: PgProc) {\n return this.upperCamelCase(`${this._functionName(proc)}-payload`);\n },\n functionInputType(proc: PgProc) {\n return this.upperCamelCase(`${this._functionName(proc)}-input`);\n },\n functionOutputFieldName(\n proc: PgProc,\n outputArgName: string,\n index: number\n ) {\n return this.argument(outputArgName, index);\n },\n tableType(table: PgClass) {\n return this.upperCamelCase(this._singularizedTableName(table));\n },\n column(attr: PgAttribute) {\n return this.camelCase(this._columnName(attr));\n },\n computedColumn(\n pseudoColumnName: string,\n proc: PgProc,\n _table: PgClass\n ) {\n return proc.tags.fieldName || this.camelCase(pseudoColumnName);\n },\n computedColumnList(\n pseudoColumnName: string,\n proc: PgProc,\n _table: PgClass\n ) {\n return proc.tags.fieldName\n ? proc.tags.fieldName + \"List\"\n : this.camelCase(`${pseudoColumnName}-list`);\n },\n singleRelationByKeys(\n detailedKeys: Keys,\n table: PgClass,\n _foreignTable: PgClass,\n constraint: PgConstraint\n ) {\n if (constraint.tags.fieldName) {\n return constraint.tags.fieldName;\n }\n return this.camelCase(\n `${this._singularizedTableName(table)}-by-${detailedKeys\n .map(key => this.column(key))\n .join(\"-and-\")}`\n );\n },\n singleRelationByKeysBackwards(\n detailedKeys: Keys,\n table: PgClass,\n _foreignTable: PgClass,\n constraint: PgConstraint\n ) {\n if (constraint.tags.foreignSingleFieldName) {\n return constraint.tags.foreignSingleFieldName;\n }\n if (constraint.tags.foreignFieldName) {\n return constraint.tags.foreignFieldName;\n }\n return this.singleRelationByKeys(\n detailedKeys,\n table,\n _foreignTable,\n constraint\n );\n },\n manyRelationByKeys(\n detailedKeys: Keys,\n table: PgClass,\n _foreignTable: PgClass,\n constraint: PgConstraint\n ) {\n if (constraint.tags.foreignFieldName) {\n return constraint.tags.foreignFieldName;\n }\n return this.camelCase(\n `${this.pluralize(\n this._singularizedTableName(table)\n )}-by-${detailedKeys.map(key => this.column(key)).join(\"-and-\")}`\n );\n },\n manyRelationByKeysSimple(\n detailedKeys: Keys,\n table: PgClass,\n _foreignTable: PgClass,\n constraint: PgConstraint\n ) {\n if (constraint.tags.foreignSimpleFieldName) {\n return constraint.tags.foreignSimpleFieldName;\n }\n if (constraint.tags.foreignFieldName) {\n return constraint.tags.foreignFieldName;\n }\n return this.camelCase(\n `${this.pluralize(\n this._singularizedTableName(table)\n )}-by-${detailedKeys\n .map(key => this.column(key))\n .join(\"-and-\")}-list`\n );\n },\n rowByUniqueKeys(\n detailedKeys: Keys,\n table: PgClass,\n constraint: PgConstraint\n ) {\n if (constraint.tags.fieldName) {\n return constraint.tags.fieldName;\n }\n return this.camelCase(\n `${this._singularizedTableName(table)}-by-${detailedKeys\n .map(key => this.column(key))\n .join(\"-and-\")}`\n );\n },\n updateByKeys(\n detailedKeys: Keys,\n table: PgClass,\n constraint: PgConstraint\n ) {\n if (constraint.tags.updateFieldName) {\n return constraint.tags.updateFieldName;\n }\n return this.camelCase(\n `update-${this._singularizedTableName(\n table\n )}-by-${detailedKeys.map(key => this.column(key)).join(\"-and-\")}`\n );\n },\n deleteByKeys(\n detailedKeys: Keys,\n table: PgClass,\n constraint: PgConstraint\n ) {\n if (constraint.tags.deleteFieldName) {\n return constraint.tags.deleteFieldName;\n }\n return this.camelCase(\n `delete-${this._singularizedTableName(\n table\n )}-by-${detailedKeys.map(key => this.column(key)).join(\"-and-\")}`\n );\n },\n updateByKeysInputType(\n detailedKeys: Keys,\n table: PgClass,\n constraint: PgConstraint\n ) {\n if (constraint.tags.updateFieldName) {\n return this.upperCamelCase(\n `${constraint.tags.updateFieldName}-input`\n );\n }\n return this.upperCamelCase(\n `update-${this._singularizedTableName(\n table\n )}-by-${detailedKeys\n .map(key => this.column(key))\n .join(\"-and-\")}-input`\n );\n },\n deleteByKeysInputType(\n detailedKeys: Keys,\n table: PgClass,\n constraint: PgConstraint\n ) {\n if (constraint.tags.deleteFieldName) {\n return this.upperCamelCase(\n `${constraint.tags.deleteFieldName}-input`\n );\n }\n return this.upperCamelCase(\n `delete-${this._singularizedTableName(\n table\n )}-by-${detailedKeys\n .map(key => this.column(key))\n .join(\"-and-\")}-input`\n );\n },\n updateNode(table: PgClass) {\n return this.camelCase(\n `update-${this._singularizedTableName(table)}`\n );\n },\n deleteNode(table: PgClass) {\n return this.camelCase(\n `delete-${this._singularizedTableName(table)}`\n );\n },\n deletedNodeId(table: PgClass) {\n return this.camelCase(`deleted-${this.singularize(table.name)}-id`);\n },\n updateNodeInputType(table: PgClass) {\n return this.upperCamelCase(\n `update-${this._singularizedTableName(table)}-input`\n );\n },\n deleteNodeInputType(table: PgClass) {\n return this.upperCamelCase(\n `delete-${this._singularizedTableName(table)}-input`\n );\n },\n edgeField(table: PgClass) {\n return this.camelCase(`${this._singularizedTableName(table)}-edge`);\n },\n recordFunctionReturnType(proc: PgProc) {\n return (\n proc.tags.resultTypeName ||\n this.upperCamelCase(`${this._functionName(proc)}-record`)\n );\n },\n recordFunctionConnection(proc: PgProc) {\n return this.upperCamelCase(\n `${this._functionName(proc)}-connection`\n );\n },\n recordFunctionEdge(proc: PgProc) {\n return this.upperCamelCase(\n `${this.singularize(this._functionName(proc))}-edge`\n );\n },\n scalarFunctionConnection(proc: PgProc) {\n return this.upperCamelCase(\n `${this._functionName(proc)}-connection`\n );\n },\n scalarFunctionEdge(proc: PgProc) {\n return this.upperCamelCase(\n `${this.singularize(this._functionName(proc))}-edge`\n );\n },\n createField(table: PgClass) {\n return this.camelCase(\n `create-${this._singularizedTableName(table)}`\n );\n },\n createInputType(table: PgClass) {\n return this.upperCamelCase(\n `create-${this._singularizedTableName(table)}-input`\n );\n },\n createPayloadType(table: PgClass) {\n return this.upperCamelCase(\n `create-${this._singularizedTableName(table)}-payload`\n );\n },\n updatePayloadType(table: PgClass) {\n return this.upperCamelCase(\n `update-${this._singularizedTableName(table)}-payload`\n );\n },\n deletePayloadType(table: PgClass) {\n return this.upperCamelCase(\n `delete-${this._singularizedTableName(table)}-payload`\n );\n },\n }),\n \"Default inflectors from PgBasicsPlugin. You can override these with `makeAddInflectorsPlugin(..., true)`.\"\n );\n },\n [\"PgBasics\"]\n );\n}: Plugin);\n"],"file":"PgBasicsPlugin.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/plugins/PgBasicsPlugin.js"],"names":["defaultPgColumnFilter","_attr","_build","_context","identity","_","preventEmptyResult","obj","Object","keys","reduce","memo","key","fn","args","result","apply","length","stringifiedArgs","require","inspect","Error","String","omitWithRBACChecks","omit","entity","permission","ORDINARY_TABLE","VIEW","MATERIALIZED_VIEW","isTableLike","kind","classKind","EXECUTE","aclExecutable","tableEntity","READ","ALL","MANY","aclSelectable","attributes","some","attr","CREATE","aclInsertable","UPDATE","aclUpdatable","DELETE","aclDeletable","class","attributeEntity","klass","FILTER","ORDER","omitUnindexed","hideIndexWarnings","isIndexed","type","shouldOutputWarning","_omitUnindexedReadWarningGiven","console","log","describePgEntity","namespaceName","name","keyAttributes","map","a","join","includeAlias","getAlias","tags","value","endsWith","chalk","bold","t","c","f","p","r","v","m","e","error","id","sqlCommentByAddingTags","tagsToAdd","escape","str","replace","chr","description","tagsSql","tag","tagValue","valueArray","Array","isArray","highlightOrNot","green","forEach","push","commentValue","sqlThing","identifier","PgBasicsPlugin","builder","pgStrictFunctions","pgColumnFilter","pgIgnoreRBAC","pgIgnoreIndexes","pgHideIndexWarnings","pgLegacyJsonUuid","pgAugmentIntrospectionResults","pgOmit","baseOmit","hook","build","versions","version","liveCoordinator","registerProvider","PgLiveProvider","extend","graphileBuildPgVersion","pgSql","sql","pgQueryFromResolveData","pgAddStartEndCursor","addStartEndCursor","pgMakeProcField","makeProcField","pgParseIdentifier","parseIdentifier","pgViaTemporaryTable","viaTemporaryTable","pgField","pgPrepareAndRun","inflection","oldBuiltin","builtin","call","conditionType","typeName","upperCamelCase","inputType","rangeBoundType","rangeType","patchType","baseInputType","patchField","itemName","camelCase","orderByType","pluralize","edge","connection","_functionName","proc","coerceToGraphQLName","_typeName","_tableName","table","_singularizedTableName","singularize","_columnName","_options","enumType","argument","index","orderByEnum","columnName","ascending","constantCase","orderByColumnEnum","skipRowId","orderByComputedColumnEnum","pseudoColumnName","computedColumn","domainType","enumName","inValue","$","tableNode","tableFieldName","allRows","allRowsSimple","functionMutationName","functionMutationResultFieldName","gqlType","plural","outputArgNames","resultFieldName","returnTypeId","functionQueryName","functionQueryNameList","functionPayloadType","functionInputType","functionOutputFieldName","outputArgName","tableType","column","_table","fieldName","computedColumnList","singleRelationByKeys","detailedKeys","_foreignTable","constraint","singleRelationByKeysBackwards","foreignSingleFieldName","foreignFieldName","manyRelationByKeys","manyRelationByKeysSimple","foreignSimpleFieldName","rowByUniqueKeys","updateByKeys","updateFieldName","deleteByKeys","deleteFieldName","updateByKeysInputType","deleteByKeysInputType","updateNode","deleteNode","deletedNodeId","updateNodeInputType","deleteNodeInputType","edgeField","recordFunctionReturnType","resultTypeName","recordFunctionConnection","recordFunctionEdge","scalarFunctionConnection","scalarFunctionEdge","createField","createInputType","createPayloadType","updatePayloadType","deletePayloadType"],"mappings":"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","sourcesContent":["// @flow\nimport * as sql from \"pg-sql2\";\nimport type { Plugin } from \"graphile-build\";\nimport { version } from \"../../package.json\";\nimport type {\n PgProc,\n PgType,\n PgClass,\n PgAttribute,\n PgConstraint,\n PgEntity,\n} from \"./PgIntrospectionPlugin\";\nimport pgField from \"./pgField\";\n\nimport queryFromResolveDataFactory from \"../queryFromResolveDataFactory\";\nimport addStartEndCursor from \"./addStartEndCursor\";\nimport baseOmit, {\n CREATE,\n READ,\n UPDATE,\n DELETE,\n ALL,\n MANY,\n ORDER,\n FILTER,\n EXECUTE,\n} from \"../omit\";\nimport makeProcField from \"./makeProcField\";\nimport parseIdentifier from \"../parseIdentifier\";\nimport viaTemporaryTable from \"./viaTemporaryTable\";\nimport chalk from \"chalk\";\nimport pickBy from \"lodash/pickBy\";\nimport PgLiveProvider from \"../PgLiveProvider\";\nimport pgPrepareAndRun from \"../pgPrepareAndRun\";\n\nconst defaultPgColumnFilter = (_attr, _build, _context) => true;\ntype Keys = Array<{\n column: string,\n table: string,\n schema: ?string,\n}>;\n\nconst identity = _ => _;\n\nexport function preventEmptyResult<\n // eslint-disable-next-line flowtype/no-weak-types\n O: { [key: string]: (...args: Array<any>) => string }\n>(obj: O): $ObjMap<O, <V>(V) => V> {\n return Object.keys(obj).reduce((memo, key) => {\n const fn = obj[key];\n memo[key] = function(...args) {\n const result = fn.apply(this, args);\n if (typeof result !== \"string\" || result.length === 0) {\n const stringifiedArgs = require(\"util\").inspect(args);\n throw new Error(\n `Inflector for '${key}' returned '${String(\n result\n )}'; expected non-empty string\\n` +\n `See: https://github.com/graphile/graphile-build/blob/master/packages/graphile-build-pg/src/plugins/PgBasicsPlugin.js\\n` +\n `Arguments passed to ${key}:\\n${stringifiedArgs}`\n );\n }\n return result;\n };\n return memo;\n }, {});\n}\n\nconst omitWithRBACChecks = omit => (\n entity: PgProc | PgClass | PgAttribute | PgConstraint,\n permission: string\n) => {\n const ORDINARY_TABLE = \"r\";\n const VIEW = \"v\";\n const MATERIALIZED_VIEW = \"m\";\n const isTableLike = entity =>\n entity &&\n entity.kind === \"class\" &&\n (entity.classKind === ORDINARY_TABLE ||\n entity.classKind === VIEW ||\n entity.classKind === MATERIALIZED_VIEW);\n if (entity.kind === \"procedure\") {\n if (permission === EXECUTE && !entity.aclExecutable) {\n return true;\n }\n } else if (entity.kind === \"class\" && isTableLike(entity)) {\n const tableEntity: PgClass = entity;\n if (\n (permission === READ || permission === ALL || permission === MANY) &&\n (!tableEntity.aclSelectable &&\n !tableEntity.attributes.some(attr => attr.aclSelectable))\n ) {\n return true;\n } else if (\n permission === CREATE &&\n (!tableEntity.aclInsertable &&\n !tableEntity.attributes.some(attr => attr.aclInsertable))\n ) {\n return true;\n } else if (\n permission === UPDATE &&\n (!tableEntity.aclUpdatable &&\n !tableEntity.attributes.some(attr => attr.aclUpdatable))\n ) {\n return true;\n } else if (permission === DELETE && !tableEntity.aclDeletable) {\n return true;\n }\n } else if (entity.kind === \"attribute\" && isTableLike(entity.class)) {\n const attributeEntity: PgAttribute = entity;\n\n const klass = attributeEntity.class;\n // Have we got *any* permissions on the table?\n if (\n klass.aclSelectable ||\n klass.attributes.some(attr => attr.aclSelectable)\n ) {\n // Yes; this is a regular table; omit if RBAC permissions tell us to.\n if (\n (permission === READ ||\n permission === FILTER ||\n permission === ORDER) &&\n !attributeEntity.aclSelectable\n ) {\n return true;\n } else if (permission === CREATE && !attributeEntity.aclInsertable) {\n return true;\n } else if (permission === UPDATE && !attributeEntity.aclUpdatable) {\n return true;\n }\n } else {\n // No permissions on the table at all, so normal connections will skip\n // over it. Thus we must be being exposed via a security definer function\n // or similar, so we should expose all fields except those that are\n // explicitly @omit-ed.\n }\n }\n return omit(entity, permission);\n};\n\nconst omitUnindexed = (omit, hideIndexWarnings) => (\n entity: PgProc | PgClass | PgAttribute | PgConstraint,\n permission: string\n) => {\n if (\n entity.kind === \"attribute\" &&\n !entity.isIndexed &&\n (permission === \"filter\" || permission === \"order\")\n ) {\n return true;\n }\n if (\n entity.kind === \"constraint\" &&\n entity.type === \"f\" &&\n !entity.isIndexed &&\n permission === \"read\"\n ) {\n const klass = entity.class;\n if (klass) {\n const shouldOutputWarning =\n // $FlowFixMe\n !entity._omitUnindexedReadWarningGiven && !hideIndexWarnings;\n if (shouldOutputWarning) {\n // $FlowFixMe\n entity._omitUnindexedReadWarningGiven = true;\n // eslint-disable-next-line no-console\n console.log(\n \"%s\",\n `Disabled 'read' permission for ${describePgEntity(\n entity\n )} because it isn't indexed. For more information see https://graphile.org/postgraphile/best-practices/ To fix, perform\\n\\n CREATE INDEX ON ${`\"${klass.namespaceName}\".\"${klass.name}\"`}(\"${entity.keyAttributes\n .map(a => a.name)\n .join('\", \"')}\");`\n );\n }\n }\n return true;\n }\n return omit(entity, permission);\n};\n\nfunction describePgEntity(entity: PgEntity, includeAlias = true) {\n const getAlias = !includeAlias\n ? () => \"\"\n : () => {\n const tags = pickBy(\n entity.tags,\n (value, key) => key === \"name\" || key.endsWith(\"Name\")\n );\n if (Object.keys(tags).length) {\n return ` (with smart comments: ${chalk.bold(\n Object.keys(tags)\n .map(t => `@${t} ${tags[t]}`)\n .join(\" | \")\n )})`;\n }\n return \"\";\n };\n\n try {\n if (entity.kind === \"constraint\") {\n return `constraint ${chalk.bold(\n `\"${entity.name}\"`\n )} on ${describePgEntity(entity.class, false)}${getAlias()}`;\n } else if (entity.kind === \"class\") {\n // see pg_class.relkind https://www.postgresql.org/docs/10/static/catalog-pg-class.html\n const kind =\n {\n c: \"composite type\",\n f: \"foreign table\",\n p: \"partitioned table\",\n r: \"table\",\n v: \"view\",\n m: \"materialized view\",\n }[entity.classKind] || \"table-like\";\n return `${kind} ${chalk.bold(\n `\"${entity.namespaceName}\".\"${entity.name}\"`\n )}${getAlias()}`;\n } else if (entity.kind === \"procedure\") {\n return `function ${chalk.bold(\n `\"${entity.namespaceName}\".\"${entity.name}\"(...args...)`\n )}${getAlias()}`;\n } else if (entity.kind === \"attribute\") {\n return `column ${chalk.bold(`\"${entity.name}\"`)} on ${describePgEntity(\n entity.class,\n false\n )}${getAlias()}`;\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(\"Error occurred while attempting to debug entity:\", entity);\n // eslint-disable-next-line no-console\n console.error(e);\n }\n return `entity of kind '${entity.kind}' with ${\n typeof entity.id === \"string\" ? `oid '${entity.id}'` : \"\"\n }`;\n}\n\nfunction sqlCommentByAddingTags(entity, tagsToAdd) {\n // NOTE: this function is NOT intended to be SQL safe; it's for\n // displaying in error messages. Nonetheless if you find issues with\n // SQL compatibility, please send a PR or issue.\n\n // Ref: https://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-BACKSLASH-TABLE\n const escape = str =>\n str.replace(\n /['\\\\\\b\\f\\n\\r\\t]/g,\n chr =>\n ({\n \"\\b\": \"\\\\b\",\n \"\\f\": \"\\\\f\",\n \"\\n\": \"\\\\n\",\n \"\\r\": \"\\\\r\",\n \"\\t\": \"\\\\t\",\n }[chr] || \"\\\\\" + chr)\n );\n\n // tagsToAdd is here twice to ensure that the keys in tagsToAdd come first, but that they also \"win\" any conflicts.\n const tags = {\n ...tagsToAdd,\n ...entity.tags,\n ...tagsToAdd,\n };\n\n const description = entity.description;\n const tagsSql = Object.keys(tags)\n .reduce((memo, tag) => {\n const tagValue = tags[tag];\n const valueArray = Array.isArray(tagValue) ? tagValue : [tagValue];\n const highlightOrNot = tag in tagsToAdd ? chalk.bold.green : identity;\n valueArray.forEach(value => {\n memo.push(\n highlightOrNot(\n `@${escape(escape(tag))}${\n value === true ? \"\" : \" \" + escape(escape(value))\n }`\n )\n );\n });\n return memo;\n }, [])\n .join(\"\\\\n\");\n const commentValue = `E'${tagsSql}${\n description ? \"\\\\n\" + escape(description) : \"\"\n }'`;\n let sqlThing;\n if (entity.kind === \"class\") {\n const identifier = `\"${entity.namespaceName}\".\"${entity.name}\"`;\n if (entity.classKind === \"r\") {\n sqlThing = `TABLE ${identifier}`;\n } else if (entity.classKind === \"v\") {\n sqlThing = `VIEW ${identifier}`;\n } else if (entity.classKind === \"m\") {\n sqlThing = `MATERIALIZED VIEW ${identifier}`;\n } else if (entity.classKind === \"c\") {\n sqlThing = `TYPE ${identifier}`;\n } else {\n sqlThing = `PLEASE_SEND_A_PULL_REQUEST_TO_FIX_THIS ${identifier}`;\n }\n } else if (entity.kind === \"attribute\") {\n sqlThing = `COLUMN \"${entity.class.namespaceName}\".\"${entity.class.name}\".\"${entity.name}\"`;\n } else if (entity.kind === \"procedure\") {\n sqlThing = `FUNCTION \"${entity.namespaceName}\".\"${entity.name}\"(...arg types go here...)`;\n } else if (entity.kind === \"constraint\") {\n // TODO: TEST!\n sqlThing = `CONSTRAINT \"${entity.name}\" ON \"${entity.class.namespaceName}\".\"${entity.class.name}\"`;\n } else {\n sqlThing = `UNKNOWN_ENTITY_PLEASE_SEND_A_PULL_REQUEST`;\n }\n\n return `COMMENT ON ${sqlThing} IS ${commentValue};`;\n}\n\nexport default (function PgBasicsPlugin(\n builder,\n {\n pgStrictFunctions = false,\n pgColumnFilter = defaultPgColumnFilter,\n pgIgnoreRBAC = false,\n pgIgnoreIndexes = true, // TODO:v5: change this to false\n pgHideIndexWarnings = false,\n pgLegacyJsonUuid = false, // TODO:v5: remove this\n pgAugmentIntrospectionResults,\n }\n) {\n let pgOmit = baseOmit;\n if (!pgIgnoreRBAC) {\n pgOmit = omitWithRBACChecks(pgOmit);\n }\n if (!pgIgnoreIndexes) {\n pgOmit = omitUnindexed(pgOmit, pgHideIndexWarnings);\n }\n builder.hook(\n \"build\",\n build => {\n build.versions[\"graphile-build-pg\"] = version;\n build.liveCoordinator.registerProvider(new PgLiveProvider());\n return build.extend(build, {\n graphileBuildPgVersion: version,\n pgSql: sql,\n pgStrictFunctions,\n pgColumnFilter,\n\n // TODO:v5: remove this workaround\n // BEWARE: this may be overridden in PgIntrospectionPlugin for PG < 9.5\n pgQueryFromResolveData: queryFromResolveDataFactory(),\n\n pgAddStartEndCursor: addStartEndCursor,\n pgOmit,\n pgMakeProcField: makeProcField,\n pgParseIdentifier: parseIdentifier,\n pgViaTemporaryTable: viaTemporaryTable,\n describePgEntity,\n pgField,\n sqlCommentByAddingTags,\n pgPrepareAndRun,\n pgAugmentIntrospectionResults,\n });\n },\n [\"PgBasics\"]\n );\n\n builder.hook(\n \"inflection\",\n (inflection, build) => {\n // TODO:v5: move this to postgraphile-core\n const oldBuiltin = inflection.builtin;\n inflection.builtin = function(name) {\n if (pgLegacyJsonUuid && name === \"JSON\") return \"Json\";\n if (pgLegacyJsonUuid && name === \"UUID\") return \"Uuid\";\n return oldBuiltin.call(this, name);\n };\n\n return build.extend(\n inflection,\n preventEmptyResult({\n // These helpers are passed GraphQL type names as strings\n conditionType(typeName: string) {\n return this.upperCamelCase(`${typeName}-condition`);\n },\n inputType(typeName: string) {\n return this.upperCamelCase(`${typeName}-input`);\n },\n rangeBoundType(typeName: string) {\n return this.upperCamelCase(`${typeName}-range-bound`);\n },\n rangeType(typeName: string) {\n return this.upperCamelCase(`${typeName}-range`);\n },\n patchType(typeName: string) {\n return this.upperCamelCase(`${typeName}-patch`);\n },\n baseInputType(typeName: string) {\n return this.upperCamelCase(`${typeName}-base-input`);\n },\n patchField(itemName: string) {\n return this.camelCase(`${itemName}-patch`);\n },\n orderByType(typeName: string) {\n return this.upperCamelCase(`${this.pluralize(typeName)}-order-by`);\n },\n edge(typeName: string) {\n return this.upperCamelCase(`${this.pluralize(typeName)}-edge`);\n },\n connection(typeName: string) {\n return this.upperCamelCase(\n `${this.pluralize(typeName)}-connection`\n );\n },\n\n // These helpers handle overrides via smart comments. They should only\n // be used in other inflectors, hence the underscore prefix.\n //\n // IMPORTANT: do NOT do case transforms here, because detail can be\n // lost, e.g.\n // `constantCase(camelCase('foo_1')) !== constantCase('foo_1')`\n _functionName(proc: PgProc) {\n return this.coerceToGraphQLName(proc.tags.name || proc.name);\n },\n _typeName(type: PgType) {\n // 'type' introspection result\n return this.coerceToGraphQLName(type.tags.name || type.name);\n },\n _tableName(table: PgClass) {\n return this.coerceToGraphQLName(\n table.tags.name || table.type.tags.name || table.name\n );\n },\n _singularizedTableName(table: PgClass): string {\n return this.singularize(this._tableName(table)).replace(\n /.(?:(?:[_-]i|I)nput|(?:[_-]p|P)atch)$/,\n \"$&_record\"\n );\n },\n _columnName(attr: PgAttribute, _options?: { skipRowId?: boolean }) {\n return this.coerceToGraphQLName(attr.tags.name || attr.name);\n },\n\n // From here down, functions are passed database introspection results\n enumType(type: PgType) {\n return this.upperCamelCase(this._typeName(type));\n },\n argument(name: ?string, index: number) {\n return this.coerceToGraphQLName(\n this.camelCase(name || `arg${index}`)\n );\n },\n orderByEnum(columnName, ascending) {\n return this.constantCase(\n `${columnName}_${ascending ? \"asc\" : \"desc\"}`\n );\n },\n orderByColumnEnum(attr: PgAttribute, ascending: boolean) {\n const columnName = this._columnName(attr, {\n skipRowId: true, // Because we messed up 😔\n });\n return this.orderByEnum(columnName, ascending);\n },\n orderByComputedColumnEnum(\n pseudoColumnName: string,\n proc: PgProc,\n table: PgClass,\n ascending: boolean\n ) {\n const columnName = this.computedColumn(\n pseudoColumnName,\n proc,\n table\n );\n return this.orderByEnum(columnName, ascending);\n },\n domainType(type: PgType) {\n return this.upperCamelCase(this._typeName(type));\n },\n enumName(inValue: string) {\n let value = inValue;\n\n if (value === \"\") {\n return \"_EMPTY_\";\n }\n\n // Some enums use asterisks to signify wildcards - this might be for\n // the whole item, or prefixes/suffixes, or even in the middle. This\n // is provided on a best efforts basis, if it doesn't suit your\n // purposes then please pass a custom inflector as mentioned below.\n value = value\n .replace(/\\*/g, \"_ASTERISK_\")\n .replace(/^(_?)_+ASTERISK/, \"$1ASTERISK\")\n .replace(/ASTERISK_(_?)_*$/, \"ASTERISK$1\");\n\n // This is a best efforts replacement for common symbols that you\n // might find in enums. Generally we only support enums that are\n // alphanumeric, if these replacements don't work for you, you should\n // pass a custom inflector that replaces this `enumName` method\n // with one of your own chosing.\n value =\n {\n // SQL comparison operators\n \">\": \"GREATER_THAN\",\n \">=\": \"GREATER_THAN_OR_EQUAL\",\n \"=\": \"EQUAL\",\n \"!=\": \"NOT_EQUAL\",\n \"<>\": \"DIFFERENT\",\n \"<=\": \"LESS_THAN_OR_EQUAL\",\n \"<\": \"LESS_THAN\",\n\n // PostgreSQL LIKE shortcuts\n \"~~\": \"LIKE\",\n \"~~*\": \"ILIKE\",\n \"!~~\": \"NOT_LIKE\",\n \"!~~*\": \"NOT_ILIKE\",\n\n // '~' doesn't necessarily represent regexps, but the three\n // operators following it likely do, so we'll use the word TILDE\n // in all for consistency.\n \"~\": \"TILDE\",\n \"~*\": \"TILDE_ASTERISK\",\n \"!~\": \"NOT_TILDE\",\n \"!~*\": \"NOT_TILDE_ASTERISK\",\n\n // A number of other symbols where we're not sure of their\n // meaning. We give them common generic names so that they're\n // suitable for multiple purposes, e.g. favouring 'PLUS' over\n // 'ADDITION' and 'DOT' over 'FULL_STOP'\n \"%\": \"PERCENT\",\n \"+\": \"PLUS\",\n \"-\": \"MINUS\",\n \"/\": \"SLASH\",\n \"\\\\\": \"BACKSLASH\",\n _: \"UNDERSCORE\",\n \"#\": \"POUND\",\n \"£\": \"STERLING\",\n $: \"DOLLAR\",\n \"&\": \"AMPERSAND\",\n \"@\": \"AT\",\n \"'\": \"APOSTROPHE\",\n '\"': \"QUOTE\",\n \"`\": \"BACKTICK\",\n \":\": \"COLON\",\n \";\": \"SEMICOLON\",\n \"!\": \"EXCLAMATION_POINT\",\n \"?\": \"QUESTION_MARK\",\n \",\": \"COMMA\",\n \".\": \"DOT\",\n \"^\": \"CARET\",\n \"|\": \"BAR\",\n \"[\": \"OPEN_BRACKET\",\n \"]\": \"CLOSE_BRACKET\",\n \"(\": \"OPEN_PARENTHESIS\",\n \")\": \"CLOSE_PARENTHESIS\",\n \"{\": \"OPEN_BRACE\",\n \"}\": \"CLOSE_BRACE\",\n }[value] || value;\n return value;\n },\n\n tableNode(table: PgClass) {\n return this.camelCase(this._singularizedTableName(table));\n },\n tableFieldName(table: PgClass) {\n return this.camelCase(this._singularizedTableName(table));\n },\n allRows(table: PgClass) {\n return this.camelCase(\n `all-${this.pluralize(this._singularizedTableName(table))}`\n );\n },\n allRowsSimple(table: PgClass) {\n return this.camelCase(\n `all-${this.pluralize(this._singularizedTableName(table))}-list`\n );\n },\n functionMutationName(proc: PgProc) {\n return this.camelCase(this._functionName(proc));\n },\n functionMutationResultFieldName(\n proc: PgProc,\n gqlType,\n plural: boolean = false,\n outputArgNames: Array<string> = []\n ) {\n if (proc.tags.resultFieldName) {\n return proc.tags.resultFieldName;\n }\n let name;\n if (outputArgNames.length === 1 && outputArgNames[0] !== \"\") {\n name = this.camelCase(outputArgNames[0]);\n } else if (gqlType.name === \"Int\") {\n name = \"integer\";\n } else if (gqlType.name === \"Float\") {\n name = \"float\";\n } else if (gqlType.name === \"Boolean\") {\n name = \"boolean\";\n } else if (gqlType.name === \"String\") {\n name = \"string\";\n } else if (proc.returnTypeId === \"2249\") {\n // returns a record type\n name = \"result\";\n } else {\n name = this.camelCase(gqlType.name);\n }\n return plural ? this.pluralize(name) : name;\n },\n functionQueryName(proc: PgProc) {\n return this.camelCase(this._functionName(proc));\n },\n functionQueryNameList(proc: PgProc) {\n return this.camelCase(`${this._functionName(proc)}-list`);\n },\n functionPayloadType(proc: PgProc) {\n return this.upperCamelCase(`${this._functionName(proc)}-payload`);\n },\n functionInputType(proc: PgProc) {\n return this.upperCamelCase(`${this._functionName(proc)}-input`);\n },\n functionOutputFieldName(\n proc: PgProc,\n outputArgName: string,\n index: number\n ) {\n return this.argument(outputArgName, index);\n },\n tableType(table: PgClass) {\n return this.upperCamelCase(this._singularizedTableName(table));\n },\n column(attr: PgAttribute) {\n return this.camelCase(this._columnName(attr));\n },\n computedColumn(\n pseudoColumnName: string,\n proc: PgProc,\n _table: PgClass\n ) {\n return proc.tags.fieldName || this.camelCase(pseudoColumnName);\n },\n computedColumnList(\n pseudoColumnName: string,\n proc: PgProc,\n _table: PgClass\n ) {\n return proc.tags.fieldName\n ? proc.tags.fieldName + \"List\"\n : this.camelCase(`${pseudoColumnName}-list`);\n },\n singleRelationByKeys(\n detailedKeys: Keys,\n table: PgClass,\n _foreignTable: PgClass,\n constraint: PgConstraint\n ) {\n if (constraint.tags.fieldName) {\n return constraint.tags.fieldName;\n }\n return this.camelCase(\n `${this._singularizedTableName(table)}-by-${detailedKeys\n .map(key => this.column(key))\n .join(\"-and-\")}`\n );\n },\n singleRelationByKeysBackwards(\n detailedKeys: Keys,\n table: PgClass,\n _foreignTable: PgClass,\n constraint: PgConstraint\n ) {\n if (constraint.tags.foreignSingleFieldName) {\n return constraint.tags.foreignSingleFieldName;\n }\n if (constraint.tags.foreignFieldName) {\n return constraint.tags.foreignFieldName;\n }\n return this.singleRelationByKeys(\n detailedKeys,\n table,\n _foreignTable,\n constraint\n );\n },\n manyRelationByKeys(\n detailedKeys: Keys,\n table: PgClass,\n _foreignTable: PgClass,\n constraint: PgConstraint\n ) {\n if (constraint.tags.foreignFieldName) {\n return constraint.tags.foreignFieldName;\n }\n return this.camelCase(\n `${this.pluralize(\n this._singularizedTableName(table)\n )}-by-${detailedKeys.map(key => this.column(key)).join(\"-and-\")}`\n );\n },\n manyRelationByKeysSimple(\n detailedKeys: Keys,\n table: PgClass,\n _foreignTable: PgClass,\n constraint: PgConstraint\n ) {\n if (constraint.tags.foreignSimpleFieldName) {\n return constraint.tags.foreignSimpleFieldName;\n }\n if (constraint.tags.foreignFieldName) {\n return constraint.tags.foreignFieldName;\n }\n return this.camelCase(\n `${this.pluralize(\n this._singularizedTableName(table)\n )}-by-${detailedKeys\n .map(key => this.column(key))\n .join(\"-and-\")}-list`\n );\n },\n rowByUniqueKeys(\n detailedKeys: Keys,\n table: PgClass,\n constraint: PgConstraint\n ) {\n if (constraint.tags.fieldName) {\n return constraint.tags.fieldName;\n }\n return this.camelCase(\n `${this._singularizedTableName(table)}-by-${detailedKeys\n .map(key => this.column(key))\n .join(\"-and-\")}`\n );\n },\n updateByKeys(\n detailedKeys: Keys,\n table: PgClass,\n constraint: PgConstraint\n ) {\n if (constraint.tags.updateFieldName) {\n return constraint.tags.updateFieldName;\n }\n return this.camelCase(\n `update-${this._singularizedTableName(\n table\n )}-by-${detailedKeys.map(key => this.column(key)).join(\"-and-\")}`\n );\n },\n deleteByKeys(\n detailedKeys: Keys,\n table: PgClass,\n constraint: PgConstraint\n ) {\n if (constraint.tags.deleteFieldName) {\n return constraint.tags.deleteFieldName;\n }\n return this.camelCase(\n `delete-${this._singularizedTableName(\n table\n )}-by-${detailedKeys.map(key => this.column(key)).join(\"-and-\")}`\n );\n },\n updateByKeysInputType(\n detailedKeys: Keys,\n table: PgClass,\n constraint: PgConstraint\n ) {\n if (constraint.tags.updateFieldName) {\n return this.upperCamelCase(\n `${constraint.tags.updateFieldName}-input`\n );\n }\n return this.upperCamelCase(\n `update-${this._singularizedTableName(\n table\n )}-by-${detailedKeys\n .map(key => this.column(key))\n .join(\"-and-\")}-input`\n );\n },\n deleteByKeysInputType(\n detailedKeys: Keys,\n table: PgClass,\n constraint: PgConstraint\n ) {\n if (constraint.tags.deleteFieldName) {\n return this.upperCamelCase(\n `${constraint.tags.deleteFieldName}-input`\n );\n }\n return this.upperCamelCase(\n `delete-${this._singularizedTableName(\n table\n )}-by-${detailedKeys\n .map(key => this.column(key))\n .join(\"-and-\")}-input`\n );\n },\n updateNode(table: PgClass) {\n return this.camelCase(\n `update-${this._singularizedTableName(table)}`\n );\n },\n deleteNode(table: PgClass) {\n return this.camelCase(\n `delete-${this._singularizedTableName(table)}`\n );\n },\n deletedNodeId(table: PgClass) {\n return this.camelCase(`deleted-${this.singularize(table.name)}-id`);\n },\n updateNodeInputType(table: PgClass) {\n return this.upperCamelCase(\n `update-${this._singularizedTableName(table)}-input`\n );\n },\n deleteNodeInputType(table: PgClass) {\n return this.upperCamelCase(\n `delete-${this._singularizedTableName(table)}-input`\n );\n },\n edgeField(table: PgClass) {\n return this.camelCase(`${this._singularizedTableName(table)}-edge`);\n },\n recordFunctionReturnType(proc: PgProc) {\n return (\n proc.tags.resultTypeName ||\n this.upperCamelCase(`${this._functionName(proc)}-record`)\n );\n },\n recordFunctionConnection(proc: PgProc) {\n return this.upperCamelCase(\n `${this._functionName(proc)}-connection`\n );\n },\n recordFunctionEdge(proc: PgProc) {\n return this.upperCamelCase(\n `${this.singularize(this._functionName(proc))}-edge`\n );\n },\n scalarFunctionConnection(proc: PgProc) {\n return this.upperCamelCase(\n `${this._functionName(proc)}-connection`\n );\n },\n scalarFunctionEdge(proc: PgProc) {\n return this.upperCamelCase(\n `${this.singularize(this._functionName(proc))}-edge`\n );\n },\n createField(table: PgClass) {\n return this.camelCase(\n `create-${this._singularizedTableName(table)}`\n );\n },\n createInputType(table: PgClass) {\n return this.upperCamelCase(\n `create-${this._singularizedTableName(table)}-input`\n );\n },\n createPayloadType(table: PgClass) {\n return this.upperCamelCase(\n `create-${this._singularizedTableName(table)}-payload`\n );\n },\n updatePayloadType(table: PgClass) {\n return this.upperCamelCase(\n `update-${this._singularizedTableName(table)}-payload`\n );\n },\n deletePayloadType(table: PgClass) {\n return this.upperCamelCase(\n `delete-${this._singularizedTableName(table)}-payload`\n );\n },\n }),\n \"Default inflectors from PgBasicsPlugin. You can override these with `makeAddInflectorsPlugin(..., true)`.\"\n );\n },\n [\"PgBasics\"]\n );\n}: Plugin);\n"],"file":"PgBasicsPlugin.js"}
|
|
@@ -19,17 +19,23 @@ var PgConnectionTotalCount = function PgConnectionTotalCount(builder) {
|
|
|
19
19
|
const {
|
|
20
20
|
scope: {
|
|
21
21
|
isPgRowConnectionType,
|
|
22
|
-
pgIntrospection: table
|
|
22
|
+
pgIntrospection: table,
|
|
23
|
+
nodeType
|
|
23
24
|
},
|
|
24
25
|
fieldWithHooks,
|
|
25
26
|
Self
|
|
26
27
|
} = context;
|
|
27
28
|
|
|
28
|
-
if (!isPgRowConnectionType
|
|
29
|
+
if (!isPgRowConnectionType) {
|
|
30
|
+
return fields;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const nodeTypeName = nodeType && nodeType.name ? nodeType.name : table && table.kind === "class" ? inflection.tableType(table) : null;
|
|
34
|
+
|
|
35
|
+
if (!nodeTypeName) {
|
|
29
36
|
return fields;
|
|
30
37
|
}
|
|
31
38
|
|
|
32
|
-
const tableTypeName = inflection.tableType(table);
|
|
33
39
|
return extend(fields, {
|
|
34
40
|
totalCount: fieldWithHooks("totalCount", ({
|
|
35
41
|
addDataGenerator
|
|
@@ -42,7 +48,7 @@ var PgConnectionTotalCount = function PgConnectionTotalCount(builder) {
|
|
|
42
48
|
};
|
|
43
49
|
});
|
|
44
50
|
return {
|
|
45
|
-
description: `The count of *all* \`${
|
|
51
|
+
description: `The count of *all* \`${nodeTypeName}\` you could get from the connection.`,
|
|
46
52
|
type: new GraphQLNonNull(GraphQLInt),
|
|
47
53
|
|
|
48
54
|
resolve(parent) {
|
|
@@ -12,20 +12,24 @@ export default (function PgConnectionTotalCount(builder) {
|
|
|
12
12
|
pgSql: sql,
|
|
13
13
|
} = build;
|
|
14
14
|
const {
|
|
15
|
-
scope: { isPgRowConnectionType, pgIntrospection: table },
|
|
15
|
+
scope: { isPgRowConnectionType, pgIntrospection: table, nodeType },
|
|
16
16
|
fieldWithHooks,
|
|
17
17
|
Self,
|
|
18
18
|
} = context;
|
|
19
19
|
|
|
20
|
-
if (
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
20
|
+
if (!isPgRowConnectionType) {
|
|
21
|
+
return fields;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const nodeTypeName =
|
|
25
|
+
nodeType && nodeType.name
|
|
26
|
+
? nodeType.name
|
|
27
|
+
: table && table.kind === "class"
|
|
28
|
+
? inflection.tableType(table)
|
|
29
|
+
: null;
|
|
30
|
+
if (!nodeTypeName) {
|
|
26
31
|
return fields;
|
|
27
32
|
}
|
|
28
|
-
const tableTypeName = inflection.tableType(table);
|
|
29
33
|
|
|
30
34
|
return extend(
|
|
31
35
|
fields,
|
|
@@ -44,7 +48,7 @@ export default (function PgConnectionTotalCount(builder) {
|
|
|
44
48
|
};
|
|
45
49
|
});
|
|
46
50
|
return {
|
|
47
|
-
description: `The count of *all* \`${
|
|
51
|
+
description: `The count of *all* \`${nodeTypeName}\` you could get from the connection.`,
|
|
48
52
|
type: new GraphQLNonNull(GraphQLInt),
|
|
49
53
|
resolve(parent) {
|
|
50
54
|
return (
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/plugins/PgConnectionTotalCount.js"],"names":["PgConnectionTotalCount","builder","hook","fields","build","context","extend","inflection","graphql","GraphQLInt","GraphQLNonNull","pgSql","sql","scope","isPgRowConnectionType","pgIntrospection","table","fieldWithHooks","Self","
|
|
1
|
+
{"version":3,"sources":["../../src/plugins/PgConnectionTotalCount.js"],"names":["PgConnectionTotalCount","builder","hook","fields","build","context","extend","inflection","graphql","GraphQLInt","GraphQLNonNull","pgSql","sql","scope","isPgRowConnectionType","pgIntrospection","table","nodeType","fieldWithHooks","Self","nodeTypeName","name","kind","tableType","totalCount","addDataGenerator","pgAggregateQuery","aggregateQueryBuilder","select","fragment","description","type","resolve","parent","aggregates","isPgConnectionTotalCountField"],"mappings":";;;;;;;IAGyBA,sB,GAAT,SAASA,sBAAT,CAAgCC,OAAhC,EAAyC;AACvDA,EAAAA,OAAO,CAACC,IAAR,CACE,0BADF,EAEE,CAACC,MAAD,EAASC,KAAT,EAAgBC,OAAhB,KAA4B;AAC1B,UAAM;AACJC,MAAAA,MADI;AAEJC,MAAAA,UAFI;AAGJC,MAAAA,OAAO,EAAE;AAAEC,QAAAA,UAAF;AAAcC,QAAAA;AAAd,OAHL;AAIJC,MAAAA,KAAK,EAAEC;AAJH,QAKFR,KALJ;AAMA,UAAM;AACJS,MAAAA,KAAK,EAAE;AAAEC,QAAAA,qBAAF;AAAyBC,QAAAA,eAAe,EAAEC,KAA1C;AAAiDC,QAAAA;AAAjD,OADH;AAEJC,MAAAA,cAFI;AAGJC,MAAAA;AAHI,QAIFd,OAJJ;;AAMA,QAAI,CAACS,qBAAL,EAA4B;AAC1B,aAAOX,MAAP;AACD;;AAED,UAAMiB,YAAY,GAChBH,QAAQ,IAAIA,QAAQ,CAACI,IAArB,GACIJ,QAAQ,CAACI,IADb,GAEIL,KAAK,IAAIA,KAAK,CAACM,IAAN,KAAe,OAAxB,GACAf,UAAU,CAACgB,SAAX,CAAqBP,KAArB,CADA,GAEA,IALN;;AAMA,QAAI,CAACI,YAAL,EAAmB;AACjB,aAAOjB,MAAP;AACD;;AAED,WAAOG,MAAM,CACXH,MADW,EAEX;AACEqB,MAAAA,UAAU,EAAEN,cAAc,CACxB,YADwB,EAExB,CAAC;AAAEO,QAAAA;AAAF,OAAD,KAA0B;AACxBA,QAAAA,gBAAgB,CAAC,MAAM;AACrB,iBAAO;AACLC,YAAAA,gBAAgB,EAAEC,qBAAqB,IAAI;AACzCA,cAAAA,qBAAqB,CAACC,MAAtB,CACEhB,GAAG,CAACiB,QAAS,UADf,EAEE,YAFF;AAID;AANI,WAAP;AAQD,SATe,CAAhB;AAUA,eAAO;AACLC,UAAAA,WAAW,EAAG,wBAAuBV,YAAa,uCAD7C;AAELW,UAAAA,IAAI,EAAE,IAAIrB,cAAJ,CAAmBD,UAAnB,CAFD;;AAGLuB,UAAAA,OAAO,CAACC,MAAD,EAAS;AACd,mBACGA,MAAM,CAACC,UAAP,IAAqBD,MAAM,CAACC,UAAP,CAAkBV,UAAxC,IAAuD,CADzD;AAGD;;AAPI,SAAP;AASD,OAtBuB,EAuBxB;AACEW,QAAAA,6BAA6B,EAAE;AADjC,OAvBwB;AAD5B,KAFW,EA+BV,oCAAmChB,IAAI,CAACE,IAAK,GA/BnC,CAAb;AAiCD,GA9DH,EA+DE,CAAC,wBAAD,CA/DF;AAiED,C","sourcesContent":["// @flow\nimport type { Plugin } from \"graphile-build\";\n\nexport default (function PgConnectionTotalCount(builder) {\n builder.hook(\n \"GraphQLObjectType:fields\",\n (fields, build, context) => {\n const {\n extend,\n inflection,\n graphql: { GraphQLInt, GraphQLNonNull },\n pgSql: sql,\n } = build;\n const {\n scope: { isPgRowConnectionType, pgIntrospection: table, nodeType },\n fieldWithHooks,\n Self,\n } = context;\n\n if (!isPgRowConnectionType) {\n return fields;\n }\n\n const nodeTypeName =\n nodeType && nodeType.name\n ? nodeType.name\n : table && table.kind === \"class\"\n ? inflection.tableType(table)\n : null;\n if (!nodeTypeName) {\n return fields;\n }\n\n return extend(\n fields,\n {\n totalCount: fieldWithHooks(\n \"totalCount\",\n ({ addDataGenerator }) => {\n addDataGenerator(() => {\n return {\n pgAggregateQuery: aggregateQueryBuilder => {\n aggregateQueryBuilder.select(\n sql.fragment`count(1)`,\n \"totalCount\"\n );\n },\n };\n });\n return {\n description: `The count of *all* \\`${nodeTypeName}\\` you could get from the connection.`,\n type: new GraphQLNonNull(GraphQLInt),\n resolve(parent) {\n return (\n (parent.aggregates && parent.aggregates.totalCount) || 0\n );\n },\n };\n },\n {\n isPgConnectionTotalCountField: true,\n }\n ),\n },\n `Adding totalCount to connection '${Self.name}'`\n );\n },\n [\"PgConnectionTotalCount\"]\n );\n}: Plugin);\n"],"file":"PgConnectionTotalCount.js"}
|
|
@@ -1,5 +1,17 @@
|
|
|
1
|
+
import { SchemaBuilder, Options } from "graphile-build";
|
|
2
|
+
export enum PgEntityKind {
|
|
3
|
+
NAMESPACE = "namespace",
|
|
4
|
+
PROCEDURE = "procedure",
|
|
5
|
+
CLASS = "class",
|
|
6
|
+
TYPE = "type",
|
|
7
|
+
ATTRIBUTE = "attribute",
|
|
8
|
+
CONSTRAINT = "constraint",
|
|
9
|
+
EXTENSION = "extension",
|
|
10
|
+
INDEX = "index",
|
|
11
|
+
}
|
|
12
|
+
|
|
1
13
|
export interface PgNamespace {
|
|
2
|
-
kind:
|
|
14
|
+
kind: PgEntityKind.NAMESPACE;
|
|
3
15
|
id: string;
|
|
4
16
|
name: string;
|
|
5
17
|
comment: string | void;
|
|
@@ -8,7 +20,7 @@ export interface PgNamespace {
|
|
|
8
20
|
}
|
|
9
21
|
|
|
10
22
|
export interface PgProc {
|
|
11
|
-
kind:
|
|
23
|
+
kind: PgEntityKind.PROCEDURE;
|
|
12
24
|
id: string;
|
|
13
25
|
name: string;
|
|
14
26
|
comment: string | void;
|
|
@@ -32,7 +44,7 @@ export interface PgProc {
|
|
|
32
44
|
}
|
|
33
45
|
|
|
34
46
|
export interface PgClass {
|
|
35
|
-
kind:
|
|
47
|
+
kind: PgEntityKind.CLASS;
|
|
36
48
|
id: string;
|
|
37
49
|
name: string;
|
|
38
50
|
comment: string | void;
|
|
@@ -49,9 +61,9 @@ export interface PgClass {
|
|
|
49
61
|
namespace: PgNamespace;
|
|
50
62
|
type: PgType;
|
|
51
63
|
tags: { [tag: string]: boolean | string | Array<string> };
|
|
52
|
-
attributes:
|
|
53
|
-
constraints:
|
|
54
|
-
foreignConstraints:
|
|
64
|
+
attributes: Array<PgAttribute>;
|
|
65
|
+
constraints: Array<PgConstraint>;
|
|
66
|
+
foreignConstraints: Array<PgConstraint>;
|
|
55
67
|
primaryKeyConstraint: PgConstraint | void;
|
|
56
68
|
aclSelectable: boolean;
|
|
57
69
|
aclInsertable: boolean;
|
|
@@ -61,7 +73,7 @@ export interface PgClass {
|
|
|
61
73
|
}
|
|
62
74
|
|
|
63
75
|
export interface PgType {
|
|
64
|
-
kind:
|
|
76
|
+
kind: PgEntityKind.TYPE;
|
|
65
77
|
id: string;
|
|
66
78
|
name: string;
|
|
67
79
|
comment: string | void;
|
|
@@ -85,7 +97,7 @@ export interface PgType {
|
|
|
85
97
|
}
|
|
86
98
|
|
|
87
99
|
export interface PgAttribute {
|
|
88
|
-
kind:
|
|
100
|
+
kind: PgEntityKind.ATTRIBUTE;
|
|
89
101
|
classId: string;
|
|
90
102
|
num: number;
|
|
91
103
|
name: string;
|
|
@@ -109,7 +121,7 @@ export interface PgAttribute {
|
|
|
109
121
|
}
|
|
110
122
|
|
|
111
123
|
export interface PgConstraint {
|
|
112
|
-
kind:
|
|
124
|
+
kind: PgEntityKind.CONSTRAINT;
|
|
113
125
|
id: string;
|
|
114
126
|
name: string;
|
|
115
127
|
type: string;
|
|
@@ -129,7 +141,7 @@ export interface PgConstraint {
|
|
|
129
141
|
}
|
|
130
142
|
|
|
131
143
|
export interface PgExtension {
|
|
132
|
-
kind:
|
|
144
|
+
kind: PgEntityKind.EXTENSION;
|
|
133
145
|
id: string;
|
|
134
146
|
name: string;
|
|
135
147
|
namespaceId: string;
|
|
@@ -143,7 +155,7 @@ export interface PgExtension {
|
|
|
143
155
|
}
|
|
144
156
|
|
|
145
157
|
export interface PgIndex {
|
|
146
|
-
kind:
|
|
158
|
+
kind: PgEntityKind.INDEX;
|
|
147
159
|
id: string;
|
|
148
160
|
name: string;
|
|
149
161
|
namespaceName: string;
|
|
@@ -152,6 +164,7 @@ export interface PgIndex {
|
|
|
152
164
|
indexType: string;
|
|
153
165
|
isUnique: boolean;
|
|
154
166
|
isPrimary: boolean;
|
|
167
|
+
isPartial: boolean;
|
|
155
168
|
attributeNums: Array<number>;
|
|
156
169
|
attributePropertiesAsc: Array<boolean> | void;
|
|
157
170
|
attributePropertiesNullsFirst: Array<boolean> | void;
|
|
@@ -159,6 +172,25 @@ export interface PgIndex {
|
|
|
159
172
|
tags: { [tag: string]: true | string | Array<string> };
|
|
160
173
|
}
|
|
161
174
|
|
|
175
|
+
export type PgIntrospectionResultsByKind = {
|
|
176
|
+
__pgVersion: number;
|
|
177
|
+
attribute: PgAttribute[];
|
|
178
|
+
attributeByClassIdAndNum: {
|
|
179
|
+
[classId: string]: { [num: string]: PgAttribute };
|
|
180
|
+
};
|
|
181
|
+
class: PgClass[];
|
|
182
|
+
classById: { [classId: string]: PgClass };
|
|
183
|
+
constraint: PgConstraint[];
|
|
184
|
+
extension: PgExtension[];
|
|
185
|
+
extensionById: { [extId: string]: PgExtension };
|
|
186
|
+
index: PgIndex[];
|
|
187
|
+
namespace: PgNamespace[];
|
|
188
|
+
namespaceById: { [namespaceId: string]: PgNamespace };
|
|
189
|
+
procedure: PgProc[];
|
|
190
|
+
type: PgType[];
|
|
191
|
+
typeById: { [typeId: string]: PgType };
|
|
192
|
+
};
|
|
193
|
+
|
|
162
194
|
export type PgEntity =
|
|
163
195
|
| PgNamespace
|
|
164
196
|
| PgProc
|
|
@@ -168,3 +200,8 @@ export type PgEntity =
|
|
|
168
200
|
| PgConstraint
|
|
169
201
|
| PgExtension
|
|
170
202
|
| PgIndex;
|
|
203
|
+
|
|
204
|
+
export default function PgIntrospectionPlugin(
|
|
205
|
+
builder: SchemaBuilder,
|
|
206
|
+
options: Options
|
|
207
|
+
): Promise<void> | void;
|