graphile-build-pg 4.12.0 → 4.12.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 (89) hide show
  1. package/README.md +10 -3
  2. package/node8plus/GraphQLJSON.js.map +1 -1
  3. package/node8plus/QueryBuilder.js +3 -4
  4. package/node8plus/QueryBuilder.js.map +1 -1
  5. package/node8plus/index.d.ts +2 -6
  6. package/node8plus/index.js +84 -83
  7. package/node8plus/index.js.map +1 -1
  8. package/node8plus/inflections.js +1 -1
  9. package/node8plus/inflections.js.flow +1 -3
  10. package/node8plus/inflections.js.map +1 -1
  11. package/node8plus/omit.js +2 -2
  12. package/node8plus/omit.js.flow +1 -1
  13. package/node8plus/omit.js.map +1 -1
  14. package/node8plus/plugins/PgAllRows.js.flow +2 -3
  15. package/node8plus/plugins/PgAllRows.js.map +1 -1
  16. package/node8plus/plugins/PgBackwardRelationPlugin.js +2 -2
  17. package/node8plus/plugins/PgBackwardRelationPlugin.js.flow +22 -18
  18. package/node8plus/plugins/PgBackwardRelationPlugin.js.map +1 -1
  19. package/node8plus/plugins/PgBasicsPlugin.js +3 -3
  20. package/node8plus/plugins/PgBasicsPlugin.js.flow +120 -120
  21. package/node8plus/plugins/PgBasicsPlugin.js.map +1 -1
  22. package/node8plus/plugins/PgColumnsPlugin.js +1 -1
  23. package/node8plus/plugins/PgColumnsPlugin.js.flow +5 -2
  24. package/node8plus/plugins/PgColumnsPlugin.js.map +1 -1
  25. package/node8plus/plugins/PgComputedColumnsPlugin.js +4 -4
  26. package/node8plus/plugins/PgComputedColumnsPlugin.js.flow +1 -1
  27. package/node8plus/plugins/PgComputedColumnsPlugin.js.map +1 -1
  28. package/node8plus/plugins/PgConnectionArgCondition.js.flow +4 -4
  29. package/node8plus/plugins/PgConnectionArgCondition.js.map +1 -1
  30. package/node8plus/plugins/PgConnectionArgOrderBy.js +1 -1
  31. package/node8plus/plugins/PgConnectionArgOrderBy.js.flow +1 -1
  32. package/node8plus/plugins/PgConnectionArgOrderBy.js.map +1 -1
  33. package/node8plus/plugins/PgConnectionArgOrderByDefaultValue.js +2 -1
  34. package/node8plus/plugins/PgConnectionArgOrderByDefaultValue.js.flow +2 -1
  35. package/node8plus/plugins/PgConnectionArgOrderByDefaultValue.js.map +1 -1
  36. package/node8plus/plugins/PgForwardRelationPlugin.js.flow +9 -8
  37. package/node8plus/plugins/PgForwardRelationPlugin.js.map +1 -1
  38. package/node8plus/plugins/PgIntrospectionPlugin.js +5 -5
  39. package/node8plus/plugins/PgIntrospectionPlugin.js.flow +13 -12
  40. package/node8plus/plugins/PgIntrospectionPlugin.js.map +1 -1
  41. package/node8plus/plugins/PgJWTPlugin.js.flow +2 -3
  42. package/node8plus/plugins/PgJWTPlugin.js.map +1 -1
  43. package/node8plus/plugins/PgMutationCreatePlugin.js.flow +2 -3
  44. package/node8plus/plugins/PgMutationCreatePlugin.js.map +1 -1
  45. package/node8plus/plugins/PgMutationPayloadEdgePlugin.js +2 -1
  46. package/node8plus/plugins/PgMutationPayloadEdgePlugin.js.flow +2 -1
  47. package/node8plus/plugins/PgMutationPayloadEdgePlugin.js.map +1 -1
  48. package/node8plus/plugins/PgMutationUpdateDeletePlugin.js +4 -4
  49. package/node8plus/plugins/PgMutationUpdateDeletePlugin.js.flow +14 -19
  50. package/node8plus/plugins/PgMutationUpdateDeletePlugin.js.map +1 -1
  51. package/node8plus/plugins/PgOrderByPrimaryKeyPlugin.js +4 -3
  52. package/node8plus/plugins/PgOrderByPrimaryKeyPlugin.js.flow +3 -3
  53. package/node8plus/plugins/PgOrderByPrimaryKeyPlugin.js.map +1 -1
  54. package/node8plus/plugins/PgOrderComputedColumnsPlugin.js.flow +3 -5
  55. package/node8plus/plugins/PgOrderComputedColumnsPlugin.js.map +1 -1
  56. package/node8plus/plugins/PgQueryProceduresPlugin.js +2 -2
  57. package/node8plus/plugins/PgQueryProceduresPlugin.js.map +1 -1
  58. package/node8plus/plugins/PgRecordFunctionConnectionPlugin.js.flow +4 -6
  59. package/node8plus/plugins/PgRecordFunctionConnectionPlugin.js.map +1 -1
  60. package/node8plus/plugins/PgRecordReturnTypesPlugin.js +3 -3
  61. package/node8plus/plugins/PgRecordReturnTypesPlugin.js.flow +5 -5
  62. package/node8plus/plugins/PgRecordReturnTypesPlugin.js.map +1 -1
  63. package/node8plus/plugins/PgRowByUniqueConstraint.js.flow +2 -3
  64. package/node8plus/plugins/PgRowByUniqueConstraint.js.map +1 -1
  65. package/node8plus/plugins/PgRowNode.js.flow +9 -11
  66. package/node8plus/plugins/PgRowNode.js.map +1 -1
  67. package/node8plus/plugins/PgTablesPlugin.js +13 -13
  68. package/node8plus/plugins/PgTablesPlugin.js.flow +8 -13
  69. package/node8plus/plugins/PgTablesPlugin.js.map +1 -1
  70. package/node8plus/plugins/PgTypesPlugin.js +7 -7
  71. package/node8plus/plugins/PgTypesPlugin.js.flow +28 -34
  72. package/node8plus/plugins/PgTypesPlugin.js.map +1 -1
  73. package/node8plus/plugins/debugSql.js +1 -1
  74. package/node8plus/plugins/introspectionQuery.js.map +1 -1
  75. package/node8plus/plugins/makeProcField.js +5 -5
  76. package/node8plus/plugins/makeProcField.js.flow +2 -6
  77. package/node8plus/plugins/makeProcField.js.map +1 -1
  78. package/node8plus/plugins/pgField.js.flow +2 -4
  79. package/node8plus/plugins/pgField.js.map +1 -1
  80. package/node8plus/plugins/viaTemporaryTable.js +2 -2
  81. package/node8plus/plugins/viaTemporaryTable.js.map +1 -1
  82. package/node8plus/queryFromResolveDataFactory.js +3 -4
  83. package/node8plus/queryFromResolveDataFactory.js.flow +474 -464
  84. package/node8plus/queryFromResolveDataFactory.js.map +1 -1
  85. package/node8plus/utils.js +1 -1
  86. package/node8plus/utils.js.flow +1 -1
  87. package/node8plus/utils.js.map +1 -1
  88. package/node8plus/withPgClient.js +1 -1
  89. package/package.json +4 -4
@@ -68,118 +68,122 @@ export function preventEmptyResult<
68
68
  }, {});
69
69
  }
70
70
 
71
- const omitWithRBACChecks = omit => (
72
- entity: PgProc | PgClass | PgAttribute | PgConstraint,
73
- permission: string
74
- ) => {
75
- const ORDINARY_TABLE = "r";
76
- const VIEW = "v";
77
- const MATERIALIZED_VIEW = "m";
78
- const isTableLike = entity =>
79
- entity &&
80
- entity.kind === "class" &&
81
- (entity.classKind === ORDINARY_TABLE ||
82
- entity.classKind === VIEW ||
83
- entity.classKind === MATERIALIZED_VIEW);
84
- if (entity.kind === "procedure") {
85
- if (permission === EXECUTE && !entity.aclExecutable) {
86
- return true;
87
- }
88
- } else if (entity.kind === "class" && isTableLike(entity)) {
89
- const tableEntity: PgClass = entity;
90
- if (
91
- (permission === READ || permission === ALL || permission === MANY) &&
92
- !tableEntity.aclSelectable &&
93
- !tableEntity.attributes.some(attr => attr.aclSelectable)
94
- ) {
95
- return true;
96
- } else if (
97
- permission === CREATE &&
98
- !tableEntity.aclInsertable &&
99
- !tableEntity.attributes.some(attr => attr.aclInsertable)
100
- ) {
101
- return true;
102
- } else if (
103
- permission === UPDATE &&
104
- !tableEntity.aclUpdatable &&
105
- !tableEntity.attributes.some(attr => attr.aclUpdatable)
106
- ) {
107
- return true;
108
- } else if (permission === DELETE && !tableEntity.aclDeletable) {
109
- return true;
110
- }
111
- } else if (entity.kind === "attribute" && isTableLike(entity.class)) {
112
- const attributeEntity: PgAttribute = entity;
113
-
114
- const klass = attributeEntity.class;
115
- // Have we got *any* permissions on the table?
116
- if (
117
- klass.aclSelectable ||
118
- klass.attributes.some(attr => attr.aclSelectable)
119
- ) {
120
- // Yes; this is a regular table; omit if RBAC permissions tell us to.
71
+ const omitWithRBACChecks =
72
+ omit =>
73
+ (
74
+ entity: PgProc | PgClass | PgAttribute | PgConstraint,
75
+ permission: string
76
+ ) => {
77
+ const ORDINARY_TABLE = "r";
78
+ const VIEW = "v";
79
+ const MATERIALIZED_VIEW = "m";
80
+ const isTableLike = entity =>
81
+ entity &&
82
+ entity.kind === "class" &&
83
+ (entity.classKind === ORDINARY_TABLE ||
84
+ entity.classKind === VIEW ||
85
+ entity.classKind === MATERIALIZED_VIEW);
86
+ if (entity.kind === "procedure") {
87
+ if (permission === EXECUTE && !entity.aclExecutable) {
88
+ return true;
89
+ }
90
+ } else if (entity.kind === "class" && isTableLike(entity)) {
91
+ const tableEntity: PgClass = entity;
121
92
  if (
122
- (permission === READ ||
123
- permission === FILTER ||
124
- permission === ORDER) &&
125
- !attributeEntity.aclSelectable
93
+ (permission === READ || permission === ALL || permission === MANY) &&
94
+ !tableEntity.aclSelectable &&
95
+ !tableEntity.attributes.some(attr => attr.aclSelectable)
126
96
  ) {
127
97
  return true;
128
- } else if (permission === CREATE && !attributeEntity.aclInsertable) {
98
+ } else if (
99
+ permission === CREATE &&
100
+ !tableEntity.aclInsertable &&
101
+ !tableEntity.attributes.some(attr => attr.aclInsertable)
102
+ ) {
103
+ return true;
104
+ } else if (
105
+ permission === UPDATE &&
106
+ !tableEntity.aclUpdatable &&
107
+ !tableEntity.attributes.some(attr => attr.aclUpdatable)
108
+ ) {
129
109
  return true;
130
- } else if (permission === UPDATE && !attributeEntity.aclUpdatable) {
110
+ } else if (permission === DELETE && !tableEntity.aclDeletable) {
131
111
  return true;
132
112
  }
133
- } else {
134
- // No permissions on the table at all, so normal connections will skip
135
- // over it. Thus we must be being exposed via a security definer function
136
- // or similar, so we should expose all fields except those that are
137
- // explicitly @omit-ed.
113
+ } else if (entity.kind === "attribute" && isTableLike(entity.class)) {
114
+ const attributeEntity: PgAttribute = entity;
115
+
116
+ const klass = attributeEntity.class;
117
+ // Have we got *any* permissions on the table?
118
+ if (
119
+ klass.aclSelectable ||
120
+ klass.attributes.some(attr => attr.aclSelectable)
121
+ ) {
122
+ // Yes; this is a regular table; omit if RBAC permissions tell us to.
123
+ if (
124
+ (permission === READ ||
125
+ permission === FILTER ||
126
+ permission === ORDER) &&
127
+ !attributeEntity.aclSelectable
128
+ ) {
129
+ return true;
130
+ } else if (permission === CREATE && !attributeEntity.aclInsertable) {
131
+ return true;
132
+ } else if (permission === UPDATE && !attributeEntity.aclUpdatable) {
133
+ return true;
134
+ }
135
+ } else {
136
+ // No permissions on the table at all, so normal connections will skip
137
+ // over it. Thus we must be being exposed via a security definer function
138
+ // or similar, so we should expose all fields except those that are
139
+ // explicitly @omit-ed.
140
+ }
138
141
  }
139
- }
140
- return omit(entity, permission);
141
- };
142
+ return omit(entity, permission);
143
+ };
142
144
 
143
- const omitUnindexed = (omit, hideIndexWarnings) => (
144
- entity: PgProc | PgClass | PgAttribute | PgConstraint,
145
- permission: string
146
- ) => {
147
- if (
148
- entity.kind === "attribute" &&
149
- !entity.isIndexed &&
150
- (permission === "filter" || permission === "order")
151
- ) {
152
- return true;
153
- }
154
- if (
155
- entity.kind === "constraint" &&
156
- entity.type === "f" &&
157
- !entity.isIndexed &&
158
- permission === "read"
159
- ) {
160
- const klass = entity.class;
161
- if (klass) {
162
- const shouldOutputWarning =
163
- // $FlowFixMe
164
- !entity._omitUnindexedReadWarningGiven && !hideIndexWarnings;
165
- if (shouldOutputWarning) {
166
- // $FlowFixMe
167
- entity._omitUnindexedReadWarningGiven = true;
168
- // eslint-disable-next-line no-console
169
- console.log(
170
- "%s",
171
- `Disabled 'read' permission for ${describePgEntity(
172
- entity
173
- )} 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
174
- .map(a => a.name)
175
- .join('", "')}");`
176
- );
145
+ const omitUnindexed =
146
+ (omit, hideIndexWarnings) =>
147
+ (
148
+ entity: PgProc | PgClass | PgAttribute | PgConstraint,
149
+ permission: string
150
+ ) => {
151
+ if (
152
+ entity.kind === "attribute" &&
153
+ !entity.isIndexed &&
154
+ (permission === "filter" || permission === "order")
155
+ ) {
156
+ return true;
157
+ }
158
+ if (
159
+ entity.kind === "constraint" &&
160
+ entity.type === "f" &&
161
+ !entity.isIndexed &&
162
+ permission === "read"
163
+ ) {
164
+ const klass = entity.class;
165
+ if (klass) {
166
+ const shouldOutputWarning =
167
+ // $FlowFixMe
168
+ !entity._omitUnindexedReadWarningGiven && !hideIndexWarnings;
169
+ if (shouldOutputWarning) {
170
+ // $FlowFixMe
171
+ entity._omitUnindexedReadWarningGiven = true;
172
+ // eslint-disable-next-line no-console
173
+ console.log(
174
+ "%s",
175
+ `Disabled 'read' permission for ${describePgEntity(
176
+ entity
177
+ )} 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
178
+ .map(a => a.name)
179
+ .join('", "')}");`
180
+ );
181
+ }
177
182
  }
183
+ return true;
178
184
  }
179
- return true;
180
- }
181
- return omit(entity, permission);
182
- };
185
+ return omit(entity, permission);
186
+ };
183
187
 
184
188
  function describePgEntity(entity: PgEntity, includeAlias = true) {
185
189
  const getAlias = !includeAlias
@@ -661,9 +665,9 @@ export default (function PgBasicsPlugin(
661
665
  return constraint.tags.fieldName;
662
666
  }
663
667
  return this.camelCase(
664
- `${this._singularizedTableName(
665
- table
666
- )}-by-${detailedKeys.map(key => this.column(key)).join("-and-")}`
668
+ `${this._singularizedTableName(table)}-by-${detailedKeys
669
+ .map(key => this.column(key))
670
+ .join("-and-")}`
667
671
  );
668
672
  },
669
673
  singleRelationByKeysBackwards(
@@ -729,9 +733,9 @@ export default (function PgBasicsPlugin(
729
733
  return constraint.tags.fieldName;
730
734
  }
731
735
  return this.camelCase(
732
- `${this._singularizedTableName(
733
- table
734
- )}-by-${detailedKeys.map(key => this.column(key)).join("-and-")}`
736
+ `${this._singularizedTableName(table)}-by-${detailedKeys
737
+ .map(key => this.column(key))
738
+ .join("-and-")}`
735
739
  );
736
740
  },
737
741
  updateByKeys(
@@ -743,9 +747,9 @@ export default (function PgBasicsPlugin(
743
747
  return constraint.tags.updateFieldName;
744
748
  }
745
749
  return this.camelCase(
746
- `update-${this._singularizedTableName(
747
- table
748
- )}-by-${detailedKeys.map(key => this.column(key)).join("-and-")}`
750
+ `update-${this._singularizedTableName(table)}-by-${detailedKeys
751
+ .map(key => this.column(key))
752
+ .join("-and-")}`
749
753
  );
750
754
  },
751
755
  deleteByKeys(
@@ -757,9 +761,9 @@ export default (function PgBasicsPlugin(
757
761
  return constraint.tags.deleteFieldName;
758
762
  }
759
763
  return this.camelCase(
760
- `delete-${this._singularizedTableName(
761
- table
762
- )}-by-${detailedKeys.map(key => this.column(key)).join("-and-")}`
764
+ `delete-${this._singularizedTableName(table)}-by-${detailedKeys
765
+ .map(key => this.column(key))
766
+ .join("-and-")}`
763
767
  );
764
768
  },
765
769
  updateByKeysInputType(
@@ -773,9 +777,7 @@ export default (function PgBasicsPlugin(
773
777
  );
774
778
  }
775
779
  return this.upperCamelCase(
776
- `update-${this._singularizedTableName(
777
- table
778
- )}-by-${detailedKeys
780
+ `update-${this._singularizedTableName(table)}-by-${detailedKeys
779
781
  .map(key => this.column(key))
780
782
  .join("-and-")}-input`
781
783
  );
@@ -791,9 +793,7 @@ export default (function PgBasicsPlugin(
791
793
  );
792
794
  }
793
795
  return this.upperCamelCase(
794
- `delete-${this._singularizedTableName(
795
- table
796
- )}-by-${detailedKeys
796
+ `delete-${this._singularizedTableName(table)}-by-${detailedKeys
797
797
  .map(key => this.column(key))
798
798
  .join("-and-")}-input`
799
799
  );
@@ -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","pgAugmentIntrospectionResults","pgOmit","baseOmit","hook","build","versions","version","liveCoordinator","registerProvider","PgLiveProvider","extend","graphileBuildPgVersion","pgSql","sql","pgQueryFromResolveData","pgAddStartEndCursor","addStartEndCursor","pgMakeProcField","makeProcField","pgProcFieldDetails","procFieldDetails","pgGetComputedColumnDetails","getComputedColumnDetails","pgParseIdentifier","parseIdentifier","pgViaTemporaryTable","viaTemporaryTable","pgField","pgPrepareAndRun","formatSQLForDebugging","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","enumName","argument","index","orderByEnum","columnName","ascending","constantCase","orderByColumnEnum","skipRowId","orderByComputedColumnEnum","pseudoColumnName","computedColumn","domainType","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, { procFieldDetails } from \"./makeProcField\";\nimport { getComputedColumnDetails } from \"./PgComputedColumnsPlugin\";\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\";\nimport { formatSQLForDebugging } from \"./debugSql\";\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-engine/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 pgProcFieldDetails: procFieldDetails,\n pgGetComputedColumnDetails: getComputedColumnDetails,\n pgParseIdentifier: parseIdentifier,\n pgViaTemporaryTable: viaTemporaryTable,\n describePgEntity,\n pgField,\n sqlCommentByAddingTags,\n pgPrepareAndRun,\n pgAugmentIntrospectionResults,\n formatSQLForDebugging,\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 if (type.tags.enumName) {\n return type.tags.enumName;\n }\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(\n table\n )}-by-${detailedKeys.map(key => this.column(key)).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(\n table\n )}-by-${detailedKeys.map(key => this.column(key)).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","pgProcFieldDetails","procFieldDetails","pgGetComputedColumnDetails","getComputedColumnDetails","pgParseIdentifier","parseIdentifier","pgViaTemporaryTable","viaTemporaryTable","pgField","pgPrepareAndRun","formatSQLForDebugging","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","enumName","argument","index","orderByEnum","columnName","ascending","constantCase","orderByColumnEnum","skipRowId","orderByComputedColumnEnum","pseudoColumnName","computedColumn","domainType","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, { procFieldDetails } from \"./makeProcField\";\nimport { getComputedColumnDetails } from \"./PgComputedColumnsPlugin\";\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\";\nimport { formatSQLForDebugging } from \"./debugSql\";\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-engine/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 =\n omit =>\n (\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 =\n (omit, hideIndexWarnings) =>\n (\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 pgProcFieldDetails: procFieldDetails,\n pgGetComputedColumnDetails: getComputedColumnDetails,\n pgParseIdentifier: parseIdentifier,\n pgViaTemporaryTable: viaTemporaryTable,\n describePgEntity,\n pgField,\n sqlCommentByAddingTags,\n pgPrepareAndRun,\n pgAugmentIntrospectionResults,\n formatSQLForDebugging,\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 if (type.tags.enumName) {\n return type.tags.enumName;\n }\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(table)}-by-${detailedKeys\n .map(key => this.column(key))\n .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(table)}-by-${detailedKeys\n .map(key => this.column(key))\n .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(table)}-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(table)}-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"}
@@ -174,7 +174,7 @@ end
174
174
  memo = extend(memo, {
175
175
  [fieldName]: fieldWithHooks(fieldName, pgAddSubfield(fieldName, attr.name, attr.type, {
176
176
  description: attr.description,
177
- type: nullableIf(GraphQLNonNull, isPgBaseInput || isPgPatch || !attr.isNotNull && (!attr.type.domainIsNotNull || attr.type.domainHasDefault) && !attr.tags.notNull || attr.hasDefault || attr.identity === "d", pgGetGqlInputTypeByTypeIdAndModifier(attr.typeId, attr.typeModifier) || GraphQLString)
177
+ type: nullableIf(GraphQLNonNull, isPgBaseInput || isPgPatch || !attr.isNotNull && (!attr.type.domainIsNotNull || attr.type.domainHasDefault) && !attr.tags.notNull || attr.hasDefault || attr.tags.hasDefault || attr.identity === "d", pgGetGqlInputTypeByTypeIdAndModifier(attr.typeId, attr.typeModifier) || GraphQLString)
178
178
  }, attr.typeModifier), {
179
179
  pgFieldIntrospection: attr
180
180
  })
@@ -70,7 +70,8 @@ end
70
70
  }
71
71
  };
72
72
  return build.extend(build, {
73
- pgGetSelectValueForFieldAndTypeAndModifier: getSelectValueForFieldAndTypeAndModifier,
73
+ pgGetSelectValueForFieldAndTypeAndModifier:
74
+ getSelectValueForFieldAndTypeAndModifier,
74
75
  });
75
76
  },
76
77
  ["PgColumns"],
@@ -90,7 +91,8 @@ end
90
91
  pgColumnFilter,
91
92
  inflection,
92
93
  pgOmit: omit,
93
- pgGetSelectValueForFieldAndTypeAndModifier: getSelectValueForFieldAndTypeAndModifier,
94
+ pgGetSelectValueForFieldAndTypeAndModifier:
95
+ getSelectValueForFieldAndTypeAndModifier,
94
96
  describePgEntity,
95
97
  sqlCommentByAddingTags,
96
98
  } = build;
@@ -255,6 +257,7 @@ end
255
257
  attr.type.domainHasDefault) &&
256
258
  !attr.tags.notNull) ||
257
259
  attr.hasDefault ||
260
+ attr.tags.hasDefault ||
258
261
  attr.identity === "d",
259
262
  pgGetGqlInputTypeByTypeIdAndModifier(
260
263
  attr.typeId,