mirror of
https://github.com/expo/entity.git
synced 2026-11-15 03:48:08 -10:00
Compare commits
6
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
593fb10c99 | ||
|
|
3c96f3b9ea | ||
|
|
84f83071f3 | ||
|
|
13ce74e93a | ||
|
|
6de04055e7 | ||
|
|
ba74662842 |
No files matched your search
@@ -3,6 +3,18 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
# [0.71.0](https://github.com/expo/entity/compare/v0.70.0...v0.71.0) (2026-10-09)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- declare runtime dependencies imported by published packages ([#717](https://github.com/expo/entity/issues/717)) ([3c96f3b](https://github.com/expo/entity/commit/3c96f3b9ea2b097c979447354f0abe35ed5e8d57))
|
||||
|
||||
# [0.70.0](https://github.com/expo/entity/compare/v0.69.0...v0.70.0) (2026-10-05)
|
||||
|
||||
### Features
|
||||
|
||||
- add transient error for PostgreSQL lock timeouts ([#716](https://github.com/expo/entity/issues/716)) ([13ce74e](https://github.com/expo/entity/commit/13ce74e93aec0a0b0b84edd1e1e89d785a3dbf46)), closes [#714](https://github.com/expo/entity/issues/714) [#715](https://github.com/expo/entity/issues/715)
|
||||
|
||||
# [0.69.0](https://github.com/expo/entity/compare/v0.68.0...v0.69.0) (2026-09-29)
|
||||
|
||||
### Features
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"packages": ["packages/*"],
|
||||
"npmClient": "yarn",
|
||||
"version": "0.69.0",
|
||||
"version": "0.71.0",
|
||||
"$schema": "node_modules/lerna/schemas/lerna-schema.json"
|
||||
}
|
||||
+1
-1
@@ -25,7 +25,7 @@
|
||||
"@tsconfig/bases": "1.0.28",
|
||||
"@types/node": "24.19.1",
|
||||
"ctix": "2.8.2",
|
||||
"jest": "30.5.1",
|
||||
"jest": "30.5.2",
|
||||
"lerna": "9.0.7",
|
||||
"oxfmt": "0.67.0",
|
||||
"oxlint": "1.82.0",
|
||||
|
||||
@@ -3,6 +3,14 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
# [0.71.0](https://github.com/expo/entity/compare/v0.70.0...v0.71.0) (2026-10-09)
|
||||
|
||||
**Note:** Version bump only for package @expo/entity-cache-adapter-local-memory
|
||||
|
||||
# [0.70.0](https://github.com/expo/entity/compare/v0.69.0...v0.70.0) (2026-10-05)
|
||||
|
||||
**Note:** Version bump only for package @expo/entity-cache-adapter-local-memory
|
||||
|
||||
# [0.69.0](https://github.com/expo/entity/compare/v0.68.0...v0.69.0) (2026-09-29)
|
||||
|
||||
**Note:** Version bump only for package @expo/entity-cache-adapter-local-memory
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@expo/entity-cache-adapter-local-memory",
|
||||
"version": "0.69.0",
|
||||
"version": "0.71.0",
|
||||
"description": "Cross-request local memory cache adapter for @expo/entity",
|
||||
"keywords": [
|
||||
"entity"
|
||||
@@ -31,7 +31,7 @@
|
||||
"devDependencies": {
|
||||
"@expo/entity-testing-utils": "workspace:^",
|
||||
"@isaacs/ttlcache": "2.1.5",
|
||||
"@jest/globals": "30.5.1",
|
||||
"@jest/globals": "30.5.2",
|
||||
"typescript": "6.0.3"
|
||||
},
|
||||
"engines": {
|
||||
|
||||
@@ -3,6 +3,14 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
# [0.71.0](https://github.com/expo/entity/compare/v0.70.0...v0.71.0) (2026-10-09)
|
||||
|
||||
**Note:** Version bump only for package @expo/entity-cache-adapter-redis
|
||||
|
||||
# [0.70.0](https://github.com/expo/entity/compare/v0.69.0...v0.70.0) (2026-10-05)
|
||||
|
||||
**Note:** Version bump only for package @expo/entity-cache-adapter-redis
|
||||
|
||||
# [0.69.0](https://github.com/expo/entity/compare/v0.68.0...v0.69.0) (2026-09-29)
|
||||
|
||||
**Note:** Version bump only for package @expo/entity-cache-adapter-redis
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@expo/entity-cache-adapter-redis",
|
||||
"version": "0.69.0",
|
||||
"version": "0.71.0",
|
||||
"description": "Redis cache adapter for @expo/entity",
|
||||
"keywords": [
|
||||
"entity"
|
||||
@@ -31,7 +31,7 @@
|
||||
"devDependencies": {
|
||||
"@expo/batcher": "1.1.2",
|
||||
"@expo/entity-testing-utils": "workspace:^",
|
||||
"@jest/globals": "30.5.1",
|
||||
"@jest/globals": "30.5.2",
|
||||
"ioredis": "5.11.1",
|
||||
"ts-mockito": "2.6.1",
|
||||
"typescript": "6.0.3"
|
||||
|
||||
@@ -3,6 +3,14 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
# [0.71.0](https://github.com/expo/entity/compare/v0.70.0...v0.71.0) (2026-10-09)
|
||||
|
||||
**Note:** Version bump only for package @expo/entity-codemod
|
||||
|
||||
# [0.70.0](https://github.com/expo/entity/compare/v0.69.0...v0.70.0) (2026-10-05)
|
||||
|
||||
**Note:** Version bump only for package @expo/entity-codemod
|
||||
|
||||
# [0.69.0](https://github.com/expo/entity/compare/v0.68.0...v0.69.0) (2026-09-29)
|
||||
|
||||
**Note:** Version bump only for package @expo/entity-codemod
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@expo/entity-codemod",
|
||||
"version": "0.69.0",
|
||||
"version": "0.71.0",
|
||||
"description": "jscodeshift codemods for @expo/entity upgrades",
|
||||
"keywords": [
|
||||
"entity"
|
||||
@@ -25,7 +25,7 @@
|
||||
"test": "yarn test:all --rootDir $(pwd)"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@jest/globals": "30.5.1",
|
||||
"@jest/globals": "30.5.2",
|
||||
"@types/jscodeshift": "17.3.0",
|
||||
"@types/node": "24.19.1",
|
||||
"jscodeshift": "17.4.0",
|
||||
|
||||
@@ -3,6 +3,16 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
# [0.71.0](https://github.com/expo/entity/compare/v0.70.0...v0.71.0) (2026-10-09)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- declare runtime dependencies imported by published packages ([#717](https://github.com/expo/entity/issues/717)) ([3c96f3b](https://github.com/expo/entity/commit/3c96f3b9ea2b097c979447354f0abe35ed5e8d57))
|
||||
|
||||
# [0.70.0](https://github.com/expo/entity/compare/v0.69.0...v0.70.0) (2026-10-05)
|
||||
|
||||
**Note:** Version bump only for package @expo/entity-database-adapter-knex-testing-utils
|
||||
|
||||
# [0.69.0](https://github.com/expo/entity/compare/v0.68.0...v0.69.0) (2026-09-29)
|
||||
|
||||
**Note:** Version bump only for package @expo/entity-database-adapter-knex-testing-utils
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@expo/entity-database-adapter-knex-testing-utils",
|
||||
"version": "0.69.0",
|
||||
"version": "0.71.0",
|
||||
"description": "Testing utilities for applications using Entity with Knex database adapter",
|
||||
"keywords": [
|
||||
"entity"
|
||||
@@ -27,11 +27,12 @@
|
||||
"dependencies": {
|
||||
"@expo/entity": "workspace:^",
|
||||
"@expo/entity-database-adapter-knex": "workspace:^",
|
||||
"@expo/entity-testing-utils": "workspace:^",
|
||||
"invariant": "^2.2.4",
|
||||
"uuid": "^14.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@jest/globals": "30.5.1",
|
||||
"@jest/globals": "30.5.2",
|
||||
"@types/invariant": "2.2.37",
|
||||
"@types/node": "24.19.1",
|
||||
"typescript": "6.0.3"
|
||||
|
||||
@@ -3,6 +3,18 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
# [0.71.0](https://github.com/expo/entity/compare/v0.70.0...v0.71.0) (2026-10-09)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- declare runtime dependencies imported by published packages ([#717](https://github.com/expo/entity/issues/717)) ([3c96f3b](https://github.com/expo/entity/commit/3c96f3b9ea2b097c979447354f0abe35ed5e8d57))
|
||||
|
||||
# [0.70.0](https://github.com/expo/entity/compare/v0.69.0...v0.70.0) (2026-10-05)
|
||||
|
||||
### Features
|
||||
|
||||
- add transient error for PostgreSQL lock timeouts ([#716](https://github.com/expo/entity/issues/716)) ([13ce74e](https://github.com/expo/entity/commit/13ce74e93aec0a0b0b84edd1e1e89d785a3dbf46)), closes [#714](https://github.com/expo/entity/issues/714) [#715](https://github.com/expo/entity/issues/715)
|
||||
|
||||
# [0.69.0](https://github.com/expo/entity/compare/v0.68.0...v0.69.0) (2026-09-29)
|
||||
|
||||
### Features
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@expo/entity-database-adapter-knex",
|
||||
"version": "0.69.0",
|
||||
"version": "0.71.0",
|
||||
"description": "Knex database adapter for @expo/entity",
|
||||
"keywords": [
|
||||
"entity"
|
||||
@@ -27,11 +27,12 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@expo/entity": "workspace:^",
|
||||
"@expo/results": "^1.0.0",
|
||||
"knex": "^3.2.9"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@expo/entity-testing-utils": "workspace:^",
|
||||
"@jest/globals": "30.5.1",
|
||||
"@jest/globals": "30.5.2",
|
||||
"pg": "8.23.1",
|
||||
"ts-mockito": "2.6.1",
|
||||
"typescript": "6.0.3"
|
||||
|
||||
@@ -1,13 +1,4 @@
|
||||
import {
|
||||
EntityDatabaseAdapterCheckConstraintError,
|
||||
EntityDatabaseAdapterExclusionConstraintError,
|
||||
EntityDatabaseAdapterForeignKeyConstraintError,
|
||||
EntityDatabaseAdapterNotNullConstraintError,
|
||||
EntityDatabaseAdapterTransientError,
|
||||
EntityDatabaseAdapterUniqueConstraintError,
|
||||
EntityDatabaseAdapterUnknownError,
|
||||
ViewerContext,
|
||||
} from '@expo/entity';
|
||||
import { EntityDatabaseAdapterUniqueConstraintError, ViewerContext } from '@expo/entity';
|
||||
import nullthrows from '@expo/nullthrows';
|
||||
import { afterAll, beforeAll, beforeEach, describe, expect, it } from '@jest/globals';
|
||||
import type { Knex } from 'knex';
|
||||
@@ -15,6 +6,15 @@ import knex from 'knex';
|
||||
|
||||
import { ErrorsTestEntity } from '../__testfixtures__/ErrorsTestEntity.ts';
|
||||
import { createKnexIntegrationTestEntityCompanionProvider } from '../__testfixtures__/createKnexIntegrationTestEntityCompanionProvider.ts';
|
||||
import {
|
||||
EntityDatabaseAdapterCheckConstraintError,
|
||||
EntityDatabaseAdapterExclusionConstraintError,
|
||||
EntityDatabaseAdapterForeignKeyConstraintError,
|
||||
EntityDatabaseAdapterLockNotAvailableError,
|
||||
EntityDatabaseAdapterNotNullConstraintError,
|
||||
EntityDatabaseAdapterTransientError,
|
||||
EntityDatabaseAdapterUnknownError,
|
||||
} from '../errors/KnexEntityDatabaseAdapterError.ts';
|
||||
|
||||
describe('postgres errors', () => {
|
||||
let knexInstance: Knex;
|
||||
@@ -160,6 +160,34 @@ describe('postgres errors', () => {
|
||||
).rejects.toThrow(EntityDatabaseAdapterExclusionConstraintError);
|
||||
});
|
||||
|
||||
it('throws EntityDatabaseAdapterLockNotAvailableError when lock_timeout is exceeded', async () => {
|
||||
const vc = new ViewerContext(createKnexIntegrationTestEntityCompanionProvider(knexInstance));
|
||||
const entity = await ErrorsTestEntity.creator(vc)
|
||||
.setField('id', 1)
|
||||
.setField('fieldNonNull', 'hello')
|
||||
.createAsync();
|
||||
|
||||
// hold a row lock from a separate transaction while the entity update attempts to acquire it
|
||||
const lockHolderTransaction = await knexInstance.transaction();
|
||||
await lockHolderTransaction.raw(
|
||||
'SELECT * FROM postgres_test_entities WHERE id = ? FOR UPDATE',
|
||||
[entity.getID()],
|
||||
);
|
||||
|
||||
try {
|
||||
await expect(
|
||||
vc.runInTransactionForDatabaseAdapterFlavorAsync('postgres', async (queryContext) => {
|
||||
await queryContext.getQueryInterface().raw("SET LOCAL lock_timeout = '100ms'");
|
||||
await ErrorsTestEntity.updater(entity, queryContext)
|
||||
.setField('fieldNonNull', 'world')
|
||||
.updateAsync();
|
||||
}),
|
||||
).rejects.toThrow(EntityDatabaseAdapterLockNotAvailableError);
|
||||
} finally {
|
||||
await lockHolderTransaction.rollback();
|
||||
}
|
||||
});
|
||||
|
||||
it('throws EntityDatabaseAdapterUnknownError otherwise', async () => {
|
||||
const vc = new ViewerContext(createKnexIntegrationTestEntityCompanionProvider(knexInstance));
|
||||
await expect(
|
||||
|
||||
@@ -0,0 +1,163 @@
|
||||
import { EntityDatabaseAdapterError, EntityErrorState } from '@expo/entity';
|
||||
|
||||
/**
|
||||
* Error code for an entity error thrown by the knex database adapter.
|
||||
* Each error code should map to a specific class of Entity error.
|
||||
*/
|
||||
export enum KnexEntityDatabaseAdapterErrorCode {
|
||||
ERR_ENTITY_DATABASE_ADAPTER_TRANSIENT = 'ERR_ENTITY_DATABASE_ADAPTER_TRANSIENT',
|
||||
ERR_ENTITY_DATABASE_ADAPTER_UNKNOWN = 'ERR_ENTITY_DATABASE_ADAPTER_UNKNOWN',
|
||||
ERR_ENTITY_DATABASE_ADAPTER_CHECK_CONSTRAINT = 'ERR_ENTITY_DATABASE_ADAPTER_CHECK_CONSTRAINT',
|
||||
ERR_ENTITY_DATABASE_ADAPTER_EXCLUSION_CONSTRAINT = 'ERR_ENTITY_DATABASE_ADAPTER_EXCLUSION_CONSTRAINT',
|
||||
ERR_ENTITY_DATABASE_ADAPTER_FOREIGN_KEY_CONSTRAINT = 'ERR_ENTITY_DATABASE_ADAPTER_FOREIGN_KEY_CONSTRAINT',
|
||||
ERR_ENTITY_DATABASE_ADAPTER_NOT_NULL_CONSTRAINT = 'ERR_ENTITY_DATABASE_ADAPTER_NOT_NULL_CONSTRAINT',
|
||||
ERR_ENTITY_DATABASE_ADAPTER_PAGINATION_CURSOR_INVALID = 'ERR_ENTITY_DATABASE_ADAPTER_PAGINATION_CURSOR_INVALID',
|
||||
ERR_ENTITY_DATABASE_ADAPTER_LOCK_NOT_AVAILABLE = 'ERR_ENTITY_DATABASE_ADAPTER_LOCK_NOT_AVAILABLE',
|
||||
}
|
||||
|
||||
/**
|
||||
* Thrown when a transient error occurrs within the database adapter.
|
||||
* Transient errors may succeed if retried.
|
||||
*/
|
||||
export class EntityDatabaseAdapterTransientError extends EntityDatabaseAdapterError {
|
||||
static {
|
||||
this.prototype.name = 'EntityDatabaseAdapterTransientError';
|
||||
}
|
||||
|
||||
get state(): EntityErrorState.TRANSIENT {
|
||||
return EntityErrorState.TRANSIENT;
|
||||
}
|
||||
|
||||
get code(): KnexEntityDatabaseAdapterErrorCode.ERR_ENTITY_DATABASE_ADAPTER_TRANSIENT {
|
||||
return KnexEntityDatabaseAdapterErrorCode.ERR_ENTITY_DATABASE_ADAPTER_TRANSIENT;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Thrown when an unknown error occurrs within the database adapter.
|
||||
* This is a catch-all error class for DBMS-specific errors that do not fit into other categories.
|
||||
*/
|
||||
export class EntityDatabaseAdapterUnknownError extends EntityDatabaseAdapterError {
|
||||
static {
|
||||
this.prototype.name = 'EntityDatabaseAdapterUnknownError';
|
||||
}
|
||||
|
||||
get state(): EntityErrorState.UNKNOWN {
|
||||
return EntityErrorState.UNKNOWN;
|
||||
}
|
||||
|
||||
get code(): KnexEntityDatabaseAdapterErrorCode.ERR_ENTITY_DATABASE_ADAPTER_UNKNOWN {
|
||||
return KnexEntityDatabaseAdapterErrorCode.ERR_ENTITY_DATABASE_ADAPTER_UNKNOWN;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Thrown when a check constraint is violated within the database adapter.
|
||||
* This indicates that a value being inserted or updated does not satisfy a defined data integrity constraint.
|
||||
*/
|
||||
export class EntityDatabaseAdapterCheckConstraintError extends EntityDatabaseAdapterError {
|
||||
static {
|
||||
this.prototype.name = 'EntityDatabaseAdapterCheckConstraintError';
|
||||
}
|
||||
|
||||
get state(): EntityErrorState.PERMANENT {
|
||||
return EntityErrorState.PERMANENT;
|
||||
}
|
||||
|
||||
get code(): KnexEntityDatabaseAdapterErrorCode.ERR_ENTITY_DATABASE_ADAPTER_CHECK_CONSTRAINT {
|
||||
return KnexEntityDatabaseAdapterErrorCode.ERR_ENTITY_DATABASE_ADAPTER_CHECK_CONSTRAINT;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Thrown when an exclusion constraint is violated within the database adapter.
|
||||
* This indicates that a value being inserted or updated conflicts with an existing value based on a defined exclusion constraint.
|
||||
*/
|
||||
export class EntityDatabaseAdapterExclusionConstraintError extends EntityDatabaseAdapterError {
|
||||
static {
|
||||
this.prototype.name = 'EntityDatabaseAdapterExclusionConstraintError';
|
||||
}
|
||||
|
||||
get state(): EntityErrorState.PERMANENT {
|
||||
return EntityErrorState.PERMANENT;
|
||||
}
|
||||
|
||||
get code(): KnexEntityDatabaseAdapterErrorCode.ERR_ENTITY_DATABASE_ADAPTER_EXCLUSION_CONSTRAINT {
|
||||
return KnexEntityDatabaseAdapterErrorCode.ERR_ENTITY_DATABASE_ADAPTER_EXCLUSION_CONSTRAINT;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Thrown when a foreign key constraint is violated within the database adapter.
|
||||
* This indicates that a value being inserted, updated, or deleted references a non-existent value in a related table
|
||||
* or is referenced in a related table.
|
||||
*/
|
||||
export class EntityDatabaseAdapterForeignKeyConstraintError extends EntityDatabaseAdapterError {
|
||||
static {
|
||||
this.prototype.name = 'EntityDatabaseAdapterForeignKeyConstraintError';
|
||||
}
|
||||
|
||||
get state(): EntityErrorState.PERMANENT {
|
||||
return EntityErrorState.PERMANENT;
|
||||
}
|
||||
|
||||
get code(): KnexEntityDatabaseAdapterErrorCode.ERR_ENTITY_DATABASE_ADAPTER_FOREIGN_KEY_CONSTRAINT {
|
||||
return KnexEntityDatabaseAdapterErrorCode.ERR_ENTITY_DATABASE_ADAPTER_FOREIGN_KEY_CONSTRAINT;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Thrown when a not-null constraint is violated within the database adapter.
|
||||
* This indicates that a null value is being inserted or updated into a column that does not allow null values.
|
||||
*/
|
||||
export class EntityDatabaseAdapterNotNullConstraintError extends EntityDatabaseAdapterError {
|
||||
static {
|
||||
this.prototype.name = 'EntityDatabaseAdapterNotNullConstraintError';
|
||||
}
|
||||
|
||||
get state(): EntityErrorState.PERMANENT {
|
||||
return EntityErrorState.PERMANENT;
|
||||
}
|
||||
|
||||
get code(): KnexEntityDatabaseAdapterErrorCode.ERR_ENTITY_DATABASE_ADAPTER_NOT_NULL_CONSTRAINT {
|
||||
return KnexEntityDatabaseAdapterErrorCode.ERR_ENTITY_DATABASE_ADAPTER_NOT_NULL_CONSTRAINT;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Thrown when a pagination cursor cannot be decoded or does not match the expected pagination
|
||||
* specification.
|
||||
*/
|
||||
export class EntityDatabaseAdapterPaginationCursorInvalidError extends EntityDatabaseAdapterError {
|
||||
static {
|
||||
this.prototype.name = 'EntityDatabaseAdapterPaginationCursorInvalidError';
|
||||
}
|
||||
|
||||
get state(): EntityErrorState.PERMANENT {
|
||||
return EntityErrorState.PERMANENT;
|
||||
}
|
||||
|
||||
get code(): KnexEntityDatabaseAdapterErrorCode.ERR_ENTITY_DATABASE_ADAPTER_PAGINATION_CURSOR_INVALID {
|
||||
return KnexEntityDatabaseAdapterErrorCode.ERR_ENTITY_DATABASE_ADAPTER_PAGINATION_CURSOR_INVALID;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Thrown when a lock on a row or table cannot be acquired (PostgreSQL error code 55P03, `lock_not_available`).
|
||||
* This happens when a statement exceeds `lock_timeout` while waiting for a lock, or when a `NOWAIT`
|
||||
* lock request conflicts with a lock held by another transaction.
|
||||
* This error is transient since the conflicting lock is released when the other transaction completes.
|
||||
*/
|
||||
export class EntityDatabaseAdapterLockNotAvailableError extends EntityDatabaseAdapterError {
|
||||
static {
|
||||
this.prototype.name = 'EntityDatabaseAdapterLockNotAvailableError';
|
||||
}
|
||||
|
||||
get state(): EntityErrorState.TRANSIENT {
|
||||
return EntityErrorState.TRANSIENT;
|
||||
}
|
||||
|
||||
get code(): KnexEntityDatabaseAdapterErrorCode.ERR_ENTITY_DATABASE_ADAPTER_LOCK_NOT_AVAILABLE {
|
||||
return KnexEntityDatabaseAdapterErrorCode.ERR_ENTITY_DATABASE_ADAPTER_LOCK_NOT_AVAILABLE;
|
||||
}
|
||||
}
|
||||
+76
@@ -0,0 +1,76 @@
|
||||
import { EntityDatabaseAdapterError, EntityErrorState } from '@expo/entity';
|
||||
import { describe, expect, it } from '@jest/globals';
|
||||
|
||||
import {
|
||||
EntityDatabaseAdapterCheckConstraintError,
|
||||
EntityDatabaseAdapterExclusionConstraintError,
|
||||
EntityDatabaseAdapterForeignKeyConstraintError,
|
||||
EntityDatabaseAdapterLockNotAvailableError,
|
||||
EntityDatabaseAdapterNotNullConstraintError,
|
||||
EntityDatabaseAdapterPaginationCursorInvalidError,
|
||||
EntityDatabaseAdapterTransientError,
|
||||
EntityDatabaseAdapterUnknownError,
|
||||
KnexEntityDatabaseAdapterErrorCode,
|
||||
} from '../KnexEntityDatabaseAdapterError.ts';
|
||||
|
||||
describe('KnexEntityDatabaseAdapterError', () => {
|
||||
it('instantiates all errors with correct state and code', () => {
|
||||
const transientError = new EntityDatabaseAdapterTransientError('test');
|
||||
expect(transientError).toBeInstanceOf(EntityDatabaseAdapterError);
|
||||
expect(transientError.state).toBe(EntityErrorState.TRANSIENT);
|
||||
expect(transientError.code).toBe(
|
||||
KnexEntityDatabaseAdapterErrorCode.ERR_ENTITY_DATABASE_ADAPTER_TRANSIENT,
|
||||
);
|
||||
|
||||
const unknownError = new EntityDatabaseAdapterUnknownError('test');
|
||||
expect(unknownError).toBeInstanceOf(EntityDatabaseAdapterError);
|
||||
expect(unknownError.state).toBe(EntityErrorState.UNKNOWN);
|
||||
expect(unknownError.code).toBe(
|
||||
KnexEntityDatabaseAdapterErrorCode.ERR_ENTITY_DATABASE_ADAPTER_UNKNOWN,
|
||||
);
|
||||
|
||||
const checkError = new EntityDatabaseAdapterCheckConstraintError('test');
|
||||
expect(checkError).toBeInstanceOf(EntityDatabaseAdapterError);
|
||||
expect(checkError.state).toBe(EntityErrorState.PERMANENT);
|
||||
expect(checkError.code).toBe(
|
||||
KnexEntityDatabaseAdapterErrorCode.ERR_ENTITY_DATABASE_ADAPTER_CHECK_CONSTRAINT,
|
||||
);
|
||||
|
||||
const exclusionError = new EntityDatabaseAdapterExclusionConstraintError('test');
|
||||
expect(exclusionError).toBeInstanceOf(EntityDatabaseAdapterError);
|
||||
expect(exclusionError.state).toBe(EntityErrorState.PERMANENT);
|
||||
expect(exclusionError.code).toBe(
|
||||
KnexEntityDatabaseAdapterErrorCode.ERR_ENTITY_DATABASE_ADAPTER_EXCLUSION_CONSTRAINT,
|
||||
);
|
||||
|
||||
const foreignKeyError = new EntityDatabaseAdapterForeignKeyConstraintError('test');
|
||||
expect(foreignKeyError).toBeInstanceOf(EntityDatabaseAdapterError);
|
||||
expect(foreignKeyError.state).toBe(EntityErrorState.PERMANENT);
|
||||
expect(foreignKeyError.code).toBe(
|
||||
KnexEntityDatabaseAdapterErrorCode.ERR_ENTITY_DATABASE_ADAPTER_FOREIGN_KEY_CONSTRAINT,
|
||||
);
|
||||
|
||||
const notNullError = new EntityDatabaseAdapterNotNullConstraintError('test');
|
||||
expect(notNullError).toBeInstanceOf(EntityDatabaseAdapterError);
|
||||
expect(notNullError.state).toBe(EntityErrorState.PERMANENT);
|
||||
expect(notNullError.code).toBe(
|
||||
KnexEntityDatabaseAdapterErrorCode.ERR_ENTITY_DATABASE_ADAPTER_NOT_NULL_CONSTRAINT,
|
||||
);
|
||||
|
||||
const paginationCursorInvalidError = new EntityDatabaseAdapterPaginationCursorInvalidError(
|
||||
'test',
|
||||
);
|
||||
expect(paginationCursorInvalidError).toBeInstanceOf(EntityDatabaseAdapterError);
|
||||
expect(paginationCursorInvalidError.state).toBe(EntityErrorState.PERMANENT);
|
||||
expect(paginationCursorInvalidError.code).toBe(
|
||||
KnexEntityDatabaseAdapterErrorCode.ERR_ENTITY_DATABASE_ADAPTER_PAGINATION_CURSOR_INVALID,
|
||||
);
|
||||
|
||||
const lockNotAvailableError = new EntityDatabaseAdapterLockNotAvailableError('test');
|
||||
expect(lockNotAvailableError).toBeInstanceOf(EntityDatabaseAdapterError);
|
||||
expect(lockNotAvailableError.state).toBe(EntityErrorState.TRANSIENT);
|
||||
expect(lockNotAvailableError.code).toBe(
|
||||
KnexEntityDatabaseAdapterErrorCode.ERR_ENTITY_DATABASE_ADAPTER_LOCK_NOT_AVAILABLE,
|
||||
);
|
||||
});
|
||||
});
|
||||
+19
@@ -1,8 +1,27 @@
|
||||
import { EntityErrorState } from '@expo/entity';
|
||||
import { describe, expect, it } from '@jest/globals';
|
||||
|
||||
import { EntityDatabaseAdapterLockNotAvailableError } from '../KnexEntityDatabaseAdapterError.ts';
|
||||
import { wrapNativePostgresCallAsync } from '../wrapNativePostgresCallAsync.ts';
|
||||
|
||||
describe(wrapNativePostgresCallAsync, () => {
|
||||
it('translates a PostgreSQL lock_not_available error and preserves the cause', async () => {
|
||||
const error = Object.assign(new Error('canceling statement due to lock timeout'), {
|
||||
code: '55P03',
|
||||
});
|
||||
const result = wrapNativePostgresCallAsync(async () => {
|
||||
throw error;
|
||||
});
|
||||
|
||||
await expect(result).rejects.toBeInstanceOf(EntityDatabaseAdapterLockNotAvailableError);
|
||||
await expect(result).rejects.toMatchObject({
|
||||
state: EntityErrorState.TRANSIENT,
|
||||
message: error.message,
|
||||
stack: error.stack,
|
||||
cause: error,
|
||||
});
|
||||
});
|
||||
|
||||
it('rethrows literals', async () => {
|
||||
const throwingFn = async (): Promise<void> => {
|
||||
// eslint-disable-next-line no-throw-literal,@typescript-eslint/only-throw-error
|
||||
|
||||
@@ -1,14 +1,16 @@
|
||||
import type { EntityDatabaseAdapterError } from '@expo/entity';
|
||||
import { EntityDatabaseAdapterUniqueConstraintError } from '@expo/entity';
|
||||
import knex from 'knex';
|
||||
|
||||
import {
|
||||
EntityDatabaseAdapterCheckConstraintError,
|
||||
EntityDatabaseAdapterExclusionConstraintError,
|
||||
EntityDatabaseAdapterForeignKeyConstraintError,
|
||||
EntityDatabaseAdapterLockNotAvailableError,
|
||||
EntityDatabaseAdapterNotNullConstraintError,
|
||||
EntityDatabaseAdapterTransientError,
|
||||
EntityDatabaseAdapterUniqueConstraintError,
|
||||
EntityDatabaseAdapterUnknownError,
|
||||
} from '@expo/entity';
|
||||
import knex from 'knex';
|
||||
} from './KnexEntityDatabaseAdapterError.ts';
|
||||
|
||||
function wrapNativePostgresError(
|
||||
error: Error & { code?: string },
|
||||
@@ -38,6 +40,8 @@ function translatePostgresError(
|
||||
return new EntityDatabaseAdapterCheckConstraintError(error.message, error);
|
||||
case '23P01':
|
||||
return new EntityDatabaseAdapterExclusionConstraintError(error.message, error);
|
||||
case '55P03':
|
||||
return new EntityDatabaseAdapterLockNotAvailableError(error.message, error);
|
||||
default:
|
||||
return new EntityDatabaseAdapterUnknownError(error.message, error);
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ export * from './PostgresEntityDatabaseAdapterProvider.ts';
|
||||
export * from './PostgresEntityQueryContextProvider.ts';
|
||||
export * from './ReadonlyPostgresEntity.ts';
|
||||
export * from './SQLOperator.ts';
|
||||
export * from './errors/KnexEntityDatabaseAdapterError.ts';
|
||||
export * from './errors/wrapNativePostgresCallAsync.ts';
|
||||
export * from './internal/EntityKnexDataManager.ts';
|
||||
export * from './internal/getKnexDataManager.ts';
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
import type { EntityConfiguration, EntityQueryContext, IEntityMetricsAdapter } from '@expo/entity';
|
||||
import {
|
||||
EntityDatabaseAdapterPaginationCursorInvalidError,
|
||||
EntityMetricsCountType,
|
||||
EntityMetricsLoadType,
|
||||
getDatabaseFieldForEntityField,
|
||||
@@ -18,6 +17,7 @@ import type {
|
||||
import { NullsOrdering, OrderByOrdering } from '../BasePostgresEntityDatabaseAdapter.ts';
|
||||
import { PaginationStrategy } from '../PaginationStrategy.ts';
|
||||
import { SQLFragment, SQLExpression, identifier, sql, unsafeRaw } from '../SQLOperator.ts';
|
||||
import { EntityDatabaseAdapterPaginationCursorInvalidError } from '../errors/KnexEntityDatabaseAdapterError.ts';
|
||||
import type { DistributiveOmit, NonNullableKeys } from './utilityTypes.ts';
|
||||
|
||||
interface DataManagerStandardSpecification<TFields extends Record<string, any>> {
|
||||
|
||||
@@ -3,6 +3,14 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
# [0.71.0](https://github.com/expo/entity/compare/v0.70.0...v0.71.0) (2026-10-09)
|
||||
|
||||
**Note:** Version bump only for package @expo/entity-example
|
||||
|
||||
# [0.70.0](https://github.com/expo/entity/compare/v0.69.0...v0.70.0) (2026-10-05)
|
||||
|
||||
**Note:** Version bump only for package @expo/entity-example
|
||||
|
||||
# [0.69.0](https://github.com/expo/entity/compare/v0.68.0...v0.69.0) (2026-09-29)
|
||||
|
||||
**Note:** Version bump only for package @expo/entity-example
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@expo/entity-example",
|
||||
"version": "0.69.0",
|
||||
"version": "0.71.0",
|
||||
"private": true,
|
||||
"description": "An example integration of the @expo/entity framework",
|
||||
"keywords": [
|
||||
@@ -30,7 +30,7 @@
|
||||
"koa": "3.2.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@jest/globals": "30.5.1",
|
||||
"@jest/globals": "30.5.2",
|
||||
"@types/koa": "3.0.3",
|
||||
"@types/koa__cors": "5.0.1",
|
||||
"@types/koa__router": "12.0.5",
|
||||
|
||||
@@ -3,6 +3,14 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
# [0.71.0](https://github.com/expo/entity/compare/v0.70.0...v0.71.0) (2026-10-09)
|
||||
|
||||
**Note:** Version bump only for package @expo/entity-full-integration-tests
|
||||
|
||||
# [0.70.0](https://github.com/expo/entity/compare/v0.69.0...v0.70.0) (2026-10-05)
|
||||
|
||||
**Note:** Version bump only for package @expo/entity-full-integration-tests
|
||||
|
||||
# [0.69.0](https://github.com/expo/entity/compare/v0.68.0...v0.69.0) (2026-09-29)
|
||||
|
||||
**Note:** Version bump only for package @expo/entity-full-integration-tests
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@expo/entity-full-integration-tests",
|
||||
"version": "0.69.0",
|
||||
"version": "0.71.0",
|
||||
"private": true,
|
||||
"description": "Full redis and knex integration tests for the entity framework",
|
||||
"keywords": [
|
||||
@@ -22,7 +22,7 @@
|
||||
"@expo/entity-database-adapter-knex": "workspace:^"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@jest/globals": "30.5.1",
|
||||
"@jest/globals": "30.5.2",
|
||||
"typescript": "6.0.3"
|
||||
},
|
||||
"engines": {
|
||||
|
||||
@@ -3,6 +3,14 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
# [0.71.0](https://github.com/expo/entity/compare/v0.70.0...v0.71.0) (2026-10-09)
|
||||
|
||||
**Note:** Version bump only for package @expo/entity-ip-address-field
|
||||
|
||||
# [0.70.0](https://github.com/expo/entity/compare/v0.69.0...v0.70.0) (2026-10-05)
|
||||
|
||||
**Note:** Version bump only for package @expo/entity-ip-address-field
|
||||
|
||||
# [0.69.0](https://github.com/expo/entity/compare/v0.68.0...v0.69.0) (2026-09-29)
|
||||
|
||||
**Note:** Version bump only for package @expo/entity-ip-address-field
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@expo/entity-ip-address-field",
|
||||
"version": "0.69.0",
|
||||
"version": "0.71.0",
|
||||
"description": "IP address EntityField definitions for @expo/entity",
|
||||
"keywords": [
|
||||
"entity"
|
||||
@@ -30,7 +30,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@expo/entity-testing-utils": "workspace:^",
|
||||
"@jest/globals": "30.5.1",
|
||||
"@jest/globals": "30.5.2",
|
||||
"typescript": "6.0.3"
|
||||
},
|
||||
"engines": {
|
||||
|
||||
@@ -3,6 +3,14 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
# [0.71.0](https://github.com/expo/entity/compare/v0.70.0...v0.71.0) (2026-10-09)
|
||||
|
||||
**Note:** Version bump only for package @expo/entity-secondary-cache-local-memory
|
||||
|
||||
# [0.70.0](https://github.com/expo/entity/compare/v0.69.0...v0.70.0) (2026-10-05)
|
||||
|
||||
**Note:** Version bump only for package @expo/entity-secondary-cache-local-memory
|
||||
|
||||
# [0.69.0](https://github.com/expo/entity/compare/v0.68.0...v0.69.0) (2026-09-29)
|
||||
|
||||
**Note:** Version bump only for package @expo/entity-secondary-cache-local-memory
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@expo/entity-secondary-cache-local-memory",
|
||||
"version": "0.69.0",
|
||||
"version": "0.71.0",
|
||||
"description": "Local memory secondary cache for @expo/entity",
|
||||
"keywords": [
|
||||
"entity"
|
||||
@@ -32,7 +32,7 @@
|
||||
"devDependencies": {
|
||||
"@expo/nullthrows": "2.1.0",
|
||||
"@isaacs/ttlcache": "2.1.5",
|
||||
"@jest/globals": "30.5.1",
|
||||
"@jest/globals": "30.5.2",
|
||||
"typescript": "6.0.3"
|
||||
},
|
||||
"engines": {
|
||||
|
||||
@@ -3,6 +3,14 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
# [0.71.0](https://github.com/expo/entity/compare/v0.70.0...v0.71.0) (2026-10-09)
|
||||
|
||||
**Note:** Version bump only for package @expo/entity-secondary-cache-redis
|
||||
|
||||
# [0.70.0](https://github.com/expo/entity/compare/v0.69.0...v0.70.0) (2026-10-05)
|
||||
|
||||
**Note:** Version bump only for package @expo/entity-secondary-cache-redis
|
||||
|
||||
# [0.69.0](https://github.com/expo/entity/compare/v0.68.0...v0.69.0) (2026-09-29)
|
||||
|
||||
**Note:** Version bump only for package @expo/entity-secondary-cache-redis
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@expo/entity-secondary-cache-redis",
|
||||
"version": "0.69.0",
|
||||
"version": "0.71.0",
|
||||
"description": "Redis secondary cache for @expo/entity",
|
||||
"keywords": [
|
||||
"entity"
|
||||
@@ -30,7 +30,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@expo/nullthrows": "2.1.0",
|
||||
"@jest/globals": "30.5.1",
|
||||
"@jest/globals": "30.5.2",
|
||||
"ioredis": "5.11.1",
|
||||
"typescript": "6.0.3"
|
||||
},
|
||||
|
||||
@@ -3,6 +3,16 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
# [0.71.0](https://github.com/expo/entity/compare/v0.70.0...v0.71.0) (2026-10-09)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- declare runtime dependencies imported by published packages ([#717](https://github.com/expo/entity/issues/717)) ([3c96f3b](https://github.com/expo/entity/commit/3c96f3b9ea2b097c979447354f0abe35ed5e8d57))
|
||||
|
||||
# [0.70.0](https://github.com/expo/entity/compare/v0.69.0...v0.70.0) (2026-10-05)
|
||||
|
||||
**Note:** Version bump only for package @expo/entity-testing-utils
|
||||
|
||||
# [0.69.0](https://github.com/expo/entity/compare/v0.68.0...v0.69.0) (2026-09-29)
|
||||
|
||||
**Note:** Version bump only for package @expo/entity-testing-utils
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@expo/entity-testing-utils",
|
||||
"version": "0.69.0",
|
||||
"version": "0.71.0",
|
||||
"description": "A package containing utilities for testing applications that use Entity",
|
||||
"keywords": [
|
||||
"entity"
|
||||
@@ -26,11 +26,13 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@expo/entity": "workspace:^",
|
||||
"invariant": "^2.2.4",
|
||||
"lodash-es": "^4.17.23",
|
||||
"ts-mockito": "^2.6.1"
|
||||
"ts-mockito": "^2.6.1",
|
||||
"uuid": "^14.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@jest/globals": "30.5.1",
|
||||
"@jest/globals": "30.5.2",
|
||||
"@types/lodash-es": "4.17.12",
|
||||
"@types/node": "24.19.1",
|
||||
"typescript": "6.0.3"
|
||||
|
||||
@@ -3,6 +3,16 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
# [0.71.0](https://github.com/expo/entity/compare/v0.70.0...v0.71.0) (2026-10-09)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- declare runtime dependencies imported by published packages ([#717](https://github.com/expo/entity/issues/717)) ([3c96f3b](https://github.com/expo/entity/commit/3c96f3b9ea2b097c979447354f0abe35ed5e8d57))
|
||||
|
||||
# [0.70.0](https://github.com/expo/entity/compare/v0.69.0...v0.70.0) (2026-10-05)
|
||||
|
||||
**Note:** Version bump only for package @expo/entity
|
||||
|
||||
# [0.69.0](https://github.com/expo/entity/compare/v0.68.0...v0.69.0) (2026-09-29)
|
||||
|
||||
**Note:** Version bump only for package @expo/entity
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@expo/entity",
|
||||
"version": "0.69.0",
|
||||
"version": "0.71.0",
|
||||
"description": "A privacy-first data model",
|
||||
"keywords": [
|
||||
"entity"
|
||||
@@ -25,12 +25,13 @@
|
||||
"test": "yarn test:all --rootDir $(pwd)"
|
||||
},
|
||||
"dependencies": {
|
||||
"@expo/nullthrows": "^2.1.0",
|
||||
"@expo/results": "^1.0.0",
|
||||
"dataloader": "^2.2.3",
|
||||
"invariant": "^2.2.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@jest/globals": "30.5.1",
|
||||
"@jest/globals": "30.5.2",
|
||||
"@types/invariant": "2.2.37",
|
||||
"@types/lodash-es": "4.17.12",
|
||||
"@types/node": "24.19.1",
|
||||
|
||||
@@ -9,115 +9,6 @@ export abstract class EntityDatabaseAdapterError extends EntityError {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Thrown when a transient error occurrs within the database adapter.
|
||||
* Transient errors may succeed if retried.
|
||||
*/
|
||||
export class EntityDatabaseAdapterTransientError extends EntityDatabaseAdapterError {
|
||||
static {
|
||||
this.prototype.name = 'EntityDatabaseAdapterTransientError';
|
||||
}
|
||||
|
||||
get state(): EntityErrorState.TRANSIENT {
|
||||
return EntityErrorState.TRANSIENT;
|
||||
}
|
||||
|
||||
get code(): EntityErrorCode.ERR_ENTITY_DATABASE_ADAPTER_TRANSIENT {
|
||||
return EntityErrorCode.ERR_ENTITY_DATABASE_ADAPTER_TRANSIENT;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Thrown when an unknown error occurrs within the database adapter.
|
||||
* This is a catch-all error class for DBMS-specific errors that do not fit into other categories.
|
||||
*/
|
||||
export class EntityDatabaseAdapterUnknownError extends EntityDatabaseAdapterError {
|
||||
static {
|
||||
this.prototype.name = 'EntityDatabaseAdapterUnknownError';
|
||||
}
|
||||
|
||||
get state(): EntityErrorState.UNKNOWN {
|
||||
return EntityErrorState.UNKNOWN;
|
||||
}
|
||||
|
||||
get code(): EntityErrorCode.ERR_ENTITY_DATABASE_ADAPTER_UNKNOWN {
|
||||
return EntityErrorCode.ERR_ENTITY_DATABASE_ADAPTER_UNKNOWN;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Thrown when a check constraint is violated within the database adapter.
|
||||
* This indicates that a value being inserted or updated does not satisfy a defined data integrity constraint.
|
||||
*/
|
||||
export class EntityDatabaseAdapterCheckConstraintError extends EntityDatabaseAdapterError {
|
||||
static {
|
||||
this.prototype.name = 'EntityDatabaseAdapterCheckConstraintError';
|
||||
}
|
||||
|
||||
get state(): EntityErrorState.PERMANENT {
|
||||
return EntityErrorState.PERMANENT;
|
||||
}
|
||||
|
||||
get code(): EntityErrorCode.ERR_ENTITY_DATABASE_ADAPTER_CHECK_CONSTRAINT {
|
||||
return EntityErrorCode.ERR_ENTITY_DATABASE_ADAPTER_CHECK_CONSTRAINT;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Thrown when an exclusion constraint is violated within the database adapter.
|
||||
* This indicates that a value being inserted or updated conflicts with an existing value based on a defined exclusion constraint.
|
||||
*/
|
||||
export class EntityDatabaseAdapterExclusionConstraintError extends EntityDatabaseAdapterError {
|
||||
static {
|
||||
this.prototype.name = 'EntityDatabaseAdapterExclusionConstraintError';
|
||||
}
|
||||
|
||||
get state(): EntityErrorState.PERMANENT {
|
||||
return EntityErrorState.PERMANENT;
|
||||
}
|
||||
|
||||
get code(): EntityErrorCode.ERR_ENTITY_DATABASE_ADAPTER_EXCLUSION_CONSTRAINT {
|
||||
return EntityErrorCode.ERR_ENTITY_DATABASE_ADAPTER_EXCLUSION_CONSTRAINT;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Thrown when a foreign key constraint is violated within the database adapter.
|
||||
* This indicates that a value being inserted, updated, or deleted references a non-existent value in a related table
|
||||
* or is referenced in a related table.
|
||||
*/
|
||||
export class EntityDatabaseAdapterForeignKeyConstraintError extends EntityDatabaseAdapterError {
|
||||
static {
|
||||
this.prototype.name = 'EntityDatabaseAdapterForeignKeyConstraintError';
|
||||
}
|
||||
|
||||
get state(): EntityErrorState.PERMANENT {
|
||||
return EntityErrorState.PERMANENT;
|
||||
}
|
||||
|
||||
get code(): EntityErrorCode.ERR_ENTITY_DATABASE_ADAPTER_FOREIGN_KEY_CONSTRAINT {
|
||||
return EntityErrorCode.ERR_ENTITY_DATABASE_ADAPTER_FOREIGN_KEY_CONSTRAINT;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Thrown when a not-null constraint is violated within the database adapter.
|
||||
* This indicates that a null value is being inserted or updated into a column that does not allow null values.
|
||||
*/
|
||||
export class EntityDatabaseAdapterNotNullConstraintError extends EntityDatabaseAdapterError {
|
||||
static {
|
||||
this.prototype.name = 'EntityDatabaseAdapterNotNullConstraintError';
|
||||
}
|
||||
|
||||
get state(): EntityErrorState.PERMANENT {
|
||||
return EntityErrorState.PERMANENT;
|
||||
}
|
||||
|
||||
get code(): EntityErrorCode.ERR_ENTITY_DATABASE_ADAPTER_NOT_NULL_CONSTRAINT {
|
||||
return EntityErrorCode.ERR_ENTITY_DATABASE_ADAPTER_NOT_NULL_CONSTRAINT;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Thrown when a unique constraint is violated within the database adapter.
|
||||
* This indicates that a value being inserted or updated duplicates an existing value in a column or set of columns
|
||||
@@ -231,17 +122,3 @@ export class EntityDatabaseAdapterExcessiveDeleteResultError extends EntityDatab
|
||||
return EntityErrorCode.ERR_ENTITY_DATABASE_ADAPTER_EXCESSIVE_DELETE_RESULT;
|
||||
}
|
||||
}
|
||||
|
||||
export class EntityDatabaseAdapterPaginationCursorInvalidError extends EntityDatabaseAdapterError {
|
||||
static {
|
||||
this.prototype.name = 'EntityDatabaseAdapterPaginationCursorError';
|
||||
}
|
||||
|
||||
get state(): EntityErrorState.PERMANENT {
|
||||
return EntityErrorState.PERMANENT;
|
||||
}
|
||||
|
||||
get code(): EntityErrorCode.ERR_ENTITY_DATABASE_ADAPTER_PAGINATION_CURSOR_INVALID {
|
||||
return EntityErrorCode.ERR_ENTITY_DATABASE_ADAPTER_PAGINATION_CURSOR_INVALID;
|
||||
}
|
||||
}
|
||||
@@ -8,18 +8,13 @@ export enum EntityErrorState {
|
||||
}
|
||||
|
||||
/**
|
||||
* Error code for an entity error. Each error code should map to a specific class of Entity error.
|
||||
* Error code for an entity error defined in this package. Each error code should map to a specific class of Entity error.
|
||||
* Other packages that define entity errors (such as database adapter implementations) define their own error code enums.
|
||||
*/
|
||||
export enum EntityErrorCode {
|
||||
ERR_ENTITY_NOT_AUTHORIZED = 'ERR_ENTITY_NOT_AUTHORIZED',
|
||||
ERR_ENTITY_NOT_FOUND = 'ERR_ENTITY_NOT_FOUND',
|
||||
ERR_ENTITY_INVALID_FIELD_VALUE = 'ERR_ENTITY_INVALID_FIELD_VALUE',
|
||||
ERR_ENTITY_DATABASE_ADAPTER_TRANSIENT = 'ERR_ENTITY_DATABASE_ADAPTER_TRANSIENT',
|
||||
ERR_ENTITY_DATABASE_ADAPTER_UNKNOWN = 'ERR_ENTITY_DATABASE_ADAPTER_UNKNOWN',
|
||||
ERR_ENTITY_DATABASE_ADAPTER_CHECK_CONSTRAINT = 'ERR_ENTITY_DATABASE_ADAPTER_CHECK_CONSTRAINT',
|
||||
ERR_ENTITY_DATABASE_ADAPTER_EXCLUSION_CONSTRAINT = 'ERR_ENTITY_DATABASE_ADAPTER_EXCLUSION_CONSTRAINT',
|
||||
ERR_ENTITY_DATABASE_ADAPTER_FOREIGN_KEY_CONSTRAINT = 'ERR_ENTITY_DATABASE_ADAPTER_FOREIGN_KEY_CONSTRAINT',
|
||||
ERR_ENTITY_DATABASE_ADAPTER_NOT_NULL_CONSTRAINT = 'ERR_ENTITY_DATABASE_ADAPTER_NOT_NULL_CONSTRAINT',
|
||||
ERR_ENTITY_DATABASE_ADAPTER_UNIQUE_CONSTRAINT = 'ERR_ENTITY_DATABASE_ADAPTER_UNIQUE_CONSTRAINT',
|
||||
ERR_ENTITY_DATABASE_ADAPTER_EXCESSIVE_INSERT_RESULT = 'ERR_ENTITY_DATABASE_ADAPTER_EXCESSIVE_INSERT_RESULT',
|
||||
ERR_ENTITY_DATABASE_ADAPTER_EMPTY_INSERT_RESULT = 'ERR_ENTITY_DATABASE_ADAPTER_EMPTY_INSERT_RESULT',
|
||||
@@ -27,7 +22,6 @@ export enum EntityErrorCode {
|
||||
ERR_ENTITY_DATABASE_ADAPTER_EMPTY_UPDATE_RESULT = 'ERR_ENTITY_DATABASE_ADAPTER_EMPTY_UPDATE_RESULT',
|
||||
ERR_ENTITY_DATABASE_ADAPTER_EXCESSIVE_DELETE_RESULT = 'ERR_ENTITY_DATABASE_ADAPTER_EXCESSIVE_DELETE_RESULT',
|
||||
ERR_ENTITY_CACHE_ADAPTER_TRANSIENT = 'ERR_ENTITY_CACHE_ADAPTER_TRANSIENT',
|
||||
ERR_ENTITY_DATABASE_ADAPTER_PAGINATION_CURSOR_INVALID = 'ERR_ENTITY_DATABASE_ADAPTER_PAGINATION_CURSOR_INVALID',
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -39,7 +33,7 @@ export abstract class EntityError extends Error {
|
||||
}
|
||||
|
||||
public abstract readonly state: EntityErrorState;
|
||||
public abstract readonly code: EntityErrorCode;
|
||||
public abstract readonly code: string;
|
||||
|
||||
constructor(message: string, cause?: Error) {
|
||||
super(message, { cause });
|
||||
|
||||
@@ -1,20 +1,13 @@
|
||||
import { describe, expect, it } from '@jest/globals';
|
||||
|
||||
import {
|
||||
EntityDatabaseAdapterCheckConstraintError,
|
||||
EntityDatabaseAdapterEmptyInsertResultError,
|
||||
EntityDatabaseAdapterEmptyUpdateResultError,
|
||||
EntityDatabaseAdapterError,
|
||||
EntityDatabaseAdapterExcessiveDeleteResultError,
|
||||
EntityDatabaseAdapterExcessiveInsertResultError,
|
||||
EntityDatabaseAdapterExcessiveUpdateResultError,
|
||||
EntityDatabaseAdapterExclusionConstraintError,
|
||||
EntityDatabaseAdapterForeignKeyConstraintError,
|
||||
EntityDatabaseAdapterNotNullConstraintError,
|
||||
EntityDatabaseAdapterPaginationCursorInvalidError,
|
||||
EntityDatabaseAdapterTransientError,
|
||||
EntityDatabaseAdapterUniqueConstraintError,
|
||||
EntityDatabaseAdapterUnknownError,
|
||||
} from '../EntityDatabaseAdapterError.ts';
|
||||
import { EntityErrorCode, EntityErrorState } from '../EntityError.ts';
|
||||
|
||||
@@ -22,34 +15,6 @@ describe(EntityDatabaseAdapterError, () => {
|
||||
// necessary for coverage within the entity package since these errors are
|
||||
// currently only ever instantiated by database adapter implementations
|
||||
it('instantiates all errors with correct state and code', () => {
|
||||
const transientError = new EntityDatabaseAdapterTransientError('test');
|
||||
expect(transientError.state).toBe(EntityErrorState.TRANSIENT);
|
||||
expect(transientError.code).toBe(EntityErrorCode.ERR_ENTITY_DATABASE_ADAPTER_TRANSIENT);
|
||||
|
||||
const unknownError = new EntityDatabaseAdapterUnknownError('test');
|
||||
expect(unknownError.state).toBe(EntityErrorState.UNKNOWN);
|
||||
expect(unknownError.code).toBe(EntityErrorCode.ERR_ENTITY_DATABASE_ADAPTER_UNKNOWN);
|
||||
|
||||
const checkError = new EntityDatabaseAdapterCheckConstraintError('test');
|
||||
expect(checkError.state).toBe(EntityErrorState.PERMANENT);
|
||||
expect(checkError.code).toBe(EntityErrorCode.ERR_ENTITY_DATABASE_ADAPTER_CHECK_CONSTRAINT);
|
||||
|
||||
const exclusionError = new EntityDatabaseAdapterExclusionConstraintError('test');
|
||||
expect(exclusionError.state).toBe(EntityErrorState.PERMANENT);
|
||||
expect(exclusionError.code).toBe(
|
||||
EntityErrorCode.ERR_ENTITY_DATABASE_ADAPTER_EXCLUSION_CONSTRAINT,
|
||||
);
|
||||
|
||||
const foreignKeyError = new EntityDatabaseAdapterForeignKeyConstraintError('test');
|
||||
expect(foreignKeyError.state).toBe(EntityErrorState.PERMANENT);
|
||||
expect(foreignKeyError.code).toBe(
|
||||
EntityErrorCode.ERR_ENTITY_DATABASE_ADAPTER_FOREIGN_KEY_CONSTRAINT,
|
||||
);
|
||||
|
||||
const notNullError = new EntityDatabaseAdapterNotNullConstraintError('test');
|
||||
expect(notNullError.state).toBe(EntityErrorState.PERMANENT);
|
||||
expect(notNullError.code).toBe(EntityErrorCode.ERR_ENTITY_DATABASE_ADAPTER_NOT_NULL_CONSTRAINT);
|
||||
|
||||
const uniqueError = new EntityDatabaseAdapterUniqueConstraintError('test');
|
||||
expect(uniqueError.state).toBe(EntityErrorState.PERMANENT);
|
||||
expect(uniqueError.code).toBe(EntityErrorCode.ERR_ENTITY_DATABASE_ADAPTER_UNIQUE_CONSTRAINT);
|
||||
@@ -83,13 +48,5 @@ describe(EntityDatabaseAdapterError, () => {
|
||||
expect(excessiveDeleteError.code).toBe(
|
||||
EntityErrorCode.ERR_ENTITY_DATABASE_ADAPTER_EXCESSIVE_DELETE_RESULT,
|
||||
);
|
||||
|
||||
const paginationCursorInvalidError = new EntityDatabaseAdapterPaginationCursorInvalidError(
|
||||
'test',
|
||||
);
|
||||
expect(paginationCursorInvalidError.state).toBe(EntityErrorState.PERMANENT);
|
||||
expect(paginationCursorInvalidError.code).toBe(
|
||||
EntityErrorCode.ERR_ENTITY_DATABASE_ADAPTER_PAGINATION_CURSOR_INVALID,
|
||||
);
|
||||
});
|
||||
});
|
||||
@@ -863,7 +863,7 @@ __metadata:
|
||||
"@expo/entity": "workspace:^"
|
||||
"@expo/entity-testing-utils": "workspace:^"
|
||||
"@isaacs/ttlcache": "npm:2.1.5"
|
||||
"@jest/globals": "npm:30.5.1"
|
||||
"@jest/globals": "npm:30.5.2"
|
||||
typescript: "npm:6.0.3"
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
@@ -875,7 +875,7 @@ __metadata:
|
||||
"@expo/batcher": "npm:1.1.2"
|
||||
"@expo/entity": "workspace:^"
|
||||
"@expo/entity-testing-utils": "workspace:^"
|
||||
"@jest/globals": "npm:30.5.1"
|
||||
"@jest/globals": "npm:30.5.2"
|
||||
ioredis: "npm:5.11.1"
|
||||
ts-mockito: "npm:2.6.1"
|
||||
typescript: "npm:6.0.3"
|
||||
@@ -888,7 +888,7 @@ __metadata:
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@expo/entity-codemod@workspace:packages/entity-codemod"
|
||||
dependencies:
|
||||
"@jest/globals": "npm:30.5.1"
|
||||
"@jest/globals": "npm:30.5.2"
|
||||
"@types/jscodeshift": "npm:17.3.0"
|
||||
"@types/node": "npm:24.19.1"
|
||||
jscodeshift: "npm:17.4.0"
|
||||
@@ -902,7 +902,8 @@ __metadata:
|
||||
dependencies:
|
||||
"@expo/entity": "workspace:^"
|
||||
"@expo/entity-database-adapter-knex": "workspace:^"
|
||||
"@jest/globals": "npm:30.5.1"
|
||||
"@expo/entity-testing-utils": "workspace:^"
|
||||
"@jest/globals": "npm:30.5.2"
|
||||
"@types/invariant": "npm:2.2.37"
|
||||
"@types/node": "npm:24.19.1"
|
||||
invariant: "npm:^2.2.4"
|
||||
@@ -919,7 +920,8 @@ __metadata:
|
||||
dependencies:
|
||||
"@expo/entity": "workspace:^"
|
||||
"@expo/entity-testing-utils": "workspace:^"
|
||||
"@jest/globals": "npm:30.5.1"
|
||||
"@expo/results": "npm:^1.0.0"
|
||||
"@jest/globals": "npm:30.5.2"
|
||||
knex: "npm:^3.2.9"
|
||||
pg: "npm:8.23.1"
|
||||
ts-mockito: "npm:2.6.1"
|
||||
@@ -935,7 +937,7 @@ __metadata:
|
||||
"@as-integrations/koa": "npm:1.1.1"
|
||||
"@expo/entity": "workspace:^"
|
||||
"@expo/entity-testing-utils": "workspace:^"
|
||||
"@jest/globals": "npm:30.5.1"
|
||||
"@jest/globals": "npm:30.5.2"
|
||||
"@koa/bodyparser": "npm:6.1.0"
|
||||
"@koa/cors": "npm:5.0.0"
|
||||
"@koa/router": "npm:15.4.0"
|
||||
@@ -957,7 +959,7 @@ __metadata:
|
||||
"@expo/entity": "workspace:^"
|
||||
"@expo/entity-cache-adapter-redis": "workspace:^"
|
||||
"@expo/entity-database-adapter-knex": "workspace:^"
|
||||
"@jest/globals": "npm:30.5.1"
|
||||
"@jest/globals": "npm:30.5.2"
|
||||
typescript: "npm:6.0.3"
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
@@ -968,7 +970,7 @@ __metadata:
|
||||
dependencies:
|
||||
"@expo/entity": "workspace:^"
|
||||
"@expo/entity-testing-utils": "workspace:^"
|
||||
"@jest/globals": "npm:30.5.1"
|
||||
"@jest/globals": "npm:30.5.2"
|
||||
ip-address: "npm:^10.1.0"
|
||||
typescript: "npm:6.0.3"
|
||||
languageName: unknown
|
||||
@@ -982,7 +984,7 @@ __metadata:
|
||||
"@expo/entity-cache-adapter-local-memory": "workspace:^"
|
||||
"@expo/nullthrows": "npm:2.1.0"
|
||||
"@isaacs/ttlcache": "npm:2.1.5"
|
||||
"@jest/globals": "npm:30.5.1"
|
||||
"@jest/globals": "npm:30.5.2"
|
||||
typescript: "npm:6.0.3"
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
@@ -994,7 +996,7 @@ __metadata:
|
||||
"@expo/entity": "workspace:^"
|
||||
"@expo/entity-cache-adapter-redis": "workspace:^"
|
||||
"@expo/nullthrows": "npm:2.1.0"
|
||||
"@jest/globals": "npm:30.5.1"
|
||||
"@jest/globals": "npm:30.5.2"
|
||||
ioredis: "npm:5.11.1"
|
||||
typescript: "npm:6.0.3"
|
||||
languageName: unknown
|
||||
@@ -1005,12 +1007,14 @@ __metadata:
|
||||
resolution: "@expo/entity-testing-utils@workspace:packages/entity-testing-utils"
|
||||
dependencies:
|
||||
"@expo/entity": "workspace:^"
|
||||
"@jest/globals": "npm:30.5.1"
|
||||
"@jest/globals": "npm:30.5.2"
|
||||
"@types/lodash-es": "npm:4.17.12"
|
||||
"@types/node": "npm:24.19.1"
|
||||
invariant: "npm:^2.2.4"
|
||||
lodash-es: "npm:^4.17.23"
|
||||
ts-mockito: "npm:^2.6.1"
|
||||
typescript: "npm:6.0.3"
|
||||
uuid: "npm:^14.0.0"
|
||||
peerDependencies:
|
||||
"@jest/globals": "*"
|
||||
languageName: unknown
|
||||
@@ -1020,8 +1024,9 @@ __metadata:
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@expo/entity@workspace:packages/entity"
|
||||
dependencies:
|
||||
"@expo/nullthrows": "npm:^2.1.0"
|
||||
"@expo/results": "npm:^1.0.0"
|
||||
"@jest/globals": "npm:30.5.1"
|
||||
"@jest/globals": "npm:30.5.2"
|
||||
"@types/invariant": "npm:2.2.37"
|
||||
"@types/lodash-es": "npm:4.17.12"
|
||||
"@types/node": "npm:24.19.1"
|
||||
@@ -1034,7 +1039,7 @@ __metadata:
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"@expo/nullthrows@npm:2.1.0":
|
||||
"@expo/nullthrows@npm:2.1.0, @expo/nullthrows@npm:^2.1.0":
|
||||
version: 2.1.0
|
||||
resolution: "@expo/nullthrows@npm:2.1.0"
|
||||
checksum: 10c0/9f0b7f8ebcf5932ecc9bd2c55a4892ad35e009d21448881455b3f491bb96751586041fb852577c6c43b89c5df74a14b0693e9f2156093ffa1073be5d0670054f
|
||||
@@ -1448,9 +1453,9 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@jest/console@npm:30.5.1":
|
||||
version: 30.5.1
|
||||
resolution: "@jest/console@npm:30.5.1"
|
||||
"@jest/console@npm:30.5.2":
|
||||
version: 30.5.2
|
||||
resolution: "@jest/console@npm:30.5.2"
|
||||
dependencies:
|
||||
"@jest/types": "npm:30.5.1"
|
||||
"@types/node": "npm:*"
|
||||
@@ -1458,19 +1463,19 @@ __metadata:
|
||||
jest-message-util: "npm:30.5.1"
|
||||
jest-util: "npm:30.5.1"
|
||||
slash: "npm:^3.0.0"
|
||||
checksum: 10c0/c4d674fd36bbbbe5605445782a298233eee356c71ef7cb11d097ce961b940a3d78278f8291f56f9c5102453abbbe36c1eb7d5b7279cd1facc16465c8beeeadcf
|
||||
checksum: 10c0/1e7b14f09eec6af78dbe9d4acea6613c184409aa16ddc9ee86ced5b5ec7969f52da588e6bb300dc6333e82dc172aeb54a9f5cc8f7d50651586723288ac9c5ba4
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@jest/core@npm:30.5.1":
|
||||
version: 30.5.1
|
||||
resolution: "@jest/core@npm:30.5.1"
|
||||
"@jest/core@npm:30.5.2":
|
||||
version: 30.5.2
|
||||
resolution: "@jest/core@npm:30.5.2"
|
||||
dependencies:
|
||||
"@jest/console": "npm:30.5.1"
|
||||
"@jest/console": "npm:30.5.2"
|
||||
"@jest/pattern": "npm:30.5.0"
|
||||
"@jest/reporters": "npm:30.5.1"
|
||||
"@jest/test-result": "npm:30.5.1"
|
||||
"@jest/transform": "npm:30.5.1"
|
||||
"@jest/reporters": "npm:30.5.2"
|
||||
"@jest/test-result": "npm:30.5.2"
|
||||
"@jest/transform": "npm:30.5.2"
|
||||
"@jest/types": "npm:30.5.1"
|
||||
"@types/node": "npm:*"
|
||||
ansi-escapes: "npm:^4.3.2"
|
||||
@@ -1480,18 +1485,18 @@ __metadata:
|
||||
fast-json-stable-stringify: "npm:^2.1.0"
|
||||
graceful-fs: "npm:^4.2.11"
|
||||
jest-changed-files: "npm:30.5.1"
|
||||
jest-config: "npm:30.5.1"
|
||||
jest-config: "npm:30.5.2"
|
||||
jest-haste-map: "npm:30.5.1"
|
||||
jest-message-util: "npm:30.5.1"
|
||||
jest-regex-util: "npm:30.5.0"
|
||||
jest-resolve: "npm:30.5.1"
|
||||
jest-resolve-dependencies: "npm:30.5.1"
|
||||
jest-runner: "npm:30.5.1"
|
||||
jest-runtime: "npm:30.5.1"
|
||||
jest-snapshot: "npm:30.5.1"
|
||||
jest-resolve-dependencies: "npm:30.5.2"
|
||||
jest-runner: "npm:30.5.2"
|
||||
jest-runtime: "npm:30.5.2"
|
||||
jest-snapshot: "npm:30.5.2"
|
||||
jest-util: "npm:30.5.1"
|
||||
jest-validate: "npm:30.5.1"
|
||||
jest-watcher: "npm:30.5.1"
|
||||
jest-watcher: "npm:30.5.2"
|
||||
pretty-format: "npm:30.5.1"
|
||||
slash: "npm:^3.0.0"
|
||||
peerDependencies:
|
||||
@@ -1499,7 +1504,7 @@ __metadata:
|
||||
peerDependenciesMeta:
|
||||
node-notifier:
|
||||
optional: true
|
||||
checksum: 10c0/a463de91ba0b0cfcbacb2f361abf0b02280740e93257d6f9d54383670aaab1522373cf2d502437d366d364331de7bbc735abed59c12afc63d4a7f41ba927892d
|
||||
checksum: 10c0/9fa38140cb0a3c0eafa2ebd0595a42c0bdb13c6b7dacb398fe214cbc6dd750d7498b84a54e48f829b49e319d3ef480d0b9e47f0c53e1758ee528ea1b8f968fe6
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -1517,48 +1522,48 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@jest/environment@npm:30.5.1":
|
||||
version: 30.5.1
|
||||
resolution: "@jest/environment@npm:30.5.1"
|
||||
"@jest/environment@npm:30.5.2":
|
||||
version: 30.5.2
|
||||
resolution: "@jest/environment@npm:30.5.2"
|
||||
dependencies:
|
||||
"@jest/fake-timers": "npm:30.5.1"
|
||||
"@jest/fake-timers": "npm:30.5.2"
|
||||
"@jest/types": "npm:30.5.1"
|
||||
"@types/node": "npm:*"
|
||||
jest-mock: "npm:30.5.1"
|
||||
checksum: 10c0/f8cd7e3827927aef443f6d96700685f6526df66339b963f7ed8b6f62cd92b524f85383cf955c798ca4e17bfd8ad74503b0d548e504322c323e9eae089bc5b639
|
||||
jest-mock: "npm:30.5.2"
|
||||
checksum: 10c0/f060f2d94dfccd7de4890a419e803735921d8358a3ecc8e424e5f6a632da80fc37372f6e54f1397876b721cec5bae2da515e6dce2ac6558bd90f0c1cbeb5c105
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@jest/expect-utils@npm:30.5.1":
|
||||
version: 30.5.1
|
||||
resolution: "@jest/expect-utils@npm:30.5.1"
|
||||
"@jest/expect-utils@npm:30.5.2":
|
||||
version: 30.5.2
|
||||
resolution: "@jest/expect-utils@npm:30.5.2"
|
||||
dependencies:
|
||||
"@jest/get-type": "npm:30.5.0"
|
||||
checksum: 10c0/8e154abddb5ff73cbd36d602b577fa7f64509ebcc2f5580794d813165f7ca9456b4d61f609d18b42de7647d0cfe1f275a36084d2c0bbf6818479a889f1afee17
|
||||
checksum: 10c0/0db00595907f6705c5acc8d10ee9d11d74960cd459beaae66bd7a1d6845c7df1d123295e957bb56b6882b380f2e7d55d277ced7646e0229fc4a67abeb713c048
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@jest/expect@npm:30.5.1":
|
||||
version: 30.5.1
|
||||
resolution: "@jest/expect@npm:30.5.1"
|
||||
"@jest/expect@npm:30.5.2":
|
||||
version: 30.5.2
|
||||
resolution: "@jest/expect@npm:30.5.2"
|
||||
dependencies:
|
||||
expect: "npm:30.5.1"
|
||||
jest-snapshot: "npm:30.5.1"
|
||||
checksum: 10c0/a6e8dd1491964b01859260607247583eb06cedbdf3b1e4bd3e7b257ef7fbf25e15ad303f60e280f70f045497fa1d82647e6167ad2d7bd46496b39727781bd825
|
||||
expect: "npm:30.5.2"
|
||||
jest-snapshot: "npm:30.5.2"
|
||||
checksum: 10c0/ceebb291be34707e3d2ac99bc5e4a5039927e01d28650b1dc51888dfa3963a3a75a3c72f0abe4df9aa243dc3b31af72e467072d75b52bd11b80a84ebe765d8f9
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@jest/fake-timers@npm:30.5.1":
|
||||
version: 30.5.1
|
||||
resolution: "@jest/fake-timers@npm:30.5.1"
|
||||
"@jest/fake-timers@npm:30.5.2":
|
||||
version: 30.5.2
|
||||
resolution: "@jest/fake-timers@npm:30.5.2"
|
||||
dependencies:
|
||||
"@jest/types": "npm:30.5.1"
|
||||
"@sinonjs/fake-timers": "npm:^15.4.0"
|
||||
"@types/node": "npm:*"
|
||||
jest-message-util: "npm:30.5.1"
|
||||
jest-mock: "npm:30.5.1"
|
||||
jest-mock: "npm:30.5.2"
|
||||
jest-util: "npm:30.5.1"
|
||||
checksum: 10c0/5af701f17c6909a5d5ec0db64a024ba0b8399e68fdbcb465bb3cb4ca61edaafed232fb60497b64b4181a1487d63fa10b0d11a5654cfeb2428360cbf10e97857d
|
||||
checksum: 10c0/c8ff08f541743210abaf07b75bfe6224458c816a500d5be954690fd1661cd14b054201dfe2a6ebdc0083290d4c03d73bbac4f3c1fbef5c3b16d1981642dfff57
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -1576,15 +1581,15 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@jest/globals@npm:30.5.1":
|
||||
version: 30.5.1
|
||||
resolution: "@jest/globals@npm:30.5.1"
|
||||
"@jest/globals@npm:30.5.2":
|
||||
version: 30.5.2
|
||||
resolution: "@jest/globals@npm:30.5.2"
|
||||
dependencies:
|
||||
"@jest/environment": "npm:30.5.1"
|
||||
"@jest/expect": "npm:30.5.1"
|
||||
"@jest/environment": "npm:30.5.2"
|
||||
"@jest/expect": "npm:30.5.2"
|
||||
"@jest/types": "npm:30.5.1"
|
||||
jest-mock: "npm:30.5.1"
|
||||
checksum: 10c0/7cc9ad8f382c244ef913398ffcae64fa1f2ebf3b7729022fdba12f4c04f75d4cd7440417ff900ba3cfbebd1b851ee11ecbf348e157320229bec8dfc8d595ca2b
|
||||
jest-mock: "npm:30.5.2"
|
||||
checksum: 10c0/e60738080d4866350b2152d98ddf99728cc1ac19983b80bea5d5ab219f82ef271fadd102b0cee2c01808367d6e054bea1c4ec4aa7c69e45b4e14b79a30f76538
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -1612,14 +1617,14 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@jest/reporters@npm:30.5.1":
|
||||
version: 30.5.1
|
||||
resolution: "@jest/reporters@npm:30.5.1"
|
||||
"@jest/reporters@npm:30.5.2":
|
||||
version: 30.5.2
|
||||
resolution: "@jest/reporters@npm:30.5.2"
|
||||
dependencies:
|
||||
"@bcoe/v8-coverage": "npm:^0.2.3"
|
||||
"@jest/console": "npm:30.5.1"
|
||||
"@jest/test-result": "npm:30.5.1"
|
||||
"@jest/transform": "npm:30.5.1"
|
||||
"@jest/console": "npm:30.5.2"
|
||||
"@jest/test-result": "npm:30.5.2"
|
||||
"@jest/transform": "npm:30.5.2"
|
||||
"@jest/types": "npm:30.5.1"
|
||||
"@jridgewell/trace-mapping": "npm:^0.3.31"
|
||||
"@types/node": "npm:*"
|
||||
@@ -1644,7 +1649,7 @@ __metadata:
|
||||
peerDependenciesMeta:
|
||||
node-notifier:
|
||||
optional: true
|
||||
checksum: 10c0/7e0fee38be99ae436572552398035d7c5f7cedede60569c9c6e3c5887982e0b8c3a049f9cf83f17ccfe4e19da085ab3a30de412206503e2617a7ee62233bddd8
|
||||
checksum: 10c0/be9c62eb48ecd8744226c65c4bcdfb2b2a807dbac451a0b136701aa6685b5566fbd4872874504da5d7c24d6686ed0afdcff02dc1ecd2d0231fd4cda0dc040eab
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -1678,45 +1683,45 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@jest/source-map@npm:30.5.0":
|
||||
version: 30.5.0
|
||||
resolution: "@jest/source-map@npm:30.5.0"
|
||||
"@jest/source-map@npm:30.5.2":
|
||||
version: 30.5.2
|
||||
resolution: "@jest/source-map@npm:30.5.2"
|
||||
dependencies:
|
||||
"@jridgewell/trace-mapping": "npm:^0.3.31"
|
||||
callsites: "npm:^3.1.0"
|
||||
convert-source-map: "npm:^2.0.0"
|
||||
graceful-fs: "npm:^4.2.11"
|
||||
checksum: 10c0/26e63b86abcbe439e83487d9f4fef0efc34033194264df19fda2c0d1152033e3e5fe5733e13c56aea74e7fc77971128d6c76d6a1cd5ad390ee46028fe9a6a97e
|
||||
checksum: 10c0/6d939ebec2a2a7322fd0c5d536810a4ac4fbf3700a47b6246829715791270386ba4e58b51f939532d061e06830cea3cc6c3026b2bb0234c9c6594df0fcb17495
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@jest/test-result@npm:30.5.1":
|
||||
version: 30.5.1
|
||||
resolution: "@jest/test-result@npm:30.5.1"
|
||||
"@jest/test-result@npm:30.5.2":
|
||||
version: 30.5.2
|
||||
resolution: "@jest/test-result@npm:30.5.2"
|
||||
dependencies:
|
||||
"@jest/console": "npm:30.5.1"
|
||||
"@jest/console": "npm:30.5.2"
|
||||
"@jest/types": "npm:30.5.1"
|
||||
"@types/istanbul-lib-coverage": "npm:^2.0.6"
|
||||
collect-v8-coverage: "npm:^1.0.2"
|
||||
checksum: 10c0/1563a0c0ac59985d49d1f67dec92b671581d3f6ae8d6b2faeb5668523062040a2665939d0625e3adfef5fa1abccd910f3b7de799a933a1880ec8cb6069b691e6
|
||||
checksum: 10c0/936ceb0a647e09eb00fa10bae0c19dd45c8029a1ba984ab4c22871fea68a72c0e5db9eebb48166af31c305b351978a2bcd23cbe59567587ca41c095d6c09c3c7
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@jest/test-sequencer@npm:30.5.1":
|
||||
version: 30.5.1
|
||||
resolution: "@jest/test-sequencer@npm:30.5.1"
|
||||
"@jest/test-sequencer@npm:30.5.2":
|
||||
version: 30.5.2
|
||||
resolution: "@jest/test-sequencer@npm:30.5.2"
|
||||
dependencies:
|
||||
"@jest/test-result": "npm:30.5.1"
|
||||
"@jest/test-result": "npm:30.5.2"
|
||||
graceful-fs: "npm:^4.2.11"
|
||||
jest-haste-map: "npm:30.5.1"
|
||||
slash: "npm:^3.0.0"
|
||||
checksum: 10c0/ea197d1fd59f7c4a991088a68972b2704c6d24e048be619b992a5fc107e72c567a1180e745404356fe0e9515df069ed86cf9ab56f399435736d5ceee03d0bc2c
|
||||
checksum: 10c0/de92712f0ce196a0e36ea1beb1b70aa12c76ccf31e4017f1377473d41c76a672a5b810b054f53ecbd8b3d085208aad56fa60d4574b823958d279175c9fc6ad31
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@jest/transform@npm:30.5.1":
|
||||
version: 30.5.1
|
||||
resolution: "@jest/transform@npm:30.5.1"
|
||||
"@jest/transform@npm:30.5.2":
|
||||
version: 30.5.2
|
||||
resolution: "@jest/transform@npm:30.5.2"
|
||||
dependencies:
|
||||
"@babel/core": "npm:^7.27.4"
|
||||
"@jest/types": "npm:30.5.1"
|
||||
@@ -1732,7 +1737,7 @@ __metadata:
|
||||
pirates: "npm:^4.0.7"
|
||||
slash: "npm:^3.0.0"
|
||||
write-file-atomic: "npm:^5.0.1"
|
||||
checksum: 10c0/560f48993ede78507dc53eb6e063d1decf139faa8267ed1900541fbe98dce684cc0d70897d09ab976c2bbe4dc4fe3844e4798221da65e40fa93c87ac9efc60f4
|
||||
checksum: 10c0/be3f9aa812a442402ed41a37d0f11d174a0a9037038dc1326c32d1d55e22fc7bc5f5146284c5a18db3da572afb81739f0a93d3f1d519e811d25dacaeb380c647
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -3925,11 +3930,11 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"babel-jest@npm:30.5.1":
|
||||
version: 30.5.1
|
||||
resolution: "babel-jest@npm:30.5.1"
|
||||
"babel-jest@npm:30.5.2":
|
||||
version: 30.5.2
|
||||
resolution: "babel-jest@npm:30.5.2"
|
||||
dependencies:
|
||||
"@jest/transform": "npm:30.5.1"
|
||||
"@jest/transform": "npm:30.5.2"
|
||||
"@types/babel__core": "npm:^7.20.5"
|
||||
babel-plugin-istanbul: "npm:^8.0.0"
|
||||
babel-preset-jest: "npm:30.5.0"
|
||||
@@ -3938,7 +3943,7 @@ __metadata:
|
||||
slash: "npm:^3.0.0"
|
||||
peerDependencies:
|
||||
"@babel/core": ^7.11.0 || ^8.0.0-0
|
||||
checksum: 10c0/ce3d18eb45443cb9351074fede247fc6ba7845e18ab4b9ee239a1c47560c939d8194d58f7a08d4ebc7fc1060b33189dd62d41972c68ccec3d82261313b98c6dc
|
||||
checksum: 10c0/1bba4a4068a5de10dc9d1300c7f22170ffa5e51af8ec145c3efa06c4703994b245cfc212f9961a60b53a6657334fd7266998340edaa65c195eaad37bd62fc43b
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -5452,17 +5457,17 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"expect@npm:30.5.1":
|
||||
version: 30.5.1
|
||||
resolution: "expect@npm:30.5.1"
|
||||
"expect@npm:30.5.2":
|
||||
version: 30.5.2
|
||||
resolution: "expect@npm:30.5.2"
|
||||
dependencies:
|
||||
"@jest/expect-utils": "npm:30.5.1"
|
||||
"@jest/expect-utils": "npm:30.5.2"
|
||||
"@jest/get-type": "npm:30.5.0"
|
||||
jest-matcher-utils: "npm:30.5.1"
|
||||
jest-matcher-utils: "npm:30.5.2"
|
||||
jest-message-util: "npm:30.5.1"
|
||||
jest-mock: "npm:30.5.1"
|
||||
jest-mock: "npm:30.5.2"
|
||||
jest-util: "npm:30.5.1"
|
||||
checksum: 10c0/351148b185c609a67c4ce5064572d02e7bba11febde47b5177e49fee7e6b680e945034c1ec9414d9fa1f7348a3eceb0d7429f9c9564c693e39c6d138f282370c
|
||||
checksum: 10c0/31bf2307499008f267c84992a8ea27f76e97f207f685075439aa12f60b93dd81d024e5fcb0142755ed499233056f27fa51d01843d04cba437dfe7588387c352f
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -6684,45 +6689,45 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"jest-circus@npm:30.5.1":
|
||||
version: 30.5.1
|
||||
resolution: "jest-circus@npm:30.5.1"
|
||||
"jest-circus@npm:30.5.2":
|
||||
version: 30.5.2
|
||||
resolution: "jest-circus@npm:30.5.2"
|
||||
dependencies:
|
||||
"@jest/environment": "npm:30.5.1"
|
||||
"@jest/expect": "npm:30.5.1"
|
||||
"@jest/test-result": "npm:30.5.1"
|
||||
"@jest/environment": "npm:30.5.2"
|
||||
"@jest/expect": "npm:30.5.2"
|
||||
"@jest/test-result": "npm:30.5.2"
|
||||
"@jest/types": "npm:30.5.1"
|
||||
"@types/node": "npm:*"
|
||||
chalk: "npm:^4.1.2"
|
||||
co: "npm:^4.6.0"
|
||||
dedent: "npm:^1.6.0"
|
||||
is-generator-fn: "npm:^2.1.0"
|
||||
jest-each: "npm:30.5.1"
|
||||
jest-matcher-utils: "npm:30.5.1"
|
||||
jest-each: "npm:30.5.2"
|
||||
jest-matcher-utils: "npm:30.5.2"
|
||||
jest-message-util: "npm:30.5.1"
|
||||
jest-runtime: "npm:30.5.1"
|
||||
jest-snapshot: "npm:30.5.1"
|
||||
jest-runtime: "npm:30.5.2"
|
||||
jest-snapshot: "npm:30.5.2"
|
||||
jest-util: "npm:30.5.1"
|
||||
p-limit: "npm:^3.1.0"
|
||||
pretty-format: "npm:30.5.1"
|
||||
pure-rand: "npm:^7.0.0"
|
||||
slash: "npm:^3.0.0"
|
||||
stack-utils: "npm:^2.0.6"
|
||||
checksum: 10c0/dc7ee7e5dcb8415545922372c9909f514a78c7211b14cb31e3064f4b7f4f9ecd9daf55a9702f8f3fa87899e5a70e27f82b8f58d4cac9e6f8fd685f1c06b390d5
|
||||
checksum: 10c0/e6a1467ab5080c2620cd2bcf47b8dab0402eb15c1322f966915adfbf37bb42b6be2fb75359de198ae489182441f846bde271dd5d44be81c25395d29a161cf3b6
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"jest-cli@npm:30.5.1":
|
||||
version: 30.5.1
|
||||
resolution: "jest-cli@npm:30.5.1"
|
||||
"jest-cli@npm:30.5.2":
|
||||
version: 30.5.2
|
||||
resolution: "jest-cli@npm:30.5.2"
|
||||
dependencies:
|
||||
"@jest/core": "npm:30.5.1"
|
||||
"@jest/test-result": "npm:30.5.1"
|
||||
"@jest/core": "npm:30.5.2"
|
||||
"@jest/test-result": "npm:30.5.2"
|
||||
"@jest/types": "npm:30.5.1"
|
||||
chalk: "npm:^4.1.2"
|
||||
exit-x: "npm:^0.2.2"
|
||||
import-local: "npm:^3.2.0"
|
||||
jest-config: "npm:30.5.1"
|
||||
jest-config: "npm:30.5.2"
|
||||
jest-util: "npm:30.5.1"
|
||||
jest-validate: "npm:30.5.1"
|
||||
yargs: "npm:^17.7.2"
|
||||
@@ -6733,31 +6738,31 @@ __metadata:
|
||||
optional: true
|
||||
bin:
|
||||
jest: bin/jest.js
|
||||
checksum: 10c0/f30d39dbed226ff39a1f79f7361bd1ee8e156e4ff8890b6ff860111398b0d16f148fada806d257e9412986ab054b2545fa8cd3c055db6140fcfe42ebfc9032c9
|
||||
checksum: 10c0/dfa69c5af0186bb9b5f057234e1412c366d694a809d87f65c973ce208cd9d7a93b854009d728d2dac96a27797dca8f5d132a38e95658ac9bbfbe6c9cf645bd5e
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"jest-config@npm:30.5.1":
|
||||
version: 30.5.1
|
||||
resolution: "jest-config@npm:30.5.1"
|
||||
"jest-config@npm:30.5.2":
|
||||
version: 30.5.2
|
||||
resolution: "jest-config@npm:30.5.2"
|
||||
dependencies:
|
||||
"@babel/core": "npm:^7.27.4"
|
||||
"@jest/get-type": "npm:30.5.0"
|
||||
"@jest/pattern": "npm:30.5.0"
|
||||
"@jest/test-sequencer": "npm:30.5.1"
|
||||
"@jest/test-sequencer": "npm:30.5.2"
|
||||
"@jest/types": "npm:30.5.1"
|
||||
babel-jest: "npm:30.5.1"
|
||||
babel-jest: "npm:30.5.2"
|
||||
chalk: "npm:^4.1.2"
|
||||
ci-info: "npm:^4.2.0"
|
||||
deepmerge: "npm:^4.3.1"
|
||||
glob: "npm:^13.0.6"
|
||||
graceful-fs: "npm:^4.2.11"
|
||||
jest-circus: "npm:30.5.1"
|
||||
jest-circus: "npm:30.5.2"
|
||||
jest-docblock: "npm:30.5.0"
|
||||
jest-environment-node: "npm:30.5.1"
|
||||
jest-environment-node: "npm:30.5.2"
|
||||
jest-regex-util: "npm:30.5.0"
|
||||
jest-resolve: "npm:30.5.1"
|
||||
jest-runner: "npm:30.5.1"
|
||||
jest-runner: "npm:30.5.2"
|
||||
jest-util: "npm:30.5.1"
|
||||
jest-validate: "npm:30.5.1"
|
||||
parse-json: "npm:^5.2.0"
|
||||
@@ -6775,19 +6780,19 @@ __metadata:
|
||||
optional: true
|
||||
ts-node:
|
||||
optional: true
|
||||
checksum: 10c0/c8c0c027cdc386d88825ba9a5db0d906a01c7f3096fc7e8198114c8ed4eb9d801b14d3aefc7a5a2a2b3260dc73a01ea83e1196e0abca3ffebb192eac16c49541
|
||||
checksum: 10c0/fc554f3009d8a516af41dd0f1ffa47dc78b1127822873c74cec3283a32189be5a1b74b656f9336833d2b509d20eddbd99ecd4b8aeb462bc6ad59246655c72530
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"jest-diff@npm:30.5.1":
|
||||
version: 30.5.1
|
||||
resolution: "jest-diff@npm:30.5.1"
|
||||
"jest-diff@npm:30.5.2":
|
||||
version: 30.5.2
|
||||
resolution: "jest-diff@npm:30.5.2"
|
||||
dependencies:
|
||||
"@jest/diff-sequences": "npm:30.5.0"
|
||||
"@jest/get-type": "npm:30.5.0"
|
||||
chalk: "npm:^4.1.2"
|
||||
pretty-format: "npm:30.5.1"
|
||||
checksum: 10c0/06e55c89249cd454f97b88c74ed24fa801646b9cf2b6dbc47c3c9976c6fcf677e8c8ecce2f7768ba2a03053d1640e94a3ad1016048dda2186b9a4069074e231c
|
||||
checksum: 10c0/b11524e4b7a0c7b83c5b6a3775f705b1002bf086c211e9bd2e481686e3fa0ee1a87e61fa7453232aef2808f085f254f4f8fcbb41b69681d1b9384ec321cf6002
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -6812,31 +6817,32 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"jest-each@npm:30.5.1":
|
||||
version: 30.5.1
|
||||
resolution: "jest-each@npm:30.5.1"
|
||||
"jest-each@npm:30.5.2":
|
||||
version: 30.5.2
|
||||
resolution: "jest-each@npm:30.5.2"
|
||||
dependencies:
|
||||
"@jest/get-type": "npm:30.5.0"
|
||||
"@jest/types": "npm:30.5.1"
|
||||
chalk: "npm:^4.1.2"
|
||||
jest-regex-util: "npm:30.5.0"
|
||||
jest-util: "npm:30.5.1"
|
||||
pretty-format: "npm:30.5.1"
|
||||
checksum: 10c0/fc61fc731aae1f749fa392780679ed943dd51ff4dc3e5b9db67c3b6c9aa2ed272cfe234625869b5d6cbb1175766a67dc378a9c9872394536843d42ce3b7232f0
|
||||
checksum: 10c0/25cc136905719a0b97d102b979eaf5ccc21712a29c5b0fca5a9024387a28a0cef7446d70589aa35c284226955446cc6dfde96fc9d5162f1579978f3938335261
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"jest-environment-node@npm:30.5.1":
|
||||
version: 30.5.1
|
||||
resolution: "jest-environment-node@npm:30.5.1"
|
||||
"jest-environment-node@npm:30.5.2":
|
||||
version: 30.5.2
|
||||
resolution: "jest-environment-node@npm:30.5.2"
|
||||
dependencies:
|
||||
"@jest/environment": "npm:30.5.1"
|
||||
"@jest/fake-timers": "npm:30.5.1"
|
||||
"@jest/environment": "npm:30.5.2"
|
||||
"@jest/fake-timers": "npm:30.5.2"
|
||||
"@jest/types": "npm:30.5.1"
|
||||
"@types/node": "npm:*"
|
||||
jest-mock: "npm:30.5.1"
|
||||
jest-mock: "npm:30.5.2"
|
||||
jest-util: "npm:30.5.1"
|
||||
jest-validate: "npm:30.5.1"
|
||||
checksum: 10c0/bdef3e7b37eaca8351268ff1128020834c959772daf47f90c06b56d08a11e05e52635c7d7127a661f3a652f8aea77699a5f463dec6205edfff28a0503016f190
|
||||
checksum: 10c0/9dedafbc92232686277e232ed39c16e272fb8985b715761ea4963b1363317f0e1f52dbc55bd175cb88bf033a06e29a9154bfe192c231f5c2d483db2c693242e9
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -6869,15 +6875,15 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"jest-matcher-utils@npm:30.5.1":
|
||||
version: 30.5.1
|
||||
resolution: "jest-matcher-utils@npm:30.5.1"
|
||||
"jest-matcher-utils@npm:30.5.2":
|
||||
version: 30.5.2
|
||||
resolution: "jest-matcher-utils@npm:30.5.2"
|
||||
dependencies:
|
||||
"@jest/get-type": "npm:30.5.0"
|
||||
chalk: "npm:^4.1.2"
|
||||
jest-diff: "npm:30.5.1"
|
||||
jest-diff: "npm:30.5.2"
|
||||
pretty-format: "npm:30.5.1"
|
||||
checksum: 10c0/5cd6bf25c1fdf4e9439b69ed3911caefe035f2f2180fb6dbb9b648af1a2102e2546b4cc967394d63bb073d64ab4f025f81af5bf94b52acf314d45b9fad90e6fd
|
||||
checksum: 10c0/30f075c6f897335415817ad25e6caae8994de87c31ad59ae8f501e2c8bf6c925635abb481c562436b6add42a784902f105ee2fa0eca3357bd26e038f7e004cb8
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -6899,15 +6905,15 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"jest-mock@npm:30.5.1":
|
||||
version: 30.5.1
|
||||
resolution: "jest-mock@npm:30.5.1"
|
||||
"jest-mock@npm:30.5.2":
|
||||
version: 30.5.2
|
||||
resolution: "jest-mock@npm:30.5.2"
|
||||
dependencies:
|
||||
"@jest/expect-utils": "npm:30.5.1"
|
||||
"@jest/expect-utils": "npm:30.5.2"
|
||||
"@jest/types": "npm:30.5.1"
|
||||
"@types/node": "npm:*"
|
||||
jest-util: "npm:30.5.1"
|
||||
checksum: 10c0/58b1a7f93142147949e1cf0fd5a0fbd91d8fae466c24950aaf7ea766aeb0c657f48add172a5b614240a77e9f652bf0cecd8365d0fb3aac9b81a938e983f97f16
|
||||
checksum: 10c0/24cc9ac6449c536ef5009c531e14ee6b145f5d68db6e4c5616a8f775c5c81173e83e2c6c47922d413da4dbf804eab555b91ab424b0bf918495ee1b29d8a8ebaa
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -6918,13 +6924,13 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"jest-resolve-dependencies@npm:30.5.1":
|
||||
version: 30.5.1
|
||||
resolution: "jest-resolve-dependencies@npm:30.5.1"
|
||||
"jest-resolve-dependencies@npm:30.5.2":
|
||||
version: 30.5.2
|
||||
resolution: "jest-resolve-dependencies@npm:30.5.2"
|
||||
dependencies:
|
||||
jest-regex-util: "npm:30.5.0"
|
||||
jest-snapshot: "npm:30.5.1"
|
||||
checksum: 10c0/cc0a2031ec36be9b1986d595798340e751285f868f1b48912c2f5275a333d2b2df9421beea2925dd60db0d63de4f4c195070f66805d0b212c1c1948b1ab0f6af
|
||||
jest-snapshot: "npm:30.5.2"
|
||||
checksum: 10c0/9015f81e25bdb10a04a26350ce8deca4d389394ea07cb3b3ba63e567ad0ed91bfcc27e7048289faaaa5865519e4ed8a14c238685d38f33bda5576298852c7ac0
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -6943,15 +6949,15 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"jest-runner@npm:30.5.1":
|
||||
version: 30.5.1
|
||||
resolution: "jest-runner@npm:30.5.1"
|
||||
"jest-runner@npm:30.5.2":
|
||||
version: 30.5.2
|
||||
resolution: "jest-runner@npm:30.5.2"
|
||||
dependencies:
|
||||
"@jest/console": "npm:30.5.1"
|
||||
"@jest/environment": "npm:30.5.1"
|
||||
"@jest/source-map": "npm:30.5.0"
|
||||
"@jest/test-result": "npm:30.5.1"
|
||||
"@jest/transform": "npm:30.5.1"
|
||||
"@jest/console": "npm:30.5.2"
|
||||
"@jest/environment": "npm:30.5.2"
|
||||
"@jest/source-map": "npm:30.5.2"
|
||||
"@jest/test-result": "npm:30.5.2"
|
||||
"@jest/transform": "npm:30.5.2"
|
||||
"@jest/types": "npm:30.5.1"
|
||||
"@types/node": "npm:*"
|
||||
chalk: "npm:^4.1.2"
|
||||
@@ -6959,30 +6965,30 @@ __metadata:
|
||||
exit-x: "npm:^0.2.2"
|
||||
graceful-fs: "npm:^4.2.11"
|
||||
jest-docblock: "npm:30.5.0"
|
||||
jest-environment-node: "npm:30.5.1"
|
||||
jest-environment-node: "npm:30.5.2"
|
||||
jest-haste-map: "npm:30.5.1"
|
||||
jest-leak-detector: "npm:30.5.1"
|
||||
jest-message-util: "npm:30.5.1"
|
||||
jest-resolve: "npm:30.5.1"
|
||||
jest-runtime: "npm:30.5.1"
|
||||
jest-runtime: "npm:30.5.2"
|
||||
jest-util: "npm:30.5.1"
|
||||
jest-watcher: "npm:30.5.1"
|
||||
jest-watcher: "npm:30.5.2"
|
||||
jest-worker: "npm:30.5.1"
|
||||
p-limit: "npm:^3.1.0"
|
||||
checksum: 10c0/37b703fefc9d6f410d3fa659f9601c9e5238e5089c83740038e5e73f8a2ea3bde6f06c4ca4823cf59dbe253ab85eb0fbe4b29d7669d52ce917a49098ec886695
|
||||
checksum: 10c0/a0a38536df5448905f517e74abd4682e8f48bfb7912b07b29da4daa94c15e468f7ac732806dde7ed4443b07e0fba28c469446009dd2344b52df96913d7db9f24
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"jest-runtime@npm:30.5.1":
|
||||
version: 30.5.1
|
||||
resolution: "jest-runtime@npm:30.5.1"
|
||||
"jest-runtime@npm:30.5.2":
|
||||
version: 30.5.2
|
||||
resolution: "jest-runtime@npm:30.5.2"
|
||||
dependencies:
|
||||
"@jest/environment": "npm:30.5.1"
|
||||
"@jest/fake-timers": "npm:30.5.1"
|
||||
"@jest/globals": "npm:30.5.1"
|
||||
"@jest/source-map": "npm:30.5.0"
|
||||
"@jest/test-result": "npm:30.5.1"
|
||||
"@jest/transform": "npm:30.5.1"
|
||||
"@jest/environment": "npm:30.5.2"
|
||||
"@jest/fake-timers": "npm:30.5.2"
|
||||
"@jest/globals": "npm:30.5.2"
|
||||
"@jest/source-map": "npm:30.5.2"
|
||||
"@jest/test-result": "npm:30.5.2"
|
||||
"@jest/transform": "npm:30.5.2"
|
||||
"@jest/types": "npm:30.5.1"
|
||||
"@types/node": "npm:*"
|
||||
chalk: "npm:^4.1.2"
|
||||
@@ -6993,43 +6999,43 @@ __metadata:
|
||||
graceful-fs: "npm:^4.2.11"
|
||||
jest-haste-map: "npm:30.5.1"
|
||||
jest-message-util: "npm:30.5.1"
|
||||
jest-mock: "npm:30.5.1"
|
||||
jest-mock: "npm:30.5.2"
|
||||
jest-regex-util: "npm:30.5.0"
|
||||
jest-resolve: "npm:30.5.1"
|
||||
jest-snapshot: "npm:30.5.1"
|
||||
jest-snapshot: "npm:30.5.2"
|
||||
jest-util: "npm:30.5.1"
|
||||
slash: "npm:^3.0.0"
|
||||
strip-bom: "npm:^4.0.0"
|
||||
checksum: 10c0/6d9ddfbca0124d08dfef2c38ba56506ad29292dfa55d1c5221c57dade2e3b5187628741736608f42b95d8c0ba52bfa4163d3ba3e752bbc1cdee3e7ae858e3f38
|
||||
checksum: 10c0/c1cb0f5eb8d55d768ece011dbe1bd5197ec4ca2497ed0c1a6d38ea4ba835fa3fd69a8ef6e95650f3f9e181d4f586d8596d14318f7cf8afd3e73c241c03c8dcac
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"jest-snapshot@npm:30.5.1":
|
||||
version: 30.5.1
|
||||
resolution: "jest-snapshot@npm:30.5.1"
|
||||
"jest-snapshot@npm:30.5.2":
|
||||
version: 30.5.2
|
||||
resolution: "jest-snapshot@npm:30.5.2"
|
||||
dependencies:
|
||||
"@babel/core": "npm:^7.27.4"
|
||||
"@babel/generator": "npm:^7.27.5"
|
||||
"@babel/plugin-syntax-jsx": "npm:^7.27.1"
|
||||
"@babel/plugin-syntax-typescript": "npm:^7.27.1"
|
||||
"@babel/types": "npm:^7.27.3"
|
||||
"@jest/expect-utils": "npm:30.5.1"
|
||||
"@jest/expect-utils": "npm:30.5.2"
|
||||
"@jest/get-type": "npm:30.5.0"
|
||||
"@jest/snapshot-utils": "npm:30.5.1"
|
||||
"@jest/transform": "npm:30.5.1"
|
||||
"@jest/transform": "npm:30.5.2"
|
||||
"@jest/types": "npm:30.5.1"
|
||||
babel-preset-current-node-syntax: "npm:^1.2.0"
|
||||
chalk: "npm:^4.1.2"
|
||||
expect: "npm:30.5.1"
|
||||
expect: "npm:30.5.2"
|
||||
graceful-fs: "npm:^4.2.11"
|
||||
jest-diff: "npm:30.5.1"
|
||||
jest-matcher-utils: "npm:30.5.1"
|
||||
jest-diff: "npm:30.5.2"
|
||||
jest-matcher-utils: "npm:30.5.2"
|
||||
jest-message-util: "npm:30.5.1"
|
||||
jest-util: "npm:30.5.1"
|
||||
pretty-format: "npm:30.5.1"
|
||||
semver: "npm:^7.7.2"
|
||||
synckit: "npm:^0.11.8"
|
||||
checksum: 10c0/a0733a3786d4b721db835b4340b33717181ded7e83287303008d93c93d5ffacce74f2a15c9c4b9a4c458041d00473484687e07e42c99e217c7ddabce16a3ebfb
|
||||
checksum: 10c0/cef6b102f743cbefd5d8ad0cf15b5694c09522904c43ace56537990475805b7c6eaebf82e6c5564e225e8db7617ebdda77340acc9a47d9909f338fbb84fca345
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -7061,11 +7067,11 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"jest-watcher@npm:30.5.1":
|
||||
version: 30.5.1
|
||||
resolution: "jest-watcher@npm:30.5.1"
|
||||
"jest-watcher@npm:30.5.2":
|
||||
version: 30.5.2
|
||||
resolution: "jest-watcher@npm:30.5.2"
|
||||
dependencies:
|
||||
"@jest/test-result": "npm:30.5.1"
|
||||
"@jest/test-result": "npm:30.5.2"
|
||||
"@jest/types": "npm:30.5.1"
|
||||
"@types/node": "npm:*"
|
||||
ansi-escapes: "npm:^4.3.2"
|
||||
@@ -7073,7 +7079,7 @@ __metadata:
|
||||
emittery: "npm:^0.13.1"
|
||||
jest-util: "npm:30.5.1"
|
||||
string-length: "npm:^4.0.2"
|
||||
checksum: 10c0/7cfdb9eb43374ee5285c8018129af96a4347d492374a5c7bf3f9fe679743c00efde5f7d4095fb4353157ba44be1725c864ed62029f82ddcfd02a53c1feded827
|
||||
checksum: 10c0/50909a1db41bfe3cc114215e4a7dbfa6ba16df328a49c95dca71cc042fd98824e57e2a1e8c00d8c802f3e15fbeda7d4fd735902da0b6afe960d835a0b1d469be
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -7090,14 +7096,14 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"jest@npm:30.5.1":
|
||||
version: 30.5.1
|
||||
resolution: "jest@npm:30.5.1"
|
||||
"jest@npm:30.5.2":
|
||||
version: 30.5.2
|
||||
resolution: "jest@npm:30.5.2"
|
||||
dependencies:
|
||||
"@jest/core": "npm:30.5.1"
|
||||
"@jest/core": "npm:30.5.2"
|
||||
"@jest/types": "npm:30.5.1"
|
||||
import-local: "npm:^3.2.0"
|
||||
jest-cli: "npm:30.5.1"
|
||||
jest-cli: "npm:30.5.2"
|
||||
peerDependencies:
|
||||
node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
|
||||
peerDependenciesMeta:
|
||||
@@ -7105,7 +7111,7 @@ __metadata:
|
||||
optional: true
|
||||
bin:
|
||||
jest: bin/jest.js
|
||||
checksum: 10c0/3837af2b884e2f99b255106edcf6d0543f2350124034d4f84b276f90cf1a72b5f5717fb01affcf80b0ccc0b3bf8d2e5c7c297140ca22a5b657765e3d307a0445
|
||||
checksum: 10c0/8aaf72602bbb7eedc4430e5a9c11e4e75cf7d56e2f95a08c039c021f0cdbe9d11596c32de193bf7e8ca106e75b1dbe8a14cda38b8dd9b1fd9da21bb24f688c77
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -9791,7 +9797,7 @@ __metadata:
|
||||
"@tsconfig/bases": "npm:1.0.28"
|
||||
"@types/node": "npm:24.19.1"
|
||||
ctix: "npm:2.8.2"
|
||||
jest: "npm:30.5.1"
|
||||
jest: "npm:30.5.2"
|
||||
lerna: "npm:9.0.7"
|
||||
oxfmt: "npm:0.67.0"
|
||||
oxlint: "npm:1.82.0"
|
||||
|
||||
Reference in new issue
Block a user