@c9up/eon 0.1.0

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 (123) hide show
  1. package/README.md +69 -0
  2. package/dist/EonProvider.d.ts +51 -0
  3. package/dist/EonProvider.d.ts.map +1 -0
  4. package/dist/EonProvider.js +154 -0
  5. package/dist/EonProvider.js.map +1 -0
  6. package/dist/connection/EonConnection.d.ts +116 -0
  7. package/dist/connection/EonConnection.d.ts.map +1 -0
  8. package/dist/connection/EonConnection.js +15 -0
  9. package/dist/connection/EonConnection.js.map +1 -0
  10. package/dist/connection/config.d.ts +56 -0
  11. package/dist/connection/config.d.ts.map +1 -0
  12. package/dist/connection/config.js +14 -0
  13. package/dist/connection/config.js.map +1 -0
  14. package/dist/connection/websocket.d.ts +16 -0
  15. package/dist/connection/websocket.d.ts.map +1 -0
  16. package/dist/connection/websocket.js +383 -0
  17. package/dist/connection/websocket.js.map +1 -0
  18. package/dist/decorators/superTable.d.ts +73 -0
  19. package/dist/decorators/superTable.d.ts.map +1 -0
  20. package/dist/decorators/superTable.js +98 -0
  21. package/dist/decorators/superTable.js.map +1 -0
  22. package/dist/index.d.ts +20 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +19 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/ingest/schemaless.d.ts +22 -0
  27. package/dist/ingest/schemaless.d.ts.map +1 -0
  28. package/dist/ingest/schemaless.js +161 -0
  29. package/dist/ingest/schemaless.js.map +1 -0
  30. package/dist/ingest/sql.d.ts +23 -0
  31. package/dist/ingest/sql.d.ts.map +1 -0
  32. package/dist/ingest/sql.js +59 -0
  33. package/dist/ingest/sql.js.map +1 -0
  34. package/dist/ingest/stmt.d.ts +82 -0
  35. package/dist/ingest/stmt.d.ts.map +1 -0
  36. package/dist/ingest/stmt.js +246 -0
  37. package/dist/ingest/stmt.js.map +1 -0
  38. package/dist/metadata-keys.d.ts +17 -0
  39. package/dist/metadata-keys.d.ts.map +1 -0
  40. package/dist/metadata-keys.js +17 -0
  41. package/dist/metadata-keys.js.map +1 -0
  42. package/dist/query/TimeSeriesQuery.d.ts +121 -0
  43. package/dist/query/TimeSeriesQuery.d.ts.map +1 -0
  44. package/dist/query/TimeSeriesQuery.js +291 -0
  45. package/dist/query/TimeSeriesQuery.js.map +1 -0
  46. package/dist/query/native.d.ts +22 -0
  47. package/dist/query/native.d.ts.map +1 -0
  48. package/dist/query/native.js +135 -0
  49. package/dist/query/native.js.map +1 -0
  50. package/dist/repository/SuperTableRepository.d.ts +80 -0
  51. package/dist/repository/SuperTableRepository.d.ts.map +1 -0
  52. package/dist/repository/SuperTableRepository.js +232 -0
  53. package/dist/repository/SuperTableRepository.js.map +1 -0
  54. package/dist/schema/CreateStableSpec.d.ts +140 -0
  55. package/dist/schema/CreateStableSpec.d.ts.map +1 -0
  56. package/dist/schema/CreateStableSpec.js +41 -0
  57. package/dist/schema/CreateStableSpec.js.map +1 -0
  58. package/dist/schema/EonMigrationRunner.d.ts +71 -0
  59. package/dist/schema/EonMigrationRunner.d.ts.map +1 -0
  60. package/dist/schema/EonMigrationRunner.js +295 -0
  61. package/dist/schema/EonMigrationRunner.js.map +1 -0
  62. package/dist/schema/EonSchema.d.ts +128 -0
  63. package/dist/schema/EonSchema.d.ts.map +1 -0
  64. package/dist/schema/EonSchema.js +309 -0
  65. package/dist/schema/EonSchema.js.map +1 -0
  66. package/dist/schema/Migration.d.ts +47 -0
  67. package/dist/schema/Migration.d.ts.map +1 -0
  68. package/dist/schema/Migration.js +55 -0
  69. package/dist/schema/Migration.js.map +1 -0
  70. package/dist/schema/compile.d.ts +33 -0
  71. package/dist/schema/compile.d.ts.map +1 -0
  72. package/dist/schema/compile.js +70 -0
  73. package/dist/schema/compile.js.map +1 -0
  74. package/dist/schema/sync.d.ts +45 -0
  75. package/dist/schema/sync.d.ts.map +1 -0
  76. package/dist/schema/sync.js +102 -0
  77. package/dist/schema/sync.js.map +1 -0
  78. package/dist/services/connection.d.ts +33 -0
  79. package/dist/services/connection.d.ts.map +1 -0
  80. package/dist/services/connection.js +71 -0
  81. package/dist/services/connection.js.map +1 -0
  82. package/dist/testing/Factory.d.ts +43 -0
  83. package/dist/testing/Factory.d.ts.map +1 -0
  84. package/dist/testing/Factory.js +134 -0
  85. package/dist/testing/Factory.js.map +1 -0
  86. package/dist/testing/FakeEonConnection.d.ts +43 -0
  87. package/dist/testing/FakeEonConnection.d.ts.map +1 -0
  88. package/dist/testing/FakeEonConnection.js +315 -0
  89. package/dist/testing/FakeEonConnection.js.map +1 -0
  90. package/dist/testing/index.d.ts +34 -0
  91. package/dist/testing/index.d.ts.map +1 -0
  92. package/dist/testing/index.js +67 -0
  93. package/dist/testing/index.js.map +1 -0
  94. package/index.darwin-arm64.node +0 -0
  95. package/index.darwin-x64.node +0 -0
  96. package/index.linux-arm64-gnu.node +0 -0
  97. package/index.linux-x64-gnu.node +0 -0
  98. package/index.win32-x64-msvc.node +0 -0
  99. package/package.json +65 -0
  100. package/scripts/copy-napi.mjs +72 -0
  101. package/src/EonProvider.ts +222 -0
  102. package/src/connection/EonConnection.ts +146 -0
  103. package/src/connection/config.ts +60 -0
  104. package/src/connection/websocket.ts +436 -0
  105. package/src/decorators/superTable.ts +169 -0
  106. package/src/index.ts +118 -0
  107. package/src/ingest/schemaless.ts +211 -0
  108. package/src/ingest/sql.ts +73 -0
  109. package/src/ingest/stmt.ts +335 -0
  110. package/src/metadata-keys.ts +20 -0
  111. package/src/query/TimeSeriesQuery.ts +480 -0
  112. package/src/query/native.ts +180 -0
  113. package/src/repository/SuperTableRepository.ts +347 -0
  114. package/src/schema/CreateStableSpec.ts +184 -0
  115. package/src/schema/EonMigrationRunner.ts +378 -0
  116. package/src/schema/EonSchema.ts +396 -0
  117. package/src/schema/Migration.ts +66 -0
  118. package/src/schema/compile.ts +109 -0
  119. package/src/schema/sync.ts +142 -0
  120. package/src/services/connection.ts +89 -0
  121. package/src/testing/Factory.ts +186 -0
  122. package/src/testing/FakeEonConnection.ts +351 -0
  123. package/src/testing/index.ts +81 -0
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Schema facade — drive TDengine DDL from decorator metadata through a live
3
+ * `EonConnection`. Agnostic leaf: takes the connection structurally, never
4
+ * imports `@c9up/ream`.
5
+ *
6
+ * Every statement is compiled in Rust (`compileStatementNative`) and run through
7
+ * the literal-only `EonConnection.exec` (58.2 D3). Child-table creation renders
8
+ * its tag values as inlined SQL literals (`literal: true`, D4) so `exec` can run
9
+ * it directly; the `?`-bound STMT form lands with ingest in 58.4.
10
+ */
11
+ import { compileStatementNative } from "../query/native.js";
12
+ import { compileCreateStableSpec, requireSuperTableName, } from "./compile.js";
13
+ /** Compile a spec and run each resulting statement through the connection. */
14
+ async function execSpec(conn, spec) {
15
+ const { statements } = compileStatementNative(spec, "tdengine");
16
+ for (const sql of statements) {
17
+ await conn.exec(sql);
18
+ }
19
+ }
20
+ /** Create the super-table for a decorated class (`CREATE STABLE IF NOT EXISTS`). */
21
+ export function syncSuperTable(conn, EntityClass) {
22
+ const spec = { ...compileCreateStableSpec(EntityClass), ifNotExists: true };
23
+ return execSpec(conn, spec);
24
+ }
25
+ /**
26
+ * Create an explicit child table bound to its super-table's tag values
27
+ * (`CREATE TABLE name USING stable TAGS (...)`). Tag values are inlined as typed
28
+ * SQL literals (D4).
29
+ */
30
+ export function createChildTable(conn, options) {
31
+ const using = resolveStableName(options);
32
+ const spec = {
33
+ kind: "createChildTable",
34
+ name: options.name,
35
+ using,
36
+ tags: options.tags,
37
+ ifNotExists: options.ifNotExists ?? true,
38
+ literal: true,
39
+ };
40
+ return execSpec(conn, spec);
41
+ }
42
+ /** Drop the super-table for a decorated class (`DROP STABLE IF EXISTS`). */
43
+ export function dropSuperTable(conn, EntityClass) {
44
+ const spec = {
45
+ kind: "dropStable",
46
+ name: requireSuperTableName(EntityClass),
47
+ ifExists: true,
48
+ };
49
+ return execSpec(conn, spec);
50
+ }
51
+ /**
52
+ * A deterministic child-table name for a stable + tag-set, so the same tags
53
+ * always map to the same child (idempotent create, stable routing for 58.4
54
+ * ingest). Dependency-free FNV-1a — no `crypto`, no npm dep (D6). Pass an
55
+ * explicit `name` to {@link createChildTable} to override.
56
+ */
57
+ export function childTableName(stableOrEntity, tagValues) {
58
+ const stable = typeof stableOrEntity === "string"
59
+ ? stableOrEntity
60
+ : requireSuperTableName(stableOrEntity);
61
+ const key = [stable, ...tagValues.map(stringifyTagValue)].join("\u0000");
62
+ return `t_${fnv1a(key)}`;
63
+ }
64
+ function resolveStableName(options) {
65
+ if (typeof options.stable === "string" && options.stable.length > 0) {
66
+ return options.stable;
67
+ }
68
+ if (options.EntityClass) {
69
+ return requireSuperTableName(options.EntityClass);
70
+ }
71
+ throw new Error("[E_EON_CHILD_STABLE] createChildTable requires either `stable` (name) or `EntityClass`");
72
+ }
73
+ /**
74
+ * A tag value's stable string form for the child-name key. `JSON.stringify`
75
+ * throws on a `bigint` (`TypeError: Do not know how to serialize a BigInt`),
76
+ * which would surface as an opaque crash for any BIGINT `@Tag`; render bigints
77
+ * explicitly so every tag type maps to a deterministic, typed-out string.
78
+ */
79
+ export function stringifyTagValue(value) {
80
+ if (typeof value === "bigint")
81
+ return `${value}n`;
82
+ return JSON.stringify(value) ?? "null";
83
+ }
84
+ /**
85
+ * 64-bit FNV-1a over UTF-16 code units → zero-padded 16-char hex. 64 bits keeps
86
+ * the child-name collision probability negligible even at millions of distinct
87
+ * tag-sets; a 32-bit space collides ~50% by only ~77k children (realistic
88
+ * per-device TSDB cardinality), which would silently write one device's rows
89
+ * under another's tags. `groupByChild` additionally asserts no two distinct
90
+ * tag-sets ever share a name.
91
+ */
92
+ function fnv1a(input) {
93
+ const MASK = (1n << 64n) - 1n;
94
+ const PRIME = 0x00000100000001b3n;
95
+ let hash = 0xcbf29ce484222325n;
96
+ for (let i = 0; i < input.length; i++) {
97
+ hash = (hash ^ BigInt(input.charCodeAt(i))) & MASK;
98
+ hash = (hash * PRIME) & MASK;
99
+ }
100
+ return hash.toString(16).padStart(16, "0");
101
+ }
102
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/schema/sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Default `connection` singleton — ergonomic access to the configured eon
3
+ * connection from anywhere, mirroring `@c9up/atlas/services/db`.
4
+ *
5
+ * import connection from '@c9up/eon/services/connection'
6
+ *
7
+ * const rows = await connection.query('SELECT server_version()')
8
+ *
9
+ * Populated by `EonProvider.boot()`. The instance is whatever
10
+ * `timeseries.connections[default]` resolves to — a ws `EonConnection` today, a
11
+ * future native impl behind the same seam tomorrow.
12
+ */
13
+ import type { EonConnection } from "../connection/EonConnection.js";
14
+ /** @internal Bind the singleton (called by EonProvider.boot). */
15
+ export declare function setConnection(connection: EonConnection): void;
16
+ /**
17
+ * @internal Unbind the singleton IF it still points at `connection` (called by
18
+ * EonProvider.shutdown). Ownership-guarded: when a second provider rebound the
19
+ * singleton, an older provider's shutdown must not clear the newer binding —
20
+ * otherwise `connection.*` after shutdown would dereference a closed handle.
21
+ */
22
+ export declare function clearConnection(connection: EonConnection): void;
23
+ /** @internal Read the singleton (or `undefined` pre-boot). */
24
+ export declare function getConnection(): EonConnection | undefined;
25
+ /**
26
+ * Forwards each `EonConnection` member to the bound instance (throwing until
27
+ * boot binds it). A plain forwarding object rather than a `Proxy` keeps the
28
+ * generic `query<T>` typed and cast-free (AC9) — the seam surface is small and
29
+ * explicit.
30
+ */
31
+ declare const connection: EonConnection;
32
+ export default connection;
33
+ //# sourceMappingURL=connection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/services/connection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAEX,aAAa,EAEb,MAAM,gCAAgC,CAAC;AAIxC,iEAAiE;AACjE,wBAAgB,aAAa,CAAC,UAAU,EAAE,aAAa,GAAG,IAAI,CAE7D;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,aAAa,GAAG,IAAI,CAE/D;AAED,8DAA8D;AAC9D,wBAAgB,aAAa,IAAI,aAAa,GAAG,SAAS,CAEzD;AAcD;;;;;GAKG;AACH,QAAA,MAAM,UAAU,EAAE,aA2BjB,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Default `connection` singleton — ergonomic access to the configured eon
3
+ * connection from anywhere, mirroring `@c9up/atlas/services/db`.
4
+ *
5
+ * import connection from '@c9up/eon/services/connection'
6
+ *
7
+ * const rows = await connection.query('SELECT server_version()')
8
+ *
9
+ * Populated by `EonProvider.boot()`. The instance is whatever
10
+ * `timeseries.connections[default]` resolves to — a ws `EonConnection` today, a
11
+ * future native impl behind the same seam tomorrow.
12
+ */
13
+ let instance;
14
+ /** @internal Bind the singleton (called by EonProvider.boot). */
15
+ export function setConnection(connection) {
16
+ instance = connection;
17
+ }
18
+ /**
19
+ * @internal Unbind the singleton IF it still points at `connection` (called by
20
+ * EonProvider.shutdown). Ownership-guarded: when a second provider rebound the
21
+ * singleton, an older provider's shutdown must not clear the newer binding —
22
+ * otherwise `connection.*` after shutdown would dereference a closed handle.
23
+ */
24
+ export function clearConnection(connection) {
25
+ if (instance === connection)
26
+ instance = undefined;
27
+ }
28
+ /** @internal Read the singleton (or `undefined` pre-boot). */
29
+ export function getConnection() {
30
+ return instance;
31
+ }
32
+ /** The bound connection, or a descriptive throw if accessed before boot. */
33
+ function requireInstance() {
34
+ if (!instance) {
35
+ throw new Error("[eon] connection singleton accessed before EonProvider.boot() ran. " +
36
+ "Check that `@c9up/eon/provider` is listed in your reamrc.ts providers " +
37
+ "and that `config/timeseries.ts` defines at least one connection.");
38
+ }
39
+ return instance;
40
+ }
41
+ /**
42
+ * Forwards each `EonConnection` member to the bound instance (throwing until
43
+ * boot binds it). A plain forwarding object rather than a `Proxy` keeps the
44
+ * generic `query<T>` typed and cast-free (AC9) — the seam surface is small and
45
+ * explicit.
46
+ */
47
+ const connection = {
48
+ get transport() {
49
+ return requireInstance().transport;
50
+ },
51
+ exec(sql) {
52
+ return requireInstance().exec(sql);
53
+ },
54
+ query(sql) {
55
+ return requireInstance().query(sql);
56
+ },
57
+ ping() {
58
+ return requireInstance().ping();
59
+ },
60
+ ingestColumnar(request) {
61
+ return requireInstance().ingestColumnar(request);
62
+ },
63
+ schemaless(lines, options) {
64
+ return requireInstance().schemaless(lines, options);
65
+ },
66
+ close() {
67
+ return requireInstance().close();
68
+ },
69
+ };
70
+ export default connection;
71
+ //# sourceMappingURL=connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/services/connection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAQH,IAAI,QAAmC,CAAC;AAExC,iEAAiE;AACjE,MAAM,UAAU,aAAa,CAAC,UAAyB;IACtD,QAAQ,GAAG,UAAU,CAAC;AACvB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,UAAyB;IACxD,IAAI,QAAQ,KAAK,UAAU;QAAE,QAAQ,GAAG,SAAS,CAAC;AACnD,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,aAAa;IAC5B,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED,4EAA4E;AAC5E,SAAS,eAAe;IACvB,IAAI,CAAC,QAAQ,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACd,qEAAqE;YACpE,wEAAwE;YACxE,kEAAkE,CACnE,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,GAAkB;IACjC,IAAI,SAAS;QACZ,OAAO,eAAe,EAAE,CAAC,SAAS,CAAC;IACpC,CAAC;IACD,IAAI,CAAC,GAAW;QACf,OAAO,eAAe,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IACD,KAAK,CAA8B,GAAW;QAC7C,OAAO,eAAe,EAAE,CAAC,KAAK,CAAI,GAAG,CAAC,CAAC;IACxC,CAAC;IACD,IAAI;QACH,OAAO,eAAe,EAAE,CAAC,IAAI,EAAE,CAAC;IACjC,CAAC;IACD,cAAc,CACb,OAA0B;QAE1B,OAAO,eAAe,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC;IACD,UAAU,CACT,KAAwB,EACxB,OAA8B;QAE9B,OAAO,eAAe,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IACD,KAAK;QACJ,OAAO,eAAe,EAAE,CAAC,KAAK,EAAE,CAAC;IAClC,CAAC;CACD,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * `factory` / `FactoryBuilder` — Lucid/atlas-shaped test-data factory for
3
+ * time-series points (58.6), mirroring atlas `testing/Factory.ts`.
4
+ *
5
+ * Named states, ad-hoc merges, stubbing (build without persisting), and a
6
+ * minimal `create`/`createMany` that persists through a literal `INSERT` via
7
+ * `EonConnection.exec` — working against a {@link FakeEonConnection} OR a real
8
+ * one. Hydration resolves columns/tags via the 58.3 metadata getters, NEVER
9
+ * `key in instance` (the `@Column() declare x` pitfall, memory
10
+ * `project_atlas_declare_hydration`).
11
+ *
12
+ * Named boundary: `create()` is a TEST-ONLY insert, NOT the 58.4
13
+ * `SuperTableRepository` ingest API — the two coexist (the factory stays
14
+ * test-scoped) once a live repository is in play.
15
+ */
16
+ import type { EonConnection } from "../connection/EonConnection.js";
17
+ /** A concrete, `@SuperTable`-decorated point class (has a no-arg constructor). */
18
+ type PointConstructor<T extends object> = (new () => T) & {
19
+ readonly name: string;
20
+ };
21
+ /** A named state — mutates an in-progress data object in place. */
22
+ type StateFn = (data: Record<string, unknown>) => void;
23
+ export interface FactoryBuilder<T extends object> {
24
+ /** Override fields for the NEXT build (reset after consumption). */
25
+ merge(overrides: Record<string, unknown>): FactoryBuilder<T>;
26
+ /** Declare a named variation, stored on the factory's state map. */
27
+ state(name: string, fn: StateFn): FactoryBuilder<T>;
28
+ /** Activate declared states for the NEXT build (compose in order; reset after). */
29
+ apply(...names: string[]): FactoryBuilder<T>;
30
+ /** Build a data object without persisting or instantiating. */
31
+ make(): Record<string, unknown>;
32
+ /** Build `count` data objects without persisting. */
33
+ makeMany(count: number): Record<string, unknown>[];
34
+ /** Build an INSTANCE without persisting (Lucid `makeStubbed`). */
35
+ makeStubbed(): T;
36
+ /** Build + persist a single point through `conn.exec` (literal INSERT). */
37
+ create(conn: EonConnection): Promise<T>;
38
+ /** Build + persist `count` points. */
39
+ createMany(count: number, conn: EonConnection): Promise<T[]>;
40
+ }
41
+ export declare function factory<T extends object>(EntityClass: PointConstructor<T>, defaults: () => Record<string, unknown>): FactoryBuilder<T>;
42
+ export {};
43
+ //# sourceMappingURL=Factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Factory.d.ts","sourceRoot":"","sources":["../../src/testing/Factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAapE,kFAAkF;AAClF,KAAK,gBAAgB,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG;IACzD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,mEAAmE;AACnE,KAAK,OAAO,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;AAEvD,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,MAAM;IAC/C,oEAAoE;IACpE,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;IAC7D,oEAAoE;IACpE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;IACpD,mFAAmF;IACnF,KAAK,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;IAC7C,+DAA+D;IAC/D,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,qDAAqD;IACrD,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACnD,kEAAkE;IAClE,WAAW,IAAI,CAAC,CAAC;IACjB,2EAA2E;IAC3E,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACxC,sCAAsC;IACtC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;CAC7D;AAED,wBAAgB,OAAO,CAAC,CAAC,SAAS,MAAM,EACvC,WAAW,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAChC,QAAQ,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACrC,cAAc,CAAC,CAAC,CAAC,CA8HnB"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * `factory` / `FactoryBuilder` — Lucid/atlas-shaped test-data factory for
3
+ * time-series points (58.6), mirroring atlas `testing/Factory.ts`.
4
+ *
5
+ * Named states, ad-hoc merges, stubbing (build without persisting), and a
6
+ * minimal `create`/`createMany` that persists through a literal `INSERT` via
7
+ * `EonConnection.exec` — working against a {@link FakeEonConnection} OR a real
8
+ * one. Hydration resolves columns/tags via the 58.3 metadata getters, NEVER
9
+ * `key in instance` (the `@Column() declare x` pitfall, memory
10
+ * `project_atlas_declare_hydration`).
11
+ *
12
+ * Named boundary: `create()` is a TEST-ONLY insert, NOT the 58.4
13
+ * `SuperTableRepository` ingest API — the two coexist (the factory stays
14
+ * test-scoped) once a live repository is in play.
15
+ */
16
+ import { getColumnMetadata, getTagMetadata, getTimestampColumn, } from "../decorators/superTable.js";
17
+ import { compileStatementNative } from "../query/native.js";
18
+ import { orderTimestampFirst, requireSuperTableName, } from "../schema/compile.js";
19
+ import { childTableName } from "../schema/sync.js";
20
+ export function factory(EntityClass, defaults) {
21
+ const states = new Map();
22
+ let pendingOverrides = {};
23
+ let pendingStates = [];
24
+ const buildData = () => {
25
+ const data = {
26
+ ...defaults(),
27
+ ...pendingOverrides,
28
+ };
29
+ for (const name of pendingStates) {
30
+ const fn = states.get(name);
31
+ if (!fn) {
32
+ throw new Error(`[E_EON_FACTORY_STATE] state '${name}' is not defined on ${EntityClass.name}Factory`);
33
+ }
34
+ fn(data);
35
+ }
36
+ return data;
37
+ };
38
+ const resetPending = () => {
39
+ pendingOverrides = {};
40
+ pendingStates = [];
41
+ };
42
+ /** Hydrate an instance from data, assigning only declared columns/tags. */
43
+ const hydrate = (data) => {
44
+ const instance = new EntityClass();
45
+ const known = new Set([
46
+ ...getColumnMetadata(EntityClass).map((c) => c.propertyKey),
47
+ ...getTagMetadata(EntityClass).map((t) => t.propertyKey),
48
+ ]);
49
+ const assignable = {};
50
+ for (const key of known) {
51
+ if (key in data)
52
+ assignable[key] = data[key];
53
+ }
54
+ Object.assign(instance, assignable);
55
+ return instance;
56
+ };
57
+ const persist = async (conn, data) => {
58
+ const stable = requireSuperTableName(EntityClass);
59
+ const tsProperty = getTimestampColumn(EntityClass);
60
+ if (tsProperty === undefined) {
61
+ throw new Error(`[E_EON_NO_TIMESTAMP] super-table '${stable}' has no @Timestamp column`);
62
+ }
63
+ const columns = getColumnMetadata(EntityClass);
64
+ const tsColumn = columns.find((c) => c.propertyKey === tsProperty);
65
+ if (tsColumn === undefined) {
66
+ throw new Error(`[E_EON_NO_TIMESTAMP] super-table '${stable}' @Timestamp column '${tsProperty}' is not registered`);
67
+ }
68
+ const ordered = orderTimestampFirst(columns, tsColumn, tsProperty);
69
+ const tags = getTagMetadata(EntityClass);
70
+ const tagValues = tags.map((t) => data[t.propertyKey] ?? null);
71
+ const table = childTableName(stable, tagValues);
72
+ const row = ordered.map((c) => data[c.propertyKey] ?? null);
73
+ const { statements } = compileStatementNative({
74
+ kind: "insert",
75
+ table,
76
+ using: stable,
77
+ tags: tagValues,
78
+ columns: ordered.map((c) => c.propertyKey),
79
+ rows: [row],
80
+ literal: true,
81
+ }, "tdengine");
82
+ for (const sql of statements)
83
+ await conn.exec(sql);
84
+ return hydrate(data);
85
+ };
86
+ const builder = {
87
+ merge(overrides) {
88
+ pendingOverrides = { ...pendingOverrides, ...overrides };
89
+ return builder;
90
+ },
91
+ state(name, fn) {
92
+ states.set(name, fn);
93
+ return builder;
94
+ },
95
+ apply(...names) {
96
+ pendingStates.push(...names);
97
+ return builder;
98
+ },
99
+ make() {
100
+ const data = buildData();
101
+ resetPending();
102
+ return data;
103
+ },
104
+ makeMany(count) {
105
+ const rows = [];
106
+ for (let i = 0; i < count; i++)
107
+ rows.push(buildData());
108
+ resetPending();
109
+ return rows;
110
+ },
111
+ makeStubbed() {
112
+ const data = buildData();
113
+ resetPending();
114
+ return hydrate(data);
115
+ },
116
+ async create(conn) {
117
+ const data = buildData();
118
+ resetPending();
119
+ return persist(conn, data);
120
+ },
121
+ async createMany(count, conn) {
122
+ const rows = [];
123
+ for (let i = 0; i < count; i++)
124
+ rows.push(buildData());
125
+ resetPending();
126
+ const created = [];
127
+ for (const data of rows)
128
+ created.push(await persist(conn, data));
129
+ return created;
130
+ },
131
+ };
132
+ return builder;
133
+ }
134
+ //# sourceMappingURL=Factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Factory.js","sourceRoot":"","sources":["../../src/testing/Factory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * `FakeEonConnection` — a hand-rolled in-memory `EonConnection` for fast,
3
+ * deterministic unit tests without a live TDengine (58.6). The atlas analogue is
4
+ * a REAL in-memory SQLite (`testing/TestDatabase.ts`); TDengine has no embeddable
5
+ * engine, so this is a deliberately narrow test double, NOT a SQL engine.
6
+ *
7
+ * ── Scope (named boundary) ─────────────────────────────────────────────────
8
+ * - `exec(sql)` RECORDS every statement (assertable via {@link statements}) and,
9
+ * for recognised `CREATE TABLE`/`CREATE STABLE`/`INSERT` forms, updates a
10
+ * per-table row store.
11
+ * - `query(sql)` answers ONLY flat `SELECT [cols] FROM t [WHERE col <op> val]
12
+ * [LIMIT n]`. Windowed / aggregate SQL (`INTERVAL`/`FILL`/`PARTITION BY`/
13
+ * `avg(...)`) is NOT interpreted — it throws `E_EON_FAKE_UNSUPPORTED` pointing
14
+ * the caller to the docker integration harness (`describeIfTdengine`).
15
+ * - `ingestColumnar`/`schemaless` are STMT/line-protocol paths that need a live
16
+ * connector — they throw `E_EON_FAKE_UNSUPPORTED`. (The 58.6 factory persists
17
+ * through literal `exec` INSERTs, which the store DOES handle.)
18
+ * - `ping()`/`close()` are no-ops.
19
+ */
20
+ import type { EonColumnarIngest, EonConnection, EonSchemalessOptions } from "../connection/EonConnection.js";
21
+ type Row = Record<string, unknown>;
22
+ export declare class FakeEonConnection implements EonConnection {
23
+ #private;
24
+ readonly transport: "fake";
25
+ /** Every `exec`ed statement, in order — assert against this in tests. */
26
+ readonly statements: string[];
27
+ exec(sql: string): Promise<{
28
+ rowsAffected: number;
29
+ }>;
30
+ query<T = Row>(sql: string): Promise<T[]>;
31
+ ingestColumnar(request: EonColumnarIngest): Promise<{
32
+ rowsAffected: number;
33
+ }>;
34
+ schemaless(lines: readonly string[], options?: EonSchemalessOptions): Promise<void>;
35
+ ping(): Promise<void>;
36
+ close(): Promise<void>;
37
+ /** Clear recorded statements and the row store. */
38
+ reset(): void;
39
+ /** Read the current rows for a table (a copy) — a test-inspection helper. */
40
+ rows(table: string): Row[];
41
+ }
42
+ export {};
43
+ //# sourceMappingURL=FakeEonConnection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FakeEonConnection.d.ts","sourceRoot":"","sources":["../../src/testing/FakeEonConnection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EACX,iBAAiB,EACjB,aAAa,EACb,oBAAoB,EACpB,MAAM,gCAAgC,CAAC;AAExC,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAInC,qBAAa,iBAAkB,YAAW,aAAa;;IACtD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAU;IACpC,yEAAyE;IACzE,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAAM;IAG7B,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IA+B1D,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IA6BnC,cAAc,CACnB,OAAO,EAAE,iBAAiB,GACxB,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAO9B,UAAU,CACf,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,OAAO,CAAC,EAAE,oBAAoB,GAC5B,OAAO,CAAC,IAAI,CAAC;IAQV,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IACrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAE5B,mDAAmD;IACnD,KAAK,IAAI,IAAI;IAKb,6EAA6E;IAC7E,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE;CAmB1B"}