@c9up/eon 0.2.1 → 0.2.2
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.
- package/dist/EonProvider.d.ts.map +1 -1
- package/dist/EonProvider.js +12 -1
- package/dist/EonProvider.js.map +1 -1
- package/dist/configure.d.ts.map +1 -1
- package/dist/configure.js +6 -0
- package/dist/configure.js.map +1 -1
- package/dist/connection/config.d.ts +16 -0
- package/dist/connection/config.d.ts.map +1 -1
- package/dist/connection/config.js.map +1 -1
- package/dist/connection/ensureDatabase.d.ts +32 -0
- package/dist/connection/ensureDatabase.d.ts.map +1 -0
- package/dist/connection/ensureDatabase.js +61 -0
- package/dist/connection/ensureDatabase.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/index.win32-x64-msvc.node +0 -0
- package/package.json +1 -1
- package/src/EonProvider.ts +13 -1
- package/src/configure.ts +6 -0
- package/src/connection/config.ts +17 -0
- package/src/connection/ensureDatabase.ts +76 -0
- package/src/index.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EonProvider.d.ts","sourceRoot":"","sources":["../src/EonProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAa,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"EonProvider.d.ts","sourceRoot":"","sources":["../src/EonProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAa,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAGnE,OAAO,EACN,KAAK,iBAAiB,EAEtB,KAAK,UAAU,EACf,MAAM,mBAAmB,CAAC;AAE3B;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC7B,SAAS,EAAE;QACV,SAAS,CACR,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC,EAC5D,OAAO,EAAE,MAAM,OAAO,GACpB,IAAI,CAAC;QACR;;;;WAIG;QACH,OAAO,CAAC,CACP,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC,GAC1D,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;KAC9B,CAAC;IACF,MAAM,EAAE;QAAE,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAA;KAAE,CAAC;CACzD;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IAC1B,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,iBAAiB,CAAC;CAC/D;AAED;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,CAC1B,MAAM,EAAE,mBAAmB,KACvB,OAAO,CAAC,aAAa,CAAC,CAAC;AAE5B,qBAAa,WAAW;;gBAQX,GAAG,EAAE,aAAa,EAAE,OAAO,GAAE,YAA2B;IAKpE,QAAQ,IAAI,IAAI;IAEV,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAmIrB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAgF/B;AAID,eAAe,WAAW,CAAC"}
|
package/dist/EonProvider.js
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
* never imports `@c9up/ream`. Any context exposing `config.get(key)` and
|
|
12
12
|
* `container.singleton(token, factory)` satisfies the contract.
|
|
13
13
|
*/
|
|
14
|
+
import { ensureDatabase } from "./connection/ensureDatabase.js";
|
|
14
15
|
import { connectWsEon } from "./connection/websocket.js";
|
|
15
16
|
import { compileStatementNative, } from "./query/native.js";
|
|
16
17
|
export class EonProvider {
|
|
@@ -43,7 +44,7 @@ export class EonProvider {
|
|
|
43
44
|
// successes from failures without leaking the already-opened ones: on any
|
|
44
45
|
// failure we close every success before rethrowing (no partial-boot leak).
|
|
45
46
|
const entries = Object.entries(connections);
|
|
46
|
-
const results = await Promise.allSettled(entries.map(([, settings]) => this.#
|
|
47
|
+
const results = await Promise.allSettled(entries.map(([, settings]) => this.#openConnection(settings)));
|
|
47
48
|
const failures = [];
|
|
48
49
|
const successes = [];
|
|
49
50
|
results.forEach((result, i) => {
|
|
@@ -164,6 +165,15 @@ export class EonProvider {
|
|
|
164
165
|
throw new AggregateError(errors.map((e) => e.error), `EonProvider: ${errors.length} connection(s) failed to close — ${summary}`);
|
|
165
166
|
}
|
|
166
167
|
}
|
|
168
|
+
/**
|
|
169
|
+
* Open one connection, creating its database first when the connection asked
|
|
170
|
+
* for it. Both steps go through the injected connector, so a fake exercises
|
|
171
|
+
* the bootstrap exactly like the real transport does.
|
|
172
|
+
*/
|
|
173
|
+
async #openConnection(settings) {
|
|
174
|
+
await ensureDatabase(settings, this.#connect);
|
|
175
|
+
return this.#connect(settings);
|
|
176
|
+
}
|
|
167
177
|
/** Normalize the config into a `{ name → EonConnectionConfig }` map + default name. */
|
|
168
178
|
#resolveConnections(config) {
|
|
169
179
|
if (config.connections && Object.keys(config.connections).length > 0) {
|
|
@@ -181,6 +191,7 @@ export class EonProvider {
|
|
|
181
191
|
user: config.user,
|
|
182
192
|
password: config.password,
|
|
183
193
|
database: config.database,
|
|
194
|
+
createDatabase: config.createDatabase,
|
|
184
195
|
token: config.token,
|
|
185
196
|
timeoutMs: config.timeoutMs,
|
|
186
197
|
connectRetries: config.connectRetries,
|
package/dist/EonProvider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EonProvider.js","sourceRoot":"","sources":["../src/EonProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAEN,sBAAsB,GAEtB,MAAM,mBAAmB,CAAC;AA0C3B,MAAM,OAAO,WAAW;IACd,IAAI,CAAgB;IACpB,QAAQ,CAAe;IAChC,4DAA4D;IACnD,YAAY,GAAG,IAAI,GAAG,EAAyB,CAAC;IACzD,kFAAkF;IAClF,OAAO,GAAG,KAAK,CAAC;IAEhB,YAAY,GAAkB,EAAE,UAAwB,YAAY;QACnE,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,QAAQ,KAAU,CAAC;IAEnB,KAAK,CAAC,IAAI;QACT,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CACd,sJAAsJ,CACtJ,CAAC;QACH,CAAC;QACD,uEAAuE;QACvE,MAAM,OAAO,GAAe;YAC3B,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,sBAAsB,CAAC,IAAI,EAAE,OAAO,CAAC;SACjE,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;QAE7D,MAAM,MAAM,GACX,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAY,YAAY,CAAC;YAC7C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAY,KAAK,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM;YAAE,OAAO;QAEpB,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAEtE,sEAAsE;QACtE,0EAA0E;QAC1E,2EAA2E;QAC3E,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACvC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"EonProvider.js","sourceRoot":"","sources":["../src/EonProvider.ts"],"names":[],"mappings":"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"}
|
package/dist/configure.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configure.d.ts","sourceRoot":"","sources":["../src/configure.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,UAAU,QAAQ;IACjB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,SAAS,CACR,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAC3B,OAAO,CAAC,IAAI,CAAC,CAAC;CACjB;AAED,wBAAsB,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"configure.d.ts","sourceRoot":"","sources":["../src/configure.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,UAAU,QAAQ;IACjB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,SAAS,CACR,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAC3B,OAAO,CAAC,IAAI,CAAC,CAAC;CACjB;AAED,wBAAsB,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BjE"}
|
package/dist/configure.js
CHANGED
|
@@ -13,6 +13,12 @@ export default defineConfig({
|
|
|
13
13
|
user: process.env.TDENGINE_USER ?? 'root',
|
|
14
14
|
password: process.env.TDENGINE_PASSWORD ?? '',
|
|
15
15
|
database: process.env.TDENGINE_DATABASE ?? 'ream',
|
|
16
|
+
|
|
17
|
+
// TDengine's image has no POSTGRES_DB equivalent, so nothing outside the app
|
|
18
|
+
// creates this database — and a connection naming a missing one is refused,
|
|
19
|
+
// before any migration could create it. Precision is create-only, so set it
|
|
20
|
+
// here rather than repairing it later.
|
|
21
|
+
createDatabase: { precision: 'ms' },
|
|
16
22
|
})
|
|
17
23
|
`);
|
|
18
24
|
}
|
package/dist/configure.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configure.js","sourceRoot":"","sources":["../src/configure.ts"],"names":[],"mappings":"AAiBA,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,QAAkB;IACjD,MAAM,QAAQ,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;IACjD,MAAM,QAAQ,CAAC,UAAU,CAAC;QACzB,YAAY,EAAE,qBAAqB;QACnC,aAAa,EAAE,MAAM;QACrB,iBAAiB,EAAE,UAAU;QAC7B,iBAAiB,EAAE,MAAM;KACzB,CAAC,CAAC;IACH,MAAM,QAAQ,CAAC,SAAS,CACvB,sBAAsB,EACtB
|
|
1
|
+
{"version":3,"file":"configure.js","sourceRoot":"","sources":["../src/configure.ts"],"names":[],"mappings":"AAiBA,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,QAAkB;IACjD,MAAM,QAAQ,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;IACjD,MAAM,QAAQ,CAAC,UAAU,CAAC;QACzB,YAAY,EAAE,qBAAqB;QACnC,aAAa,EAAE,MAAM;QACrB,iBAAiB,EAAE,UAAU;QAC7B,iBAAiB,EAAE,MAAM;KACzB,CAAC,CAAC;IACH,MAAM,QAAQ,CAAC,SAAS,CACvB,sBAAsB,EACtB;;;;;;;;;;;;;;CAcD,CACC,CAAC;AACH,CAAC"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* No env-var reading happens here: the host `config.get("timeseries")` supplies
|
|
8
8
|
* the resolved object (agnostic leaf — eon never touches `process.env`).
|
|
9
9
|
*/
|
|
10
|
+
import type { EonDatabaseOptions } from "../schema/CreateStableSpec.js";
|
|
10
11
|
/** One TDengine connection's settings. */
|
|
11
12
|
export interface EonConnectionConfig {
|
|
12
13
|
/** taosAdapter WebSocket URL, e.g. `ws://localhost:6041`. */
|
|
@@ -17,6 +18,21 @@ export interface EonConnectionConfig {
|
|
|
17
18
|
password?: string;
|
|
18
19
|
/** Default database to `USE` on connect. */
|
|
19
20
|
database?: string;
|
|
21
|
+
/**
|
|
22
|
+
* Create `database` before the first connection selects it — `true` for
|
|
23
|
+
* TDengine's defaults, or an options object for retention / precision.
|
|
24
|
+
*
|
|
25
|
+
* A deviation from atlas, which never creates a database: Postgres and MySQL
|
|
26
|
+
* images create it from `POSTGRES_DB` / `MYSQL_DATABASE`, and TDengine's has
|
|
27
|
+
* no equivalent. Without this, the migration that would create the database
|
|
28
|
+
* cannot run, because connecting to it is what fails. PRECISION and DURATION
|
|
29
|
+
* are create-only in TDengine, so the side holding the schema is the side
|
|
30
|
+
* that should create it.
|
|
31
|
+
*
|
|
32
|
+
* Unset (the default) — eon behaves like atlas and expects the database to
|
|
33
|
+
* already exist.
|
|
34
|
+
*/
|
|
35
|
+
createDatabase?: boolean | EonDatabaseOptions;
|
|
20
36
|
/** Cloud / bearer token auth (taosAdapter) — alternative to user/password. */
|
|
21
37
|
token?: string;
|
|
22
38
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/connection/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,0CAA0C;AAC1C,MAAM,WAAW,mBAAmB;IACnC,6DAA6D;IAC7D,GAAG,EAAE,MAAM,CAAC;IACZ,qFAAqF;IACrF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qBAAqB;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8EAA8E;IAC9E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0FAA0F;IAC1F,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,SAAU,SAAQ,mBAAmB;IACrD,yFAAyF;IACzF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAClD;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,iFAAiF;AACjF,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,CAEzD"}
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/connection/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAExE,0CAA0C;AAC1C,MAAM,WAAW,mBAAmB;IACnC,6DAA6D;IAC7D,GAAG,EAAE,MAAM,CAAC;IACZ,qFAAqF;IACrF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qBAAqB;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;;;;;;;;OAaG;IACH,cAAc,CAAC,EAAE,OAAO,GAAG,kBAAkB,CAAC;IAC9C,8EAA8E;IAC9E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0FAA0F;IAC1F,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,SAAU,SAAQ,mBAAmB;IACrD,yFAAyF;IACzF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAClD;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,iFAAiF;AACjF,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,CAEzD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/connection/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/connection/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAyEH,iFAAiF;AACjF,MAAM,UAAU,YAAY,CAAC,MAAiB;IAC7C,OAAO,MAAM,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create the configured database before the first connection selects it.
|
|
3
|
+
*
|
|
4
|
+
* atlas never creates a database — Lucid does not either, because the server
|
|
5
|
+
* image does it: Postgres reads `POSTGRES_DB`, MySQL reads `MYSQL_DATABASE`.
|
|
6
|
+
* TDengine's image has no such variable, so nothing outside the application
|
|
7
|
+
* knows the database should exist, and a connection that names it is refused
|
|
8
|
+
* before any migration can run. That circle — the migration that would create
|
|
9
|
+
* the database cannot run until the database exists — is why eon deviates here
|
|
10
|
+
* and atlas does not.
|
|
11
|
+
*
|
|
12
|
+
* PRECISION and DURATION are create-only in TDengine: a database made by hand
|
|
13
|
+
* at the wrong precision cannot be repaired with `ALTER`. So the side that owns
|
|
14
|
+
* the schema is the side that should create it.
|
|
15
|
+
*
|
|
16
|
+
* Opt-in through `createDatabase` — unset, eon behaves exactly like atlas and
|
|
17
|
+
* expects the database to be there.
|
|
18
|
+
*/
|
|
19
|
+
import type { EonConnectionConfig } from "./config.js";
|
|
20
|
+
import type { EonConnection } from "./EonConnection.js";
|
|
21
|
+
/** How `ensureDatabase` opens its short-lived admin connection. */
|
|
22
|
+
export type EonConnector = (config: EonConnectionConfig) => Promise<EonConnection>;
|
|
23
|
+
/**
|
|
24
|
+
* Run `CREATE DATABASE IF NOT EXISTS` on a connection that selects no database,
|
|
25
|
+
* then close it. A no-op unless `config.createDatabase` is set.
|
|
26
|
+
*
|
|
27
|
+
* The statement is built through {@link EonSchema} rather than string-joined
|
|
28
|
+
* here, so the Rust compiler stays the only place that renders and validates
|
|
29
|
+
* TDengine DDL — including quoting the database name.
|
|
30
|
+
*/
|
|
31
|
+
export declare function ensureDatabase(config: EonConnectionConfig, connect: EonConnector): Promise<void>;
|
|
32
|
+
//# sourceMappingURL=ensureDatabase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ensureDatabase.d.ts","sourceRoot":"","sources":["../../src/connection/ensureDatabase.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,mEAAmE;AACnE,MAAM,MAAM,YAAY,GAAG,CAC1B,MAAM,EAAE,mBAAmB,KACvB,OAAO,CAAC,aAAa,CAAC,CAAC;AAE5B;;;;;;;GAOG;AACH,wBAAsB,cAAc,CACnC,MAAM,EAAE,mBAAmB,EAC3B,OAAO,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CAoCf"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create the configured database before the first connection selects it.
|
|
3
|
+
*
|
|
4
|
+
* atlas never creates a database — Lucid does not either, because the server
|
|
5
|
+
* image does it: Postgres reads `POSTGRES_DB`, MySQL reads `MYSQL_DATABASE`.
|
|
6
|
+
* TDengine's image has no such variable, so nothing outside the application
|
|
7
|
+
* knows the database should exist, and a connection that names it is refused
|
|
8
|
+
* before any migration can run. That circle — the migration that would create
|
|
9
|
+
* the database cannot run until the database exists — is why eon deviates here
|
|
10
|
+
* and atlas does not.
|
|
11
|
+
*
|
|
12
|
+
* PRECISION and DURATION are create-only in TDengine: a database made by hand
|
|
13
|
+
* at the wrong precision cannot be repaired with `ALTER`. So the side that owns
|
|
14
|
+
* the schema is the side that should create it.
|
|
15
|
+
*
|
|
16
|
+
* Opt-in through `createDatabase` — unset, eon behaves exactly like atlas and
|
|
17
|
+
* expects the database to be there.
|
|
18
|
+
*/
|
|
19
|
+
import { EonSchema } from "../schema/EonSchema.js";
|
|
20
|
+
/**
|
|
21
|
+
* Run `CREATE DATABASE IF NOT EXISTS` on a connection that selects no database,
|
|
22
|
+
* then close it. A no-op unless `config.createDatabase` is set.
|
|
23
|
+
*
|
|
24
|
+
* The statement is built through {@link EonSchema} rather than string-joined
|
|
25
|
+
* here, so the Rust compiler stays the only place that renders and validates
|
|
26
|
+
* TDengine DDL — including quoting the database name.
|
|
27
|
+
*/
|
|
28
|
+
export async function ensureDatabase(config, connect) {
|
|
29
|
+
const requested = config.createDatabase;
|
|
30
|
+
if (requested === undefined || requested === false)
|
|
31
|
+
return;
|
|
32
|
+
const database = config.database;
|
|
33
|
+
if (database === undefined || database.length === 0) {
|
|
34
|
+
throw new Error("[eon] `createDatabase` is set but no `database` is configured — there is nothing to create.");
|
|
35
|
+
}
|
|
36
|
+
const schema = new EonSchema();
|
|
37
|
+
schema.createDatabase(database, requested === true ? {} : requested);
|
|
38
|
+
const statements = schema.toSQL();
|
|
39
|
+
// The admin connection deliberately drops `database`: the database it names
|
|
40
|
+
// does not exist yet, so selecting it is exactly what fails. `createDatabase`
|
|
41
|
+
// is dropped too — otherwise this would recurse.
|
|
42
|
+
const admin = {
|
|
43
|
+
url: config.url,
|
|
44
|
+
user: config.user,
|
|
45
|
+
password: config.password,
|
|
46
|
+
token: config.token,
|
|
47
|
+
timeoutMs: config.timeoutMs,
|
|
48
|
+
connectRetries: config.connectRetries,
|
|
49
|
+
connectBackoffMs: config.connectBackoffMs,
|
|
50
|
+
};
|
|
51
|
+
const conn = await connect(admin);
|
|
52
|
+
try {
|
|
53
|
+
for (const sql of statements) {
|
|
54
|
+
await conn.exec(sql);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
finally {
|
|
58
|
+
await conn.close();
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=ensureDatabase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ensureDatabase.js","sourceRoot":"","sources":["../../src/connection/ensureDatabase.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AASnD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CACnC,MAA2B,EAC3B,OAAqB;IAErB,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC;IACxC,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,KAAK;QAAE,OAAO;IAE3D,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACjC,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CACd,6FAA6F,CAC7F,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;IAC/B,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACrE,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;IAElC,4EAA4E;IAC5E,8EAA8E;IAC9E,iDAAiD;IACjD,MAAM,KAAK,GAAwB;QAClC,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;KACzC,CAAC;IAEF,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,CAAC;QACJ,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC9B,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;IACF,CAAC;YAAS,CAAC;QACV,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;AACF,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import "reflect-metadata";
|
|
2
2
|
export { defineConfig, type EonConfig, type EonConnectionConfig, } from "./connection/config.js";
|
|
3
3
|
export { type EonBindKind, type EonBoundColumn, type EonChildBatch, type EonColumnarIngest, type EonConnection, EonConnectionError, type EonLineProtocol, type EonSchemalessOptions, type EonSchemalessPrecision, } from "./connection/EonConnection.js";
|
|
4
|
+
export { ensureDatabase } from "./connection/ensureDatabase.js";
|
|
4
5
|
export { connectWsEon, destroyEonConnector, } from "./connection/websocket.js";
|
|
5
6
|
export { Column, type EonColumnMetadata, type EonColumnOptions, type EonTagMetadata, type EonTagOptions, getColumnMetadata, getSuperTableMetadata, getTagMetadata, getTimestampColumn, SuperTable, type SuperTableMetadata, Tag, Timestamp, } from "./decorators/superTable.js";
|
|
6
7
|
export type { EonAppContext, EonConnector, EonService, } from "./EonProvider.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EACN,YAAY,EACZ,KAAK,SAAS,EACd,KAAK,mBAAmB,GACxB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACN,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,kBAAkB,EAClB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,GAC3B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACN,YAAY,EACZ,mBAAmB,GACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACN,MAAM,EACN,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,cAAc,EACd,kBAAkB,EAClB,UAAU,EACV,KAAK,kBAAkB,EACvB,GAAG,EACH,SAAS,GACT,MAAM,4BAA4B,CAAC;AACpC,YAAY,EACX,aAAa,EACb,YAAY,EACZ,UAAU,GACV,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EACN,kBAAkB,EAClB,KAAK,eAAe,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EACN,mBAAmB,EACnB,KAAK,YAAY,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,EACZ,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,UAAU,GACV,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACN,KAAK,iBAAiB,EACtB,sBAAsB,EACtB,KAAK,UAAU,EACf,gBAAgB,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACN,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,eAAe,GACf,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACN,oBAAoB,EACpB,KAAK,2BAA2B,GAChC,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACN,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,uBAAuB,EAC5B,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,aAAa,GACb,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACN,uBAAuB,EACvB,qBAAqB,EACrB,KAAK,eAAe,GACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACN,KAAK,mBAAmB,EACxB,kBAAkB,EAClB,KAAK,cAAc,EACnB,KAAK,eAAe,GACpB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACN,kBAAkB,EAClB,KAAK,eAAe,EACpB,iBAAiB,EACjB,SAAS,EACT,aAAa,EACb,KAAK,kBAAkB,GACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EACN,KAAK,uBAAuB,EAC5B,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,cAAc,GACd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACN,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,gBAAgB,EAChB,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,iBAAiB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EACN,YAAY,EACZ,KAAK,SAAS,EACd,KAAK,mBAAmB,GACxB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACN,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,kBAAkB,EAClB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,GAC3B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EACN,YAAY,EACZ,mBAAmB,GACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACN,MAAM,EACN,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,cAAc,EACd,kBAAkB,EAClB,UAAU,EACV,KAAK,kBAAkB,EACvB,GAAG,EACH,SAAS,GACT,MAAM,4BAA4B,CAAC;AACpC,YAAY,EACX,aAAa,EACb,YAAY,EACZ,UAAU,GACV,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EACN,kBAAkB,EAClB,KAAK,eAAe,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EACN,mBAAmB,EACnB,KAAK,YAAY,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,EACZ,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,UAAU,GACV,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACN,KAAK,iBAAiB,EACtB,sBAAsB,EACtB,KAAK,UAAU,EACf,gBAAgB,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACN,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,eAAe,GACf,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACN,oBAAoB,EACpB,KAAK,2BAA2B,GAChC,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACN,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,uBAAuB,EAC5B,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,aAAa,GACb,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACN,uBAAuB,EACvB,qBAAqB,EACrB,KAAK,eAAe,GACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACN,KAAK,mBAAmB,EACxB,kBAAkB,EAClB,KAAK,cAAc,EACnB,KAAK,eAAe,GACpB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACN,kBAAkB,EAClB,KAAK,eAAe,EACpB,iBAAiB,EACjB,SAAS,EACT,aAAa,EACb,KAAK,kBAAkB,GACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EACN,KAAK,uBAAuB,EAC5B,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,cAAc,GACd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACN,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,gBAAgB,EAChB,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,iBAAiB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import "reflect-metadata";
|
|
2
2
|
export { defineConfig, } from "./connection/config.js";
|
|
3
3
|
export { EonConnectionError, } from "./connection/EonConnection.js";
|
|
4
|
+
export { ensureDatabase } from "./connection/ensureDatabase.js";
|
|
4
5
|
export { connectWsEon, destroyEonConnector, } from "./connection/websocket.js";
|
|
5
6
|
export { Column, getColumnMetadata, getSuperTableMetadata, getTagMetadata, getTimestampColumn, SuperTable, Tag, Timestamp, } from "./decorators/superTable.js";
|
|
6
7
|
export { EonProvider } from "./EonProvider.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EACN,YAAY,GAGZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAMN,kBAAkB,GAIlB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACN,YAAY,EACZ,mBAAmB,GACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACN,MAAM,EAKN,iBAAiB,EACjB,qBAAqB,EACrB,cAAc,EACd,kBAAkB,EAClB,UAAU,EAEV,GAAG,EACH,SAAS,GACT,MAAM,4BAA4B,CAAC;AAMpC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EACN,kBAAkB,GAElB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EACN,mBAAmB,EAEnB,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,EAGZ,UAAU,GACV,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAEN,sBAAsB,EAEtB,gBAAgB,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EASN,eAAe,GACf,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACN,oBAAoB,GAEpB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAgBN,aAAa,GACb,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACN,uBAAuB,EACvB,qBAAqB,GAErB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAEN,kBAAkB,GAGlB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACN,kBAAkB,EAElB,iBAAiB,EACjB,SAAS,EACT,aAAa,GAEb,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAEN,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,cAAc,GACd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAGN,gBAAgB,GAIhB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EACN,YAAY,GAGZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAMN,kBAAkB,GAIlB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EACN,YAAY,EACZ,mBAAmB,GACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACN,MAAM,EAKN,iBAAiB,EACjB,qBAAqB,EACrB,cAAc,EACd,kBAAkB,EAClB,UAAU,EAEV,GAAG,EACH,SAAS,GACT,MAAM,4BAA4B,CAAC;AAMpC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EACN,kBAAkB,GAElB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EACN,mBAAmB,EAEnB,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,EAGZ,UAAU,GACV,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAEN,sBAAsB,EAEtB,gBAAgB,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EASN,eAAe,GACf,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACN,oBAAoB,GAEpB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAgBN,aAAa,GACb,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACN,uBAAuB,EACvB,qBAAqB,GAErB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAEN,kBAAkB,GAGlB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACN,kBAAkB,EAElB,iBAAiB,EACjB,SAAS,EACT,aAAa,GAEb,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAEN,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,cAAc,GACd,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAGN,gBAAgB,GAIhB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
Binary file
|
package/package.json
CHANGED
package/src/EonProvider.ts
CHANGED
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
import type { EonConfig, EonConnectionConfig } from "./connection/config.js";
|
|
16
16
|
import type { EonConnection } from "./connection/EonConnection.js";
|
|
17
|
+
import { ensureDatabase } from "./connection/ensureDatabase.js";
|
|
17
18
|
import { connectWsEon } from "./connection/websocket.js";
|
|
18
19
|
import {
|
|
19
20
|
type CompiledStatement,
|
|
@@ -100,7 +101,7 @@ export class EonProvider {
|
|
|
100
101
|
// failure we close every success before rethrowing (no partial-boot leak).
|
|
101
102
|
const entries = Object.entries(connections);
|
|
102
103
|
const results = await Promise.allSettled(
|
|
103
|
-
entries.map(([, settings]) => this.#
|
|
104
|
+
entries.map(([, settings]) => this.#openConnection(settings)),
|
|
104
105
|
);
|
|
105
106
|
const failures: Array<{ name: string; error: unknown }> = [];
|
|
106
107
|
const successes: Array<{ name: string; conn: EonConnection }> = [];
|
|
@@ -247,6 +248,16 @@ export class EonProvider {
|
|
|
247
248
|
}
|
|
248
249
|
}
|
|
249
250
|
|
|
251
|
+
/**
|
|
252
|
+
* Open one connection, creating its database first when the connection asked
|
|
253
|
+
* for it. Both steps go through the injected connector, so a fake exercises
|
|
254
|
+
* the bootstrap exactly like the real transport does.
|
|
255
|
+
*/
|
|
256
|
+
async #openConnection(settings: EonConnectionConfig): Promise<EonConnection> {
|
|
257
|
+
await ensureDatabase(settings, this.#connect);
|
|
258
|
+
return this.#connect(settings);
|
|
259
|
+
}
|
|
260
|
+
|
|
250
261
|
/** Normalize the config into a `{ name → EonConnectionConfig }` map + default name. */
|
|
251
262
|
#resolveConnections(config: EonConfig): {
|
|
252
263
|
connections: Record<string, EonConnectionConfig>;
|
|
@@ -267,6 +278,7 @@ export class EonProvider {
|
|
|
267
278
|
user: config.user,
|
|
268
279
|
password: config.password,
|
|
269
280
|
database: config.database,
|
|
281
|
+
createDatabase: config.createDatabase,
|
|
270
282
|
token: config.token,
|
|
271
283
|
timeoutMs: config.timeoutMs,
|
|
272
284
|
connectRetries: config.connectRetries,
|
package/src/configure.ts
CHANGED
|
@@ -32,6 +32,12 @@ export default defineConfig({
|
|
|
32
32
|
user: process.env.TDENGINE_USER ?? 'root',
|
|
33
33
|
password: process.env.TDENGINE_PASSWORD ?? '',
|
|
34
34
|
database: process.env.TDENGINE_DATABASE ?? 'ream',
|
|
35
|
+
|
|
36
|
+
// TDengine's image has no POSTGRES_DB equivalent, so nothing outside the app
|
|
37
|
+
// creates this database — and a connection naming a missing one is refused,
|
|
38
|
+
// before any migration could create it. Precision is create-only, so set it
|
|
39
|
+
// here rather than repairing it later.
|
|
40
|
+
createDatabase: { precision: 'ms' },
|
|
35
41
|
})
|
|
36
42
|
`,
|
|
37
43
|
);
|
package/src/connection/config.ts
CHANGED
|
@@ -8,6 +8,8 @@
|
|
|
8
8
|
* the resolved object (agnostic leaf — eon never touches `process.env`).
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
+
import type { EonDatabaseOptions } from "../schema/CreateStableSpec.js";
|
|
12
|
+
|
|
11
13
|
/** One TDengine connection's settings. */
|
|
12
14
|
export interface EonConnectionConfig {
|
|
13
15
|
/** taosAdapter WebSocket URL, e.g. `ws://localhost:6041`. */
|
|
@@ -18,6 +20,21 @@ export interface EonConnectionConfig {
|
|
|
18
20
|
password?: string;
|
|
19
21
|
/** Default database to `USE` on connect. */
|
|
20
22
|
database?: string;
|
|
23
|
+
/**
|
|
24
|
+
* Create `database` before the first connection selects it — `true` for
|
|
25
|
+
* TDengine's defaults, or an options object for retention / precision.
|
|
26
|
+
*
|
|
27
|
+
* A deviation from atlas, which never creates a database: Postgres and MySQL
|
|
28
|
+
* images create it from `POSTGRES_DB` / `MYSQL_DATABASE`, and TDengine's has
|
|
29
|
+
* no equivalent. Without this, the migration that would create the database
|
|
30
|
+
* cannot run, because connecting to it is what fails. PRECISION and DURATION
|
|
31
|
+
* are create-only in TDengine, so the side holding the schema is the side
|
|
32
|
+
* that should create it.
|
|
33
|
+
*
|
|
34
|
+
* Unset (the default) — eon behaves like atlas and expects the database to
|
|
35
|
+
* already exist.
|
|
36
|
+
*/
|
|
37
|
+
createDatabase?: boolean | EonDatabaseOptions;
|
|
21
38
|
/** Cloud / bearer token auth (taosAdapter) — alternative to user/password. */
|
|
22
39
|
token?: string;
|
|
23
40
|
/**
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create the configured database before the first connection selects it.
|
|
3
|
+
*
|
|
4
|
+
* atlas never creates a database — Lucid does not either, because the server
|
|
5
|
+
* image does it: Postgres reads `POSTGRES_DB`, MySQL reads `MYSQL_DATABASE`.
|
|
6
|
+
* TDengine's image has no such variable, so nothing outside the application
|
|
7
|
+
* knows the database should exist, and a connection that names it is refused
|
|
8
|
+
* before any migration can run. That circle — the migration that would create
|
|
9
|
+
* the database cannot run until the database exists — is why eon deviates here
|
|
10
|
+
* and atlas does not.
|
|
11
|
+
*
|
|
12
|
+
* PRECISION and DURATION are create-only in TDengine: a database made by hand
|
|
13
|
+
* at the wrong precision cannot be repaired with `ALTER`. So the side that owns
|
|
14
|
+
* the schema is the side that should create it.
|
|
15
|
+
*
|
|
16
|
+
* Opt-in through `createDatabase` — unset, eon behaves exactly like atlas and
|
|
17
|
+
* expects the database to be there.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
import { EonSchema } from "../schema/EonSchema.js";
|
|
21
|
+
import type { EonConnectionConfig } from "./config.js";
|
|
22
|
+
import type { EonConnection } from "./EonConnection.js";
|
|
23
|
+
|
|
24
|
+
/** How `ensureDatabase` opens its short-lived admin connection. */
|
|
25
|
+
export type EonConnector = (
|
|
26
|
+
config: EonConnectionConfig,
|
|
27
|
+
) => Promise<EonConnection>;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Run `CREATE DATABASE IF NOT EXISTS` on a connection that selects no database,
|
|
31
|
+
* then close it. A no-op unless `config.createDatabase` is set.
|
|
32
|
+
*
|
|
33
|
+
* The statement is built through {@link EonSchema} rather than string-joined
|
|
34
|
+
* here, so the Rust compiler stays the only place that renders and validates
|
|
35
|
+
* TDengine DDL — including quoting the database name.
|
|
36
|
+
*/
|
|
37
|
+
export async function ensureDatabase(
|
|
38
|
+
config: EonConnectionConfig,
|
|
39
|
+
connect: EonConnector,
|
|
40
|
+
): Promise<void> {
|
|
41
|
+
const requested = config.createDatabase;
|
|
42
|
+
if (requested === undefined || requested === false) return;
|
|
43
|
+
|
|
44
|
+
const database = config.database;
|
|
45
|
+
if (database === undefined || database.length === 0) {
|
|
46
|
+
throw new Error(
|
|
47
|
+
"[eon] `createDatabase` is set but no `database` is configured — there is nothing to create.",
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const schema = new EonSchema();
|
|
52
|
+
schema.createDatabase(database, requested === true ? {} : requested);
|
|
53
|
+
const statements = schema.toSQL();
|
|
54
|
+
|
|
55
|
+
// The admin connection deliberately drops `database`: the database it names
|
|
56
|
+
// does not exist yet, so selecting it is exactly what fails. `createDatabase`
|
|
57
|
+
// is dropped too — otherwise this would recurse.
|
|
58
|
+
const admin: EonConnectionConfig = {
|
|
59
|
+
url: config.url,
|
|
60
|
+
user: config.user,
|
|
61
|
+
password: config.password,
|
|
62
|
+
token: config.token,
|
|
63
|
+
timeoutMs: config.timeoutMs,
|
|
64
|
+
connectRetries: config.connectRetries,
|
|
65
|
+
connectBackoffMs: config.connectBackoffMs,
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
const conn = await connect(admin);
|
|
69
|
+
try {
|
|
70
|
+
for (const sql of statements) {
|
|
71
|
+
await conn.exec(sql);
|
|
72
|
+
}
|
|
73
|
+
} finally {
|
|
74
|
+
await conn.close();
|
|
75
|
+
}
|
|
76
|
+
}
|
package/src/index.ts
CHANGED