point.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import { entityKind } from "../../entity.js";
  2. import { getColumnNameAndConfig } from "../../utils.js";
  3. import { PgColumn, PgColumnBuilder } from "./common.js";
  4. class PgPointTupleBuilder extends PgColumnBuilder {
  5. static [entityKind] = "PgPointTupleBuilder";
  6. constructor(name) {
  7. super(name, "array", "PgPointTuple");
  8. }
  9. /** @internal */
  10. build(table) {
  11. return new PgPointTuple(
  12. table,
  13. this.config
  14. );
  15. }
  16. }
  17. class PgPointTuple extends PgColumn {
  18. static [entityKind] = "PgPointTuple";
  19. getSQLType() {
  20. return "point";
  21. }
  22. mapFromDriverValue(value) {
  23. if (typeof value === "string") {
  24. const [x, y] = value.slice(1, -1).split(",");
  25. return [Number.parseFloat(x), Number.parseFloat(y)];
  26. }
  27. return [value.x, value.y];
  28. }
  29. mapToDriverValue(value) {
  30. return `(${value[0]},${value[1]})`;
  31. }
  32. }
  33. class PgPointObjectBuilder extends PgColumnBuilder {
  34. static [entityKind] = "PgPointObjectBuilder";
  35. constructor(name) {
  36. super(name, "json", "PgPointObject");
  37. }
  38. /** @internal */
  39. build(table) {
  40. return new PgPointObject(
  41. table,
  42. this.config
  43. );
  44. }
  45. }
  46. class PgPointObject extends PgColumn {
  47. static [entityKind] = "PgPointObject";
  48. getSQLType() {
  49. return "point";
  50. }
  51. mapFromDriverValue(value) {
  52. if (typeof value === "string") {
  53. const [x, y] = value.slice(1, -1).split(",");
  54. return { x: Number.parseFloat(x), y: Number.parseFloat(y) };
  55. }
  56. return value;
  57. }
  58. mapToDriverValue(value) {
  59. return `(${value.x},${value.y})`;
  60. }
  61. }
  62. function point(a, b) {
  63. const { name, config } = getColumnNameAndConfig(a, b);
  64. if (!config?.mode || config.mode === "tuple") {
  65. return new PgPointTupleBuilder(name);
  66. }
  67. return new PgPointObjectBuilder(name);
  68. }
  69. export {
  70. PgPointObject,
  71. PgPointObjectBuilder,
  72. PgPointTuple,
  73. PgPointTupleBuilder,
  74. point
  75. };
  76. //# sourceMappingURL=point.js.map