@graphoria/server 0.2.0 → 0.2.1

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 (65) hide show
  1. package/dist/src/authentication/jwt.d.ts.map +1 -1
  2. package/dist/src/authentication/paseto.d.ts.map +1 -1
  3. package/dist/src/authentication/tokenRepository.d.ts +2 -1
  4. package/dist/src/authentication/tokenRepository.d.ts.map +1 -1
  5. package/dist/src/config/types/queue.d.ts +2 -2
  6. package/dist/src/configuration/getSchemas/index.d.ts +10 -8
  7. package/dist/src/configuration/getSchemas/index.d.ts.map +1 -1
  8. package/dist/src/configuration/getSchemas/mergeEntities/index.d.ts +11 -4
  9. package/dist/src/configuration/getSchemas/mergeEntities/index.d.ts.map +1 -1
  10. package/dist/src/configuration/getSchemas/type-definition-generator/index.d.ts.map +1 -1
  11. package/dist/src/configuration/index.d.ts +9 -8
  12. package/dist/src/configuration/index.d.ts.map +1 -1
  13. package/dist/src/configuration/rest/handleRESTRequestFactory.d.ts.map +1 -1
  14. package/dist/src/configuration/rest/parseStringParams.d.ts +15 -0
  15. package/dist/src/configuration/rest/parseStringParams.d.ts.map +1 -0
  16. package/dist/src/configuration/rest/parseStringParams.test.d.ts +2 -0
  17. package/dist/src/configuration/rest/parseStringParams.test.d.ts.map +1 -0
  18. package/dist/src/databases/common.d.ts +6 -0
  19. package/dist/src/databases/common.d.ts.map +1 -1
  20. package/dist/src/databases/core/query-builder.d.ts +1 -1
  21. package/dist/src/databases/engines/mssql/getStructure.d.ts +1 -0
  22. package/dist/src/databases/engines/mssql/getStructure.d.ts.map +1 -1
  23. package/dist/src/databases/engines/mssql/query/index.d.ts.map +1 -1
  24. package/dist/src/databases/engines/mysql/getStructure.d.ts +1 -0
  25. package/dist/src/databases/engines/mysql/getStructure.d.ts.map +1 -1
  26. package/dist/src/databases/engines/mysql/query/index.d.ts.map +1 -1
  27. package/dist/src/databases/engines/postgresql/getStructure.d.ts +1 -0
  28. package/dist/src/databases/engines/postgresql/getStructure.d.ts.map +1 -1
  29. package/dist/src/databases/engines/postgresql/query/index.d.ts.map +1 -1
  30. package/dist/src/databases/high-level-operations.d.ts +2 -1
  31. package/dist/src/databases/high-level-operations.d.ts.map +1 -1
  32. package/dist/src/databases/identifierMapping.test.d.ts +2 -0
  33. package/dist/src/databases/identifierMapping.test.d.ts.map +1 -0
  34. package/dist/src/databases/metadata/structure.d.ts +1 -0
  35. package/dist/src/databases/metadata/structure.d.ts.map +1 -1
  36. package/dist/src/databases/transformers/data-transformers.d.ts +3 -2
  37. package/dist/src/databases/transformers/data-transformers.d.ts.map +1 -1
  38. package/dist/src/databases/transformers/genResolverName.d.ts.map +1 -1
  39. package/dist/src/databases/transformers/graphqlName.d.ts +23 -0
  40. package/dist/src/databases/transformers/graphqlName.d.ts.map +1 -0
  41. package/dist/src/databases/transformers/graphqlName.test.d.ts +2 -0
  42. package/dist/src/databases/transformers/graphqlName.test.d.ts.map +1 -0
  43. package/dist/src/singletons/env.d.ts +5 -5
  44. package/dist/src/types/env.d.ts +24 -24
  45. package/dist/src/types/zod/configuration.d.ts +14 -14
  46. package/dist/src/types/zod/db.d.ts +9 -0
  47. package/dist/src/types/zod/db.d.ts.map +1 -1
  48. package/dist/src/types/zod/queue.d.ts +12 -12
  49. package/dist/tsconfig.tsbuildinfo +1 -1
  50. package/package.json +2 -2
  51. package/src/authentication/jwt.ts +3 -1
  52. package/src/authentication/paseto.ts +3 -1
  53. package/src/authentication/tokenRepository.ts +12 -4
  54. package/src/configuration/getSchemas/mergeEntities/index.ts +26 -1
  55. package/src/configuration/getSchemas/type-definition-generator/index.ts +11 -6
  56. package/src/configuration/rest/handleRESTRequestFactory.ts +5 -7
  57. package/src/configuration/rest/parseStringParams.ts +92 -0
  58. package/src/databases/common.ts +13 -2
  59. package/src/databases/engines/mssql/query/index.ts +25 -12
  60. package/src/databases/engines/mysql/query/index.ts +21 -8
  61. package/src/databases/engines/postgresql/query/index.ts +21 -7
  62. package/src/databases/high-level-operations.ts +2 -2
  63. package/src/databases/transformers/genResolverName.ts +3 -3
  64. package/src/databases/transformers/graphqlName.ts +28 -0
  65. package/src/types/zod/db.ts +4 -0
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Maps a SQL identifier onto a legal GraphQL name (`/^[_A-Za-z][_0-9A-Za-z]*$/`).
3
+ *
4
+ * PostgreSQL, MySQL and SQL Server all accept identifiers GraphQL cannot spell —
5
+ * spaces, accents, punctuation — and an unmapped one produces an SDL document
6
+ * that fails to parse, taking the whole server down at boot.
7
+ *
8
+ * A name that is already legal is returned unchanged, so this cannot rename a
9
+ * field in any schema that boots today. Runs of illegal characters are not
10
+ * collapsed, and diacritics fold to their base letter rather than being dropped,
11
+ * both so that distinct identifiers stay distinct as often as possible.
12
+ */
13
+ export const sanitizeGraphQLName = (name: string): string => {
14
+ const folded = name.normalize("NFD").replace(/[̀-ͯ]/g, "");
15
+ const replaced = folded.replace(/[^_0-9A-Za-z]/g, "_");
16
+
17
+ if (replaced.length === 0) return "_";
18
+
19
+ return /^[0-9]/.test(replaced) ? `_${replaced}` : replaced;
20
+ };
21
+
22
+ /**
23
+ * The GraphQL field a column is exposed as. Introspected columns carry a
24
+ * `fieldName` computed once at parse time; virtual columns come from
25
+ * configuration and carry only a name, so they are sanitised on the spot.
26
+ */
27
+ export const columnFieldName = (column: { name: string; fieldName?: string }): string =>
28
+ column.fieldName ?? sanitizeGraphQLName(column.name);
@@ -8,6 +8,7 @@ import {
8
8
  TableRelationshipZod as TableRelationshipBaseZod,
9
9
  } from "../../config";
10
10
  import { genResolverName } from "../../databases/transformers/genResolverName";
11
+ import { sanitizeGraphQLName } from "../../databases/transformers/graphqlName";
11
12
 
12
13
  // Re-export base types and schemas from the config module
13
14
  export type {
@@ -43,6 +44,9 @@ export const TableColumnZod = z
43
44
  })
44
45
  .transform((val) => ({
45
46
  name: val.name,
47
+ // The SQL identifier stays in `name`; `fieldName` is what GraphQL exposes it as.
48
+ // Nothing emitting SQL may read `fieldName`, nothing emitting SDL may read `name`.
49
+ fieldName: sanitizeGraphQLName(val.name),
46
50
  dataType: val.dataType,
47
51
  isNullable: typeof val.isNullable === "boolean" ? val.isNullable : val.isNullable === 1,
48
52
  description: val.description ?? null,