diff --git a/.claude/settings.local.json b/.claude/settings.local.json deleted file mode 100644 index b3568dc..0000000 --- a/.claude/settings.local.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "permissions": { - "allow": [ - "Bash(cat:*)", - "Bash(find:*)" - ], - "deny": [], - "ask": [] - } -} diff --git a/.gitignore b/.gitignore index 20b02e5..f11b278 100644 --- a/.gitignore +++ b/.gitignore @@ -68,3 +68,4 @@ paradox.log .keys/ __trace +.claude/settings.local.json diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..77dcd16 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,88 @@ +# CLAUDE.md + +## Architecture + +- Modular monolith: enforce strict module boundaries. Services interact through public APIs only — never reach into another module's internals. +- No circular dependencies between modules. If A depends on B, B must not depend on A. Use eventing/queues to decouple when bidirectional communication is needed. +- Never leak third-party IDs (Stripe, banking cores, partner systems) into the domain. Create internal IDs that map to external ones — this makes partner migration a config change, not a rewrite. +- Abstract frameworks (HTTP, ORM, queue) behind interfaces. Always leave an escape hatch (e.g. raw SQL) for when the abstraction limits performance. +- Wrap third-party clients (AWS SDK, Stripe, etc.) in service classes with better developer ergonomics. This gives a single place to add logging, metrics, retries, and error normalization instead of scattering SDK calls throughout the codebase. +- Time is a dependency. Never call `Date.now()` or `new Date()` directly — inject a `TimeProvider` so tests can travel forward and backward deterministically. +- Soft deletes only (`deleted_at` timestamp). Hard deletes are forbidden on domain entities. +- Build artifacts once. The same image/bundle moves Dev → Stage → Prod. Configuration is injected at runtime (env vars), never baked in at build time. +- Identify one-way doors (database schema, public API contracts, IaC deletions) and deliberate. Move fast on everything else. + +## Observability + +- Generate a Trace ID at ingress and propagate it through every function call, async queue message, and third-party request. +- Structured JSON logs only. Use contextual loggers: `log.with({ userId, traceId }).info("Action")`. +- Auto-redact PII and secrets via middleware — never rely on developers remembering to omit sensitive fields. +- Avoid high-cardinality metric tags (user IDs, request IDs) to prevent billing explosions in metrics backends. + +## Debugging + +- Always root-cause an issue. Do not take shortcuts, suppress errors, or work around symptoms. +- If the root cause looks complex or touches multiple systems, surface a plan before making changes. + +## TypeScript + +- After any TypeScript change, run the linter. Do not consider the change done until it passes. +- Never use synchronous I/O (`readFileSync`, `writeFileSync`, `execSync`, etc.). Always use the async equivalents (`readFile`, `writeFile`, `execFile`, etc.). +- Always use branded types from `@taxbit-private/type-wrappers` (e.g. `StringType`) instead of bare primitives. A function that accepts `string` where it means `AccountId` is a bug waiting to happen. +- Prefer immutable data. Use `readonly`, `Readonly`, and `as const`. Mutate only when performance demands it and the scope is small. +- Prefer a functional style — pure functions, composition, and expressions over statements. Avoid side effects outside of explicit boundaries (constructors, handlers). +- Use classes instead of loose top-level functions. Group related behavior behind a class with a clear single responsibility. +- Accept dependencies in the constructor via IoC. Use `@Inject` when working within the NestJS DI workflow. +- No global variables or module-level mutable state. Configuration must be explicit and passed as structured objects, never read from `process.env` inline. The top-level caller (main, CLI entry point, test harness) parses environment into a typed config object and passes it down. +- Use descriptive variable names. Characters are free — prefer clarity over brevity. Avoid single-letter variables except in trivial arrow functions. When an expression is deeply nested, capture intermediate values into named `const`s. +- Functions must have at most 3 positional parameters. Beyond that, use a single options object: `doThing({ catalog, schema, dryRun })`. +- Keep functions small and composable. If a function does two things, split it into two functions. Never name a function `fooAndBar()` — that is two functions. Each function has one job. + +## Testing + +- Test hierarchy: unit tests for logic, integration tests with real dependencies (Dockerized/LocalStack). +- Tests must own their state. Each test sets up exactly what it needs — avoid broad `beforeEach` blocks that create shared mutable fixtures. +- Optimize for readability. A reader should scan a test and instantly see what is being tested. Extract utility functions and base classes that hide boilerplate (file resolvers, fake builders, assertion helpers) so test methods contain only the signal: input, action, expected outcome. +- Reuse test infrastructure. When multiple test classes share the same setup pattern (fake resolvers, builders, content scanners), extract a shared helper or base class. Duplicated test scaffolding is just as bad as duplicated production code. +- Never test against production. Never connect local dev environments to production services. + +## Developer Experience + +- Guiding principle: simplicity and correctness. The easy thing should be the right thing. A developer should rarely be able to do the wrong thing — as platform developers, build the guardrails that enforce correctness. +- Let tools and guardrails enforce correct behavior so developers don't have to guess. Type checkers, linters, generated code, frozen classes, and validation at build time all beat documentation that says "please remember to." +- When adding a new capability, ask: can a developer use this correctly without reading a README? If not, simplify the API or add compile-time/test-time enforcement. +- Prefer failing fast and loudly over silent misbehavior. A clear error at `generate` or `tofu plan` time is worth more than a subtle bug in production. +- If you do it twice, script it. Centralize developer tasks in repo-scoped CLI tooling. +- A feature is not done until it has metrics, alerts, and support tooling. Code that runs but can't be observed or operated is incomplete. + +### Enforcing invariants + +Every invariant should be enforced automatically. Use the strongest mechanism available, in this priority order: + +1. **Type system** — Make illegal states unrepresentable. Branded types, enums, frozen dataclasses, and `Literal` types catch errors at compile time with zero runtime cost. +2. **Tests** — When the type system can't express a constraint, write a test that fails if the invariant is violated. Schema drift tests, round-trip serialization checks, and contract tests belong here. +3. **Code generation validators** — When an invariant spans config and code (e.g. "Lakebase source tables must have CDC enabled"), add validation to `just generate` so it fails before anything is deployed. This is the right layer for cross-cutting checks that can't live in a single type signature. +4. **CI checks** — Lint rules, generated-code-up-to-date checks, and PR scope validation catch what slips past local tooling. +5. **Runtime validation** — `@enforce` decorators, DLT expectations, and input validation at system boundaries. Use these as a last line of defense, not the primary mechanism. + +When introducing a new convention or constraint, don't document it and hope people follow it. Instead, ask: "How do I make it impossible (or at least loud and obvious) to violate this?" Build the check, wire it into the developer workflow, and then document why it exists. + +## Configuration + +- Keep YAML and configuration to a minimum. Prefer code over config when logic is involved. +- Reuse and componentize shared definitions (schemas, table lists, environment settings) rather than duplicating them across files. +- Minimize cognitive complexity — a reader should understand what a config does without cross-referencing multiple files. + +## Documentation + +After adding a new feature, CLI tool, pipeline abstraction, or Terraform resource, update the relevant README or doc. Documentation is not done until the change is reflected. + +### Doc hierarchy (progressive disclosure) + +Documentation follows progressive disclosure — the top level is the simplest, each layer adds detail: + +1. **`README.md`** (root) — Quickstart only. Minimal cognitive load: install, run, and links to everything else. No deep explanations. +2. **`docs/*.md`** — Guides and operational docs. Development setup, deployment, architecture, debugging workflows. +3. **`databricks/README.md`**, **`terraform/README.md`** — Component-level detail. Bundle conventions, schema enforcement, Kinesis sinks, Lakebase, Terraform modules. + +When adding content, put it at the lowest level that makes sense. The root README should link to detail, never contain it. If a section in the root README grows beyond a short paragraph + code snippet, move the detail downstream and replace it with a link. diff --git a/packages/common-aws/package.json b/packages/common-aws/package.json index 2b6ca5c..8e71f75 100644 --- a/packages/common-aws/package.json +++ b/packages/common-aws/package.json @@ -1,6 +1,6 @@ { "name": "@paradoxical-io/common-aws", - "version": "2.7.0", + "version": "2.8.0", "description": "Common aws for paradox services", "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/common-hapi/package.json b/packages/common-hapi/package.json index 7a2b4df..c976bad 100644 --- a/packages/common-hapi/package.json +++ b/packages/common-hapi/package.json @@ -1,6 +1,6 @@ { "name": "@paradoxical-io/common-hapi", - "version": "2.7.0", + "version": "2.8.0", "description": "Common hapi code for paradoxical services", "files": [ "dist/**/*.js", diff --git a/packages/common-server/package.json b/packages/common-server/package.json index 46a34ef..668ef12 100644 --- a/packages/common-server/package.json +++ b/packages/common-server/package.json @@ -1,6 +1,6 @@ { "name": "@paradoxical-io/common-server", - "version": "2.7.0", + "version": "2.8.0", "description": "Common code for paradox services", "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/common-sql/package.json b/packages/common-sql/package.json index 395d764..816b51d 100644 --- a/packages/common-sql/package.json +++ b/packages/common-sql/package.json @@ -1,6 +1,6 @@ { "name": "@paradoxical-io/common-sql", - "version": "2.7.0", + "version": "2.8.0", "files": [ "dist/**/*.js", "dist/**/*.d.ts", @@ -19,13 +19,12 @@ "author": "Anton Kropp", "license": "MIT", "devDependencies": { - "@types/mysql": "^2.15.8", "sqlite3": "5.1.6" }, "dependencies": { "@paradoxical-io/common-server": "workspace:packages/common-server", - "mysql": "^2.17.1", - "typeorm": "^0.2.45" + "mysql2": "^3.11.0", + "typeorm": "^0.3.20" }, "lint-staged": { "*.ts": [ diff --git a/packages/common-sql/src/sql/connectionFactory.ts b/packages/common-sql/src/sql/connectionFactory.ts index a1ff091..97ba196 100644 --- a/packages/common-sql/src/sql/connectionFactory.ts +++ b/packages/common-sql/src/sql/connectionFactory.ts @@ -1,6 +1,5 @@ import { currentEnvironment, isLocal, isRemote, log, Metrics } from '@paradoxical-io/common-server'; -import { Pool } from 'mysql'; -import { Connection, createConnection } from 'typeorm'; +import { DataSource } from 'typeorm'; import { MysqlDriver } from 'typeorm/driver/mysql/MysqlDriver'; import { LoggerOptions } from 'typeorm/logger/LoggerOptions'; @@ -40,7 +39,7 @@ export class ConnectionFactory { */ constructor(private entities?: Array<{ new (): CrudBase }>) {} - async mysql(options: MySQLOptions): Promise { + async mysql(options: MySQLOptions): Promise { const defaultConnectionSize = currentEnvironment() === 'prod' ? 20 : 5; const envVar = process.env.PARADOX_MYSQL_CONNECTION_POOL_SIZE; @@ -106,7 +105,7 @@ export class ConnectionFactory { } try { - const conn = await createConnection({ + const dataSource = new DataSource({ type: 'mysql', host: opts.hostname, port: opts.port, @@ -132,20 +131,23 @@ export class ConnectionFactory { maxQueryExecutionTime: 2000, // these get passed to the underlying driver - // https://github.com/mysqljs/mysql#pooling-connections + // https://github.com/sidorares/node-mysql2#using-connection-pools extra: { connectionLimit: opts.connectionCount, }, }); + const conn = await dataSource.initialize(); + if (conn.driver instanceof MysqlDriver) { const tags = { schema: opts.database || 'unknown' }; - const pool: Pool = (conn.driver as MysqlDriver).pool; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const pool: any = (conn.driver as MysqlDriver).pool; const idMap: { [id: string]: number } = {}; - // attach listeners on the mysql driver for metrics on pool activity - pool.on('acquire', conn => { + // attach listeners on the mysql2 driver for metrics on pool activity + pool.on('acquire', (conn: { threadId?: number }) => { if (conn.threadId) { idMap[conn.threadId] = new Date().getTime(); } @@ -153,7 +155,7 @@ export class ConnectionFactory { Metrics.instance.increment('mysql.connection.active', tags); }); - pool.on('release', conn => { + pool.on('release', (conn: { threadId?: number }) => { Metrics.instance.increment('mysql.connection.active', -1, tags); if (conn.threadId && idMap[conn.threadId]) { @@ -164,7 +166,6 @@ export class ConnectionFactory { pool.on('enqueue', () => Metrics.instance.increment('mysql.connection.enqueue', tags)); pool.on('connection', () => Metrics.instance.increment('mysql.connection.new_connection', tags)); - pool.on('error', () => Metrics.instance.increment('mysql.connection.error', tags)); } return conn; } catch (err) { @@ -176,7 +177,7 @@ export class ConnectionFactory { } } - async sqlite(synchronize = true): Promise { + async sqlite(synchronize = true): Promise { const id = Math.random().toString(); const name = process.env.JEST_TEST ? `${expect.getState().currentTestName}_${new Date().getTime()}_${id}` : id; @@ -186,9 +187,8 @@ export class ConnectionFactory { // if the env var is set will dump the sqlite db to disk, otherwise will use it in memory const dbName = process.env.PARADOX_DEBUG_SQLITE_DB ? path : ':memory:'; - const conn = await createConnection({ + const dataSource = new DataSource({ type: 'sqlite', - name: id, database: dbName, logging: process.env.PARADOX_SQLITE_LOGGING === undefined ? ['warn', 'info', 'log'] : 'all', synchronize: false, @@ -196,6 +196,8 @@ export class ConnectionFactory { entities: this.entities, }); + const conn = await dataSource.initialize(); + if (synchronize) { await conn.synchronize(); } diff --git a/packages/common-sql/src/sql/dataAccessBase.test.ts b/packages/common-sql/src/sql/dataAccessBase.test.ts index fde8b2f..fbd4fcb 100644 --- a/packages/common-sql/src/sql/dataAccessBase.test.ts +++ b/packages/common-sql/src/sql/dataAccessBase.test.ts @@ -1,6 +1,6 @@ import { xpath } from '@paradoxical-io/common'; import { safeExpect } from '@paradoxical-io/common-test'; -import { Column, Connection, Entity, PrimaryColumn, PrimaryGeneratedColumn, Repository } from 'typeorm'; +import { Column, DataSource, Entity, PrimaryColumn, PrimaryGeneratedColumn, Repository } from 'typeorm'; import { ConnectionFactory } from './connectionFactory'; import { ColumnNames, CrudBase } from './crudBase'; @@ -48,7 +48,7 @@ interface Data { } class TestRepo extends SqlDataAccessBase { - public constructor(conn: Connection) { + public constructor(conn: DataSource) { super(conn); } @@ -60,7 +60,7 @@ class TestRepo extends SqlDataAccessBase { return this.getRepo(TestModelNumericColumn); } - field1Xpath(value: string): Promise { + field1Xpath(value: string): Promise { const columns = getColumnNameFunction(TestModel); return this.testModel() .createQueryBuilder() diff --git a/packages/common-sql/src/sql/dataAccessBase.ts b/packages/common-sql/src/sql/dataAccessBase.ts index b234231..360d571 100644 --- a/packages/common-sql/src/sql/dataAccessBase.ts +++ b/packages/common-sql/src/sql/dataAccessBase.ts @@ -1,6 +1,6 @@ import { Limiter } from '@paradoxical-io/common'; import { ErrorCode, ErrorWithCode } from '@paradoxical-io/types'; -import { Connection, EntityManager, ObjectLiteral, QueryRunner, Repository } from 'typeorm'; +import { DataSource, EntityManager, ObjectLiteral, QueryRunner, Repository } from 'typeorm'; import { DatabaseType } from 'typeorm/driver/types/DatabaseType'; import { EntityNotFoundError } from 'typeorm/error/EntityNotFoundError'; import { QueryDeepPartialEntity } from 'typeorm/query-builder/QueryPartialEntity'; @@ -25,8 +25,8 @@ export abstract class SqlDataAccessBase { private readonly driver: DatabaseType; - protected constructor(protected conn: Connection) { - this.driver = conn.driver.options.type; + protected constructor(protected conn: DataSource) { + this.driver = conn.options.type; // sqlite only supports a single connection // so parallel transactions will always fail @@ -34,7 +34,7 @@ export abstract class SqlDataAccessBase { // so we can queue off promises under the hood // basically its implementing https://github.com/typeorm/typeorm/issues/307 // create the wrapper here so we can have a single closed over instance of the limiter - if (conn.driver.options.type === 'sqlite') { + if (conn.options.type === 'sqlite') { const limiter = new Limiter({ maxConcurrent: 1 }); this.transactionWrapper = (p: () => Promise) => limiter.wrap(p); } else { @@ -45,7 +45,7 @@ export abstract class SqlDataAccessBase { } async close() { - await this.conn.close(); + await this.conn.destroy(); } protected getRepo = (f: Function): Repository => { @@ -150,7 +150,8 @@ export abstract class SqlDataAccessBase { const repo = this.getRepo(modelType); await this.ignoreDuplicates(() => repo.insert(model)); - return repo.findOneOrFail(model.id); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + return repo.findOneOrFail({ where: { id: model.id } as any }); } /** diff --git a/packages/common-sql/src/sql/health.ts b/packages/common-sql/src/sql/health.ts index 33c68b9..02d5e23 100644 --- a/packages/common-sql/src/sql/health.ts +++ b/packages/common-sql/src/sql/health.ts @@ -1,8 +1,8 @@ import { HealthCheck } from '@paradoxical-io/common-server'; -import { Connection } from 'typeorm'; +import { DataSource } from 'typeorm'; export class DbHealth implements HealthCheck { - constructor(private conn: Connection) {} + constructor(private conn: DataSource) {} async healthCheck(): Promise { // if the migrations query succeeds, we are connected and passing diff --git a/packages/common-sql/src/sql/ssl/profiles.ts b/packages/common-sql/src/sql/ssl/profiles.ts index 8c7150c..f0c0f78 100644 --- a/packages/common-sql/src/sql/ssl/profiles.ts +++ b/packages/common-sql/src/sql/ssl/profiles.ts @@ -1,48 +1,8 @@ -const sslProfiles: { 'Amazon RDS': { ca: string[] } } = require('mysql/lib/protocol/constants/ssl_profiles'); - -// Taken from https://github.com/mysqljs/mysql/pull/2280 -// Related to https://aws.amazon.com/blogs/database/amazon-rds-customers-update-your-ssl-tls-certificates-by-february-5-2020/ - -const updatedProfile = - /** - * Amazon RDS global root CA 2019 to 2024 - * - * CN = Amazon RDS Root 2019 CA - * OU = Amazon RDS - * O = Amazon Web Services, Inc. - * L = Seattle - * ST = Washington - * C = US - * P = 2019-08-22T17:08:50Z/2024-08-22T17:08:50Z - * F = D4:0D:DB:29:E3:75:0D:FF:A6:71:C3:14:0B:BF:5F:47:8D:1C:80:96 - */ - `-----BEGIN CERTIFICATE----- -MIIEBjCCAu6gAwIBAgIJAMc0ZzaSUK51MA0GCSqGSIb3DQEBCwUAMIGPMQswCQYD -VQQGEwJVUzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEi -MCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1h -em9uIFJEUzEgMB4GA1UEAwwXQW1hem9uIFJEUyBSb290IDIwMTkgQ0EwHhcNMTkw -ODIyMTcwODUwWhcNMjQwODIyMTcwODUwWjCBjzELMAkGA1UEBhMCVVMxEDAOBgNV -BAcMB1NlYXR0bGUxEzARBgNVBAgMCldhc2hpbmd0b24xIjAgBgNVBAoMGUFtYXpv -biBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxIDAeBgNV -BAMMF0FtYXpvbiBSRFMgUm9vdCAyMDE5IENBMIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEArXnF/E6/Qh+ku3hQTSKPMhQQlCpoWvnIthzX6MK3p5a0eXKZ -oWIjYcNNG6UwJjp4fUXl6glp53Jobn+tWNX88dNH2n8DVbppSwScVE2LpuL+94vY -0EYE/XxN7svKea8YvlrqkUBKyxLxTjh+U/KrGOaHxz9v0l6ZNlDbuaZw3qIWdD/I -6aNbGeRUVtpM6P+bWIoxVl/caQylQS6CEYUk+CpVyJSkopwJlzXT07tMoDL5WgX9 -O08KVgDNz9qP/IGtAcRduRcNioH3E9v981QO1zt/Gpb2f8NqAjUUCUZzOnij6mx9 -McZ+9cWX88CRzR0vQODWuZscgI08NvM69Fn2SQIDAQABo2MwYTAOBgNVHQ8BAf8E -BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUc19g2LzLA5j0Kxc0LjZa -pmD/vB8wHwYDVR0jBBgwFoAUc19g2LzLA5j0Kxc0LjZapmD/vB8wDQYJKoZIhvcN -AQELBQADggEBAHAG7WTmyjzPRIM85rVj+fWHsLIvqpw6DObIjMWokpliCeMINZFV -ynfgBKsf1ExwbvJNzYFXW6dihnguDG9VMPpi2up/ctQTN8tm9nDKOy08uNZoofMc -NUZxKCEkVKZv+IL4oHoeayt8egtv3ujJM6V14AstMQ6SwvwvA93EP/Ug2e4WAXHu -cbI1NAbUgVDqp+DRdfvZkgYKryjTWd/0+1fS8X1bBZVWzl7eirNVnHbSH2ZDpNuY -0SBd8dj5F6ld3t58ydZbrTHze7JJOd8ijySAp4/kiu9UfZWuTPABzDa/DSdz9Dk/ -zPW4CXXvhLmE02TA9/HeCw3KEHIwicNuEfw= ------END CERTIFICATE----- - -`; +// aws-ssl-profiles is a transitive dependency of mysql2 that provides +// up-to-date Amazon RDS CA certificate bundles +// eslint-disable-next-line @typescript-eslint/no-var-requires +const awsSslProfiles: { ca: string[] } = require('aws-ssl-profiles'); export const AWS_RDS_PROFILE = { - ca: sslProfiles['Amazon RDS'].ca.concat(updatedProfile), + ca: awsSslProfiles.ca, }; diff --git a/packages/common-sql/src/sql/stats.ts b/packages/common-sql/src/sql/stats.ts index ed99242..8dcab9f 100644 --- a/packages/common-sql/src/sql/stats.ts +++ b/packages/common-sql/src/sql/stats.ts @@ -1,8 +1,8 @@ import { isRemote, log, Metrics } from '@paradoxical-io/common-server'; -import { Connection } from 'typeorm'; +import { DataSource } from 'typeorm'; export class SqlStats { - constructor(private name: string, private conn: Connection) {} + constructor(private name: string, private conn: DataSource) {} /** * Monitors the lag time to issue a select 1 query diff --git a/packages/common-sql/src/sql/typeorm/operators.test.ts b/packages/common-sql/src/sql/typeorm/operators.test.ts index cd4338a..af6d158 100644 --- a/packages/common-sql/src/sql/typeorm/operators.test.ts +++ b/packages/common-sql/src/sql/typeorm/operators.test.ts @@ -1,7 +1,7 @@ import { epochNow } from '@paradoxical-io/common'; import { safeExpect } from '@paradoxical-io/common-test'; import { EpochMS } from '@paradoxical-io/types'; -import { Column, Connection, Entity, PrimaryGeneratedColumn, Repository } from 'typeorm'; +import { Column, DataSource, Entity, PrimaryGeneratedColumn, Repository } from 'typeorm'; import { ConnectionFactory } from '../connectionFactory'; import { ColumnNames, CrudBase } from '../crudBase'; @@ -22,7 +22,7 @@ class TestModel extends CrudBase { } class TestRepo extends SqlDataAccessBase { - public constructor(conn: Connection) { + public constructor(conn: DataSource) { super(conn); } @@ -53,9 +53,9 @@ describe('date operators', () => { await db.testModel().save({ col1: new Date(modelCol1Epoch) }); - const result = await db.testModel().findOne({ col1: db.getOperators().MoreThanDate(new Date(now)) }); + const result = await db.testModel().findOne({ where: { col1: db.getOperators().MoreThanDate(new Date(now)) } }); - safeExpect(result).negated(!inWhereClause).toBeDefined(); + safeExpect(result).negated(!inWhereClause).toBeTruthy(); }); test.each([ @@ -67,9 +67,11 @@ describe('date operators', () => { await db.testModel().save({ col1: new Date(modelCol1Epoch) }); - const result = await db.testModel().findOne({ col1: db.getOperators().MoreThanOrEqualDate(new Date(now)) }); + const result = await db + .testModel() + .findOne({ where: { col1: db.getOperators().MoreThanOrEqualDate(new Date(now)) } }); - safeExpect(result).negated(!inWhereClause).toBeDefined(); + safeExpect(result).negated(!inWhereClause).toBeTruthy(); }); test.each([ @@ -81,9 +83,9 @@ describe('date operators', () => { await db.testModel().save({ col1: new Date(modelCol1Epoch) }); - const result = await db.testModel().findOne({ col1: db.getOperators().LessThanDate(new Date(now)) }); + const result = await db.testModel().findOne({ where: { col1: db.getOperators().LessThanDate(new Date(now)) } }); - safeExpect(result).negated(!inWhereClause).toBeDefined(); + safeExpect(result).negated(!inWhereClause).toBeTruthy(); }); test.each([ @@ -95,9 +97,11 @@ describe('date operators', () => { await db.testModel().save({ col1: new Date(modelCol1Epoch) }); - const result = await db.testModel().findOne({ col1: db.getOperators().LessThanOrEqualDate(new Date(now)) }); + const result = await db + .testModel() + .findOne({ where: { col1: db.getOperators().LessThanOrEqualDate(new Date(now)) } }); - safeExpect(result).negated(!inWhereClause).toBeDefined(); + safeExpect(result).negated(!inWhereClause).toBeTruthy(); }); }); diff --git a/packages/common-sql/src/sql/typeorm/operators.ts b/packages/common-sql/src/sql/typeorm/operators.ts index 18bb08d..a8f6504 100644 --- a/packages/common-sql/src/sql/typeorm/operators.ts +++ b/packages/common-sql/src/sql/typeorm/operators.ts @@ -1,6 +1,6 @@ import { XPath } from '@paradoxical-io/common'; import { - ConnectionOptions, + DataSourceOptions, FindOperator, LessThan, LessThanOrEqual, @@ -18,7 +18,7 @@ import { DateUtils } from 'typeorm/util/DateUtils'; import { ColumnName } from './queryBuilderHelpers'; export class CustomOperators { - constructor(private driver: ConnectionOptions) {} + constructor(private driver: DataSourceOptions) {} /** * sqlite does not have a date field, internally they are stored as a string. @@ -87,32 +87,32 @@ export class CustomOperators { return param; } - MoreThanDate(date: Date): FindOperator { + MoreThanDate(date: Date): FindOperator { if (this.driver.type === 'sqlite') { - return MoreThan(this.sqliteFormat(date)); + return MoreThan(this.sqliteFormat(date)) as unknown as FindOperator; } return MoreThan(date); } - MoreThanOrEqualDate(date: Date): FindOperator { + MoreThanOrEqualDate(date: Date): FindOperator { if (this.driver.type === 'sqlite') { - return MoreThanOrEqual(this.sqliteFormat(date)); + return MoreThanOrEqual(this.sqliteFormat(date)) as unknown as FindOperator; } return MoreThanOrEqual(date); } - LessThanDate(date: Date): FindOperator { + LessThanDate(date: Date): FindOperator { if (this.driver.type === 'sqlite') { - return LessThan(this.sqliteFormat(date)); + return LessThan(this.sqliteFormat(date)) as unknown as FindOperator; } return LessThan(date); } - LessThanOrEqualDate(date: Date): FindOperator { + LessThanOrEqualDate(date: Date): FindOperator { if (this.driver.type === 'sqlite') { - return LessThanOrEqual(this.sqliteFormat(date)); + return LessThanOrEqual(this.sqliteFormat(date)) as unknown as FindOperator; } return LessThanOrEqual(date); diff --git a/packages/common-sql/src/sql/typeorm/queryBuilderHelpers.ts b/packages/common-sql/src/sql/typeorm/queryBuilderHelpers.ts index 80dc4e1..4ece80e 100644 --- a/packages/common-sql/src/sql/typeorm/queryBuilderHelpers.ts +++ b/packages/common-sql/src/sql/typeorm/queryBuilderHelpers.ts @@ -1,5 +1,5 @@ import { Brand } from '@paradoxical-io/types'; -import { SelectQueryBuilder } from 'typeorm'; +import { ObjectLiteral, SelectQueryBuilder } from 'typeorm'; import { ColumnNames, CrudBase } from '../crudBase'; @@ -87,7 +87,7 @@ export function sum(cn: ColumnName | string) { * @param varName The name of the variable. For example ':userID'. Must start with a colon. * @param value The value for the variable */ -export function andWhere( +export function andWhere( query: SelectQueryBuilder, columnOperand: ColumnName | ColumnDerivedValue, operator: '=' | '<' | '<=' | '>' | '>=' | string, diff --git a/packages/common-test/package.json b/packages/common-test/package.json index 0108ccc..c2ef34f 100644 --- a/packages/common-test/package.json +++ b/packages/common-test/package.json @@ -1,6 +1,6 @@ { "name": "@paradoxical-io/common-test", - "version": "2.7.0", + "version": "2.8.0", "description": "Common test-code for jest", "files": [ "dist/**/*.js", diff --git a/packages/common/package.json b/packages/common/package.json index 4c94aa9..031c3a3 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,6 +1,6 @@ { "name": "@paradoxical-io/common", - "version": "2.7.0", + "version": "2.8.0", "description": "Common code for all paradox projects", "files": [ "dist/**/*.js", diff --git a/packages/types/package.json b/packages/types/package.json index 62e16be..eb85b02 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@paradoxical-io/types", - "version": "2.7.0", + "version": "2.8.0", "description": "Paradox shared types", "files": [ "dist/**/*.js", diff --git a/yarn.lock b/yarn.lock index 9ed88a9..c15155a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3261,10 +3261,9 @@ __metadata: resolution: "@paradoxical-io/common-sql@workspace:packages/common-sql" dependencies: "@paradoxical-io/common-server": "workspace:packages/common-server" - "@types/mysql": ^2.15.8 - mysql: ^2.17.1 + mysql2: ^3.11.0 sqlite3: 5.1.6 - typeorm: ^0.2.45 + typeorm: ^0.3.20 languageName: unknown linkType: soft @@ -4027,7 +4026,7 @@ __metadata: languageName: node linkType: hard -"@sqltools/formatter@npm:^1.2.2": +"@sqltools/formatter@npm:^1.2.5": version: 1.2.5 resolution: "@sqltools/formatter@npm:1.2.5" checksum: 9b8354e715467d660daa5afe044860b5686bbb1a5cb67a60866b932effafbf5e8b429f19a8ae67cd412065a4f067161f227e182f3664a0245339d5eb1e26e355 @@ -4335,15 +4334,6 @@ __metadata: languageName: node linkType: hard -"@types/mysql@npm:^2.15.8": - version: 2.15.21 - resolution: "@types/mysql@npm:2.15.21" - dependencies: - "@types/node": "*" - checksum: 6f526e0183c2d03628ca3bdeec839900403863641d61397de3aa0431b8e92457f1580de16b54ee3cd81ccb3968f949a5fa9be939a2101f2148ed5ff3c775c0a7 - languageName: node - linkType: hard - "@types/node@npm:*": version: 20.3.1 resolution: "@types/node@npm:20.3.1" @@ -4857,10 +4847,10 @@ __metadata: languageName: node linkType: hard -"any-promise@npm:^1.0.0": - version: 1.3.0 - resolution: "any-promise@npm:1.3.0" - checksum: 0ee8a9bdbe882c90464d75d1f55cf027f5458650c4bd1f0467e65aec38ccccda07ca5844969ee77ed46d04e7dded3eaceb027e8d32f385688523fe305fa7e1de +"ansis@npm:^4.2.0": + version: 4.2.0 + resolution: "ansis@npm:4.2.0" + checksum: 120ae01f40b690bdd30eb84185531a7a8c0d45ebb869334199dcb6089e85be61e70861e726144bc688d2848515c42da98e98c1c4f509a53904894c70bdf11ddd languageName: node linkType: hard @@ -4874,7 +4864,7 @@ __metadata: languageName: node linkType: hard -"app-root-path@npm:^3.0.0": +"app-root-path@npm:^3.1.0": version: 3.1.0 resolution: "app-root-path@npm:3.1.0" checksum: e3db3957aee197143a0f6c75e39fe89b19e7244f28b4f2944f7276a9c526d2a7ab2d115b4b2d70a51a65a9a3ca17506690e5b36f75a068a7e5a13f8c092389ba @@ -4950,13 +4940,6 @@ __metadata: languageName: node linkType: hard -"argparse@npm:^2.0.1": - version: 2.0.1 - resolution: "argparse@npm:2.0.1" - checksum: 83644b56493e89a254bae05702abf3a1101b4fa4d0ca31df1c9985275a5a5bd47b3c27b7fa0b71098d41114d8ca000e6ed90cad764b306f8a503665e4d517ced - languageName: node - linkType: hard - "arr-diff@npm:^4.0.0": version: 4.0.0 resolution: "arr-diff@npm:4.0.0" @@ -5083,6 +5066,20 @@ __metadata: languageName: node linkType: hard +"async-function@npm:^1.0.0": + version: 1.0.0 + resolution: "async-function@npm:1.0.0" + checksum: 9102e246d1ed9b37ac36f57f0a6ca55226876553251a31fc80677e71471f463a54c872dc78d5d7f80740c8ba624395cccbe8b60f7b690c4418f487d8e9fd1106 + languageName: node + linkType: hard + +"async-generator-function@npm:^1.0.0": + version: 1.0.0 + resolution: "async-generator-function@npm:1.0.0" + checksum: 74a71a4a2dd7afd06ebb612f6d612c7f4766a351bedffde466023bf6dae629e46b0d2cd38786239e0fbf245de0c7df76035465e16d1213774a0efb22fec0d713 + languageName: node + linkType: hard + "async-hook-jl@npm:^1.7.6": version: 1.7.6 resolution: "async-hook-jl@npm:1.7.6" @@ -5147,6 +5144,15 @@ __metadata: languageName: node linkType: hard +"available-typed-arrays@npm:^1.0.7": + version: 1.0.7 + resolution: "available-typed-arrays@npm:1.0.7" + dependencies: + possible-typed-array-names: ^1.0.0 + checksum: 1aa3ffbfe6578276996de660848b6e95669d9a95ad149e3dd0c0cda77db6ee1dbd9d1dd723b65b6d277b882dd0c4b91a654ae9d3cf9e1254b7e93e4908d78fd3 + languageName: node + linkType: hard + "aws-lambda@npm:^1.0.7": version: 1.0.7 resolution: "aws-lambda@npm:1.0.7" @@ -5179,6 +5185,13 @@ __metadata: languageName: node linkType: hard +"aws-ssl-profiles@npm:^1.1.2": + version: 1.1.2 + resolution: "aws-ssl-profiles@npm:1.1.2" + checksum: bfcf9b2cbb9788e24e4af39a1e8b4a8afbdf65773b6a1636e643c10068ffbae46b28277c4c9f9321179400b2080092db040ba4513f9143f22d1bb053a12dab2b + languageName: node + linkType: hard + "aws-xray-sdk-core@npm:^3.3.3": version: 3.5.0 resolution: "aws-xray-sdk-core@npm:3.5.0" @@ -5285,6 +5298,13 @@ __metadata: languageName: node linkType: hard +"balanced-match@npm:^4.0.2": + version: 4.0.4 + resolution: "balanced-match@npm:4.0.4" + checksum: fb07bb66a0959c2843fc055838047e2a95ccebb837c519614afb067ebfdf2fa967ca8d712c35ced07f2cd26fc6f07964230b094891315ad74f11eba3d53178a0 + languageName: node + linkType: hard + "base64-js@npm:^1.0.2, base64-js@npm:^1.3.1": version: 1.5.1 resolution: "base64-js@npm:1.5.1" @@ -5323,13 +5343,6 @@ __metadata: languageName: node linkType: hard -"bignumber.js@npm:9.0.0": - version: 9.0.0 - resolution: "bignumber.js@npm:9.0.0" - checksum: 51f37890bca58bded63720add832b1c4898cf5b8ad95b5d4d9c3e763c461163d0355d11d91b740b0216b02e4e8cbb02455b28ee32140b775d96a39bbd817fdf6 - languageName: node - linkType: hard - "bignumber.js@npm:^9.0.1": version: 9.1.1 resolution: "bignumber.js@npm:9.1.1" @@ -5414,6 +5427,15 @@ __metadata: languageName: node linkType: hard +"brace-expansion@npm:^5.0.2": + version: 5.0.3 + resolution: "brace-expansion@npm:5.0.3" + dependencies: + balanced-match: ^4.0.2 + checksum: 8fea33ebbf4eac08d578fad7727c25c18a86e453bbd95d6312ecd87db73effe5607c77ed03d81ad7f56b4d84a4e355abbda939fdcab0d8a820bdb56d6587a7c5 + languageName: node + linkType: hard + "braces@npm:^2.3.1": version: 2.3.2 resolution: "braces@npm:2.3.2" @@ -5639,6 +5661,16 @@ __metadata: languageName: node linkType: hard +"call-bind-apply-helpers@npm:^1.0.0, call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2": + version: 1.0.2 + resolution: "call-bind-apply-helpers@npm:1.0.2" + dependencies: + es-errors: ^1.3.0 + function-bind: ^1.1.2 + checksum: b2863d74fcf2a6948221f65d95b91b4b2d90cfe8927650b506141e669f7d5de65cea191bf788838bc40d13846b7886c5bc5c84ab96c3adbcf88ad69a72fcdc6b + languageName: node + linkType: hard + "call-bind@npm:^1.0.0, call-bind@npm:^1.0.2": version: 1.0.2 resolution: "call-bind@npm:1.0.2" @@ -5649,6 +5681,28 @@ __metadata: languageName: node linkType: hard +"call-bind@npm:^1.0.8": + version: 1.0.8 + resolution: "call-bind@npm:1.0.8" + dependencies: + call-bind-apply-helpers: ^1.0.0 + es-define-property: ^1.0.0 + get-intrinsic: ^1.2.4 + set-function-length: ^1.2.2 + checksum: aa2899bce917a5392fd73bd32e71799c37c0b7ab454e0ed13af7f6727549091182aade8bbb7b55f304a5bc436d543241c14090fb8a3137e9875e23f444f4f5a9 + languageName: node + linkType: hard + +"call-bound@npm:^1.0.3, call-bound@npm:^1.0.4": + version: 1.0.4 + resolution: "call-bound@npm:1.0.4" + dependencies: + call-bind-apply-helpers: ^1.0.2 + get-intrinsic: ^1.3.0 + checksum: 2f6399488d1c272f56306ca60ff696575e2b7f31daf23bc11574798c84d9f2759dceb0cb1f471a85b77f28962a7ac6411f51d283ea2e45319009a19b6ccab3b2 + languageName: node + linkType: hard + "callsites@npm:^3.0.0": version: 3.1.0 resolution: "callsites@npm:3.1.0" @@ -5824,22 +5878,6 @@ __metadata: languageName: node linkType: hard -"cli-highlight@npm:^2.1.11": - version: 2.1.11 - resolution: "cli-highlight@npm:2.1.11" - dependencies: - chalk: ^4.0.0 - highlight.js: ^10.7.1 - mz: ^2.4.1 - parse5: ^5.1.1 - parse5-htmlparser2-tree-adapter: ^6.0.0 - yargs: ^16.0.0 - bin: - highlight: bin/highlight - checksum: 0a60e60545e39efea78c1732a25b91692017ec40fb6e9497208dc0eeeae69991d3923a8d6e4edd0543db3c395ed14529a33dd4d0353f1679c5b6dded792a8496 - languageName: node - linkType: hard - "cli-truncate@npm:^2.1.0": version: 2.1.0 resolution: "cli-truncate@npm:2.1.0" @@ -5860,17 +5898,6 @@ __metadata: languageName: node linkType: hard -"cliui@npm:^7.0.2": - version: 7.0.4 - resolution: "cliui@npm:7.0.4" - dependencies: - string-width: ^4.2.0 - strip-ansi: ^6.0.0 - wrap-ansi: ^7.0.0 - checksum: ce2e8f578a4813806788ac399b9e866297740eecd4ad1823c27fd344d78b22c5f8597d548adbcc46f0573e43e21e751f39446c5a5e804a12aace402b7a315d7f - languageName: node - linkType: hard - "cliui@npm:^8.0.1": version: 8.0.1 resolution: "cliui@npm:8.0.1" @@ -6283,6 +6310,13 @@ __metadata: languageName: node linkType: hard +"dayjs@npm:^1.11.19": + version: 1.11.19 + resolution: "dayjs@npm:1.11.19" + checksum: dfafcca2c67cc6e542fd880d77f1d91667efd323edc28f0487b470b184a11cc97696163ed5be1142ea2a031045b27a0d0555e72f60a63275e0e0401ac24bea5d + languageName: node + linkType: hard + "debug@npm:4, debug@npm:^4.0.1, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.3, debug@npm:^4.3.4": version: 4.3.4 resolution: "debug@npm:4.3.4" @@ -6322,6 +6356,18 @@ __metadata: languageName: node linkType: hard +"debug@npm:^4.4.3": + version: 4.4.3 + resolution: "debug@npm:4.4.3" + dependencies: + ms: ^2.1.3 + peerDependenciesMeta: + supports-color: + optional: true + checksum: 4805abd570e601acdca85b6aa3757186084a45cff9b2fa6eee1f3b173caa776b45f478b2a71a572d616d2010cea9211d0ac4a02a610e4c18ac4324bde3760834 + languageName: node + linkType: hard + "decamelize@npm:^1.1.2, decamelize@npm:^1.2.0": version: 1.2.0 resolution: "decamelize@npm:1.2.0" @@ -6348,6 +6394,18 @@ __metadata: languageName: node linkType: hard +"dedent@npm:^1.7.0": + version: 1.7.1 + resolution: "dedent@npm:1.7.1" + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + checksum: 66dc34f61dabc85597a95ce8678c93f0793ec437cc6510e0e6c14da159ce15c6209dee483aa3cccb3238a2f708382c4d26eeb1a47a4c1831a0b7bb56873041cf + languageName: node + linkType: hard + "deep-is@npm:^0.1.3": version: 0.1.4 resolution: "deep-is@npm:0.1.4" @@ -6362,6 +6420,17 @@ __metadata: languageName: node linkType: hard +"define-data-property@npm:^1.1.4": + version: 1.1.4 + resolution: "define-data-property@npm:1.1.4" + dependencies: + es-define-property: ^1.0.0 + es-errors: ^1.3.0 + gopd: ^1.0.1 + checksum: 8068ee6cab694d409ac25936eb861eea704b7763f7f342adbdfe337fc27c78d7ae0eff2364b2917b58c508d723c7a074326d068eef2e45c4edcd85cf94d0313b + languageName: node + linkType: hard + "define-properties@npm:^1.1.3, define-properties@npm:^1.1.4, define-properties@npm:^1.2.0": version: 1.2.0 resolution: "define-properties@npm:1.2.0" @@ -6414,6 +6483,13 @@ __metadata: languageName: node linkType: hard +"denque@npm:^2.1.0": + version: 2.1.0 + resolution: "denque@npm:2.1.0" + checksum: 1d4ae1d05e59ac3a3481e7b478293f4b4c813819342273f3d5b826c7ffa9753c520919ba264f377e09108d24ec6cf0ec0ac729a5686cbb8f32d797126c5dae74 + languageName: node + linkType: hard + "depd@npm:^2.0.0": version: 2.0.0 resolution: "depd@npm:2.0.0" @@ -6506,10 +6582,10 @@ __metadata: languageName: node linkType: hard -"dotenv@npm:^8.2.0": - version: 8.6.0 - resolution: "dotenv@npm:8.6.0" - checksum: 38e902c80b0666ab59e9310a3d24ed237029a7ce34d976796349765ac96b8d769f6df19090f1f471b77a25ca391971efde8a1ea63bb83111bd8bec8e5cc9b2cd +"dotenv@npm:^16.6.1": + version: 16.6.1 + resolution: "dotenv@npm:16.6.1" + checksum: e8bd63c9a37f57934f7938a9cf35de698097fadf980cb6edb61d33b3e424ceccfe4d10f37130b904a973b9038627c2646a3365a904b4406514ea94d7f1816b69 languageName: node linkType: hard @@ -6523,6 +6599,17 @@ __metadata: languageName: node linkType: hard +"dunder-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "dunder-proto@npm:1.0.1" + dependencies: + call-bind-apply-helpers: ^1.0.1 + es-errors: ^1.3.0 + gopd: ^1.2.0 + checksum: 149207e36f07bd4941921b0ca929e3a28f1da7bd6b6ff8ff7f4e2f2e460675af4576eeba359c635723dc189b64cdd4787e0255897d5b135ccc5d15cb8685fc90 + languageName: node + linkType: hard + "duplexer2@npm:~0.1.4": version: 0.1.4 resolution: "duplexer2@npm:0.1.4" @@ -6710,6 +6797,29 @@ __metadata: languageName: node linkType: hard +"es-define-property@npm:^1.0.0, es-define-property@npm:^1.0.1": + version: 1.0.1 + resolution: "es-define-property@npm:1.0.1" + checksum: 0512f4e5d564021c9e3a644437b0155af2679d10d80f21adaf868e64d30efdfbd321631956f20f42d655fedb2e3a027da479fad3fa6048f768eb453a80a5f80a + languageName: node + linkType: hard + +"es-errors@npm:^1.3.0": + version: 1.3.0 + resolution: "es-errors@npm:1.3.0" + checksum: ec1414527a0ccacd7f15f4a3bc66e215f04f595ba23ca75cdae0927af099b5ec865f9f4d33e9d7e86f512f252876ac77d4281a7871531a50678132429b1271b5 + languageName: node + linkType: hard + +"es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": + version: 1.1.1 + resolution: "es-object-atoms@npm:1.1.1" + dependencies: + es-errors: ^1.3.0 + checksum: 214d3767287b12f36d3d7267ef342bbbe1e89f899cfd67040309fc65032372a8e60201410a99a1645f2f90c1912c8c49c8668066f6bdd954bcd614dda2e3da97 + languageName: node + linkType: hard + "es-set-tostringtag@npm:^2.0.1": version: 2.0.1 resolution: "es-set-tostringtag@npm:2.0.1" @@ -7450,6 +7560,15 @@ __metadata: languageName: node linkType: hard +"for-each@npm:^0.3.5": + version: 0.3.5 + resolution: "for-each@npm:0.3.5" + dependencies: + is-callable: ^1.2.7 + checksum: 3c986d7e11f4381237cc98baa0a2f87eabe74719eee65ed7bed275163082b940ede19268c61d04c6260e0215983b12f8d885e3c8f9aa8c2113bf07c37051745c + languageName: node + linkType: hard + "for-in@npm:^1.0.2": version: 1.0.2 resolution: "for-in@npm:1.0.2" @@ -7623,6 +7742,22 @@ __metadata: languageName: node linkType: hard +"generate-function@npm:^2.3.1": + version: 2.3.1 + resolution: "generate-function@npm:2.3.1" + dependencies: + is-property: ^1.0.2 + checksum: 652f083de206ead2bae4caf9c7eeb465e8d98c0b8ed2a29c6afc538cef0785b5c6eea10548f1e13cc586d3afd796c13c830c2cb3dc612ec2457b2aadda5f57c9 + languageName: node + linkType: hard + +"generator-function@npm:^2.0.0": + version: 2.0.1 + resolution: "generator-function@npm:2.0.1" + checksum: 3bf87f7b0230de5d74529677e6c3ceb3b7b5d9618b5a22d92b45ce3876defbaf5a77791b25a61b0fa7d13f95675b5ff67a7769f3b9af33f096e34653519e873d + languageName: node + linkType: hard + "gensync@npm:^1.0.0-beta.2": version: 1.0.0-beta.2 resolution: "gensync@npm:1.0.0-beta.2" @@ -7649,6 +7784,27 @@ __metadata: languageName: node linkType: hard +"get-intrinsic@npm:^1.2.4, get-intrinsic@npm:^1.3.0": + version: 1.3.1 + resolution: "get-intrinsic@npm:1.3.1" + dependencies: + async-function: ^1.0.0 + async-generator-function: ^1.0.0 + call-bind-apply-helpers: ^1.0.2 + es-define-property: ^1.0.1 + es-errors: ^1.3.0 + es-object-atoms: ^1.1.1 + function-bind: ^1.1.2 + generator-function: ^2.0.0 + get-proto: ^1.0.1 + gopd: ^1.2.0 + has-symbols: ^1.1.0 + hasown: ^2.0.2 + math-intrinsics: ^1.1.0 + checksum: c02b3b6a445f9cd53e14896303794ac60f9751f58a69099127248abdb0251957174c6524245fc68579dc8e6a35161d3d94c93e665f808274716f4248b269436a + languageName: node + linkType: hard + "get-package-type@npm:^0.1.0": version: 0.1.0 resolution: "get-package-type@npm:0.1.0" @@ -7656,6 +7812,16 @@ __metadata: languageName: node linkType: hard +"get-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "get-proto@npm:1.0.1" + dependencies: + dunder-proto: ^1.0.1 + es-object-atoms: ^1.0.0 + checksum: 4fc96afdb58ced9a67558698b91433e6b037aaa6f1493af77498d7c85b141382cf223c0e5946f334fb328ee85dfe6edd06d218eaf09556f4bc4ec6005d7f5f7b + languageName: node + linkType: hard + "get-stdin@npm:^4.0.1": version: 4.0.1 resolution: "get-stdin@npm:4.0.1" @@ -7727,6 +7893,22 @@ __metadata: languageName: node linkType: hard +"glob@npm:^10.5.0": + version: 10.5.0 + resolution: "glob@npm:10.5.0" + dependencies: + foreground-child: ^3.1.0 + jackspeak: ^3.1.2 + minimatch: ^9.0.4 + minipass: ^7.1.2 + package-json-from-dist: ^1.0.0 + path-scurry: ^1.11.1 + bin: + glob: dist/esm/bin.mjs + checksum: cda96c074878abca9657bd984d2396945cf0d64283f6feeb40d738fe2da642be0010ad5210a1646244a5fc3511b0cab5a374569b3de5a12b8a63d392f18c6043 + languageName: node + linkType: hard + "glob@npm:^6.0.1": version: 6.0.4 resolution: "glob@npm:6.0.4" @@ -7740,7 +7922,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6": +"glob@npm:^7.1.3, glob@npm:^7.1.4": version: 7.2.3 resolution: "glob@npm:7.2.3" dependencies: @@ -7819,6 +8001,13 @@ __metadata: languageName: node linkType: hard +"gopd@npm:^1.2.0": + version: 1.2.0 + resolution: "gopd@npm:1.2.0" + checksum: cc6d8e655e360955bdccaca51a12a474268f95bb793fc3e1f2bdadb075f28bfd1fd988dab872daf77a61d78cbaf13744bc8727a17cfb1d150d76047d805375f3 + languageName: node + linkType: hard + "graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.2, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" @@ -7872,6 +8061,15 @@ __metadata: languageName: node linkType: hard +"has-property-descriptors@npm:^1.0.2": + version: 1.0.2 + resolution: "has-property-descriptors@npm:1.0.2" + dependencies: + es-define-property: ^1.0.0 + checksum: fcbb246ea2838058be39887935231c6d5788babed499d0e9d0cc5737494c48aba4fe17ba1449e0d0fbbb1e36175442faa37f9c427ae357d6ccb1d895fbcd3de3 + languageName: node + linkType: hard + "has-proto@npm:^1.0.1": version: 1.0.1 resolution: "has-proto@npm:1.0.1" @@ -7886,6 +8084,13 @@ __metadata: languageName: node linkType: hard +"has-symbols@npm:^1.1.0": + version: 1.1.0 + resolution: "has-symbols@npm:1.1.0" + checksum: b2316c7302a0e8ba3aaba215f834e96c22c86f192e7310bdf689dd0e6999510c89b00fbc5742571507cebf25764d68c988b3a0da217369a73596191ac0ce694b + languageName: node + linkType: hard + "has-tostringtag@npm:^1.0.0": version: 1.0.0 resolution: "has-tostringtag@npm:1.0.0" @@ -7895,6 +8100,15 @@ __metadata: languageName: node linkType: hard +"has-tostringtag@npm:^1.0.2": + version: 1.0.2 + resolution: "has-tostringtag@npm:1.0.2" + dependencies: + has-symbols: ^1.0.3 + checksum: 999d60bb753ad714356b2c6c87b7fb74f32463b8426e159397da4bde5bca7e598ab1073f4d8d4deafac297f2eb311484cd177af242776bf05f0d11565680468d + languageName: node + linkType: hard + "has-unicode@npm:^2.0.1": version: 2.0.1 resolution: "has-unicode@npm:2.0.1" @@ -7959,13 +8173,6 @@ __metadata: languageName: node linkType: hard -"highlight.js@npm:^10.7.1": - version: 10.7.3 - resolution: "highlight.js@npm:10.7.3" - checksum: defeafcd546b535d710d8efb8e650af9e3b369ef53e28c3dc7893eacfe263200bba4c5fcf43524ae66d5c0c296b1af0870523ceae3e3104d24b7abf6374a4fea - languageName: node - linkType: hard - "hosted-git-info@npm:^2.1.4": version: 2.8.9 resolution: "hosted-git-info@npm:2.8.9" @@ -8108,6 +8315,15 @@ __metadata: languageName: node linkType: hard +"iconv-lite@npm:^0.7.2": + version: 0.7.2 + resolution: "iconv-lite@npm:0.7.2" + dependencies: + safer-buffer: ">= 2.1.2 < 3.0.0" + checksum: faf884c1f631a5d676e3e64054bed891c7c5f616b790082d99ccfbfd017c661a39db8009160268fd65fae57c9154d4d491ebc9c301f3446a078460ef114dc4b8 + languageName: node + linkType: hard + "ieee754@npm:1.1.13": version: 1.1.13 resolution: "ieee754@npm:1.1.13" @@ -8198,7 +8414,7 @@ __metadata: languageName: node linkType: hard -"inherits@npm:2, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.0, inherits@npm:~2.0.3": +"inherits@npm:2, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.0, inherits@npm:~2.0.3": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 @@ -8493,6 +8709,13 @@ __metadata: languageName: node linkType: hard +"is-property@npm:^1.0.2": + version: 1.0.2 + resolution: "is-property@npm:1.0.2" + checksum: 33b661a3690bcc88f7e47bb0a21b9e3187e76a317541ea7ec5e8096d954f441b77a46d8930c785f7fbf4ef8dfd624c25495221e026e50f74c9048fe501773be5 + languageName: node + linkType: hard + "is-regex@npm:^1.1.4": version: 1.1.4 resolution: "is-regex@npm:1.1.4" @@ -8557,6 +8780,15 @@ __metadata: languageName: node linkType: hard +"is-typed-array@npm:^1.1.14": + version: 1.1.15 + resolution: "is-typed-array@npm:1.1.15" + dependencies: + which-typed-array: ^1.1.16 + checksum: ea7cfc46c282f805d19a9ab2084fd4542fed99219ee9dbfbc26284728bd713a51eac66daa74eca00ae0a43b61322920ba334793607dc39907465913e921e0892 + languageName: node + linkType: hard + "is-utf8@npm:^0.2.0": version: 0.2.1 resolution: "is-utf8@npm:0.2.1" @@ -8587,6 +8819,13 @@ __metadata: languageName: node linkType: hard +"isarray@npm:^2.0.5": + version: 2.0.5 + resolution: "isarray@npm:2.0.5" + checksum: bd5bbe4104438c4196ba58a54650116007fa0262eccef13a4c55b2e09a5b36b59f1e75b9fcc49883dd9d4953892e6fc007eef9e9155648ceea036e184b0f930a + languageName: node + linkType: hard + "isexe@npm:^2.0.0": version: 2.0.0 resolution: "isexe@npm:2.0.0" @@ -8688,6 +8927,19 @@ __metadata: languageName: node linkType: hard +"jackspeak@npm:^3.1.2": + version: 3.4.3 + resolution: "jackspeak@npm:3.4.3" + dependencies: + "@isaacs/cliui": ^8.0.2 + "@pkgjs/parseargs": ^0.11.0 + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: be31027fc72e7cc726206b9f560395604b82e0fddb46c4cbf9f97d049bcef607491a5afc0699612eaa4213ca5be8fd3e1e7cd187b3040988b65c9489838a7c00 + languageName: node + linkType: hard + "jake@npm:^10.8.5": version: 10.9.2 resolution: "jake@npm:10.9.2" @@ -9319,17 +9571,6 @@ __metadata: languageName: node linkType: hard -"js-yaml@npm:^4.0.0": - version: 4.1.0 - resolution: "js-yaml@npm:4.1.0" - dependencies: - argparse: ^2.0.1 - bin: - js-yaml: bin/js-yaml.js - checksum: c7830dfd456c3ef2c6e355cc5a92e6700ceafa1d14bba54497b34a99f0376cecbb3e9ac14d3e5849b426d5a5140709a66237a8c991c675431271c4ce5504151a - languageName: node - linkType: hard - "jsesc@npm:^2.5.1": version: 2.5.2 resolution: "jsesc@npm:2.5.2" @@ -9662,6 +9903,13 @@ __metadata: languageName: node linkType: hard +"long@npm:^5.3.2": + version: 5.3.2 + resolution: "long@npm:5.3.2" + checksum: be215816b563f4ca27ad3677678b53415bc489f9e3466414e54d2d85f5f8e86768547fa58493bacfb363ffc57a664debc83403ccc2178aef0c40aca28bad47c9 + languageName: node + linkType: hard + "loud-rejection@npm:^1.0.0": version: 1.6.0 resolution: "loud-rejection@npm:1.6.0" @@ -9672,6 +9920,13 @@ __metadata: languageName: node linkType: hard +"lru-cache@npm:^10.2.0": + version: 10.4.3 + resolution: "lru-cache@npm:10.4.3" + checksum: 6476138d2125387a6d20f100608c2583d415a4f64a0fecf30c9e2dda976614f09cad4baa0842447bd37dd459a7bd27f57d9d8f8ce558805abd487c583f3d774a + languageName: node + linkType: hard + "lru-cache@npm:^5.1.1": version: 5.1.1 resolution: "lru-cache@npm:5.1.1" @@ -9704,6 +9959,13 @@ __metadata: languageName: node linkType: hard +"lru.min@npm:^1.1.0, lru.min@npm:^1.1.4": + version: 1.1.4 + resolution: "lru.min@npm:1.1.4" + checksum: afc38a2e554dafd0d8d792d9ff69e2118ecd163607e9aab9ade10b35a3d47405a3e4d2e1620ff0e975c47d99ee7773d9031fdee4ea924c08c277d4fc8bba5006 + languageName: node + linkType: hard + "make-dir@npm:^3.0.0, make-dir@npm:^3.1.0": version: 3.1.0 resolution: "make-dir@npm:3.1.0" @@ -9799,6 +10061,13 @@ __metadata: languageName: node linkType: hard +"math-intrinsics@npm:^1.1.0": + version: 1.1.0 + resolution: "math-intrinsics@npm:1.1.0" + checksum: 0e513b29d120f478c85a70f49da0b8b19bc638975eca466f2eeae0071f3ad00454c621bf66e16dd435896c208e719fc91ad79bbfba4e400fe0b372e7c1c9c9a2 + languageName: node + linkType: hard + "meow@npm:^3.7.0": version: 3.7.0 resolution: "meow@npm:3.7.0" @@ -9919,6 +10188,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:^9.0.4": + version: 9.0.6 + resolution: "minimatch@npm:9.0.6" + dependencies: + brace-expansion: ^5.0.2 + checksum: ae919c3e6412e8636a4a5c996ee1eb33aa7e83e99590fb19102e309ddf5c648c7f24547165334266f2fed1ad6cbb3ea3b3767940089f8531a6cf1897433961aa + languageName: node + linkType: hard + "minimist@npm:^1.1.3, minimist@npm:^1.2.0, minimist@npm:^1.2.6": version: 1.2.8 resolution: "minimist@npm:1.2.8" @@ -10015,6 +10293,13 @@ __metadata: languageName: node linkType: hard +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.1.2": + version: 7.1.3 + resolution: "minipass@npm:7.1.3" + checksum: 2ede17c0bf8fec499be3360fd07f0ec7666189e3907320a9b653f1530cf84af98928c5b12d80bfb75f321833bf2e97785b940540213ebdafe97a5f10327e664d + languageName: node + linkType: hard + "minizlib@npm:^2.0.0, minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": version: 2.1.2 resolution: "minizlib@npm:2.1.2" @@ -10115,7 +10400,7 @@ __metadata: languageName: node linkType: hard -"ms@npm:^2.0.0, ms@npm:^2.1.1": +"ms@npm:^2.0.0, ms@npm:^2.1.1, ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d @@ -10146,26 +10431,30 @@ __metadata: languageName: node linkType: hard -"mysql@npm:^2.17.1": - version: 2.18.1 - resolution: "mysql@npm:2.18.1" +"mysql2@npm:^3.11.0": + version: 3.18.0 + resolution: "mysql2@npm:3.18.0" dependencies: - bignumber.js: 9.0.0 - readable-stream: 2.3.7 - safe-buffer: 5.1.2 - sqlstring: 2.3.1 - checksum: 430dec8525e849bbb53f78ffc7aa85b2d1535f49f96ae06064089219cfabfdb9b4051e1fabcbacc0e5b85174ae4c762b071b99d4fb4d062e98f90e723b1def0a + aws-ssl-profiles: ^1.1.2 + denque: ^2.1.0 + generate-function: ^2.3.1 + iconv-lite: ^0.7.2 + long: ^5.3.2 + lru.min: ^1.1.4 + named-placeholders: ^1.1.6 + sql-escaper: ^1.3.3 + peerDependencies: + "@types/node": ">= 8" + checksum: 440110da127afd2b7cc9d2c50def4084212cabf2f2a92a609e27786a787171b8123684ed9ee316ca31faae745645e3715d8f64be1333cc9991edc388cd0a8196 languageName: node linkType: hard -"mz@npm:^2.4.1": - version: 2.7.0 - resolution: "mz@npm:2.7.0" +"named-placeholders@npm:^1.1.6": + version: 1.1.6 + resolution: "named-placeholders@npm:1.1.6" dependencies: - any-promise: ^1.0.0 - object-assign: ^4.0.1 - thenify-all: ^1.0.0 - checksum: 8427de0ece99a07e9faed3c0c6778820d7543e3776f9a84d22cf0ec0a8eb65f6e9aee9c9d353ff9a105ff62d33a9463c6ca638974cc652ee8140cd1e35951c87 + lru.min: ^1.1.0 + checksum: 959d44f2a00e87baa2c2b2d43c2be76c6e841a0ed67af4bf4a8d91c54082e2b2db9ac8461b16db413dcb133c6f34669516d755f9a1a7956851ce81196a717f65 languageName: node linkType: hard @@ -10588,6 +10877,13 @@ __metadata: languageName: node linkType: hard +"package-json-from-dist@npm:^1.0.0": + version: 1.0.1 + resolution: "package-json-from-dist@npm:1.0.1" + checksum: 58ee9538f2f762988433da00e26acc788036914d57c71c246bf0be1b60cdbd77dd60b6a3e1a30465f0b248aeb80079e0b34cb6050b1dfa18c06953bb1cbc7602 + languageName: node + linkType: hard + "parent-module@npm:^1.0.0": version: 1.0.1 resolution: "parent-module@npm:1.0.1" @@ -10618,29 +10914,6 @@ __metadata: languageName: node linkType: hard -"parse5-htmlparser2-tree-adapter@npm:^6.0.0": - version: 6.0.1 - resolution: "parse5-htmlparser2-tree-adapter@npm:6.0.1" - dependencies: - parse5: ^6.0.1 - checksum: 1848378b355d027915645c13f13f982e60502d201f53bc2067a508bf2dba4aac08219fc781dcd160167f5f50f0c73f58d20fa4fb3d90ee46762c20234fa90a6d - languageName: node - linkType: hard - -"parse5@npm:^5.1.1": - version: 5.1.1 - resolution: "parse5@npm:5.1.1" - checksum: 613a714af4c1101d1cb9f7cece2558e35b9ae8a0c03518223a4a1e35494624d9a9ad5fad4c13eab66a0e0adccd9aa3d522fc8f5f9cc19789e0579f3fa0bdfc65 - languageName: node - linkType: hard - -"parse5@npm:^6.0.1": - version: 6.0.1 - resolution: "parse5@npm:6.0.1" - checksum: 7d569a176c5460897f7c8f3377eff640d54132b9be51ae8a8fa4979af940830b2b0c296ce75e5bd8f4041520aadde13170dbdec44889975f906098ea0002f4bd - languageName: node - linkType: hard - "pascalcase@npm:^0.1.1": version: 0.1.1 resolution: "pascalcase@npm:0.1.1" @@ -10692,6 +10965,16 @@ __metadata: languageName: node linkType: hard +"path-scurry@npm:^1.11.1": + version: 1.11.1 + resolution: "path-scurry@npm:1.11.1" + dependencies: + lru-cache: ^10.2.0 + minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 + checksum: 890d5abcd593a7912dcce7cf7c6bf7a0b5648e3dee6caf0712c126ca0a65c7f3d7b9d769072a4d1baf370f61ce493ab5b038d59988688e0c5f3f646ee3c69023 + languageName: node + linkType: hard + "path-scurry@npm:^1.7.0": version: 1.9.2 resolution: "path-scurry@npm:1.9.2" @@ -10807,6 +11090,13 @@ __metadata: languageName: node linkType: hard +"possible-typed-array-names@npm:^1.0.0": + version: 1.1.0 + resolution: "possible-typed-array-names@npm:1.1.0" + checksum: cfcd4f05264eee8fd184cd4897a17890561d1d473434b43ab66ad3673d9c9128981ec01e0cb1d65a52cd6b1eebfb2eae1e53e39b2e0eca86afc823ede7a4f41b + languageName: node + linkType: hard + "prelude-ls@npm:^1.2.1": version: 1.2.1 resolution: "prelude-ls@npm:1.2.1" @@ -11030,21 +11320,6 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:2.3.7": - version: 2.3.7 - resolution: "readable-stream@npm:2.3.7" - dependencies: - core-util-is: ~1.0.0 - inherits: ~2.0.3 - isarray: ~1.0.0 - process-nextick-args: ~2.0.0 - safe-buffer: ~5.1.1 - string_decoder: ~1.1.1 - util-deprecate: ~1.0.1 - checksum: e4920cf7549a60f8aaf694d483a0e61b2a878b969d224f89b3bc788b8d920075132c4b55a7494ee944c7b6a9a0eada28a7f6220d80b0312ece70bbf08eeca755 - languageName: node - linkType: hard - "readable-stream@npm:^2.0.0, readable-stream@npm:^2.0.2, readable-stream@npm:^2.0.5, readable-stream@npm:~2.3.6": version: 2.3.8 resolution: "readable-stream@npm:2.3.8" @@ -11079,13 +11354,20 @@ __metadata: languageName: node linkType: hard -"reflect-metadata@npm:*, reflect-metadata@npm:^0.1.10, reflect-metadata@npm:^0.1.13": +"reflect-metadata@npm:*, reflect-metadata@npm:^0.1.10": version: 0.1.13 resolution: "reflect-metadata@npm:0.1.13" checksum: 798d379a7b6f6455501145419505c97dd11cbc23857a386add2b9ef15963ccf15a48d9d15507afe01d4cd74116df8a213247200bac00320bd7c11ddeaa5e8fb4 languageName: node linkType: hard +"reflect-metadata@npm:^0.2.2": + version: 0.2.2 + resolution: "reflect-metadata@npm:0.2.2" + checksum: a66c7b583e4efdd8f3c3124fbff33da2d0c86d8280617516308b32b2159af7a3698c961db3246387f56f6316b1d33a608f39bb2b49d813316dfc58f6d3bf3210 + languageName: node + linkType: hard + "regex-not@npm:^1.0.0, regex-not@npm:^1.0.2": version: 1.0.2 resolution: "regex-not@npm:1.0.2" @@ -11386,20 +11668,20 @@ __metadata: languageName: node linkType: hard -"safe-buffer@npm:5.1.2, safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": - version: 5.1.2 - resolution: "safe-buffer@npm:5.1.2" - checksum: f2f1f7943ca44a594893a852894055cf619c1fbcb611237fc39e461ae751187e7baf4dc391a72125e0ac4fb2d8c5c0b3c71529622e6a58f46b960211e704903c - languageName: node - linkType: hard - -"safe-buffer@npm:^5.0.1, safe-buffer@npm:~5.2.0": +"safe-buffer@npm:^5.2.1, safe-buffer@npm:~5.2.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 languageName: node linkType: hard +"safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": + version: 5.1.2 + resolution: "safe-buffer@npm:5.1.2" + checksum: f2f1f7943ca44a594893a852894055cf619c1fbcb611237fc39e461ae751187e7baf4dc391a72125e0ac4fb2d8c5c0b3c71529622e6a58f46b960211e704903c + languageName: node + linkType: hard + "safe-json-stringify@npm:~1": version: 1.2.0 resolution: "safe-json-stringify@npm:1.2.0" @@ -11534,6 +11816,20 @@ __metadata: languageName: node linkType: hard +"set-function-length@npm:^1.2.2": + version: 1.2.2 + resolution: "set-function-length@npm:1.2.2" + dependencies: + define-data-property: ^1.1.4 + es-errors: ^1.3.0 + function-bind: ^1.1.2 + get-intrinsic: ^1.2.4 + gopd: ^1.0.1 + has-property-descriptors: ^1.0.2 + checksum: a8248bdacdf84cb0fab4637774d9fb3c7a8e6089866d04c817583ff48e14149c87044ce683d7f50759a8c50fb87c7a7e173535b06169c87ef76f5fb276dfff72 + languageName: node + linkType: hard + "set-value@npm:^2.0.0, set-value@npm:^2.0.1": version: 2.0.1 resolution: "set-value@npm:2.0.1" @@ -11553,15 +11849,16 @@ __metadata: languageName: node linkType: hard -"sha.js@npm:^2.4.11": - version: 2.4.11 - resolution: "sha.js@npm:2.4.11" +"sha.js@npm:^2.4.12": + version: 2.4.12 + resolution: "sha.js@npm:2.4.12" dependencies: - inherits: ^2.0.1 - safe-buffer: ^5.0.1 + inherits: ^2.0.4 + safe-buffer: ^5.2.1 + to-buffer: ^1.2.0 bin: - sha.js: ./bin.js - checksum: ebd3f59d4b799000699097dadb831c8e3da3eb579144fd7eb7a19484cbcbb7aca3c68ba2bb362242eb09e33217de3b4ea56e4678184c334323eca24a58e3ad07 + sha.js: bin.js + checksum: 9ec0fe39cc402acb33ffb18d261b52013485a2a9569a1873ff1861510a67b9ea2b3ccc78ab8aa09c34e1e85a5f06e18ab83637715509c6153ba8d537bbd2c29d languageName: node linkType: hard @@ -11867,6 +12164,20 @@ __metadata: languageName: node linkType: hard +"sql-escaper@npm:^1.3.3": + version: 1.3.3 + resolution: "sql-escaper@npm:1.3.3" + checksum: 4d10917f22501c36b68e12480aaf4996a3191430494fcfe01c75abcc6a3430b27f251d9318a2493917e880fafc730d8320d263e5871b1658e9a0bfa566e80f39 + languageName: node + linkType: hard + +"sql-highlight@npm:^6.1.0": + version: 6.1.0 + resolution: "sql-highlight@npm:6.1.0" + checksum: 417d36902cc30fd56da31d13a92b0225149dcd55b093c865c458af84225f92eaf5bcf0558fb1dad3b2c67c77becf800d79e43eaaa57157f3ec8ce38d7280f7fb + languageName: node + linkType: hard + "sqlite3@npm:5.1.6": version: 5.1.6 resolution: "sqlite3@npm:5.1.6" @@ -11887,13 +12198,6 @@ __metadata: languageName: node linkType: hard -"sqlstring@npm:2.3.1": - version: 2.3.1 - resolution: "sqlstring@npm:2.3.1" - checksum: de4299cf9bd0f49abae5b4eddde42c7ae7c447e035498ec50b3264610d6f0efbe433eeed2d20d48b6362bf46fd96c85cf6db240e994dbe6d5c3f9dac6d7ffd31 - languageName: node - linkType: hard - "ssh2-sftp-client@npm:^8.1.0": version: 8.1.0 resolution: "ssh2-sftp-client@npm:8.1.0" @@ -12310,24 +12614,6 @@ __metadata: languageName: node linkType: hard -"thenify-all@npm:^1.0.0": - version: 1.6.0 - resolution: "thenify-all@npm:1.6.0" - dependencies: - thenify: ">= 3.1.0 < 4" - checksum: dba7cc8a23a154cdcb6acb7f51d61511c37a6b077ec5ab5da6e8b874272015937788402fd271fdfc5f187f8cb0948e38d0a42dcc89d554d731652ab458f5343e - languageName: node - linkType: hard - -"thenify@npm:>= 3.1.0 < 4": - version: 3.3.1 - resolution: "thenify@npm:3.3.1" - dependencies: - any-promise: ^1.0.0 - checksum: 84e1b804bfec49f3531215f17b4a6e50fd4397b5f7c1bccc427b9c656e1ecfb13ea79d899930184f78bc2f57285c54d9a50a590c8868f4f0cef5c1d9f898b05e - languageName: node - linkType: hard - "through2@npm:^3.0.1": version: 3.0.2 resolution: "through2@npm:3.0.2" @@ -12352,6 +12638,17 @@ __metadata: languageName: node linkType: hard +"to-buffer@npm:^1.2.0": + version: 1.2.2 + resolution: "to-buffer@npm:1.2.2" + dependencies: + isarray: ^2.0.5 + safe-buffer: ^5.2.1 + typed-array-buffer: ^1.0.3 + checksum: b0cd2417989a9f3d47273301e8cec2c9798b19a117822424686f385f3ec0239d2defd5fd9f8e76cda0b21e2a2f5de65a58e806506bf4c296c31750c5efd3ae4b + languageName: node + linkType: hard + "to-fast-properties@npm:^2.0.0": version: 2.0.0 resolution: "to-fast-properties@npm:2.0.0" @@ -12536,7 +12833,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.6.2": +"tslib@npm:^2.6.2, tslib@npm:^2.8.1": version: 2.8.1 resolution: "tslib@npm:2.8.1" checksum: e4aba30e632b8c8902b47587fd13345e2827fa639e7c3121074d5ee0880723282411a8838f830b55100cbe4517672f84a2472667d355b81e8af165a55dc6203a @@ -12605,6 +12902,17 @@ __metadata: languageName: node linkType: hard +"typed-array-buffer@npm:^1.0.3": + version: 1.0.3 + resolution: "typed-array-buffer@npm:1.0.3" + dependencies: + call-bound: ^1.0.3 + es-errors: ^1.3.0 + is-typed-array: ^1.1.14 + checksum: 3fb91f0735fb413b2bbaaca9fabe7b8fc14a3fa5a5a7546bab8a57e755be0e3788d893195ad9c2b842620592de0e68d4c077d4c2c41f04ec25b8b5bb82fa9a80 + languageName: node + linkType: hard + "typed-array-length@npm:^1.0.4": version: 1.0.4 resolution: "typed-array-length@npm:1.0.4" @@ -12623,50 +12931,49 @@ __metadata: languageName: node linkType: hard -"typeorm@npm:^0.2.45": - version: 0.2.45 - resolution: "typeorm@npm:0.2.45" +"typeorm@npm:^0.3.20": + version: 0.3.28 + resolution: "typeorm@npm:0.3.28" dependencies: - "@sqltools/formatter": ^1.2.2 - app-root-path: ^3.0.0 + "@sqltools/formatter": ^1.2.5 + ansis: ^4.2.0 + app-root-path: ^3.1.0 buffer: ^6.0.3 - chalk: ^4.1.0 - cli-highlight: ^2.1.11 - debug: ^4.3.1 - dotenv: ^8.2.0 - glob: ^7.1.6 - js-yaml: ^4.0.0 - mkdirp: ^1.0.4 - reflect-metadata: ^0.1.13 - sha.js: ^2.4.11 - tslib: ^2.1.0 - uuid: ^8.3.2 - xml2js: ^0.4.23 - yargs: ^17.0.1 - zen-observable-ts: ^1.0.0 + dayjs: ^1.11.19 + debug: ^4.4.3 + dedent: ^1.7.0 + dotenv: ^16.6.1 + glob: ^10.5.0 + reflect-metadata: ^0.2.2 + sha.js: ^2.4.12 + sql-highlight: ^6.1.0 + tslib: ^2.8.1 + uuid: ^11.1.0 + yargs: ^17.7.2 peerDependencies: - "@sap/hana-client": ^2.11.14 - better-sqlite3: ^7.1.2 - hdb-pool: ^0.1.6 - ioredis: ^4.28.3 - mongodb: ^3.6.0 - mssql: ^6.3.1 - mysql2: ^2.2.5 - oracledb: ^5.1.0 + "@google-cloud/spanner": ^5.18.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + "@sap/hana-client": ^2.14.22 + better-sqlite3: ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0 || ^12.0.0 + ioredis: ^5.0.4 + mongodb: ^5.8.0 || ^6.0.0 + mssql: ^9.1.1 || ^10.0.0 || ^11.0.0 || ^12.0.0 + mysql2: ^2.2.5 || ^3.0.1 + oracledb: ^6.3.0 pg: ^8.5.1 pg-native: ^3.0.0 pg-query-stream: ^4.0.0 - redis: ^3.1.1 + redis: ^3.1.1 || ^4.0.0 || ^5.0.14 sql.js: ^1.4.0 - sqlite3: ^5.0.2 - typeorm-aurora-data-api-driver: ^2.0.0 + sqlite3: ^5.0.3 + ts-node: ^10.7.0 + typeorm-aurora-data-api-driver: ^2.0.0 || ^3.0.0 peerDependenciesMeta: + "@google-cloud/spanner": + optional: true "@sap/hana-client": optional: true better-sqlite3: optional: true - hdb-pool: - optional: true ioredis: optional: true mongodb: @@ -12689,11 +12996,15 @@ __metadata: optional: true sqlite3: optional: true + ts-node: + optional: true typeorm-aurora-data-api-driver: optional: true bin: typeorm: cli.js - checksum: b7684a52c8ba3b796fb9f7d9ea6223edd9256dbeec67c4befe39515ce684dd684d82a2d53158b738555f5c964efaf09144bdd3ced046638e89aa46483d9a696b + typeorm-ts-node-commonjs: cli-ts-node-commonjs.js + typeorm-ts-node-esm: cli-ts-node-esm.js + checksum: 5c8392ea59a4f9014bcd1606d1ffc0192b3ffd864fd6e6fdaf7702f89c83519efaaf8a642d6465ca2cb68bfe6152193eced6df626f1b89f6038ed0324f0b4470 languageName: node linkType: hard @@ -12913,6 +13224,15 @@ __metadata: languageName: node linkType: hard +"uuid@npm:^11.1.0": + version: 11.1.0 + resolution: "uuid@npm:11.1.0" + bin: + uuid: dist/esm/bin/uuid + checksum: 840f19758543c4631e58a29439e51b5b669d5f34b4dd2700b6a1d15c5708c7a6e0c3e2c8c4a2eae761a3a7caa7e9884d00c86c02622ba91137bd3deade6b4b4a + languageName: node + linkType: hard + "uuid@npm:^3.0.0": version: 3.4.0 resolution: "uuid@npm:3.4.0" @@ -13024,6 +13344,21 @@ __metadata: languageName: node linkType: hard +"which-typed-array@npm:^1.1.16": + version: 1.1.20 + resolution: "which-typed-array@npm:1.1.20" + dependencies: + available-typed-arrays: ^1.0.7 + call-bind: ^1.0.8 + call-bound: ^1.0.4 + for-each: ^0.3.5 + get-proto: ^1.0.1 + gopd: ^1.2.0 + has-tostringtag: ^1.0.2 + checksum: 82527027127c3a6f7b278b5c0059605b968bec780d1ddd7c0ce3c2172ae4b9d2217486123107e31d229ff57ed8cc2bc76d751f290f392ee6d3aa27b26d2ffc12 + languageName: node + linkType: hard + "which-typed-array@npm:^1.1.2, which-typed-array@npm:^1.1.9": version: 1.1.9 resolution: "which-typed-array@npm:1.1.9" @@ -13164,16 +13499,6 @@ __metadata: languageName: node linkType: hard -"xml2js@npm:^0.4.23": - version: 0.4.23 - resolution: "xml2js@npm:0.4.23" - dependencies: - sax: ">=0.6.0" - xmlbuilder: ~11.0.0 - checksum: ca0cf2dfbf6deeaae878a891c8fbc0db6fd04398087084edf143cdc83d0509ad0fe199b890f62f39c4415cf60268a27a6aed0d343f0658f8779bd7add690fa98 - languageName: node - linkType: hard - "xmlbuilder@npm:~11.0.0": version: 11.0.1 resolution: "xmlbuilder@npm:11.0.1" @@ -13219,13 +13544,6 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:^20.2.2": - version: 20.2.9 - resolution: "yargs-parser@npm:20.2.9" - checksum: 8bb69015f2b0ff9e17b2c8e6bfe224ab463dd00ca211eece72a4cd8a906224d2703fb8a326d36fdd0e68701e201b2a60ed7cf81ce0fd9b3799f9fe7745977ae3 - languageName: node - linkType: hard - "yargs-parser@npm:^21.1.1": version: 21.1.1 resolution: "yargs-parser@npm:21.1.1" @@ -13233,22 +13551,7 @@ __metadata: languageName: node linkType: hard -"yargs@npm:^16.0.0": - version: 16.2.0 - resolution: "yargs@npm:16.2.0" - dependencies: - cliui: ^7.0.2 - escalade: ^3.1.1 - get-caller-file: ^2.0.5 - require-directory: ^2.1.1 - string-width: ^4.2.0 - y18n: ^5.0.5 - yargs-parser: ^20.2.2 - checksum: b14afbb51e3251a204d81937c86a7e9d4bdbf9a2bcee38226c900d00f522969ab675703bee2a6f99f8e20103f608382936034e64d921b74df82b63c07c5e8f59 - languageName: node - linkType: hard - -"yargs@npm:^17.0.1, yargs@npm:^17.3.1": +"yargs@npm:^17.3.1, yargs@npm:^17.7.2": version: 17.7.2 resolution: "yargs@npm:17.7.2" dependencies: @@ -13270,22 +13573,6 @@ __metadata: languageName: node linkType: hard -"zen-observable-ts@npm:^1.0.0": - version: 1.2.5 - resolution: "zen-observable-ts@npm:1.2.5" - dependencies: - zen-observable: 0.8.15 - checksum: 3b707b7a0239a9bc40f73ba71b27733a689a957c1f364fabb9fa9cbd7d04b7c2faf0d517bf17004e3ed3f4330ac613e84c0d32313e450ddaa046f3350af44541 - languageName: node - linkType: hard - -"zen-observable@npm:0.8.15": - version: 0.8.15 - resolution: "zen-observable@npm:0.8.15" - checksum: b7289084bc1fc74a559b7259faa23d3214b14b538a8843d2b001a35e27147833f4107590b1b44bf5bc7f6dfe6f488660d3a3725f268e09b3925b3476153b7821 - languageName: node - linkType: hard - "zip-stream@npm:^4.1.0": version: 4.1.0 resolution: "zip-stream@npm:4.1.0"