data-finder-ts 0.1.0 → 0.1.4

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 (64) hide show
  1. package/README.md +17 -55
  2. package/dist/chunk-4JVW4TAB.js +180 -0
  3. package/dist/chunk-4JVW4TAB.js.map +1 -0
  4. package/dist/chunk-4LNZV6EN.js +500 -0
  5. package/dist/chunk-4LNZV6EN.js.map +1 -0
  6. package/dist/chunk-FJYA2ASS.js +136 -0
  7. package/dist/chunk-FJYA2ASS.js.map +1 -0
  8. package/dist/chunk-FLEIUDZZ.js +14 -0
  9. package/dist/chunk-FLEIUDZZ.js.map +1 -0
  10. package/dist/chunk-MH4XMYVB.js +696 -0
  11. package/dist/chunk-MH4XMYVB.js.map +1 -0
  12. package/dist/chunk-PMPLCEWQ.js +90 -0
  13. package/dist/chunk-PMPLCEWQ.js.map +1 -0
  14. package/dist/chunk-UYMOE6YU.js +509 -0
  15. package/dist/chunk-UYMOE6YU.js.map +1 -0
  16. package/dist/datafinder/attribute.cjs +320 -0
  17. package/dist/datafinder/attribute.cjs.map +1 -0
  18. package/dist/datafinder/attribute.d.cts +86 -0
  19. package/dist/datafinder/attribute.d.ts +86 -0
  20. package/dist/datafinder/attribute.js +8 -0
  21. package/dist/datafinder/attribute.js.map +1 -0
  22. package/dist/datafinder/finder-registry.cjs +39 -0
  23. package/dist/datafinder/finder-registry.cjs.map +1 -0
  24. package/dist/datafinder/finder-registry.d.cts +4 -0
  25. package/dist/datafinder/finder-registry.d.ts +4 -0
  26. package/dist/datafinder/finder-registry.js +9 -0
  27. package/dist/datafinder/finder-registry.js.map +1 -0
  28. package/dist/datafinder/runner.cjs +1595 -0
  29. package/dist/datafinder/runner.cjs.map +1 -0
  30. package/dist/datafinder/runner.d.cts +44 -0
  31. package/dist/datafinder/runner.d.ts +44 -0
  32. package/dist/datafinder/runner.js +26 -0
  33. package/dist/datafinder/runner.js.map +1 -0
  34. package/dist/datafinder/sql-generator.cjs +1467 -0
  35. package/dist/datafinder/sql-generator.cjs.map +1 -0
  36. package/dist/datafinder/sql-generator.d.cts +8 -0
  37. package/dist/datafinder/sql-generator.d.ts +8 -0
  38. package/dist/datafinder/sql-generator.js +15 -0
  39. package/dist/datafinder/sql-generator.js.map +1 -0
  40. package/dist/datafinder/typed-attributes.cjs +909 -0
  41. package/dist/datafinder/typed-attributes.cjs.map +1 -0
  42. package/dist/datafinder/typed-attributes.d.cts +242 -0
  43. package/dist/datafinder/typed-attributes.d.ts +242 -0
  44. package/dist/datafinder/typed-attributes.js +25 -0
  45. package/dist/datafinder/typed-attributes.js.map +1 -0
  46. package/dist/index.cjs +2153 -0
  47. package/dist/index.cjs.map +1 -0
  48. package/dist/index.d.cts +28 -0
  49. package/dist/index.d.ts +28 -0
  50. package/dist/index.js +199 -0
  51. package/dist/index.js.map +1 -0
  52. package/dist/model/milestoning.cjs +145 -0
  53. package/dist/model/milestoning.cjs.map +1 -0
  54. package/dist/model/milestoning.d.cts +40 -0
  55. package/dist/model/milestoning.d.ts +40 -0
  56. package/dist/model/milestoning.js +18 -0
  57. package/dist/model/milestoning.js.map +1 -0
  58. package/dist/model/relational.cjs +579 -0
  59. package/dist/model/relational.cjs.map +1 -0
  60. package/dist/model/relational.d.cts +291 -0
  61. package/dist/model/relational.d.ts +291 -0
  62. package/dist/model/relational.js +99 -0
  63. package/dist/model/relational.js.map +1 -0
  64. package/package.json +6 -4
@@ -0,0 +1,136 @@
1
+ import {
2
+ toSql
3
+ } from "./chunk-MH4XMYVB.js";
4
+ import {
5
+ NoOperation
6
+ } from "./chunk-UYMOE6YU.js";
7
+
8
+ // src/datafinder/runner.ts
9
+ var DEFAULT_TIMEOUT_MS = 6e4;
10
+ var QueryTimeoutError = class extends Error {
11
+ constructor(timeoutMs) {
12
+ super(`Query exceeded ${timeoutMs}ms timeout`);
13
+ this.timeoutMs = timeoutMs;
14
+ this.name = "QueryTimeoutError";
15
+ }
16
+ timeoutMs;
17
+ };
18
+ var _runner = null;
19
+ function registerRunner(runner) {
20
+ _runner = runner;
21
+ }
22
+ function clearRunner() {
23
+ _runner = null;
24
+ }
25
+ function getRunner() {
26
+ if (!_runner) throw new Error("No query runner registered. Call registerRunner() first.");
27
+ return _runner;
28
+ }
29
+ var FinderResult = class {
30
+ constructor(_businessDate, _processingDatetime, _columns, _table, _op, _businessDateTo = null) {
31
+ this._businessDate = _businessDate;
32
+ this._processingDatetime = _processingDatetime;
33
+ this._columns = _columns;
34
+ this._table = _table;
35
+ this._op = _op;
36
+ this._businessDateTo = _businessDateTo;
37
+ }
38
+ _businessDate;
39
+ _processingDatetime;
40
+ _columns;
41
+ _table;
42
+ _op;
43
+ _businessDateTo;
44
+ _orderBy = [];
45
+ _groupBy = [];
46
+ _limit;
47
+ _timeoutMs = DEFAULT_TIMEOUT_MS;
48
+ orderByOp(...sorts) {
49
+ this._orderBy = sorts;
50
+ return this;
51
+ }
52
+ groupByOp(...attrs) {
53
+ this._groupBy = attrs;
54
+ return this;
55
+ }
56
+ limit(n) {
57
+ this._limit = n;
58
+ return this;
59
+ }
60
+ /** Abort the query and throw QueryTimeoutError if it runs longer than `milliseconds` (default 60000). */
61
+ timeout(milliseconds) {
62
+ this._timeoutMs = milliseconds;
63
+ return this;
64
+ }
65
+ toSql() {
66
+ return toSql(
67
+ this._businessDate,
68
+ this._processingDatetime,
69
+ this._columns,
70
+ this._table,
71
+ this._op,
72
+ this._orderBy,
73
+ this._groupBy,
74
+ this._limit,
75
+ this._businessDateTo
76
+ );
77
+ }
78
+ async toRows() {
79
+ return getRunner().select(
80
+ this._businessDate,
81
+ this._processingDatetime,
82
+ this._columns,
83
+ this._table,
84
+ this._op,
85
+ this._orderBy,
86
+ this._groupBy,
87
+ this._limit,
88
+ this._timeoutMs,
89
+ this._businessDateTo
90
+ );
91
+ }
92
+ };
93
+ function convertDate(value) {
94
+ if (value === null) return null;
95
+ if (value instanceof Date) return value;
96
+ let normalized = value;
97
+ if (/^\d{4}-\d{2}-\d{2}$/.test(value)) normalized = value + "T00:00:00Z";
98
+ else if (/^\d{4}-\d{2}-\d{2}[ T]\d{2}:\d{2}(:\d{2}(\.\d+)?)?$/.test(value)) normalized = value.replace(" ", "T") + "Z";
99
+ const d = new Date(normalized);
100
+ if (isNaN(d.getTime())) throw new Error(`Cannot parse date: ${value}`);
101
+ return d;
102
+ }
103
+ function convertInputsAndSelect(businessDate, processingDatetime, columns, table, op = new NoOperation()) {
104
+ return new FinderResult(
105
+ convertDate(businessDate),
106
+ convertDate(processingDatetime),
107
+ columns,
108
+ table,
109
+ op
110
+ );
111
+ }
112
+ function convertInputsAndSelectForDateRange(businessDateFrom, businessDateTo, processingDatetime, columns, table, op = new NoOperation()) {
113
+ if (businessDateFrom == null) throw new Error("businessDateFrom is required for findForDateRange");
114
+ if (businessDateTo == null) throw new Error("businessDateTo is required for findForDateRange");
115
+ if (processingDatetime == null) throw new Error("processingValidAt is required for findForDateRange");
116
+ return new FinderResult(
117
+ convertDate(businessDateFrom),
118
+ convertDate(processingDatetime),
119
+ columns,
120
+ table,
121
+ op,
122
+ convertDate(businessDateTo)
123
+ );
124
+ }
125
+
126
+ export {
127
+ DEFAULT_TIMEOUT_MS,
128
+ QueryTimeoutError,
129
+ registerRunner,
130
+ clearRunner,
131
+ getRunner,
132
+ FinderResult,
133
+ convertInputsAndSelect,
134
+ convertInputsAndSelectForDateRange
135
+ };
136
+ //# sourceMappingURL=chunk-FJYA2ASS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/datafinder/runner.ts"],"sourcesContent":["import { Attribute } from './attribute';\nimport { toSql } from './sql-generator';\nimport {\n Table,\n Operation,\n SortOperation,\n NoOperation,\n RelationalOperationElement,\n} from '../model/relational';\n\nexport type Row = unknown[];\n\nexport const DEFAULT_TIMEOUT_MS = 60_000;\n\n/** Thrown by a QueryRunner when a query runs longer than the timeout set on its FinderResult. */\nexport class QueryTimeoutError extends Error {\n constructor(readonly timeoutMs: number) {\n super(`Query exceeded ${timeoutMs}ms timeout`);\n this.name = 'QueryTimeoutError';\n }\n}\n\n/** Minimum interface satisfied by both Table (SQL) and GraphQLQuery (GraphQL). */\nexport interface QueryTarget {\n readonly name: string;\n}\n\nexport interface QueryRunner {\n select(\n businessDate: Date | null,\n processingDatetime: Date | null,\n columns: (Attribute | RelationalOperationElement)[],\n table: QueryTarget,\n op: RelationalOperationElement,\n orderBy?: SortOperation[],\n groupBy?: Attribute[],\n limit?: number,\n timeoutMs?: number,\n businessDateTo?: Date | null,\n ): Promise<Row[]>;\n}\n\nlet _runner: QueryRunner | null = null;\n\nexport function registerRunner(runner: QueryRunner): void { _runner = runner; }\nexport function clearRunner(): void { _runner = null; }\nexport function getRunner(): QueryRunner {\n if (!_runner) throw new Error('No query runner registered. Call registerRunner() first.');\n return _runner;\n}\n\nexport class FinderResult {\n private _orderBy: SortOperation[] = [];\n private _groupBy: Attribute[] = [];\n private _limit?: number;\n private _timeoutMs: number = DEFAULT_TIMEOUT_MS;\n\n constructor(\n private readonly _businessDate: Date | null,\n private readonly _processingDatetime: Date | null,\n private readonly _columns: (Attribute | RelationalOperationElement)[],\n private readonly _table: QueryTarget,\n private readonly _op: RelationalOperationElement,\n private readonly _businessDateTo: Date | null = null,\n ) {}\n\n orderByOp(...sorts: SortOperation[]): this {\n this._orderBy = sorts;\n return this;\n }\n\n groupByOp(...attrs: Attribute[]): this {\n this._groupBy = attrs;\n return this;\n }\n\n limit(n: number): this {\n this._limit = n;\n return this;\n }\n\n /** Abort the query and throw QueryTimeoutError if it runs longer than `milliseconds` (default 60000). */\n timeout(milliseconds: number): this {\n this._timeoutMs = milliseconds;\n return this;\n }\n\n toSql(): string {\n return toSql(\n this._businessDate,\n this._processingDatetime,\n this._columns,\n this._table as Table,\n this._op,\n this._orderBy,\n this._groupBy,\n this._limit,\n this._businessDateTo,\n );\n }\n\n async toRows(): Promise<Row[]> {\n return getRunner().select(\n this._businessDate,\n this._processingDatetime,\n this._columns,\n this._table,\n this._op,\n this._orderBy,\n this._groupBy,\n this._limit,\n this._timeoutMs,\n this._businessDateTo,\n );\n }\n}\n\nfunction convertDate(value: Date | string | null): Date | null {\n if (value === null) return null;\n if (value instanceof Date) return value;\n // Zone-less strings (YYYY-MM-DD, or YYYY-MM-DD HH:MM[:SS]) are read as UTC, matching how\n // dates are formatted into SQL, so the value doesn't shift with the machine's timezone.\n let normalized = value;\n if (/^\\d{4}-\\d{2}-\\d{2}$/.test(value)) normalized = value + 'T00:00:00Z';\n else if (/^\\d{4}-\\d{2}-\\d{2}[ T]\\d{2}:\\d{2}(:\\d{2}(\\.\\d+)?)?$/.test(value)) normalized = value.replace(' ', 'T') + 'Z';\n const d = new Date(normalized);\n if (isNaN(d.getTime())) throw new Error(`Cannot parse date: ${value}`);\n return d;\n}\n\nexport function convertInputsAndSelect(\n businessDate: Date | string | null,\n processingDatetime: Date | string | null,\n columns: (Attribute | RelationalOperationElement)[],\n table: QueryTarget,\n op: RelationalOperationElement = new NoOperation(),\n): FinderResult {\n return new FinderResult(\n convertDate(businessDate),\n convertDate(processingDatetime),\n columns,\n table,\n op,\n );\n}\n\nexport function convertInputsAndSelectForDateRange(\n businessDateFrom: Date | string,\n businessDateTo: Date | string,\n processingDatetime: Date | string,\n columns: (Attribute | RelationalOperationElement)[],\n table: QueryTarget,\n op: RelationalOperationElement = new NoOperation(),\n): FinderResult {\n if (businessDateFrom == null) throw new Error('businessDateFrom is required for findForDateRange');\n if (businessDateTo == null) throw new Error('businessDateTo is required for findForDateRange');\n if (processingDatetime == null) throw new Error('processingValidAt is required for findForDateRange');\n return new FinderResult(\n convertDate(businessDateFrom),\n convertDate(processingDatetime),\n columns,\n table,\n op,\n convertDate(businessDateTo),\n );\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,14 @@
1
+ // src/datafinder/finder-registry.ts
2
+ var _registry = /* @__PURE__ */ new Map();
3
+ function registerRelatedFinderClass(name, cls) {
4
+ _registry.set(name, cls);
5
+ }
6
+ function getRelatedFinderClass(name) {
7
+ return _registry.get(name);
8
+ }
9
+
10
+ export {
11
+ registerRelatedFinderClass,
12
+ getRelatedFinderClass
13
+ };
14
+ //# sourceMappingURL=chunk-FLEIUDZZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/datafinder/finder-registry.ts"],"sourcesContent":["const _registry = new Map<string, new (...args: any[]) => unknown>();\n\nexport function registerRelatedFinderClass(name: string, cls: new (...args: any[]) => unknown): void {\n _registry.set(name, cls);\n}\n\nexport function getRelatedFinderClass(name: string): (new (...args: any[]) => unknown) | undefined {\n return _registry.get(name);\n}\n"],"mappings":";AAAA,IAAM,YAAY,oBAAI,IAA6C;AAE5D,SAAS,2BAA2B,MAAc,KAA4C;AACnG,YAAU,IAAI,MAAM,GAAG;AACzB;AAEO,SAAS,sBAAsB,MAA6D;AACjG,SAAO,UAAU,IAAI,IAAI;AAC3B;","names":[]}