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
package/README.md CHANGED
@@ -23,10 +23,17 @@ maintenance and development via sponsorship.
23
23
  And please give some love to our featured sponsors 🤩:
24
24
 
25
25
  <table><tr>
26
+ <td align="center"><a href="https://surge.io/"><img src="https://graphile.org/images/sponsors/surge.png" width="90" height="90" alt="Surge" /><br />Surge</a> *</td>
27
+ <td align="center"><a href="https://storyscript.com/?utm_source=postgraphile"><img src="https://graphile.org/images/sponsors/storyscript.png" width="90" height="90" alt="Story.ai" /><br />Story.ai</a> *</td>
26
28
  <td align="center"><a href="http://chads.website"><img src="https://graphile.org/images/sponsors/chadf.png" width="90" height="90" alt="Chad Furman" /><br />Chad Furman</a> *</td>
27
- <td align="center"><a href="https://storyscript.com/?utm_source=postgraphile"><img src="https://graphile.org/images/sponsors/storyscript.png" width="90" height="90" alt="Storyscript" /><br />Storyscript</a> *</td>
28
- <td align="center"><a href="https://postlight.com/?utm_source=graphile"><img src="https://graphile.org/images/sponsors/postlight.jpg" width="90" height="90" alt="Postlight" /><br />Postlight</a> *</td>
29
- <td align="center"><a href="https://surge.io/"><img src="https://graphile.org/images/sponsors/surge.png" width="90" height="90" alt="Surge.io" /><br />Surge.io</a> *</td>
29
+ <td align="center"><a href="https://www.the-guild.dev/"><img src="https://graphile.org/images/sponsors/theguild.png" width="90" height="90" alt="The Guild" /><br />The Guild</a> *</td>
30
+ </tr><tr>
31
+ <td align="center"><a href="https://qwick.com/"><img src="https://graphile.org/images/sponsors/qwick.png" width="90" height="90" alt="Qwick" /><br />Qwick</a> *</td>
32
+ <td align="center"><a href="https://www.fanatics.com/"><img src="https://graphile.org/images/sponsors/fanatics.png" width="90" height="90" alt="Fanatics" /><br />Fanatics</a> *</td>
33
+ <td align="center"><a href="https://graphcdn.io/"><img src="https://graphile.org/images/sponsors/GraphCDN.png" width="90" height="90" alt="GraphCDN" /><br />GraphCDN</a> *</td>
34
+ <td align="center"><a href="https://dovetailapp.com/"><img src="https://graphile.org/images/sponsors/dovetail.png" width="90" height="90" alt="Dovetail" /><br />Dovetail</a> *</td>
35
+ </tr><tr>
36
+ <td align="center"><a href="https://www.enzuzo.com/"><img src="https://graphile.org/images/sponsors/enzuzo.png" width="90" height="90" alt="Enzuzo" /><br />Enzuzo</a> *</td>
30
37
  </tr></table>
31
38
 
32
39
  <em>\* Sponsors the entire Graphile suite</em>
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/GraphQLJSON.js"],"names":["makeGraphQLJSONType","graphql","name","GraphQLScalarType","Kind","identity","value","parseLiteral","ast","variables","kind","STRING","BOOLEAN","INT","FLOAT","parseFloat","OBJECT","Object","create","fields","forEach","field","LIST","values","map","n","NULL","VARIABLE","undefined","description","serialize","parseValue"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;;AACA;;;;;;;;;;;;;;;;;;;;;;;AAuBe,SAASA,mBAAT,CAA6BC,OAA7B,EAAsCC,IAAtC,EAA4C;AACzD,QAAM;AAAEC,IAAAA,iBAAF;AAAqBC,IAAAA;AAArB,MAA8BH,OAApC;;AAEA,WAASI,QAAT,CAAkBC,KAAlB,EAAyB;AACvB,WAAOA,KAAP;AACD;;AAED,WAASC,YAAT,CAAsBC,GAAtB,EAA2BC,SAA3B,EAAsC;AACpC,YAAQD,GAAG,CAACE,IAAZ;AACE,WAAKN,IAAI,CAACO,MAAV;AACA,WAAKP,IAAI,CAACQ,OAAV;AACE,eAAOJ,GAAG,CAACF,KAAX;;AACF,WAAKF,IAAI,CAACS,GAAV;AACA,WAAKT,IAAI,CAACU,KAAV;AACE,eAAOC,UAAU,CAACP,GAAG,CAACF,KAAL,CAAjB;;AACF,WAAKF,IAAI,CAACY,MAAV;AAAkB;AAChB,gBAAMV,KAAK,GAAGW,MAAM,CAACC,MAAP,CAAc,IAAd,CAAd;AACAV,UAAAA,GAAG,CAACW,MAAJ,CAAWC,OAAX,CAAmBC,KAAK,IAAI;AAC1Bf,YAAAA,KAAK,CAACe,KAAK,CAACnB,IAAN,CAAWI,KAAZ,CAAL,GAA0BC,YAAY,CAACc,KAAK,CAACf,KAAP,EAAcG,SAAd,CAAtC;AACD,WAFD;AAIA,iBAAOH,KAAP;AACD;;AACD,WAAKF,IAAI,CAACkB,IAAV;AACE,eAAOd,GAAG,CAACe,MAAJ,CAAWC,GAAX,CAAeC,CAAC,IAAIlB,YAAY,CAACkB,CAAD,EAAIhB,SAAJ,CAAhC,CAAP;;AACF,WAAKL,IAAI,CAACsB,IAAV;AACE,eAAO,IAAP;;AACF,WAAKtB,IAAI,CAACuB,QAAV;AAAoB;AAClB,gBAAMzB,IAAI,GAAGM,GAAG,CAACN,IAAJ,CAASI,KAAtB;AACA,iBAAOG,SAAS,GAAGA,SAAS,CAACP,IAAD,CAAZ,GAAqB0B,SAArC;AACD;;AACD;AACE,eAAOA,SAAP;AAxBJ;AA0BD;;AAED,SAAO,IAAIzB,iBAAJ,CAAsB;AAC3BD,IAAAA,IAD2B;AAE3B2B,IAAAA,WAAW,EACR,SAAQ3B,IAAK,wDAAd,GACA,+CADA,GAEA,2CALyB;AAM3B4B,IAAAA,SAAS,EAAEzB,QANgB;AAO3B0B,IAAAA,UAAU,EAAE1B,QAPe;AAQ3BE,IAAAA;AAR2B,GAAtB,CAAP;AAUD","sourcesContent":["// This file is based on\n// https://github.com/taion/graphql-type-json/blob/6e45ae4ee0a60f8f3565c8c980a82c7d9b98d3f5/src/index.js\n//\n// It only exists here (rather than using `graphql-type-json` directly) because\n// we need to export Json along with JSON.\n//\n/*\nThe MIT License (MIT)\n\nCopyright (c) 2016 Jimmy Jia\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/\nexport default function makeGraphQLJSONType(graphql, name) {\n const { GraphQLScalarType, Kind } = graphql;\n\n function identity(value) {\n return value;\n }\n\n function parseLiteral(ast, variables) {\n switch (ast.kind) {\n case Kind.STRING:\n case Kind.BOOLEAN:\n return ast.value;\n case Kind.INT:\n case Kind.FLOAT:\n return parseFloat(ast.value);\n case Kind.OBJECT: {\n const value = Object.create(null);\n ast.fields.forEach(field => {\n value[field.name.value] = parseLiteral(field.value, variables);\n });\n\n return value;\n }\n case Kind.LIST:\n return ast.values.map(n => parseLiteral(n, variables));\n case Kind.NULL:\n return null;\n case Kind.VARIABLE: {\n const name = ast.name.value;\n return variables ? variables[name] : undefined;\n }\n default:\n return undefined;\n }\n }\n\n return new GraphQLScalarType({\n name,\n description:\n `The \\`${name}\\` scalar type represents JSON values as specified by ` +\n \"[ECMA-404](http://www.ecma-international.org/\" +\n \"publications/files/ECMA-ST/ECMA-404.pdf).\",\n serialize: identity,\n parseValue: identity,\n parseLiteral,\n });\n}\n"],"file":"GraphQLJSON.js"}
1
+ {"version":3,"sources":["../src/GraphQLJSON.js"],"names":["makeGraphQLJSONType","graphql","name","GraphQLScalarType","Kind","identity","value","parseLiteral","ast","variables","kind","STRING","BOOLEAN","INT","FLOAT","parseFloat","OBJECT","Object","create","fields","forEach","field","LIST","values","map","n","NULL","VARIABLE","undefined","description","serialize","parseValue"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAASA,mBAAT,CAA6BC,OAA7B,EAAsCC,IAAtC,EAA4C;AACzD,QAAM;AAAEC,IAAAA,iBAAF;AAAqBC,IAAAA;AAArB,MAA8BH,OAApC;;AAEA,WAASI,QAAT,CAAkBC,KAAlB,EAAyB;AACvB,WAAOA,KAAP;AACD;;AAED,WAASC,YAAT,CAAsBC,GAAtB,EAA2BC,SAA3B,EAAsC;AACpC,YAAQD,GAAG,CAACE,IAAZ;AACE,WAAKN,IAAI,CAACO,MAAV;AACA,WAAKP,IAAI,CAACQ,OAAV;AACE,eAAOJ,GAAG,CAACF,KAAX;;AACF,WAAKF,IAAI,CAACS,GAAV;AACA,WAAKT,IAAI,CAACU,KAAV;AACE,eAAOC,UAAU,CAACP,GAAG,CAACF,KAAL,CAAjB;;AACF,WAAKF,IAAI,CAACY,MAAV;AAAkB;AAChB,gBAAMV,KAAK,GAAGW,MAAM,CAACC,MAAP,CAAc,IAAd,CAAd;AACAV,UAAAA,GAAG,CAACW,MAAJ,CAAWC,OAAX,CAAmBC,KAAK,IAAI;AAC1Bf,YAAAA,KAAK,CAACe,KAAK,CAACnB,IAAN,CAAWI,KAAZ,CAAL,GAA0BC,YAAY,CAACc,KAAK,CAACf,KAAP,EAAcG,SAAd,CAAtC;AACD,WAFD;AAIA,iBAAOH,KAAP;AACD;;AACD,WAAKF,IAAI,CAACkB,IAAV;AACE,eAAOd,GAAG,CAACe,MAAJ,CAAWC,GAAX,CAAeC,CAAC,IAAIlB,YAAY,CAACkB,CAAD,EAAIhB,SAAJ,CAAhC,CAAP;;AACF,WAAKL,IAAI,CAACsB,IAAV;AACE,eAAO,IAAP;;AACF,WAAKtB,IAAI,CAACuB,QAAV;AAAoB;AAClB,gBAAMzB,IAAI,GAAGM,GAAG,CAACN,IAAJ,CAASI,KAAtB;AACA,iBAAOG,SAAS,GAAGA,SAAS,CAACP,IAAD,CAAZ,GAAqB0B,SAArC;AACD;;AACD;AACE,eAAOA,SAAP;AAxBJ;AA0BD;;AAED,SAAO,IAAIzB,iBAAJ,CAAsB;AAC3BD,IAAAA,IAD2B;AAE3B2B,IAAAA,WAAW,EACR,SAAQ3B,IAAK,wDAAd,GACA,+CADA,GAEA,2CALyB;AAM3B4B,IAAAA,SAAS,EAAEzB,QANgB;AAO3B0B,IAAAA,UAAU,EAAE1B,QAPe;AAQ3BE,IAAAA;AAR2B,GAAtB,CAAP;AAUD","sourcesContent":["// This file is based on\n// https://github.com/taion/graphql-type-json/blob/6e45ae4ee0a60f8f3565c8c980a82c7d9b98d3f5/src/index.js\n//\n// It only exists here (rather than using `graphql-type-json` directly) because\n// we need to export Json along with JSON.\n//\n/*\nThe MIT License (MIT)\n\nCopyright (c) 2016 Jimmy Jia\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/\nexport default function makeGraphQLJSONType(graphql, name) {\n const { GraphQLScalarType, Kind } = graphql;\n\n function identity(value) {\n return value;\n }\n\n function parseLiteral(ast, variables) {\n switch (ast.kind) {\n case Kind.STRING:\n case Kind.BOOLEAN:\n return ast.value;\n case Kind.INT:\n case Kind.FLOAT:\n return parseFloat(ast.value);\n case Kind.OBJECT: {\n const value = Object.create(null);\n ast.fields.forEach(field => {\n value[field.name.value] = parseLiteral(field.value, variables);\n });\n\n return value;\n }\n case Kind.LIST:\n return ast.values.map(n => parseLiteral(n, variables));\n case Kind.NULL:\n return null;\n case Kind.VARIABLE: {\n const name = ast.name.value;\n return variables ? variables[name] : undefined;\n }\n default:\n return undefined;\n }\n }\n\n return new GraphQLScalarType({\n name,\n description:\n `The \\`${name}\\` scalar type represents JSON values as specified by ` +\n \"[ECMA-404](http://www.ecma-international.org/\" +\n \"publications/files/ECMA-ST/ECMA-404.pdf).\",\n serialize: identity,\n parseValue: identity,\n parseLiteral,\n });\n}\n"],"file":"GraphQLJSON.js"}
@@ -13,9 +13,9 @@ var _chunk = _interopRequireDefault(require("lodash/chunk"));
13
13
 
14
14
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
15
 
16
- function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
16
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
17
17
 
18
- function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
18
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
19
19
 
20
20
  const isDev = process.env.POSTGRAPHILE_ENV === "development";
21
21
 
@@ -81,8 +81,7 @@ function escapeLarge(sqlFragment, type) {
81
81
 
82
82
  class QueryBuilder {
83
83
  // eslint-disable-line flowtype/no-weak-types
84
- constructor(options = {}, context = {}, rootValue) // eslint-disable-line flowtype/no-weak-types
85
- {
84
+ constructor(options = {}, context = {}, rootValue) {
86
85
  this.context = context || {};
87
86
  this.rootValue = rootValue;
88
87
  this.supportsJSONB = typeof options.supportsJSONB === "undefined" || options.supportsJSONB === null ? true : !!options.supportsJSONB;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/QueryBuilder.js"],"names":["isDev","process","env","POSTGRAPHILE_ENV","callIfNecessary","o","context","callIfNecessaryArray","Array","isArray","map","v","escapeLarge","sqlFragment","type","actualType","domainBaseType","category","includes","id","sql","fragment","QueryBuilder","constructor","options","rootValue","supportsJSONB","locks","cursorComparator","fixedSelectExpression","select","selectCursor","from","join","whereBound","where","orderBy","orderIsUnique","first","last","limit","offset","finalized","selectedIdentifiers","data","cursorPrefix","lower","upper","beforeLock","liveConditions","compiledData","_children","Map","lock","lockContext","Object","freeze","queryBuilder","jsonbBuildObject","fields","length","fieldsChunks","chunkToJson","fieldsChunk","expr","alias","literal","field","fn","checkLock","push","makeLiveCollection","table","cb","checkerGenerator","checkers","record","every","checker","parentQueryBuilder","Error","allRequirements","reduce","memo","_checkerGenerator","requirements","assign","value","keys","key","addLiveCondition","setCursorComparator","addCursorCondition","cursorValue","isAfter","exprGen","test","selectIdentifiers","primaryKey","primaryKeyConstraint","primaryKeys","keyAttributes","getTableAlias","identifier","name","Symbol","isLower","setOrderIsUnique","ascending","nullsFirst","limitGen","offsetGen","previous","isOrderUnique","getTableExpression","getSelectCursor","getOffset","getFinalLimitAndOffset","flip","Math","min","getFinalOffset","getFinalLimit","getOrderByExpressionsAndDirections","getSelectFieldsCount","lockEverything","buildSelectFields","buildSelectJson","addNullCase","addNotDistinctFromNullCase","buildObject","buildWhereBoundClause","clauses","buildWhereClause","includeLowerBound","includeUpperBound","build","asJson","asJsonAggregate","onlyJsonField","useAsterisk","Number","flipAlias","aggAlias","_finalize","i","l","stack","seenFields","selects","valueOrGenerator","columnName","a","b","c","f","replace","buildChild","child","buildNamedChildSelecting","selectExpression","has","toString","set","getNamedChild","get"],"mappings":"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","sourcesContent":["// @flow\nimport * as sql from \"pg-sql2\";\nimport type { SQL } from \"pg-sql2\";\nimport isSafeInteger from \"lodash/isSafeInteger\";\nimport chunk from \"lodash/chunk\";\nimport type { PgClass, PgType } from \"./plugins/PgIntrospectionPlugin\";\n\n// eslint-disable-next-line flowtype/no-weak-types\ntype GraphQLContext = any;\n\nconst isDev = process.env.POSTGRAPHILE_ENV === \"development\";\n\ntype GenContext = {\n queryBuilder: QueryBuilder,\n};\ntype Gen<T> = (context: GenContext) => T;\n\n// Importantly, this cannot include a function\ntype CallResult = null | string | number | boolean | SQL;\n\nfunction callIfNecessary<T: CallResult>(o: Gen<T> | T, context: GenContext): T {\n if (typeof o === \"function\") {\n return o(context);\n } else {\n return o;\n }\n}\n\nfunction callIfNecessaryArray<T: CallResult>(\n o: Array<Gen<T> | T>,\n context: GenContext\n): Array<T> {\n if (Array.isArray(o)) {\n return o.map(v => callIfNecessary(v, context));\n } else {\n return o;\n }\n}\n\nexport type RawAlias = Symbol | string;\ntype SQLAlias = SQL;\ntype SQLGen = Gen<SQL> | SQL;\ntype NumberGen = Gen<number> | number;\ntype CursorValue = Array<mixed>;\ntype CursorComparator = (val: CursorValue, isAfter: boolean) => void;\n\nexport type QueryBuilderOptions = {\n supportsJSONB?: boolean, // Defaults to true\n};\n\nfunction escapeLarge(sqlFragment: SQL, type: PgType) {\n const actualType = type.domainBaseType || type;\n if (actualType.category === \"N\") {\n if (\n [\n \"21\" /* int2 */,\n \"23\" /* int4 */,\n \"700\" /* float4 */,\n \"701\" /* float8 */,\n \"24\" /* regproc */,\n \"2202\" /* regprocedure */,\n \"2203\" /* regoper */,\n \"2204\" /* regoperator */,\n \"2205\" /* regclass */,\n \"2206\" /* regtype */,\n \"4096\" /* regrole */,\n \"4089\" /* regnamespace */,\n \"3734\" /* regconfig */,\n \"3769\" /* regdictionary */,\n ].includes(actualType.id)\n ) {\n // No need for special handling\n return sqlFragment;\n }\n // Otherwise force the id to be a string\n return sql.fragment`((${sqlFragment})::numeric)::text`;\n }\n return sqlFragment;\n}\n\nclass QueryBuilder {\n parentQueryBuilder: QueryBuilder | void;\n context: GraphQLContext;\n rootValue: any; // eslint-disable-line flowtype/no-weak-types\n supportsJSONB: boolean;\n locks: {\n [string]: false | true | string,\n };\n finalized: boolean;\n selectedIdentifiers: boolean;\n data: {\n cursorPrefix: Array<string>,\n fixedSelectExpression: ?SQLGen,\n select: Array<[SQLGen, RawAlias]>,\n selectCursor: ?SQLGen,\n from: ?[SQLGen, SQLAlias],\n join: Array<SQLGen>,\n where: Array<SQLGen>,\n whereBound: {\n lower: Array<SQLGen>,\n upper: Array<SQLGen>,\n },\n orderBy: Array<[SQLGen, boolean, boolean | null]>,\n orderIsUnique: boolean,\n limit: ?NumberGen,\n offset: ?NumberGen,\n first: ?number,\n last: ?number,\n beforeLock: {\n [string]: Array<() => void> | null,\n },\n cursorComparator: ?CursorComparator,\n liveConditions: Array<\n // eslint-disable-next-line flowtype/no-weak-types\n [(data: {}) => (record: any) => boolean, { [key: string]: SQL } | void]\n >,\n };\n compiledData: {\n cursorPrefix: Array<string>,\n fixedSelectExpression: ?SQL,\n select: Array<[SQL, RawAlias]>,\n selectCursor: ?SQL,\n from: ?[SQL, SQLAlias],\n join: Array<SQL>,\n where: Array<SQL>,\n whereBound: {\n lower: Array<SQL>,\n upper: Array<SQL>,\n },\n orderBy: Array<[SQL, boolean, boolean | null]>,\n orderIsUnique: boolean,\n limit: ?number,\n offset: ?number,\n first: ?number,\n last: ?number,\n cursorComparator: ?CursorComparator,\n };\n lockContext: {\n queryBuilder: QueryBuilder,\n };\n _children: Map<RawAlias, QueryBuilder>;\n\n constructor(\n options: QueryBuilderOptions = {},\n context: GraphQLContext = {},\n rootValue?: any // eslint-disable-line flowtype/no-weak-types\n ) {\n this.context = context || {};\n this.rootValue = rootValue;\n this.supportsJSONB =\n typeof options.supportsJSONB === \"undefined\" ||\n options.supportsJSONB === null\n ? true\n : !!options.supportsJSONB;\n\n this.locks = {\n // As a performance optimisation, we're going to list a number of lock\n // types so that V8 doesn't need to mutate the object too much\n cursorComparator: false,\n fixedSelectExpression: false,\n select: false,\n selectCursor: false,\n from: false,\n join: false,\n whereBound: false,\n where: false,\n orderBy: false,\n orderIsUnique: false,\n first: false,\n last: false,\n limit: false,\n offset: false,\n };\n this.finalized = false;\n this.selectedIdentifiers = false;\n this.data = {\n // TODO: refactor `cursorPrefix`, it shouldn't be here (or should at least have getters/setters)\n cursorPrefix: [\"natural\"],\n fixedSelectExpression: null,\n select: [],\n selectCursor: null,\n from: null,\n join: [],\n where: [],\n whereBound: {\n lower: [],\n upper: [],\n },\n orderBy: [],\n orderIsUnique: false,\n limit: null,\n offset: null,\n first: null,\n last: null,\n beforeLock: {\n // As a performance optimisation, we're going to list a number of lock\n // types so that V8 doesn't need to mutate the object too much\n cursorComparator: [],\n fixedSelectExpression: [],\n select: [],\n selectCursor: [],\n from: [],\n join: [],\n whereBound: [],\n where: [],\n orderBy: [],\n orderIsUnique: [],\n first: [],\n last: [],\n limit: [],\n offset: [],\n },\n cursorComparator: null,\n liveConditions: [],\n };\n this.compiledData = {\n cursorPrefix: [\"natural\"],\n fixedSelectExpression: null,\n select: [],\n selectCursor: null,\n from: null,\n join: [],\n where: [],\n whereBound: {\n lower: [],\n upper: [],\n },\n orderBy: [],\n orderIsUnique: false,\n limit: null,\n offset: null,\n first: null,\n last: null,\n cursorComparator: null,\n };\n this._children = new Map();\n this.beforeLock(\"select\", () => {\n this.lock(\"selectCursor\");\n if (this.compiledData.selectCursor) {\n this.select(this.compiledData.selectCursor, \"__cursor\");\n }\n });\n // 'whereBound' and 'natural' order might set offset/limit\n this.beforeLock(\"where\", () => {\n this.lock(\"whereBound\");\n });\n this.beforeLock(\"offset\", () => {\n this.lock(\"whereBound\");\n });\n this.beforeLock(\"limit\", () => {\n this.lock(\"whereBound\");\n });\n this.beforeLock(\"first\", () => {\n this.lock(\"limit\");\n this.lock(\"offset\");\n });\n this.beforeLock(\"last\", () => {\n this.lock(\"limit\");\n this.lock(\"offset\");\n });\n this.lockContext = Object.freeze({\n queryBuilder: this,\n });\n }\n\n // ----------------------------------------\n\n // Helper function\n jsonbBuildObject(fields: Array<[SQL, RawAlias]>) {\n if (this.supportsJSONB && fields.length > 50) {\n const fieldsChunks = chunk(fields, 50);\n const chunkToJson = fieldsChunk =>\n sql.fragment`jsonb_build_object(${sql.join(\n fieldsChunk.map(\n ([expr, alias]) =>\n sql.fragment`${sql.literal(alias)}::text, ${expr}`\n ),\n \", \"\n )})`;\n return sql.fragment`(${sql.join(\n fieldsChunks.map(chunkToJson),\n \" || \"\n )})::json`;\n } else {\n // PG9.4 will have issues with more than 100 parameters (50 keys)\n return sql.fragment`json_build_object(${sql.join(\n fields.map(\n ([expr, alias]) => sql.fragment`${sql.literal(alias)}::text, ${expr}`\n ),\n \", \"\n )})`;\n }\n }\n\n // ----------------------------------------\n\n beforeLock(field: string, fn: () => void) {\n this.checkLock(field);\n if (!this.data.beforeLock[field]) {\n this.data.beforeLock[field] = [];\n }\n // $FlowFixMe: this is guaranteed to be set, due to the if statement above\n this.data.beforeLock[field].push(fn);\n }\n\n makeLiveCollection(\n table: PgClass,\n // eslint-disable-next-line flowtype/no-weak-types\n cb?: (checker: (data: any) => (record: any) => boolean) => void\n ) {\n /* the actual condition doesn't matter hugely, 'select' should work */\n if (!this.rootValue || !this.rootValue.liveConditions) return;\n const liveConditions = this.data.liveConditions;\n const checkerGenerator = data => {\n // Compute this once.\n const checkers = liveConditions.map(([checkerGenerator]) =>\n checkerGenerator(data)\n );\n return record => checkers.every(checker => checker(record));\n };\n if (this.parentQueryBuilder) {\n const parentQueryBuilder = this.parentQueryBuilder;\n if (cb) {\n throw new Error(\n \"Either use parentQueryBuilder or pass callback, not both.\"\n );\n }\n parentQueryBuilder.beforeLock(\"select\", () => {\n const id = this.rootValue.liveConditions.push(checkerGenerator) - 1;\n // BEWARE: it's easy to override others' conditions, and that will cause issues. Be sensible.\n const allRequirements = this.data.liveConditions.reduce(\n (memo, [_checkerGenerator, requirements]) =>\n requirements ? Object.assign(memo, requirements) : memo,\n {}\n );\n parentQueryBuilder.select(\n sql.fragment`\\\njson_build_object('__id', ${sql.value(id)}::int\n${sql.join(\n Object.keys(allRequirements).map(\n key => sql.fragment`, ${sql.literal(key)}::text, ${allRequirements[key]}`\n ),\n \"\"\n)})`,\n \"__live\"\n );\n });\n } else if (cb) {\n cb(checkerGenerator);\n } else {\n throw new Error(\n \"makeLiveCollection was called without parentQueryBuilder and without callback\"\n );\n }\n }\n\n addLiveCondition(\n // eslint-disable-next-line flowtype/no-weak-types\n checkerGenerator: (data: {}) => (record: any) => boolean,\n requirements?: { [key: string]: SQL }\n ) {\n if (requirements && !this.parentQueryBuilder) {\n throw new Error(\n \"There's no parentQueryBuilder, so there cannot be requirements\"\n );\n }\n this.data.liveConditions.push([checkerGenerator, requirements]);\n }\n\n setCursorComparator(fn: CursorComparator) {\n this.checkLock(\"cursorComparator\");\n this.data.cursorComparator = fn;\n this.lock(\"cursorComparator\");\n }\n addCursorCondition(cursorValue: CursorValue, isAfter: boolean) {\n this.beforeLock(\"whereBound\", () => {\n this.lock(\"cursorComparator\");\n if (!this.compiledData.cursorComparator) {\n throw new Error(\"No cursor comparator was set!\");\n }\n this.compiledData.cursorComparator(cursorValue, isAfter);\n });\n }\n /** this method is experimental */\n fixedSelectExpression(exprGen: SQLGen) {\n this.checkLock(\"fixedSelectExpression\");\n this.lock(\"select\");\n this.lock(\"selectCursor\");\n if (this.data.select.length > 0) {\n throw new Error(\"Cannot use .fixedSelectExpression() with .select()\");\n }\n if (this.data.selectCursor) {\n throw new Error(\n \"Cannot use .fixedSelectExpression() with .selectCursor()\"\n );\n }\n this.data.fixedSelectExpression = exprGen;\n }\n select(exprGen: SQLGen, alias: RawAlias) {\n this.checkLock(\"select\");\n this.lock(\"fixedSelectExpression\");\n if (typeof alias === \"string\") {\n // To protect against vulnerabilities such as\n //\n // https://github.com/brianc/node-postgres/issues/1408\n //\n // we need to ensure column names are safe. Turns out that GraphQL\n // aliases are fairly strict (`[_A-Za-z][_0-9A-Za-z]*`) anyway:\n //\n // https://github.com/graphql/graphql-js/blob/680685dd14bd52c6475305e150e5f295ead2aa7e/src/language/lexer.js#L551-L581\n //\n // so this should not cause any issues in practice.\n if (/^(\\$+|@+|[_A-Za-z])[_0-9A-Za-z]*$/.test(alias) !== true) {\n throw new Error(`Disallowed alias '${alias}'.`);\n }\n }\n this.data.select.push([exprGen, alias]);\n }\n selectIdentifiers(table: PgClass) {\n if (this.selectedIdentifiers) return;\n const primaryKey = table.primaryKeyConstraint;\n if (!primaryKey) return;\n const primaryKeys = primaryKey.keyAttributes;\n this.select(\n sql.fragment`json_build_array(${sql.join(\n primaryKeys.map(key =>\n escapeLarge(\n sql.fragment`${this.getTableAlias()}.${sql.identifier(key.name)}`,\n key.type\n )\n ),\n \", \"\n )})`,\n \"__identifiers\"\n );\n this.selectedIdentifiers = true;\n }\n selectCursor(exprGen: SQLGen) {\n this.checkLock(\"selectCursor\");\n this.lock(\"fixedSelectExpression\");\n this.data.selectCursor = exprGen;\n }\n from(expr: SQLGen, alias?: SQLAlias = sql.identifier(Symbol())) {\n this.checkLock(\"from\");\n if (!expr) {\n throw new Error(\"No from table source!\");\n }\n if (!alias) {\n throw new Error(\"No from alias!\");\n }\n this.data.from = [expr, alias];\n this.lock(\"from\");\n }\n // XXX: join\n where(exprGen: SQLGen) {\n this.checkLock(\"where\");\n this.data.where.push(exprGen);\n }\n whereBound(exprGen: SQLGen, isLower: boolean) {\n if (typeof isLower !== \"boolean\") {\n throw new Error(\"isLower must be specified as a boolean\");\n }\n this.checkLock(\"whereBound\");\n this.data.whereBound[isLower ? \"lower\" : \"upper\"].push(exprGen);\n }\n setOrderIsUnique() {\n this.data.orderIsUnique = true;\n }\n orderBy(\n exprGen: SQLGen,\n ascending: boolean = true,\n nullsFirst: boolean | null = null\n ) {\n this.checkLock(\"orderBy\");\n this.data.orderBy.push([exprGen, ascending, nullsFirst]);\n }\n limit(limitGen: NumberGen) {\n this.checkLock(\"limit\");\n\n if (this.data.limit != null) {\n throw new Error(\"Must only set limit once\");\n }\n this.data.limit = limitGen;\n }\n offset(offsetGen: NumberGen) {\n this.checkLock(\"offset\");\n if (this.data.offset != null) {\n // Add the offsets together (this should be able to recurse)\n const previous = this.data.offset;\n this.data.offset = context => {\n return (\n callIfNecessary(previous, context) +\n callIfNecessary(offsetGen, context)\n );\n };\n } else {\n this.data.offset = offsetGen;\n }\n }\n first(first: number) {\n this.checkLock(\"first\");\n if (this.data.first != null) {\n throw new Error(\"Must only set first once\");\n }\n this.data.first = first;\n }\n last(last: number) {\n this.checkLock(\"last\");\n if (this.data.last != null) {\n throw new Error(\"Must only set last once\");\n }\n this.data.last = last;\n }\n\n // ----------------------------------------\n\n isOrderUnique(lock?: boolean = true) {\n if (lock) {\n this.lock(\"orderBy\");\n this.lock(\"orderIsUnique\");\n return this.compiledData.orderIsUnique;\n } else {\n // This is useful inside `beforeLock(\"orderBy\", ...)` calls\n return this.data.orderIsUnique;\n }\n }\n getTableExpression(): SQL {\n this.lock(\"from\");\n if (!this.compiledData.from) {\n throw new Error(\"No from table has been supplied\");\n }\n return this.compiledData.from[0];\n }\n getTableAlias(): SQL {\n this.lock(\"from\");\n if (!this.compiledData.from) {\n throw new Error(\"No from table has been supplied\");\n }\n return this.compiledData.from[1];\n }\n getSelectCursor() {\n this.lock(\"selectCursor\");\n return this.compiledData.selectCursor;\n }\n getOffset() {\n this.lock(\"offset\");\n return this.compiledData.offset || 0;\n }\n getFinalLimitAndOffset() {\n this.lock(\"offset\");\n this.lock(\"limit\");\n this.lock(\"first\");\n this.lock(\"last\");\n let limit = this.compiledData.limit;\n let offset = this.compiledData.offset || 0;\n let flip = false;\n if (this.compiledData.first != null) {\n if (limit != null) {\n limit = Math.min(limit, this.compiledData.first);\n } else {\n limit = this.compiledData.first;\n }\n }\n if (this.compiledData.last != null) {\n if (offset > 0 && limit != null) {\n throw new Error(\n \"Issue within pagination, please report your query to graphile-build\"\n );\n }\n if (limit != null) {\n if (this.compiledData.last < limit) {\n offset = limit - this.compiledData.last;\n limit = this.compiledData.last;\n } else {\n // no need to change anything\n }\n } else if (offset > 0) {\n throw new Error(\"Cannot combine 'last' and 'offset'\");\n } else {\n if (this.compiledData.orderBy.length > 0) {\n flip = true;\n limit = this.compiledData.last;\n } else {\n throw new Error(\"Cannot do last of an unordered set\");\n }\n }\n }\n return {\n limit,\n offset,\n flip,\n };\n }\n getFinalOffset() {\n return this.getFinalLimitAndOffset().offset;\n }\n getFinalLimit() {\n return this.getFinalLimitAndOffset().limit;\n }\n getOrderByExpressionsAndDirections() {\n this.lock(\"orderBy\");\n return this.compiledData.orderBy;\n }\n getSelectFieldsCount() {\n this.lockEverything();\n return this.compiledData.select.length;\n }\n buildSelectFields() {\n this.lockEverything();\n if (this.compiledData.fixedSelectExpression) {\n return this.compiledData.fixedSelectExpression;\n }\n return sql.join(\n this.compiledData.select.map(\n ([sqlFragment, alias]) =>\n sql.fragment`to_json(${sqlFragment}) as ${sql.identifier(alias)}`\n ),\n \", \"\n );\n }\n buildSelectJson({\n addNullCase,\n addNotDistinctFromNullCase,\n }: {\n addNullCase?: boolean,\n addNotDistinctFromNullCase?: boolean,\n }) {\n this.lockEverything();\n let buildObject = this.compiledData.select.length\n ? this.jsonbBuildObject(this.compiledData.select)\n : sql.fragment`to_json(${this.getTableAlias()})`;\n if (addNotDistinctFromNullCase) {\n /*\n * `is null` is not sufficient here because the record might exist but\n * have null as each of its values; so we use `is not distinct from null`\n * to assert that the record itself doesn't exist. This is typically used\n * with column values.\n */\n buildObject = sql.fragment`(case when (${this.getTableAlias()} is not distinct from null) then null else ${buildObject} end)`;\n } else if (addNullCase) {\n /*\n * `is null` is probably used here because it's the result of a function;\n * functions seem to have trouble differentiating between `null::my_type`\n * and `(null,null,null)::my_type`, always opting for the latter which\n * then causes issues with the `GraphQLNonNull`s in the schema.\n */\n buildObject = sql.fragment`(case when (${this.getTableAlias()} is null) then null else ${buildObject} end)`;\n }\n return buildObject;\n }\n buildWhereBoundClause(isLower: boolean) {\n this.lock(\"whereBound\");\n const clauses = this.compiledData.whereBound[isLower ? \"lower\" : \"upper\"];\n if (clauses.length) {\n return sql.fragment`(${sql.join(clauses, \") and (\")})`;\n } else {\n return sql.literal(true);\n }\n }\n buildWhereClause(\n includeLowerBound: boolean,\n includeUpperBound: boolean,\n {\n addNullCase,\n addNotDistinctFromNullCase,\n }: { addNullCase?: boolean, addNotDistinctFromNullCase?: boolean }\n ) {\n this.lock(\"where\");\n const clauses = [\n /*\n * Okay... so this is quite interesting. When we're talking about\n * composite types, `(foo is not null)` and `not (foo is null)` are NOT\n * equivalent! Here's why:\n *\n * `(foo is null)`\n * true if every field of the row is null\n *\n * `(foo is not null)`\n * true if every field of the row is not null\n *\n * `not (foo is null)`\n * true if there's at least one field that is not null\n *\n * `is [not] distinct from null` does differentiate between these cases,\n * but when a function returns something like `select * from my_table\n * where false`, it actually returns `(null, null, null)::my_table`,\n * which will cause issues when we apply the `GraphQLNonNull` constraints\n * to the results - we want to treat this as null.\n *\n * So don't \"simplify\" the line below! We're probably checking if the\n * result of a function call returning a compound type was indeed null.\n */\n ...(addNotDistinctFromNullCase\n ? [sql.fragment`(${this.getTableAlias()} is distinct from null)`]\n : addNullCase\n ? [sql.fragment`not (${this.getTableAlias()} is null)`]\n : []),\n ...this.compiledData.where,\n ...(includeLowerBound ? [this.buildWhereBoundClause(true)] : []),\n ...(includeUpperBound ? [this.buildWhereBoundClause(false)] : []),\n ];\n return clauses.length\n ? sql.fragment`(${sql.join(clauses, \") and (\")})`\n : sql.fragment`1 = 1`;\n }\n build(\n options: {\n asJson?: boolean,\n asJsonAggregate?: boolean,\n onlyJsonField?: boolean,\n addNullCase?: boolean,\n addNotDistinctFromNullCase?: boolean,\n useAsterisk?: boolean,\n } = {}\n ) {\n this.lockEverything();\n\n if (this.compiledData.fixedSelectExpression) {\n if (Object.keys(options).length > 0) {\n throw new Error(\n \"Do not pass options to QueryBuilder.build() when using `buildNamedChildSelecting`\"\n );\n }\n }\n const {\n asJson = false,\n asJsonAggregate = false,\n onlyJsonField = false,\n addNullCase = false,\n addNotDistinctFromNullCase = false,\n useAsterisk = false,\n } = options;\n\n if (onlyJsonField) {\n return this.buildSelectJson({ addNullCase, addNotDistinctFromNullCase });\n }\n const { limit, offset, flip } = this.getFinalLimitAndOffset();\n const fields =\n asJson || asJsonAggregate\n ? sql.fragment`${this.buildSelectJson({\n addNullCase,\n addNotDistinctFromNullCase,\n })} as object`\n : this.buildSelectFields();\n\n let fragment = sql.fragment`\\\nselect ${useAsterisk ? sql.fragment`${this.getTableAlias()}.*` : fields}\n${\n this.compiledData.from &&\n sql.fragment`from ${this.compiledData.from[0]} as ${this.getTableAlias()}`\n}\n${this.compiledData.join.length && sql.join(this.compiledData.join, \" \")}\nwhere ${this.buildWhereClause(true, true, options)}\n${\n this.compiledData.orderBy.length\n ? sql.fragment`order by ${sql.join(\n this.compiledData.orderBy.map(\n ([expr, ascending, nullsFirst]) =>\n sql.fragment`${expr} ${\n Number(ascending) ^ Number(flip)\n ? sql.fragment`ASC`\n : sql.fragment`DESC`\n }${\n nullsFirst === true\n ? sql.fragment` NULLS FIRST`\n : nullsFirst === false\n ? sql.fragment` NULLS LAST`\n : null\n }`\n ),\n \",\"\n )}`\n : \"\"\n}\n${isSafeInteger(limit) && sql.fragment`limit ${sql.literal(limit)}`}\n${offset && sql.fragment`offset ${sql.literal(offset)}`}`;\n if (flip) {\n const flipAlias = Symbol();\n fragment = sql.fragment`\\\nwith ${sql.identifier(flipAlias)} as (\n ${fragment}\n)\nselect *\nfrom ${sql.identifier(flipAlias)}\norder by (row_number() over (partition by 1)) desc`; /* We don't need to factor useAsterisk into this row_number() usage */\n }\n if (useAsterisk) {\n /*\n * NOTE[useAsterisk/row_number]: since LIMIT/OFFSET is inside this\n * subquery, row_number() outside of this subquery WON'T include the\n * offset. We must add it back wherever row_number() is used.\n */\n fragment = sql.fragment`select ${fields} from (${fragment}) ${this.getTableAlias()}`;\n }\n if (asJsonAggregate) {\n const aggAlias = Symbol();\n fragment = sql.fragment`select json_agg(${sql.identifier(\n aggAlias,\n \"object\"\n )}) from (${fragment}) as ${sql.identifier(aggAlias)}`;\n fragment = sql.fragment`select coalesce((${fragment}), '[]'::json)`;\n }\n return fragment;\n }\n\n // ----------------------------------------\n\n _finalize() {\n this.finalized = true;\n }\n lock(type: string) {\n if (this.locks[type]) return;\n const context = this.lockContext;\n const { beforeLock } = this.data;\n let locks = beforeLock[type];\n if (locks) {\n beforeLock[type] = [];\n for (let i = 0, l = locks.length; i < l; i++) {\n locks[i]();\n }\n }\n if (type !== \"select\") {\n this.locks[type] = isDev ? new Error(\"Initally locked here\").stack : true;\n }\n if (type === \"cursorComparator\") {\n // It's meant to be a function\n this.compiledData[type] = this.data[type];\n } else if (type === \"whereBound\") {\n // Handle properties separately\n this.compiledData[type].lower = callIfNecessaryArray(\n this.data[type].lower,\n context\n );\n this.compiledData[type].upper = callIfNecessaryArray(\n this.data[type].upper,\n context\n );\n } else if (type === \"fixedSelectExpression\") {\n this.compiledData[type] = callIfNecessary(this.data[type], context);\n } else if (type === \"select\") {\n /*\n * NOTICE: locking select can cause additional selects to be added, so the\n * length of this.data[type] may increase during the operation. This is\n * why we handle this.locks[type] separately.\n */\n\n // Assume that duplicate fields must be identical, don't output the same\n // key multiple times\n const seenFields: { [key: string | Symbol]: true } = {};\n const data = [];\n const selects = this.data[type];\n\n // DELIBERATE slow loop, see NOTICE above\n for (let i = 0; i < selects.length; i++) {\n const [valueOrGenerator, columnName] = selects[i];\n if (!seenFields[columnName]) {\n seenFields[columnName] = true;\n data.push([callIfNecessary(valueOrGenerator, context), columnName]);\n locks = beforeLock[type];\n if (locks) {\n beforeLock[type] = [];\n for (let i = 0, l = locks.length; i < l; i++) {\n locks[i]();\n }\n }\n }\n }\n this.locks[type] = isDev ? new Error(\"Initally locked here\").stack : true;\n this.compiledData[type] = data;\n } else if (type === \"orderBy\") {\n this.compiledData[type] = this.data[type].map(([a, b, c]) => [\n callIfNecessary(a, context),\n b,\n c,\n ]);\n } else if (type === \"from\") {\n if (this.data.from) {\n const f = this.data.from;\n this.compiledData.from = [callIfNecessary(f[0], context), f[1]];\n }\n } else if (type === \"join\" || type === \"where\") {\n this.compiledData[type] = callIfNecessaryArray(this.data[type], context);\n } else if (type === \"selectCursor\") {\n this.compiledData[type] = callIfNecessary(this.data[type], context);\n } else if (type === \"cursorPrefix\") {\n this.compiledData[type] = this.data[type];\n } else if (type === \"orderIsUnique\") {\n this.compiledData[type] = this.data[type];\n } else if (type === \"limit\") {\n this.compiledData[type] = callIfNecessary(this.data[type], context);\n } else if (type === \"offset\") {\n this.compiledData[type] = callIfNecessary(this.data[type], context);\n } else if (type === \"first\") {\n this.compiledData[type] = this.data[type];\n } else if (type === \"last\") {\n this.compiledData[type] = this.data[type];\n } else {\n throw new Error(`Wasn't expecting to lock '${type}'`);\n }\n }\n checkLock(type: string) {\n if (this.locks[type]) {\n if (typeof this.locks[type] === \"string\") {\n throw new Error(\n `'${type}' has already been locked\\n ` +\n this.locks[type].replace(/\\n/g, \"\\n \") +\n \"\\n\"\n );\n }\n throw new Error(`'${type}' has already been locked`);\n }\n }\n lockEverything() {\n this._finalize();\n // We must execute everything after `from` so we have the alias to reference\n this.lock(\"from\");\n this.lock(\"join\");\n this.lock(\"orderBy\");\n // We must execute where after orderBy because cursor queries require all orderBy columns\n this.lock(\"cursorComparator\");\n this.lock(\"whereBound\");\n this.lock(\"where\");\n // 'where' -> 'whereBound' can affect 'offset'/'limit'\n this.lock(\"offset\");\n this.lock(\"limit\");\n this.lock(\"first\");\n this.lock(\"last\");\n // We must execute select after orderBy otherwise we cannot generate a cursor\n this.lock(\"fixedSelectExpression\");\n this.lock(\"selectCursor\");\n this.lock(\"select\");\n }\n /** this method is experimental */\n buildChild() {\n const options = { supportsJSONB: this.supportsJSONB };\n const child = new QueryBuilder(options, this.context, this.rootValue);\n child.parentQueryBuilder = this;\n return child;\n }\n /** this method is experimental */\n buildNamedChildSelecting(\n name: RawAlias,\n from: SQLGen,\n selectExpression: SQLGen,\n alias?: SQLAlias\n ) {\n if (this._children.has(name)) {\n throw new Error(\n `QueryBuilder already has a child named ${name.toString()}`\n );\n }\n const child = this.buildChild();\n child.from(from, alias);\n child.fixedSelectExpression(selectExpression);\n this._children.set(name, child);\n return child;\n }\n /** this method is experimental */\n getNamedChild(name: string) {\n return this._children.get(name);\n }\n}\n\nexport default QueryBuilder;\n"],"file":"QueryBuilder.js"}
1
+ {"version":3,"sources":["../src/QueryBuilder.js"],"names":["isDev","process","env","POSTGRAPHILE_ENV","callIfNecessary","o","context","callIfNecessaryArray","Array","isArray","map","v","escapeLarge","sqlFragment","type","actualType","domainBaseType","category","includes","id","sql","fragment","QueryBuilder","constructor","options","rootValue","supportsJSONB","locks","cursorComparator","fixedSelectExpression","select","selectCursor","from","join","whereBound","where","orderBy","orderIsUnique","first","last","limit","offset","finalized","selectedIdentifiers","data","cursorPrefix","lower","upper","beforeLock","liveConditions","compiledData","_children","Map","lock","lockContext","Object","freeze","queryBuilder","jsonbBuildObject","fields","length","fieldsChunks","chunkToJson","fieldsChunk","expr","alias","literal","field","fn","checkLock","push","makeLiveCollection","table","cb","checkerGenerator","checkers","record","every","checker","parentQueryBuilder","Error","allRequirements","reduce","memo","_checkerGenerator","requirements","assign","value","keys","key","addLiveCondition","setCursorComparator","addCursorCondition","cursorValue","isAfter","exprGen","test","selectIdentifiers","primaryKey","primaryKeyConstraint","primaryKeys","keyAttributes","getTableAlias","identifier","name","Symbol","isLower","setOrderIsUnique","ascending","nullsFirst","limitGen","offsetGen","previous","isOrderUnique","getTableExpression","getSelectCursor","getOffset","getFinalLimitAndOffset","flip","Math","min","getFinalOffset","getFinalLimit","getOrderByExpressionsAndDirections","getSelectFieldsCount","lockEverything","buildSelectFields","buildSelectJson","addNullCase","addNotDistinctFromNullCase","buildObject","buildWhereBoundClause","clauses","buildWhereClause","includeLowerBound","includeUpperBound","build","asJson","asJsonAggregate","onlyJsonField","useAsterisk","Number","flipAlias","aggAlias","_finalize","i","l","stack","seenFields","selects","valueOrGenerator","columnName","a","b","c","f","replace","buildChild","child","buildNamedChildSelecting","selectExpression","has","toString","set","getNamedChild","get"],"mappings":"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","sourcesContent":["// @flow\nimport * as sql from \"pg-sql2\";\nimport type { SQL } from \"pg-sql2\";\nimport isSafeInteger from \"lodash/isSafeInteger\";\nimport chunk from \"lodash/chunk\";\nimport type { PgClass, PgType } from \"./plugins/PgIntrospectionPlugin\";\n\n// eslint-disable-next-line flowtype/no-weak-types\ntype GraphQLContext = any;\n\nconst isDev = process.env.POSTGRAPHILE_ENV === \"development\";\n\ntype GenContext = {\n queryBuilder: QueryBuilder,\n};\ntype Gen<T> = (context: GenContext) => T;\n\n// Importantly, this cannot include a function\ntype CallResult = null | string | number | boolean | SQL;\n\nfunction callIfNecessary<T: CallResult>(o: Gen<T> | T, context: GenContext): T {\n if (typeof o === \"function\") {\n return o(context);\n } else {\n return o;\n }\n}\n\nfunction callIfNecessaryArray<T: CallResult>(\n o: Array<Gen<T> | T>,\n context: GenContext\n): Array<T> {\n if (Array.isArray(o)) {\n return o.map(v => callIfNecessary(v, context));\n } else {\n return o;\n }\n}\n\nexport type RawAlias = Symbol | string;\ntype SQLAlias = SQL;\ntype SQLGen = Gen<SQL> | SQL;\ntype NumberGen = Gen<number> | number;\ntype CursorValue = Array<mixed>;\ntype CursorComparator = (val: CursorValue, isAfter: boolean) => void;\n\nexport type QueryBuilderOptions = {\n supportsJSONB?: boolean, // Defaults to true\n};\n\nfunction escapeLarge(sqlFragment: SQL, type: PgType) {\n const actualType = type.domainBaseType || type;\n if (actualType.category === \"N\") {\n if (\n [\n \"21\" /* int2 */,\n \"23\" /* int4 */,\n \"700\" /* float4 */,\n \"701\" /* float8 */,\n \"24\" /* regproc */,\n \"2202\" /* regprocedure */,\n \"2203\" /* regoper */,\n \"2204\" /* regoperator */,\n \"2205\" /* regclass */,\n \"2206\" /* regtype */,\n \"4096\" /* regrole */,\n \"4089\" /* regnamespace */,\n \"3734\" /* regconfig */,\n \"3769\" /* regdictionary */,\n ].includes(actualType.id)\n ) {\n // No need for special handling\n return sqlFragment;\n }\n // Otherwise force the id to be a string\n return sql.fragment`((${sqlFragment})::numeric)::text`;\n }\n return sqlFragment;\n}\n\nclass QueryBuilder {\n parentQueryBuilder: QueryBuilder | void;\n context: GraphQLContext;\n rootValue: any; // eslint-disable-line flowtype/no-weak-types\n supportsJSONB: boolean;\n locks: {\n [string]: false | true | string,\n };\n finalized: boolean;\n selectedIdentifiers: boolean;\n data: {\n cursorPrefix: Array<string>,\n fixedSelectExpression: ?SQLGen,\n select: Array<[SQLGen, RawAlias]>,\n selectCursor: ?SQLGen,\n from: ?[SQLGen, SQLAlias],\n join: Array<SQLGen>,\n where: Array<SQLGen>,\n whereBound: {\n lower: Array<SQLGen>,\n upper: Array<SQLGen>,\n },\n orderBy: Array<[SQLGen, boolean, boolean | null]>,\n orderIsUnique: boolean,\n limit: ?NumberGen,\n offset: ?NumberGen,\n first: ?number,\n last: ?number,\n beforeLock: {\n [string]: Array<() => void> | null,\n },\n cursorComparator: ?CursorComparator,\n liveConditions: Array<\n // eslint-disable-next-line flowtype/no-weak-types\n [(data: {}) => (record: any) => boolean, { [key: string]: SQL } | void]\n >,\n };\n compiledData: {\n cursorPrefix: Array<string>,\n fixedSelectExpression: ?SQL,\n select: Array<[SQL, RawAlias]>,\n selectCursor: ?SQL,\n from: ?[SQL, SQLAlias],\n join: Array<SQL>,\n where: Array<SQL>,\n whereBound: {\n lower: Array<SQL>,\n upper: Array<SQL>,\n },\n orderBy: Array<[SQL, boolean, boolean | null]>,\n orderIsUnique: boolean,\n limit: ?number,\n offset: ?number,\n first: ?number,\n last: ?number,\n cursorComparator: ?CursorComparator,\n };\n lockContext: {\n queryBuilder: QueryBuilder,\n };\n _children: Map<RawAlias, QueryBuilder>;\n\n constructor(\n options: QueryBuilderOptions = {},\n context: GraphQLContext = {},\n rootValue?: any // eslint-disable-line flowtype/no-weak-types\n ) {\n this.context = context || {};\n this.rootValue = rootValue;\n this.supportsJSONB =\n typeof options.supportsJSONB === \"undefined\" ||\n options.supportsJSONB === null\n ? true\n : !!options.supportsJSONB;\n\n this.locks = {\n // As a performance optimisation, we're going to list a number of lock\n // types so that V8 doesn't need to mutate the object too much\n cursorComparator: false,\n fixedSelectExpression: false,\n select: false,\n selectCursor: false,\n from: false,\n join: false,\n whereBound: false,\n where: false,\n orderBy: false,\n orderIsUnique: false,\n first: false,\n last: false,\n limit: false,\n offset: false,\n };\n this.finalized = false;\n this.selectedIdentifiers = false;\n this.data = {\n // TODO: refactor `cursorPrefix`, it shouldn't be here (or should at least have getters/setters)\n cursorPrefix: [\"natural\"],\n fixedSelectExpression: null,\n select: [],\n selectCursor: null,\n from: null,\n join: [],\n where: [],\n whereBound: {\n lower: [],\n upper: [],\n },\n orderBy: [],\n orderIsUnique: false,\n limit: null,\n offset: null,\n first: null,\n last: null,\n beforeLock: {\n // As a performance optimisation, we're going to list a number of lock\n // types so that V8 doesn't need to mutate the object too much\n cursorComparator: [],\n fixedSelectExpression: [],\n select: [],\n selectCursor: [],\n from: [],\n join: [],\n whereBound: [],\n where: [],\n orderBy: [],\n orderIsUnique: [],\n first: [],\n last: [],\n limit: [],\n offset: [],\n },\n cursorComparator: null,\n liveConditions: [],\n };\n this.compiledData = {\n cursorPrefix: [\"natural\"],\n fixedSelectExpression: null,\n select: [],\n selectCursor: null,\n from: null,\n join: [],\n where: [],\n whereBound: {\n lower: [],\n upper: [],\n },\n orderBy: [],\n orderIsUnique: false,\n limit: null,\n offset: null,\n first: null,\n last: null,\n cursorComparator: null,\n };\n this._children = new Map();\n this.beforeLock(\"select\", () => {\n this.lock(\"selectCursor\");\n if (this.compiledData.selectCursor) {\n this.select(this.compiledData.selectCursor, \"__cursor\");\n }\n });\n // 'whereBound' and 'natural' order might set offset/limit\n this.beforeLock(\"where\", () => {\n this.lock(\"whereBound\");\n });\n this.beforeLock(\"offset\", () => {\n this.lock(\"whereBound\");\n });\n this.beforeLock(\"limit\", () => {\n this.lock(\"whereBound\");\n });\n this.beforeLock(\"first\", () => {\n this.lock(\"limit\");\n this.lock(\"offset\");\n });\n this.beforeLock(\"last\", () => {\n this.lock(\"limit\");\n this.lock(\"offset\");\n });\n this.lockContext = Object.freeze({\n queryBuilder: this,\n });\n }\n\n // ----------------------------------------\n\n // Helper function\n jsonbBuildObject(fields: Array<[SQL, RawAlias]>) {\n if (this.supportsJSONB && fields.length > 50) {\n const fieldsChunks = chunk(fields, 50);\n const chunkToJson = fieldsChunk =>\n sql.fragment`jsonb_build_object(${sql.join(\n fieldsChunk.map(\n ([expr, alias]) =>\n sql.fragment`${sql.literal(alias)}::text, ${expr}`\n ),\n \", \"\n )})`;\n return sql.fragment`(${sql.join(\n fieldsChunks.map(chunkToJson),\n \" || \"\n )})::json`;\n } else {\n // PG9.4 will have issues with more than 100 parameters (50 keys)\n return sql.fragment`json_build_object(${sql.join(\n fields.map(\n ([expr, alias]) => sql.fragment`${sql.literal(alias)}::text, ${expr}`\n ),\n \", \"\n )})`;\n }\n }\n\n // ----------------------------------------\n\n beforeLock(field: string, fn: () => void) {\n this.checkLock(field);\n if (!this.data.beforeLock[field]) {\n this.data.beforeLock[field] = [];\n }\n // $FlowFixMe: this is guaranteed to be set, due to the if statement above\n this.data.beforeLock[field].push(fn);\n }\n\n makeLiveCollection(\n table: PgClass,\n // eslint-disable-next-line flowtype/no-weak-types\n cb?: (checker: (data: any) => (record: any) => boolean) => void\n ) {\n /* the actual condition doesn't matter hugely, 'select' should work */\n if (!this.rootValue || !this.rootValue.liveConditions) return;\n const liveConditions = this.data.liveConditions;\n const checkerGenerator = data => {\n // Compute this once.\n const checkers = liveConditions.map(([checkerGenerator]) =>\n checkerGenerator(data)\n );\n return record => checkers.every(checker => checker(record));\n };\n if (this.parentQueryBuilder) {\n const parentQueryBuilder = this.parentQueryBuilder;\n if (cb) {\n throw new Error(\n \"Either use parentQueryBuilder or pass callback, not both.\"\n );\n }\n parentQueryBuilder.beforeLock(\"select\", () => {\n const id = this.rootValue.liveConditions.push(checkerGenerator) - 1;\n // BEWARE: it's easy to override others' conditions, and that will cause issues. Be sensible.\n const allRequirements = this.data.liveConditions.reduce(\n (memo, [_checkerGenerator, requirements]) =>\n requirements ? Object.assign(memo, requirements) : memo,\n {}\n );\n parentQueryBuilder.select(\n sql.fragment`\\\njson_build_object('__id', ${sql.value(id)}::int\n${sql.join(\n Object.keys(allRequirements).map(\n key => sql.fragment`, ${sql.literal(key)}::text, ${allRequirements[key]}`\n ),\n \"\"\n)})`,\n \"__live\"\n );\n });\n } else if (cb) {\n cb(checkerGenerator);\n } else {\n throw new Error(\n \"makeLiveCollection was called without parentQueryBuilder and without callback\"\n );\n }\n }\n\n addLiveCondition(\n // eslint-disable-next-line flowtype/no-weak-types\n checkerGenerator: (data: {}) => (record: any) => boolean,\n requirements?: { [key: string]: SQL }\n ) {\n if (requirements && !this.parentQueryBuilder) {\n throw new Error(\n \"There's no parentQueryBuilder, so there cannot be requirements\"\n );\n }\n this.data.liveConditions.push([checkerGenerator, requirements]);\n }\n\n setCursorComparator(fn: CursorComparator) {\n this.checkLock(\"cursorComparator\");\n this.data.cursorComparator = fn;\n this.lock(\"cursorComparator\");\n }\n addCursorCondition(cursorValue: CursorValue, isAfter: boolean) {\n this.beforeLock(\"whereBound\", () => {\n this.lock(\"cursorComparator\");\n if (!this.compiledData.cursorComparator) {\n throw new Error(\"No cursor comparator was set!\");\n }\n this.compiledData.cursorComparator(cursorValue, isAfter);\n });\n }\n /** this method is experimental */\n fixedSelectExpression(exprGen: SQLGen) {\n this.checkLock(\"fixedSelectExpression\");\n this.lock(\"select\");\n this.lock(\"selectCursor\");\n if (this.data.select.length > 0) {\n throw new Error(\"Cannot use .fixedSelectExpression() with .select()\");\n }\n if (this.data.selectCursor) {\n throw new Error(\n \"Cannot use .fixedSelectExpression() with .selectCursor()\"\n );\n }\n this.data.fixedSelectExpression = exprGen;\n }\n select(exprGen: SQLGen, alias: RawAlias) {\n this.checkLock(\"select\");\n this.lock(\"fixedSelectExpression\");\n if (typeof alias === \"string\") {\n // To protect against vulnerabilities such as\n //\n // https://github.com/brianc/node-postgres/issues/1408\n //\n // we need to ensure column names are safe. Turns out that GraphQL\n // aliases are fairly strict (`[_A-Za-z][_0-9A-Za-z]*`) anyway:\n //\n // https://github.com/graphql/graphql-js/blob/680685dd14bd52c6475305e150e5f295ead2aa7e/src/language/lexer.js#L551-L581\n //\n // so this should not cause any issues in practice.\n if (/^(\\$+|@+|[_A-Za-z])[_0-9A-Za-z]*$/.test(alias) !== true) {\n throw new Error(`Disallowed alias '${alias}'.`);\n }\n }\n this.data.select.push([exprGen, alias]);\n }\n selectIdentifiers(table: PgClass) {\n if (this.selectedIdentifiers) return;\n const primaryKey = table.primaryKeyConstraint;\n if (!primaryKey) return;\n const primaryKeys = primaryKey.keyAttributes;\n this.select(\n sql.fragment`json_build_array(${sql.join(\n primaryKeys.map(key =>\n escapeLarge(\n sql.fragment`${this.getTableAlias()}.${sql.identifier(key.name)}`,\n key.type\n )\n ),\n \", \"\n )})`,\n \"__identifiers\"\n );\n this.selectedIdentifiers = true;\n }\n selectCursor(exprGen: SQLGen) {\n this.checkLock(\"selectCursor\");\n this.lock(\"fixedSelectExpression\");\n this.data.selectCursor = exprGen;\n }\n from(expr: SQLGen, alias?: SQLAlias = sql.identifier(Symbol())) {\n this.checkLock(\"from\");\n if (!expr) {\n throw new Error(\"No from table source!\");\n }\n if (!alias) {\n throw new Error(\"No from alias!\");\n }\n this.data.from = [expr, alias];\n this.lock(\"from\");\n }\n // XXX: join\n where(exprGen: SQLGen) {\n this.checkLock(\"where\");\n this.data.where.push(exprGen);\n }\n whereBound(exprGen: SQLGen, isLower: boolean) {\n if (typeof isLower !== \"boolean\") {\n throw new Error(\"isLower must be specified as a boolean\");\n }\n this.checkLock(\"whereBound\");\n this.data.whereBound[isLower ? \"lower\" : \"upper\"].push(exprGen);\n }\n setOrderIsUnique() {\n this.data.orderIsUnique = true;\n }\n orderBy(\n exprGen: SQLGen,\n ascending: boolean = true,\n nullsFirst: boolean | null = null\n ) {\n this.checkLock(\"orderBy\");\n this.data.orderBy.push([exprGen, ascending, nullsFirst]);\n }\n limit(limitGen: NumberGen) {\n this.checkLock(\"limit\");\n\n if (this.data.limit != null) {\n throw new Error(\"Must only set limit once\");\n }\n this.data.limit = limitGen;\n }\n offset(offsetGen: NumberGen) {\n this.checkLock(\"offset\");\n if (this.data.offset != null) {\n // Add the offsets together (this should be able to recurse)\n const previous = this.data.offset;\n this.data.offset = context => {\n return (\n callIfNecessary(previous, context) +\n callIfNecessary(offsetGen, context)\n );\n };\n } else {\n this.data.offset = offsetGen;\n }\n }\n first(first: number) {\n this.checkLock(\"first\");\n if (this.data.first != null) {\n throw new Error(\"Must only set first once\");\n }\n this.data.first = first;\n }\n last(last: number) {\n this.checkLock(\"last\");\n if (this.data.last != null) {\n throw new Error(\"Must only set last once\");\n }\n this.data.last = last;\n }\n\n // ----------------------------------------\n\n isOrderUnique(lock?: boolean = true) {\n if (lock) {\n this.lock(\"orderBy\");\n this.lock(\"orderIsUnique\");\n return this.compiledData.orderIsUnique;\n } else {\n // This is useful inside `beforeLock(\"orderBy\", ...)` calls\n return this.data.orderIsUnique;\n }\n }\n getTableExpression(): SQL {\n this.lock(\"from\");\n if (!this.compiledData.from) {\n throw new Error(\"No from table has been supplied\");\n }\n return this.compiledData.from[0];\n }\n getTableAlias(): SQL {\n this.lock(\"from\");\n if (!this.compiledData.from) {\n throw new Error(\"No from table has been supplied\");\n }\n return this.compiledData.from[1];\n }\n getSelectCursor() {\n this.lock(\"selectCursor\");\n return this.compiledData.selectCursor;\n }\n getOffset() {\n this.lock(\"offset\");\n return this.compiledData.offset || 0;\n }\n getFinalLimitAndOffset() {\n this.lock(\"offset\");\n this.lock(\"limit\");\n this.lock(\"first\");\n this.lock(\"last\");\n let limit = this.compiledData.limit;\n let offset = this.compiledData.offset || 0;\n let flip = false;\n if (this.compiledData.first != null) {\n if (limit != null) {\n limit = Math.min(limit, this.compiledData.first);\n } else {\n limit = this.compiledData.first;\n }\n }\n if (this.compiledData.last != null) {\n if (offset > 0 && limit != null) {\n throw new Error(\n \"Issue within pagination, please report your query to graphile-build\"\n );\n }\n if (limit != null) {\n if (this.compiledData.last < limit) {\n offset = limit - this.compiledData.last;\n limit = this.compiledData.last;\n } else {\n // no need to change anything\n }\n } else if (offset > 0) {\n throw new Error(\"Cannot combine 'last' and 'offset'\");\n } else {\n if (this.compiledData.orderBy.length > 0) {\n flip = true;\n limit = this.compiledData.last;\n } else {\n throw new Error(\"Cannot do last of an unordered set\");\n }\n }\n }\n return {\n limit,\n offset,\n flip,\n };\n }\n getFinalOffset() {\n return this.getFinalLimitAndOffset().offset;\n }\n getFinalLimit() {\n return this.getFinalLimitAndOffset().limit;\n }\n getOrderByExpressionsAndDirections() {\n this.lock(\"orderBy\");\n return this.compiledData.orderBy;\n }\n getSelectFieldsCount() {\n this.lockEverything();\n return this.compiledData.select.length;\n }\n buildSelectFields() {\n this.lockEverything();\n if (this.compiledData.fixedSelectExpression) {\n return this.compiledData.fixedSelectExpression;\n }\n return sql.join(\n this.compiledData.select.map(\n ([sqlFragment, alias]) =>\n sql.fragment`to_json(${sqlFragment}) as ${sql.identifier(alias)}`\n ),\n \", \"\n );\n }\n buildSelectJson({\n addNullCase,\n addNotDistinctFromNullCase,\n }: {\n addNullCase?: boolean,\n addNotDistinctFromNullCase?: boolean,\n }) {\n this.lockEverything();\n let buildObject = this.compiledData.select.length\n ? this.jsonbBuildObject(this.compiledData.select)\n : sql.fragment`to_json(${this.getTableAlias()})`;\n if (addNotDistinctFromNullCase) {\n /*\n * `is null` is not sufficient here because the record might exist but\n * have null as each of its values; so we use `is not distinct from null`\n * to assert that the record itself doesn't exist. This is typically used\n * with column values.\n */\n buildObject = sql.fragment`(case when (${this.getTableAlias()} is not distinct from null) then null else ${buildObject} end)`;\n } else if (addNullCase) {\n /*\n * `is null` is probably used here because it's the result of a function;\n * functions seem to have trouble differentiating between `null::my_type`\n * and `(null,null,null)::my_type`, always opting for the latter which\n * then causes issues with the `GraphQLNonNull`s in the schema.\n */\n buildObject = sql.fragment`(case when (${this.getTableAlias()} is null) then null else ${buildObject} end)`;\n }\n return buildObject;\n }\n buildWhereBoundClause(isLower: boolean) {\n this.lock(\"whereBound\");\n const clauses = this.compiledData.whereBound[isLower ? \"lower\" : \"upper\"];\n if (clauses.length) {\n return sql.fragment`(${sql.join(clauses, \") and (\")})`;\n } else {\n return sql.literal(true);\n }\n }\n buildWhereClause(\n includeLowerBound: boolean,\n includeUpperBound: boolean,\n {\n addNullCase,\n addNotDistinctFromNullCase,\n }: { addNullCase?: boolean, addNotDistinctFromNullCase?: boolean }\n ) {\n this.lock(\"where\");\n const clauses = [\n /*\n * Okay... so this is quite interesting. When we're talking about\n * composite types, `(foo is not null)` and `not (foo is null)` are NOT\n * equivalent! Here's why:\n *\n * `(foo is null)`\n * true if every field of the row is null\n *\n * `(foo is not null)`\n * true if every field of the row is not null\n *\n * `not (foo is null)`\n * true if there's at least one field that is not null\n *\n * `is [not] distinct from null` does differentiate between these cases,\n * but when a function returns something like `select * from my_table\n * where false`, it actually returns `(null, null, null)::my_table`,\n * which will cause issues when we apply the `GraphQLNonNull` constraints\n * to the results - we want to treat this as null.\n *\n * So don't \"simplify\" the line below! We're probably checking if the\n * result of a function call returning a compound type was indeed null.\n */\n ...(addNotDistinctFromNullCase\n ? [sql.fragment`(${this.getTableAlias()} is distinct from null)`]\n : addNullCase\n ? [sql.fragment`not (${this.getTableAlias()} is null)`]\n : []),\n ...this.compiledData.where,\n ...(includeLowerBound ? [this.buildWhereBoundClause(true)] : []),\n ...(includeUpperBound ? [this.buildWhereBoundClause(false)] : []),\n ];\n return clauses.length\n ? sql.fragment`(${sql.join(clauses, \") and (\")})`\n : sql.fragment`1 = 1`;\n }\n build(\n options: {\n asJson?: boolean,\n asJsonAggregate?: boolean,\n onlyJsonField?: boolean,\n addNullCase?: boolean,\n addNotDistinctFromNullCase?: boolean,\n useAsterisk?: boolean,\n } = {}\n ) {\n this.lockEverything();\n\n if (this.compiledData.fixedSelectExpression) {\n if (Object.keys(options).length > 0) {\n throw new Error(\n \"Do not pass options to QueryBuilder.build() when using `buildNamedChildSelecting`\"\n );\n }\n }\n const {\n asJson = false,\n asJsonAggregate = false,\n onlyJsonField = false,\n addNullCase = false,\n addNotDistinctFromNullCase = false,\n useAsterisk = false,\n } = options;\n\n if (onlyJsonField) {\n return this.buildSelectJson({ addNullCase, addNotDistinctFromNullCase });\n }\n const { limit, offset, flip } = this.getFinalLimitAndOffset();\n const fields =\n asJson || asJsonAggregate\n ? sql.fragment`${this.buildSelectJson({\n addNullCase,\n addNotDistinctFromNullCase,\n })} as object`\n : this.buildSelectFields();\n\n let fragment = sql.fragment`\\\nselect ${useAsterisk ? sql.fragment`${this.getTableAlias()}.*` : fields}\n${\n this.compiledData.from &&\n sql.fragment`from ${this.compiledData.from[0]} as ${this.getTableAlias()}`\n}\n${this.compiledData.join.length && sql.join(this.compiledData.join, \" \")}\nwhere ${this.buildWhereClause(true, true, options)}\n${\n this.compiledData.orderBy.length\n ? sql.fragment`order by ${sql.join(\n this.compiledData.orderBy.map(\n ([expr, ascending, nullsFirst]) =>\n sql.fragment`${expr} ${\n Number(ascending) ^ Number(flip)\n ? sql.fragment`ASC`\n : sql.fragment`DESC`\n }${\n nullsFirst === true\n ? sql.fragment` NULLS FIRST`\n : nullsFirst === false\n ? sql.fragment` NULLS LAST`\n : null\n }`\n ),\n \",\"\n )}`\n : \"\"\n}\n${isSafeInteger(limit) && sql.fragment`limit ${sql.literal(limit)}`}\n${offset && sql.fragment`offset ${sql.literal(offset)}`}`;\n if (flip) {\n const flipAlias = Symbol();\n fragment = sql.fragment`\\\nwith ${sql.identifier(flipAlias)} as (\n ${fragment}\n)\nselect *\nfrom ${sql.identifier(flipAlias)}\norder by (row_number() over (partition by 1)) desc`; /* We don't need to factor useAsterisk into this row_number() usage */\n }\n if (useAsterisk) {\n /*\n * NOTE[useAsterisk/row_number]: since LIMIT/OFFSET is inside this\n * subquery, row_number() outside of this subquery WON'T include the\n * offset. We must add it back wherever row_number() is used.\n */\n fragment = sql.fragment`select ${fields} from (${fragment}) ${this.getTableAlias()}`;\n }\n if (asJsonAggregate) {\n const aggAlias = Symbol();\n fragment = sql.fragment`select json_agg(${sql.identifier(\n aggAlias,\n \"object\"\n )}) from (${fragment}) as ${sql.identifier(aggAlias)}`;\n fragment = sql.fragment`select coalesce((${fragment}), '[]'::json)`;\n }\n return fragment;\n }\n\n // ----------------------------------------\n\n _finalize() {\n this.finalized = true;\n }\n lock(type: string) {\n if (this.locks[type]) return;\n const context = this.lockContext;\n const { beforeLock } = this.data;\n let locks = beforeLock[type];\n if (locks) {\n beforeLock[type] = [];\n for (let i = 0, l = locks.length; i < l; i++) {\n locks[i]();\n }\n }\n if (type !== \"select\") {\n this.locks[type] = isDev ? new Error(\"Initally locked here\").stack : true;\n }\n if (type === \"cursorComparator\") {\n // It's meant to be a function\n this.compiledData[type] = this.data[type];\n } else if (type === \"whereBound\") {\n // Handle properties separately\n this.compiledData[type].lower = callIfNecessaryArray(\n this.data[type].lower,\n context\n );\n this.compiledData[type].upper = callIfNecessaryArray(\n this.data[type].upper,\n context\n );\n } else if (type === \"fixedSelectExpression\") {\n this.compiledData[type] = callIfNecessary(this.data[type], context);\n } else if (type === \"select\") {\n /*\n * NOTICE: locking select can cause additional selects to be added, so the\n * length of this.data[type] may increase during the operation. This is\n * why we handle this.locks[type] separately.\n */\n\n // Assume that duplicate fields must be identical, don't output the same\n // key multiple times\n const seenFields: { [key: string | Symbol]: true } = {};\n const data = [];\n const selects = this.data[type];\n\n // DELIBERATE slow loop, see NOTICE above\n for (let i = 0; i < selects.length; i++) {\n const [valueOrGenerator, columnName] = selects[i];\n if (!seenFields[columnName]) {\n seenFields[columnName] = true;\n data.push([callIfNecessary(valueOrGenerator, context), columnName]);\n locks = beforeLock[type];\n if (locks) {\n beforeLock[type] = [];\n for (let i = 0, l = locks.length; i < l; i++) {\n locks[i]();\n }\n }\n }\n }\n this.locks[type] = isDev ? new Error(\"Initally locked here\").stack : true;\n this.compiledData[type] = data;\n } else if (type === \"orderBy\") {\n this.compiledData[type] = this.data[type].map(([a, b, c]) => [\n callIfNecessary(a, context),\n b,\n c,\n ]);\n } else if (type === \"from\") {\n if (this.data.from) {\n const f = this.data.from;\n this.compiledData.from = [callIfNecessary(f[0], context), f[1]];\n }\n } else if (type === \"join\" || type === \"where\") {\n this.compiledData[type] = callIfNecessaryArray(this.data[type], context);\n } else if (type === \"selectCursor\") {\n this.compiledData[type] = callIfNecessary(this.data[type], context);\n } else if (type === \"cursorPrefix\") {\n this.compiledData[type] = this.data[type];\n } else if (type === \"orderIsUnique\") {\n this.compiledData[type] = this.data[type];\n } else if (type === \"limit\") {\n this.compiledData[type] = callIfNecessary(this.data[type], context);\n } else if (type === \"offset\") {\n this.compiledData[type] = callIfNecessary(this.data[type], context);\n } else if (type === \"first\") {\n this.compiledData[type] = this.data[type];\n } else if (type === \"last\") {\n this.compiledData[type] = this.data[type];\n } else {\n throw new Error(`Wasn't expecting to lock '${type}'`);\n }\n }\n checkLock(type: string) {\n if (this.locks[type]) {\n if (typeof this.locks[type] === \"string\") {\n throw new Error(\n `'${type}' has already been locked\\n ` +\n this.locks[type].replace(/\\n/g, \"\\n \") +\n \"\\n\"\n );\n }\n throw new Error(`'${type}' has already been locked`);\n }\n }\n lockEverything() {\n this._finalize();\n // We must execute everything after `from` so we have the alias to reference\n this.lock(\"from\");\n this.lock(\"join\");\n this.lock(\"orderBy\");\n // We must execute where after orderBy because cursor queries require all orderBy columns\n this.lock(\"cursorComparator\");\n this.lock(\"whereBound\");\n this.lock(\"where\");\n // 'where' -> 'whereBound' can affect 'offset'/'limit'\n this.lock(\"offset\");\n this.lock(\"limit\");\n this.lock(\"first\");\n this.lock(\"last\");\n // We must execute select after orderBy otherwise we cannot generate a cursor\n this.lock(\"fixedSelectExpression\");\n this.lock(\"selectCursor\");\n this.lock(\"select\");\n }\n /** this method is experimental */\n buildChild() {\n const options = { supportsJSONB: this.supportsJSONB };\n const child = new QueryBuilder(options, this.context, this.rootValue);\n child.parentQueryBuilder = this;\n return child;\n }\n /** this method is experimental */\n buildNamedChildSelecting(\n name: RawAlias,\n from: SQLGen,\n selectExpression: SQLGen,\n alias?: SQLAlias\n ) {\n if (this._children.has(name)) {\n throw new Error(\n `QueryBuilder already has a child named ${name.toString()}`\n );\n }\n const child = this.buildChild();\n child.from(from, alias);\n child.fixedSelectExpression(selectExpression);\n this._children.set(name, child);\n return child;\n }\n /** this method is experimental */\n getNamedChild(name: string) {\n return this._children.get(name);\n }\n}\n\nexport default QueryBuilder;\n"],"file":"QueryBuilder.js"}
@@ -29,9 +29,7 @@ export {
29
29
 
30
30
  export function formatSQLForDebugging(sql: string): string;
31
31
 
32
- export function parseIdentifier(
33
- typeIdentifier: string
34
- ): {
32
+ export function parseIdentifier(typeIdentifier: string): {
35
33
  namespaceName: string;
36
34
  entityName: string;
37
35
  };
@@ -108,9 +106,7 @@ export {
108
106
  CursorComparator,
109
107
  } from "./QueryBuilder";
110
108
 
111
- export function parseTags(
112
- str: string
113
- ): {
109
+ export function parseTags(str: string): {
114
110
  tags: { [key: string]: string | string[] | boolean };
115
111
  text: string;
116
112
  };