@mrnafisia/type-query 1.2.11 → 2.0.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 (124) hide show
  1. package/dist/prd.tsconfig.tsbuildinfo +1 -0
  2. package/dist/src/Table.d.ts +82 -0
  3. package/dist/src/Table.d.ts.map +1 -0
  4. package/dist/{types/pool.js → src/Table.js} +3 -3
  5. package/dist/{types → src}/Table.js.map +1 -1
  6. package/dist/src/context.d.ts +76 -0
  7. package/dist/src/context.d.ts.map +1 -0
  8. package/dist/src/context.js +70 -0
  9. package/dist/src/context.js.map +1 -0
  10. package/dist/src/createModelParser.d.ts +33 -0
  11. package/dist/src/createModelParser.d.ts.map +1 -0
  12. package/dist/src/createModelParser.js +178 -0
  13. package/dist/src/createModelParser.js.map +1 -0
  14. package/dist/src/ddl.d.ts +11 -0
  15. package/dist/src/ddl.d.ts.map +1 -0
  16. package/dist/src/ddl.js +83 -0
  17. package/dist/src/ddl.js.map +1 -0
  18. package/dist/src/entity.d.ts +100 -0
  19. package/dist/src/entity.d.ts.map +1 -0
  20. package/dist/src/entity.js +425 -0
  21. package/dist/src/entity.js.map +1 -0
  22. package/dist/src/index.d.ts +10 -0
  23. package/dist/src/index.d.ts.map +1 -0
  24. package/dist/src/index.js +54 -0
  25. package/dist/src/index.js.map +1 -0
  26. package/dist/src/keywords.d.ts +143 -0
  27. package/dist/src/keywords.d.ts.map +1 -0
  28. package/dist/src/keywords.js +169 -0
  29. package/dist/src/keywords.js.map +1 -0
  30. package/dist/src/resolve.d.ts +15 -0
  31. package/dist/src/resolve.d.ts.map +1 -0
  32. package/dist/src/resolve.js +535 -0
  33. package/dist/src/resolve.js.map +1 -0
  34. package/dist/src/testTransaction.d.ts +19 -0
  35. package/dist/src/testTransaction.d.ts.map +1 -0
  36. package/dist/src/testTransaction.js +85 -0
  37. package/dist/src/testTransaction.js.map +1 -0
  38. package/dist/src/transaction.d.ts +6 -0
  39. package/dist/src/transaction.d.ts.map +1 -0
  40. package/dist/src/transaction.js +28 -0
  41. package/dist/src/transaction.js.map +1 -0
  42. package/dist/src/utils.d.ts +70 -0
  43. package/dist/src/utils.d.ts.map +1 -0
  44. package/dist/src/utils.js +229 -0
  45. package/dist/src/utils.js.map +1 -0
  46. package/package.json +42 -38
  47. package/dist/U.d.ts +0 -3
  48. package/dist/U.d.ts.map +0 -1
  49. package/dist/U.js +0 -29
  50. package/dist/U.js.map +0 -1
  51. package/dist/cast.d.ts +0 -15
  52. package/dist/cast.d.ts.map +0 -1
  53. package/dist/cast.js +0 -151
  54. package/dist/cast.js.map +0 -1
  55. package/dist/context.d.ts +0 -949
  56. package/dist/context.d.ts.map +0 -1
  57. package/dist/context.js +0 -85
  58. package/dist/context.js.map +0 -1
  59. package/dist/dictionary.d.ts +0 -13
  60. package/dist/dictionary.d.ts.map +0 -1
  61. package/dist/dictionary.js +0 -180
  62. package/dist/dictionary.js.map +0 -1
  63. package/dist/entity.d.ts +0 -3469
  64. package/dist/entity.d.ts.map +0 -1
  65. package/dist/entity.js +0 -1067
  66. package/dist/entity.js.map +0 -1
  67. package/dist/error.d.ts +0 -5
  68. package/dist/error.d.ts.map +0 -1
  69. package/dist/error.js +0 -8
  70. package/dist/error.js.map +0 -1
  71. package/dist/index.d.ts +0 -19
  72. package/dist/index.d.ts.map +0 -1
  73. package/dist/index.js +0 -35
  74. package/dist/index.js.map +0 -1
  75. package/dist/model.d.ts +0 -967
  76. package/dist/model.d.ts.map +0 -1
  77. package/dist/model.js +0 -244
  78. package/dist/model.js.map +0 -1
  79. package/dist/pool.d.ts +0 -7
  80. package/dist/pool.d.ts.map +0 -1
  81. package/dist/pool.js +0 -123
  82. package/dist/pool.js.map +0 -1
  83. package/dist/schema.d.ts +0 -26
  84. package/dist/schema.d.ts.map +0 -1
  85. package/dist/schema.js +0 -406
  86. package/dist/schema.js.map +0 -1
  87. package/dist/testUtil.d.ts +0 -5
  88. package/dist/testUtil.d.ts.map +0 -1
  89. package/dist/testUtil.js +0 -338
  90. package/dist/testUtil.js.map +0 -1
  91. package/dist/types/Context.d.ts +0 -52
  92. package/dist/types/Context.d.ts.map +0 -1
  93. package/dist/types/Context.js +0 -3
  94. package/dist/types/Context.js.map +0 -1
  95. package/dist/types/Entity.d.ts +0 -71
  96. package/dist/types/Entity.d.ts.map +0 -1
  97. package/dist/types/Entity.js +0 -3
  98. package/dist/types/Entity.js.map +0 -1
  99. package/dist/types/Json.d.ts +0 -9
  100. package/dist/types/Json.d.ts.map +0 -1
  101. package/dist/types/Json.js +0 -3
  102. package/dist/types/Json.js.map +0 -1
  103. package/dist/types/Model.d.ts +0 -22
  104. package/dist/types/Model.d.ts.map +0 -1
  105. package/dist/types/Model.js +0 -3
  106. package/dist/types/Model.js.map +0 -1
  107. package/dist/types/Table.d.ts +0 -234
  108. package/dist/types/Table.d.ts.map +0 -1
  109. package/dist/types/Table.js +0 -3
  110. package/dist/types/pool.d.ts +0 -19
  111. package/dist/types/pool.d.ts.map +0 -1
  112. package/dist/types/pool.js.map +0 -1
  113. package/dist/types/postgres.d.ts +0 -10
  114. package/dist/types/postgres.d.ts.map +0 -1
  115. package/dist/types/postgres.js +0 -3
  116. package/dist/types/postgres.js.map +0 -1
  117. package/dist/types/testUtil.d.ts +0 -27
  118. package/dist/types/testUtil.d.ts.map +0 -1
  119. package/dist/types/testUtil.js +0 -3
  120. package/dist/types/testUtil.js.map +0 -1
  121. package/dist/utils.d.ts +0 -68
  122. package/dist/utils.d.ts.map +0 -1
  123. package/dist/utils.js +0 -221
  124. package/dist/utils.js.map +0 -1
@@ -0,0 +1,11 @@
1
+ import { Table } from './Table';
2
+ declare const generateCreateSequencesSQL: (table: Table) => string[];
3
+ declare const generateDropSequencesSQL: (table: Table) => string[];
4
+ declare const generateCreateTableSQL: (table: Table) => string;
5
+ declare const generateDropTableSQL: (table: Table) => string;
6
+ declare const getSequenceName: (schemaName: string, tableName: string, columnKey: string, column: {
7
+ title?: string;
8
+ sequenceTitle?: string;
9
+ }) => string;
10
+ export { generateCreateSequencesSQL, generateDropSequencesSQL, generateCreateTableSQL, generateDropTableSQL, getSequenceName };
11
+ //# sourceMappingURL=ddl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ddl.d.ts","sourceRoot":"","sources":["../../src/ddl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGhC,QAAA,MAAM,0BAA0B,UAAW,KAAK,aAyB/C,CAAC;AAEF,QAAA,MAAM,wBAAwB,UAAW,KAAK,aAe7C,CAAC;AAEF,QAAA,MAAM,sBAAsB,UAAW,KAAK,WAoE3C,CAAC;AAEF,QAAA,MAAM,oBAAoB,UAAW,KAAK,WACiB,CAAC;AAE5D,QAAA,MAAM,eAAe,eACL,MAAM,aACP,MAAM,aACN,MAAM,UACT;IACJ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B,WAKE,CAAC;AAER,OAAO,EACH,0BAA0B,EAC1B,wBAAwB,EACxB,sBAAsB,EACtB,oBAAoB,EACpB,eAAe,EAClB,CAAC"}
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getSequenceName = exports.generateDropTableSQL = exports.generateCreateTableSQL = exports.generateDropSequencesSQL = exports.generateCreateSequencesSQL = void 0;
4
+ const keywords_1 = require("./keywords");
5
+ const generateCreateSequencesSQL = (table) => {
6
+ const queries = [];
7
+ for (const [key, column] of Object.entries(table.columns)) {
8
+ if (column
9
+ .defaultValue?.[0] !== 'auto-increment') {
10
+ continue;
11
+ }
12
+ const tokens = [
13
+ `CREATE SEQUENCE ${getSequenceName(table.schemaName, table.tableName, key, column)}`
14
+ ];
15
+ switch (column.type) {
16
+ case 'int2':
17
+ tokens.push('AS SMALLINT');
18
+ break;
19
+ case 'int4':
20
+ tokens.push('AS INTEGER');
21
+ break;
22
+ }
23
+ queries.push(tokens.join(' '));
24
+ }
25
+ return queries;
26
+ };
27
+ exports.generateCreateSequencesSQL = generateCreateSequencesSQL;
28
+ const generateDropSequencesSQL = (table) => {
29
+ const queries = [];
30
+ for (const [key, column] of Object.entries(table.columns)) {
31
+ if (column
32
+ .defaultValue?.[0] !== 'auto-increment') {
33
+ continue;
34
+ }
35
+ queries.push(`DROP SEQUENCE ${getSequenceName(table.schemaName, table.tableName, key, column)}`);
36
+ }
37
+ return queries;
38
+ };
39
+ exports.generateDropSequencesSQL = generateDropSequencesSQL;
40
+ const generateCreateTableSQL = (table) => {
41
+ const columnsAsEntries = Object.entries(table.columns);
42
+ const columns = columnsAsEntries.map(([key, column]) => {
43
+ const tokens = [
44
+ `"${column.title ?? key}" ${keywords_1.Dictionary.PostgresType[column.type]}`
45
+ ];
46
+ if (column.default) {
47
+ const defaultValue = column.defaultValue;
48
+ switch (defaultValue[0]) {
49
+ case 'auto-increment':
50
+ tokens.push(`DEFAULT NEXTVAL('${getSequenceName(table.schemaName, table.tableName, key, column)}'::REGCLASS)`);
51
+ break;
52
+ case 'sql':
53
+ tokens.push(`DEFAULT ${defaultValue[1]}`);
54
+ break;
55
+ }
56
+ }
57
+ tokens.push(column.nullable ? 'NULL' : 'NOT NULL');
58
+ if (column.reference !== undefined) {
59
+ tokens.push(`REFERENCES "${column.reference.table.schemaName}"."${column.reference.table.tableName}"` +
60
+ `("${column.reference.table.columns[column.reference.column]
61
+ .title ?? column.reference.column}") ` +
62
+ `ON UPDATE ${keywords_1.Dictionary.ReferenceAction[column.reference.onUpdate ?? 'no-action']} ON DELETE ${keywords_1.Dictionary.ReferenceAction[column.reference.onDelete ?? 'no-action']}`);
63
+ }
64
+ return tokens.join(' ');
65
+ });
66
+ const constraints = [];
67
+ const primaryKeys = columnsAsEntries.filter(([, column]) => !column.nullable && column.primary);
68
+ if (primaryKeys.length !== 0) {
69
+ constraints.push(`CONSTRAINT "${table.tableName}_pk" PRIMARY KEY(${primaryKeys
70
+ .map(([key, column]) => `"${column.title ?? key}"`)
71
+ .join(', ')})`);
72
+ }
73
+ return `CREATE TABLE "${table.schemaName}"."${table.tableName}"(${[...columns, ...constraints].join(', ')})`;
74
+ };
75
+ exports.generateCreateTableSQL = generateCreateTableSQL;
76
+ const generateDropTableSQL = (table) => `DROP TABLE "${table.schemaName}"."${table.tableName}"`;
77
+ exports.generateDropTableSQL = generateDropTableSQL;
78
+ const getSequenceName = (schemaName, tableName, columnKey, column) => `"${schemaName}"."` +
79
+ (column.sequenceTitle ??
80
+ tableName + '_' + (column.title ?? columnKey) + '_seq') +
81
+ '"';
82
+ exports.getSequenceName = getSequenceName;
83
+ //# sourceMappingURL=ddl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ddl.js","sourceRoot":"","sources":["../../src/ddl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ import { ClientBase } from 'pg';
2
+ import { Result } from 'never-catch';
3
+ import { Context } from './context';
4
+ import { NullableType, Schema, Table } from './Table';
5
+ declare const createEntity: <S extends Schema = Schema>(table: Table<S>) => {
6
+ table: Table<S>;
7
+ context: Context<S>;
8
+ select: <R extends readonly (CustomColumn<unknown, string> | (keyof S & string))[]>(returning: R | ((context: Context<S>) => R), where: boolean | ((context: Context<S>) => boolean), options?: SelectOptions<S>) => Query<S, R>;
9
+ insert: <R_1 extends readonly (CustomColumn<unknown, string> | (keyof S & string))[], N extends readonly (keyof NullableAndDefaultColumns<S>)[] = []>(rows: InsertingRow<S, N>[] | ((context: Context<S>) => InsertingRow<S, N>[]), returning: R_1 | ((context: Context<S>) => R_1), options?: InsertOptions<S, N>) => Query<S, R_1>;
10
+ update: <R_2 extends readonly (CustomColumn<unknown, string> | (keyof S & string))[]>(sets: UpdateSets<S> | ((context: Context<S>) => UpdateSets<S>), where: boolean | ((context: Context<S>) => boolean), returning: R_2 | ((context: Context<S>) => R_2)) => Query<S, R_2>;
11
+ delete: <R_3 extends readonly (CustomColumn<unknown, string> | (keyof S & string))[]>(where: boolean | ((context: Context<S>) => boolean), returning: R_3 | ((context: Context<S>) => R_3)) => Query<S, R_3>;
12
+ join: <MA extends string, JS extends Schema, JA extends string>(mainAlias: MA, joinType: JoinType, joinTable: Table<JS>, joinAlias: JA, on: boolean | ((contexts: SchemaMapContexts<Record<MA, S> & Record<JA, JS>>) => boolean)) => JoinEntity<Record<MA, S> & Record<JA, JS>, PrefixAliasOnSchema<S, MA> & PrefixAliasOnSchema<JS, JA>>;
13
+ };
14
+ type SelectOptions<S extends Schema = Schema> = {
15
+ distinct?: true | (keyof S & string)[];
16
+ groupBy?: unknown[] | ((context: Context<S>) => unknown[]);
17
+ orders?: {
18
+ by: keyof S & string;
19
+ direction: OrderDirection;
20
+ }[];
21
+ start?: bigint;
22
+ step?: number;
23
+ };
24
+ declare const createSelectQuery: (context: Context, table: Table, returning: ReturningRows | ((context: Context) => ReturningRows), where: boolean | ((context: Context) => boolean), options: SelectOptions, params: string[]) => Result<QueryData, string>;
25
+ type InsertOptions<S extends Schema, N extends readonly (keyof NullableAndDefaultColumns<S>)[]> = {
26
+ nullableDefaultColumns?: N;
27
+ };
28
+ type InsertingRow<S extends Schema, N extends readonly (keyof NullableAndDefaultColumns<S>)[]> = {
29
+ [key in Exclude<keyof S, keyof NullableAndDefaultColumns<S>>]: S[key]['type'];
30
+ } & {
31
+ [key in Exclude<keyof N, keyof never[]> as N[key] & string]?: NullableType<S[N[key] & string]['type'], S[N[key] & string]['nullable']>;
32
+ };
33
+ declare const createInsertQuery: (context: Context, table: Table, rows: Record<string, unknown>[] | ((context: Context) => Record<string, unknown>[]), returning: ReturningRows | ((context: Context) => ReturningRows), options: InsertOptions<Schema, readonly string[]>, params: string[]) => Result<QueryData, string>;
34
+ type UpdateSets<S extends Schema = Schema> = {
35
+ [key in keyof S]?: NullableType<S[key]['type'], S[key]['nullable']>;
36
+ };
37
+ declare const createUpdateQuery: (context: Context, table: Table, sets: UpdateSets<Schema> | ((context: Context) => UpdateSets), where: boolean | ((context: Context) => boolean), returning: ReturningRows | ((context: Context) => ReturningRows), params: string[]) => Result<QueryData, string>;
38
+ declare const createDeleteQuery: (context: Context, table: Table, returning: ReturningRows | ((context: Context) => ReturningRows), where: boolean | ((context: Context) => boolean), params: string[]) => Result<QueryData, string>;
39
+ type JoinType = 'inner' | 'left' | 'right' | 'full';
40
+ type TableWithAlias = {
41
+ table: Table;
42
+ alias: string;
43
+ };
44
+ type JoinData = {
45
+ joinType: JoinType;
46
+ on: boolean | ((contexts: Record<string, Context>) => boolean);
47
+ };
48
+ type SchemaMapKeys<SMap extends Record<string, Schema>> = {
49
+ [key in keyof SMap & string]: `${key}_${keyof SMap[key] & string}`;
50
+ }[keyof SMap & string];
51
+ type SchemaMapContexts<SMap extends Record<string, Schema>> = {
52
+ [key in keyof SMap & string as `${key}Context`]: Context<SMap[key]>;
53
+ };
54
+ type PrefixAliasOnSchema<S extends Schema, A extends string> = {
55
+ [key in keyof S as `${A}_${key & string}`]: S[key];
56
+ };
57
+ type JoinEntity<SMap extends Record<string, Schema>, AllS extends Schema> = {
58
+ contexts: SchemaMapContexts<SMap>;
59
+ select: <R extends readonly ((keyof AllS & string) | CustomColumn<unknown, string>)[]>(returning: R | ((contexts: SchemaMapContexts<SMap>) => R), where: boolean | ((contexts: SchemaMapContexts<SMap>) => boolean), options?: JoinSelectOptions<SMap>) => Query<AllS, R>;
60
+ join: <JS extends Schema, JA extends string>(joinType: JoinType, joinTable: Table<JS>, joinAlias: JA, on: boolean | ((contexts: SchemaMapContexts<SMap & Record<JA, JS>>) => boolean)) => JoinEntity<SMap & Record<JA, JS>, AllS & PrefixAliasOnSchema<JS, JA>>;
61
+ };
62
+ type JoinSelectOptions<Ss extends Record<string, Schema> = Record<string, Schema>> = {
63
+ distinct?: true | SchemaMapKeys<Ss>[];
64
+ groupBy?: unknown[] | ((contexts: SchemaMapContexts<Ss>) => unknown[]);
65
+ orders?: {
66
+ by: SchemaMapKeys<Ss>;
67
+ direction: OrderDirection;
68
+ }[];
69
+ start?: bigint;
70
+ step?: number;
71
+ };
72
+ declare const createJoinSelectEntity: <SMap extends Record<string, Schema>, AllS extends Schema>(main: TableWithAlias, joinTables: (TableWithAlias & JoinData)[], contexts: SchemaMapContexts<SMap>) => JoinEntity<SMap, AllS>;
73
+ declare const createJoinSelectQuery: (contexts: Record<string, Context>, main: TableWithAlias, joinTables: (TableWithAlias & JoinData)[], returning: ReturningRows | ((contexts: Record<string, Context>) => ReturningRows), where: boolean | ((contexts: Record<string, Context>) => boolean), options: JoinSelectOptions, params: string[]) => Result<QueryData, string>;
74
+ declare const getTableDataOfJoinSelectColumn: (tablesData: TableWithAlias[], column: string) => TableWithAlias;
75
+ type OrderDirection = 'asc' | 'desc';
76
+ type Mode = [] | ['count', number] | ['get', 'one' | number];
77
+ type CustomColumn<T, N extends string> = {
78
+ expression: T;
79
+ name: N;
80
+ };
81
+ type NullableAndDefaultColumns<S extends Schema> = {
82
+ [key in keyof S as true extends S[key]['nullable'] ? key : true extends S[key]['default'] ? key : never]: true extends S[key]['nullable'] ? S[key] : true extends S[key]['default'] ? S[key] : never;
83
+ };
84
+ type Query<S extends Schema, R extends readonly (keyof S | CustomColumn<unknown, string>)[]> = {
85
+ getData: (params?: string[]) => Result<QueryData, string>;
86
+ execute: <M extends Mode>(client: ClientBase, mode: M, params?: string[]) => Promise<Result<QueryResult<S, R, M>, unknown>>;
87
+ };
88
+ type QueryData = {
89
+ sql: string;
90
+ params: string[];
91
+ };
92
+ type QueryResult<S extends Schema, R extends readonly (keyof S | CustomColumn<unknown, string>)[], M extends Mode> = M extends ['get', 'one'] ? QueryResultRow<S, R> : M extends ['get', number] | [] ? QueryResultRow<S, R>[] : M extends ['count', number] ? undefined : never;
93
+ type QueryResultRow<S extends Schema, R extends readonly (keyof S | CustomColumn<unknown, string>)[]> = {
94
+ [key in Exclude<keyof R, keyof never[]> as R[key] extends CustomColumn<unknown, infer N> ? N : R[key] & string]: R[key] extends CustomColumn<infer T, string> ? T : NullableType<S[R[key] & string]['type'], S[R[key] & string]['nullable']>;
95
+ };
96
+ type ReturningRows = readonly (string | CustomColumn<unknown, string>)[];
97
+ declare const createQuery: <S extends Schema, R extends readonly (CustomColumn<unknown, string> | keyof S)[]>(createQueryData: (params: string[]) => Result<QueryData, string>) => Query<S, R>;
98
+ export { createEntity, createSelectQuery, createInsertQuery, createUpdateQuery, createDeleteQuery, createJoinSelectEntity, createJoinSelectQuery, getTableDataOfJoinSelectColumn, createQuery };
99
+ export type { SelectOptions, InsertOptions, InsertingRow, UpdateSets, JoinType, TableWithAlias, JoinData, SchemaMapKeys, SchemaMapContexts, PrefixAliasOnSchema, JoinEntity, JoinSelectOptions, OrderDirection, Mode, CustomColumn, NullableAndDefaultColumns, Query, QueryData, QueryResult, QueryResultRow, ReturningRows };
100
+ //# sourceMappingURL=entity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../../src/entity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,425 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.createQuery = exports.getTableDataOfJoinSelectColumn = exports.createJoinSelectQuery = exports.createJoinSelectEntity = exports.createDeleteQuery = exports.createUpdateQuery = exports.createInsertQuery = exports.createSelectQuery = exports.createEntity = void 0;
27
+ const U = __importStar(require("./utils"));
28
+ const keywords_1 = require("./keywords");
29
+ const never_catch_1 = require("never-catch");
30
+ const context_1 = require("./context");
31
+ const resolve_1 = require("./resolve");
32
+ const createEntity = (table) => ({
33
+ table,
34
+ context: (0, context_1.createContext)(table),
35
+ select: function (returning, where, options = {}) {
36
+ return createQuery(params => createSelectQuery(this.context, table, returning, where, options, params));
37
+ },
38
+ insert: function (rows, returning, options = {}) {
39
+ return createQuery(params => createInsertQuery(this.context, table, rows, returning, options, params));
40
+ },
41
+ update: function (sets, where, returning) {
42
+ return createQuery(params => createUpdateQuery(this.context, table, sets, where, returning, params));
43
+ },
44
+ delete: function (where, returning) {
45
+ return createQuery(params => createDeleteQuery(this.context, table, returning, where, params));
46
+ },
47
+ join: function (mainAlias, joinType, joinTable, joinAlias, on) {
48
+ return createJoinSelectEntity({ table: table, alias: mainAlias }, [
49
+ {
50
+ table: joinTable,
51
+ joinType,
52
+ alias: joinAlias,
53
+ on: on
54
+ }
55
+ ], {
56
+ [`${mainAlias}Context`]: (0, context_1.createContext)(table, mainAlias),
57
+ [`${joinAlias}Context`]: (0, context_1.createContext)(joinTable, joinAlias)
58
+ });
59
+ }
60
+ });
61
+ exports.createEntity = createEntity;
62
+ const createSelectQuery = (context, table, returning, where, options, params) => {
63
+ const errorPrefix = `select("${table.schemaName}"."${table.tableName}")`;
64
+ const { distinct = false, groupBy = [], orders = [], start, step } = options;
65
+ const tokens = ['SELECT'];
66
+ if (distinct === true) {
67
+ tokens.push('DISTINCT');
68
+ }
69
+ else if (Array.isArray(distinct)) {
70
+ tokens.push(`DISTINCT ON(${distinct.map(column => (0, resolve_1.resolveColumn)(table, column, false)).join(', ')})`);
71
+ }
72
+ const _returning = typeof returning === 'function' ? returning(context) : returning;
73
+ const resolvedReturning = (0, resolve_1.resolveReturning)(column => [table.columns[column].title, undefined], _returning, params.length + 1);
74
+ if (!resolvedReturning.ok) {
75
+ return (0, never_catch_1.err)(`${errorPrefix} -> ${resolvedReturning.error}`);
76
+ }
77
+ params.push(...resolvedReturning.value.params);
78
+ tokens.push(resolvedReturning.value.text);
79
+ tokens.push(`FROM "${table.schemaName}"."${table.tableName}"`);
80
+ const resolvedWhereResult = (0, resolve_1.resolveExpression)(typeof where === 'function' ? where(context) : where, params.length + 1, false);
81
+ if (!resolvedWhereResult.ok) {
82
+ return (0, never_catch_1.err)(`${errorPrefix} -> where -> ${resolvedWhereResult.error}`);
83
+ }
84
+ if (resolvedWhereResult.value.text === '') {
85
+ return (0, never_catch_1.err)(`${errorPrefix} -> where -> neutral`);
86
+ }
87
+ params.push(...resolvedWhereResult.value.params);
88
+ tokens.push('WHERE', resolvedWhereResult.value.text);
89
+ const _groupBy = typeof groupBy === 'function' ? groupBy(context) : groupBy;
90
+ if (_groupBy.length !== 0) {
91
+ const groupByTextArray = [];
92
+ for (const aGroupBy of _groupBy) {
93
+ const resolvedGroupBy = (0, resolve_1.resolveExpression)(aGroupBy, params.length + 1, false);
94
+ if (!resolvedGroupBy.ok) {
95
+ return (0, never_catch_1.err)(`${errorPrefix} -> groupBy -> ${_groupBy.indexOf(aGroupBy)} -> ${resolvedGroupBy.error}`);
96
+ }
97
+ params.push(...resolvedGroupBy.value.params);
98
+ groupByTextArray.push(resolvedGroupBy.value.text);
99
+ }
100
+ tokens.push('GROUP BY', groupByTextArray.join(', '));
101
+ }
102
+ if (orders.length !== 0) {
103
+ const ordersTextArray = [];
104
+ for (const order of orders) {
105
+ const { by, direction } = order;
106
+ ordersTextArray.push(`${(0, resolve_1.resolveColumn)(table, by, false)} ${keywords_1.Dictionary.OrderDirection[direction]}`);
107
+ }
108
+ tokens.push('ORDER BY', ordersTextArray.join(', '));
109
+ }
110
+ if (start !== undefined) {
111
+ if (start < 0) {
112
+ return (0, never_catch_1.err)(`${errorPrefix} -> start -> invalid`);
113
+ }
114
+ tokens.push('OFFSET', start.toString());
115
+ }
116
+ if (step !== undefined) {
117
+ if (step <= 0) {
118
+ return (0, never_catch_1.err)(`${errorPrefix} -> step -> invalid`);
119
+ }
120
+ tokens.push('LIMIT', step.toString());
121
+ }
122
+ return (0, never_catch_1.ok)({ sql: tokens.join(' '), params });
123
+ };
124
+ exports.createSelectQuery = createSelectQuery;
125
+ const createInsertQuery = (context, table, rows, returning, options, params) => {
126
+ const errorPrefix = `insert("${table.schemaName}"."${table.tableName}")`;
127
+ const { nullableDefaultColumns = [] } = options;
128
+ const tokens = [`INSERT INTO "${table.schemaName}"."${table.tableName}"`];
129
+ const insertingColumns = [];
130
+ const columnsTextArray = [];
131
+ for (const column in table.columns) {
132
+ if (nullableDefaultColumns.includes(column) ||
133
+ !table.columns[column].nullable ||
134
+ table.columns[column].default) {
135
+ insertingColumns.push(column);
136
+ columnsTextArray.push((0, resolve_1.resolveColumn)(table, column, false));
137
+ }
138
+ }
139
+ tokens.push(`(${columnsTextArray.join(', ')})`, 'VALUES');
140
+ const rowsTextArray = [];
141
+ const _rows = typeof rows === 'function' ? rows(context) : rows;
142
+ if (_rows.length === 0) {
143
+ return (0, never_catch_1.err)(`${errorPrefix} -> rows -> empty`);
144
+ }
145
+ for (const _row of _rows) {
146
+ const rowTokens = [];
147
+ for (const insertingColumn of insertingColumns) {
148
+ if (_row[insertingColumn] === undefined) {
149
+ const column = table.columns[insertingColumn];
150
+ if (column.defaultValue !== undefined) {
151
+ switch (column.defaultValue[0]) {
152
+ case 'auto-increment':
153
+ rowTokens.push('DEFAULT');
154
+ continue;
155
+ case 'created-at':
156
+ case 'updated-at':
157
+ rowTokens.push(U.stringify(new Date(), true));
158
+ continue;
159
+ case 'sql':
160
+ rowTokens.push(column.defaultValue[1]);
161
+ continue;
162
+ case 'js':
163
+ rowTokens.push(U.stringify(column.defaultValue[1], true));
164
+ continue;
165
+ }
166
+ }
167
+ if (column.nullable) {
168
+ rowTokens.push(U.stringify(null, true));
169
+ continue;
170
+ }
171
+ return (0, never_catch_1.err)(`${errorPrefix} -> rows -> ${_rows.indexOf(_row)} -> ${insertingColumn} -> no-value`);
172
+ }
173
+ else {
174
+ const resolvedExpressionResult = (0, resolve_1.resolveExpression)(_row[insertingColumn], params.length + 1, false);
175
+ if (!resolvedExpressionResult.ok) {
176
+ return (0, never_catch_1.err)(`${errorPrefix} -> rows -> ${_rows.indexOf(_row)}][${insertingColumn} -> ${resolvedExpressionResult.error}`);
177
+ }
178
+ if (resolvedExpressionResult.value.text === '') {
179
+ return (0, never_catch_1.err)(`${errorPrefix} -> rows -> ${_rows.indexOf(_row)}][${insertingColumn} -> neutral`);
180
+ }
181
+ params.push(...resolvedExpressionResult.value.params);
182
+ rowTokens.push(resolvedExpressionResult.value.text);
183
+ }
184
+ }
185
+ rowsTextArray.push(`(${rowTokens.join(', ')})`);
186
+ }
187
+ tokens.push(rowsTextArray.join(', '));
188
+ const _returning = typeof returning === 'function' ? returning(context) : returning;
189
+ if (_returning.length !== 0) {
190
+ const resolvedReturning = (0, resolve_1.resolveReturning)(column => [table.columns[column].title, undefined], _returning, params.length + 1);
191
+ if (!resolvedReturning.ok) {
192
+ return (0, never_catch_1.err)(`${errorPrefix} -> ${resolvedReturning.error}`);
193
+ }
194
+ params.push(...resolvedReturning.value.params);
195
+ tokens.push('RETURNING', resolvedReturning.value.text);
196
+ }
197
+ return (0, never_catch_1.ok)({ sql: tokens.join(' '), params });
198
+ };
199
+ exports.createInsertQuery = createInsertQuery;
200
+ const createUpdateQuery = (context, table, sets, where, returning, params) => {
201
+ const errorPrefix = `update("${table.schemaName}"."${table.tableName}")`;
202
+ const tokens = [`UPDATE "${table.schemaName}"."${table.tableName}" SET`];
203
+ const _set = typeof sets === 'function' ? sets(context) : sets;
204
+ const setsTextArray = [];
205
+ let key;
206
+ for (key in _set) {
207
+ if (_set[key] === undefined) {
208
+ continue;
209
+ }
210
+ const setExpressionResult = (0, resolve_1.resolveExpression)(_set[key], params.length + 1, false);
211
+ if (!setExpressionResult.ok) {
212
+ return (0, never_catch_1.err)(`${errorPrefix} -> sets -> ${key} -> ${setExpressionResult.error}`);
213
+ }
214
+ if (setExpressionResult.value.text === '') {
215
+ return (0, never_catch_1.err)(`${errorPrefix} -> sets -> ${key} -> neutral`);
216
+ }
217
+ params.push(...setExpressionResult.value.params);
218
+ setsTextArray.push(`${(0, resolve_1.resolveColumn)(table, key, false)} = ${setExpressionResult.value.text}`);
219
+ }
220
+ for (const column in table.columns) {
221
+ switch (table.columns[column].defaultValue?.[0]) {
222
+ case 'updated-at':
223
+ setsTextArray.push(`${(0, resolve_1.resolveColumn)(table, column, false)} = ${U.stringify(new Date(), true)}`);
224
+ break;
225
+ }
226
+ }
227
+ if (setsTextArray.length === 0) {
228
+ return (0, never_catch_1.err)(`${errorPrefix} -> sets -> empty`);
229
+ }
230
+ tokens.push(setsTextArray.join(', '));
231
+ const resolvedWhereResult = (0, resolve_1.resolveExpression)(typeof where === 'function' ? where(context) : where, params.length + 1, false);
232
+ if (!resolvedWhereResult.ok) {
233
+ return (0, never_catch_1.err)(`${errorPrefix} -> where -> ${resolvedWhereResult.error}`);
234
+ }
235
+ if (resolvedWhereResult.value.text === '') {
236
+ return (0, never_catch_1.err)(`${errorPrefix} -> where -> neutral`);
237
+ }
238
+ params.push(...resolvedWhereResult.value.params);
239
+ tokens.push('WHERE', resolvedWhereResult.value.text);
240
+ const _returning = typeof returning === 'function' ? returning(context) : returning;
241
+ if (_returning.length !== 0) {
242
+ const resolvedReturning = (0, resolve_1.resolveReturning)(column => [table.columns[column].title, undefined], _returning, params.length + 1);
243
+ if (!resolvedReturning.ok) {
244
+ return (0, never_catch_1.err)(`${errorPrefix} -> ${resolvedReturning.error}`);
245
+ }
246
+ params.push(...resolvedReturning.value.params);
247
+ tokens.push('RETURNING', resolvedReturning.value.text);
248
+ }
249
+ return (0, never_catch_1.ok)({ sql: tokens.join(' '), params });
250
+ };
251
+ exports.createUpdateQuery = createUpdateQuery;
252
+ const createDeleteQuery = (context, table, returning, where, params) => {
253
+ const tokens = [`DELETE FROM "${table.schemaName}"."${table.tableName}"`];
254
+ const resolvedWhereResult = (0, resolve_1.resolveExpression)(typeof where === 'function' ? where(context) : where, params.length + 1, false);
255
+ if (!resolvedWhereResult.ok) {
256
+ return (0, never_catch_1.err)(`delete("${table.schemaName}"."${table.tableName}") -> where -> ${resolvedWhereResult.error}`);
257
+ }
258
+ if (resolvedWhereResult.value.text === '') {
259
+ return (0, never_catch_1.err)(`delete("${table.schemaName}"."${table.tableName}") -> where -> neutral`);
260
+ }
261
+ params.push(...resolvedWhereResult.value.params);
262
+ tokens.push('WHERE', resolvedWhereResult.value.text);
263
+ const _returning = typeof returning === 'function' ? returning(context) : returning;
264
+ if (_returning.length !== 0) {
265
+ const resolvedReturning = (0, resolve_1.resolveReturning)(column => [table.columns[column].title, undefined], _returning, params.length + 1);
266
+ if (!resolvedReturning.ok) {
267
+ return (0, never_catch_1.err)(`delete("${table.schemaName}"."${table.tableName}") -> ${resolvedReturning.error}`);
268
+ }
269
+ params.push(...resolvedReturning.value.params);
270
+ tokens.push('RETURNING', resolvedReturning.value.text);
271
+ }
272
+ return (0, never_catch_1.ok)({ sql: tokens.join(' '), params });
273
+ };
274
+ exports.createDeleteQuery = createDeleteQuery;
275
+ const createJoinSelectEntity = (main, joinTables, contexts) => ({
276
+ contexts: contexts,
277
+ select: function (returning, where, options = {}) {
278
+ return createQuery(params => createJoinSelectQuery(this.contexts, main, joinTables, returning, where, options, params));
279
+ },
280
+ join: function (joinType, joinTable, joinAlias, on) {
281
+ joinTables.push({
282
+ table: joinTable,
283
+ on: on,
284
+ joinType,
285
+ alias: joinAlias
286
+ });
287
+ return createJoinSelectEntity(main, joinTables, {
288
+ ...contexts,
289
+ [`${joinAlias}Context`]: (0, context_1.createContext)(joinTable, joinAlias)
290
+ });
291
+ }
292
+ });
293
+ exports.createJoinSelectEntity = createJoinSelectEntity;
294
+ const createJoinSelectQuery = (contexts, main, joinTables, returning, where, options, params) => {
295
+ const errorPrefix = `join-select("${main.table.schemaName}"."${main.table.tableName}")`;
296
+ const allTables = [main, ...joinTables];
297
+ const { distinct = false, groupBy = [], orders = [], start, step } = options;
298
+ const tokens = ['SELECT'];
299
+ if (distinct === true) {
300
+ tokens.push('DISTINCT');
301
+ }
302
+ else if (Array.isArray(distinct)) {
303
+ tokens.push(`DISTINCT ON(${distinct
304
+ .map(column => {
305
+ const { table, alias } = getTableDataOfJoinSelectColumn(allTables, column);
306
+ return (0, resolve_1.resolveColumn)(table, column.substring((alias + '_').length), true, alias);
307
+ })
308
+ .join(', ')})`);
309
+ }
310
+ const _returning = typeof returning === 'function' ? returning(contexts) : returning;
311
+ const resolvedReturning = (0, resolve_1.resolveReturning)(column => {
312
+ const { table, alias } = getTableDataOfJoinSelectColumn(allTables, column);
313
+ const columnKey = column.substring((alias + '_').length);
314
+ return [table.columns[columnKey].title, alias];
315
+ }, _returning, params.length + 1);
316
+ if (!resolvedReturning.ok) {
317
+ return (0, never_catch_1.err)(`${errorPrefix} -> ${resolvedReturning.error}`);
318
+ }
319
+ params.push(...resolvedReturning.value.params);
320
+ tokens.push(resolvedReturning.value.text, `FROM "${main.table.schemaName}"."${main.table.tableName}" "${main.alias}"`);
321
+ for (const joinTable of joinTables) {
322
+ const onExpressionResult = (0, resolve_1.resolveExpression)(typeof joinTable.on === 'function'
323
+ ? joinTable.on(contexts)
324
+ : joinTable.on, params.length + 1, false);
325
+ if (!onExpressionResult.ok) {
326
+ return (0, never_catch_1.err)(`${errorPrefix} -> join -> ${joinTables.indexOf(joinTable)} -> ${onExpressionResult.error}`);
327
+ }
328
+ if (onExpressionResult.value.text === '') {
329
+ return (0, never_catch_1.err)(`${errorPrefix} -> join -> ${joinTables.indexOf(joinTable)} -> neutral`);
330
+ }
331
+ params.push(...onExpressionResult.value.params);
332
+ tokens.push(`${keywords_1.Dictionary.JoinType[joinTable.joinType]} "${joinTable.table.schemaName}"."${joinTable.table.tableName}" "${joinTable.alias}" ON ${onExpressionResult.value.text}`);
333
+ }
334
+ const resolvedWhereResult = (0, resolve_1.resolveExpression)(typeof where === 'function' ? where(contexts) : where, params.length + 1, false);
335
+ if (!resolvedWhereResult.ok) {
336
+ return (0, never_catch_1.err)(`${errorPrefix} -> where -> ${resolvedWhereResult.error}`);
337
+ }
338
+ if (resolvedWhereResult.value.text === '') {
339
+ return (0, never_catch_1.err)(`${errorPrefix} -> where -> neutral`);
340
+ }
341
+ params.push(...resolvedWhereResult.value.params);
342
+ tokens.push('WHERE', resolvedWhereResult.value.text);
343
+ const _groupBy = typeof groupBy === 'function' ? groupBy(contexts) : groupBy;
344
+ if (_groupBy.length !== 0) {
345
+ const groupByTextArray = [];
346
+ for (const aGroupBy of _groupBy) {
347
+ const resolvedGroupBy = (0, resolve_1.resolveExpression)(aGroupBy, params.length + 1, false);
348
+ if (!resolvedGroupBy.ok) {
349
+ return (0, never_catch_1.err)(`${errorPrefix} -> groupBy -> ${_groupBy.indexOf(aGroupBy)} -> ${resolvedGroupBy.error}`);
350
+ }
351
+ params.push(...resolvedGroupBy.value.params);
352
+ groupByTextArray.push(resolvedGroupBy.value.text);
353
+ }
354
+ tokens.push('GROUP BY', groupByTextArray.join(', '));
355
+ }
356
+ if (orders.length !== 0) {
357
+ const ordersTextArray = [];
358
+ for (const order of orders) {
359
+ const { by, direction } = order;
360
+ const { table, alias } = getTableDataOfJoinSelectColumn(allTables, by);
361
+ ordersTextArray.push(`${(0, resolve_1.resolveColumn)(table, by.substring((alias + '_').length), true, alias)} ${keywords_1.Dictionary.OrderDirection[direction]}`);
362
+ }
363
+ tokens.push('ORDER BY', ordersTextArray.join(', '));
364
+ }
365
+ if (start !== undefined) {
366
+ if (start < 0) {
367
+ return (0, never_catch_1.err)(`${errorPrefix} -> start -> invalid`);
368
+ }
369
+ tokens.push('OFFSET', start.toString());
370
+ }
371
+ if (step !== undefined) {
372
+ if (step <= 0) {
373
+ return (0, never_catch_1.err)(`${errorPrefix} -> step -> invalid`);
374
+ }
375
+ tokens.push('LIMIT', step.toString());
376
+ }
377
+ return (0, never_catch_1.ok)({ sql: tokens.join(' '), params });
378
+ };
379
+ exports.createJoinSelectQuery = createJoinSelectQuery;
380
+ const getTableDataOfJoinSelectColumn = (tablesData, column) => {
381
+ const splitColumn = column.split('_');
382
+ if (splitColumn.length < 2) {
383
+ throw `no separator`;
384
+ }
385
+ for (let i = 1; i < splitColumn.length; i++) {
386
+ const tableAlias = splitColumn.slice(0, i).join('_');
387
+ for (const tableData of tablesData) {
388
+ if (tableData.alias === tableAlias &&
389
+ tableData.table.columns[splitColumn.slice(i).join('_')] !==
390
+ undefined) {
391
+ return tableData;
392
+ }
393
+ }
394
+ }
395
+ throw `column not found`;
396
+ };
397
+ exports.getTableDataOfJoinSelectColumn = getTableDataOfJoinSelectColumn;
398
+ const createQuery = (createQueryData) => {
399
+ let queryDataResult;
400
+ return {
401
+ getData: (params = []) => {
402
+ if (queryDataResult === undefined) {
403
+ queryDataResult = createQueryData(params);
404
+ }
405
+ if (!queryDataResult.ok) {
406
+ return queryDataResult;
407
+ }
408
+ return queryDataResult;
409
+ },
410
+ execute: async (client, mode, params = []) => {
411
+ if (queryDataResult === undefined) {
412
+ queryDataResult = createQueryData(params);
413
+ }
414
+ if (!queryDataResult.ok) {
415
+ return Promise.resolve(queryDataResult);
416
+ }
417
+ return client
418
+ .query(queryDataResult.value.sql + ';', queryDataResult.value.params)
419
+ .then(({ rows }) => (0, resolve_1.resolveResult)(rows, mode))
420
+ .catch(e => (0, never_catch_1.err)(e));
421
+ }
422
+ };
423
+ };
424
+ exports.createQuery = createQuery;
425
+ //# sourceMappingURL=entity.js.map